commit ecd64aad539930d305a1a41dc71b2f0f0d84509f Author: maher Date: Thu Oct 30 13:13:41 2025 +0100 first commit diff --git a/.editorconfig b/.editorconfig new file mode 100755 index 0000000..6699076 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +# editorconfig.org + +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[{compose.yaml,compose.*.yaml}] +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false diff --git a/.env b/.env new file mode 100755 index 0000000..03d267b --- /dev/null +++ b/.env @@ -0,0 +1,35 @@ +# In all environments, the following files are loaded if they exist, +# the latter taking precedence over the former: +# +# * .env contains default values for the environment variables needed by the app +# * .env.local uncommitted file with local overrides +# * .env.$APP_ENV committed environment-specific defaults +# * .env.$APP_ENV.local uncommitted environment-specific overrides +# +# Real environment variables win over .env files. +# +# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES. +# https://symfony.com/doc/current/configuration/secrets.html +# +# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2). +# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration + +###> symfony/framework-bundle ### +APP_ENV=dev +APP_SECRET= +###< symfony/framework-bundle ### + +###> doctrine/doctrine-bundle ### +DATABASE_URL=mysql://root:root@172.28.2.1:3306/promo?mariadb-10.4.10 +###< doctrine/doctrine-bundle ### + +###> symfony/messenger ### +# Choose one of the transports below +# MESSENGER_TRANSPORT_DSN=amqp://guest:guest@localhost:5672/%2f/messages +# MESSENGER_TRANSPORT_DSN=redis://localhost:6379/messages +MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0 +###< symfony/messenger ### + +###> symfony/mailer ### +MAILER_DSN=null://null +###< symfony/mailer ### diff --git a/.env.dev b/.env.dev new file mode 100755 index 0000000..0adcd82 --- /dev/null +++ b/.env.dev @@ -0,0 +1,4 @@ + +###> symfony/framework-bundle ### +APP_SECRET=3191b298af5c12ea94c4203984c230b4 +###< symfony/framework-bundle ### diff --git a/.env.test b/.env.test new file mode 100755 index 0000000..64bd111 --- /dev/null +++ b/.env.test @@ -0,0 +1,3 @@ +# define your env variables for the test env here +KERNEL_CLASS='App\Kernel' +APP_SECRET='$ecretf0rt3st' diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..a666528 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ + +###> symfony/framework-bundle ### +/.env.local +/.env.local.php +/.env.*.local +/config/secrets/prod/prod.decrypt.private.php +/public/bundles/ +/var/ +/vendor/ +###< symfony/framework-bundle ### + +###> phpunit/phpunit ### +/phpunit.xml +/.phpunit.cache/ +###< phpunit/phpunit ### + +###> symfony/asset-mapper ### +/public/assets/ +/assets/vendor/ +###< symfony/asset-mapper ### + +###> symfony/webpack-encore-bundle ### +/node_modules/ +/public/build/ +npm-debug.log +yarn-error.log +###< symfony/webpack-encore-bundle ### diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/assets/bootstrap.js b/assets/bootstrap.js new file mode 100755 index 0000000..f20040b --- /dev/null +++ b/assets/bootstrap.js @@ -0,0 +1,11 @@ +import { startStimulusApp } from '@symfony/stimulus-bridge'; + +// Registers Stimulus controllers from controllers.json and in the controllers/ directory +export const app = startStimulusApp(require.context( + '@symfony/stimulus-bridge/lazy-controller-loader!./controllers', + true, + /\.[jt]sx?$/ +)); + +// register any custom, 3rd party controllers here +// app.register('some_controller_name', SomeImportedController); \ No newline at end of file diff --git a/assets/controllers.json b/assets/controllers.json new file mode 100755 index 0000000..a1c6e90 --- /dev/null +++ b/assets/controllers.json @@ -0,0 +1,4 @@ +{ + "controllers": [], + "entrypoints": [] +} diff --git a/assets/controllers/hello_controller.js b/assets/controllers/hello_controller.js new file mode 100755 index 0000000..e847027 --- /dev/null +++ b/assets/controllers/hello_controller.js @@ -0,0 +1,16 @@ +import { Controller } from '@hotwired/stimulus'; + +/* + * This is an example Stimulus controller! + * + * Any element with a data-controller="hello" attribute will cause + * this controller to be executed. The name "hello" comes from the filename: + * hello_controller.js -> "hello" + * + * Delete this file or adapt it for your use! + */ +export default class extends Controller { + connect() { + this.element.textContent = 'Hello Stimulus! Edit me in assets/controllers/hello_controller.js'; + } +} diff --git a/assets/javascript/backend/annonce.js b/assets/javascript/backend/annonce.js new file mode 100644 index 0000000..f82388b --- /dev/null +++ b/assets/javascript/backend/annonce.js @@ -0,0 +1,397 @@ +import "jquery-ui"; +import 'datatables.net-bs5'; + +import 'cropperjs/dist/cropper.css'; +import "jquery-cropper/dist/jquery-cropper.js"; + + + +if(typeof pathUplodImageAdd !== 'undefined'){ + + uploderImagesAnnonce(); + +} + + + + + +function uploderImagesAnnonce() +{ + let cropper; + let base64Home; + let base64Search; + let base64Detail1; + let base64Detail2; + let base64Detail3; + let base64Detail4; + + + $( "#resize-image" ).click(function() { + + let typeImage = $("#imgPreviewCropper").attr("data-type-img"); + + if(typeImage == "home"){ + + base64Home = $("#imgPreviewCropper").cropper('getCroppedCanvas', {width: widthImgAccueil, height: heightImgAccueil}).toDataURL('image/jpeg', 1); + + $('#img-preview-home').attr('src', base64Home); + + }else if(typeImage == "search"){ + + base64Search = $("#imgPreviewCropper").cropper('getCroppedCanvas', {width: 438, height: 240}).toDataURL('image/jpeg', 1); + $('#img-preview-search').attr('src', base64Search); + } + $('#cropperModal').modal('hide'); + }); + + + /***************************************************************************** */ + + $("#upload_image_accueil").on('change', function(e) { + const file = e.target.files[0]; + + if (file) { + let reader = new FileReader(); + + reader.onload = function (event) { + + $("#imgPreviewCropper").attr("src", event.target.result); + $("#imgPreviewCropper").attr("data-type-img", "home"); + + var image = new Image(); + image.src = reader.result; + image.onload = function() { + + if(image.width != widthImgAccueil){ + $('#imgPreviewCropper').cropper('destroy'); + + cropper = $("#imgPreviewCropper").cropper({ + minContainerWidth: widthImgAccueil, + minContainerHeight: heightImgAccueil, + minCropBoxWidth: widthImgAccueil, + minCropBoxHeight: heightImgAccueil, + zoomable: true, + dragMode: 'move', + }); + + if(largeurAnnonce == 1){ + $('.modal-dialog').css({'max-width':"476px"}); + }else if(largeurAnnonce == 2){ + $('.modal-dialog').css({'max-width':"914px"}); + }else if(largeurAnnonce == 3){ + $('.modal-dialog').css({'max-width':"1352px"}); + }else if(largeurAnnonce == 4){ + $('.modal-dialog').css({'max-width':"1790px"}); + } + + $('#cropperModal').modal('show'); + + }else{ + base64Home = event.target.result; + $("#img-preview-home").attr("src", event.target.result); + } + }; + }; + reader.readAsDataURL(file); + $("#progress-bar-accueil").css({'width':"0%"}); + $("#progress-bar-accueil").empty().append("0%"); + } + }); + + $( "#submit-image-accueil" ).click(function() { + $.ajax({ + url: pathUplodImageAdd, + type: 'POST', + data: {type:'home', image64:base64Home}, + xhr: function() { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.addEventListener('progress', function(evt) { + var percent = (evt.loaded / evt.total) * 100; + $("#progress-bar-accueil").css({'width': percent + "%"}); + $("#progress-bar-accueil").empty().append(percent + "%"); + }, false); + } + return xhr; + }, + success: function() { + $("#progress-bar-accueil").empty().append("Terminer"); + } + }); + }); + + + /****************************************************************************** */ + + $("#upload_image_search").on('change', function(e) { + const file = e.target.files[0]; + + if (file) { + let reader = new FileReader(); + + reader.onload = function (event) { + + $("#imgPreviewCropper").attr("src", event.target.result); + $("#imgPreviewCropper").attr("data-type-img", "search"); + + var image = new Image(); + image.src = reader.result; + image.onload = function() { + if(image.width != widthImgAccueil){ + $('#imgPreviewCropper').cropper('destroy'); + + cropper = $("#imgPreviewCropper").cropper({ + minContainerWidth: 438, + minContainerHeight: 240, + minCropBoxWidth: 438, + minCropBoxHeight: 240, + zoomable: true, + dragMode: 'move', + }); + + $('.modal-dialog').css({'max-width':"476px"}); + $('#cropperModal').modal('show'); + }else{ + base64Search = event.target.result; + $("#img-preview-search").attr("src", event.target.result); + } + }; + }; + reader.readAsDataURL(file); + $("#progress-bar-search").css({'width':"0%"}); + $("#progress-bar-search").empty().append("0%"); + } + }); + + + + $( "#submit-image-search" ).click(function() { + $.ajax({ + url: pathUplodImageAdd, + type: 'POST', + data: {type:'search', image64:base64Search}, + xhr: function() { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.addEventListener('progress', function(evt) { + var percent = (evt.loaded / evt.total) * 100; + $("#progress-bar-search").css({'width': percent + "%"}); + $("#progress-bar-search").empty().append(percent + "%"); + }, false); + } + return xhr; + }, + success: function() { + $("#progress-bar-search").empty().append("Terminer"); + } + }); + }); + + + /*********************************************************************************** */ + + + $("#upload_image_detail1").on('change', function(e) { + + const file = e.target.files[0]; + + if (file) { + let reader = new FileReader(); + + reader.onloadend = function (event) { + + $("#img-preview-detail1").attr("src", event.target.result); + + base64Detail1 = event.target.result; + + //console.log(base64Detail1); + }; + reader.readAsDataURL(file); + + $("#progress-bar-detail1").css({'width':"0%"}); + $("#progress-bar-detail1").empty().append("0%"); + } + }); + + + + $( "#submit-image-detail1" ).click(function() { + $.ajax({ + url: pathUplodImageAdd, + type: 'POST', + data: {type:'detail1', image64:base64Detail1}, + xhr: function() { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.addEventListener('progress', function(evt) { + var percent = (evt.loaded / evt.total) * 100; + $("#progress-bar-detail1").css({'width': percent + "%"}); + $("#progress-bar-detail1").empty().append(percent + "%"); + }, false); + } + return xhr; + }, + success: function() { + $("#progress-bar-detail1").empty().append("Terminer"); + } + }); + }); + + + /******************************************************************************** */ + + + $("#upload_image_detail2").on('change', function(e) { + + const file = e.target.files[0]; + + if (file) { + let reader = new FileReader(); + + reader.onloadend = function (event) { + + $("#img-preview-detail2").attr("src", event.target.result); + + base64Detail2 = event.target.result; + + //console.log(base64Detail2); + }; + reader.readAsDataURL(file); + + $("#progress-bar-detail2").css({'width':"0%"}); + $("#progress-bar-detail2").empty().append("0%"); + } + }); + + + + $( "#submit-image-detail2" ).click(function() { + $.ajax({ + url: pathUplodImageAdd, + type: 'POST', + data: {type:'detail2', image64:base64Detail2}, + xhr: function() { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.addEventListener('progress', function(evt) { + var percent = (evt.loaded / evt.total) * 100; + $("#progress-bar-detail2").css({'width': percent + "%"}); + $("#progress-bar-detail2").empty().append(percent + "%"); + }, false); + } + return xhr; + }, + success: function() { + $("#progress-bar-detail2").empty().append("Terminer"); + } + }); + }); + + + /*********************************************************************** */ + + $("#upload_image_detail3").on('change', function(e) { + + const file = e.target.files[0]; + + if (file) { + let reader = new FileReader(); + + reader.onloadend = function (event) { + + $("#img-preview-detail3").attr("src", event.target.result); + + base64Detail3 = event.target.result; + + //console.log(base64Detail3); + }; + reader.readAsDataURL(file); + + $("#progress-bar-detail3").css({'width':"0%"}); + $("#progress-bar-detail3").empty().append("0%"); + } + }); + + + + $( "#submit-image-detail3" ).click(function() { + $.ajax({ + url: pathUplodImageAdd, + type: 'POST', + data: {type:'detail3', image64:base64Detail3}, + xhr: function() { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.addEventListener('progress', function(evt) { + var percent = (evt.loaded / evt.total) * 100; + $("#progress-bar-detail3").css({'width': percent + "%"}); + $("#progress-bar-detail3").empty().append(percent + "%"); + }, false); + } + return xhr; + }, + success: function() { + $("#progress-bar-detail3").empty().append("Terminer"); + } + }); + }); + + +/**************************************************************************** */ + + $("#upload_image_detail4").on('change', function(e) { + + const file = e.target.files[0]; + + if (file) { + let reader = new FileReader(); + + reader.onloadend = function (event) { + + $("#img-preview-detail4").attr("src", event.target.result); + + base64Detail4 = event.target.result; + + //console.log(base64Detail4); + }; + reader.readAsDataURL(file); + + $("#progress-bar-detail4").css({'width':"0%"}); + $("#progress-bar-detail4").empty().append("0%"); + } + }); + + + + $( "#submit-image-detail4" ).click(function() { + $.ajax({ + url: pathUplodImageAdd, + type: 'POST', + data: {type:'detail4', image64:base64Detail4}, + xhr: function() { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.addEventListener('progress', function(evt) { + var percent = (evt.loaded / evt.total) * 100; + $("#progress-bar-detail4").css({'width': percent + "%"}); + $("#progress-bar-detail4").empty().append(percent + "%"); + }, false); + } + return xhr; + }, + success: function() { + $("#progress-bar-detail4").empty().append("Terminer"); + } + }); + }); + + +} + + +$('#dataTableAnnonce').DataTable({ + language: { + url: '../../assets/json/fr-FR.json', + }, +}); \ No newline at end of file diff --git a/assets/javascript/backend/article.js b/assets/javascript/backend/article.js new file mode 100644 index 0000000..398c071 --- /dev/null +++ b/assets/javascript/backend/article.js @@ -0,0 +1,308 @@ +$( "#article_limit_type_0" ).click(function() { + $('#article-limita-date').css('display','block'); + $('#article-limita-quanti').css('display',"none"); + $('#article_limit_quantite').val(''); +}); + +$( "#article_limit_type_1" ).click(function() { + $('#article-limita-date').css('display','none'); + $('#article-limita-quanti').css('display',"block"); + $('#article_limit_date').val(''); +}); + + + +if(typeof pathArticleUplodImageAdd !== 'undefined'){ + + uploderImagesArticle(); + +} + +function uploderImagesArticle(){ + + let cropper; + let base64Default; + let base64Detail1; + let base64Detail2; + let base64Detail3; + let base64Detail4; + + + $( "#resize-image" ).click(function() { + + let typeImage = $("#imgPreviewCropper").attr("data-type-img"); + + if(typeImage == "default"){ + + base64Default = $("#imgPreviewCropper").cropper('getCroppedCanvas', {width: 438, height: 240}).toDataURL('image/jpeg', 1); + $('#img-preview-default').attr('src', base64Default); + } + $('#cropperModal').modal('hide'); + }); + +/***************************************************************************** */ + + $("#upload_image_default").on('change', function(e) { + const file = e.target.files[0]; + + if (file) { + let reader = new FileReader(); + + reader.onload = function (event) { + + $("#imgPreviewCropper").attr("src", event.target.result); + $("#imgPreviewCropper").attr("data-type-img", "default"); + + var image = new Image(); + image.src = reader.result; + image.onload = function() { + + if(image.width != 438){ + $('#imgPreviewCropper').cropper('destroy'); + + cropper = $("#imgPreviewCropper").cropper({ + minContainerWidth: 438, + minContainerHeight: 240, + minCropBoxWidth: 438, + minCropBoxHeight: 240, + zoomable: true, + dragMode: 'move', + }); + + $('.modal-dialog').css({'max-width':"476px"}); + $('#cropperModal').modal('show'); + }else{ + base64Default = event.target.result; + $("#img-preview-default").attr("src", event.target.result); + } + }; + }; + reader.readAsDataURL(file); + $("#progress-bar-default").css({'width':"0%"}); + $("#progress-bar-default").empty().append("0%"); + } + }); + + + + $( "#submit-image-default" ).click(function() { + $.ajax({ + url: pathArticleUplodImageAdd, + type: 'POST', + data: {type:'default', image64:base64Default}, + xhr: function() { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.addEventListener('progress', function(evt) { + var percent = (evt.loaded / evt.total) * 100; + $("#progress-bar-default").css({'width': percent + "%"}); + $("#progress-bar-default").empty().append(percent + "%"); + }, false); + } + return xhr; + }, + success: function() { + $("#progress-bar-default").empty().append("Terminer"); + } + }); + }); + +/****************************************************************************** */ + + +$("#upload_image_detail1").on('change', function(e) { + + const file = e.target.files[0]; + + if (file) { + let reader = new FileReader(); + + reader.onloadend = function (event) { + + $("#img-preview-detail1").attr("src", event.target.result); + + base64Detail1 = event.target.result; + }; + reader.readAsDataURL(file); + + $("#progress-bar-detail1").css({'width':"0%"}); + $("#progress-bar-detail1").empty().append("0%"); + } +}); + + + +$( "#submit-image-detail1" ).click(function() { + $.ajax({ + url: pathArticleUplodImageAdd, + type: 'POST', + data: {type:'detail1', image64:base64Detail1}, + xhr: function() { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.addEventListener('progress', function(evt) { + var percent = (evt.loaded / evt.total) * 100; + $("#progress-bar-detail1").css({'width': percent + "%"}); + $("#progress-bar-detail1").empty().append(percent + "%"); + }, false); + } + return xhr; + }, + success: function() { + $("#progress-bar-detail1").empty().append("Terminer"); + } + }); +}); + + + + + /******************************************************************************** */ + + + $("#upload_image_detail2").on('change', function(e) { + + const file = e.target.files[0]; + + if (file) { + let reader = new FileReader(); + + reader.onloadend = function (event) { + + $("#img-preview-detail2").attr("src", event.target.result); + + base64Detail2 = event.target.result; + + //console.log(base64Detail2); + }; + reader.readAsDataURL(file); + + $("#progress-bar-detail2").css({'width':"0%"}); + $("#progress-bar-detail2").empty().append("0%"); + } + }); + + + + $( "#submit-image-detail2" ).click(function() { + $.ajax({ + url: pathArticleUplodImageAdd, + type: 'POST', + data: {type:'detail2', image64:base64Detail2}, + xhr: function() { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.addEventListener('progress', function(evt) { + var percent = (evt.loaded / evt.total) * 100; + $("#progress-bar-detail2").css({'width': percent + "%"}); + $("#progress-bar-detail2").empty().append(percent + "%"); + }, false); + } + return xhr; + }, + success: function() { + $("#progress-bar-detail2").empty().append("Terminer"); + } + }); + }); + + + /*********************************************************************** */ + + $("#upload_image_detail3").on('change', function(e) { + + const file = e.target.files[0]; + + if (file) { + let reader = new FileReader(); + + reader.onloadend = function (event) { + + $("#img-preview-detail3").attr("src", event.target.result); + + base64Detail3 = event.target.result; + }; + reader.readAsDataURL(file); + + $("#progress-bar-detail3").css({'width':"0%"}); + $("#progress-bar-detail3").empty().append("0%"); + } + }); + + + + $( "#submit-image-detail3" ).click(function() { + $.ajax({ + url: pathArticleUplodImageAdd, + type: 'POST', + data: {type:'detail3', image64:base64Detail3}, + xhr: function() { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.addEventListener('progress', function(evt) { + var percent = (evt.loaded / evt.total) * 100; + $("#progress-bar-detail3").css({'width': percent + "%"}); + $("#progress-bar-detail3").empty().append(percent + "%"); + }, false); + } + return xhr; + }, + success: function() { + $("#progress-bar-detail3").empty().append("Terminer"); + } + }); + }); + + +/**************************************************************************** */ + + $("#upload_image_detail4").on('change', function(e) { + + const file = e.target.files[0]; + + if (file) { + let reader = new FileReader(); + + reader.onloadend = function (event) { + + $("#img-preview-detail4").attr("src", event.target.result); + + base64Detail4 = event.target.result; + + //console.log(base64Detail4); + }; + reader.readAsDataURL(file); + + $("#progress-bar-detail4").css({'width':"0%"}); + $("#progress-bar-detail4").empty().append("0%"); + } + }); + + + + $( "#submit-image-detail4" ).click(function() { + $.ajax({ + url: pathArticleUplodImageAdd, + type: 'POST', + data: {type:'detail4', image64:base64Detail4}, + xhr: function() { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.addEventListener('progress', function(evt) { + var percent = (evt.loaded / evt.total) * 100; + $("#progress-bar-detail4").css({'width': percent + "%"}); + $("#progress-bar-detail4").empty().append(percent + "%"); + }, false); + } + return xhr; + }, + success: function() { + $("#progress-bar-detail4").empty().append("Terminer"); + } + }); + }); + + +} + + diff --git a/assets/javascript/backend/dashboard.js b/assets/javascript/backend/dashboard.js new file mode 100644 index 0000000..349b16f --- /dev/null +++ b/assets/javascript/backend/dashboard.js @@ -0,0 +1,245 @@ +import { Chart } from 'chart.js'; + +// Set new default font family and font color to mimic Bootstrap's default styling +Chart.defaults.global.defaultFontFamily = 'Nunito', '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif'; +Chart.defaults.global.defaultFontColor = '#858796'; + +function number_format(number, decimals, dec_point, thousands_sep) { + // * example: number_format(1234.56, 2, ',', ' '); + // * return: '1 234,56' + number = (number + '').replace(',', '').replace(' ', ''); + var n = !isFinite(+number) ? 0 : +number, + prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), + sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, + dec = (typeof dec_point === 'undefined') ? '.' : dec_point, + s = '', + toFixedFix = function(n, prec) { + var k = Math.pow(10, prec); + return '' + Math.round(n * k) / k; + }; + // Fix for IE parseFloat(0.55).toFixed(0) = 0; + s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.'); + if (s[0].length > 3) { + s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep); + } + if ((s[1] || '').length < prec) { + s[1] = s[1] || ''; + s[1] += new Array(prec - s[1].length + 1).join('0'); + } + return s.join(dec); +} + +// Bar Chart Example +var ctx = document.getElementById("myBarChart"); +if(ctx != null){ + var myBarChart = new Chart(ctx, { + type: 'bar', + data: { + labels: ["January", "February", "March", "April", "May", "June"], + datasets: [{ + label: "Revenue", + backgroundColor: "#4e73df", + hoverBackgroundColor: "#2e59d9", + borderColor: "#4e73df", + data: [4215, 5312, 6251, 7841, 9821, 14984], + }], + }, + options: { + maintainAspectRatio: false, + layout: { + padding: { + left: 10, + right: 25, + top: 25, + bottom: 0 + } + }, + scales: { + xAxes: [{ + time: { + unit: 'month' + }, + gridLines: { + display: false, + drawBorder: false + }, + ticks: { + maxTicksLimit: 6 + }, + maxBarThickness: 25, + }], + yAxes: [{ + ticks: { + min: 0, + max: 15000, + maxTicksLimit: 5, + padding: 10, + // Include a dollar sign in the ticks + callback: function(value, index, values) { + return '$' + number_format(value); + } + }, + gridLines: { + color: "rgb(234, 236, 244)", + zeroLineColor: "rgb(234, 236, 244)", + drawBorder: false, + borderDash: [2], + zeroLineBorderDash: [2] + } + }], + }, + legend: { + display: false + }, + tooltips: { + titleMarginBottom: 10, + titleFontColor: '#6e707e', + titleFontSize: 14, + backgroundColor: "rgb(255,255,255)", + bodyFontColor: "#858796", + borderColor: '#dddfeb', + borderWidth: 1, + xPadding: 15, + yPadding: 15, + displayColors: false, + caretPadding: 10, + callbacks: { + label: function(tooltipItem, chart) { + var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || ''; + return datasetLabel + ': $' + number_format(tooltipItem.yLabel); + } + } + }, + } + }); +} + + +// Pie Chart Example +var ctx = document.getElementById("myPieChart"); +if(ctx != null){ + var myPieChart = new Chart(ctx, { + type: 'doughnut', + data: { + labels: ["Direct", "Referral", "Social"], + datasets: [{ + data: [55, 30, 15], + backgroundColor: ['#4e73df', '#1cc88a', '#36b9cc'], + hoverBackgroundColor: ['#2e59d9', '#17a673', '#2c9faf'], + hoverBorderColor: "rgba(234, 236, 244, 1)", + }], + }, + options: { + maintainAspectRatio: false, + tooltips: { + backgroundColor: "rgb(255,255,255)", + bodyFontColor: "#858796", + borderColor: '#dddfeb', + borderWidth: 1, + xPadding: 15, + yPadding: 15, + displayColors: false, + caretPadding: 10, + }, + legend: { + display: false + }, + cutoutPercentage: 80, + }, + }); +} + + + + +// Area Chart Example +var ctx = document.getElementById("myAreaChart"); +if(ctx != null){ +var myLineChart = new Chart(ctx, { + type: 'line', + data: { + labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], + datasets: [{ + label: "Earnings", + lineTension: 0.3, + backgroundColor: "rgba(78, 115, 223, 0.05)", + borderColor: "rgba(78, 115, 223, 1)", + pointRadius: 3, + pointBackgroundColor: "rgba(78, 115, 223, 1)", + pointBorderColor: "rgba(78, 115, 223, 1)", + pointHoverRadius: 3, + pointHoverBackgroundColor: "rgba(78, 115, 223, 1)", + pointHoverBorderColor: "rgba(78, 115, 223, 1)", + pointHitRadius: 10, + pointBorderWidth: 2, + data: [0, 10000, 5000, 15000, 10000, 20000, 15000, 25000, 20000, 30000, 25000, 40000], + }], + }, + options: { + maintainAspectRatio: false, + layout: { + padding: { + left: 10, + right: 25, + top: 25, + bottom: 0 + } + }, + scales: { + xAxes: [{ + time: { + unit: 'date' + }, + gridLines: { + display: false, + drawBorder: false + }, + ticks: { + maxTicksLimit: 7 + } + }], + yAxes: [{ + ticks: { + maxTicksLimit: 5, + padding: 10, + // Include a dollar sign in the ticks + callback: function(value, index, values) { + return number_format(value); + } + }, + gridLines: { + color: "rgb(234, 236, 244)", + zeroLineColor: "rgb(234, 236, 244)", + drawBorder: false, + borderDash: [2], + zeroLineBorderDash: [2] + } + }], + }, + legend: { + display: false + }, + tooltips: { + backgroundColor: "rgb(255,255,255)", + bodyFontColor: "#858796", + titleMarginBottom: 10, + titleFontColor: '#6e707e', + titleFontSize: 14, + borderColor: '#dddfeb', + borderWidth: 1, + xPadding: 15, + yPadding: 15, + displayColors: false, + intersect: false, + mode: 'index', + caretPadding: 10, + callbacks: { + label: function(tooltipItem, chart) { + var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || ''; + return datasetLabel + ': ' + number_format(tooltipItem.yLabel); + } + } + } + } +}); +} \ No newline at end of file diff --git a/assets/javascript/backend/position.js b/assets/javascript/backend/position.js new file mode 100644 index 0000000..aa79ba8 --- /dev/null +++ b/assets/javascript/backend/position.js @@ -0,0 +1,163 @@ +var id_societe = ""; +var id_annonce = ""; +var id_ligne = ""; +var date_debut = ""; +var date_fin = ""; + + + $("#societe").change(function () { + var option = $(this).find('option:selected'); + + if(option.val() != ''){ + Annonce(option.val()); + id_societe = option.val(); + } + + }); + + function Annonce(idSociete){ + + $('.annonce').css('display','none'); + $.post( pathReservation, {idSociete:idSociete}, function( data ) { + if(data != ''){ + $('#annonce').empty().html(''+data); + $('.annonce').css('display','block'); + } + + }).fail(function(response) { + console.log('Error: ' + response.responseText); + }); + } + + + + $("#annonce").change(function () { + + var option = $(this).find('option:selected'); + + if(option.val() != ''){ + + $('.largeur').css('display','block'); + + let dimention = option.attr("largeur"); + + if(dimention == "1"){ + $('#largeur').empty().append("1/4 (438 * 240) pixels"); + }else if(dimention == "2"){ + $('#largeur').empty().append("2/4 (876 * 240) pixels"); + }else if(dimention == "3"){ + $('#largeur').empty().append("3/4 (1314 * 240) pixels"); + }else if(dimention == "4"){ + $('#largeur').empty().append("4/4 (1752 * 240) pixels"); + } + + $('.ligne').css('display','block'); + + id_annonce = option.val(); + + $.post( pathLigneDetail, { dimension:dimention}, function( data ) { + + $("#ligne").empty().html(data); + + }).fail(function(response) { + console.log('Error: ' + response.responseText); + }); + + } + + }); + + + + $("#ligne").change(function () { + + var option = $(this).find('option:selected'); + + if(option.val() != ''){ + + $('.intervalle-date').css('display','block'); + + id_ligne = option.val(); + } + + }); + + + + $("#dateDebut").change(function () { + + let sysDate = new Date(); + sysDate.setHours(0,0,0,0); + let selDate = new Date($("#dateDebut").val()); + + if(selDate >= sysDate ){ + $("#dateDebut").removeClass("is-invalid"); + $(".dateFin").css('display','block'); + + }else{ + $("#dateDebut").addClass("is-invalid"); + $(".dateFin").css('display','none'); + } + + }); + + + $("#dateFin").change(function () { + + let selDatedebut = new Date($("#dateDebut").val()); + let selDatefin = new Date($("#dateFin").val()); + + if(selDatedebut > selDatefin){ + $("#dateFin").addClass("is-invalid"); + $(".valOperation").css('display','none'); + }else{ + $("#dateFin").removeClass("is-invalid"); + date_fin = $("#dateFin").val(); + date_debut = $("#dateDebut").val(); + $(".valOperation").css('display','block'); + } + + + }); + + + $( "#valOperation" ).click(function() { + + $("#loading-data").empty().html('
'); + console.log(date_debut); + console.log(date_fin); + $.post( pathTestReservation, {id_societe:id_societe, + id_annonce:id_annonce, + id_ligne:id_ligne, + date_debut:date_debut, + date_fin:date_fin }, function( data ) { + + $("#loading-data").empty(); + + + $("#annonce-ligne").empty().html(data); + + $(".save-operation").css('display','block'); + + }).fail(function(response) { + console.log('Error: ' + response.responseText); + }); + + }); + + + $( "#save-operation" ).click(function() { + $( "#save-operation" ).empty().append(' enregister'); + $( "#save-operation" ).prop('disabled', 'disabled'); + + $.post( pathSave, { id_annonce:id_annonce, id_ligne:id_ligne, date_debut:date_debut, date_fin:date_fin }, function( data ) { + + if(data != ""){ + window.open(pathPositionDetail+'?idPosition='+data+'&msg=add', "_self"); + } + + }).fail(function(response) { + console.log('Error: ' + response.responseText); + }); + + }); \ No newline at end of file diff --git a/assets/javascript/backend/sb-admin-2.js b/assets/javascript/backend/sb-admin-2.js new file mode 100644 index 0000000..b0412d1 --- /dev/null +++ b/assets/javascript/backend/sb-admin-2.js @@ -0,0 +1,56 @@ +(function($) { + "use strict"; // Start of use strict + + // Toggle the side navigation + $("#sidebarToggle, #sidebarToggleTop").on('click', function(e) { + $("body").toggleClass("sidebar-toggled"); + $(".sidebar").toggleClass("toggled"); + if ($(".sidebar").hasClass("toggled")) { + $('.sidebar .collapse').collapse('hide'); + }; + }); + + // Close any open menu accordions when window is resized below 768px + $(window).resize(function() { + if ($(window).width() < 768) { + $('.sidebar .collapse').collapse('hide'); + }; + + // Toggle the side navigation when window is resized below 480px + if ($(window).width() < 480 && !$(".sidebar").hasClass("toggled")) { + $("body").addClass("sidebar-toggled"); + $(".sidebar").addClass("toggled"); + $('.sidebar .collapse').collapse('hide'); + }; + }); + + // Prevent the content wrapper from scrolling when the fixed side navigation hovered over + $('body.fixed-nav .sidebar').on('mousewheel DOMMouseScroll wheel', function(e) { + if ($(window).width() > 768) { + var e0 = e.originalEvent, + delta = e0.wheelDelta || -e0.detail; + this.scrollTop += (delta < 0 ? 1 : -1) * 30; + e.preventDefault(); + } + }); + + // Scroll to top button appear + $(document).on('scroll', function() { + var scrollDistance = $(this).scrollTop(); + if (scrollDistance > 100) { + $('.scroll-to-top').fadeIn(); + } else { + $('.scroll-to-top').fadeOut(); + } + }); + + // Smooth scrolling using jQuery easing + $(document).on('click', 'a.scroll-to-top', function(e) { + var $anchor = $(this); + $('html, body').stop().animate({ + scrollTop: ($($anchor.attr('href')).offset().top) + }, 1000, 'easeInOutExpo'); + e.preventDefault(); + }); + +})(jQuery); // End of use strict diff --git a/assets/javascript/backend/service.js b/assets/javascript/backend/service.js new file mode 100644 index 0000000..5f5c012 --- /dev/null +++ b/assets/javascript/backend/service.js @@ -0,0 +1,324 @@ +$( "#service_limit_type_0" ).click(function() { + $('#service-limita-date').css('display','block'); +}); + +$( "#service_limit_type_1" ).click(function() { + $('#service-limita-date').css('display','none'); + $('#service_limit_date').val(''); +}); + +/*********************************************/ + +$('#tablesService').DataTable({ + language: { + url: '../../assets/json/fr-FR.json', + }, +}); + + +window.ServiceRdvAjaxShow = ServiceRdvAjaxShow; + +function ServiceRdvAjaxShow(idRdv) +{ + $.post( pathServiceRdvAjaxShow, {idRdv:idRdv}, function( data ) { + $("#data-rdv").empty().prepend(data); + $('#exampleModal').modal('show'); + + }).fail(function(response) { + console.error('Error: ' + response.responseText); + }); +} + + +/**************************************************/ + +if(typeof pathServiceUplodImageAdd !== 'undefined'){ + + uploderImagesService(); + +} + +function uploderImagesService(){ + + let cropper; + let base64Default; + let base64Detail1; + let base64Detail2; + let base64Detail3; + let base64Detail4; + + + $( "#resize-image" ).click(function() { + + let typeImage = $("#imgPreviewCropper").attr("data-type-img"); + + if(typeImage == "default"){ + + base64Default = $("#imgPreviewCropper").cropper('getCroppedCanvas', {width: 438, height: 240}).toDataURL('image/jpeg', 1); + $('#img-preview-default').attr('src', base64Default); + } + $('#cropperModal').modal('hide'); + }); + +/***************************************************************************** */ + + $("#upload_image_default").on('change', function(e) { + const file = e.target.files[0]; + + if (file) { + let reader = new FileReader(); + + reader.onload = function (event) { + + $("#imgPreviewCropper").attr("src", event.target.result); + $("#imgPreviewCropper").attr("data-type-img", "default"); + + var image = new Image(); + image.src = reader.result; + image.onload = function() { + + if(image.width != 438){ + $('#imgPreviewCropper').cropper('destroy'); + + cropper = $("#imgPreviewCropper").cropper({ + minContainerWidth: 438, + minContainerHeight: 240, + minCropBoxWidth: 438, + minCropBoxHeight: 240, + zoomable: true, + dragMode: 'move', + }); + + $('.modal-dialog').css({'max-width':"476px"}); + $('#cropperModal').modal('show'); + }else{ + base64Default = event.target.result; + $("#img-preview-default").attr("src", event.target.result); + } + }; + }; + reader.readAsDataURL(file); + $("#progress-bar-default").css({'width':"0%"}); + $("#progress-bar-default").empty().append("0%"); + } + }); + + + + $( "#submit-image-default" ).click(function() { + $.ajax({ + url: pathServiceUplodImageAdd, + type: 'POST', + data: {type:'default', image64:base64Default}, + xhr: function() { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.addEventListener('progress', function(evt) { + var percent = (evt.loaded / evt.total) * 100; + $("#progress-bar-default").css({'width': percent + "%"}); + $("#progress-bar-default").empty().append(percent + "%"); + }, false); + } + return xhr; + }, + success: function() { + $("#progress-bar-default").empty().append("Terminer"); + } + }); + }); + +/****************************************************************************** */ + + +$("#upload_image_detail1").on('change', function(e) { + + const file = e.target.files[0]; + + if (file) { + let reader = new FileReader(); + + reader.onloadend = function (event) { + + $("#img-preview-detail1").attr("src", event.target.result); + + base64Detail1 = event.target.result; + }; + reader.readAsDataURL(file); + + $("#progress-bar-detail1").css({'width':"0%"}); + $("#progress-bar-detail1").empty().append("0%"); + } +}); + + + +$( "#submit-image-detail1" ).click(function() { + $.ajax({ + url: pathServiceUplodImageAdd, + type: 'POST', + data: {type:'detail1', image64:base64Detail1}, + xhr: function() { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.addEventListener('progress', function(evt) { + var percent = (evt.loaded / evt.total) * 100; + $("#progress-bar-detail1").css({'width': percent + "%"}); + $("#progress-bar-detail1").empty().append(percent + "%"); + }, false); + } + return xhr; + }, + success: function() { + $("#progress-bar-detail1").empty().append("Terminer"); + } + }); +}); + + + + + /******************************************************************************** */ + + + $("#upload_image_detail2").on('change', function(e) { + + const file = e.target.files[0]; + + if (file) { + let reader = new FileReader(); + + reader.onloadend = function (event) { + + $("#img-preview-detail2").attr("src", event.target.result); + + base64Detail2 = event.target.result; + + //console.log(base64Detail2); + }; + reader.readAsDataURL(file); + + $("#progress-bar-detail2").css({'width':"0%"}); + $("#progress-bar-detail2").empty().append("0%"); + } + }); + + + + $( "#submit-image-detail2" ).click(function() { + $.ajax({ + url: pathServiceUplodImageAdd, + type: 'POST', + data: {type:'detail2', image64:base64Detail2}, + xhr: function() { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.addEventListener('progress', function(evt) { + var percent = (evt.loaded / evt.total) * 100; + $("#progress-bar-detail2").css({'width': percent + "%"}); + $("#progress-bar-detail2").empty().append(percent + "%"); + }, false); + } + return xhr; + }, + success: function() { + $("#progress-bar-detail2").empty().append("Terminer"); + } + }); + }); + + + /*********************************************************************** */ + + $("#upload_image_detail3").on('change', function(e) { + + const file = e.target.files[0]; + + if (file) { + let reader = new FileReader(); + + reader.onloadend = function (event) { + + $("#img-preview-detail3").attr("src", event.target.result); + + base64Detail3 = event.target.result; + }; + reader.readAsDataURL(file); + + $("#progress-bar-detail3").css({'width':"0%"}); + $("#progress-bar-detail3").empty().append("0%"); + } + }); + + + + $( "#submit-image-detail3" ).click(function() { + $.ajax({ + url: pathServiceUplodImageAdd, + type: 'POST', + data: {type:'detail3', image64:base64Detail3}, + xhr: function() { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.addEventListener('progress', function(evt) { + var percent = (evt.loaded / evt.total) * 100; + $("#progress-bar-detail3").css({'width': percent + "%"}); + $("#progress-bar-detail3").empty().append(percent + "%"); + }, false); + } + return xhr; + }, + success: function() { + $("#progress-bar-detail3").empty().append("Terminer"); + } + }); + }); + + +/**************************************************************************** */ + + $("#upload_image_detail4").on('change', function(e) { + + const file = e.target.files[0]; + + if (file) { + let reader = new FileReader(); + + reader.onloadend = function (event) { + + $("#img-preview-detail4").attr("src", event.target.result); + + base64Detail4 = event.target.result; + }; + reader.readAsDataURL(file); + + $("#progress-bar-detail4").css({'width':"0%"}); + $("#progress-bar-detail4").empty().append("0%"); + } + }); + + + + $( "#submit-image-detail4" ).click(function() { + $.ajax({ + url: pathServiceUplodImageAdd, + type: 'POST', + data: {type:'detail4', image64:base64Detail4}, + xhr: function() { + var xhr = $.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.addEventListener('progress', function(evt) { + var percent = (evt.loaded / evt.total) * 100; + $("#progress-bar-detail4").css({'width': percent + "%"}); + $("#progress-bar-detail4").empty().append(percent + "%"); + }, false); + } + return xhr; + }, + success: function() { + $("#progress-bar-detail4").empty().append("Terminer"); + } + }); + }); + + +} diff --git a/assets/javascript/frontend/newslettre.js b/assets/javascript/frontend/newslettre.js new file mode 100644 index 0000000..bac6117 --- /dev/null +++ b/assets/javascript/frontend/newslettre.js @@ -0,0 +1,20 @@ + +$(".check-groupe").change(function () { + + related = $(this).attr("data-related"); + operation = $(this).prop("checked"); + + console.log(related); + console.log(operation); + + $.post( pathAjaxUpdate, {related:related, operation:operation}, function( data ) { + + console.log(data); + + }).fail(function(response) { + console.log(response.responseText); + }); + + + //$("input:checkbox").prop('checked', $(this).prop("checked")); +}); \ No newline at end of file diff --git a/assets/javascript/frontend/parrainage.js b/assets/javascript/frontend/parrainage.js new file mode 100644 index 0000000..49cb369 --- /dev/null +++ b/assets/javascript/frontend/parrainage.js @@ -0,0 +1,9 @@ +import copy from 'copy-text-to-clipboard'; + +jQuery(document).ready(function() { + + $( "#copurl" ).click(function() { + copy($("#urlParinage").val()); + }); + +}) \ No newline at end of file diff --git a/assets/javascript/frontend/register.js b/assets/javascript/frontend/register.js new file mode 100644 index 0000000..f8cc56a --- /dev/null +++ b/assets/javascript/frontend/register.js @@ -0,0 +1,106 @@ +import intlTelInput from 'intl-tel-input'; +import 'intl-tel-input/build/js/utils'; +import 'jquery-mask-plugin'; + +import countrySelect from 'country-select-bd'; +import 'country-select-bd/build/css/countrySelect.min.css'; + + +$(document).ready(function() { + + $("#user_registration_country , #user_adresse_country").countrySelect({ + defaultCountry: "tn", + preferredCountries: ['tn','fr'], + excludeCountries: ["il"], + nationalMode: false, + formatOnDisplay: true, + separateDialCode: true, + autoHideDialCode: true, + }); + + + var input = document.querySelector("#user_registration_phoneNumber"); + + + if(input != null) { + var iti = intlTelInput(input, { + nationalMode: false, + formatOnDisplay: true, + separateDialCode: true, + autoHideDialCode: true, + autoPlaceholder: "aggressive" , + initialCountry: "tn", + placeholderNumberType: "MOBILE", + preferredCountries: ['tn','fr'], + excludeCountries: ["il"] + }) + + var phoneInputID = "#user_registration_phoneNumber"; + + $(phoneInputID).on("countrychange", function(event) { + + // Get the selected country data to know which country is selected. + var selectedCountryData = iti.getSelectedCountryData(); + + // Get an example number for the selected country to use as placeholder. + var newPlaceholder = intlTelInputUtils.getExampleNumber(selectedCountryData.iso2, true, intlTelInputUtils.numberFormat.INTERNATIONAL); + + // Reset the phone number input. + iti.setNumber(""); + + // Convert placeholder as exploitable mask by replacing all 1-9 numbers with 0s + var mask = newPlaceholder.replace(/[1-9]/g, "0"); + + // Apply the new mask for the input + $(this).mask(mask); + }); + + + iti.promise.then(function() { + $(phoneInputID).trigger("countrychange"); + }); + } + + + + var inputInfoPerson = document.querySelector("#user_info_perso_phoneNumber"); + + if(inputInfoPerson != null) { + + var iti = intlTelInput(inputInfoPerson, { + nationalMode: false, + formatOnDisplay: true, + separateDialCode: true, + autoHideDialCode: true, + autoPlaceholder: "aggressive" , + initialCountry: "tn", + placeholderNumberType: "MOBILE", + preferredCountries: ['tn','fr'], + excludeCountries: ["il"] + + }) + + $("#user_info_perso_phoneNumber").on("countrychange", function(event) { + + // Get the selected country data to know which country is selected. + var selectedCountryData = iti.getSelectedCountryData(); + + // Get an example number for the selected country to use as placeholder. + var newPlaceholder = intlTelInputUtils.getExampleNumber(selectedCountryData.iso2, true, intlTelInputUtils.numberFormat.INTERNATIONAL); + + // Reset the phone number input. + iti.setNumber(""); + + // Convert placeholder as exploitable mask by replacing all 1-9 numbers with 0s + var mask = newPlaceholder.replace(/[1-9]/g, "0"); + + // Apply the new mask for the input + $(this).mask(mask); + }); + + + iti.promise.then(function() { + $("#user_info_perso_phoneNumber").trigger("countrychange"); + }); + } +}); diff --git a/assets/javascript/frontend/scripts.js b/assets/javascript/frontend/scripts.js new file mode 100644 index 0000000..70c658e --- /dev/null +++ b/assets/javascript/frontend/scripts.js @@ -0,0 +1,354 @@ +import 'jquery'; +import 'bootstrap'; +import 'bootstrap-dropdown-hover'; +import { WOW } from 'wow.js'; +import { echo } from 'echo-js'; +import 'jquery.rateit'; +import 'jquery.easing'; +import '../../../public/assets/js/owl.carousel.min.js'; + + +jQuery(document).ready(function() { + "use strict"; + +/*===================================================================================*/ +/* OWL CAROUSEL +/*===================================================================================*/ +jQuery(function () { + var dragging = true; + var owlElementID = "#owl-main"; + + function fadeInReset() { + if (!dragging) { + jQuery(owlElementID + " .caption .fadeIn-1, " + owlElementID + " .caption .fadeIn-2, " + owlElementID + " .caption .fadeIn-3").stop().delay(800).animate({ opacity: 0 }, { duration: 400, easing: "easeInCubic" }); + } + else { + jQuery(owlElementID + " .caption .fadeIn-1, " + owlElementID + " .caption .fadeIn-2, " + owlElementID + " .caption .fadeIn-3").css({ opacity: 0 }); + } + } + + function fadeInDownReset() { + if (!dragging) { + jQuery(owlElementID + " .caption .fadeInDown-1, " + owlElementID + " .caption .fadeInDown-2, " + owlElementID + " .caption .fadeInDown-3").stop().delay(800).animate({ opacity: 0, top: "-15px" }, { duration: 400, easing: "easeInCubic" }); + } + else { + jQuery(owlElementID + " .caption .fadeInDown-1, " + owlElementID + " .caption .fadeInDown-2, " + owlElementID + " .caption .fadeInDown-3").css({ opacity: 0, top: "-15px" }); + } + } + + function fadeInUpReset() { + if (!dragging) { + jQuery(owlElementID + " .caption .fadeInUp-1, " + owlElementID + " .caption .fadeInUp-2, " + owlElementID + " .caption .fadeInUp-3").stop().delay(800).animate({ opacity: 0, top: "15px" }, { duration: 400, easing: "easeInCubic" }); + } + else { + $(owlElementID + " .caption .fadeInUp-1, " + owlElementID + " .caption .fadeInUp-2, " + owlElementID + " .caption .fadeInUp-3").css({ opacity: 0, top: "15px" }); + } + } + + function fadeInLeftReset() { + if (!dragging) { + jQuery(owlElementID + " .caption .fadeInLeft-1, " + owlElementID + " .caption .fadeInLeft-2, " + owlElementID + " .caption .fadeInLeft-3").stop().delay(800).animate({ opacity: 0, left: "15px" }, { duration: 400, easing: "easeInCubic" }); + } + else { + jQuery(owlElementID + " .caption .fadeInLeft-1, " + owlElementID + " .caption .fadeInLeft-2, " + owlElementID + " .caption .fadeInLeft-3").css({ opacity: 0, left: "15px" }); + } + } + + function fadeInRightReset() { + if (!dragging) { + jQuery(owlElementID + " .caption .fadeInRight-1, " + owlElementID + " .caption .fadeInRight-2, " + owlElementID + " .caption .fadeInRight-3").stop().delay(800).animate({ opacity: 0, left: "-15px" }, { duration: 400, easing: "easeInCubic" }); + } + else { + jQuery(owlElementID + " .caption .fadeInRight-1, " + owlElementID + " .caption .fadeInRight-2, " + owlElementID + " .caption .fadeInRight-3").css({ opacity: 0, left: "-15px" }); + } + } + + function fadeIn() { + jQuery(owlElementID + " .active .caption .fadeIn-1").stop().delay(500).animate({ opacity: 1 }, { duration: 800, easing: "easeOutCubic" }); + jQuery(owlElementID + " .active .caption .fadeIn-2").stop().delay(700).animate({ opacity: 1 }, { duration: 800, easing: "easeOutCubic" }); + jQuery(owlElementID + " .active .caption .fadeIn-3").stop().delay(1000).animate({ opacity: 1 }, { duration: 800, easing: "easeOutCubic" }); + } + + function fadeInDown() { + jQuery(owlElementID + " .active .caption .fadeInDown-1").stop().delay(500).animate({ opacity: 1, top: "0" }, { duration: 800, easing: "easeOutCubic" }); + jQuery(owlElementID + " .active .caption .fadeInDown-2").stop().delay(700).animate({ opacity: 1, top: "0" }, { duration: 800, easing: "easeOutCubic" }); + jQuery(owlElementID + " .active .caption .fadeInDown-3").stop().delay(1000).animate({ opacity: 1, top: "0" }, { duration: 800, easing: "easeOutCubic" }); + } + + function fadeInUp() { + jQuery(owlElementID + " .active .caption .fadeInUp-1").stop().delay(500).animate({ opacity: 1, top: "0" }, { duration: 800, easing: "easeOutCubic" }); + jQuery(owlElementID + " .active .caption .fadeInUp-2").stop().delay(700).animate({ opacity: 1, top: "0" }, { duration: 800, easing: "easeOutCubic" }); + jQuery(owlElementID + " .active .caption .fadeInUp-3").stop().delay(1000).animate({ opacity: 1, top: "0" }, { duration: 800, easing: "easeOutCubic" }); + } + + function fadeInLeft() { + jQuery(owlElementID + " .active .caption .fadeInLeft-1").stop().delay(500).animate({ opacity: 1, left: "0" }, { duration: 800, easing: "easeOutCubic" }); + jQuery(owlElementID + " .active .caption .fadeInLeft-2").stop().delay(700).animate({ opacity: 1, left: "0" }, { duration: 800, easing: "easeOutCubic" }); + jQuery(owlElementID + " .active .caption .fadeInLeft-3").stop().delay(1000).animate({ opacity: 1, left: "0" }, { duration: 800, easing: "easeOutCubic" }); + } + + function fadeInRight() { + jQuery(owlElementID + " .active .caption .fadeInRight-1").stop().delay(500).animate({ opacity: 1, left: "0" }, { duration: 800, easing: "easeOutCubic" }); + jQuery(owlElementID + " .active .caption .fadeInRight-2").stop().delay(700).animate({ opacity: 1, left: "0" }, { duration: 800, easing: "easeOutCubic" }); + jQuery(owlElementID + " .active .caption .fadeInRight-3").stop().delay(1000).animate({ opacity: 1, left: "0" }, { duration: 800, easing: "easeOutCubic" }); + } + + jQuery(owlElementID).owlCarousel({ + + autoPlay: 5000, + stopOnHover: true, + navigation: true, + pagination: true, + singleItem: true, + addClassActive: true, + transitionStyle: "fade", + navigationText: ["", ""], + + afterInit: function() { + fadeIn(); + fadeInDown(); + fadeInUp(); + fadeInLeft(); + fadeInRight(); + }, + + afterMove: function() { + fadeIn(); + fadeInDown(); + fadeInUp(); + fadeInLeft(); + fadeInRight(); + }, + + afterUpdate: function() { + fadeIn(); + fadeInDown(); + fadeInUp(); + fadeInLeft(); + fadeInRight(); + }, + + startDragging: function() { + dragging = true; + }, + + afterAction: function() { + fadeInReset(); + fadeInDownReset(); + fadeInUpReset(); + fadeInLeftReset(); + fadeInRightReset(); + dragging = false; + } + + }); + +if (jQuery(owlElementID).hasClass("owl-one-item")) { + jQuery(owlElementID + ".owl-one-item").data('owlCarousel').destroy(); +} + +jQuery(owlElementID + ".owl-one-item").owlCarousel({ + singleItem: true, + navigation: false, + pagination: false +}); + + + + +jQuery('.home-owl-carousel').each(function(){ + + var owl = $(this); + var itemPerLine = owl.data('item'); + if(!itemPerLine){ + itemPerLine = 5; + } + owl.owlCarousel({ + items : itemPerLine, + itemsDesktop : [1199,3], + itemsTablet:[991,2], + navigation : true, + pagination : false, + + navigationText: ["", ""] + }); +}); + +jQuery('.homepage-owl-carousel').each(function(){ + + var owl = $(this); + var itemPerLine = owl.data('item'); + if(!itemPerLine){ + itemPerLine = 4; + } + owl.owlCarousel({ + items : itemPerLine, + itemsTablet:[991,2], + itemsDesktop : [1199,3], + navigation : true, + pagination : false, + + navigationText: ["", ""] + }); +}); + +jQuery(".blog-slider").owlCarousel({ + items : 3, + itemsDesktopSmall :[979,2], + itemsDesktop : [1199,3], + navigation : true, + slideSpeed : 300, + pagination: false, + navigationText: ["", ""] +}); + +jQuery(".best-seller").owlCarousel({ + items : 3, + navigation : true, + itemsDesktopSmall :[979,2], + itemsDesktop : [1199,2], + slideSpeed : 300, + pagination: false, + paginationSpeed : 400, + navigationText: ["", ""] +}); + +jQuery(".sidebar-carousel").owlCarousel({ + items : 1, + itemsTablet:[978,1], + itemsDesktopSmall :[979,2], + itemsDesktop : [1199,1], + navigation : true, + slideSpeed : 300, + pagination: false, + paginationSpeed : 400, + navigationText: ["", ""] +}); + +jQuery(".brand-slider").owlCarousel({ + items :6, + navigation : true, + slideSpeed : 300, + pagination: false, + paginationSpeed : 400, + navigationText: ["", ""] +}); +jQuery("#advertisement").owlCarousel({ + items : 1, + itemsTablet:[978,1], + itemsDesktopSmall :[979,1], + itemsDesktop : [1199,1], + navigation : true, + slideSpeed : 300, + pagination: true, + paginationSpeed : 400, + navigationText: ["", ""] +}); + + + +}); + + +$(window).on('load', function(){ + + /*===================================================================================*/ + /* LAZY LOAD IMAGES USING ECHO + /*===================================================================================*/ + + echo.init({ + offset: 100, + throttle: 250, + unload: false + }); + + + /*===================================================================================*/ + /* RATING + /*===================================================================================*/ + jQuery('.rating').rateit({max: 5, step: 1, value : 4, resetable : false , readonly : true}); + + + + /*===================================================================================*/ + /* WOW + /*===================================================================================*/ + + WOW.init(); + + + /*===================================================================================*/ + /* TOOLTIP + /*===================================================================================*/ + jQuery("[data-toggle='tooltip']").tooltip(); + +}); + +/*===================================================================================*/ +/* PRICE SLIDER +/*===================================================================================*/ +jQuery(function () { + +// Price Slider +if (jQuery('.price-slider').length > 0) { + jQuery('.price-slider').slider({ + min: 100, + max: 700, + step: 10, + value: [200, 500], + handle: "square" + + }); + +} + +}); + + +/*===================================================================================*/ +/* SINGLE PRODUCT GALLERY +/*===================================================================================*/ +jQuery(function(){ + jQuery('#owl-single-product').owlCarousel({ + items:1, + itemsTablet:[768,3], + itemsDesktop : [1199,1], + itemsTablet : [992,1], + itemsDesktopSmall : [768,3] + + }); + + jQuery('#owl-single-product-thumbnails').owlCarousel({ + items: 4, + pagination: true, + rewindNav: true, + itemsTablet : [992,4], + itemsDesktopSmall :[768,4], + itemsDesktop : [992,1] + }); + + jQuery('#owl-single-product2-thumbnails').owlCarousel({ + items: 6, + pagination: true, + rewindNav: true, + itemsTablet : [768, 4], + itemsDesktop : [1199,3] + }); + + jQuery('.single-product-slider').owlCarousel({ + stopOnHover: true, + rewindNav: true, + singleItem: true, + pagination: true + }); + + +}); + + + + + + + +}) \ No newline at end of file diff --git a/assets/modules/backend/app_backend.js b/assets/modules/backend/app_backend.js new file mode 100755 index 0000000..09adb32 --- /dev/null +++ b/assets/modules/backend/app_backend.js @@ -0,0 +1,7 @@ +import 'jquery'; +import 'jquery.easing'; +import 'bootstrap'; + +import '../../javascript/backend/sb-admin-2'; + +import '../../styles/app_backend.scss'; \ No newline at end of file diff --git a/assets/modules/backend/app_backend_annonce.js b/assets/modules/backend/app_backend_annonce.js new file mode 100755 index 0000000..c21a345 --- /dev/null +++ b/assets/modules/backend/app_backend_annonce.js @@ -0,0 +1,5 @@ +import '../../../assets/styles/backend/_upload_dropZone.scss'; + +import '../../javascript/backend/annonce'; + +import '../../javascript/backend/position'; \ No newline at end of file diff --git a/assets/modules/backend/app_backend_article_service.js b/assets/modules/backend/app_backend_article_service.js new file mode 100644 index 0000000..b7ea4c8 --- /dev/null +++ b/assets/modules/backend/app_backend_article_service.js @@ -0,0 +1,8 @@ +import 'datatables.net-bs5'; +import 'cropperjs/dist/cropper.css'; +import "jquery-cropper/dist/jquery-cropper.js"; + +import '../../../assets/styles/backend/_upload_dropZone.scss'; + +import '../../javascript/backend/article'; +import '../../javascript/backend/service'; \ No newline at end of file diff --git a/assets/modules/backend/app_backend_dashboard.js b/assets/modules/backend/app_backend_dashboard.js new file mode 100755 index 0000000..352e391 --- /dev/null +++ b/assets/modules/backend/app_backend_dashboard.js @@ -0,0 +1,2 @@ + +import '../../javascript/backend/dashboard'; diff --git a/assets/modules/backend/app_backend_other.js b/assets/modules/backend/app_backend_other.js new file mode 100644 index 0000000..b5d3e96 --- /dev/null +++ b/assets/modules/backend/app_backend_other.js @@ -0,0 +1,30 @@ +import 'datatables.net-bs5'; + +//$(document).ready(function() { }); + +/**************************************Sociétés************************************* */ + + +$('#dataTablesSociete').DataTable({ + language: { + url: '../../assets/json/fr-FR.json', + }, +}); + +/**************************************Catégorie************************************* */ + +//page catégorie +$('#dataTableCategorie').DataTable({ + language: { + url: '../../assets/json/fr-FR.json', + }, +}); + +//page groupes +$('#dataTableGroupes').DataTable({ + language: { + url: '../../assets/json/fr-FR.json', + }, +}); + + diff --git a/assets/modules/frontend/app_frontend.js b/assets/modules/frontend/app_frontend.js new file mode 100755 index 0000000..cc1366a --- /dev/null +++ b/assets/modules/frontend/app_frontend.js @@ -0,0 +1,9 @@ + +import '../../../assets/styles/app_frontend.scss'; + +import '../../../vendor/twbs/bootstrap/dist/js/bootstrap.js'; + +import '../../javascript/frontend/scripts.js'; +import '../../javascript/frontend/register.js'; +import '../../javascript/frontend/parrainage'; +import '../../javascript/frontend/newslettre'; diff --git a/assets/modules/frontend/app_frontend_article_service.js b/assets/modules/frontend/app_frontend_article_service.js new file mode 100755 index 0000000..ef2e9ba --- /dev/null +++ b/assets/modules/frontend/app_frontend_article_service.js @@ -0,0 +1,77 @@ +import 'jquery'; + +import 'datatables.net-bs5'; + + +/**************************************Service************************************* */ + +//window.getRendezVous = getRendezVous; + +$(document).ready(function(){ + + var table = $('#dataTablesRdv').DataTable({ + language: { + url: '../../../../assets/json/fr-FR.json', + }, + bFilter: false, + bInfo: false, + pageLength: 5, + dom: 'rtip', + autoWidth: false, // might need this + }); + + $("#btn-show-rdv").click(function() { + + $.post( pathGetListRDV, {}, function( data ) { + + $.each( data, function( key, value ) { + var td1 = ''+key+''; + + var td2 = '
'; + $.each( value, function( key, value ) { + td2 += '
'; + td2 += ''+value.debut+' - '+value.fin+''; + td2 += '
'; + }); + td2 += '
'; + + table.row.add([td1, td2]).draw(false); + + }); + + }).fail(function(response) { + console.error('Error: ' + response.responseText); + }); + + }); + +}); + + + +/**************************************Article************************************* */ + + +$('#addPanier').click(function(){ + + var qtyVal = $('#qty-val').val(); + + window.open(pathAddArticlePanier+'?qty='+qtyVal, "_self"); +}); + +$('#qty-asc').click(function(){ + var qtyVal = $('#qty-val').val(); + if(qtyVal>1){ + qtyVal--; + $('#qty-val').val(qtyVal); + } +}); + +$('#qty-desc').click(function(){ + var qtyVal = $('#qty-val').val(); + qtyVal++; + $('#qty-val').val(qtyVal); +}); + + + diff --git a/assets/styles/_custom.scss b/assets/styles/_custom.scss new file mode 100644 index 0000000..e69de29 diff --git a/assets/styles/app_backend.scss b/assets/styles/app_backend.scss new file mode 100755 index 0000000..8b19df5 --- /dev/null +++ b/assets/styles/app_backend.scss @@ -0,0 +1,38 @@ +@import 'custom'; +@import "~bootstrap/scss/bootstrap"; +@import '~@fortawesome/fontawesome-free/css/all.css'; +@import 'googleapis/nunito.css'; + + + +// Import Custom SB Admin 2 Variables (Overrides Default Bootstrap Variables) +@import "backend/_variables.scss"; +@import "backend/_global.scss"; + + +// Custom Components +@import "backend/_dropdowns.scss"; +@import "backend/_buttons.scss"; +@import "backend/_cards.scss"; +@import "backend/_charts.scss"; +@import "backend/_login.scss"; +@import "backend/_footer.scss"; + + +//_navs.scss +@import "backend/navs/_global.scss"; +@import "backend/navs/_navbar.scss"; +@import "backend/navs/_sidebar.scss"; +@import "backend/navs/_topbar.scss"; + + +//_utilities.scss +@import "backend/utilities/_animation.scss"; +@import "backend/utilities/_background.scss"; +@import "backend/utilities/_border.scss"; +@import "backend/utilities/_display.scss"; +@import "backend/utilities/_progress.scss"; +@import "backend/utilities/_rotate.scss"; +@import "backend/utilities/_text.scss"; + +//@import "backend/_error.scss"; diff --git a/assets/styles/app_frontend.scss b/assets/styles/app_frontend.scss new file mode 100755 index 0000000..9d53820 --- /dev/null +++ b/assets/styles/app_frontend.scss @@ -0,0 +1,22 @@ +@import 'custom'; + +@import '../../vendor/twbs/bootstrap/dist/css/bootstrap.css'; + +@import 'frontend/main.scss'; +@import 'frontend/blue.scss'; +@import 'frontend/rateit.scss'; + + +@import '../../node_modules/animate.css/animate.css'; + + +@import '~@fortawesome/fontawesome-free/css/all.css'; +@import 'googleapis/barlow.css'; +@import 'googleapis/montserrat.css'; +@import 'googleapis/open_sans.css'; +@import 'googleapis/roboto.css'; +@import '../../public/assets/css/owl.carousel.css'; +@import '../../public/assets/css/owl.transitions.css'; +@import '~intl-tel-input/build/css/intlTelInput.css'; +@import 'frontend/checkbox.css'; +@import 'frontend/radio.css'; \ No newline at end of file diff --git a/assets/styles/backend/_buttons.scss b/assets/styles/backend/_buttons.scss new file mode 100644 index 0000000..afcfc20 --- /dev/null +++ b/assets/styles/backend/_buttons.scss @@ -0,0 +1,52 @@ +.btn-circle { + border-radius: 100%; + height: 2.5rem; + width: 2.5rem; + font-size: 1rem; + display: inline-flex; + align-items: center; + justify-content: center; + &.btn-sm { + height: 1.8rem; + width: 1.8rem; + font-size: 0.75rem; + } + &.btn-lg { + height: 3.5rem; + width: 3.5rem; + font-size: 1.35rem; + } +} + +.btn-icon-split { + padding: 0; + overflow: hidden; + display: inline-flex; + align-items: stretch; + justify-content: center; + .icon { + background: fade-out($black, .85); + display: inline-block; + padding: $btn-padding-y $btn-padding-x; + } + .text { + display: inline-block; + padding: $btn-padding-y $btn-padding-x; + } + &.btn-sm { + .icon { + padding: $btn-padding-y-sm $btn-padding-x-sm; + } + .text { + padding: $btn-padding-y-sm $btn-padding-x-sm; + } + } + &.btn-lg { + .icon { + padding: $btn-padding-y-lg $btn-padding-x-lg; + } + .text { + padding: $btn-padding-y-lg $btn-padding-x-lg; + } + } +} diff --git a/assets/styles/backend/_cards.scss b/assets/styles/backend/_cards.scss new file mode 100644 index 0000000..36337dd --- /dev/null +++ b/assets/styles/backend/_cards.scss @@ -0,0 +1,36 @@ +// Custom Card Styling + +.card { + .card-header { + // Format Dropdowns in Card Headings + .dropdown { + line-height: 1; + .dropdown-menu { + line-height: 1.5; + } + } + } + // Collapsable Card Styling + .card-header[data-toggle="collapse"] { + text-decoration: none; + position: relative; + padding: 0.75rem 3.25rem 0.75rem 1.25rem; + &::after { + position: absolute; + right: 0; + top: 0; + padding-right: 1.725rem; + line-height: 51px; + font-weight: 900; + content: '\f107'; + font-family: 'Font Awesome 5 Free'; + color: $gray-400; + } + &.collapsed { + border-radius: $card-border-radius; + &::after { + content: '\f105'; + } + } + } +} diff --git a/assets/styles/backend/_charts.scss b/assets/styles/backend/_charts.scss new file mode 100644 index 0000000..8124814 --- /dev/null +++ b/assets/styles/backend/_charts.scss @@ -0,0 +1,29 @@ +// Area Chart +.chart-area { + position: relative; + height: 10rem; + width: 100%; + @include media-breakpoint-up(md) { + height: 20rem; + } +} + +// Bar Chart +.chart-bar { + position: relative; + height: 10rem; + width: 100%; + @include media-breakpoint-up(md) { + height: 20rem; + } +} + +// Pie Chart +.chart-pie { + position: relative; + height: 15rem; + width: 100%; + @include media-breakpoint-up(md) { + height: calc(20rem - 43px) !important; + } +} diff --git a/assets/styles/backend/_dropdowns.scss b/assets/styles/backend/_dropdowns.scss new file mode 100644 index 0000000..a2858e1 --- /dev/null +++ b/assets/styles/backend/_dropdowns.scss @@ -0,0 +1,21 @@ +// Custom Dropdown Styling + +.dropdown { + .dropdown-menu { + font-size: $dropdown-font-size; + .dropdown-header { + @extend .text-uppercase; + font-weight: 800; + font-size: 0.65rem; + color: $gray-500; + } + } +} + +// Utility class to hide arrow from dropdown + +.dropdown.no-arrow { + .dropdown-toggle::after { + display: none; + } +} diff --git a/assets/styles/backend/_error.scss b/assets/styles/backend/_error.scss new file mode 100644 index 0000000..fc268e9 --- /dev/null +++ b/assets/styles/backend/_error.scss @@ -0,0 +1,53 @@ +// Lucas Bebber's Glitch Effect +// Tutorial and CSS from CSS Tricks +// https://css-tricks.com/glitch-effect-text-images-svg/ + +.error { + color: $gray-800; + font-size: 7rem; + position: relative; + line-height: 1; + width: 12.5rem; +} +@keyframes noise-anim { + $steps: 20; + @for $i from 0 through $steps { + #{percentage($i*(1/$steps))} { + clip: rect(random(100)+px,9999px,random(100)+px,0); + } + } +} + +.error:after { + content: attr(data-text); + position: absolute; + left: 2px; + text-shadow: -1px 0 $red; + top: 0; + color: $gray-800; + background: $gray-100; + overflow: hidden; + clip: rect(0,900px,0,0); + animation: noise-anim 2s infinite linear alternate-reverse; +} + +@keyframes noise-anim-2 { + $steps: 20; + @for $i from 0 through $steps { + #{percentage($i*(1/$steps))} { + clip: rect(random(100)+px,9999px,random(100)+px,0); + } + } +} +.error:before { + content: attr(data-text); + position: absolute; + left: -2px; + text-shadow: 1px 0 $blue; + top: 0; + color: $gray-800; + background: $gray-100; + overflow: hidden; + clip: rect(0,900px,0,0); + animation: noise-anim-2 3s infinite linear alternate-reverse; +} \ No newline at end of file diff --git a/assets/styles/backend/_footer.scss b/assets/styles/backend/_footer.scss new file mode 100644 index 0000000..99d9dcf --- /dev/null +++ b/assets/styles/backend/_footer.scss @@ -0,0 +1,14 @@ +footer.sticky-footer { + padding: 2rem 0; + flex-shrink: 0; + .copyright { + line-height: 1; + font-size: 0.8rem; + } +} + +body.sidebar-toggled { + footer.sticky-footer { + width: 100%; + } +} diff --git a/assets/styles/backend/_global.scss b/assets/styles/backend/_global.scss new file mode 100644 index 0000000..88c7e87 --- /dev/null +++ b/assets/styles/backend/_global.scss @@ -0,0 +1,1955 @@ +// Global component styles + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + position: relative; + min-height: 100%; + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +body { + height: 100%; + margin: 0; + font-family: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, 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: #858796; + text-align: left; + background-color: #fff; +} + +a { + &:focus { + outline: none; + } +} + +// Main page wrapper +#wrapper { + display: flex; + #content-wrapper { + background-color: $gray-100; + width: 100%; + overflow-x: hidden; + #content { + flex: 1 0 auto; + } + } +} + +// Set container padding to match gutter width instead of default 15px +.container, +.container-fluid { + padding-left: $grid-gutter-width; + padding-right: $grid-gutter-width; +} + +// Scroll to top button +.scroll-to-top { + position: fixed; + right: 1rem; + bottom: 1rem; + display: none; + width: 2.75rem; + height: 2.75rem; + text-align: center; + color: $white; + background: fade-out($gray-800, .5); + line-height: 46px; + &:focus, + &:hover { + color: white; + } + &:hover { + background: $gray-800; + } + i { + font-weight: 800; + } +} + + +.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; +} + +.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; + } +} \ No newline at end of file diff --git a/assets/styles/backend/_login.scss b/assets/styles/backend/_login.scss new file mode 100644 index 0000000..4447a29 --- /dev/null +++ b/assets/styles/backend/_login.scss @@ -0,0 +1,50 @@ +// Pulling these images from Unsplash +// Toshi the dog from https://unsplash.com/@charlesdeluvio - what a funny dog... + +.bg-login-image { + background: url($login-image); + background-position: center; + background-size: cover; +} + +.bg-register-image { + background: url($register-image); + background-position: center; + background-size: cover; +} + +.bg-password-image { + background: url($password-image); + background-position: center; + background-size: cover; +} + +form.user { + + .custom-checkbox.small { + label { + line-height: 1.5rem; + } + } + + .form-control-user { + font-size: 0.8rem; + border-radius: 10rem; + padding: 1.5rem 1rem; + } + + .btn-user { + font-size: 0.8rem; + border-radius: 10rem; + padding: 0.75rem 1rem; + } + +} + +.btn-google { + @include button-variant($brand-google, $white); +} + +.btn-facebook { + @include button-variant($brand-facebook, $white); +} diff --git a/assets/styles/backend/_upload_dropZone.scss b/assets/styles/backend/_upload_dropZone.scss new file mode 100644 index 0000000..283fecb --- /dev/null +++ b/assets/styles/backend/_upload_dropZone.scss @@ -0,0 +1,46 @@ +:root { + --colorPrimaryNormal: #00b3bb; + --colorPrimaryDark: #00979f; + --colorPrimaryGlare: #00cdd7; + --colorPrimaryHalf: #80d9dd; + --colorPrimaryQuarter: #bfecee; + --colorPrimaryEighth: #dff5f7; + --colorPrimaryPale: #f3f5f7; + --colorPrimarySeparator: #f3f5f7; + --colorPrimaryOutline: #dff5f7; + --colorButtonNormal: #00b3bb; + --colorButtonHover: #00cdd7; + --colorLinkNormal: #00979f; + --colorLinkHover: #00cdd7; +} +.upload_dropZone { + color: #0f3c4b; + background-color: var(--colorPrimaryPale, #c8dadf); + outline: 2px dashed var(--colorPrimaryHalf, #c1ddef); + outline-offset: -12px; + transition: + outline-offset 0.2s ease-out, + outline-color 0.3s ease-in-out, + background-color 0.2s ease-out; +} +.upload_dropZone.highlight { + outline-offset: -4px; + outline-color: var(--colorPrimaryNormal, #0576bd); + background-color: var(--colorPrimaryEighth, #c8dadf); +} +.upload_svg { + fill: var(--colorPrimaryNormal, #0576bd); +} +.btn-upload { + color: #fff; + background-color: var(--colorPrimaryNormal); +} +.btn-upload:hover, +.btn-upload:focus { + color: #fff; + background-color: var(--colorPrimaryGlare); +} +.upload_img { + width: calc(33.333% - (2rem / 3)); + object-fit: contain; +} \ No newline at end of file diff --git a/assets/styles/backend/_variables.scss b/assets/styles/backend/_variables.scss new file mode 100644 index 0000000..51458e4 --- /dev/null +++ b/assets/styles/backend/_variables.scss @@ -0,0 +1,81 @@ +// Override Bootstrap default variables here +// Do not edit any of the files in /vendor/bootstrap/scss/! + +// Color Variables +// Bootstrap Color Overrides + +$white: #fff !default; +$gray-100: #f8f9fc !default; +$gray-200: #eaecf4 !default; +$gray-300: #dddfeb !default; +$gray-400: #d1d3e2 !default; +$gray-500: #b7b9cc !default; +$gray-600: #858796 !default; +$gray-700: #6e707e !default; +$gray-800: #5a5c69 !default; +$gray-900: #3a3b45 !default; +$black: #000 !default; + +$blue: #4e73df !default; +$indigo: #6610f2 !default; +$purple: #6f42c1 !default; +$pink: #e83e8c !default; +$red: #e74a3b !default; +$orange: #fd7e14 !default; +$yellow: #f6c23e !default; +$green: #1cc88a !default; +$teal: #20c9a6 !default; +$cyan: #36b9cc !default; + +// Custom Colors +$brand-google: #ea4335 !default; +$brand-facebook: #3b5998 !default; + +// Set Contrast Threshold +$yiq-contrasted-threshold: 195 !default; + +// Typography +$body-color: $gray-600 !default; + +$font-family-sans-serif: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", 'Noto Color Emoji' !default; + +$font-weight-light: 300 !default; +// $font-weight-base: 400; +$headings-font-weight: 400 !default; + +// Shadows +$box-shadow-sm: 0 0.125rem 0.25rem 0 rgba($gray-900, .2) !default; +$box-shadow: 0 0.15rem 1.75rem 0 rgba($gray-900, .15) !default; +// $box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default; + +// Borders Radius +$border-radius: 0.35rem !default; +$border-color: darken($gray-200, 2%) !default; + +// Spacing Variables +// Change below variable if the height of the navbar changes +$topbar-base-height: 4.375rem !default; +// Change below variable to change the width of the sidenav +$sidebar-base-width: 14rem !default; +// Change below variable to change the width of the sidenav when collapsed +$sidebar-collapsed-width: 6.5rem !default; + +// Card +$card-cap-bg: $gray-100 !default; +$card-border-color: $border-color !default; + +// Adjust column spacing for symmetry +$spacer: 1rem !default; +$grid-gutter-width: $spacer * 1.5 !default; + +// Transitions +$transition-collapse: height .15s ease !default; + +// Dropdowns +$dropdown-font-size: 0.85rem !default; +$dropdown-border-color: $border-color !default; + +// Images +$login-image: 'https://source.unsplash.com/K4mSJ7kc0As/600x800' !default; +$register-image: 'https://source.unsplash.com/Mv9hjnEUHR4/600x800' !default; +$password-image: 'https://source.unsplash.com/oWTW-jNGl9I/600x800' !default; diff --git a/assets/styles/backend/navs/_global.scss b/assets/styles/backend/navs/_global.scss new file mode 100644 index 0000000..6e7d875 --- /dev/null +++ b/assets/styles/backend/navs/_global.scss @@ -0,0 +1,45 @@ +// Global styles for both custom sidebar and topbar compoments + +.sidebar, +.topbar { + .nav-item { + // Customize Dropdown Arrows for Navbar + &.dropdown { + .dropdown-toggle { + &::after { + width: 1rem; + text-align: center; + float: right; + vertical-align: 0; + border: 0; + font-weight: 900; + content: '\f105'; + font-family: 'Font Awesome 5 Free'; + } + } + &.show { + .dropdown-toggle::after { + content: '\f107'; + } + } + } + // Counter for nav links and nav link image sizing + .nav-link { + position: relative; + .badge-counter { + position: absolute; + transform: scale(0.7); + transform-origin: top right; + right: .25rem; + margin-top: -.25rem; + } + .img-profile { + height: 2rem; + width: 2rem; + } + } + } +} + + + diff --git a/assets/styles/backend/navs/_navbar.scss b/assets/styles/backend/navs/_navbar.scss new file mode 100644 index 0000000..5874803 --- /dev/null +++ b/assets/styles/backend/navs/_navbar.scss @@ -0,0 +1,487 @@ + +.nav { + display: flex; + 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: #858796; + pointer-events: none; + cursor: default; +} + +.nav-tabs { + border-bottom: 1px solid #dddfeb; +} + +.nav-tabs .nav-link { + margin-bottom: -1px; + border: 1px solid transparent; + border-top-left-radius: 0.35rem; + border-top-right-radius: 0.35rem; +} + +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + border-color: #eaecf4 #eaecf4 #dddfeb; +} + +.nav-tabs .nav-link.disabled { + color: #858796; + background-color: transparent; + border-color: transparent; +} + +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: #6e707e; + background-color: #fff; + border-color: #dddfeb #dddfeb #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.35rem; +} + +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #fff; + background-color: #4e73df; +} + +.nav-fill > .nav-link, +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} + +.nav-justified > .nav-link, +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.navbar { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: 0.5rem 1rem; + } + + .navbar .container, + .navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl { + display: flex; + flex-wrap: wrap; + align-items: center; + 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: flex; + 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 { + flex-basis: 100%; + flex-grow: 1; + 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.35rem; + } + + .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: 50% / 100% 100% no-repeat; + } + + .navbar-nav-scroll { + max-height: 75vh; + overflow-y: auto; + } + + @media (max-width: 575.98px) { + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl { + padding-right: 0; + padding-left: 0; + } + } + + @media (min-width: 576px) { + .navbar-expand-sm { + flex-flow: row nowrap; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + 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, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl { + flex-wrap: nowrap; + } + .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } + } + + @media (max-width: 767.98px) { + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl { + padding-right: 0; + padding-left: 0; + } + } + + @media (min-width: 768px) { + .navbar-expand-md { + flex-flow: row nowrap; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + 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, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl { + flex-wrap: nowrap; + } + .navbar-expand-md .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } + } + + @media (max-width: 991.98px) { + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl { + padding-right: 0; + padding-left: 0; + } + } + + @media (min-width: 992px) { + .navbar-expand-lg { + flex-flow: row nowrap; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + 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, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl { + flex-wrap: nowrap; + } + .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } + } + + @media (max-width: 1199.98px) { + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl { + padding-right: 0; + padding-left: 0; + } + } + + @media (min-width: 1200px) { + .navbar-expand-xl { + flex-flow: row nowrap; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + 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, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl { + flex-wrap: nowrap; + } + .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } + } + + .navbar-expand { + flex-flow: row nowrap; + justify-content: flex-start; + } + + .navbar-expand > .container, + .navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl { + padding-right: 0; + padding-left: 0; + } + + .navbar-expand .navbar-nav { + 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, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl { + flex-wrap: nowrap; + } + + .navbar-expand .navbar-nav-scroll { + overflow: visible; + } + + .navbar-expand .navbar-collapse { + display: flex !important; + 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 xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' 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 xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' 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; + } + + + .shadow-sm { + box-shadow: 0 0.125rem 0.25rem 0 rgba(58, 59, 69, 0.2) !important; + } + + .shadow { + box-shadow: 0 0.15rem 1.75rem 0 rgba(58, 59, 69, 0.15) !important; + } + + .shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; + } + + .shadow-none { + box-shadow: none !important; + } \ No newline at end of file diff --git a/assets/styles/backend/navs/_sidebar.scss b/assets/styles/backend/navs/_sidebar.scss new file mode 100644 index 0000000..03bbb66 --- /dev/null +++ b/assets/styles/backend/navs/_sidebar.scss @@ -0,0 +1,477 @@ +// Sidebar +.sidebar { + width: $sidebar-collapsed-width; + min-height: 100vh; + + .nav-item { + position: relative; + + &:last-child { + margin-bottom: 1rem; + } + + .nav-link { + text-align: center; + padding: 0.75rem 1rem; + width: $sidebar-collapsed-width; + + span { + font-size: 0.65rem; + display: block; + } + } + + &.active { + .nav-link { + font-weight: 700; + } + } + + // Accordion + .collapse { + position: absolute; + left: calc(#{$sidebar-collapsed-width} + #{$grid-gutter-width} / 2); + z-index: 1; + top: 2px; + // Grow In Animation + @extend .animated--grow-in; + + .collapse-inner { + border-radius: $border-radius; + box-shadow: $box-shadow; + } + } + + .collapsing { + display: none; + transition: none; + } + + .collapse, + .collapsing { + .collapse-inner { + padding: .5rem 0; + min-width: 10rem; + font-size: $dropdown-font-size; + margin: 0 0 1rem 0; + + .collapse-header { + margin: 0; + white-space: nowrap; + padding: .5rem 1.5rem; + text-transform: uppercase; + font-weight: 800; + font-size: 0.65rem; + color: $gray-500; + } + + .collapse-item { + padding: 0.5rem 1rem; + margin: 0 0.5rem; + display: block; + color: $gray-900; + text-decoration: none; + border-radius: $border-radius; + white-space: nowrap; + + &:hover { + background-color: $gray-200; + } + + &:active { + background-color: $gray-300; + } + + &.active { + color: $primary; + font-weight: 700; + } + } + } + } + } + + #sidebarToggle { + width: 2.5rem; + height: 2.5rem; + text-align: center; + margin-bottom: 1rem; + cursor: pointer; + + &::after { + font-weight: 900; + content: '\f104'; + font-family: 'Font Awesome 5 Free'; + margin-right: 0.1rem; + } + + &:hover { + text-decoration: none; + } + + &:focus { + outline: none; + } + } + + &.toggled { + width: 0 !important; + overflow: hidden; + + #sidebarToggle::after { + content: '\f105'; + font-family: 'Font Awesome 5 Free'; + margin-left: 0.25rem; + } + + .sidebar-card { + display: none; + } + } + + .sidebar-brand { + height: $topbar-base-height; + text-decoration: none; + font-size: 1rem; + font-weight: 800; + padding: 1.5rem 1rem; + text-align: center; + text-transform: uppercase; + letter-spacing: 0.05rem; + z-index: 1; + + .sidebar-brand-icon i { + font-size: 2rem; + } + + .sidebar-brand-text { + display: none; + } + } + + hr.sidebar-divider { + margin: 0 1rem 1rem; + } + + .sidebar-heading { + text-align: center; + padding: 0 1rem; + font-weight: 800; + font-size: 0.65rem; + @extend .text-uppercase; + } + + .sidebar-card { + display: flex; + flex-direction: column; + align-items: center; + font-size: $font-size-sm; + border-radius: $border-radius; + color: fade-out($white, 0.2); + margin-left: 1rem; + margin-right: 1rem; + margin-bottom: 1rem; + padding: 1rem; + background-color: fade-out($black, 0.9); + .sidebar-card-illustration { + height: 3rem; + display: block; + } + .sidebar-card-title { + font-weight: bold; + } + p { + font-size: 0.75rem; + color: fade-out($white, 0.5); + } + } +} + +@include media-breakpoint-up(md) { + .sidebar { + width: $sidebar-base-width !important; + + .nav-item { + + // Accordion + .collapse { + position: relative; + left: 0; + z-index: 1; + top: 0; + animation: none; + + .collapse-inner { + border-radius: 0; + box-shadow: none; + } + } + + .collapsing { + display: block; + transition: $transition-collapse; + } + + .collapse, + .collapsing { + margin: 0 1rem; + } + + .nav-link { + display: block; + width: 100%; + text-align: left; + padding: 1rem; + width: $sidebar-base-width; + + i { + font-size: 0.85rem; + margin-right: 0.25rem; + } + + span { + font-size: 0.85rem; + display: inline; + } + + // Accordion Arrow Icon + &[data-toggle="collapse"] { + &::after { + width: 1rem; + text-align: center; + float: right; + vertical-align: 0; + border: 0; + font-weight: 900; + content: '\f107'; + font-family: 'Font Awesome 5 Free'; + } + + &.collapsed::after { + content: '\f105'; + } + } + } + } + + .sidebar-brand { + .sidebar-brand-icon i { + font-size: 2rem; + } + + .sidebar-brand-text { + display: inline; + } + } + + .sidebar-heading { + text-align: left; + } + + &.toggled { + overflow: visible; + width: $sidebar-collapsed-width !important; + + .nav-item { + + // Accordion + .collapse { + position: absolute; + left: calc(#{$sidebar-collapsed-width} + #{$grid-gutter-width} / 2); + z-index: 1; + top: 2px; + // Grow In Animation for Toggled State + animation-name: growIn; + animation-duration: 200ms; + animation-timing-function: transform cubic-bezier(.18, 1.25, .4, 1), opacity cubic-bezier(0, 1, .4, 1); + + .collapse-inner { + box-shadow: $box-shadow; + border-radius: $border-radius; + } + } + + .collapsing { + display: none; + transition: none; + } + + .collapse, + .collapsing { + margin: 0; + } + + &:last-child { + margin-bottom: 1rem; + } + + .nav-link { + text-align: center; + padding: 0.75rem 1rem; + width: $sidebar-collapsed-width; + + span { + font-size: 0.65rem; + display: block; + } + + i { + margin-right: 0; + } + + &[data-toggle="collapse"]::after { + display: none; + } + } + } + + .sidebar-brand { + .sidebar-brand-icon i { + font-size: 2rem; + } + + .sidebar-brand-text { + display: none; + } + } + + .sidebar-heading { + text-align: center; + } + } + } +} + +// Sidebar Color Variants + +// Sidebar Light +.sidebar-light { + .sidebar-brand { + color: $gray-700; + } + + hr.sidebar-divider { + border-top: 1px solid $gray-200; + } + + .sidebar-heading { + color: $gray-500; + } + + .nav-item { + .nav-link { + color: $gray-600; + + i { + color: $gray-400; + } + + &:active, + &:focus, + &:hover { + color: $gray-700; + + i { + color: $gray-700; + } + } + + // Accordion + &[data-toggle="collapse"]::after { + color: $gray-500; + } + } + + &.active { + .nav-link { + color: $gray-700; + + i { + color: $gray-700; + } + } + } + } + + // Color the sidebar toggler + #sidebarToggle { + background-color: $gray-200; + + &::after { + color: $gray-500; + } + + &:hover { + background-color: $gray-300; + } + } +} + +// Sidebar Dark +.sidebar-dark { + .sidebar-brand { + color: $white; + } + + hr.sidebar-divider { + border-top: 1px solid fade-out($white, 0.85); + } + + .sidebar-heading { + color: fade-out($white, 0.6); + } + + .nav-item { + .nav-link { + color: fade-out($white, 0.2); + + i { + color: fade-out($white, 0.7); + } + + &:active, + &:focus, + &:hover { + color: $white; + + i { + color: $white; + } + } + + // Accordion + &[data-toggle="collapse"]::after { + color: fade-out($white, 0.5); + } + } + + &.active { + .nav-link { + color: $white; + + i { + color: $white; + } + } + } + } + + // Color the sidebar toggler + #sidebarToggle { + background-color: fade-out($white, 0.8); + + &::after { + color: fade-out($white, 0.5); + } + + &:hover { + background-color: fade-out($white, 0.75); + } + } + + &.toggled { + #sidebarToggle::after { + color: fade-out($white, 0.5); + } + } +} \ No newline at end of file diff --git a/assets/styles/backend/navs/_topbar.scss b/assets/styles/backend/navs/_topbar.scss new file mode 100644 index 0000000..fef10b3 --- /dev/null +++ b/assets/styles/backend/navs/_topbar.scss @@ -0,0 +1,144 @@ +// Topbar +.topbar { + height: $topbar-base-height; + #sidebarToggleTop { + height: 2.5rem; + width: 2.5rem; + &:hover { + background-color: $gray-200; + } + &:active { + background-color: $gray-300; + } + } + .navbar-search { + width: 25rem; + input { + font-size: 0.85rem; + height: auto; + } + } + .topbar-divider { + width: 0; + border-right: 1px solid $border-color; + height: calc(#{$topbar-base-height} - 2rem); + margin: auto 1rem; + } + .nav-item { + .nav-link { + height: $topbar-base-height; + display: flex; + align-items: center; + padding: 0 0.75rem; + &:focus { + outline: none; + } + } + &:focus { + outline: none; + } + } + .dropdown { + position: static; + .dropdown-menu { + width: calc(100% - #{$grid-gutter-width}); + right: calc($grid-gutter-width / 2); + } + } + .dropdown-list { + padding: 0; + border: none; + overflow: hidden; + .dropdown-header { + background-color: $primary; + border: 1px solid $primary; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: $white; + } + .dropdown-item { + white-space: normal; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + border-left: 1px solid $border-color; + border-right: 1px solid $border-color; + border-bottom: 1px solid $border-color; + line-height: 1.3rem; + .dropdown-list-image { + position: relative; + height: 2.5rem; + width: 2.5rem; + img { + height: 2.5rem; + width: 2.5rem; + } + .status-indicator { + background-color: $gray-200; + height: 0.75rem; + width: 0.75rem; + border-radius: 100%; + position: absolute; + bottom: 0; + right: 0; + border: .125rem solid $white; + } + } + .text-truncate { + max-width: 10rem; + } + &:active { + background-color: $gray-200; + color: $gray-900; + } + } + } + @include media-breakpoint-up(sm) { + .dropdown { + position: relative; + .dropdown-menu { + width: auto; + right: 0; + } + } + .dropdown-list { + width: 20rem !important; + .dropdown-item { + .text-truncate { + max-width: 13.375rem; + } + } + } + } +} + +.topbar.navbar-dark { + .navbar-nav { + .nav-item { + .nav-link { + color: fade-out($white, 0.2); + &:hover { + color: $white; + } + &:active { + color: $white; + } + } + } + } +} + +.topbar.navbar-light { + .navbar-nav { + .nav-item { + .nav-link { + color: $gray-400; + &:hover { + color: $gray-500; + } + &:active { + color: $gray-600; + } + } + } + } +} diff --git a/assets/styles/backend/sb-admin-2.css b/assets/styles/backend/sb-admin-2.css new file mode 100644 index 0000000..fb96fb4 --- /dev/null +++ b/assets/styles/backend/sb-admin-2.css @@ -0,0 +1,11281 @@ +/*! + * Start Bootstrap - SB Admin 2 v4.1.3 (https://startbootstrap.com/theme/sb-admin-2) + * Copyright 2013-2021 Start Bootstrap + * Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-sb-admin-2/blob/master/LICENSE) + */ + +/*! + * Bootstrap v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root { + --blue: #4e73df; + --indigo: #6610f2; + --purple: #6f42c1; + --pink: #e83e8c; + --red: #e74a3b; + --orange: #fd7e14; + --yellow: #f6c23e; + --green: #1cc88a; + --teal: #20c9a6; + --cyan: #36b9cc; + --white: #fff; + --gray: #858796; + --gray-dark: #5a5c69; + --primary: #4e73df; + --secondary: #858796; + --success: #1cc88a; + --info: #36b9cc; + --warning: #f6c23e; + --danger: #e74a3b; + --light: #f8f9fc; + --dark: #5a5c69; + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --font-family-sans-serif: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, 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 { + 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: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, 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: #858796; + text-align: left; + background-color: #fff; +} + +[tabindex="-1"]:focus:not(:focus-visible) { + outline: 0 !important; +} + +hr { + 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; + -webkit-text-decoration-skip-ink: none; + 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: #4e73df; + text-decoration: none; + background-color: transparent; +} + +a:hover { + color: #224abe; + text-decoration: underline; +} + +a:not([href]):not([class]) { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; +} + +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; + -ms-overflow-style: scrollbar; +} + +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: #858796; + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; + text-align: -webkit-match-parent; +} + +label { + display: inline-block; + margin-bottom: 0.5rem; +} + +button { + border-radius: 0; +} + +button:focus:not(:focus-visible) { + outline: 0; +} + +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; +} + +[role="button"] { + cursor: pointer; +} + +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"] { + box-sizing: border-box; + padding: 0; +} + +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: 400; + 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: #858796; +} + +.blockquote-footer::before { + content: "\2014\00A0"; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid #dddfeb; + border-radius: 0.35rem; + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 90%; + color: #858796; +} + +code { + font-size: 87.5%; + color: #e83e8c; + word-wrap: break-word; +} + +a > code { + color: inherit; +} + +kbd { + padding: 0.2rem 0.4rem; + font-size: 87.5%; + color: #fff; + background-color: #3a3b45; + border-radius: 0.2rem; +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; +} + +pre { + display: block; + font-size: 87.5%; + color: #3a3b45; +} + +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container, +.container-fluid, +.container-sm, +.container-md, +.container-lg, +.container-xl { + width: 100%; + padding-right: 0.75rem; + padding-left: 0.75rem; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container, .container-sm { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .container, .container-sm, .container-md { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container, .container-sm, .container-md, .container-lg { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .container, .container-sm, .container-md, .container-lg, .container-xl { + max-width: 1140px; + } +} + +.row { + display: flex; + flex-wrap: wrap; + margin-right: -0.75rem; + margin-left: -0.75rem; +} + +.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: 0.75rem; + padding-left: 0.75rem; +} + +.col { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; +} + +.row-cols-1 > * { + flex: 0 0 100%; + max-width: 100%; +} + +.row-cols-2 > * { + flex: 0 0 50%; + max-width: 50%; +} + +.row-cols-3 > * { + flex: 0 0 33.33333%; + max-width: 33.33333%; +} + +.row-cols-4 > * { + flex: 0 0 25%; + max-width: 25%; +} + +.row-cols-5 > * { + flex: 0 0 20%; + max-width: 20%; +} + +.row-cols-6 > * { + flex: 0 0 16.66667%; + max-width: 16.66667%; +} + +.col-auto { + flex: 0 0 auto; + width: auto; + max-width: 100%; +} + +.col-1 { + flex: 0 0 8.33333%; + max-width: 8.33333%; +} + +.col-2 { + flex: 0 0 16.66667%; + max-width: 16.66667%; +} + +.col-3 { + flex: 0 0 25%; + max-width: 25%; +} + +.col-4 { + flex: 0 0 33.33333%; + max-width: 33.33333%; +} + +.col-5 { + flex: 0 0 41.66667%; + max-width: 41.66667%; +} + +.col-6 { + flex: 0 0 50%; + max-width: 50%; +} + +.col-7 { + flex: 0 0 58.33333%; + max-width: 58.33333%; +} + +.col-8 { + flex: 0 0 66.66667%; + max-width: 66.66667%; +} + +.col-9 { + flex: 0 0 75%; + max-width: 75%; +} + +.col-10 { + flex: 0 0 83.33333%; + max-width: 83.33333%; +} + +.col-11 { + flex: 0 0 91.66667%; + max-width: 91.66667%; +} + +.col-12 { + flex: 0 0 100%; + max-width: 100%; +} + +.order-first { + order: -1; +} + +.order-last { + order: 13; +} + +.order-0 { + order: 0; +} + +.order-1 { + order: 1; +} + +.order-2 { + order: 2; +} + +.order-3 { + order: 3; +} + +.order-4 { + order: 4; +} + +.order-5 { + order: 5; +} + +.order-6 { + order: 6; +} + +.order-7 { + order: 7; +} + +.order-8 { + order: 8; +} + +.order-9 { + order: 9; +} + +.order-10 { + order: 10; +} + +.order-11 { + order: 11; +} + +.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 { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .row-cols-sm-1 > * { + flex: 0 0 100%; + max-width: 100%; + } + .row-cols-sm-2 > * { + flex: 0 0 50%; + max-width: 50%; + } + .row-cols-sm-3 > * { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .row-cols-sm-4 > * { + flex: 0 0 25%; + max-width: 25%; + } + .row-cols-sm-5 > * { + flex: 0 0 20%; + max-width: 20%; + } + .row-cols-sm-6 > * { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .col-sm-auto { + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-sm-1 { + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .col-sm-2 { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .col-sm-3 { + flex: 0 0 25%; + max-width: 25%; + } + .col-sm-4 { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .col-sm-5 { + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .col-sm-6 { + flex: 0 0 50%; + max-width: 50%; + } + .col-sm-7 { + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .col-sm-8 { + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .col-sm-9 { + flex: 0 0 75%; + max-width: 75%; + } + .col-sm-10 { + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .col-sm-11 { + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .col-sm-12 { + flex: 0 0 100%; + max-width: 100%; + } + .order-sm-first { + order: -1; + } + .order-sm-last { + order: 13; + } + .order-sm-0 { + order: 0; + } + .order-sm-1 { + order: 1; + } + .order-sm-2 { + order: 2; + } + .order-sm-3 { + order: 3; + } + .order-sm-4 { + order: 4; + } + .order-sm-5 { + order: 5; + } + .order-sm-6 { + order: 6; + } + .order-sm-7 { + order: 7; + } + .order-sm-8 { + order: 8; + } + .order-sm-9 { + order: 9; + } + .order-sm-10 { + order: 10; + } + .order-sm-11 { + order: 11; + } + .order-sm-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 { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .row-cols-md-1 > * { + flex: 0 0 100%; + max-width: 100%; + } + .row-cols-md-2 > * { + flex: 0 0 50%; + max-width: 50%; + } + .row-cols-md-3 > * { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .row-cols-md-4 > * { + flex: 0 0 25%; + max-width: 25%; + } + .row-cols-md-5 > * { + flex: 0 0 20%; + max-width: 20%; + } + .row-cols-md-6 > * { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .col-md-auto { + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-md-1 { + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .col-md-2 { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .col-md-3 { + flex: 0 0 25%; + max-width: 25%; + } + .col-md-4 { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .col-md-5 { + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .col-md-6 { + flex: 0 0 50%; + max-width: 50%; + } + .col-md-7 { + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .col-md-8 { + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .col-md-9 { + flex: 0 0 75%; + max-width: 75%; + } + .col-md-10 { + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .col-md-11 { + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .col-md-12 { + flex: 0 0 100%; + max-width: 100%; + } + .order-md-first { + order: -1; + } + .order-md-last { + order: 13; + } + .order-md-0 { + order: 0; + } + .order-md-1 { + order: 1; + } + .order-md-2 { + order: 2; + } + .order-md-3 { + order: 3; + } + .order-md-4 { + order: 4; + } + .order-md-5 { + order: 5; + } + .order-md-6 { + order: 6; + } + .order-md-7 { + order: 7; + } + .order-md-8 { + order: 8; + } + .order-md-9 { + order: 9; + } + .order-md-10 { + order: 10; + } + .order-md-11 { + order: 11; + } + .order-md-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 { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .row-cols-lg-1 > * { + flex: 0 0 100%; + max-width: 100%; + } + .row-cols-lg-2 > * { + flex: 0 0 50%; + max-width: 50%; + } + .row-cols-lg-3 > * { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .row-cols-lg-4 > * { + flex: 0 0 25%; + max-width: 25%; + } + .row-cols-lg-5 > * { + flex: 0 0 20%; + max-width: 20%; + } + .row-cols-lg-6 > * { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .col-lg-auto { + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-lg-1 { + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .col-lg-2 { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .col-lg-3 { + flex: 0 0 25%; + max-width: 25%; + } + .col-lg-4 { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .col-lg-5 { + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .col-lg-6 { + flex: 0 0 50%; + max-width: 50%; + } + .col-lg-7 { + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .col-lg-8 { + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .col-lg-9 { + flex: 0 0 75%; + max-width: 75%; + } + .col-lg-10 { + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .col-lg-11 { + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .col-lg-12 { + flex: 0 0 100%; + max-width: 100%; + } + .order-lg-first { + order: -1; + } + .order-lg-last { + order: 13; + } + .order-lg-0 { + order: 0; + } + .order-lg-1 { + order: 1; + } + .order-lg-2 { + order: 2; + } + .order-lg-3 { + order: 3; + } + .order-lg-4 { + order: 4; + } + .order-lg-5 { + order: 5; + } + .order-lg-6 { + order: 6; + } + .order-lg-7 { + order: 7; + } + .order-lg-8 { + order: 8; + } + .order-lg-9 { + order: 9; + } + .order-lg-10 { + order: 10; + } + .order-lg-11 { + order: 11; + } + .order-lg-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 { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .row-cols-xl-1 > * { + flex: 0 0 100%; + max-width: 100%; + } + .row-cols-xl-2 > * { + flex: 0 0 50%; + max-width: 50%; + } + .row-cols-xl-3 > * { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .row-cols-xl-4 > * { + flex: 0 0 25%; + max-width: 25%; + } + .row-cols-xl-5 > * { + flex: 0 0 20%; + max-width: 20%; + } + .row-cols-xl-6 > * { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .col-xl-auto { + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-xl-1 { + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .col-xl-2 { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .col-xl-3 { + flex: 0 0 25%; + max-width: 25%; + } + .col-xl-4 { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .col-xl-5 { + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .col-xl-6 { + flex: 0 0 50%; + max-width: 50%; + } + .col-xl-7 { + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .col-xl-8 { + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .col-xl-9 { + flex: 0 0 75%; + max-width: 75%; + } + .col-xl-10 { + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .col-xl-11 { + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .col-xl-12 { + flex: 0 0 100%; + max-width: 100%; + } + .order-xl-first { + order: -1; + } + .order-xl-last { + order: 13; + } + .order-xl-0 { + order: 0; + } + .order-xl-1 { + order: 1; + } + .order-xl-2 { + order: 2; + } + .order-xl-3 { + order: 3; + } + .order-xl-4 { + order: 4; + } + .order-xl-5 { + order: 5; + } + .order-xl-6 { + order: 6; + } + .order-xl-7 { + order: 7; + } + .order-xl-8 { + order: 8; + } + .order-xl-9 { + order: 9; + } + .order-xl-10 { + order: 10; + } + .order-xl-11 { + order: 11; + } + .order-xl-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: #858796; +} + +.table th, +.table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #e3e6f0; +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid #e3e6f0; +} + +.table tbody + tbody { + border-top: 2px solid #e3e6f0; +} + +.table-sm th, +.table-sm td { + padding: 0.3rem; +} + +.table-bordered { + border: 1px solid #e3e6f0; +} + +.table-bordered th, +.table-bordered td { + border: 1px solid #e3e6f0; +} + +.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: #858796; + background-color: rgba(0, 0, 0, 0.075); +} + +.table-primary, +.table-primary > th, +.table-primary > td { + background-color: #cdd8f6; +} + +.table-primary th, +.table-primary td, +.table-primary thead th, +.table-primary tbody + tbody { + border-color: #a3b6ee; +} + +.table-hover .table-primary:hover { + background-color: #b7c7f2; +} + +.table-hover .table-primary:hover > td, +.table-hover .table-primary:hover > th { + background-color: #b7c7f2; +} + +.table-secondary, +.table-secondary > th, +.table-secondary > td { + background-color: #dddde2; +} + +.table-secondary th, +.table-secondary td, +.table-secondary thead th, +.table-secondary tbody + tbody { + border-color: #c0c1c8; +} + +.table-hover .table-secondary:hover { + background-color: #cfcfd6; +} + +.table-hover .table-secondary:hover > td, +.table-hover .table-secondary:hover > th { + background-color: #cfcfd6; +} + +.table-success, +.table-success > th, +.table-success > td { + background-color: #bff0de; +} + +.table-success th, +.table-success td, +.table-success thead th, +.table-success tbody + tbody { + border-color: #89e2c2; +} + +.table-hover .table-success:hover { + background-color: #aaebd3; +} + +.table-hover .table-success:hover > td, +.table-hover .table-success:hover > th { + background-color: #aaebd3; +} + +.table-info, +.table-info > th, +.table-info > td { + background-color: #c7ebf1; +} + +.table-info th, +.table-info td, +.table-info thead th, +.table-info tbody + tbody { + border-color: #96dbe4; +} + +.table-hover .table-info:hover { + background-color: #b3e4ec; +} + +.table-hover .table-info:hover > td, +.table-hover .table-info:hover > th { + background-color: #b3e4ec; +} + +.table-warning, +.table-warning > th, +.table-warning > td { + background-color: #fceec9; +} + +.table-warning th, +.table-warning td, +.table-warning thead th, +.table-warning tbody + tbody { + border-color: #fadf9b; +} + +.table-hover .table-warning:hover { + background-color: #fbe6b1; +} + +.table-hover .table-warning:hover > td, +.table-hover .table-warning:hover > th { + background-color: #fbe6b1; +} + +.table-danger, +.table-danger > th, +.table-danger > td { + background-color: #f8ccc8; +} + +.table-danger th, +.table-danger td, +.table-danger thead th, +.table-danger tbody + tbody { + border-color: #f3a199; +} + +.table-hover .table-danger:hover { + background-color: #f5b7b1; +} + +.table-hover .table-danger:hover > td, +.table-hover .table-danger:hover > th { + background-color: #f5b7b1; +} + +.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: #fbfcfd; +} + +.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: #d1d1d5; +} + +.table-dark th, +.table-dark td, +.table-dark thead th, +.table-dark tbody + tbody { + border-color: #a9aab1; +} + +.table-hover .table-dark:hover { + background-color: #c4c4c9; +} + +.table-hover .table-dark:hover > td, +.table-hover .table-dark:hover > th { + background-color: #c4c4c9; +} + +.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: #5a5c69; + border-color: #6c6e7e; +} + +.table .thead-light th { + color: #6e707e; + background-color: #eaecf4; + border-color: #e3e6f0; +} + +.table-dark { + color: #fff; + background-color: #5a5c69; +} + +.table-dark th, +.table-dark td, +.table-dark thead th { + border-color: #6c6e7e; +} + +.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: #6e707e; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #d1d3e2; + border-radius: 0.35rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .form-control { + transition: none; + } +} + +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} + +.form-control:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #6e707e; +} + +.form-control:focus { + color: #6e707e; + background-color: #fff; + border-color: #bac8f3; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.25); +} + +.form-control::-webkit-input-placeholder { + color: #858796; + opacity: 1; +} + +.form-control::-moz-placeholder { + color: #858796; + opacity: 1; +} + +.form-control:-ms-input-placeholder { + color: #858796; + opacity: 1; +} + +.form-control::-ms-input-placeholder { + color: #858796; + opacity: 1; +} + +.form-control::placeholder { + color: #858796; + opacity: 1; +} + +.form-control:disabled, .form-control[readonly] { + background-color: #eaecf4; + opacity: 1; +} + +input[type="date"].form-control, +input[type="time"].form-control, +input[type="datetime-local"].form-control, +input[type="month"].form-control { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +select.form-control:focus::-ms-value { + color: #6e707e; + 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: 0.375rem 0; + margin-bottom: 0; + font-size: 1rem; + line-height: 1.5; + color: #858796; + 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: flex; + 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, +.form-check-input:disabled ~ .form-check-label { + color: #858796; +} + +.form-check-label { + margin-bottom: 0; +} + +.form-check-inline { + display: inline-flex; + 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: #1cc88a; +} + +.valid-tooltip { + position: absolute; + top: 100%; + left: 0; + 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(28, 200, 138, 0.9); + border-radius: 0.35rem; +} + +.form-row > .col > .valid-tooltip, +.form-row > [class*="col-"] > .valid-tooltip { + left: 5px; +} + +.was-validated :valid ~ .valid-feedback, +.was-validated :valid ~ .valid-tooltip, +.is-valid ~ .valid-feedback, +.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-control:valid, .form-control.is-valid { + border-color: #1cc88a; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%231cc88a' 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: right calc(0.375em + 0.1875rem) center; + 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: #1cc88a; + box-shadow: 0 0 0 0.2rem rgba(28, 200, 138, 0.25); +} + +.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: #1cc88a; + padding-right: calc(0.75em + 2.3125rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%231cc88a' 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") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat; +} + +.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { + border-color: #1cc88a; + box-shadow: 0 0 0 0.2rem rgba(28, 200, 138, 0.25); +} + +.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: #1cc88a; +} + +.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: #1cc88a; +} + +.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { + border-color: #1cc88a; +} + +.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { + border-color: #34e3a4; + background-color: #34e3a4; +} + +.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(28, 200, 138, 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: #1cc88a; +} + +.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { + border-color: #1cc88a; +} + +.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { + border-color: #1cc88a; + box-shadow: 0 0 0 0.2rem rgba(28, 200, 138, 0.25); +} + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #e74a3b; +} + +.invalid-tooltip { + position: absolute; + top: 100%; + left: 0; + 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(231, 74, 59, 0.9); + border-radius: 0.35rem; +} + +.form-row > .col > .invalid-tooltip, +.form-row > [class*="col-"] > .invalid-tooltip { + left: 5px; +} + +.was-validated :invalid ~ .invalid-feedback, +.was-validated :invalid ~ .invalid-tooltip, +.is-invalid ~ .invalid-feedback, +.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: #e74a3b; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e74a3b' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74a3b' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + 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: #e74a3b; + box-shadow: 0 0 0 0.2rem rgba(231, 74, 59, 0.25); +} + +.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: #e74a3b; + padding-right: calc(0.75em + 2.3125rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e74a3b' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74a3b' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat; +} + +.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { + border-color: #e74a3b; + box-shadow: 0 0 0 0.2rem rgba(231, 74, 59, 0.25); +} + +.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: #e74a3b; +} + +.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: #e74a3b; +} + +.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { + border-color: #e74a3b; +} + +.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { + border-color: #ed7468; + background-color: #ed7468; +} + +.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(231, 74, 59, 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: #e74a3b; +} + +.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { + border-color: #e74a3b; +} + +.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { + border-color: #e74a3b; + box-shadow: 0 0 0 0.2rem rgba(231, 74, 59, 0.25); +} + +.form-inline { + display: flex; + flex-flow: row wrap; + align-items: center; +} + +.form-inline .form-check { + width: 100%; +} + +@media (min-width: 576px) { + .form-inline label { + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 0; + } + .form-inline .form-group { + display: flex; + flex: 0 0 auto; + flex-flow: row wrap; + 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: flex; + align-items: center; + justify-content: center; + width: auto; + padding-left: 0; + } + .form-inline .form-check-input { + position: relative; + flex-shrink: 0; + margin-top: 0; + margin-right: 0.25rem; + margin-left: 0; + } + .form-inline .custom-control { + align-items: center; + justify-content: center; + } + .form-inline .custom-control-label { + margin-bottom: 0; + } +} + +.btn { + display: inline-block; + font-weight: 400; + color: #858796; + 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.35rem; + 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; +} + +@media (prefers-reduced-motion: reduce) { + .btn { + transition: none; + } +} + +.btn:hover { + color: #858796; + text-decoration: none; +} + +.btn:focus, .btn.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.25); +} + +.btn.disabled, .btn:disabled { + opacity: 0.65; +} + +.btn:not(:disabled):not(.disabled) { + cursor: pointer; +} + +a.btn.disabled, +fieldset:disabled a.btn { + pointer-events: none; +} + +.btn-primary { + color: #fff; + background-color: #4e73df; + border-color: #4e73df; +} + +.btn-primary:hover { + color: #fff; + background-color: #2e59d9; + border-color: #2653d4; +} + +.btn-primary:focus, .btn-primary.focus { + color: #fff; + background-color: #2e59d9; + border-color: #2653d4; + box-shadow: 0 0 0 0.2rem rgba(105, 136, 228, 0.5); +} + +.btn-primary.disabled, .btn-primary:disabled { + color: #fff; + background-color: #4e73df; + border-color: #4e73df; +} + +.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, +.show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #2653d4; + border-color: #244ec9; +} + +.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, +.show > .btn-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(105, 136, 228, 0.5); +} + +.btn-secondary { + color: #fff; + background-color: #858796; + border-color: #858796; +} + +.btn-secondary:hover { + color: #fff; + background-color: #717384; + border-color: #6b6d7d; +} + +.btn-secondary:focus, .btn-secondary.focus { + color: #fff; + background-color: #717384; + border-color: #6b6d7d; + box-shadow: 0 0 0 0.2rem rgba(151, 153, 166, 0.5); +} + +.btn-secondary.disabled, .btn-secondary:disabled { + color: #fff; + background-color: #858796; + border-color: #858796; +} + +.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, +.show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: #6b6d7d; + border-color: #656776; +} + +.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, +.show > .btn-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(151, 153, 166, 0.5); +} + +.btn-success { + color: #fff; + background-color: #1cc88a; + border-color: #1cc88a; +} + +.btn-success:hover { + color: #fff; + background-color: #17a673; + border-color: #169b6b; +} + +.btn-success:focus, .btn-success.focus { + color: #fff; + background-color: #17a673; + border-color: #169b6b; + box-shadow: 0 0 0 0.2rem rgba(62, 208, 156, 0.5); +} + +.btn-success.disabled, .btn-success:disabled { + color: #fff; + background-color: #1cc88a; + border-color: #1cc88a; +} + +.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, +.show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #169b6b; + border-color: #149063; +} + +.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, +.show > .btn-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(62, 208, 156, 0.5); +} + +.btn-info { + color: #fff; + background-color: #36b9cc; + border-color: #36b9cc; +} + +.btn-info:hover { + color: #fff; + background-color: #2c9faf; + border-color: #2a96a5; +} + +.btn-info:focus, .btn-info.focus { + color: #fff; + background-color: #2c9faf; + border-color: #2a96a5; + box-shadow: 0 0 0 0.2rem rgba(84, 196, 212, 0.5); +} + +.btn-info.disabled, .btn-info:disabled { + color: #fff; + background-color: #36b9cc; + border-color: #36b9cc; +} + +.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, +.show > .btn-info.dropdown-toggle { + color: #fff; + background-color: #2a96a5; + border-color: #278c9b; +} + +.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, +.show > .btn-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(84, 196, 212, 0.5); +} + +.btn-warning { + color: #fff; + background-color: #f6c23e; + border-color: #f6c23e; +} + +.btn-warning:hover { + color: #fff; + background-color: #f4b619; + border-color: #f4b30d; +} + +.btn-warning:focus, .btn-warning.focus { + color: #fff; + background-color: #f4b619; + border-color: #f4b30d; + box-shadow: 0 0 0 0.2rem rgba(247, 203, 91, 0.5); +} + +.btn-warning.disabled, .btn-warning:disabled { + color: #fff; + background-color: #f6c23e; + border-color: #f6c23e; +} + +.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, +.show > .btn-warning.dropdown-toggle { + color: #fff; + background-color: #f4b30d; + border-color: #e9aa0b; +} + +.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, +.show > .btn-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(247, 203, 91, 0.5); +} + +.btn-danger { + color: #fff; + background-color: #e74a3b; + border-color: #e74a3b; +} + +.btn-danger:hover { + color: #fff; + background-color: #e02d1b; + border-color: #d52a1a; +} + +.btn-danger:focus, .btn-danger.focus { + color: #fff; + background-color: #e02d1b; + border-color: #d52a1a; + box-shadow: 0 0 0 0.2rem rgba(235, 101, 88, 0.5); +} + +.btn-danger.disabled, .btn-danger:disabled { + color: #fff; + background-color: #e74a3b; + border-color: #e74a3b; +} + +.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, +.show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #d52a1a; + border-color: #ca2819; +} + +.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, +.show > .btn-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(235, 101, 88, 0.5); +} + +.btn-light { + color: #3a3b45; + background-color: #f8f9fc; + border-color: #f8f9fc; +} + +.btn-light:hover { + color: #3a3b45; + background-color: #dde2f1; + border-color: #d4daed; +} + +.btn-light:focus, .btn-light.focus { + color: #3a3b45; + background-color: #dde2f1; + border-color: #d4daed; + box-shadow: 0 0 0 0.2rem rgba(220, 221, 225, 0.5); +} + +.btn-light.disabled, .btn-light:disabled { + color: #3a3b45; + background-color: #f8f9fc; + border-color: #f8f9fc; +} + +.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, +.show > .btn-light.dropdown-toggle { + color: #3a3b45; + background-color: #d4daed; + border-color: #cbd3e9; +} + +.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, +.show > .btn-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(220, 221, 225, 0.5); +} + +.btn-dark { + color: #fff; + background-color: #5a5c69; + border-color: #5a5c69; +} + +.btn-dark:hover { + color: #fff; + background-color: #484a54; + border-color: #42444e; +} + +.btn-dark:focus, .btn-dark.focus { + color: #fff; + background-color: #484a54; + border-color: #42444e; + box-shadow: 0 0 0 0.2rem rgba(115, 116, 128, 0.5); +} + +.btn-dark.disabled, .btn-dark:disabled { + color: #fff; + background-color: #5a5c69; + border-color: #5a5c69; +} + +.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, +.show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #42444e; + border-color: #3d3e47; +} + +.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, +.show > .btn-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(115, 116, 128, 0.5); +} + +.btn-outline-primary { + color: #4e73df; + border-color: #4e73df; +} + +.btn-outline-primary:hover { + color: #fff; + background-color: #4e73df; + border-color: #4e73df; +} + +.btn-outline-primary:focus, .btn-outline-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.5); +} + +.btn-outline-primary.disabled, .btn-outline-primary:disabled { + color: #4e73df; + 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: #4e73df; + border-color: #4e73df; +} + +.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 { + box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.5); +} + +.btn-outline-secondary { + color: #858796; + border-color: #858796; +} + +.btn-outline-secondary:hover { + color: #fff; + background-color: #858796; + border-color: #858796; +} + +.btn-outline-secondary:focus, .btn-outline-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(133, 135, 150, 0.5); +} + +.btn-outline-secondary.disabled, .btn-outline-secondary:disabled { + color: #858796; + 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: #858796; + border-color: #858796; +} + +.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 { + box-shadow: 0 0 0 0.2rem rgba(133, 135, 150, 0.5); +} + +.btn-outline-success { + color: #1cc88a; + border-color: #1cc88a; +} + +.btn-outline-success:hover { + color: #fff; + background-color: #1cc88a; + border-color: #1cc88a; +} + +.btn-outline-success:focus, .btn-outline-success.focus { + box-shadow: 0 0 0 0.2rem rgba(28, 200, 138, 0.5); +} + +.btn-outline-success.disabled, .btn-outline-success:disabled { + color: #1cc88a; + 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: #1cc88a; + border-color: #1cc88a; +} + +.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 { + box-shadow: 0 0 0 0.2rem rgba(28, 200, 138, 0.5); +} + +.btn-outline-info { + color: #36b9cc; + border-color: #36b9cc; +} + +.btn-outline-info:hover { + color: #fff; + background-color: #36b9cc; + border-color: #36b9cc; +} + +.btn-outline-info:focus, .btn-outline-info.focus { + box-shadow: 0 0 0 0.2rem rgba(54, 185, 204, 0.5); +} + +.btn-outline-info.disabled, .btn-outline-info:disabled { + color: #36b9cc; + 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: #36b9cc; + border-color: #36b9cc; +} + +.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 { + box-shadow: 0 0 0 0.2rem rgba(54, 185, 204, 0.5); +} + +.btn-outline-warning { + color: #f6c23e; + border-color: #f6c23e; +} + +.btn-outline-warning:hover { + color: #fff; + background-color: #f6c23e; + border-color: #f6c23e; +} + +.btn-outline-warning:focus, .btn-outline-warning.focus { + box-shadow: 0 0 0 0.2rem rgba(246, 194, 62, 0.5); +} + +.btn-outline-warning.disabled, .btn-outline-warning:disabled { + color: #f6c23e; + 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: #fff; + background-color: #f6c23e; + border-color: #f6c23e; +} + +.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 { + box-shadow: 0 0 0 0.2rem rgba(246, 194, 62, 0.5); +} + +.btn-outline-danger { + color: #e74a3b; + border-color: #e74a3b; +} + +.btn-outline-danger:hover { + color: #fff; + background-color: #e74a3b; + border-color: #e74a3b; +} + +.btn-outline-danger:focus, .btn-outline-danger.focus { + box-shadow: 0 0 0 0.2rem rgba(231, 74, 59, 0.5); +} + +.btn-outline-danger.disabled, .btn-outline-danger:disabled { + color: #e74a3b; + 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: #e74a3b; + border-color: #e74a3b; +} + +.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 { + box-shadow: 0 0 0 0.2rem rgba(231, 74, 59, 0.5); +} + +.btn-outline-light { + color: #f8f9fc; + border-color: #f8f9fc; +} + +.btn-outline-light:hover { + color: #3a3b45; + background-color: #f8f9fc; + border-color: #f8f9fc; +} + +.btn-outline-light:focus, .btn-outline-light.focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 252, 0.5); +} + +.btn-outline-light.disabled, .btn-outline-light:disabled { + color: #f8f9fc; + 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: #3a3b45; + background-color: #f8f9fc; + border-color: #f8f9fc; +} + +.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 { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 252, 0.5); +} + +.btn-outline-dark { + color: #5a5c69; + border-color: #5a5c69; +} + +.btn-outline-dark:hover { + color: #fff; + background-color: #5a5c69; + border-color: #5a5c69; +} + +.btn-outline-dark:focus, .btn-outline-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(90, 92, 105, 0.5); +} + +.btn-outline-dark.disabled, .btn-outline-dark:disabled { + color: #5a5c69; + 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: #5a5c69; + border-color: #5a5c69; +} + +.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 { + box-shadow: 0 0 0 0.2rem rgba(90, 92, 105, 0.5); +} + +.btn-link { + font-weight: 400; + color: #4e73df; + text-decoration: none; +} + +.btn-link:hover { + color: #224abe; + text-decoration: underline; +} + +.btn-link:focus, .btn-link.focus { + text-decoration: underline; +} + +.btn-link:disabled, .btn-link.disabled { + color: #858796; + 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 { + transition: opacity 0.15s linear; +} + +@media (prefers-reduced-motion: reduce) { + .fade { + transition: none; + } +} + +.fade:not(.show) { + opacity: 0; +} + +.collapse:not(.show) { + display: none; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + transition: height 0.15s ease; +} + +@media (prefers-reduced-motion: reduce) { + .collapsing { + 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: 0.85rem; + color: #858796; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #e3e6f0; + border-radius: 0.35rem; +} + +.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 #eaecf4; +} + +.dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1.5rem; + clear: both; + font-weight: 400; + color: #3a3b45; + text-align: inherit; + white-space: nowrap; + background-color: transparent; + border: 0; +} + +.dropdown-item:hover, .dropdown-item:focus { + color: #2e2f37; + text-decoration: none; + background-color: #eaecf4; +} + +.dropdown-item.active, .dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #4e73df; +} + +.dropdown-item.disabled, .dropdown-item:disabled { + color: #b7b9cc; + 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: #858796; + white-space: nowrap; +} + +.dropdown-item-text { + display: block; + padding: 0.25rem 1.5rem; + color: #3a3b45; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + 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: flex; + flex-wrap: wrap; + 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 { + flex-direction: column; + align-items: flex-start; + 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: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; +} + +.input-group > .form-control, +.input-group > .form-control-plaintext, +.input-group > .custom-select, +.input-group > .custom-file { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; + 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(:first-child), +.input-group > .custom-select:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.input-group > .custom-file { + display: flex; + align-items: center; +} + +.input-group > .custom-file:not(:last-child) .custom-file-label, +.input-group > .custom-file:not(:first-child) .custom-file-label { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.input-group:not(.has-validation) > .form-control:not(:last-child), +.input-group:not(.has-validation) > .custom-select:not(:last-child), +.input-group:not(.has-validation) > .custom-file:not(:last-child) .custom-file-label::after { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group.has-validation > .form-control:nth-last-child(n + 3), +.input-group.has-validation > .custom-select:nth-last-child(n + 3), +.input-group.has-validation > .custom-file:nth-last-child(n + 3) .custom-file-label::after { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group-prepend, +.input-group-append { + 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: flex; + align-items: center; + padding: 0.375rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #6e707e; + text-align: center; + white-space: nowrap; + background-color: #eaecf4; + border: 1px solid #d1d3e2; + border-radius: 0.35rem; +} + +.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:not(.has-validation) > .input-group-append:not(:last-child) > .btn, +.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text, +.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .btn, +.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .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; + z-index: 1; + display: block; + min-height: 1.5rem; + padding-left: 1.5rem; + -webkit-print-color-adjust: exact; + color-adjust: exact; +} + +.custom-control-inline { + display: inline-flex; + margin-right: 1rem; +} + +.custom-control-input { + position: absolute; + left: 0; + z-index: -1; + width: 1rem; + height: 1.25rem; + opacity: 0; +} + +.custom-control-input:checked ~ .custom-control-label::before { + color: #fff; + border-color: #4e73df; + background-color: #4e73df; +} + +.custom-control-input:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.25); +} + +.custom-control-input:focus:not(:checked) ~ .custom-control-label::before { + border-color: #bac8f3; +} + +.custom-control-input:not(:disabled):active ~ .custom-control-label::before { + color: #fff; + background-color: #e5ebfa; + border-color: #e5ebfa; +} + +.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label { + color: #858796; +} + +.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before { + background-color: #eaecf4; +} + +.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: #b7b9cc solid 1px; +} + +.custom-control-label::after { + position: absolute; + top: 0.25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + content: ""; + background: 50% / 50% 50% no-repeat; +} + +.custom-checkbox .custom-control-label::before { + border-radius: 0.35rem; +} + +.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' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e"); +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { + border-color: #4e73df; + background-color: #4e73df; +} + +.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' width='4' height='4' 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(78, 115, 223, 0.5); +} + +.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { + background-color: rgba(78, 115, 223, 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' width='12' height='12' 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(78, 115, 223, 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: #b7b9cc; + border-radius: 0.5rem; + 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; +} + +@media (prefers-reduced-motion: reduce) { + .custom-switch .custom-control-label::after { + transition: none; + } +} + +.custom-switch .custom-control-input:checked ~ .custom-control-label::after { + background-color: #fff; + transform: translateX(0.75rem); +} + +.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(78, 115, 223, 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: #6e707e; + vertical-align: middle; + background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat; + border: 1px solid #d1d3e2; + border-radius: 0.35rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.custom-select:focus { + border-color: #bac8f3; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.25); +} + +.custom-select:focus::-ms-value { + color: #6e707e; + 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: #858796; + background-color: #eaecf4; +} + +.custom-select::-ms-expand { + display: none; +} + +.custom-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #6e707e; +} + +.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; + overflow: hidden; + opacity: 0; +} + +.custom-file-input:focus ~ .custom-file-label { + border-color: #bac8f3; + box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.25); +} + +.custom-file-input[disabled] ~ .custom-file-label, +.custom-file-input:disabled ~ .custom-file-label { + background-color: #eaecf4; +} + +.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; + overflow: hidden; + font-weight: 400; + line-height: 1.5; + color: #6e707e; + background-color: #fff; + border: 1px solid #d1d3e2; + border-radius: 0.35rem; +} + +.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: #6e707e; + content: "Browse"; + background-color: #eaecf4; + border-left: inherit; + border-radius: 0 0.35rem 0.35rem 0; +} + +.custom-range { + width: 100%; + height: 1.4rem; + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.custom-range:focus { + outline: 0; +} + +.custom-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(78, 115, 223, 0.25); +} + +.custom-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(78, 115, 223, 0.25); +} + +.custom-range:focus::-ms-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(78, 115, 223, 0.25); +} + +.custom-range::-moz-focus-outer { + border: 0; +} + +.custom-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #4e73df; + border: 0; + border-radius: 1rem; + -webkit-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-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .custom-range::-webkit-slider-thumb { + -webkit-transition: none; + transition: none; + } +} + +.custom-range::-webkit-slider-thumb:active { + background-color: #e5ebfa; +} + +.custom-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dddfeb; + border-color: transparent; + border-radius: 1rem; +} + +.custom-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #4e73df; + border: 0; + border-radius: 1rem; + -moz-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; + -moz-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .custom-range::-moz-range-thumb { + -moz-transition: none; + transition: none; + } +} + +.custom-range::-moz-range-thumb:active { + background-color: #e5ebfa; +} + +.custom-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dddfeb; + 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: #4e73df; + border: 0; + border-radius: 1rem; + -ms-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; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .custom-range::-ms-thumb { + -ms-transition: none; + transition: none; + } +} + +.custom-range::-ms-thumb:active { + background-color: #e5ebfa; +} + +.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: #dddfeb; + border-radius: 1rem; +} + +.custom-range::-ms-fill-upper { + margin-right: 15px; + background-color: #dddfeb; + border-radius: 1rem; +} + +.custom-range:disabled::-webkit-slider-thumb { + background-color: #b7b9cc; +} + +.custom-range:disabled::-webkit-slider-runnable-track { + cursor: default; +} + +.custom-range:disabled::-moz-range-thumb { + background-color: #b7b9cc; +} + +.custom-range:disabled::-moz-range-track { + cursor: default; +} + +.custom-range:disabled::-ms-thumb { + background-color: #b7b9cc; +} + +.custom-control-label::before, +.custom-file-label, +.custom-select { + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .custom-control-label::before, + .custom-file-label, + .custom-select { + transition: none; + } +} + +.nav { + display: flex; + 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: #858796; + pointer-events: none; + cursor: default; +} + +.nav-tabs { + border-bottom: 1px solid #dddfeb; +} + +.nav-tabs .nav-link { + margin-bottom: -1px; + border: 1px solid transparent; + border-top-left-radius: 0.35rem; + border-top-right-radius: 0.35rem; +} + +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + border-color: #eaecf4 #eaecf4 #dddfeb; +} + +.nav-tabs .nav-link.disabled { + color: #858796; + background-color: transparent; + border-color: transparent; +} + +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: #6e707e; + background-color: #fff; + border-color: #dddfeb #dddfeb #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.35rem; +} + +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #fff; + background-color: #4e73df; +} + +.nav-fill > .nav-link, +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} + +.nav-justified > .nav-link, +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.navbar { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: 0.5rem 1rem; +} + +.navbar .container, +.navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl { + display: flex; + flex-wrap: wrap; + align-items: center; + 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: flex; + 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 { + flex-basis: 100%; + flex-grow: 1; + 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.35rem; +} + +.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: 50% / 100% 100% no-repeat; +} + +.navbar-nav-scroll { + max-height: 75vh; + overflow-y: auto; +} + +@media (max-width: 575.98px) { + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 576px) { + .navbar-expand-sm { + flex-flow: row nowrap; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + 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, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl { + flex-wrap: nowrap; + } + .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } +} + +@media (max-width: 767.98px) { + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 768px) { + .navbar-expand-md { + flex-flow: row nowrap; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + 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, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl { + flex-wrap: nowrap; + } + .navbar-expand-md .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } +} + +@media (max-width: 991.98px) { + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 992px) { + .navbar-expand-lg { + flex-flow: row nowrap; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + 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, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl { + flex-wrap: nowrap; + } + .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } +} + +@media (max-width: 1199.98px) { + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 1200px) { + .navbar-expand-xl { + flex-flow: row nowrap; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + 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, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl { + flex-wrap: nowrap; + } + .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } +} + +.navbar-expand { + flex-flow: row nowrap; + justify-content: flex-start; +} + +.navbar-expand > .container, +.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl { + padding-right: 0; + padding-left: 0; +} + +.navbar-expand .navbar-nav { + 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, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl { + flex-wrap: nowrap; +} + +.navbar-expand .navbar-nav-scroll { + overflow: visible; +} + +.navbar-expand .navbar-collapse { + display: flex !important; + 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 xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' 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 xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' 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: flex; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid #e3e6f0; + border-radius: 0.35rem; +} + +.card > hr { + margin-right: 0; + margin-left: 0; +} + +.card > .list-group { + border-top: inherit; + border-bottom: inherit; +} + +.card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: calc(0.35rem - 1px); + border-top-right-radius: calc(0.35rem - 1px); +} + +.card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: calc(0.35rem - 1px); + border-bottom-left-radius: calc(0.35rem - 1px); +} + +.card > .card-header + .list-group, +.card > .list-group + .card-footer { + border-top: 0; +} + +.card-body { + flex: 1 1 auto; + min-height: 1px; + 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: #f8f9fc; + border-bottom: 1px solid #e3e6f0; +} + +.card-header:first-child { + border-radius: calc(0.35rem - 1px) calc(0.35rem - 1px) 0 0; +} + +.card-footer { + padding: 0.75rem 1.25rem; + background-color: #f8f9fc; + border-top: 1px solid #e3e6f0; +} + +.card-footer:last-child { + border-radius: 0 0 calc(0.35rem - 1px) calc(0.35rem - 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; + border-radius: calc(0.35rem - 1px); +} + +.card-img, +.card-img-top, +.card-img-bottom { + flex-shrink: 0; + width: 100%; +} + +.card-img, +.card-img-top { + border-top-left-radius: calc(0.35rem - 1px); + border-top-right-radius: calc(0.35rem - 1px); +} + +.card-img, +.card-img-bottom { + border-bottom-right-radius: calc(0.35rem - 1px); + border-bottom-left-radius: calc(0.35rem - 1px); +} + +.card-deck .card { + margin-bottom: 0.75rem; +} + +@media (min-width: 576px) { + .card-deck { + display: flex; + flex-flow: row wrap; + margin-right: -0.75rem; + margin-left: -0.75rem; + } + .card-deck .card { + flex: 1 0 0%; + margin-right: 0.75rem; + margin-bottom: 0; + margin-left: 0.75rem; + } +} + +.card-group > .card { + margin-bottom: 0.75rem; +} + +@media (min-width: 576px) { + .card-group { + display: flex; + flex-flow: row wrap; + } + .card-group > .card { + 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 { + -moz-column-count: 3; + column-count: 3; + -moz-column-gap: 1.25rem; + column-gap: 1.25rem; + orphans: 1; + widows: 1; + } + .card-columns .card { + display: inline-block; + width: 100%; + } +} + +.accordion { + overflow-anchor: none; +} + +.accordion > .card { + overflow: hidden; +} + +.accordion > .card:not(:last-of-type) { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.accordion > .card:not(:first-of-type) { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.accordion > .card > .card-header { + border-radius: 0; + margin-bottom: -1px; +} + +.breadcrumb { + display: flex; + flex-wrap: wrap; + padding: 0.75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #eaecf4; + border-radius: 0.35rem; +} + +.breadcrumb-item + .breadcrumb-item { + padding-left: 0.5rem; +} + +.breadcrumb-item + .breadcrumb-item::before { + float: left; + padding-right: 0.5rem; + color: #858796; + content: "/"; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: underline; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: none; +} + +.breadcrumb-item.active { + color: #858796; +} + +.pagination { + display: flex; + padding-left: 0; + list-style: none; + border-radius: 0.35rem; +} + +.page-link { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + margin-left: -1px; + line-height: 1.25; + color: #4e73df; + background-color: #fff; + border: 1px solid #dddfeb; +} + +.page-link:hover { + z-index: 2; + color: #224abe; + text-decoration: none; + background-color: #eaecf4; + border-color: #dddfeb; +} + +.page-link:focus { + z-index: 3; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.25); +} + +.page-item:first-child .page-link { + margin-left: 0; + border-top-left-radius: 0.35rem; + border-bottom-left-radius: 0.35rem; +} + +.page-item:last-child .page-link { + border-top-right-radius: 0.35rem; + border-bottom-right-radius: 0.35rem; +} + +.page-item.active .page-link { + z-index: 3; + color: #fff; + background-color: #4e73df; + border-color: #4e73df; +} + +.page-item.disabled .page-link { + color: #858796; + pointer-events: none; + cursor: auto; + background-color: #fff; + border-color: #dddfeb; +} + +.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.35rem; + 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; +} + +@media (prefers-reduced-motion: reduce) { + .badge { + 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: #4e73df; +} + +a.badge-primary:hover, a.badge-primary:focus { + color: #fff; + background-color: #2653d4; +} + +a.badge-primary:focus, a.badge-primary.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(78, 115, 223, 0.5); +} + +.badge-secondary { + color: #fff; + background-color: #858796; +} + +a.badge-secondary:hover, a.badge-secondary:focus { + color: #fff; + background-color: #6b6d7d; +} + +a.badge-secondary:focus, a.badge-secondary.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(133, 135, 150, 0.5); +} + +.badge-success { + color: #fff; + background-color: #1cc88a; +} + +a.badge-success:hover, a.badge-success:focus { + color: #fff; + background-color: #169b6b; +} + +a.badge-success:focus, a.badge-success.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(28, 200, 138, 0.5); +} + +.badge-info { + color: #fff; + background-color: #36b9cc; +} + +a.badge-info:hover, a.badge-info:focus { + color: #fff; + background-color: #2a96a5; +} + +a.badge-info:focus, a.badge-info.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(54, 185, 204, 0.5); +} + +.badge-warning { + color: #fff; + background-color: #f6c23e; +} + +a.badge-warning:hover, a.badge-warning:focus { + color: #fff; + background-color: #f4b30d; +} + +a.badge-warning:focus, a.badge-warning.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(246, 194, 62, 0.5); +} + +.badge-danger { + color: #fff; + background-color: #e74a3b; +} + +a.badge-danger:hover, a.badge-danger:focus { + color: #fff; + background-color: #d52a1a; +} + +a.badge-danger:focus, a.badge-danger.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(231, 74, 59, 0.5); +} + +.badge-light { + color: #3a3b45; + background-color: #f8f9fc; +} + +a.badge-light:hover, a.badge-light:focus { + color: #3a3b45; + background-color: #d4daed; +} + +a.badge-light:focus, a.badge-light.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(248, 249, 252, 0.5); +} + +.badge-dark { + color: #fff; + background-color: #5a5c69; +} + +a.badge-dark:hover, a.badge-dark:focus { + color: #fff; + background-color: #42444e; +} + +a.badge-dark:focus, a.badge-dark.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(90, 92, 105, 0.5); +} + +.jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #eaecf4; + 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.35rem; +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: 700; +} + +.alert-dismissible { + padding-right: 4rem; +} + +.alert-dismissible .close { + position: absolute; + top: 0; + right: 0; + z-index: 2; + padding: 0.75rem 1.25rem; + color: inherit; +} + +.alert-primary { + color: #293c74; + background-color: #dce3f9; + border-color: #cdd8f6; +} + +.alert-primary hr { + border-top-color: #b7c7f2; +} + +.alert-primary .alert-link { + color: #1c294e; +} + +.alert-secondary { + color: #45464e; + background-color: #e7e7ea; + border-color: #dddde2; +} + +.alert-secondary hr { + border-top-color: #cfcfd6; +} + +.alert-secondary .alert-link { + color: #2d2e33; +} + +.alert-success { + color: #0f6848; + background-color: #d2f4e8; + border-color: #bff0de; +} + +.alert-success hr { + border-top-color: #aaebd3; +} + +.alert-success .alert-link { + color: #093b29; +} + +.alert-info { + color: #1c606a; + background-color: #d7f1f5; + border-color: #c7ebf1; +} + +.alert-info hr { + border-top-color: #b3e4ec; +} + +.alert-info .alert-link { + color: #113b42; +} + +.alert-warning { + color: #806520; + background-color: #fdf3d8; + border-color: #fceec9; +} + +.alert-warning hr { + border-top-color: #fbe6b1; +} + +.alert-warning .alert-link { + color: #574516; +} + +.alert-danger { + color: #78261f; + background-color: #fadbd8; + border-color: #f8ccc8; +} + +.alert-danger hr { + border-top-color: #f5b7b1; +} + +.alert-danger .alert-link { + color: #4f1915; +} + +.alert-light { + color: #818183; + background-color: #fefefe; + border-color: #fdfdfe; +} + +.alert-light hr { + border-top-color: #ececf6; +} + +.alert-light .alert-link { + color: #686869; +} + +.alert-dark { + color: #2f3037; + background-color: #dedee1; + border-color: #d1d1d5; +} + +.alert-dark hr { + border-top-color: #c4c4c9; +} + +.alert-dark .alert-link { + color: #18181c; +} + +@-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: flex; + height: 1rem; + overflow: hidden; + line-height: 0; + font-size: 0.75rem; + background-color: #eaecf4; + border-radius: 0.35rem; +} + +.progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: #fff; + text-align: center; + white-space: nowrap; + background-color: #4e73df; + transition: width 0.6s ease; +} + +@media (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; + } +} + +.progress-bar-striped { + 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: 1s linear infinite progress-bar-stripes; + animation: 1s linear infinite progress-bar-stripes; +} + +@media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + -webkit-animation: none; + animation: none; + } +} + +.media { + display: flex; + align-items: flex-start; +} + +.media-body { + flex: 1; +} + +.list-group { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: 0.35rem; +} + +.list-group-item-action { + width: 100%; + color: #6e707e; + text-align: inherit; +} + +.list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; + color: #6e707e; + text-decoration: none; + background-color: #f8f9fc; +} + +.list-group-item-action:active { + color: #858796; + background-color: #eaecf4; +} + +.list-group-item { + position: relative; + display: block; + padding: 0.75rem 1.25rem; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} + +.list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} + +.list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} + +.list-group-item.disabled, .list-group-item:disabled { + color: #858796; + pointer-events: none; + background-color: #fff; +} + +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #4e73df; + border-color: #4e73df; +} + +.list-group-item + .list-group-item { + border-top-width: 0; +} + +.list-group-item + .list-group-item.active { + margin-top: -1px; + border-top-width: 1px; +} + +.list-group-horizontal { + flex-direction: row; +} + +.list-group-horizontal > .list-group-item:first-child { + border-bottom-left-radius: 0.35rem; + border-top-right-radius: 0; +} + +.list-group-horizontal > .list-group-item:last-child { + border-top-right-radius: 0.35rem; + border-bottom-left-radius: 0; +} + +.list-group-horizontal > .list-group-item.active { + margin-top: 0; +} + +.list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; +} + +.list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; +} + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; + } + .list-group-horizontal-sm > .list-group-item:first-child { + border-bottom-left-radius: 0.35rem; + border-top-right-radius: 0; + } + .list-group-horizontal-sm > .list-group-item:last-child { + border-top-right-radius: 0.35rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} + +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; + } + .list-group-horizontal-md > .list-group-item:first-child { + border-bottom-left-radius: 0.35rem; + border-top-right-radius: 0; + } + .list-group-horizontal-md > .list-group-item:last-child { + border-top-right-radius: 0.35rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} + +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; + } + .list-group-horizontal-lg > .list-group-item:first-child { + border-bottom-left-radius: 0.35rem; + border-top-right-radius: 0; + } + .list-group-horizontal-lg > .list-group-item:last-child { + border-top-right-radius: 0.35rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} + +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; + } + .list-group-horizontal-xl > .list-group-item:first-child { + border-bottom-left-radius: 0.35rem; + border-top-right-radius: 0; + } + .list-group-horizontal-xl > .list-group-item:last-child { + border-top-right-radius: 0.35rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} + +.list-group-flush { + border-radius: 0; +} + +.list-group-flush > .list-group-item { + border-width: 0 0 1px; +} + +.list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} + +.list-group-item-primary { + color: #293c74; + background-color: #cdd8f6; +} + +.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: #293c74; + background-color: #b7c7f2; +} + +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #293c74; + border-color: #293c74; +} + +.list-group-item-secondary { + color: #45464e; + background-color: #dddde2; +} + +.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: #45464e; + background-color: #cfcfd6; +} + +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #45464e; + border-color: #45464e; +} + +.list-group-item-success { + color: #0f6848; + background-color: #bff0de; +} + +.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { + color: #0f6848; + background-color: #aaebd3; +} + +.list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #0f6848; + border-color: #0f6848; +} + +.list-group-item-info { + color: #1c606a; + background-color: #c7ebf1; +} + +.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { + color: #1c606a; + background-color: #b3e4ec; +} + +.list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #1c606a; + border-color: #1c606a; +} + +.list-group-item-warning { + color: #806520; + background-color: #fceec9; +} + +.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { + color: #806520; + background-color: #fbe6b1; +} + +.list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #806520; + border-color: #806520; +} + +.list-group-item-danger { + color: #78261f; + background-color: #f8ccc8; +} + +.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { + color: #78261f; + background-color: #f5b7b1; +} + +.list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #78261f; + border-color: #78261f; +} + +.list-group-item-light { + color: #818183; + background-color: #fdfdfe; +} + +.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { + color: #818183; + background-color: #ececf6; +} + +.list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #818183; + border-color: #818183; +} + +.list-group-item-dark { + color: #2f3037; + background-color: #d1d1d5; +} + +.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: #2f3037; + background-color: #c4c4c9; +} + +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #2f3037; + border-color: #2f3037; +} + +.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; +} + +a.close.disabled { + pointer-events: none; +} + +.toast { + flex-basis: 350px; + max-width: 350px; + 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); + box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); + 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: flex; + align-items: center; + padding: 0.25rem 0.75rem; + color: #858796; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} + +.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 { + transition: transform 0.3s ease-out; + transform: translate(0, -50px); +} + +@media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; + } +} + +.modal.show .modal-dialog { + transform: none; +} + +.modal.modal-static .modal-dialog { + transform: scale(1.02); +} + +.modal-dialog-scrollable { + 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 { + flex-shrink: 0; +} + +.modal-dialog-scrollable .modal-body { + overflow-y: auto; +} + +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - 1rem); +} + +.modal-dialog-centered::before { + display: block; + height: calc(100vh - 1rem); + height: -webkit-min-content; + height: -moz-min-content; + height: min-content; + content: ""; +} + +.modal-dialog-centered.modal-dialog-scrollable { + flex-direction: column; + 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: flex; + 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: flex; + align-items: flex-start; + justify-content: space-between; + padding: 1rem 1rem; + border-bottom: 1px solid #e3e6f0; + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} + +.modal-header .close { + padding: 1rem 1rem; + margin: -1rem -1rem -1rem auto; +} + +.modal-title { + margin-bottom: 0; + line-height: 1.5; +} + +.modal-body { + position: relative; + flex: 1 1 auto; + padding: 1rem; +} + +.modal-footer { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: 0.75rem; + border-top: 1px solid #e3e6f0; + border-bottom-right-radius: calc(0.3rem - 1px); + border-bottom-left-radius: calc(0.3rem - 1px); +} + +.modal-footer > * { + margin: 0.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); + height: -webkit-min-content; + height: -moz-min-content; + height: min-content; + } + .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: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, 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.35rem; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + font-family: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, 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); +} + +.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); + 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); +} + +.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); + 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: #858796; +} + +.carousel { + position: relative; +} + +.carousel.pointer-event { + 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; + transition: transform 0.6s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; + } +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; +} + +.carousel-item-next:not(.carousel-item-left), +.active.carousel-item-right { + transform: translateX(100%); +} + +.carousel-item-prev:not(.carousel-item-right), +.active.carousel-item-left { + transform: translateX(-100%); +} + +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + 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; + transition: opacity 0s 0.6s; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-right { + transition: none; + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: 0.5; + transition: opacity 0.15s ease; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + 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: 50% / 100% 100% no-repeat; +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%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' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e"); +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 15; + display: flex; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; +} + +.carousel-indicators li { + box-sizing: content-box; + 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; + transition: opacity 0.6s ease; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-indicators li { + 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 { + transform: rotate(360deg); + } +} + +@keyframes spinner-border { + to { + 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: .75s linear infinite spinner-border; + animation: .75s linear infinite spinner-border; +} + +.spinner-border-sm { + width: 1rem; + height: 1rem; + border-width: 0.2em; +} + +@-webkit-keyframes spinner-grow { + 0% { + transform: scale(0); + } + 50% { + opacity: 1; + transform: none; + } +} + +@keyframes spinner-grow { + 0% { + transform: scale(0); + } + 50% { + opacity: 1; + transform: none; + } +} + +.spinner-grow { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + background-color: currentColor; + border-radius: 50%; + opacity: 0; + -webkit-animation: .75s linear infinite spinner-grow; + animation: .75s linear infinite spinner-grow; +} + +.spinner-grow-sm { + width: 1rem; + height: 1rem; +} + +@media (prefers-reduced-motion: reduce) { + .spinner-border, + .spinner-grow { + -webkit-animation-duration: 1.5s; + animation-duration: 1.5s; + } +} + +.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: #4e73df !important; +} + +a.bg-primary:hover, a.bg-primary:focus, +button.bg-primary:hover, +button.bg-primary:focus { + background-color: #2653d4 !important; +} + +.bg-secondary { + background-color: #858796 !important; +} + +a.bg-secondary:hover, a.bg-secondary:focus, +button.bg-secondary:hover, +button.bg-secondary:focus { + background-color: #6b6d7d !important; +} + +.bg-success { + background-color: #1cc88a !important; +} + +a.bg-success:hover, a.bg-success:focus, +button.bg-success:hover, +button.bg-success:focus { + background-color: #169b6b !important; +} + +.bg-info { + background-color: #36b9cc !important; +} + +a.bg-info:hover, a.bg-info:focus, +button.bg-info:hover, +button.bg-info:focus { + background-color: #2a96a5 !important; +} + +.bg-warning { + background-color: #f6c23e !important; +} + +a.bg-warning:hover, a.bg-warning:focus, +button.bg-warning:hover, +button.bg-warning:focus { + background-color: #f4b30d !important; +} + +.bg-danger { + background-color: #e74a3b !important; +} + +a.bg-danger:hover, a.bg-danger:focus, +button.bg-danger:hover, +button.bg-danger:focus { + background-color: #d52a1a !important; +} + +.bg-light { + background-color: #f8f9fc !important; +} + +a.bg-light:hover, a.bg-light:focus, +button.bg-light:hover, +button.bg-light:focus { + background-color: #d4daed !important; +} + +.bg-dark { + background-color: #5a5c69 !important; +} + +a.bg-dark:hover, a.bg-dark:focus, +button.bg-dark:hover, +button.bg-dark:focus { + background-color: #42444e !important; +} + +.bg-white { + background-color: #fff !important; +} + +.bg-transparent { + background-color: transparent !important; +} + +.border { + border: 1px solid #e3e6f0 !important; +} + +.border-top { + border-top: 1px solid #e3e6f0 !important; +} + +.border-right { + border-right: 1px solid #e3e6f0 !important; +} + +.border-bottom { + border-bottom: 1px solid #e3e6f0 !important; +} + +.border-left { + border-left: 1px solid #e3e6f0 !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: #4e73df !important; +} + +.border-secondary { + border-color: #858796 !important; +} + +.border-success { + border-color: #1cc88a !important; +} + +.border-info { + border-color: #36b9cc !important; +} + +.border-warning { + border-color: #f6c23e !important; +} + +.border-danger { + border-color: #e74a3b !important; +} + +.border-light { + border-color: #f8f9fc !important; +} + +.border-dark { + border-color: #5a5c69 !important; +} + +.border-white { + border-color: #fff !important; +} + +.rounded-sm { + border-radius: 0.2rem !important; +} + +.rounded { + border-radius: 0.35rem !important; +} + +.rounded-top { + border-top-left-radius: 0.35rem !important; + border-top-right-radius: 0.35rem !important; +} + +.rounded-right { + border-top-right-radius: 0.35rem !important; + border-bottom-right-radius: 0.35rem !important; +} + +.rounded-bottom { + border-bottom-right-radius: 0.35rem !important; + border-bottom-left-radius: 0.35rem !important; +} + +.rounded-left { + border-top-left-radius: 0.35rem !important; + border-bottom-left-radius: 0.35rem !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: flex !important; +} + +.d-inline-flex { + 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: flex !important; + } + .d-sm-inline-flex { + 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: flex !important; + } + .d-md-inline-flex { + 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: flex !important; + } + .d-lg-inline-flex { + 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: flex !important; + } + .d-xl-inline-flex { + 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: flex !important; + } + .d-print-inline-flex { + 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 { + flex-direction: row !important; +} + +.flex-column { + flex-direction: column !important; +} + +.flex-row-reverse { + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + flex-direction: column-reverse !important; +} + +.flex-wrap { + flex-wrap: wrap !important; +} + +.flex-nowrap { + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.flex-fill { + flex: 1 1 auto !important; +} + +.flex-grow-0 { + flex-grow: 0 !important; +} + +.flex-grow-1 { + flex-grow: 1 !important; +} + +.flex-shrink-0 { + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + flex-shrink: 1 !important; +} + +.justify-content-start { + justify-content: flex-start !important; +} + +.justify-content-end { + justify-content: flex-end !important; +} + +.justify-content-center { + justify-content: center !important; +} + +.justify-content-between { + justify-content: space-between !important; +} + +.justify-content-around { + justify-content: space-around !important; +} + +.align-items-start { + align-items: flex-start !important; +} + +.align-items-end { + align-items: flex-end !important; +} + +.align-items-center { + align-items: center !important; +} + +.align-items-baseline { + align-items: baseline !important; +} + +.align-items-stretch { + align-items: stretch !important; +} + +.align-content-start { + align-content: flex-start !important; +} + +.align-content-end { + align-content: flex-end !important; +} + +.align-content-center { + align-content: center !important; +} + +.align-content-between { + align-content: space-between !important; +} + +.align-content-around { + align-content: space-around !important; +} + +.align-content-stretch { + align-content: stretch !important; +} + +.align-self-auto { + align-self: auto !important; +} + +.align-self-start { + align-self: flex-start !important; +} + +.align-self-end { + align-self: flex-end !important; +} + +.align-self-center { + align-self: center !important; +} + +.align-self-baseline { + align-self: baseline !important; +} + +.align-self-stretch { + align-self: stretch !important; +} + +@media (min-width: 576px) { + .flex-sm-row { + flex-direction: row !important; + } + .flex-sm-column { + flex-direction: column !important; + } + .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + .flex-sm-wrap { + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .flex-sm-fill { + flex: 1 1 auto !important; + } + .flex-sm-grow-0 { + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + .justify-content-sm-start { + justify-content: flex-start !important; + } + .justify-content-sm-end { + justify-content: flex-end !important; + } + .justify-content-sm-center { + justify-content: center !important; + } + .justify-content-sm-between { + justify-content: space-between !important; + } + .justify-content-sm-around { + justify-content: space-around !important; + } + .align-items-sm-start { + align-items: flex-start !important; + } + .align-items-sm-end { + align-items: flex-end !important; + } + .align-items-sm-center { + align-items: center !important; + } + .align-items-sm-baseline { + align-items: baseline !important; + } + .align-items-sm-stretch { + align-items: stretch !important; + } + .align-content-sm-start { + align-content: flex-start !important; + } + .align-content-sm-end { + align-content: flex-end !important; + } + .align-content-sm-center { + align-content: center !important; + } + .align-content-sm-between { + align-content: space-between !important; + } + .align-content-sm-around { + align-content: space-around !important; + } + .align-content-sm-stretch { + align-content: stretch !important; + } + .align-self-sm-auto { + align-self: auto !important; + } + .align-self-sm-start { + align-self: flex-start !important; + } + .align-self-sm-end { + align-self: flex-end !important; + } + .align-self-sm-center { + align-self: center !important; + } + .align-self-sm-baseline { + align-self: baseline !important; + } + .align-self-sm-stretch { + align-self: stretch !important; + } +} + +@media (min-width: 768px) { + .flex-md-row { + flex-direction: row !important; + } + .flex-md-column { + flex-direction: column !important; + } + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + .flex-md-wrap { + flex-wrap: wrap !important; + } + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .flex-md-fill { + flex: 1 1 auto !important; + } + .flex-md-grow-0 { + flex-grow: 0 !important; + } + .flex-md-grow-1 { + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + .justify-content-md-start { + justify-content: flex-start !important; + } + .justify-content-md-end { + justify-content: flex-end !important; + } + .justify-content-md-center { + justify-content: center !important; + } + .justify-content-md-between { + justify-content: space-between !important; + } + .justify-content-md-around { + justify-content: space-around !important; + } + .align-items-md-start { + align-items: flex-start !important; + } + .align-items-md-end { + align-items: flex-end !important; + } + .align-items-md-center { + align-items: center !important; + } + .align-items-md-baseline { + align-items: baseline !important; + } + .align-items-md-stretch { + align-items: stretch !important; + } + .align-content-md-start { + align-content: flex-start !important; + } + .align-content-md-end { + align-content: flex-end !important; + } + .align-content-md-center { + align-content: center !important; + } + .align-content-md-between { + align-content: space-between !important; + } + .align-content-md-around { + align-content: space-around !important; + } + .align-content-md-stretch { + align-content: stretch !important; + } + .align-self-md-auto { + align-self: auto !important; + } + .align-self-md-start { + align-self: flex-start !important; + } + .align-self-md-end { + align-self: flex-end !important; + } + .align-self-md-center { + align-self: center !important; + } + .align-self-md-baseline { + align-self: baseline !important; + } + .align-self-md-stretch { + align-self: stretch !important; + } +} + +@media (min-width: 992px) { + .flex-lg-row { + flex-direction: row !important; + } + .flex-lg-column { + flex-direction: column !important; + } + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + .flex-lg-wrap { + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .flex-lg-fill { + flex: 1 1 auto !important; + } + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + .justify-content-lg-start { + justify-content: flex-start !important; + } + .justify-content-lg-end { + justify-content: flex-end !important; + } + .justify-content-lg-center { + justify-content: center !important; + } + .justify-content-lg-between { + justify-content: space-between !important; + } + .justify-content-lg-around { + justify-content: space-around !important; + } + .align-items-lg-start { + align-items: flex-start !important; + } + .align-items-lg-end { + align-items: flex-end !important; + } + .align-items-lg-center { + align-items: center !important; + } + .align-items-lg-baseline { + align-items: baseline !important; + } + .align-items-lg-stretch { + align-items: stretch !important; + } + .align-content-lg-start { + align-content: flex-start !important; + } + .align-content-lg-end { + align-content: flex-end !important; + } + .align-content-lg-center { + align-content: center !important; + } + .align-content-lg-between { + align-content: space-between !important; + } + .align-content-lg-around { + align-content: space-around !important; + } + .align-content-lg-stretch { + align-content: stretch !important; + } + .align-self-lg-auto { + align-self: auto !important; + } + .align-self-lg-start { + align-self: flex-start !important; + } + .align-self-lg-end { + align-self: flex-end !important; + } + .align-self-lg-center { + align-self: center !important; + } + .align-self-lg-baseline { + align-self: baseline !important; + } + .align-self-lg-stretch { + align-self: stretch !important; + } +} + +@media (min-width: 1200px) { + .flex-xl-row { + flex-direction: row !important; + } + .flex-xl-column { + flex-direction: column !important; + } + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xl-wrap { + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .flex-xl-fill { + flex: 1 1 auto !important; + } + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + .justify-content-xl-start { + justify-content: flex-start !important; + } + .justify-content-xl-end { + justify-content: flex-end !important; + } + .justify-content-xl-center { + justify-content: center !important; + } + .justify-content-xl-between { + justify-content: space-between !important; + } + .justify-content-xl-around { + justify-content: space-around !important; + } + .align-items-xl-start { + align-items: flex-start !important; + } + .align-items-xl-end { + align-items: flex-end !important; + } + .align-items-xl-center { + align-items: center !important; + } + .align-items-xl-baseline { + align-items: baseline !important; + } + .align-items-xl-stretch { + align-items: stretch !important; + } + .align-content-xl-start { + align-content: flex-start !important; + } + .align-content-xl-end { + align-content: flex-end !important; + } + .align-content-xl-center { + align-content: center !important; + } + .align-content-xl-between { + align-content: space-between !important; + } + .align-content-xl-around { + align-content: space-around !important; + } + .align-content-xl-stretch { + align-content: stretch !important; + } + .align-self-xl-auto { + align-self: auto !important; + } + .align-self-xl-start { + align-self: flex-start !important; + } + .align-self-xl-end { + align-self: flex-end !important; + } + .align-self-xl-center { + align-self: center !important; + } + .align-self-xl-baseline { + align-self: baseline !important; + } + .align-self-xl-stretch { + 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; + } +} + +.user-select-all { + -webkit-user-select: all !important; + -moz-user-select: all !important; + -ms-user-select: all !important; + user-select: all !important; +} + +.user-select-auto { + -webkit-user-select: auto !important; + -moz-user-select: auto !important; + -ms-user-select: auto !important; + user-select: auto !important; +} + +.user-select-none { + -webkit-user-select: none !important; + -moz-user-select: none !important; + -ms-user-select: none !important; + user-select: 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; + margin: -1px; + 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 { + box-shadow: 0 0.125rem 0.25rem 0 rgba(58, 59, 69, 0.2) !important; +} + +.shadow { + box-shadow: 0 0.15rem 1.75rem 0 rgba(58, 59, 69, 0.15) !important; +} + +.shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; +} + +.shadow-none { + 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; +} + +.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; + } +} + +.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); +} + +.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; + 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, .dropdown .dropdown-menu .dropdown-header, .sidebar .sidebar-heading { + 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: #4e73df !important; +} + +a.text-primary:hover, a.text-primary:focus { + color: #224abe !important; +} + +.text-secondary { + color: #858796 !important; +} + +a.text-secondary:hover, a.text-secondary:focus { + color: #60616f !important; +} + +.text-success { + color: #1cc88a !important; +} + +a.text-success:hover, a.text-success:focus { + color: #13855c !important; +} + +.text-info { + color: #36b9cc !important; +} + +a.text-info:hover, a.text-info:focus { + color: #258391 !important; +} + +.text-warning { + color: #f6c23e !important; +} + +a.text-warning:hover, a.text-warning:focus { + color: #dda20a !important; +} + +.text-danger { + color: #e74a3b !important; +} + +a.text-danger:hover, a.text-danger:focus { + color: #be2617 !important; +} + +.text-light { + color: #f8f9fc !important; +} + +a.text-light:hover, a.text-light:focus { + color: #c2cbe5 !important; +} + +.text-dark { + color: #5a5c69 !important; +} + +a.text-dark:hover, a.text-dark:focus { + color: #373840 !important; +} + +.text-body { + color: #858796 !important; +} + +.text-muted { + color: #858796 !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; + word-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; + 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 #b7b9cc; + 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 #dddfeb !important; + } + .table-dark { + color: inherit; + } + .table-dark th, + .table-dark td, + .table-dark thead th, + .table-dark tbody + tbody { + border-color: #e3e6f0; + } + .table .thead-dark th { + color: inherit; + border-color: #e3e6f0; + } +} + +html { + position: relative; + min-height: 100%; +} + +body { + height: 100%; +} + +a:focus { + outline: none; +} + +#wrapper { + display: flex; +} + +#wrapper #content-wrapper { + background-color: #f8f9fc; + width: 100%; + overflow-x: hidden; +} + +#wrapper #content-wrapper #content { + flex: 1 0 auto; +} + +.container, +.container-fluid, +.container-sm, +.container-md, +.container-lg, +.container-xl { + padding-left: 1.5rem; + padding-right: 1.5rem; +} + +.scroll-to-top { + position: fixed; + right: 1rem; + bottom: 1rem; + display: none; + width: 2.75rem; + height: 2.75rem; + text-align: center; + color: #fff; + background: rgba(90, 92, 105, 0.5); + line-height: 46px; +} + +.scroll-to-top:focus, .scroll-to-top:hover { + color: white; +} + +.scroll-to-top:hover { + background: #5a5c69; +} + +.scroll-to-top i { + font-weight: 800; +} + +@-webkit-keyframes growIn { + 0% { + transform: scale(0.9); + opacity: 0; + } + 100% { + transform: scale(1); + opacity: 1; + } +} + +@keyframes growIn { + 0% { + transform: scale(0.9); + opacity: 0; + } + 100% { + transform: scale(1); + opacity: 1; + } +} + +.animated--grow-in, .sidebar .nav-item .collapse { + -webkit-animation-name: growIn; + animation-name: growIn; + -webkit-animation-duration: 200ms; + animation-duration: 200ms; + -webkit-animation-timing-function: transform cubic-bezier(0.18, 1.25, 0.4, 1), opacity cubic-bezier(0, 1, 0.4, 1); + animation-timing-function: transform cubic-bezier(0.18, 1.25, 0.4, 1), opacity cubic-bezier(0, 1, 0.4, 1); +} + +@-webkit-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +@keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +.animated--fade-in { + -webkit-animation-name: fadeIn; + animation-name: fadeIn; + -webkit-animation-duration: 200ms; + animation-duration: 200ms; + -webkit-animation-timing-function: opacity cubic-bezier(0, 1, 0.4, 1); + animation-timing-function: opacity cubic-bezier(0, 1, 0.4, 1); +} + +.bg-gradient-primary { + background-color: #4e73df; + background-image: linear-gradient(180deg, #4e73df 10%, #224abe 100%); + background-size: cover; +} + +.bg-gradient-secondary { + background-color: #858796; + background-image: linear-gradient(180deg, #858796 10%, #60616f 100%); + background-size: cover; +} + +.bg-gradient-success { + background-color: #1cc88a; + background-image: linear-gradient(180deg, #1cc88a 10%, #13855c 100%); + background-size: cover; +} + +.bg-gradient-info { + background-color: #36b9cc; + background-image: linear-gradient(180deg, #36b9cc 10%, #258391 100%); + background-size: cover; +} + +.bg-gradient-warning { + background-color: #f6c23e; + background-image: linear-gradient(180deg, #f6c23e 10%, #dda20a 100%); + background-size: cover; +} + +.bg-gradient-danger { + background-color: #e74a3b; + background-image: linear-gradient(180deg, #e74a3b 10%, #be2617 100%); + background-size: cover; +} + +.bg-gradient-light { + background-color: #f8f9fc; + background-image: linear-gradient(180deg, #f8f9fc 10%, #c2cbe5 100%); + background-size: cover; +} + +.bg-gradient-dark { + background-color: #5a5c69; + background-image: linear-gradient(180deg, #5a5c69 10%, #373840 100%); + background-size: cover; +} + +.bg-gray-100 { + background-color: #f8f9fc !important; +} + +.bg-gray-200 { + background-color: #eaecf4 !important; +} + +.bg-gray-300 { + background-color: #dddfeb !important; +} + +.bg-gray-400 { + background-color: #d1d3e2 !important; +} + +.bg-gray-500 { + background-color: #b7b9cc !important; +} + +.bg-gray-600 { + background-color: #858796 !important; +} + +.bg-gray-700 { + background-color: #6e707e !important; +} + +.bg-gray-800 { + background-color: #5a5c69 !important; +} + +.bg-gray-900 { + background-color: #3a3b45 !important; +} + +.o-hidden { + overflow: hidden !important; +} + +.text-xs { + font-size: .7rem; +} + +.text-lg { + font-size: 1.2rem; +} + +.text-gray-100 { + color: #f8f9fc !important; +} + +.text-gray-200 { + color: #eaecf4 !important; +} + +.text-gray-300 { + color: #dddfeb !important; +} + +.text-gray-400 { + color: #d1d3e2 !important; +} + +.text-gray-500 { + color: #b7b9cc !important; +} + +.text-gray-600 { + color: #858796 !important; +} + +.text-gray-700 { + color: #6e707e !important; +} + +.text-gray-800 { + color: #5a5c69 !important; +} + +.text-gray-900 { + color: #3a3b45 !important; +} + +.icon-circle { + height: 2.5rem; + width: 2.5rem; + border-radius: 100%; + display: flex; + align-items: center; + justify-content: center; +} + +.border-left-primary { + border-left: 0.25rem solid #4e73df !important; +} + +.border-bottom-primary { + border-bottom: 0.25rem solid #4e73df !important; +} + +.border-left-secondary { + border-left: 0.25rem solid #858796 !important; +} + +.border-bottom-secondary { + border-bottom: 0.25rem solid #858796 !important; +} + +.border-left-success { + border-left: 0.25rem solid #1cc88a !important; +} + +.border-bottom-success { + border-bottom: 0.25rem solid #1cc88a !important; +} + +.border-left-info { + border-left: 0.25rem solid #36b9cc !important; +} + +.border-bottom-info { + border-bottom: 0.25rem solid #36b9cc !important; +} + +.border-left-warning { + border-left: 0.25rem solid #f6c23e !important; +} + +.border-bottom-warning { + border-bottom: 0.25rem solid #f6c23e !important; +} + +.border-left-danger { + border-left: 0.25rem solid #e74a3b !important; +} + +.border-bottom-danger { + border-bottom: 0.25rem solid #e74a3b !important; +} + +.border-left-light { + border-left: 0.25rem solid #f8f9fc !important; +} + +.border-bottom-light { + border-bottom: 0.25rem solid #f8f9fc !important; +} + +.border-left-dark { + border-left: 0.25rem solid #5a5c69 !important; +} + +.border-bottom-dark { + border-bottom: 0.25rem solid #5a5c69 !important; +} + +.progress-sm { + height: .5rem; +} + +.rotate-15 { + transform: rotate(15deg); +} + +.rotate-n-15 { + transform: rotate(-15deg); +} + +.dropdown .dropdown-menu { + font-size: 0.85rem; +} + +.dropdown .dropdown-menu .dropdown-header { + font-weight: 800; + font-size: 0.65rem; + color: #b7b9cc; +} + +.dropdown.no-arrow .dropdown-toggle::after { + display: none; +} + +.sidebar .nav-item.dropdown .dropdown-toggle::after, +.topbar .nav-item.dropdown .dropdown-toggle::after { + width: 1rem; + text-align: center; + float: right; + vertical-align: 0; + border: 0; + font-weight: 900; + content: '\f105'; + font-family: 'Font Awesome 5 Free'; +} + +.sidebar .nav-item.dropdown.show .dropdown-toggle::after, +.topbar .nav-item.dropdown.show .dropdown-toggle::after { + content: '\f107'; +} + +.sidebar .nav-item .nav-link, +.topbar .nav-item .nav-link { + position: relative; +} + +.sidebar .nav-item .nav-link .badge-counter, +.topbar .nav-item .nav-link .badge-counter { + position: absolute; + transform: scale(0.7); + transform-origin: top right; + right: .25rem; + margin-top: -.25rem; +} + +.sidebar .nav-item .nav-link .img-profile, +.topbar .nav-item .nav-link .img-profile { + height: 2rem; + width: 2rem; +} + +.topbar { + height: 4.375rem; +} + +.topbar #sidebarToggleTop { + height: 2.5rem; + width: 2.5rem; +} + +.topbar #sidebarToggleTop:hover { + background-color: #eaecf4; +} + +.topbar #sidebarToggleTop:active { + background-color: #dddfeb; +} + +.topbar .navbar-search { + width: 25rem; +} + +.topbar .navbar-search input { + font-size: 0.85rem; + height: auto; +} + +.topbar .topbar-divider { + width: 0; + border-right: 1px solid #e3e6f0; + height: calc(4.375rem - 2rem); + margin: auto 1rem; +} + +.topbar .nav-item .nav-link { + height: 4.375rem; + display: flex; + align-items: center; + padding: 0 0.75rem; +} + +.topbar .nav-item .nav-link:focus { + outline: none; +} + +.topbar .nav-item:focus { + outline: none; +} + +.topbar .dropdown { + position: static; +} + +.topbar .dropdown .dropdown-menu { + width: calc(100% - 1.5rem); + right: 0.75rem; +} + +.topbar .dropdown-list { + padding: 0; + border: none; + overflow: hidden; +} + +.topbar .dropdown-list .dropdown-header { + background-color: #4e73df; + border: 1px solid #4e73df; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #fff; +} + +.topbar .dropdown-list .dropdown-item { + white-space: normal; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + border-left: 1px solid #e3e6f0; + border-right: 1px solid #e3e6f0; + border-bottom: 1px solid #e3e6f0; + line-height: 1.3rem; +} + +.topbar .dropdown-list .dropdown-item .dropdown-list-image { + position: relative; + height: 2.5rem; + width: 2.5rem; +} + +.topbar .dropdown-list .dropdown-item .dropdown-list-image img { + height: 2.5rem; + width: 2.5rem; +} + +.topbar .dropdown-list .dropdown-item .dropdown-list-image .status-indicator { + background-color: #eaecf4; + height: 0.75rem; + width: 0.75rem; + border-radius: 100%; + position: absolute; + bottom: 0; + right: 0; + border: 0.125rem solid #fff; +} + +.topbar .dropdown-list .dropdown-item .text-truncate { + max-width: 10rem; +} + +.topbar .dropdown-list .dropdown-item:active { + background-color: #eaecf4; + color: #3a3b45; +} + +@media (min-width: 576px) { + .topbar .dropdown { + position: relative; + } + .topbar .dropdown .dropdown-menu { + width: auto; + right: 0; + } + .topbar .dropdown-list { + width: 20rem !important; + } + .topbar .dropdown-list .dropdown-item .text-truncate { + max-width: 13.375rem; + } +} + +.topbar.navbar-dark .navbar-nav .nav-item .nav-link { + color: rgba(255, 255, 255, 0.8); +} + +.topbar.navbar-dark .navbar-nav .nav-item .nav-link:hover { + color: #fff; +} + +.topbar.navbar-dark .navbar-nav .nav-item .nav-link:active { + color: #fff; +} + +.topbar.navbar-light .navbar-nav .nav-item .nav-link { + color: #d1d3e2; +} + +.topbar.navbar-light .navbar-nav .nav-item .nav-link:hover { + color: #b7b9cc; +} + +.topbar.navbar-light .navbar-nav .nav-item .nav-link:active { + color: #858796; +} + +.sidebar { + width: 6.5rem; + min-height: 100vh; +} + +.sidebar .nav-item { + position: relative; +} + +.sidebar .nav-item:last-child { + margin-bottom: 1rem; +} + +.sidebar .nav-item .nav-link { + text-align: center; + padding: 0.75rem 1rem; + width: 6.5rem; +} + +.sidebar .nav-item .nav-link span { + font-size: 0.65rem; + display: block; +} + +.sidebar .nav-item.active .nav-link { + font-weight: 700; +} + +.sidebar .nav-item .collapse { + position: absolute; + left: calc(6.5rem + 1.5rem / 2); + z-index: 1; + top: 2px; +} + +.sidebar .nav-item .collapse .collapse-inner { + border-radius: 0.35rem; + box-shadow: 0 0.15rem 1.75rem 0 rgba(58, 59, 69, 0.15); +} + +.sidebar .nav-item .collapsing { + display: none; + transition: none; +} + +.sidebar .nav-item .collapse .collapse-inner, +.sidebar .nav-item .collapsing .collapse-inner { + padding: .5rem 0; + min-width: 10rem; + font-size: 0.85rem; + margin: 0 0 1rem 0; +} + +.sidebar .nav-item .collapse .collapse-inner .collapse-header, +.sidebar .nav-item .collapsing .collapse-inner .collapse-header { + margin: 0; + white-space: nowrap; + padding: .5rem 1.5rem; + text-transform: uppercase; + font-weight: 800; + font-size: 0.65rem; + color: #b7b9cc; +} + +.sidebar .nav-item .collapse .collapse-inner .collapse-item, +.sidebar .nav-item .collapsing .collapse-inner .collapse-item { + padding: 0.5rem 1rem; + margin: 0 0.5rem; + display: block; + color: #3a3b45; + text-decoration: none; + border-radius: 0.35rem; + white-space: nowrap; +} + +.sidebar .nav-item .collapse .collapse-inner .collapse-item:hover, +.sidebar .nav-item .collapsing .collapse-inner .collapse-item:hover { + background-color: #eaecf4; +} + +.sidebar .nav-item .collapse .collapse-inner .collapse-item:active, +.sidebar .nav-item .collapsing .collapse-inner .collapse-item:active { + background-color: #dddfeb; +} + +.sidebar .nav-item .collapse .collapse-inner .collapse-item.active, +.sidebar .nav-item .collapsing .collapse-inner .collapse-item.active { + color: #4e73df; + font-weight: 700; +} + +.sidebar #sidebarToggle { + width: 2.5rem; + height: 2.5rem; + text-align: center; + margin-bottom: 1rem; + cursor: pointer; +} + +.sidebar #sidebarToggle::after { + font-weight: 900; + content: '\f104'; + font-family: 'Font Awesome 5 Free'; + margin-right: 0.1rem; +} + +.sidebar #sidebarToggle:hover { + text-decoration: none; +} + +.sidebar #sidebarToggle:focus { + outline: none; +} + +.sidebar.toggled { + width: 0 !important; + overflow: hidden; +} + +.sidebar.toggled #sidebarToggle::after { + content: '\f105'; + font-family: 'Font Awesome 5 Free'; + margin-left: 0.25rem; +} + +.sidebar.toggled .sidebar-card { + display: none; +} + +.sidebar .sidebar-brand { + height: 4.375rem; + text-decoration: none; + font-size: 1rem; + font-weight: 800; + padding: 1.5rem 1rem; + text-align: center; + text-transform: uppercase; + letter-spacing: 0.05rem; + z-index: 1; +} + +.sidebar .sidebar-brand .sidebar-brand-icon i { + font-size: 2rem; +} + +.sidebar .sidebar-brand .sidebar-brand-text { + display: none; +} + +.sidebar hr.sidebar-divider { + margin: 0 1rem 1rem; +} + +.sidebar .sidebar-heading { + text-align: center; + padding: 0 1rem; + font-weight: 800; + font-size: 0.65rem; +} + +.sidebar .sidebar-card { + display: flex; + flex-direction: column; + align-items: center; + font-size: 0.875rem; + border-radius: 0.35rem; + color: rgba(255, 255, 255, 0.8); + margin-left: 1rem; + margin-right: 1rem; + margin-bottom: 1rem; + padding: 1rem; + background-color: rgba(0, 0, 0, 0.1); +} + +.sidebar .sidebar-card .sidebar-card-illustration { + height: 3rem; + display: block; +} + +.sidebar .sidebar-card .sidebar-card-title { + font-weight: bold; +} + +.sidebar .sidebar-card p { + font-size: 0.75rem; + color: rgba(255, 255, 255, 0.5); +} + +@media (min-width: 768px) { + .sidebar { + width: 14rem !important; + } + .sidebar .nav-item .collapse { + position: relative; + left: 0; + z-index: 1; + top: 0; + -webkit-animation: none; + animation: none; + } + .sidebar .nav-item .collapse .collapse-inner { + border-radius: 0; + box-shadow: none; + } + .sidebar .nav-item .collapsing { + display: block; + transition: height 0.15s ease; + } + .sidebar .nav-item .collapse, + .sidebar .nav-item .collapsing { + margin: 0 1rem; + } + .sidebar .nav-item .nav-link { + display: block; + width: 100%; + text-align: left; + padding: 1rem; + width: 14rem; + } + .sidebar .nav-item .nav-link i { + font-size: 0.85rem; + margin-right: 0.25rem; + } + .sidebar .nav-item .nav-link span { + font-size: 0.85rem; + display: inline; + } + .sidebar .nav-item .nav-link[data-toggle="collapse"]::after { + width: 1rem; + text-align: center; + float: right; + vertical-align: 0; + border: 0; + font-weight: 900; + content: '\f107'; + font-family: 'Font Awesome 5 Free'; + } + .sidebar .nav-item .nav-link[data-toggle="collapse"].collapsed::after { + content: '\f105'; + } + .sidebar .sidebar-brand .sidebar-brand-icon i { + font-size: 2rem; + } + .sidebar .sidebar-brand .sidebar-brand-text { + display: inline; + } + .sidebar .sidebar-heading { + text-align: left; + } + .sidebar.toggled { + overflow: visible; + width: 6.5rem !important; + } + .sidebar.toggled .nav-item .collapse { + position: absolute; + left: calc(6.5rem + 1.5rem / 2); + z-index: 1; + top: 2px; + -webkit-animation-name: growIn; + animation-name: growIn; + -webkit-animation-duration: 200ms; + animation-duration: 200ms; + -webkit-animation-timing-function: transform cubic-bezier(0.18, 1.25, 0.4, 1), opacity cubic-bezier(0, 1, 0.4, 1); + animation-timing-function: transform cubic-bezier(0.18, 1.25, 0.4, 1), opacity cubic-bezier(0, 1, 0.4, 1); + } + .sidebar.toggled .nav-item .collapse .collapse-inner { + box-shadow: 0 0.15rem 1.75rem 0 rgba(58, 59, 69, 0.15); + border-radius: 0.35rem; + } + .sidebar.toggled .nav-item .collapsing { + display: none; + transition: none; + } + .sidebar.toggled .nav-item .collapse, + .sidebar.toggled .nav-item .collapsing { + margin: 0; + } + .sidebar.toggled .nav-item:last-child { + margin-bottom: 1rem; + } + .sidebar.toggled .nav-item .nav-link { + text-align: center; + padding: 0.75rem 1rem; + width: 6.5rem; + } + .sidebar.toggled .nav-item .nav-link span { + font-size: 0.65rem; + display: block; + } + .sidebar.toggled .nav-item .nav-link i { + margin-right: 0; + } + .sidebar.toggled .nav-item .nav-link[data-toggle="collapse"]::after { + display: none; + } + .sidebar.toggled .sidebar-brand .sidebar-brand-icon i { + font-size: 2rem; + } + .sidebar.toggled .sidebar-brand .sidebar-brand-text { + display: none; + } + .sidebar.toggled .sidebar-heading { + text-align: center; + } +} + +.sidebar-light .sidebar-brand { + color: #6e707e; +} + +.sidebar-light hr.sidebar-divider { + border-top: 1px solid #eaecf4; +} + +.sidebar-light .sidebar-heading { + color: #b7b9cc; +} + +.sidebar-light .nav-item .nav-link { + color: #858796; +} + +.sidebar-light .nav-item .nav-link i { + color: #d1d3e2; +} + +.sidebar-light .nav-item .nav-link:active, .sidebar-light .nav-item .nav-link:focus, .sidebar-light .nav-item .nav-link:hover { + color: #6e707e; +} + +.sidebar-light .nav-item .nav-link:active i, .sidebar-light .nav-item .nav-link:focus i, .sidebar-light .nav-item .nav-link:hover i { + color: #6e707e; +} + +.sidebar-light .nav-item .nav-link[data-toggle="collapse"]::after { + color: #b7b9cc; +} + +.sidebar-light .nav-item.active .nav-link { + color: #6e707e; +} + +.sidebar-light .nav-item.active .nav-link i { + color: #6e707e; +} + +.sidebar-light #sidebarToggle { + background-color: #eaecf4; +} + +.sidebar-light #sidebarToggle::after { + color: #b7b9cc; +} + +.sidebar-light #sidebarToggle:hover { + background-color: #dddfeb; +} + +.sidebar-dark .sidebar-brand { + color: #fff; +} + +.sidebar-dark hr.sidebar-divider { + border-top: 1px solid rgba(255, 255, 255, 0.15); +} + +.sidebar-dark .sidebar-heading { + color: rgba(255, 255, 255, 0.4); +} + +.sidebar-dark .nav-item .nav-link { + color: rgba(255, 255, 255, 0.8); +} + +.sidebar-dark .nav-item .nav-link i { + color: rgba(255, 255, 255, 0.3); +} + +.sidebar-dark .nav-item .nav-link:active, .sidebar-dark .nav-item .nav-link:focus, .sidebar-dark .nav-item .nav-link:hover { + color: #fff; +} + +.sidebar-dark .nav-item .nav-link:active i, .sidebar-dark .nav-item .nav-link:focus i, .sidebar-dark .nav-item .nav-link:hover i { + color: #fff; +} + +.sidebar-dark .nav-item .nav-link[data-toggle="collapse"]::after { + color: rgba(255, 255, 255, 0.5); +} + +.sidebar-dark .nav-item.active .nav-link { + color: #fff; +} + +.sidebar-dark .nav-item.active .nav-link i { + color: #fff; +} + +.sidebar-dark #sidebarToggle { + background-color: rgba(255, 255, 255, 0.2); +} + +.sidebar-dark #sidebarToggle::after { + color: rgba(255, 255, 255, 0.5); +} + +.sidebar-dark #sidebarToggle:hover { + background-color: rgba(255, 255, 255, 0.25); +} + +.sidebar-dark.toggled #sidebarToggle::after { + color: rgba(255, 255, 255, 0.5); +} + +.btn-circle { + border-radius: 100%; + height: 2.5rem; + width: 2.5rem; + font-size: 1rem; + display: inline-flex; + align-items: center; + justify-content: center; +} + +.btn-circle.btn-sm, .btn-group-sm > .btn-circle.btn { + height: 1.8rem; + width: 1.8rem; + font-size: 0.75rem; +} + +.btn-circle.btn-lg, .btn-group-lg > .btn-circle.btn { + height: 3.5rem; + width: 3.5rem; + font-size: 1.35rem; +} + +.btn-icon-split { + padding: 0; + overflow: hidden; + display: inline-flex; + align-items: stretch; + justify-content: center; +} + +.btn-icon-split .icon { + background: rgba(0, 0, 0, 0.15); + display: inline-block; + padding: 0.375rem 0.75rem; +} + +.btn-icon-split .text { + display: inline-block; + padding: 0.375rem 0.75rem; +} + +.btn-icon-split.btn-sm .icon, .btn-group-sm > .btn-icon-split.btn .icon { + padding: 0.25rem 0.5rem; +} + +.btn-icon-split.btn-sm .text, .btn-group-sm > .btn-icon-split.btn .text { + padding: 0.25rem 0.5rem; +} + +.btn-icon-split.btn-lg .icon, .btn-group-lg > .btn-icon-split.btn .icon { + padding: 0.5rem 1rem; +} + +.btn-icon-split.btn-lg .text, .btn-group-lg > .btn-icon-split.btn .text { + padding: 0.5rem 1rem; +} + +.card .card-header .dropdown { + line-height: 1; +} + +.card .card-header .dropdown .dropdown-menu { + line-height: 1.5; +} + +.card .card-header[data-toggle="collapse"] { + text-decoration: none; + position: relative; + padding: 0.75rem 3.25rem 0.75rem 1.25rem; +} + +.card .card-header[data-toggle="collapse"]::after { + position: absolute; + right: 0; + top: 0; + padding-right: 1.725rem; + line-height: 51px; + font-weight: 900; + content: '\f107'; + font-family: 'Font Awesome 5 Free'; + color: #d1d3e2; +} + +.card .card-header[data-toggle="collapse"].collapsed { + border-radius: 0.35rem; +} + +.card .card-header[data-toggle="collapse"].collapsed::after { + content: '\f105'; +} + +.chart-area { + position: relative; + height: 10rem; + width: 100%; +} + +@media (min-width: 768px) { + .chart-area { + height: 20rem; + } +} + +.chart-bar { + position: relative; + height: 10rem; + width: 100%; +} + +@media (min-width: 768px) { + .chart-bar { + height: 20rem; + } +} + +.chart-pie { + position: relative; + height: 15rem; + width: 100%; +} + +@media (min-width: 768px) { + .chart-pie { + height: calc(20rem - 43px) !important; + } +} + +.bg-login-image { + background: url("https://source.unsplash.com/K4mSJ7kc0As/600x800"); + background-position: center; + background-size: cover; +} + +.bg-register-image { + background: url("https://source.unsplash.com/Mv9hjnEUHR4/600x800"); + background-position: center; + background-size: cover; +} + +.bg-password-image { + background: url("https://source.unsplash.com/oWTW-jNGl9I/600x800"); + background-position: center; + background-size: cover; +} + +form.user .custom-checkbox.small label { + line-height: 1.5rem; +} + +form.user .form-control-user { + font-size: 0.8rem; + border-radius: 10rem; + padding: 1.5rem 1rem; +} + +form.user .btn-user { + font-size: 0.8rem; + border-radius: 10rem; + padding: 0.75rem 1rem; +} + +.btn-google { + color: #fff; + background-color: #ea4335; + border-color: #fff; +} + +.btn-google:hover { + color: #fff; + background-color: #e12717; + border-color: #e6e6e6; +} + +.btn-google:focus, .btn-google.focus { + color: #fff; + background-color: #e12717; + border-color: #e6e6e6; + box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); +} + +.btn-google.disabled, .btn-google:disabled { + color: #fff; + background-color: #ea4335; + border-color: #fff; +} + +.btn-google:not(:disabled):not(.disabled):active, .btn-google:not(:disabled):not(.disabled).active, +.show > .btn-google.dropdown-toggle { + color: #fff; + background-color: #d62516; + border-color: #dfdfdf; +} + +.btn-google:not(:disabled):not(.disabled):active:focus, .btn-google:not(:disabled):not(.disabled).active:focus, +.show > .btn-google.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); +} + +.btn-facebook { + color: #fff; + background-color: #3b5998; + border-color: #fff; +} + +.btn-facebook:hover { + color: #fff; + background-color: #30497c; + border-color: #e6e6e6; +} + +.btn-facebook:focus, .btn-facebook.focus { + color: #fff; + background-color: #30497c; + border-color: #e6e6e6; + box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); +} + +.btn-facebook.disabled, .btn-facebook:disabled { + color: #fff; + background-color: #3b5998; + border-color: #fff; +} + +.btn-facebook:not(:disabled):not(.disabled):active, .btn-facebook:not(:disabled):not(.disabled).active, +.show > .btn-facebook.dropdown-toggle { + color: #fff; + background-color: #2d4373; + border-color: #dfdfdf; +} + +.btn-facebook:not(:disabled):not(.disabled):active:focus, .btn-facebook:not(:disabled):not(.disabled).active:focus, +.show > .btn-facebook.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); +} + +.error { + color: #5a5c69; + font-size: 7rem; + position: relative; + line-height: 1; + width: 12.5rem; +} + +@-webkit-keyframes noise-anim { + 0% { + clip: rect(49px, 9999px, 40px, 0); + } + 5% { + clip: rect(75px, 9999px, 72px, 0); + } + 10% { + clip: rect(97px, 9999px, 93px, 0); + } + 15% { + clip: rect(15px, 9999px, 9px, 0); + } + 20% { + clip: rect(14px, 9999px, 92px, 0); + } + 25% { + clip: rect(18px, 9999px, 94px, 0); + } + 30% { + clip: rect(17px, 9999px, 20px, 0); + } + 35% { + clip: rect(71px, 9999px, 59px, 0); + } + 40% { + clip: rect(42px, 9999px, 84px, 0); + } + 45% { + clip: rect(56px, 9999px, 25px, 0); + } + 50% { + clip: rect(46px, 9999px, 14px, 0); + } + 55% { + clip: rect(47px, 9999px, 1px, 0); + } + 60% { + clip: rect(64px, 9999px, 58px, 0); + } + 65% { + clip: rect(89px, 9999px, 92px, 0); + } + 70% { + clip: rect(56px, 9999px, 39px, 0); + } + 75% { + clip: rect(80px, 9999px, 71px, 0); + } + 80% { + clip: rect(8px, 9999px, 13px, 0); + } + 85% { + clip: rect(66px, 9999px, 68px, 0); + } + 90% { + clip: rect(68px, 9999px, 4px, 0); + } + 95% { + clip: rect(56px, 9999px, 14px, 0); + } + 100% { + clip: rect(28px, 9999px, 53px, 0); + } +} + +@keyframes noise-anim { + 0% { + clip: rect(49px, 9999px, 40px, 0); + } + 5% { + clip: rect(75px, 9999px, 72px, 0); + } + 10% { + clip: rect(97px, 9999px, 93px, 0); + } + 15% { + clip: rect(15px, 9999px, 9px, 0); + } + 20% { + clip: rect(14px, 9999px, 92px, 0); + } + 25% { + clip: rect(18px, 9999px, 94px, 0); + } + 30% { + clip: rect(17px, 9999px, 20px, 0); + } + 35% { + clip: rect(71px, 9999px, 59px, 0); + } + 40% { + clip: rect(42px, 9999px, 84px, 0); + } + 45% { + clip: rect(56px, 9999px, 25px, 0); + } + 50% { + clip: rect(46px, 9999px, 14px, 0); + } + 55% { + clip: rect(47px, 9999px, 1px, 0); + } + 60% { + clip: rect(64px, 9999px, 58px, 0); + } + 65% { + clip: rect(89px, 9999px, 92px, 0); + } + 70% { + clip: rect(56px, 9999px, 39px, 0); + } + 75% { + clip: rect(80px, 9999px, 71px, 0); + } + 80% { + clip: rect(8px, 9999px, 13px, 0); + } + 85% { + clip: rect(66px, 9999px, 68px, 0); + } + 90% { + clip: rect(68px, 9999px, 4px, 0); + } + 95% { + clip: rect(56px, 9999px, 14px, 0); + } + 100% { + clip: rect(28px, 9999px, 53px, 0); + } +} + +.error:after { + content: attr(data-text); + position: absolute; + left: 2px; + text-shadow: -1px 0 #e74a3b; + top: 0; + color: #5a5c69; + background: #f8f9fc; + overflow: hidden; + clip: rect(0, 900px, 0, 0); + animation: noise-anim 2s infinite linear alternate-reverse; +} + +@-webkit-keyframes noise-anim-2 { + 0% { + clip: rect(16px, 9999px, 10px, 0); + } + 5% { + clip: rect(22px, 9999px, 29px, 0); + } + 10% { + clip: rect(6px, 9999px, 68px, 0); + } + 15% { + clip: rect(85px, 9999px, 95px, 0); + } + 20% { + clip: rect(65px, 9999px, 91px, 0); + } + 25% { + clip: rect(93px, 9999px, 68px, 0); + } + 30% { + clip: rect(10px, 9999px, 27px, 0); + } + 35% { + clip: rect(37px, 9999px, 25px, 0); + } + 40% { + clip: rect(12px, 9999px, 23px, 0); + } + 45% { + clip: rect(40px, 9999px, 18px, 0); + } + 50% { + clip: rect(19px, 9999px, 71px, 0); + } + 55% { + clip: rect(2px, 9999px, 35px, 0); + } + 60% { + clip: rect(16px, 9999px, 69px, 0); + } + 65% { + clip: rect(8px, 9999px, 65px, 0); + } + 70% { + clip: rect(30px, 9999px, 57px, 0); + } + 75% { + clip: rect(14px, 9999px, 4px, 0); + } + 80% { + clip: rect(39px, 9999px, 30px, 0); + } + 85% { + clip: rect(22px, 9999px, 35px, 0); + } + 90% { + clip: rect(58px, 9999px, 71px, 0); + } + 95% { + clip: rect(34px, 9999px, 90px, 0); + } + 100% { + clip: rect(67px, 9999px, 68px, 0); + } +} + +@keyframes noise-anim-2 { + 0% { + clip: rect(16px, 9999px, 10px, 0); + } + 5% { + clip: rect(22px, 9999px, 29px, 0); + } + 10% { + clip: rect(6px, 9999px, 68px, 0); + } + 15% { + clip: rect(85px, 9999px, 95px, 0); + } + 20% { + clip: rect(65px, 9999px, 91px, 0); + } + 25% { + clip: rect(93px, 9999px, 68px, 0); + } + 30% { + clip: rect(10px, 9999px, 27px, 0); + } + 35% { + clip: rect(37px, 9999px, 25px, 0); + } + 40% { + clip: rect(12px, 9999px, 23px, 0); + } + 45% { + clip: rect(40px, 9999px, 18px, 0); + } + 50% { + clip: rect(19px, 9999px, 71px, 0); + } + 55% { + clip: rect(2px, 9999px, 35px, 0); + } + 60% { + clip: rect(16px, 9999px, 69px, 0); + } + 65% { + clip: rect(8px, 9999px, 65px, 0); + } + 70% { + clip: rect(30px, 9999px, 57px, 0); + } + 75% { + clip: rect(14px, 9999px, 4px, 0); + } + 80% { + clip: rect(39px, 9999px, 30px, 0); + } + 85% { + clip: rect(22px, 9999px, 35px, 0); + } + 90% { + clip: rect(58px, 9999px, 71px, 0); + } + 95% { + clip: rect(34px, 9999px, 90px, 0); + } + 100% { + clip: rect(67px, 9999px, 68px, 0); + } +} + +.error:before { + content: attr(data-text); + position: absolute; + left: -2px; + text-shadow: 1px 0 #4e73df; + top: 0; + color: #5a5c69; + background: #f8f9fc; + overflow: hidden; + clip: rect(0, 900px, 0, 0); + animation: noise-anim-2 3s infinite linear alternate-reverse; +} + +footer.sticky-footer { + padding: 2rem 0; + flex-shrink: 0; +} + +footer.sticky-footer .copyright { + line-height: 1; + font-size: 0.8rem; +} + +body.sidebar-toggled footer.sticky-footer { + width: 100%; +} diff --git a/assets/styles/backend/sb-admin-2.min.css b/assets/styles/backend/sb-admin-2.min.css new file mode 100644 index 0000000..903c9d1 --- /dev/null +++ b/assets/styles/backend/sb-admin-2.min.css @@ -0,0 +1,10 @@ +/*! + * Start Bootstrap - SB Admin 2 v4.1.3 (https://startbootstrap.com/theme/sb-admin-2) + * Copyright 2013-2021 Start Bootstrap + * Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-sb-admin-2/blob/master/LICENSE) + *//*! + * Bootstrap v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--blue:#4e73df;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#e74a3b;--orange:#fd7e14;--yellow:#f6c23e;--green:#1cc88a;--teal:#20c9a6;--cyan:#36b9cc;--white:#fff;--gray:#858796;--gray-dark:#5a5c69;--primary:#4e73df;--secondary:#858796;--success:#1cc88a;--info:#36b9cc;--warning:#f6c23e;--danger:#e74a3b;--light:#f8f9fc;--dark:#5a5c69;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:"Nunito",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,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}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Nunito,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,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:#858796;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{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:#4e73df;text-decoration:none;background-color:transparent}a:hover{color:#224abe;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,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;-ms-overflow-style:scrollbar}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:.75rem;padding-bottom:.75rem;color:#858796;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}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:.5rem;font-weight:400;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,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.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:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#858796}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dddfeb;border-radius:.35rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#858796}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#3a3b45;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#3a3b45}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:.75rem;padding-left:.75rem;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-right:-.75rem;margin-left:-.75rem}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.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-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.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-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.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-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.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-auto{position:relative;width:100%;padding-right:.75rem;padding-left:.75rem}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.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{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-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{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-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{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-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{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-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:#858796}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #e3e6f0}.table thead th{vertical-align:bottom;border-bottom:2px solid #e3e6f0}.table tbody+tbody{border-top:2px solid #e3e6f0}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #e3e6f0}.table-bordered td,.table-bordered th{border:1px solid #e3e6f0}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#858796;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#cdd8f6}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#a3b6ee}.table-hover .table-primary:hover{background-color:#b7c7f2}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#b7c7f2}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#dddde2}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#c0c1c8}.table-hover .table-secondary:hover{background-color:#cfcfd6}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#cfcfd6}.table-success,.table-success>td,.table-success>th{background-color:#bff0de}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#89e2c2}.table-hover .table-success:hover{background-color:#aaebd3}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#aaebd3}.table-info,.table-info>td,.table-info>th{background-color:#c7ebf1}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#96dbe4}.table-hover .table-info:hover{background-color:#b3e4ec}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#b3e4ec}.table-warning,.table-warning>td,.table-warning>th{background-color:#fceec9}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#fadf9b}.table-hover .table-warning:hover{background-color:#fbe6b1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#fbe6b1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f8ccc8}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#f3a199}.table-hover .table-danger:hover{background-color:#f5b7b1}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f5b7b1}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfd}.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>td,.table-dark>th{background-color:#d1d1d5}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#a9aab1}.table-hover .table-dark:hover{background-color:#c4c4c9}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#c4c4c9}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#5a5c69;border-color:#6c6e7e}.table .thead-light th{color:#6e707e;background-color:#eaecf4;border-color:#e3e6f0}.table-dark{color:#fff;background-color:#5a5c69}.table-dark td,.table-dark th,.table-dark thead th{border-color:#6c6e7e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.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 + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#6e707e;background-color:#fff;background-clip:padding-box;border:1px solid #d1d3e2;border-radius:.35rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #6e707e}.form-control:focus{color:#6e707e;background-color:#fff;border-color:#bac8f3;outline:0;box-shadow:0 0 0 .2rem rgba(78,115,223,.25)}.form-control::-webkit-input-placeholder{color:#858796;opacity:1}.form-control::-moz-placeholder{color:#858796;opacity:1}.form-control:-ms-input-placeholder{color:#858796;opacity:1}.form-control::-ms-input-placeholder{color:#858796;opacity:1}.form-control::placeholder{color:#858796;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#eaecf4;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#6e707e;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#858796;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;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:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#858796}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#1cc88a}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(28,200,138,.9);border-radius:.35rem}.form-row>.col>.valid-tooltip,.form-row>[class*=col-]>.valid-tooltip{left:5px}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#1cc88a;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%231cc88a' 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:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#1cc88a;box-shadow:0 0 0 .2rem rgba(28,200,138,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#1cc88a;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%231cc88a' 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") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#1cc88a;box-shadow:0 0 0 .2rem rgba(28,200,138,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#1cc88a}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#1cc88a}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#1cc88a}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34e3a4;background-color:#34e3a4}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(28,200,138,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#1cc88a}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#1cc88a}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#1cc88a;box-shadow:0 0 0 .2rem rgba(28,200,138,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#e74a3b}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(231,74,59,.9);border-radius:.35rem}.form-row>.col>.invalid-tooltip,.form-row>[class*=col-]>.invalid-tooltip{left:5px}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#e74a3b;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e74a3b' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74a3b' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#e74a3b;box-shadow:0 0 0 .2rem rgba(231,74,59,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#e74a3b;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e74a3b' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74a3b' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#e74a3b;box-shadow:0 0 0 .2rem rgba(231,74,59,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#e74a3b}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#e74a3b}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#e74a3b}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#ed7468;background-color:#ed7468}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(231,74,59,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#e74a3b}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#e74a3b}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#e74a3b;box-shadow:0 0 0 .2rem rgba(231,74,59,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;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 .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#858796;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:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.35rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#858796;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(78,115,223,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#4e73df;border-color:#4e73df}.btn-primary:hover{color:#fff;background-color:#2e59d9;border-color:#2653d4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#2e59d9;border-color:#2653d4;box-shadow:0 0 0 .2rem rgba(105,136,228,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#4e73df;border-color:#4e73df}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#2653d4;border-color:#244ec9}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(105,136,228,.5)}.btn-secondary{color:#fff;background-color:#858796;border-color:#858796}.btn-secondary:hover{color:#fff;background-color:#717384;border-color:#6b6d7d}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#717384;border-color:#6b6d7d;box-shadow:0 0 0 .2rem rgba(151,153,166,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#858796;border-color:#858796}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#6b6d7d;border-color:#656776}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(151,153,166,.5)}.btn-success{color:#fff;background-color:#1cc88a;border-color:#1cc88a}.btn-success:hover{color:#fff;background-color:#17a673;border-color:#169b6b}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#17a673;border-color:#169b6b;box-shadow:0 0 0 .2rem rgba(62,208,156,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#1cc88a;border-color:#1cc88a}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#169b6b;border-color:#149063}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(62,208,156,.5)}.btn-info{color:#fff;background-color:#36b9cc;border-color:#36b9cc}.btn-info:hover{color:#fff;background-color:#2c9faf;border-color:#2a96a5}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#2c9faf;border-color:#2a96a5;box-shadow:0 0 0 .2rem rgba(84,196,212,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#36b9cc;border-color:#36b9cc}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#2a96a5;border-color:#278c9b}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(84,196,212,.5)}.btn-warning{color:#fff;background-color:#f6c23e;border-color:#f6c23e}.btn-warning:hover{color:#fff;background-color:#f4b619;border-color:#f4b30d}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#f4b619;border-color:#f4b30d;box-shadow:0 0 0 .2rem rgba(247,203,91,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#fff;background-color:#f6c23e;border-color:#f6c23e}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#f4b30d;border-color:#e9aa0b}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(247,203,91,.5)}.btn-danger{color:#fff;background-color:#e74a3b;border-color:#e74a3b}.btn-danger:hover{color:#fff;background-color:#e02d1b;border-color:#d52a1a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#e02d1b;border-color:#d52a1a;box-shadow:0 0 0 .2rem rgba(235,101,88,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#e74a3b;border-color:#e74a3b}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#d52a1a;border-color:#ca2819}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(235,101,88,.5)}.btn-light{color:#3a3b45;background-color:#f8f9fc;border-color:#f8f9fc}.btn-light:hover{color:#3a3b45;background-color:#dde2f1;border-color:#d4daed}.btn-light.focus,.btn-light:focus{color:#3a3b45;background-color:#dde2f1;border-color:#d4daed;box-shadow:0 0 0 .2rem rgba(220,221,225,.5)}.btn-light.disabled,.btn-light:disabled{color:#3a3b45;background-color:#f8f9fc;border-color:#f8f9fc}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#3a3b45;background-color:#d4daed;border-color:#cbd3e9}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,221,225,.5)}.btn-dark{color:#fff;background-color:#5a5c69;border-color:#5a5c69}.btn-dark:hover{color:#fff;background-color:#484a54;border-color:#42444e}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#484a54;border-color:#42444e;box-shadow:0 0 0 .2rem rgba(115,116,128,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#5a5c69;border-color:#5a5c69}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#42444e;border-color:#3d3e47}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(115,116,128,.5)}.btn-outline-primary{color:#4e73df;border-color:#4e73df}.btn-outline-primary:hover{color:#fff;background-color:#4e73df;border-color:#4e73df}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(78,115,223,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#4e73df;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:#4e73df;border-color:#4e73df}.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{box-shadow:0 0 0 .2rem rgba(78,115,223,.5)}.btn-outline-secondary{color:#858796;border-color:#858796}.btn-outline-secondary:hover{color:#fff;background-color:#858796;border-color:#858796}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(133,135,150,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#858796;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:#858796;border-color:#858796}.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{box-shadow:0 0 0 .2rem rgba(133,135,150,.5)}.btn-outline-success{color:#1cc88a;border-color:#1cc88a}.btn-outline-success:hover{color:#fff;background-color:#1cc88a;border-color:#1cc88a}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(28,200,138,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#1cc88a;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:#1cc88a;border-color:#1cc88a}.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{box-shadow:0 0 0 .2rem rgba(28,200,138,.5)}.btn-outline-info{color:#36b9cc;border-color:#36b9cc}.btn-outline-info:hover{color:#fff;background-color:#36b9cc;border-color:#36b9cc}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(54,185,204,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#36b9cc;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:#36b9cc;border-color:#36b9cc}.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{box-shadow:0 0 0 .2rem rgba(54,185,204,.5)}.btn-outline-warning{color:#f6c23e;border-color:#f6c23e}.btn-outline-warning:hover{color:#fff;background-color:#f6c23e;border-color:#f6c23e}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(246,194,62,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#f6c23e;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:#fff;background-color:#f6c23e;border-color:#f6c23e}.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{box-shadow:0 0 0 .2rem rgba(246,194,62,.5)}.btn-outline-danger{color:#e74a3b;border-color:#e74a3b}.btn-outline-danger:hover{color:#fff;background-color:#e74a3b;border-color:#e74a3b}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(231,74,59,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#e74a3b;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:#e74a3b;border-color:#e74a3b}.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{box-shadow:0 0 0 .2rem rgba(231,74,59,.5)}.btn-outline-light{color:#f8f9fc;border-color:#f8f9fc}.btn-outline-light:hover{color:#3a3b45;background-color:#f8f9fc;border-color:#f8f9fc}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,252,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fc;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:#3a3b45;background-color:#f8f9fc;border-color:#f8f9fc}.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{box-shadow:0 0 0 .2rem rgba(248,249,252,.5)}.btn-outline-dark{color:#5a5c69;border-color:#5a5c69}.btn-outline-dark:hover{color:#fff;background-color:#5a5c69;border-color:#5a5c69}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(90,92,105,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#5a5c69;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:#5a5c69;border-color:#5a5c69}.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{box-shadow:0 0 0 .2rem rgba(90,92,105,.5)}.btn-link{font-weight:400;color:#4e73df;text-decoration:none}.btn-link:hover{color:#224abe;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#858796;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .15s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.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:.5rem 0;margin:.125rem 0 0;font-size:.85rem;color:#858796;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #e3e6f0;border-radius:.35rem}.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:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.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:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.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:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #eaecf4}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#3a3b45;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#2e2f37;text-decoration:none;background-color:#eaecf4}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#4e73df}.dropdown-item.disabled,.dropdown-item:disabled{color:#b7b9cc;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#858796;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#3a3b45}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){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=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label::after,.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label::after,.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.form-control:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#6e707e;text-align:center;white-space:nowrap;background-color:#eaecf4;border:1px solid #d1d3e2;border-radius:.35rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.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),.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{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:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#4e73df;background-color:#4e73df}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(78,115,223,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#bac8f3}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#e5ebfa;border-color:#e5ebfa}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#858796}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#eaecf4}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#b7b9cc solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:50%/50% 50% no-repeat}.custom-checkbox .custom-control-label::before{border-radius:.35rem}.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' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#4e73df;background-color:#4e73df}.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' width='4' height='4' 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(78,115,223,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(78,115,223,.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' width='12' height='12' 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(78,115,223,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#b7b9cc;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(78,115,223,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#6e707e;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat;border:1px solid #d1d3e2;border-radius:.35rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#bac8f3;outline:0;box-shadow:0 0 0 .2rem rgba(78,115,223,.25)}.custom-select:focus::-ms-value{color:#6e707e;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#858796;background-color:#eaecf4}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #6e707e}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;overflow:hidden;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#bac8f3;box-shadow:0 0 0 .2rem rgba(78,115,223,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#eaecf4}.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 + .75rem + 2px);padding:.375rem .75rem;overflow:hidden;font-weight:400;line-height:1.5;color:#6e707e;background-color:#fff;border:1px solid #d1d3e2;border-radius:.35rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#6e707e;content:"Browse";background-color:#eaecf4;border-left:inherit;border-radius:0 .35rem .35rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(78,115,223,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(78,115,223,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(78,115,223,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#4e73df;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#e5ebfa}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dddfeb;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#4e73df;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#e5ebfa}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dddfeb;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#4e73df;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#e5ebfa}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dddfeb;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dddfeb;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#b7b9cc}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#b7b9cc}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#b7b9cc}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#858796;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dddfeb}.nav-tabs .nav-link{margin-bottom:-1px;border:1px solid transparent;border-top-left-radius:.35rem;border-top-right-radius:.35rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#eaecf4 #eaecf4 #dddfeb}.nav-tabs .nav-link.disabled{color:#858796;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#6e707e;background-color:#fff;border-color:#dddfeb #dddfeb #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.35rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#4e73df}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;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:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.35rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:50%/100% 100% no-repeat}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid #e3e6f0;border-radius:.35rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.35rem - 1px);border-top-right-radius:calc(.35rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.35rem - 1px);border-bottom-left-radius:calc(.35rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.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:.75rem 1.25rem;margin-bottom:0;background-color:#f8f9fc;border-bottom:1px solid #e3e6f0}.card-header:first-child{border-radius:calc(.35rem - 1px) calc(.35rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:#f8f9fc;border-top:1px solid #e3e6f0}.card-footer:last-child{border-radius:0 0 calc(.35rem - 1px) calc(.35rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.35rem - 1px)}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.35rem - 1px);border-top-right-radius:calc(.35rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.35rem - 1px);border-bottom-left-radius:calc(.35rem - 1px)}.card-deck .card{margin-bottom:.75rem}@media (min-width:576px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-.75rem;margin-left:-.75rem}.card-deck .card{flex:1 0 0%;margin-right:.75rem;margin-bottom:0;margin-left:.75rem}}.card-group>.card{margin-bottom:.75rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{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-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{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-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#eaecf4;border-radius:.35rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#858796;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#858796}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.35rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#4e73df;background-color:#fff;border:1px solid #dddfeb}.page-link:hover{z-index:2;color:#224abe;text-decoration:none;background-color:#eaecf4;border-color:#dddfeb}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(78,115,223,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.35rem;border-bottom-left-radius:.35rem}.page-item:last-child .page-link{border-top-right-radius:.35rem;border-bottom-right-radius:.35rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#4e73df;border-color:#4e73df}.page-item.disabled .page-link{color:#858796;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dddfeb}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.35rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#4e73df}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#2653d4}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(78,115,223,.5)}.badge-secondary{color:#fff;background-color:#858796}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#6b6d7d}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(133,135,150,.5)}.badge-success{color:#fff;background-color:#1cc88a}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#169b6b}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(28,200,138,.5)}.badge-info{color:#fff;background-color:#36b9cc}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#2a96a5}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(54,185,204,.5)}.badge-warning{color:#fff;background-color:#f6c23e}a.badge-warning:focus,a.badge-warning:hover{color:#fff;background-color:#f4b30d}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(246,194,62,.5)}.badge-danger{color:#fff;background-color:#e74a3b}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#d52a1a}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(231,74,59,.5)}.badge-light{color:#3a3b45;background-color:#f8f9fc}a.badge-light:focus,a.badge-light:hover{color:#3a3b45;background-color:#d4daed}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,252,.5)}.badge-dark{color:#fff;background-color:#5a5c69}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#42444e}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(90,92,105,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#eaecf4;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.35rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#293c74;background-color:#dce3f9;border-color:#cdd8f6}.alert-primary hr{border-top-color:#b7c7f2}.alert-primary .alert-link{color:#1c294e}.alert-secondary{color:#45464e;background-color:#e7e7ea;border-color:#dddde2}.alert-secondary hr{border-top-color:#cfcfd6}.alert-secondary .alert-link{color:#2d2e33}.alert-success{color:#0f6848;background-color:#d2f4e8;border-color:#bff0de}.alert-success hr{border-top-color:#aaebd3}.alert-success .alert-link{color:#093b29}.alert-info{color:#1c606a;background-color:#d7f1f5;border-color:#c7ebf1}.alert-info hr{border-top-color:#b3e4ec}.alert-info .alert-link{color:#113b42}.alert-warning{color:#806520;background-color:#fdf3d8;border-color:#fceec9}.alert-warning hr{border-top-color:#fbe6b1}.alert-warning .alert-link{color:#574516}.alert-danger{color:#78261f;background-color:#fadbd8;border-color:#f8ccc8}.alert-danger hr{border-top-color:#f5b7b1}.alert-danger .alert-link{color:#4f1915}.alert-light{color:#818183;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686869}.alert-dark{color:#2f3037;background-color:#dedee1;border-color:#d1d1d5}.alert-dark hr{border-top-color:#c4c4c9}.alert-dark .alert-link{color:#18181c}@-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:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#eaecf4;border-radius:.35rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#4e73df;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.35rem}.list-group-item-action{width:100%;color:#6e707e;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#6e707e;text-decoration:none;background-color:#f8f9fc}.list-group-item-action:active{color:#858796;background-color:#eaecf4}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#858796;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#4e73df;border-color:#4e73df}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.35rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.35rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.35rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.35rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.35rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.35rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.35rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.35rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.35rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.35rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#293c74;background-color:#cdd8f6}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#293c74;background-color:#b7c7f2}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#293c74;border-color:#293c74}.list-group-item-secondary{color:#45464e;background-color:#dddde2}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#45464e;background-color:#cfcfd6}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#45464e;border-color:#45464e}.list-group-item-success{color:#0f6848;background-color:#bff0de}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f6848;background-color:#aaebd3}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f6848;border-color:#0f6848}.list-group-item-info{color:#1c606a;background-color:#c7ebf1}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#1c606a;background-color:#b3e4ec}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#1c606a;border-color:#1c606a}.list-group-item-warning{color:#806520;background-color:#fceec9}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#806520;background-color:#fbe6b1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#806520;border-color:#806520}.list-group-item-danger{color:#78261f;background-color:#f8ccc8}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#78261f;background-color:#f5b7b1}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#78261f;border-color:#78261f}.list-group-item-light{color:#818183;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818183;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818183;border-color:#818183}.list-group-item-dark{color:#2f3037;background-color:#d1d1d5}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#2f3037;background-color:#c4c4c9}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#2f3037;border-color:#2f3037}.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):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#858796;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.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:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;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:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.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:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #e3e6f0;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #e3e6f0;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.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);height:-webkit-min-content;height:-moz-min-content;height:min-content}.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:Nunito,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,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:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.35rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:Nunito,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,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:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#858796}.carousel{position:relative}.carousel.pointer-event{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;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:50%/100% 100% no-repeat}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%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' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;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;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{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{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.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:#4e73df!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#2653d4!important}.bg-secondary{background-color:#858796!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#6b6d7d!important}.bg-success{background-color:#1cc88a!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#169b6b!important}.bg-info{background-color:#36b9cc!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#2a96a5!important}.bg-warning{background-color:#f6c23e!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#f4b30d!important}.bg-danger{background-color:#e74a3b!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#d52a1a!important}.bg-light{background-color:#f8f9fc!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#d4daed!important}.bg-dark{background-color:#5a5c69!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#42444e!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #e3e6f0!important}.border-top{border-top:1px solid #e3e6f0!important}.border-right{border-right:1px solid #e3e6f0!important}.border-bottom{border-bottom:1px solid #e3e6f0!important}.border-left{border-left:1px solid #e3e6f0!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:#4e73df!important}.border-secondary{border-color:#858796!important}.border-success{border-color:#1cc88a!important}.border-info{border-color:#36b9cc!important}.border-warning{border-color:#f6c23e!important}.border-danger{border-color:#e74a3b!important}.border-light{border-color:#f8f9fc!important}.border-dark{border-color:#5a5c69!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.35rem!important}.rounded-top{border-top-left-radius:.35rem!important;border-top-right-radius:.35rem!important}.rounded-right{border-top-right-radius:.35rem!important;border-bottom-right-radius:.35rem!important}.rounded-bottom{border-bottom-right-radius:.35rem!important;border-bottom-left-radius:.35rem!important}.rounded-left{border-top-left-radius:.35rem!important;border-bottom-left-radius:.35rem!important}.rounded-lg{border-radius:.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:flex!important}.d-inline-flex{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:flex!important}.d-sm-inline-flex{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:flex!important}.d-md-inline-flex{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:flex!important}.d-lg-inline-flex{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:flex!important}.d-xl-inline-flex{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:flex!important}.d-print-inline-flex{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 embed,.embed-responsive iframe,.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{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{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}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select: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;margin:-1px;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{box-shadow:0 .125rem .25rem 0 rgba(58,59,69,.2)!important}.shadow{box-shadow:0 .15rem 1.75rem 0 rgba(58,59,69,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{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}.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:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.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:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.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:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.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:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.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:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.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:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.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:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.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:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.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:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.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:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.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:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.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:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.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:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.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:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.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:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.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}}.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)}.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;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}.dropdown .dropdown-menu .dropdown-header,.sidebar .sidebar-heading,.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:#4e73df!important}a.text-primary:focus,a.text-primary:hover{color:#224abe!important}.text-secondary{color:#858796!important}a.text-secondary:focus,a.text-secondary:hover{color:#60616f!important}.text-success{color:#1cc88a!important}a.text-success:focus,a.text-success:hover{color:#13855c!important}.text-info{color:#36b9cc!important}a.text-info:focus,a.text-info:hover{color:#258391!important}.text-warning{color:#f6c23e!important}a.text-warning:focus,a.text-warning:hover{color:#dda20a!important}.text-danger{color:#e74a3b!important}a.text-danger:focus,a.text-danger:hover{color:#be2617!important}.text-light{color:#f8f9fc!important}a.text-light:focus,a.text-light:hover{color:#c2cbe5!important}.text-dark{color:#5a5c69!important}a.text-dark:focus,a.text-dark:hover{color:#373840!important}.text-body{color:#858796!important}.text-muted{color:#858796!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.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;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-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}blockquote,pre{border:1px solid #b7b9cc;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{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 td,.table-bordered th{border:1px solid #dddfeb!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#e3e6f0}.table .thead-dark th{color:inherit;border-color:#e3e6f0}}html{position:relative;min-height:100%}body{height:100%}a:focus{outline:0}#wrapper{display:flex}#wrapper #content-wrapper{background-color:#f8f9fc;width:100%;overflow-x:hidden}#wrapper #content-wrapper #content{flex:1 0 auto}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{padding-left:1.5rem;padding-right:1.5rem}.scroll-to-top{position:fixed;right:1rem;bottom:1rem;display:none;width:2.75rem;height:2.75rem;text-align:center;color:#fff;background:rgba(90,92,105,.5);line-height:46px}.scroll-to-top:focus,.scroll-to-top:hover{color:#fff}.scroll-to-top:hover{background:#5a5c69}.scroll-to-top i{font-weight:800}@-webkit-keyframes growIn{0%{transform:scale(.9);opacity:0}100%{transform:scale(1);opacity:1}}@keyframes growIn{0%{transform:scale(.9);opacity:0}100%{transform:scale(1);opacity:1}}.animated--grow-in,.sidebar .nav-item .collapse{-webkit-animation-name:growIn;animation-name:growIn;-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-timing-function:transform cubic-bezier(.18,1.25,.4,1),opacity cubic-bezier(0,1,.4,1);animation-timing-function:transform cubic-bezier(.18,1.25,.4,1),opacity cubic-bezier(0,1,.4,1)}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.animated--fade-in{-webkit-animation-name:fadeIn;animation-name:fadeIn;-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-timing-function:opacity cubic-bezier(0,1,.4,1);animation-timing-function:opacity cubic-bezier(0,1,.4,1)}.bg-gradient-primary{background-color:#4e73df;background-image:linear-gradient(180deg,#4e73df 10%,#224abe 100%);background-size:cover}.bg-gradient-secondary{background-color:#858796;background-image:linear-gradient(180deg,#858796 10%,#60616f 100%);background-size:cover}.bg-gradient-success{background-color:#1cc88a;background-image:linear-gradient(180deg,#1cc88a 10%,#13855c 100%);background-size:cover}.bg-gradient-info{background-color:#36b9cc;background-image:linear-gradient(180deg,#36b9cc 10%,#258391 100%);background-size:cover}.bg-gradient-warning{background-color:#f6c23e;background-image:linear-gradient(180deg,#f6c23e 10%,#dda20a 100%);background-size:cover}.bg-gradient-danger{background-color:#e74a3b;background-image:linear-gradient(180deg,#e74a3b 10%,#be2617 100%);background-size:cover}.bg-gradient-light{background-color:#f8f9fc;background-image:linear-gradient(180deg,#f8f9fc 10%,#c2cbe5 100%);background-size:cover}.bg-gradient-dark{background-color:#5a5c69;background-image:linear-gradient(180deg,#5a5c69 10%,#373840 100%);background-size:cover}.bg-gray-100{background-color:#f8f9fc!important}.bg-gray-200{background-color:#eaecf4!important}.bg-gray-300{background-color:#dddfeb!important}.bg-gray-400{background-color:#d1d3e2!important}.bg-gray-500{background-color:#b7b9cc!important}.bg-gray-600{background-color:#858796!important}.bg-gray-700{background-color:#6e707e!important}.bg-gray-800{background-color:#5a5c69!important}.bg-gray-900{background-color:#3a3b45!important}.o-hidden{overflow:hidden!important}.text-xs{font-size:.7rem}.text-lg{font-size:1.2rem}.text-gray-100{color:#f8f9fc!important}.text-gray-200{color:#eaecf4!important}.text-gray-300{color:#dddfeb!important}.text-gray-400{color:#d1d3e2!important}.text-gray-500{color:#b7b9cc!important}.text-gray-600{color:#858796!important}.text-gray-700{color:#6e707e!important}.text-gray-800{color:#5a5c69!important}.text-gray-900{color:#3a3b45!important}.icon-circle{height:2.5rem;width:2.5rem;border-radius:100%;display:flex;align-items:center;justify-content:center}.border-left-primary{border-left:.25rem solid #4e73df!important}.border-bottom-primary{border-bottom:.25rem solid #4e73df!important}.border-left-secondary{border-left:.25rem solid #858796!important}.border-bottom-secondary{border-bottom:.25rem solid #858796!important}.border-left-success{border-left:.25rem solid #1cc88a!important}.border-bottom-success{border-bottom:.25rem solid #1cc88a!important}.border-left-info{border-left:.25rem solid #36b9cc!important}.border-bottom-info{border-bottom:.25rem solid #36b9cc!important}.border-left-warning{border-left:.25rem solid #f6c23e!important}.border-bottom-warning{border-bottom:.25rem solid #f6c23e!important}.border-left-danger{border-left:.25rem solid #e74a3b!important}.border-bottom-danger{border-bottom:.25rem solid #e74a3b!important}.border-left-light{border-left:.25rem solid #f8f9fc!important}.border-bottom-light{border-bottom:.25rem solid #f8f9fc!important}.border-left-dark{border-left:.25rem solid #5a5c69!important}.border-bottom-dark{border-bottom:.25rem solid #5a5c69!important}.progress-sm{height:.5rem}.rotate-15{transform:rotate(15deg)}.rotate-n-15{transform:rotate(-15deg)}.dropdown .dropdown-menu{font-size:.85rem}.dropdown .dropdown-menu .dropdown-header{font-weight:800;font-size:.65rem;color:#b7b9cc}.dropdown.no-arrow .dropdown-toggle::after{display:none}.sidebar .nav-item.dropdown .dropdown-toggle::after,.topbar .nav-item.dropdown .dropdown-toggle::after{width:1rem;text-align:center;float:right;vertical-align:0;border:0;font-weight:900;content:'\f105';font-family:'Font Awesome 5 Free'}.sidebar .nav-item.dropdown.show .dropdown-toggle::after,.topbar .nav-item.dropdown.show .dropdown-toggle::after{content:'\f107'}.sidebar .nav-item .nav-link,.topbar .nav-item .nav-link{position:relative}.sidebar .nav-item .nav-link .badge-counter,.topbar .nav-item .nav-link .badge-counter{position:absolute;transform:scale(.7);transform-origin:top right;right:.25rem;margin-top:-.25rem}.sidebar .nav-item .nav-link .img-profile,.topbar .nav-item .nav-link .img-profile{height:2rem;width:2rem}.topbar{height:4.375rem}.topbar #sidebarToggleTop{height:2.5rem;width:2.5rem}.topbar #sidebarToggleTop:hover{background-color:#eaecf4}.topbar #sidebarToggleTop:active{background-color:#dddfeb}.topbar .navbar-search{width:25rem}.topbar .navbar-search input{font-size:.85rem;height:auto}.topbar .topbar-divider{width:0;border-right:1px solid #e3e6f0;height:calc(4.375rem - 2rem);margin:auto 1rem}.topbar .nav-item .nav-link{height:4.375rem;display:flex;align-items:center;padding:0 .75rem}.topbar .nav-item .nav-link:focus{outline:0}.topbar .nav-item:focus{outline:0}.topbar .dropdown{position:static}.topbar .dropdown .dropdown-menu{width:calc(100% - 1.5rem);right:.75rem}.topbar .dropdown-list{padding:0;border:none;overflow:hidden}.topbar .dropdown-list .dropdown-header{background-color:#4e73df;border:1px solid #4e73df;padding-top:.75rem;padding-bottom:.75rem;color:#fff}.topbar .dropdown-list .dropdown-item{white-space:normal;padding-top:.5rem;padding-bottom:.5rem;border-left:1px solid #e3e6f0;border-right:1px solid #e3e6f0;border-bottom:1px solid #e3e6f0;line-height:1.3rem}.topbar .dropdown-list .dropdown-item .dropdown-list-image{position:relative;height:2.5rem;width:2.5rem}.topbar .dropdown-list .dropdown-item .dropdown-list-image img{height:2.5rem;width:2.5rem}.topbar .dropdown-list .dropdown-item .dropdown-list-image .status-indicator{background-color:#eaecf4;height:.75rem;width:.75rem;border-radius:100%;position:absolute;bottom:0;right:0;border:.125rem solid #fff}.topbar .dropdown-list .dropdown-item .text-truncate{max-width:10rem}.topbar .dropdown-list .dropdown-item:active{background-color:#eaecf4;color:#3a3b45}@media (min-width:576px){.topbar .dropdown{position:relative}.topbar .dropdown .dropdown-menu{width:auto;right:0}.topbar .dropdown-list{width:20rem!important}.topbar .dropdown-list .dropdown-item .text-truncate{max-width:13.375rem}}.topbar.navbar-dark .navbar-nav .nav-item .nav-link{color:rgba(255,255,255,.8)}.topbar.navbar-dark .navbar-nav .nav-item .nav-link:hover{color:#fff}.topbar.navbar-dark .navbar-nav .nav-item .nav-link:active{color:#fff}.topbar.navbar-light .navbar-nav .nav-item .nav-link{color:#d1d3e2}.topbar.navbar-light .navbar-nav .nav-item .nav-link:hover{color:#b7b9cc}.topbar.navbar-light .navbar-nav .nav-item .nav-link:active{color:#858796}.sidebar{width:6.5rem;min-height:100vh}.sidebar .nav-item{position:relative}.sidebar .nav-item:last-child{margin-bottom:1rem}.sidebar .nav-item .nav-link{text-align:center;padding:.75rem 1rem;width:6.5rem}.sidebar .nav-item .nav-link span{font-size:.65rem;display:block}.sidebar .nav-item.active .nav-link{font-weight:700}.sidebar .nav-item .collapse{position:absolute;left:calc(6.5rem + 1.5rem / 2);z-index:1;top:2px}.sidebar .nav-item .collapse .collapse-inner{border-radius:.35rem;box-shadow:0 .15rem 1.75rem 0 rgba(58,59,69,.15)}.sidebar .nav-item .collapsing{display:none;transition:none}.sidebar .nav-item .collapse .collapse-inner,.sidebar .nav-item .collapsing .collapse-inner{padding:.5rem 0;min-width:10rem;font-size:.85rem;margin:0 0 1rem 0}.sidebar .nav-item .collapse .collapse-inner .collapse-header,.sidebar .nav-item .collapsing .collapse-inner .collapse-header{margin:0;white-space:nowrap;padding:.5rem 1.5rem;text-transform:uppercase;font-weight:800;font-size:.65rem;color:#b7b9cc}.sidebar .nav-item .collapse .collapse-inner .collapse-item,.sidebar .nav-item .collapsing .collapse-inner .collapse-item{padding:.5rem 1rem;margin:0 .5rem;display:block;color:#3a3b45;text-decoration:none;border-radius:.35rem;white-space:nowrap}.sidebar .nav-item .collapse .collapse-inner .collapse-item:hover,.sidebar .nav-item .collapsing .collapse-inner .collapse-item:hover{background-color:#eaecf4}.sidebar .nav-item .collapse .collapse-inner .collapse-item:active,.sidebar .nav-item .collapsing .collapse-inner .collapse-item:active{background-color:#dddfeb}.sidebar .nav-item .collapse .collapse-inner .collapse-item.active,.sidebar .nav-item .collapsing .collapse-inner .collapse-item.active{color:#4e73df;font-weight:700}.sidebar #sidebarToggle{width:2.5rem;height:2.5rem;text-align:center;margin-bottom:1rem;cursor:pointer}.sidebar #sidebarToggle::after{font-weight:900;content:'\f104';font-family:'Font Awesome 5 Free';margin-right:.1rem}.sidebar #sidebarToggle:hover{text-decoration:none}.sidebar #sidebarToggle:focus{outline:0}.sidebar.toggled{width:0!important;overflow:hidden}.sidebar.toggled #sidebarToggle::after{content:'\f105';font-family:'Font Awesome 5 Free';margin-left:.25rem}.sidebar.toggled .sidebar-card{display:none}.sidebar .sidebar-brand{height:4.375rem;text-decoration:none;font-size:1rem;font-weight:800;padding:1.5rem 1rem;text-align:center;text-transform:uppercase;letter-spacing:.05rem;z-index:1}.sidebar .sidebar-brand .sidebar-brand-icon i{font-size:2rem}.sidebar .sidebar-brand .sidebar-brand-text{display:none}.sidebar hr.sidebar-divider{margin:0 1rem 1rem}.sidebar .sidebar-heading{text-align:center;padding:0 1rem;font-weight:800;font-size:.65rem}.sidebar .sidebar-card{display:flex;flex-direction:column;align-items:center;font-size:.875rem;border-radius:.35rem;color:rgba(255,255,255,.8);margin-left:1rem;margin-right:1rem;margin-bottom:1rem;padding:1rem;background-color:rgba(0,0,0,.1)}.sidebar .sidebar-card .sidebar-card-illustration{height:3rem;display:block}.sidebar .sidebar-card .sidebar-card-title{font-weight:700}.sidebar .sidebar-card p{font-size:.75rem;color:rgba(255,255,255,.5)}@media (min-width:768px){.sidebar{width:14rem!important}.sidebar .nav-item .collapse{position:relative;left:0;z-index:1;top:0;-webkit-animation:none;animation:none}.sidebar .nav-item .collapse .collapse-inner{border-radius:0;box-shadow:none}.sidebar .nav-item .collapsing{display:block;transition:height .15s ease}.sidebar .nav-item .collapse,.sidebar .nav-item .collapsing{margin:0 1rem}.sidebar .nav-item .nav-link{display:block;width:100%;text-align:left;padding:1rem;width:14rem}.sidebar .nav-item .nav-link i{font-size:.85rem;margin-right:.25rem}.sidebar .nav-item .nav-link span{font-size:.85rem;display:inline}.sidebar .nav-item .nav-link[data-toggle=collapse]::after{width:1rem;text-align:center;float:right;vertical-align:0;border:0;font-weight:900;content:'\f107';font-family:'Font Awesome 5 Free'}.sidebar .nav-item .nav-link[data-toggle=collapse].collapsed::after{content:'\f105'}.sidebar .sidebar-brand .sidebar-brand-icon i{font-size:2rem}.sidebar .sidebar-brand .sidebar-brand-text{display:inline}.sidebar .sidebar-heading{text-align:left}.sidebar.toggled{overflow:visible;width:6.5rem!important}.sidebar.toggled .nav-item .collapse{position:absolute;left:calc(6.5rem + 1.5rem / 2);z-index:1;top:2px;-webkit-animation-name:growIn;animation-name:growIn;-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-timing-function:transform cubic-bezier(.18,1.25,.4,1),opacity cubic-bezier(0,1,.4,1);animation-timing-function:transform cubic-bezier(.18,1.25,.4,1),opacity cubic-bezier(0,1,.4,1)}.sidebar.toggled .nav-item .collapse .collapse-inner{box-shadow:0 .15rem 1.75rem 0 rgba(58,59,69,.15);border-radius:.35rem}.sidebar.toggled .nav-item .collapsing{display:none;transition:none}.sidebar.toggled .nav-item .collapse,.sidebar.toggled .nav-item .collapsing{margin:0}.sidebar.toggled .nav-item:last-child{margin-bottom:1rem}.sidebar.toggled .nav-item .nav-link{text-align:center;padding:.75rem 1rem;width:6.5rem}.sidebar.toggled .nav-item .nav-link span{font-size:.65rem;display:block}.sidebar.toggled .nav-item .nav-link i{margin-right:0}.sidebar.toggled .nav-item .nav-link[data-toggle=collapse]::after{display:none}.sidebar.toggled .sidebar-brand .sidebar-brand-icon i{font-size:2rem}.sidebar.toggled .sidebar-brand .sidebar-brand-text{display:none}.sidebar.toggled .sidebar-heading{text-align:center}}.sidebar-light .sidebar-brand{color:#6e707e}.sidebar-light hr.sidebar-divider{border-top:1px solid #eaecf4}.sidebar-light .sidebar-heading{color:#b7b9cc}.sidebar-light .nav-item .nav-link{color:#858796}.sidebar-light .nav-item .nav-link i{color:#d1d3e2}.sidebar-light .nav-item .nav-link:active,.sidebar-light .nav-item .nav-link:focus,.sidebar-light .nav-item .nav-link:hover{color:#6e707e}.sidebar-light .nav-item .nav-link:active i,.sidebar-light .nav-item .nav-link:focus i,.sidebar-light .nav-item .nav-link:hover i{color:#6e707e}.sidebar-light .nav-item .nav-link[data-toggle=collapse]::after{color:#b7b9cc}.sidebar-light .nav-item.active .nav-link{color:#6e707e}.sidebar-light .nav-item.active .nav-link i{color:#6e707e}.sidebar-light #sidebarToggle{background-color:#eaecf4}.sidebar-light #sidebarToggle::after{color:#b7b9cc}.sidebar-light #sidebarToggle:hover{background-color:#dddfeb}.sidebar-dark .sidebar-brand{color:#fff}.sidebar-dark hr.sidebar-divider{border-top:1px solid rgba(255,255,255,.15)}.sidebar-dark .sidebar-heading{color:rgba(255,255,255,.4)}.sidebar-dark .nav-item .nav-link{color:rgba(255,255,255,.8)}.sidebar-dark .nav-item .nav-link i{color:rgba(255,255,255,.3)}.sidebar-dark .nav-item .nav-link:active,.sidebar-dark .nav-item .nav-link:focus,.sidebar-dark .nav-item .nav-link:hover{color:#fff}.sidebar-dark .nav-item .nav-link:active i,.sidebar-dark .nav-item .nav-link:focus i,.sidebar-dark .nav-item .nav-link:hover i{color:#fff}.sidebar-dark .nav-item .nav-link[data-toggle=collapse]::after{color:rgba(255,255,255,.5)}.sidebar-dark .nav-item.active .nav-link{color:#fff}.sidebar-dark .nav-item.active .nav-link i{color:#fff}.sidebar-dark #sidebarToggle{background-color:rgba(255,255,255,.2)}.sidebar-dark #sidebarToggle::after{color:rgba(255,255,255,.5)}.sidebar-dark #sidebarToggle:hover{background-color:rgba(255,255,255,.25)}.sidebar-dark.toggled #sidebarToggle::after{color:rgba(255,255,255,.5)}.btn-circle{border-radius:100%;height:2.5rem;width:2.5rem;font-size:1rem;display:inline-flex;align-items:center;justify-content:center}.btn-circle.btn-sm,.btn-group-sm>.btn-circle.btn{height:1.8rem;width:1.8rem;font-size:.75rem}.btn-circle.btn-lg,.btn-group-lg>.btn-circle.btn{height:3.5rem;width:3.5rem;font-size:1.35rem}.btn-icon-split{padding:0;overflow:hidden;display:inline-flex;align-items:stretch;justify-content:center}.btn-icon-split .icon{background:rgba(0,0,0,.15);display:inline-block;padding:.375rem .75rem}.btn-icon-split .text{display:inline-block;padding:.375rem .75rem}.btn-group-sm>.btn-icon-split.btn .icon,.btn-icon-split.btn-sm .icon{padding:.25rem .5rem}.btn-group-sm>.btn-icon-split.btn .text,.btn-icon-split.btn-sm .text{padding:.25rem .5rem}.btn-group-lg>.btn-icon-split.btn .icon,.btn-icon-split.btn-lg .icon{padding:.5rem 1rem}.btn-group-lg>.btn-icon-split.btn .text,.btn-icon-split.btn-lg .text{padding:.5rem 1rem}.card .card-header .dropdown{line-height:1}.card .card-header .dropdown .dropdown-menu{line-height:1.5}.card .card-header[data-toggle=collapse]{text-decoration:none;position:relative;padding:.75rem 3.25rem .75rem 1.25rem}.card .card-header[data-toggle=collapse]::after{position:absolute;right:0;top:0;padding-right:1.725rem;line-height:51px;font-weight:900;content:'\f107';font-family:'Font Awesome 5 Free';color:#d1d3e2}.card .card-header[data-toggle=collapse].collapsed{border-radius:.35rem}.card .card-header[data-toggle=collapse].collapsed::after{content:'\f105'}.chart-area{position:relative;height:10rem;width:100%}@media (min-width:768px){.chart-area{height:20rem}}.chart-bar{position:relative;height:10rem;width:100%}@media (min-width:768px){.chart-bar{height:20rem}}.chart-pie{position:relative;height:15rem;width:100%}@media (min-width:768px){.chart-pie{height:calc(20rem - 43px)!important}}.bg-login-image{background:url(https://source.unsplash.com/K4mSJ7kc0As/600x800);background-position:center;background-size:cover}.bg-register-image{background:url(https://source.unsplash.com/Mv9hjnEUHR4/600x800);background-position:center;background-size:cover}.bg-password-image{background:url(https://source.unsplash.com/oWTW-jNGl9I/600x800);background-position:center;background-size:cover}form.user .custom-checkbox.small label{line-height:1.5rem}form.user .form-control-user{font-size:.8rem;border-radius:10rem;padding:1.5rem 1rem}form.user .btn-user{font-size:.8rem;border-radius:10rem;padding:.75rem 1rem}.btn-google{color:#fff;background-color:#ea4335;border-color:#fff}.btn-google:hover{color:#fff;background-color:#e12717;border-color:#e6e6e6}.btn-google.focus,.btn-google:focus{color:#fff;background-color:#e12717;border-color:#e6e6e6;box-shadow:0 0 0 .2rem rgba(255,255,255,.5)}.btn-google.disabled,.btn-google:disabled{color:#fff;background-color:#ea4335;border-color:#fff}.btn-google:not(:disabled):not(.disabled).active,.btn-google:not(:disabled):not(.disabled):active,.show>.btn-google.dropdown-toggle{color:#fff;background-color:#d62516;border-color:#dfdfdf}.btn-google:not(:disabled):not(.disabled).active:focus,.btn-google:not(:disabled):not(.disabled):active:focus,.show>.btn-google.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,255,255,.5)}.btn-facebook{color:#fff;background-color:#3b5998;border-color:#fff}.btn-facebook:hover{color:#fff;background-color:#30497c;border-color:#e6e6e6}.btn-facebook.focus,.btn-facebook:focus{color:#fff;background-color:#30497c;border-color:#e6e6e6;box-shadow:0 0 0 .2rem rgba(255,255,255,.5)}.btn-facebook.disabled,.btn-facebook:disabled{color:#fff;background-color:#3b5998;border-color:#fff}.btn-facebook:not(:disabled):not(.disabled).active,.btn-facebook:not(:disabled):not(.disabled):active,.show>.btn-facebook.dropdown-toggle{color:#fff;background-color:#2d4373;border-color:#dfdfdf}.btn-facebook:not(:disabled):not(.disabled).active:focus,.btn-facebook:not(:disabled):not(.disabled):active:focus,.show>.btn-facebook.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,255,255,.5)}.error{color:#5a5c69;font-size:7rem;position:relative;line-height:1;width:12.5rem}@-webkit-keyframes noise-anim{0%{clip:rect(49px,9999px,40px,0)}5%{clip:rect(75px,9999px,72px,0)}10%{clip:rect(97px,9999px,93px,0)}15%{clip:rect(15px,9999px,9px,0)}20%{clip:rect(14px,9999px,92px,0)}25%{clip:rect(18px,9999px,94px,0)}30%{clip:rect(17px,9999px,20px,0)}35%{clip:rect(71px,9999px,59px,0)}40%{clip:rect(42px,9999px,84px,0)}45%{clip:rect(56px,9999px,25px,0)}50%{clip:rect(46px,9999px,14px,0)}55%{clip:rect(47px,9999px,1px,0)}60%{clip:rect(64px,9999px,58px,0)}65%{clip:rect(89px,9999px,92px,0)}70%{clip:rect(56px,9999px,39px,0)}75%{clip:rect(80px,9999px,71px,0)}80%{clip:rect(8px,9999px,13px,0)}85%{clip:rect(66px,9999px,68px,0)}90%{clip:rect(68px,9999px,4px,0)}95%{clip:rect(56px,9999px,14px,0)}100%{clip:rect(28px,9999px,53px,0)}}@keyframes noise-anim{0%{clip:rect(49px,9999px,40px,0)}5%{clip:rect(75px,9999px,72px,0)}10%{clip:rect(97px,9999px,93px,0)}15%{clip:rect(15px,9999px,9px,0)}20%{clip:rect(14px,9999px,92px,0)}25%{clip:rect(18px,9999px,94px,0)}30%{clip:rect(17px,9999px,20px,0)}35%{clip:rect(71px,9999px,59px,0)}40%{clip:rect(42px,9999px,84px,0)}45%{clip:rect(56px,9999px,25px,0)}50%{clip:rect(46px,9999px,14px,0)}55%{clip:rect(47px,9999px,1px,0)}60%{clip:rect(64px,9999px,58px,0)}65%{clip:rect(89px,9999px,92px,0)}70%{clip:rect(56px,9999px,39px,0)}75%{clip:rect(80px,9999px,71px,0)}80%{clip:rect(8px,9999px,13px,0)}85%{clip:rect(66px,9999px,68px,0)}90%{clip:rect(68px,9999px,4px,0)}95%{clip:rect(56px,9999px,14px,0)}100%{clip:rect(28px,9999px,53px,0)}}.error:after{content:attr(data-text);position:absolute;left:2px;text-shadow:-1px 0 #e74a3b;top:0;color:#5a5c69;background:#f8f9fc;overflow:hidden;clip:rect(0,900px,0,0);animation:noise-anim 2s infinite linear alternate-reverse}@-webkit-keyframes noise-anim-2{0%{clip:rect(16px,9999px,10px,0)}5%{clip:rect(22px,9999px,29px,0)}10%{clip:rect(6px,9999px,68px,0)}15%{clip:rect(85px,9999px,95px,0)}20%{clip:rect(65px,9999px,91px,0)}25%{clip:rect(93px,9999px,68px,0)}30%{clip:rect(10px,9999px,27px,0)}35%{clip:rect(37px,9999px,25px,0)}40%{clip:rect(12px,9999px,23px,0)}45%{clip:rect(40px,9999px,18px,0)}50%{clip:rect(19px,9999px,71px,0)}55%{clip:rect(2px,9999px,35px,0)}60%{clip:rect(16px,9999px,69px,0)}65%{clip:rect(8px,9999px,65px,0)}70%{clip:rect(30px,9999px,57px,0)}75%{clip:rect(14px,9999px,4px,0)}80%{clip:rect(39px,9999px,30px,0)}85%{clip:rect(22px,9999px,35px,0)}90%{clip:rect(58px,9999px,71px,0)}95%{clip:rect(34px,9999px,90px,0)}100%{clip:rect(67px,9999px,68px,0)}}@keyframes noise-anim-2{0%{clip:rect(16px,9999px,10px,0)}5%{clip:rect(22px,9999px,29px,0)}10%{clip:rect(6px,9999px,68px,0)}15%{clip:rect(85px,9999px,95px,0)}20%{clip:rect(65px,9999px,91px,0)}25%{clip:rect(93px,9999px,68px,0)}30%{clip:rect(10px,9999px,27px,0)}35%{clip:rect(37px,9999px,25px,0)}40%{clip:rect(12px,9999px,23px,0)}45%{clip:rect(40px,9999px,18px,0)}50%{clip:rect(19px,9999px,71px,0)}55%{clip:rect(2px,9999px,35px,0)}60%{clip:rect(16px,9999px,69px,0)}65%{clip:rect(8px,9999px,65px,0)}70%{clip:rect(30px,9999px,57px,0)}75%{clip:rect(14px,9999px,4px,0)}80%{clip:rect(39px,9999px,30px,0)}85%{clip:rect(22px,9999px,35px,0)}90%{clip:rect(58px,9999px,71px,0)}95%{clip:rect(34px,9999px,90px,0)}100%{clip:rect(67px,9999px,68px,0)}}.error:before{content:attr(data-text);position:absolute;left:-2px;text-shadow:1px 0 #4e73df;top:0;color:#5a5c69;background:#f8f9fc;overflow:hidden;clip:rect(0,900px,0,0);animation:noise-anim-2 3s infinite linear alternate-reverse}footer.sticky-footer{padding:2rem 0;flex-shrink:0}footer.sticky-footer .copyright{line-height:1;font-size:.8rem}body.sidebar-toggled footer.sticky-footer{width:100%} \ No newline at end of file diff --git a/assets/styles/backend/utilities/_animation.scss b/assets/styles/backend/utilities/_animation.scss new file mode 100644 index 0000000..7a40d4d --- /dev/null +++ b/assets/styles/backend/utilities/_animation.scss @@ -0,0 +1,37 @@ +// Animation Utilities + +// Grow In Animation + +@keyframes growIn { + 0% { + transform: scale(0.9); + opacity: 0; + } + 100% { + transform: scale(1); + opacity: 1; + } +} + +.animated--grow-in { + animation-name: growIn; + animation-duration: 200ms; + animation-timing-function: transform cubic-bezier(.18,1.25,.4,1), opacity cubic-bezier(0,1,.4,1); +} + +// Fade In Animation + +@keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +.animated--fade-in { + animation-name: fadeIn; + animation-duration: 200ms; + animation-timing-function: opacity cubic-bezier(0,1,.4,1); +} diff --git a/assets/styles/backend/utilities/_background.scss b/assets/styles/backend/utilities/_background.scss new file mode 100644 index 0000000..b4ceff1 --- /dev/null +++ b/assets/styles/backend/utilities/_background.scss @@ -0,0 +1,17 @@ +// Background Gradient Utilities + +@each $color, $value in $theme-colors { + .bg-gradient-#{$color} { + background-color: $value; + background-image: linear-gradient(180deg, $value 10%, darken($value, 15%) 100%); + background-size: cover; + } +} + +// Grayscale Background Utilities + +@each $level, $value in $grays { + .bg-gray-#{$level} { + background-color: $value !important; + } +} diff --git a/assets/styles/backend/utilities/_border.scss b/assets/styles/backend/utilities/_border.scss new file mode 100644 index 0000000..cede0e4 --- /dev/null +++ b/assets/styles/backend/utilities/_border.scss @@ -0,0 +1,7 @@ +@each $color, $value in $theme-colors { + @each $position in ['left', 'bottom'] { + .border-#{$position}-#{$color} { + border-#{$position}: .25rem solid $value !important; + } + } +} diff --git a/assets/styles/backend/utilities/_display.scss b/assets/styles/backend/utilities/_display.scss new file mode 100644 index 0000000..410b9ad --- /dev/null +++ b/assets/styles/backend/utilities/_display.scss @@ -0,0 +1,4 @@ +// Overflow Hidden +.o-hidden { + overflow: hidden !important; +} diff --git a/assets/styles/backend/utilities/_progress.scss b/assets/styles/backend/utilities/_progress.scss new file mode 100644 index 0000000..0c2eb63 --- /dev/null +++ b/assets/styles/backend/utilities/_progress.scss @@ -0,0 +1,3 @@ +.progress-sm { + height: .5rem; +} diff --git a/assets/styles/backend/utilities/_rotate.scss b/assets/styles/backend/utilities/_rotate.scss new file mode 100644 index 0000000..7e33d44 --- /dev/null +++ b/assets/styles/backend/utilities/_rotate.scss @@ -0,0 +1,7 @@ +.rotate-15 { + transform: rotate(15deg); +} + +.rotate-n-15 { + transform: rotate(-15deg); +} diff --git a/assets/styles/backend/utilities/_text.scss b/assets/styles/backend/utilities/_text.scss new file mode 100644 index 0000000..1bfd8e3 --- /dev/null +++ b/assets/styles/backend/utilities/_text.scss @@ -0,0 +1,290 @@ +// Grayscale Text Utilities + +.text-xs { + font-size: .7rem; +} + +.text-lg { + font-size: 1.2rem; +} + +.text-gray-100 { + color: $gray-100 !important; +} + +.text-gray-200 { + color: $gray-200 !important; +} + +.text-gray-300 { + color: $gray-300 !important; +} + +.text-gray-400 { + color: $gray-400 !important; +} + +.text-gray-500 { + color: $gray-500 !important; +} + +.text-gray-600 { + color: $gray-600 !important; +} + +.text-gray-700 { + color: $gray-700 !important; +} + +.text-gray-800 { + color: $gray-800 !important; +} + +.text-gray-900 { + color: $gray-900 !important; +} + +.icon-circle { + height: 2.5rem; + width: 2.5rem; + border-radius: 100%; + display: flex; + align-items: center; + justify-content: center; +} + + +.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); +} + +.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; + 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, .dropdown .dropdown-menu .dropdown-header, .sidebar .sidebar-heading { + 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: #4e73df !important; +} + +a.text-primary:hover, a.text-primary:focus { + color: #224abe !important; +} + +.text-secondary { + color: #858796 !important; +} + +a.text-secondary:hover, a.text-secondary:focus { + color: #60616f !important; +} + +.text-success { + color: #1cc88a !important; +} + +a.text-success:hover, a.text-success:focus { + color: #13855c !important; +} + +.text-info { + color: #36b9cc !important; +} + +a.text-info:hover, a.text-info:focus { + color: #258391 !important; +} + +.text-warning { + color: #f6c23e !important; +} + +a.text-warning:hover, a.text-warning:focus { + color: #dda20a !important; +} + +.text-danger { + color: #e74a3b !important; +} + +a.text-danger:hover, a.text-danger:focus { + color: #be2617 !important; +} + +.text-light { + color: #f8f9fc !important; +} + +a.text-light:hover, a.text-light:focus { + color: #c2cbe5 !important; +} + +.text-dark { + color: #5a5c69 !important; +} + +a.text-dark:hover, a.text-dark:focus { + color: #373840 !important; +} + +.text-body { + color: #858796 !important; +} + +.text-muted { + color: #858796 !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; + word-wrap: break-word !important; +} + +.text-reset { + color: inherit !important; +} \ No newline at end of file diff --git a/assets/styles/frontend/blue.scss b/assets/styles/frontend/blue.scss new file mode 100644 index 0000000..f16750e --- /dev/null +++ b/assets/styles/frontend/blue.scss @@ -0,0 +1,484 @@ + +/*===================================================================================*/ +/* Colors CSS +/*===================================================================================*/ + +a { + color: #0f6cb2; +} +.show-theme-options:hover, +.show-theme-options:focus { + background: #0f6cb2; +} +.btn-primary:hover, +.btn-black:hover, +.btn-primary:focus, +.btn-black:focus { + background: #0f6cb2; +} +.top-bar .cnt-account ul > li a:hover, +.top-bar .cnt-account ul > li a:focus { + color: #fff; +} +.top-bar .cnt-block ul li a .caret { + color: rgba(255,255,255,0.8); +} +.top-bar .cnt-block ul li .dropdown-menu li a:hover, +.top-bar .cnt-block ul li .dropdown-menu li a:focus { + color: #0f6cb2; +} +.main-header .top-search-holder .contact-row .icon { + color: #0f6cb2; +} +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .total-price-basket .total-price { + color: #fff; +} +.top-cart-row .dropdown-cart .dropdown-menu .cart-item.product-summary .name a:hover, +.top-cart-row .dropdown-cart .dropdown-menu .cart-item.product-summary .name a:focus { + color: #0f6cb2; +} +.top-cart-row .dropdown-cart .dropdown-menu .cart-item.product-summary .price { + color: #0f6cb2; +} +.top-cart-row .dropdown-cart .dropdown-menu .cart-item.product-summary .action a:hover, +.top-cart-row .dropdown-cart .dropdown-menu .cart-item.product-summary .action a:focus { + color: #0f6cb2; +} +.top-cart-row .dropdown-cart .dropdown-menu .cart-total .price { + color: #0f6cb2; +} +.main-header .top-search-holder .search-area .categories-filter .dropdown-menu li a:hover, +.main-header .top-search-holder .search-area .categories-filter .dropdown-menu li a:focus { + color: #0f6cb2; +} +.header-style-1 .header-nav { + background: #157ed2; + border-top: 1px solid hsla(0,0%,100%,.2); + border-radius: 0px 0px 0px 200px; +} +.cnt-home .header-style-1 .header-nav .navbar .navbar-nav > li.active { + +} + +.cnt-home .header-style-1 .header-nav .navbar .navbar-nav > li.active a:after { + content: ""; + position: absolute; + top: 92%; + left: 42%; + border-width: 0px 6px 6px 6px; + border-style: solid; + border-color: #f8f8f8 transparent; + display: block; + width: 0; + right: inherit; + z-index: 10000; +} + +.cnt-home .header-style-1 .header-nav .navbar .navbar-nav > li a:hover:after { + content: ""; + position: absolute; + top: 92%; + left: 42%; + border-width: 0px 6px 6px 6px; + border-style: solid; + border-color: #f8f8f8 transparent; + display: block; + width: 0; + right: inherit; + z-index: 10000; +} + + +.cnt-home .header-style-1.header-style-2 .header-nav .navbar .navbar-nav > li.active, +.cnt-homepage .header-style-1.header-style-2 .header-nav .navbar .navbar-nav > li.active { + background: #0f6cb2; +} +.cnt-home .header-style-1.header-style-3 .header-nav .navbar .navbar-nav > li.active { + background: #0f6cb2; +} +.header-style-2 .header-nav .navbar-default .navbar-collapse .navbar-nav > li > a:hover, +.header-style-2 .header-nav .navbar-default .navbar-collapse .navbar-nav > li > a:focus { + background: #0f6cb2 !important; +} +.header-style-2 .header-nav .navbar-default .navbar-collapse .navbar-nav > li.open { + background: #0f6cb2; +} +.sidebar .side-menu nav .nav > li a:hover, +.sidebar .side-menu nav .nav > li a:focus { + color: #0f6cb2; +} +.sidebar .side-menu nav .nav > li a:hover:after, +.sidebar .side-menu nav .nav > li a:focus:after { + color: #0f6cb2; +} +.info-box .info-box-heading.green { + color: #fff; +} +.scroll-tabs .nav-tab-line li a:hover, +.scroll-tabs .nav-tab-line li a:focus { + color: #0f6cb2; +} +.product .product-info .name a:hover, +.product .product-info .name a:focus { + color: #0f6cb2; +} +.product .product-info .product-price .price { + color: #333; +} +.product .cart .action ul li.lnk a:hover, +.product .cart .action ul li.lnk a:focus { + color: #0f6cb2; +} +.product .cart .action ul li.add-cart-button .btn-primary:hover, +.product .cart .action ul li.add-cart-button .btn-primary:focus { + background: #0f6cb2; +} +.product .cart .action ul li.add-cart-button .btn-primary.icon:hover, +.product .cart .action ul li.add-cart-button .btn-primary.icon:focus { + background: #0f6cb2; +} +.tag.sale { + background: #fdd922; + color:#333 +} +.copyright-bar .copyright a { + color: #0f6cb2; +} +.blog-slider-container .blog-slider .blog-post-info .name a:hover, +.blog-slider-container .blog-slider .blog-post-info .name a:focus { + color: #0f6cb2; +} +.footer .links-social .social-icons a:hover, +.footer .links-social .social-icons a:focus, +.footer .links-social .social-icons a.active { + background: #0f6cb2; +} +.latest-tweet .re-twitter .comment a { + color: #0f6cb2; +} +.latest-tweet .re-twitter .comment .icon .fa-stack-2x { + color: #0f6cb2; +} +.footer .contact-information .media .icon .fa-stack-2x { + color: #0f6cb2; +} +.footer .contact-information .media .media-body a:hover, +.footer .contact-information .media .media-body a:focus { + color: #0f6cb2; +} +.footer .footer-bottom .module-body ul li a:hover, +.footer .footer-bottom .module-body ul li a:focus { + color: #72797e; +} +.product-tag .item.active, +.product-tag .item:hover, +.product-tag .item:focus { + background: #0f6cb2; +} +.hot-deals .product-info .product-price .price { + color: #0f6cb2; +} +.hot-deals .product-info .name a:hover, +.hot-deals .product-info .name a:focus { + color: #0f6cb2; +} +.custom-carousel .owl-controls .owl-prev:hover, +.custom-carousel .owl-controls .owl-next:hover, +.custom-carousel .owl-controls .owl-prev:focus, +.custom-carousel .owl-controls .owl-next:focus { + background: #0f6cb2; +} +.yamm .dropdown-menu .title:hover, +.yamm .dropdown-menu .title:focus { + color: #0f6cb2; +} +.yamm .dropdown-menu li a:hover, +.yamm .dropdown-menu li a:focus { + color: #0f6cb2; +} +.breadcrumb ul li.active { + color: #157ed2; +} +.breadcrumb ul a:hover, +.breadcrumb ul a:focus { + color: #157ed2; +} +.filters-container .nav-tabs.nav-tab-box li.active a .icon { + color: #0f6cb2; +} +.filters-container .pagination-container ul li.active a { + color: #0f6cb2; +} +.filters-container .pagination-container ul li.prev:hover, +.filters-container .pagination-container ul li.next:hover, +.filters-container .pagination-container ul li.prev:focus, +.filters-container .pagination-container ul li.next:focus { + background: #0f6cb2; +} +.filters-container .pagination-container ul li a:hover, +.filters-container .pagination-container ul li a:focus { + color: #0f6cb2; +} +.filters-container .lbl-cnt .dropdown.dropdown-med .dropdown-menu li a:hover, +.filters-container .lbl-cnt .dropdown.dropdown-med .dropdown-menu li a:focus { + color: #0f6cb2; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-heading .accordion-toggle, +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-heading .accordion-toggle:hover, +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-heading .accordion-toggle:focus, +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-heading .accordion-toggle:after { + color: #0f6cb2; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .price-range-holder .slider .slider-track .slider-handle { + border: 5px solid #0f6cb2; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .list li a:hover, +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .list li a:focus { + color: #0f6cb2; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .compare-report span { + color: #0f6cb2; +} +.sidebar .sidebar-widget .advertisement .owl-controls .owl-pagination .owl-page.active span { + background: #0f6cb2; +} +.sidebar .sidebar-widget .advertisement .owl-controls .owl-pagination .owl-page:hover span { + background: #0f6cb2; +} +.single-product .gallery-holder .gallery-thumbs .owl-item .item:hover { + border: 1px solid #0f6cb2; +} +.single-product .product-info .rating-reviews .reviews .lnk:hover, +.single-product .product-info .rating-reviews .reviews .lnk:focus { + color: #0f6cb2; +} +.single-product .product-info .price-container .price-box .price { + color: #ff7878; +} +.single-product .product-info .quantity-container .cart-quantity .arrows .arrow:hover, +.single-product .product-info .quantity-container .cart-quantity .arrows .arrow:focus { + color: #0f6cb2; +} +.single-product .product-info .product-social-link .social-icons ul li a:hover, +.single-product .product-info .product-social-link .social-icons ul li a:focus { + background: #0f6cb2; +} +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell li a:hover, +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell li a:focus { + background: #0f6cb2; +} +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell li a:hover:after, +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell li a:focus:after { + border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #0f6cb2; +} +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell li.active a { + background: #0f6cb2; +} +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell li.active a:after { + border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #0f6cb2; +} +.cart .action .add-cart-button .btn.btn-primary.icon:hover, +.cart .action .add-cart-button .btn.btn-primary.icon:focus { + background: #0f6cb2; + color:#fff +} +.product-tabs .tab-content .tab-pane .product-reviews .reviews .review .review-title .date span { + color: #0f6cb2; +} +.product-tabs .tab-content .tab-pane .product-reviews .reviews .review .author span { + color: #0f6cb2; +} +#owl-main:hover .owl-prev:hover, +#owl-main:hover .owl-next:hover { + background: #0f6cb2; + color:#fff!important +} +#owl-main:hover .owl-prev:hover .icon, +#owl-main:hover .owl-next:hover .icon { + color:#fff!important +} + +#owl-main .owl-controls .owl-pagination .owl-page:active span, +#owl-main .owl-controls .owl-pagination .owl-page:hover span { + background: #0f6cb2; +} +.cart .action ul .lnk .add-to-cart:hover, +.cart .action ul .lnk .add-to-cart:focus { + color: #fff !important; +} +.cart .action .add-to-cart:hover, +.cart .action .add-to-cart:focus { + color: #0f6cb2 !important; +} +.homepage-container .product .tag.hot { + background: #0f6cb2; +} +.homepage-container .product .product-info .name a:hover, +.homepage-container .product .product-info .name a:focus { + color: #0f6cb2; +} +.homepage-container .btn-primary:hover, +.homepage-container .btn-primary:focus { + background: #0f6cb2; + border: 2px solid #0f6cb2; +} +.category-product .cart .action ul li .add-to-cart:hover, +.category-product .cart .action ul li .add-to-cart:focus { + background: #0f6cb2; +} +.furniture-container .product .btn-primary:hover, +.furniture-container .product .btn-primary:focus { + background: #0f6cb2; +} +.header-style-3 .header-nav .navbar-default .navbar-collapse .navbar-nav > li > a:hover, +.header-style-3 .header-nav .navbar-default .navbar-collapse .navbar-nav > li > a:focus { + background: #0f6cb2; +} +.header-style-3 .header-nav .navbar-default .navbar-collapse .navbar-nav > li.open { + background: #0f6cb2; +} +#owl-single-product-thumbnails .owl-controls .owl-pagination .owl-page.active span { + background: #0f6cb2 !important; +} +#owl-single-product-thumbnails .owl-controls .owl-pagination .owl-page span:hover, +#owl-single-product-thumbnails .owl-controls .owl-pagination .owl-page span:focus { + background: #0f6cb2 !important; +} +.cnt-homepage .sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .price-range-holder .slider .slider-track .slider-handle.max-slider-handle { + background: #0f6cb2; +} +.blog-page .blog-post h1 a:hover, +.blog-page .blog-post h1 a:focus { + color: #0f6cb2; +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .nav-tabs > li.active > a, +.blog-page .sidebar .sidebar-module-container .sidebar-widget .nav-tabs > li.active > a:hover, +.blog-page .sidebar .sidebar-module-container .sidebar-widget .nav-tabs > li.active > a:focus { + color: #157ed2; +} +.blog-page .blog-post .social-media a:hover, +.blog-page .blog-post .social-media a:focus { + background-color: #0f6cb2; +} +.blog-page .sidebar .sidebar-module-container .search-area .search-button:after { + color: #333; +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .blog-post h4 a:hover, +.blog-page .sidebar .sidebar-module-container .sidebar-widget .blog-post h4 a:focus { + color: #0f6cb2; +} +.blog-page .blog-post-author-details .author-social-network button .twitter-icon { + background-color: #0f6cb2; +} +.blog-page .blog-review .review-action a, +.blog-page .blog-review .review-action a:hover, +.blog-page .blog-review .review-action a:focus { + color: #0f6cb2; +} +.blog-page .blog-post-author-details .author-social-network .dropdown-menu > li > a:hover, +.blog-page .blog-post-author-details .author-social-network .dropdown-menu > li > a:focus { + color: #0f6cb2; +} +.checkout-box .checkout-steps .panel .panel-heading .unicase-checkout-title > a:not(.collapsed) span { + background-color: #0f6cb2; +} +.checkout-box .checkout-steps .checkout-step-01 .already-registered-login a:hover, +.checkout-box .checkout-steps .checkout-step-01 .already-registered-login a:focus { + color: #0f6cb2; +} +.checkout-box .checkout-progress-sidebar .panel-body ul li a:hover, +.checkout-box .checkout-progress-sidebar .panel-body ul li a:focus { + color: #0f6cb2; +} +.contact-page .contact-info .contact-i { + background-color: #0f6cb2; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info h4 a:hover, +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info h4 a:focus { + color: #0f6cb2; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info .cart-product-info span span { + color: #84b943; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-edit a:hover, +.shopping-cart .shopping-cart-table table tbody tr .cart-product-edit a:focus { + color: #0f6cb2; +} +.shopping-cart .cart-shopping-total table thead tr th .cart-grand-total { + color: #84b943; +} +.shopping-cart-table table tbody tr td .quant-input .arrows .arrow:hover, +.shopping-cart-table table tbody tr td .quant-input .arrows .arrow:focus { + color: #0f6cb2; +} +.logo-color { + fill: #0f6cb2; +} +.cnt-homepage .single-product .product-info-block .form-control .dropdown-menu ul li a:hover, +.cnt-homepage .single-product .product-info-block .form-control .dropdown-menu ul li a:focus { + color: #0f6cb2; +} +.cnt-homepage .single-product .product-info-block .txt.txt-qty { + color: #0f6cb2; +} +.cnt-homepage .single-product .product-tabs .nav-tab-cell-detail { + border-bottom: none; +} +.cnt-homepage .single-product .product-tabs .nav-tab-cell-detail li { + margin-right: 10px; + padding: 0; +} +.cnt-homepage .single-product .product-tabs .nav-tab-cell-detail li a:hover, +.cnt-homepage .single-product .product-tabs .nav-tab-cell-detail li a:focus { + background: #0f6cb2; + border: 2px solid #0f6cb2; +} +.cnt-homepage .single-product .product-tabs .nav-tab-cell-detail li.active a { + background: #0f6cb2; + border: 2px solid #0f6cb2; +} +.shopping-cart .estimate-ship-tax table tbody .unicase-form-control .dropdown-menu.open ul li a:hover, +.shopping-cart .estimate-ship-tax table tbody .unicase-form-control .dropdown-menu.open ul li a:focus { + color: #0f6cb2; +} +.mega-menu .dropdown-menu { +width:100%; +left:0px +} + +.navbar-nav>li>.dropdown-menu { box-shadow:0px 10px 20px 0px rgba(0,0,0,.1);} + +.product-comparison .compare-table tr td .product-price .price { + color: #0f6cb2; +} +.product-comparison .compare-table tr td .in-stock { + color: #0f6cb2; +} +.body-content .my-wishlist-page .my-wishlist table tbody .product-name a:hover, +.body-content .my-wishlist-page .my-wishlist table tbody .product-name a:focus { + color: #0f6cb2; +} +.product-comparison .compare-table tr td .product-price .price { + color: #0f6cb2; +} +.product-comparison .compare-table tr td .in-stock { + color: #0f6cb2; +} +.body-content .x-page .x-text h1 { + color: #0f6cb2; +} +.body-content .x-page .x-text a { + color: #0f6cb2; +} +.sign-in-page .register-form .forgot-password, +.sign-in-page .register-form .forgot-password:hover, +.sign-in-page .register-form .forgot-password:focus { + color: #0f6cb2; +} +.body-content .my-wishlist-page .my-wishlist table tbody .price { + color: #0f6cb2; +} +.terms-conditions-page .contact-form { + color: #0f6cb2; +} + diff --git a/assets/styles/frontend/checkbox.css b/assets/styles/frontend/checkbox.css new file mode 100644 index 0000000..33b8fa2 --- /dev/null +++ b/assets/styles/frontend/checkbox.css @@ -0,0 +1,188 @@ +/* --------------------------------------------------- + +Project : CSS Checkbox Switch +Author : Partha Kar (https://www.facebook.com/partha.creativemind) +Version : 1.0 +Release Dtae : 15 November, 2017 + +---------------------------------------------------- */ + + +.checkbox.checbox-switch { + padding-left: 0; +} + +.checkbox.checbox-switch label, +.checkbox-inline.checbox-switch { + display: inline-block; + position: relative; + padding-left: 0; +} +.checkbox.checbox-switch label input, +.checkbox-inline.checbox-switch input { + display: none; +} +.checkbox.checbox-switch label span, +.checkbox-inline.checbox-switch span { + width: 35px; + border-radius: 20px; + height: 18px; + border: 1px solid #dbdbdb; + background-color: rgb(255, 255, 255); + border-color: rgb(223, 223, 223); + box-shadow: rgb(223, 223, 223) 0px 0px 0px 0px inset; + transition: border 0.4s ease 0s, box-shadow 0.4s ease 0s; + display: inline-block; + vertical-align: middle; + margin-right: 5px; +} +.checkbox.checbox-switch label span:before, +.checkbox-inline.checbox-switch span:before { + display: inline-block; + width: 16px; + height: 16px; + border-radius: 50%; + background: rgb(255,255,255); + content: " "; + top: 0; + position: relative; + left: 0; + transition: all 0.3s ease; + box-shadow: 0 1px 4px rgba(0,0,0,0.4); +} +.checkbox.checbox-switch label > input:checked + span:before, +.checkbox-inline.checbox-switch > input:checked + span:before { + left: 17px; +} + + +/* Switch Default */ +.checkbox.checbox-switch label > input:checked + span, +.checkbox-inline.checbox-switch > input:checked + span { + background-color: rgb(180, 182, 183); + border-color: rgb(180, 182, 183); + box-shadow: rgb(180, 182, 183) 0px 0px 0px 8px inset; + transition: border 0.4s ease 0s, box-shadow 0.4s ease 0s, background-color 1.2s ease 0s; +} +.checkbox.checbox-switch label > input:checked:disabled + span, +.checkbox-inline.checbox-switch > input:checked:disabled + span { + background-color: rgb(220, 220, 220); + border-color: rgb(220, 220, 220); + box-shadow: rgb(220, 220, 220) 0px 0px 0px 8px inset; + transition: border 0.4s ease 0s, box-shadow 0.4s ease 0s, background-color 1.2s ease 0s; +} +.checkbox.checbox-switch label > input:disabled + span, +.checkbox-inline.checbox-switch > input:disabled + span { + background-color: rgb(232,235,238); + border-color: rgb(255,255,255); +} +.checkbox.checbox-switch label > input:disabled + span:before, +.checkbox-inline.checbox-switch > input:disabled + span:before { + background-color: rgb(248,249,250); + border-color: rgb(243, 243, 243); + box-shadow: 0 1px 4px rgba(0,0,0,0.1); +} + +/* Switch Light */ +.checkbox.checbox-switch.switch-light label > input:checked + span, +.checkbox-inline.checbox-switch.switch-light > input:checked + span { + background-color: rgb(248,249,250); + border-color: rgb(248,249,250); + box-shadow: rgb(248,249,250) 0px 0px 0px 8px inset; + transition: border 0.4s ease 0s, box-shadow 0.4s ease 0s, background-color 1.2s ease 0s; +} + +/* Switch Dark */ +.checkbox.checbox-switch.switch-dark label > input:checked + span, +.checkbox-inline.checbox-switch.switch-dark > input:checked + span { + background-color: rgb(52,58,64); + border-color: rgb(52,58,64); + box-shadow: rgb(52,58,64) 0px 0px 0px 8px inset; + transition: border 0.4s ease 0s, box-shadow 0.4s ease 0s, background-color 1.2s ease 0s; +} +.checkbox.checbox-switch.switch-dark label > input:checked:disabled + span, +.checkbox-inline.checbox-switch.switch-dark > input:checked:disabled + span { + background-color: rgb(100, 102, 104); + border-color: rgb(100, 102, 104); + box-shadow: rgb(100, 102, 104) 0px 0px 0px 8px inset; + transition: border 0.4s ease 0s, box-shadow 0.4s ease 0s, background-color 1.2s ease 0s; +} + +/* Switch Success */ +.checkbox.checbox-switch.switch-success label > input:checked + span, +.checkbox-inline.checbox-switch.switch-success > input:checked + span { + background-color: rgb(40, 167, 69); + border-color: rgb(40, 167, 69); + box-shadow: rgb(40, 167, 69) 0px 0px 0px 8px inset; + transition: border 0.4s ease 0s, box-shadow 0.4s ease 0s, background-color 1.2s ease 0s; +} +.checkbox.checbox-switch.switch-success label > input:checked:disabled + span, +.checkbox-inline.checbox-switch.switch-success > input:checked:disabled + span { + background-color: rgb(153, 217, 168); + border-color: rgb(153, 217, 168); + box-shadow: rgb(153, 217, 168) 0px 0px 0px 8px inset; +} + +/* Switch Danger */ +.checkbox.checbox-switch.switch-danger label > input:checked + span, +.checkbox-inline.checbox-switch.switch-danger > input:checked + span { + background-color: rgb(200, 35, 51); + border-color: rgb(200, 35, 51); + box-shadow: rgb(200, 35, 51) 0px 0px 0px 8px inset; + transition: border 0.4s ease 0s, box-shadow 0.4s ease 0s, background-color 1.2s ease 0s; +} +.checkbox.checbox-switch.switch-danger label > input:checked:disabled + span, +.checkbox-inline.checbox-switch.switch-danger > input:checked:disabled + span { + background-color: rgb(216, 119, 129); + border-color: rgb(216, 119, 129); + box-shadow: rgb(216, 119, 129) 0px 0px 0px 8px inset; + transition: border 0.4s ease 0s, box-shadow 0.4s ease 0s, background-color 1.2s ease 0s; +} + +/* Switch Primary */ +.checkbox.checbox-switch.switch-primary label > input:checked + span, +.checkbox-inline.checbox-switch.switch-primary > input:checked + span { + background-color: rgb(0, 105, 217); + border-color: rgb(0, 105, 217); + box-shadow: rgb(0, 105, 217) 0px 0px 0px 8px inset; + transition: border 0.4s ease 0s, box-shadow 0.4s ease 0s, background-color 1.2s ease 0s; +} +.checkbox.checbox-switch.switch-primary label > input:checked:disabled + span, +.checkbox-inline.checbox-switch.switch-primary > input:checked:disabled + span { + background-color: rgb(109, 163, 221); + border-color: rgb(109, 163, 221); + box-shadow: rgb(109, 163, 221) 0px 0px 0px 8px inset; + transition: border 0.4s ease 0s, box-shadow 0.4s ease 0s, background-color 1.2s ease 0s; +} + +/* Switch Info */ +.checkbox.checbox-switch.switch-info label > input:checked + span, +.checkbox-inline.checbox-switch.switch-info > input:checked + span { + background-color: rgb(23, 162, 184); + border-color: rgb(23, 162, 184); + box-shadow: rgb(23, 162, 184) 0px 0px 0px 8px inset; + transition: border 0.4s ease 0s, box-shadow 0.4s ease 0s, background-color 1.2s ease 0s; +} +.checkbox.checbox-switch.switch-info label > input:checked:disabled + span, +.checkbox-inline.checbox-switch.switch-info > input:checked:disabled + span { + background-color: rgb(102, 192, 206); + border-color: rgb(102, 192, 206); + box-shadow: rgb(102, 192, 206) 0px 0px 0px 8px inset; + transition: border 0.4s ease 0s, box-shadow 0.4s ease 0s, background-color 1.2s ease 0s; +} + +/* Switch Warning */ +.checkbox.checbox-switch.switch-warning label > input:checked + span, +.checkbox-inline.checbox-switch.switch-warning > input:checked + span { + background-color: rgb(255, 193, 7); + border-color: rgb(255, 193, 7); + box-shadow: rgb(255, 193, 7) 0px 0px 0px 8px inset; + transition: border 0.4s ease 0s, box-shadow 0.4s ease 0s, background-color 1.2s ease 0s; +} +.checkbox.checbox-switch.switch-warning label > input:checked:disabled + span, +.checkbox-inline.checbox-switch.switch-warning > input:checked:disabled + span { + background-color: rgb(226, 195, 102); + border-color: rgb(226, 195, 102); + box-shadow: rgb(226, 195, 102) 0px 0px 0px 8px inset; + transition: border 0.4s ease 0s, box-shadow 0.4s ease 0s, background-color 1.2s ease 0s; +} \ No newline at end of file diff --git a/assets/styles/frontend/grabbing.html b/assets/styles/frontend/grabbing.html new file mode 100644 index 0000000..c26c98c --- /dev/null +++ b/assets/styles/frontend/grabbing.html @@ -0,0 +1,115 @@ + + + + + +
+
+

+

+

+
+
+
+
+
+
+ + + diff --git a/assets/styles/frontend/lightbox.scss b/assets/styles/frontend/lightbox.scss new file mode 100644 index 0000000..e48791a --- /dev/null +++ b/assets/styles/frontend/lightbox.scss @@ -0,0 +1,210 @@ +/* Preload images */ +body:after { + content: url(../images/close.png) url(../images/loading.gif) url(../images/prev.png) url(../images/next.png); + display: none; +} + +.lightboxOverlay { + position: absolute; + top: 0; + left: 0; + z-index: 9999; + background-color: black; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); + opacity: 0.8; + display: none; +} + +.lightbox { + position: absolute; + left: 0; + width: 100%; + z-index: 10000; + text-align: center; + line-height: 0; + font-weight: normal; +} + +.lightbox .lb-image { + display: block; + height: auto; + max-width: inherit; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; +} + +.lightbox a img { + border: none; +} + +.lb-outerContainer { + position: relative; + background-color: white; + *zoom: 1; + width: 250px; + height: 250px; + margin: 0 auto; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} + +.lb-outerContainer:after { + content: ""; + display: table; + clear: both; +} + +.lb-container { + padding: 4px; +} + +.lb-loader { + position: absolute; + top: 43%; + left: 0; + height: 25%; + width: 100%; + text-align: center; + line-height: 0; +} + +.lb-cancel { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + background: url(../images/loading.gif) no-repeat; +} + +.lb-nav { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: 10; +} + +.lb-container > .nav { + left: 0; +} + +.lb-nav a { + outline: none; + background-image: url('data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='); +} + +.lb-prev, .lb-next { + height: 100%; + cursor: pointer; + display: block; +} + +.lb-nav a.lb-prev { + width: 34%; + left: 0; + float: left; + background: url(../images/prev.png) left 48% no-repeat; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + -webkit-transition: opacity 0.6s; + -moz-transition: opacity 0.6s; + -o-transition: opacity 0.6s; + transition: opacity 0.6s; +} + +.lb-nav a.lb-prev:hover { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; +} + +.lb-nav a.lb-next { + width: 64%; + right: 0; + float: right; + background: url(../images/next.png) right 48% no-repeat; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + -webkit-transition: opacity 0.6s; + -moz-transition: opacity 0.6s; + -o-transition: opacity 0.6s; + transition: opacity 0.6s; +} + +.lb-nav a.lb-next:hover { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; +} + +.lb-dataContainer { + margin: 0 auto; + padding-top: 5px; + *zoom: 1; + width: 100%; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.lb-dataContainer:after { + content: ""; + display: table; + clear: both; +} + +.lb-data { + padding: 0 4px; + color: #ccc; +} + +.lb-data .lb-details { + width: 85%; + float: left; + text-align: left; + line-height: 1.1em; +} + +.lb-data .lb-caption { + font-size: 13px; + font-weight: bold; + line-height: 1em; +} + +.lb-data .lb-number { + display: block; + clear: left; + padding-bottom: 1em; + font-size: 12px; + color: #999999; +} + +.lb-data .lb-close { + display: block; + float: right; + width: 30px; + height: 30px; + background: url(../images/close.png) top right no-repeat; + text-align: right; + outline: none; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70); + opacity: 0.7; + -webkit-transition: opacity 0.2s; + -moz-transition: opacity 0.2s; + -o-transition: opacity 0.2s; + transition: opacity 0.2s; +} + +.lb-data .lb-close:hover { + cursor: pointer; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; +} diff --git a/assets/styles/frontend/main.scss b/assets/styles/frontend/main.scss new file mode 100644 index 0000000..40fb365 --- /dev/null +++ b/assets/styles/frontend/main.scss @@ -0,0 +1,7401 @@ + +/* +Theme Name: Marazzo +Author: ThemesGround +Description: Marazzo HTML Template +Version: 1.4 +License: GNU General Public License v2 or later +Tags: two-columns, left-sidebar, fixed-layout, responsive-layout, custom-background, custom-colors, custom-header, custom-menu +Text Domain: Marazzo + +/* TABLE OF CONTENTS + +1. Body +2. Layout +3. Header +4. Side menu +5. Slider +6. Top Banner Section +8. Home Tabs +9. Products Grid +10. Products List +11. Latest-Blog +12. Sidebar +13. Product View +14. Footer +15. Responsive +16. Testimonials + +/* */ +/*===================================================================================*/ +/* Body +/*===================================================================================*/ +.inline { + display: inline-block; + vertical-align: top; +} +ul { + list-style: none; +} +a { + -webkit-transition: all 0.2s linear 0s; + -moz-transition: all 0.2s linear 0s; + -o-transition: all 0.2s linear 0s; + transition: all 0.2s linear 0s; +} + +body { + color: #333; + overflow-x: hidden; + margin: 0; + padding: 0; + font-family:'Barlow', sans-serif; + background-color: #f3f3f3; +} + +.cnt-home {background-color: #f2f3f7;} + +ul { + margin: 0; + padding: 0; +} +a { + outline: none; +} +a:hover, +a:active, +a:focus { + text-decoration: none; +} +img[src="assets/images/blank.gif"] { + background: url("../../../public/images/font/ajax.gif") no-repeat scroll center center #ffffff; +} + +.btn-upper { + text-transform: uppercase; +} +.m-t-20 { + margin-top: 20px; +} + +.m-t-25 { + margin-top: 25px; +} + +.m-t-30 { + margin-top: 30px; +} + +.m-t-15 { + margin-top: 15px; +} +.m-t-10 { + margin-top: 10px; +} + +.m-t-5 { + margin-top: 5px; +} + +/*===================================================================================*/ +/* Buttons +/*===================================================================================*/ + +.btn-uppercase { + text-transform: uppercase; +} +.btn-default { + background: #cbc9c9; + color: #fff; + font-weight: 400; + /*line-height:30px;*/ + -webkit-transition: all 0.2s linear 0s; + -moz-transition: all 0.2s linear 0s; + -ms-transition: all 0.2s linear 0s; + -o-transition: all 0.2s linear 0s; + transition: all 0.2s linear 0s; + padding: 8px 14px; +} +.btn-primary { + -webkit-transition: all linear 0.2s; + -moz-transition: all linear 0.2s; + -ms-transition: all linear 0.2s; + -o-transition: all linear 0.2s; + transition: all linear 0.2s; + background: #108bea; + color: #fff; + border: none; + font-size: 14px; + line-height: 22px; + border-radius:0; + padding: 8px 14px; + font-family: 'Barlow', sans-serif; + border-radius:5px; + font-weight:400; + letter-spacing:1px; + text-transform:uppercase +} + +.btn-black { + -webkit-transition: all linear 0.2s; + -moz-transition: all linear 0.2s; + -ms-transition: all linear 0.2s; + -o-transition: all linear 0.2s; + transition: all linear 0.2s; + background: #3a3a3a; + color: #fff; + border: none; + font-size: 15px; + line-height: 30px; + font-weight: 500; + padding: 3px 22px; +} + +.btn-yellow { + -webkit-transition: all linear 0.2s; + -moz-transition: all linear 0.2s; + -ms-transition: all linear 0.2s; + -o-transition: all linear 0.2s; + transition: all linear 0.2s; + background: #fdd922; + color: #333; + border: none; + font-size: 14px; + line-height: 22px; + border-radius:0; + padding: 8px 14px; + font-family: 'Barlow', sans-serif; + border-radius:5px; + font-weight:400; + letter-spacing:1px; + text-transform:uppercase +} + + +.btn-primary:hover, +.btn-black:hover, +.btn-black:focus, +.btn-primary:focus { + color: #fff; +} + + +/*===================================================================================*/ +/* Layout +/*===================================================================================*/ +.center-block { + float: none; +} +.inner { + padding-top: 120px; + padding-bottom: 120px; +} +.inner-md { + padding-top: 100px; + padding-bottom: 100px; +} +.inner-sm { + padding-top: 80px; + padding-bottom: 80px; +} +.inner-xs { + padding-top: 40px; + padding-bottom: 40px; +} +.inner-vs { + padding-top: 30px; + padding-bottom: 30px; +} +.inner-top { + padding-top: 120px; +} +.inner-top-md { + padding-top: 100px; +} +.inner-top-sm { + padding-top: 80px; +} +.inner-top-xs { + padding-top: 40px; +} +.inner-top-vs { + padding-top: 30px; +} +.inner-bottom { + padding-bottom: 120px; +} +.inner-bottom-md { + padding-bottom: 100px; +} +.inner-bottom-sm { + padding-bottom: 80px; +} +.inner-bottom-xs { + padding-bottom: 40px; +} +.inner-bottom-vs { + padding-bottom: 60px; +} +.inner-left { + padding-left: 75px; +} +.inner-left-md { + padding-left: 60px; +} +.inner-left-sm { + padding-left: 45px; +} +.inner-left-xs { + padding-left: 30px; +} +.inner-right { + padding-right: 75px; +} +.inner-right-md { + padding-right: 60px; +} +.inner-right-sm { + padding-right: 45px; +} +.inner-right-xs { + padding-right: 30px; +} +.inner-right-vs { + padding-right: 10px; +} +.outer { + margin-top: 120px; + margin-bottom: 120px; +} +.outer-md { + margin-top: 100px; + margin-bottom: 100px; +} +.outer-sm { + margin-top: 80px; + margin-bottom: 80px; +} +.outer-xs { + margin-top: 40px; + margin-bottom: 40px; +} +.outer-top { + margin-top: 120px; +} +.outer-top-md { + margin-top: 100px; +} +.outer-top-sm { + margin-top: 80px; +} +.outer-top-xs { + margin-top: 20px; +} + +.outer-top-ss { + margin-top: 20px; +} + +.outer-top-n { + margin-top: 0px!important; +} + +.outer-top-vs { + margin-top: 30px; +} +.outer-top-small { + margin-top: 50px; +} +.outer-bottom { + margin-bottom: 120px; +} +.outer-bottom-md { + margin-bottom: 100px; +} +.outer-bottom-sm { + margin-bottom: 80px; +} +.outer-bottom-vs { + margin-bottom: 60px; +} +.outer-bottom-xs { + margin-bottom: 30px; +} +.outer-bottom-small { + margin-bottom: 30px; +} +.outer-top-bd { + margin-top: 50px; +} +.inner-bottom-30 { + padding-bottom: 30px; +} +.inner-bottom-20 { + padding-bottom: 20px; +} +@media (max-width: 767px) { + .inner { + padding-top: 80px; + padding-bottom: 80px; + } + .inner-md { + padding-top: 65px; + padding-bottom: 65px; + } + .inner-sm { + padding-top: 50px; + padding-bottom: 50px; + } + .inner-xs { + padding-top: 40px; + padding-bottom: 40px; + } + .inner-top { + padding-top: 80px; + } + .inner-top-md { + padding-top: 65px; + } + .inner-top-sm { + padding-top: 50px; + } + .inner-top-xs { + padding-top: 40px; + } + .inner-bottom { + padding-bottom: 80px; + } + .inner-bottom-md { + padding-bottom: 65px; + } + .inner-bottom-sm { + padding-bottom: 50px; + } + .inner-bottom-xs { + padding-bottom: 40px; + } +} + +.rht-col {width: calc(100% - 290px);} + +.section-title { + font-size:20px; + font-family: 'Barlow', sans-serif; + border-bottom: 1px solid #eaeaea; + padding-bottom: 15px; + font-weight:500; + margin-top:0px; + letter-spacing:normal +} + +.featured-product .section-title { + margin-bottom: 0px; + margin-top: 0px; + font-size: 24px; + font-family: 'Barlow', sans-serif; + font-weight: 600; + border-bottom: 1px solid #eaeaea; + padding-bottom: 10px; + padding: 18px 20px; + background: #ff7878; + color: #fff; + border-radius:5px 0px 0px 0px +} +.featured-product .ad-imgs {padding:20px} +.featured-product .ad-imgs img {width:100%} + +.featured-product .sub-cat {overflow:hidden; padding:0px; margin:0px; text-align:left; padding-top:8px; padding-left:25px} +.featured-product .sub-cat li {display:block; padding:6px 0px; margin:0px; text-align:left; font-size:16px; color:#666} +.featured-product .sub-cat li a {font-weight:400; color:#777} +.featured-product .col-lg-3 {padding-right:0px} +.featured-product .col-lg-9 {border-left:1px #eaeaea solid; padding-left:25px} + +.featured-product .custom-carousel .owl-controls .owl-prev {left:-70px; right:auto; top:39px; background:#be5050} +.featured-product .custom-carousel .owl-controls .owl-next {left:-44px; right:auto; top:39px; background:#be5050} + +.best-deal { + background-color: #fff; + box-shadow: 0 2px 4px 0 rgba(0,0,0,.08); + +} + +.best-deal .section-title { + margin-bottom: 0px; + margin-top: 5px; + font-size: 16px; + font-family: 'Open Sans', sans-serif; + text-transform: uppercase; + font-weight: bold; + border-bottom: 1px solid #e3e3e3; + padding-bottom: 10px; + padding: 18px 20px; +} + +.best-deal .best-seller {padding:21px; padding-top:0px;} +.best-deal .best-seller .col2 {padding-left:0px} + +.home-owl-carousel .owl-controls, +.blog-slider .owl-controls, +.brand-slider .owl-controls { + margin-top: 0px; +} + +.brand-slider img {opacity:0.3; width:130px} + +.brand-slider .owl-item { text-align:center} + +/*carousel control button*/ +.sidebar-widget .custom-carousel .owl-controls {right:0px} + +.custom-carousel .owl-controls { + position: absolute; + right: 20px; + top: -38px; + width: 100%; + display: block; +} +.custom-carousel .owl-controls .owl-prev { + position: absolute; + width: 20px; + height: 20px; + top: -25px; + right: 27px; + -webkit-transition: all linear 0.2s; + -moz-transition: all linear 0.2s; + -ms-transition: all linear 0.2s; + -o-transition: all linear 0.2s; + transition: all linear 0.2s; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + background: #dddddd; +} +.custom-carousel .owl-controls .owl-prev:before { + color: #fff; + content: "\f104"; + font-family: fontawesome; + font-size: 13px; + left: 7px; + position: absolute; + top: 2px; +} +.custom-carousel .owl-controls .owl-next { + position: absolute; + width: 20px; + height: 20px; + top: -25px; + right: 0px; + -webkit-transition: all linear 0.2s; + -moz-transition: all linear 0.2s; + -ms-transition: all linear 0.2s; + -o-transition: all linear 0.2s; + transition: all linear 0.2s; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + background: #dddddd; +} +.custom-carousel .owl-controls .owl-next:before { + content: "\f105"; + font-family: fontawesome; + color: #fff; + font-size: 13px; + left: 7px; + position: absolute; + top: 2px; +} +.logo-slider .owl-controls .owl-prev, +.logo-slider .owl-controls .owl-next { + top: -57px; + display:none +} +.featured-product { + margin-bottom:30px; + background-color: #fff; + border-radius:5px + +} + +.featured-product .cart-btn {display:none} + +.featured-product .products { + margin-left: 0px; + margin-right: 18px; + padding-bottom: 15px; +} + +.featured-product .home-owl-carousel {padding-left: 20px;} + +.new-arriavls{ + margin-bottom: 50px; + background-color: #fff; + border-radius:5px + +} + +.new-arriavls .products { + margin-left: 0px; + margin-right: 18px; + padding-bottom: 15px; +} + +.new-arriavls .home-owl-carousel {padding-left: 20px;} + +.new-arriavls .section-title { + margin-bottom: 0px; + margin-top: 5px; + font-size: 24px; + font-family: 'Barlow', sans-serif; + font-weight: 600; + border-bottom: 1px solid #eaeaea; + padding-bottom: 10px; + padding: 18px 20px; +} + +.new-arriavls .cart-btn {display:none} + +.latest-blog { + margin-bottom: 30px; + background-color: #fff; + border-radius:5px + + +} + +.latest-blog .btn-primary {margin:3px} + +.latest-blog .section-title { + margin-bottom: 0px; + margin-top: 5px; + font-size: 24px; + font-family: 'Barlow', sans-serif; + font-weight: 600; + border-bottom: 1px solid #eaeaea; + padding-bottom: 10px; + padding: 18px 20px; +} + +.latest-blog .blog-slider {padding-left: 20px; padding-bottom:25px;} +.latest-blog .blog-post {margin-right:25px} +.latest-blog .blog-post img {width:100%} + +.logo-slider-inner { + margin-top: 20px; + margin-bottom: 10px; +} +.special-product .product:first-child { + margin-bottom: 20px; +} + +.special-product .product .image img {width:100%} +.special-product .product .col {padding-right:0px} +.special-product .product .btn-primary {background:none; padding:0px; color:#157ed2; text-decoration:underline; margin-top:5px;} + +.special-product .product:last-child { + margin-top: 20px; +} +.best-product .product:first-child { + margin-bottom: 20px; +} +#owl-main .owl-controls .owl-buttons .icon { + position: relative; + top: 8px; + color: #333 !important; +} +.config-options ul > li > a { + display: block; +} +.read-more-bottom { + margin-bottom: 10px; +} +.unicase-form-control { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + border-color: #eee; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + height: auto; + padding: 10px 12px; +} +.unicase-form-control:focus { + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + border-color: #d8d8d8; +} +.animate-dropdown .open > .dropdown-menu, +.animate-dropdown .open > .dropdown-menu > .dropdown-submenu > .dropdown-menu { + animation-name: slidenavAnimation; + animation-duration: 200ms; + animation-iteration-count: 1; + animation-timing-function: ease-out; + animation-fill-mode: forwards; + -webkit-animation-name: slidenavAnimation; + -webkit-animation-duration: 200ms; + -webkit-animation-iteration-count: 1; + -webkit-animation-timing-function: ease-out; + -webkit-animation-fill-mode: forwards; + -moz-animation-name: slidenavAnimation; + -moz-animation-duration: 200ms; + -moz-animation-iteration-count: 1; + -moz-animation-timing-function: ease-out; + -moz-animation-fill-mode: forwards; +} +@keyframes slidenavAnimation { + from { + margin-top: -30px; + opacity: 0; + } + to { + margin-top: 0; + opacity: 1; + } +} +@-webkit-keyframes slidenavAnimation { + from { + margin-top: -30px; + opacity: 0; + } + to { + margin-top: 0; + opacity: 1; + } +} +.seller-product .products { + margin-bottom: 35px; +} + +.product-slider .products {margin-left:0px; margin-right:18px; padding-bottom:15px} +.product-slider .products .cart-btn {display:none} +.category-product .products .cart-btn {display: none;} + +.seller-product .products .product .product-info .name { + font-size: 18px; + margin-top: 5px !important; +} +a { + color: #12cca7; +} +.show-theme-options:hover, +.show-theme-options:focus { + background: #12cca7; +} +.btn-primary:hover, +.btn-black:hover, +.btn-primary:focus, +.btn-black:focus { + background: #12cca7; +} +.top-bar .cnt-account ul > li a:hover, +.top-bar .cnt-account ul > li a:focus { + color: #12cca7; +} +.top-bar .cnt-block ul li a .caret { + color: #12cca7; +} +.top-bar .cnt-block ul li .dropdown-menu li a:hover, +.top-bar .cnt-block ul li .dropdown-menu li a:focus { + color: #12cca7; +} +.main-header .top-search-holder .contact-row .icon { + color: #12cca7; +} +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .total-price-basket .total-price { + color: #12cca7; +} +.top-cart-row .dropdown-cart .dropdown-menu .cart-item.product-summary .name a:hover, +.top-cart-row .dropdown-cart .dropdown-menu .cart-item.product-summary .name a:focus { + color: #12cca7; +} +.top-cart-row .dropdown-cart .dropdown-menu .cart-item.product-summary .price { + color: #12cca7; +} +.top-cart-row .dropdown-cart .dropdown-menu .cart-item.product-summary .action a:hover, +.top-cart-row .dropdown-cart .dropdown-menu .cart-item.product-summary .action a:focus { + color: #12cca7; +} +.top-cart-row .dropdown-cart .dropdown-menu .cart-total .price { + color: #12cca7; +} +.main-header .top-search-holder .search-area .categories-filter .dropdown-menu li a:hover, +.main-header .top-search-holder .search-area .categories-filter .dropdown-menu li a:focus { + color: #12cca7; +} +.header-style-1 .header-nav { + background: #12cca7; +} +.cnt-home .header-style-1 .header-nav .navbar .navbar-nav > li.active { + +} +.cnt-home .header-style-1 .header-nav .navbar .navbar-nav > li > a:hover, +.cnt-home .header-style-1 .header-nav .navbar .navbar-nav > li > a:focus { + +} +.cnt-home .header-style-1.header-style-2 .header-nav .navbar .navbar-nav > li.active, +.cnt-homepage .header-style-1.header-style-2 .header-nav .navbar .navbar-nav > li.active { + background: #12cca7; +} +.cnt-home .header-style-1.header-style-3 .header-nav .navbar .navbar-nav > li.active { + background: #12cca7; +} +.header-style-2 .header-nav .navbar-default .navbar-collapse .navbar-nav > li > a:hover, +.header-style-2 .header-nav .navbar-default .navbar-collapse .navbar-nav > li > a:focus { + background: #12cca7 !important; +} +.header-style-2 .header-nav .navbar-default .navbar-collapse .navbar-nav > li.open { + background: #12cca7; +} +.sidebar .side-menu nav .nav > li a:hover, +.sidebar .side-menu nav .nav > li a:focus { + color: #12cca7; +} +.sidebar .side-menu nav .nav > li a:hover:after, +.sidebar .side-menu nav .nav > li a:focus:after { + color: #12cca7; +} +.info-box .info-box-heading.green { + color: #12cca7; +} +.scroll-tabs .nav-tab-line li a:hover, +.scroll-tabs .nav-tab-line li a:focus { + color: #12cca7; +} +.product .product-info .name a:hover, +.product .product-info .name a:focus { + color: #12cca7; +} +.product .product-info .product-price .price { + color: #12cca7; +} +.product .cart .action ul li.lnk a:hover, +.product .cart .action ul li.lnk a:focus { + color: #12cca7; +} +.product .cart .action ul li.add-cart-button .btn-primary:hover, +.product .cart .action ul li.add-cart-button .btn-primary:focus { + background: #12cca7; +} +.product .cart .action ul li.add-cart-button .btn-primary.icon:hover, +.product .cart .action ul li.add-cart-button .btn-primary.icon:focus { + background: #0b816a; +} +.tag.sale { + background: #abd07e; +} +.copyright-bar .copyright a { + color: #12cca7; +} +.blog-slider-container .blog-slider .blog-post-info .name a:hover, +.blog-slider-container .blog-slider .blog-post-info .name a:focus { + color: #12cca7; +} +.footer .links-social .social-icons a:hover, +.footer .links-social .social-icons a:focus, +.footer .links-social .social-icons a.active { + background: #12cca7; +} +.latest-tweet .re-twitter .comment a { + color: #12cca7; +} +.latest-tweet .re-twitter .comment .icon .fa-stack-2x { + color: #12cca7; +} +.footer .contact-information .media .icon .fa-stack-2x { + color: #12cca7; +} +.footer .contact-information .media .media-body a:hover, +.footer .contact-information .media .media-body a:focus { + color: #12cca7; +} +.footer .footer-bottom .module-body ul li a:hover, +.footer .footer-bottom .module-body ul li a:focus { + color: #12cca7; +} +.product-tag .item.active, +.product-tag .item:hover, +.product-tag .item:focus { + background: #12cca7; +} +.hot-deals .product-info .product-price .price { + color: #12cca7; +} +.hot-deals .product-info .name a:hover, +.hot-deals .product-info .name a:focus { + color: #12cca7; +} +.custom-carousel .owl-controls .owl-prev:hover, +.custom-carousel .owl-controls .owl-next:hover, +.custom-carousel .owl-controls .owl-prev:focus, +.custom-carousel .owl-controls .owl-next:focus { + background: #0b816a; +} +.yamm .dropdown-menu .title:hover, +.yamm .dropdown-menu .title:focus { + color: #12cca7; +} +.yamm .dropdown-menu li a:hover, +.yamm .dropdown-menu li a:focus { + color: #12cca7; +} +.breadcrumb ul li.active { + color: #0b816a; +} +.breadcrumb ul a:hover, +.breadcrumb ul a:focus { + color: #0b816a; +} +.filters-container .nav-tabs.nav-tab-box li.active a .icon { + color: #12cca7; +} +.filters-container .pagination-container ul li.active a { + color: #12cca7; +} +.filters-container .pagination-container ul li.prev:hover, +.filters-container .pagination-container ul li.next:hover, +.filters-container .pagination-container ul li.prev:focus, +.filters-container .pagination-container ul li.next:focus { + background: #12cca7; +} +.filters-container .pagination-container ul li a:hover, +.filters-container .pagination-container ul li a:focus { + color: #12cca7; +} +.filters-container .lbl-cnt .dropdown.dropdown-med .dropdown-menu li a:hover, +.filters-container .lbl-cnt .dropdown.dropdown-med .dropdown-menu li a:focus { + color: #12cca7; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-heading .accordion-toggle, +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-heading .accordion-toggle:hover, +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-heading .accordion-toggle:focus, +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-heading .accordion-toggle:after { + color: #12cca7; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .price-range-holder .slider .slider-track .slider-handle { + border: 5px solid #12cca7; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .list li a:hover, +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .list li a:focus { + color: #12cca7; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .compare-report span { + color: #12cca7; +} +.sidebar .sidebar-widget .advertisement .owl-controls .owl-pagination .owl-page.active span { + background: #12cca7; +} +.sidebar .sidebar-widget .advertisement .owl-controls .owl-pagination .owl-page:hover span { + background: #12cca7; +} +.single-product .gallery-holder .gallery-thumbs .owl-item .item:hover { + border: 1px solid #12cca7; +} +.single-product .product-info .rating-reviews .reviews .lnk:hover, +.single-product .product-info .rating-reviews .reviews .lnk:focus { + color: #12cca7; +} +.single-product .product-info .price-container .price-box .price { + color: #12cca7; +} +.single-product .product-info .quantity-container .cart-quantity .arrows .arrow:hover, +.single-product .product-info .quantity-container .cart-quantity .arrows .arrow:focus { + color: #12cca7; +} +.single-product .product-info .product-social-link .social-icons ul li a:hover, +.single-product .product-info .product-social-link .social-icons ul li a:focus { + background: #12cca7; +} +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell li a:hover, +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell li a:focus { + background: #12cca7; +} +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell li a:hover:after, +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell li a:focus:after { + border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #12cca7; +} +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell li.active a { + background: #12cca7; +} +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell li.active a:after { + border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #12cca7; +} +.cart .action .add-cart-button .btn.btn-primary.icon:hover, +.cart .action .add-cart-button .btn.btn-primary.icon:focus { + background: #12cca7; +} +.product-tabs .tab-content .tab-pane .product-reviews .reviews .review .review-title .date span { + color: #12cca7; +} +.product-tabs .tab-content .tab-pane .product-reviews .reviews .review .author span { + color: #12cca7; +} +#owl-main:hover .owl-prev:hover, +#owl-main:hover .owl-next:hover { + background: #0b816a; +} +#owl-main .owl-controls .owl-pagination .owl-page:active span, +#owl-main .owl-controls .owl-pagination .owl-page:hover span { + background: #12cca7; +} +.cart .action ul .lnk .add-to-cart:hover, +.cart .action ul .lnk .add-to-cart:focus { + color: #12cca7 !important; +} +.cart .action .add-to-cart:hover, +.cart .action .add-to-cart:focus { + color: #12cca7 !important; +} +.homepage-container .product .tag.hot { + background: #12cca7; +} +.homepage-container .product .product-info .name a:hover, +.homepage-container .product .product-info .name a:focus { + color: #12cca7; +} +.homepage-container .btn-primary:hover, +.homepage-container .btn-primary:focus { + background: #12cca7; + border: 2px solid #12cca7; +} + +.category-list {background-color: #fff; padding: 20px;} +.category-product .cart .action ul li .add-to-cart:hover, +.category-product .cart .action ul li .add-to-cart:focus { + background: #12cca7; +} +.furniture-container .product .btn-primary:hover, +.furniture-container .product .btn-primary:focus { + background: #12cca7; +} +.header-style-3 .header-nav .navbar-default .navbar-collapse .navbar-nav > li > a:hover, +.header-style-3 .header-nav .navbar-default .navbar-collapse .navbar-nav > li > a:focus { + background: #12cca7; +} +.header-style-3 .header-nav .navbar-default .navbar-collapse .navbar-nav > li.open { + background: #12cca7; +} +#owl-single-product-thumbnails .owl-controls .owl-pagination .owl-page.active span { + background: #12cca7 !important; +} +#owl-single-product-thumbnails .owl-controls .owl-pagination .owl-page span:hover, +#owl-single-product-thumbnails .owl-controls .owl-pagination .owl-page span:focus { + background: #12cca7 !important; +} +.cnt-homepage .sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .price-range-holder .slider .slider-track .slider-handle.max-slider-handle { + background: #12cca7; +} +.blog-page .blog-post h1 a:hover, +.blog-page .blog-post h1 a:focus { + color: #12cca7; +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .nav-tabs > li.active > a, +.blog-page .sidebar .sidebar-module-container .sidebar-widget .nav-tabs > li.active > a:hover, +.blog-page .sidebar .sidebar-module-container .sidebar-widget .nav-tabs > li.active > a:focus { + color: #0b816a; +} +.blog-page .blog-post .social-media a:hover, +.blog-page .blog-post .social-media a:focus { + background-color: #12cca7; +} +.blog-page .sidebar .sidebar-module-container .search-area .search-button:after { + color: #0b816a; +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .blog-post h4 a:hover, +.blog-page .sidebar .sidebar-module-container .sidebar-widget .blog-post h4 a:focus { + color: #12cca7; +} +.blog-page .blog-post-author-details .author-social-network button .twitter-icon { + background-color: #12cca7; +} +.blog-page .blog-review .review-action a, +.blog-page .blog-review .review-action a:hover, +.blog-page .blog-review .review-action a:focus { + color: #12cca7; +} +.blog-page .blog-post-author-details .author-social-network .dropdown-menu > li > a:hover, +.blog-page .blog-post-author-details .author-social-network .dropdown-menu > li > a:focus { + color: #12cca7; +} +.checkout-box .checkout-steps .panel .panel-heading .unicase-checkout-title > a:not(.collapsed) span { + background-color: #12cca7; +} +.checkout-box .checkout-steps .checkout-step-01 .already-registered-login a:hover, +.checkout-box .checkout-steps .checkout-step-01 .already-registered-login a:focus { + color: #12cca7; +} +.checkout-box .checkout-progress-sidebar .panel-body ul li a:hover, +.checkout-box .checkout-progress-sidebar .panel-body ul li a:focus { + color: #12cca7; +} +.contact-page .contact-info .contact-i { + background-color: #12cca7; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info h4 a:hover, +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info h4 a:focus { + color: #12cca7; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info .cart-product-info span span { + color: #0b816a; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-edit a:hover, +.shopping-cart .shopping-cart-table table tbody tr .cart-product-edit a:focus { + color: #12cca7; +} +.shopping-cart .cart-shopping-total table thead tr th .cart-grand-total { + color: #0b816a; +} +.shopping-cart-table table tbody tr td .quant-input .arrows .arrow:hover, +.shopping-cart-table table tbody tr td .quant-input .arrows .arrow:focus { + color: #12cca7; +} +.logo-color { + fill: #12cca7; +} +.cnt-homepage .single-product .product-info-block .form-control .dropdown-menu ul li a:hover, +.cnt-homepage .single-product .product-info-block .form-control .dropdown-menu ul li a:focus { + color: #12cca7; +} +.cnt-homepage .single-product .product-info-block .txt.txt-qty { + color: #12cca7; +} +.cnt-homepage .single-product .product-tabs .nav-tab-cell-detail { + border-bottom: none; +} +.cnt-homepage .single-product .product-tabs .nav-tab-cell-detail li { + margin-right: 10px; + padding: 0; +} +.cnt-homepage .single-product .product-tabs .nav-tab-cell-detail li a:hover, +.cnt-homepage .single-product .product-tabs .nav-tab-cell-detail li a:focus { + background: #12cca7; + border: 2px solid #12cca7; +} +.cnt-homepage .single-product .product-tabs .nav-tab-cell-detail li.active a { + background: #12cca7; + border: 2px solid #12cca7; +} +.shopping-cart .estimate-ship-tax table tbody .unicase-form-control .dropdown-menu.open ul li a:hover, +.shopping-cart .estimate-ship-tax table tbody .unicase-form-control .dropdown-menu.open ul li a:focus { + color: #12cca7; +} +.yamm .dropdown-menu { + border-top-color: #12cca7; +} +.product-comparison .compare-table tr td .product-price .price { + color: #12cca7; +} +.product-comparison .compare-table tr td .in-stock { + color: #12cca7; +} +.body-content .my-wishlist-page .my-wishlist table tbody .product-name a:hover, +.body-content .my-wishlist-page .my-wishlist table tbody .product-name a:focus { + color: #12cca7; +} +.product-comparison .compare-table tr td .product-price .price { + color: #12cca7; +} +.product-comparison .compare-table tr td .in-stock { + color: #12cca7; +} +.body-content .x-page .x-text h1 { + color: #12cca7; +} +.body-content .x-page .x-text a { + color: #12cca7; +} +.sign-in-page .register-form .forgot-password, +.sign-in-page .register-form .forgot-password:hover, +.sign-in-page .register-form .forgot-password:focus { + color: #12cca7; +} +.body-content .my-wishlist-page .my-wishlist table tbody .price { + color: #12cca7; +} +.terms-conditions-page .contact-form { + color: #12cca7; +} + +.top-bar { + padding:0px; + font-size: 14px; + background: #157ed2; +} +.top-bar .cnt-account { + float: right; + padding: 6px 0px; +} +.top-bar .cnt-account ul { + margin: 0px; +} +.top-bar .cnt-account ul > li { + display: inline-block; + line-height: 12px; + padding:3px 12px 3px 7px; + border-right: 1px solid hsla(0,0%,100%,.2); + +} +.top-bar .cnt-account ul > li:last-child { + border:none; + padding-right:0px + +} +.top-bar .cnt-account ul > li a { + color:rgba(255,255,255,0.8); + padding: 0px; + font-weight: 400; + -webkit-transition: all 0.2s linear 0s; + -moz-transition: all 0.2s linear 0s; + -o-transition: all 0.2s linear 0s; + transition: all 0.2s linear 0s; + letter-spacing:0.2px; + +} +.top-bar .cnt-account ul > li a .icon { + display: block; + float: left; + padding-right: 6px; + font-size: 11px; + display:none +} +.top-bar .cnt-account ul > li a:hover, +.top-bar .cnt-account ul > li a:focus { + text-decoration: none; +} +.top-bar .cnt-block { + float: left; +} +.top-bar .cnt-block .list-inline { + margin: 0px; +} +.top-bar .cnt-block .list-inline > li { + display: inline-block; + margin-right:10px; + padding:0px; +} +.top-bar .cnt-block .list-inline > li > a { + padding: 7px 0px; + -webkit-transition: all 0.2s linear 0s; + -moz-transition: all 0.2s linear 0s; + -o-transition: all 0.2s linear 0s; + transition: all 0.2s linear 0s; + color: #888; + display: inline-block; + text-transform: capitalize; +} +.top-bar .cnt-block .list-inline > li > a .value { + color: rgba(255,255,255,0.8); + margin: 2px 4px 2px 7px; +} +.top-bar .cnt-block .list-inline > li > a:hover, +.top-bar .cnt-block .list-inline > li > a:focus { + text-decoration: none; + color: #888888; +} +.top-bar .cnt-block .list-inline > li .dropdown-menu { + border-radius: 3px; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + border:none; + top: 125%; + left: 5px; + min-width:75px; +} + +.top-bar .dropdown-menu>li>a { + padding:3px 10px; + font-size:13px +} + +.top-bar .cnt-block .list-inline > li .dropdown-menu li a:hover, +.top-bar .cnt-block .list-inline > li .dropdown-menu li a:focus { + background: rgba(0, 0, 0, 0); +} + + +/*===================================================================================*/ +/* Header +/*===================================================================================*/ +header{ + background: #fdd922; +} + +.main-header { + padding:25px 0px 30px 0px; + background: #157ed2; +} +.main-header .logo-holder { + margin-top:5px; +} +.main-header .top-search-holder .contact-row { + line-height: 20px; + color: #9b9b9b; +} +.main-header .top-search-holder .contact-row .phone { + margin: 0 23px 0 0; + border-right: 1px solid #E2E2E2; + padding-right: 35px; +} +.main-header .top-search-holder .contact-row .icon { + font-size: 18px; + line-height: 23px; + margin: 0 8px 0 0; + vertical-align: middle; +} +.main-header .top-search-holder .search-area { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + margin: 8px 0 0; + background:#fff; + border-radius:999px; +} + +.top-search-holder {padding-left:0px} + +.main-header .top-search-holder .search-area .search-field { + border: medium none; + -webkit-border-radius: 5px 0 0 5px; + -moz-border-radius: 5px 0 0 5px; + border-radius: 5px 0 0 5px; + padding:18px 13px; + width: 67%; + font-family: 'Barlow', sans-serif; + font-size:14px +} +.main-header .top-search-holder .search-area .categories-filter { + border-right: 1px solid #E0E0E0; + text-transform: capitalize; + display: inline-block; + line-height: 56px; + background: #f6f6f6; + border-radius:999px 0px 0px 999px +} +.main-header .top-search-holder .search-area .categories-filter a { + padding: 0 20px; + color: #666; + font-size: 14px; +} +.main-header .top-search-holder .search-area .categories-filter a .caret { + margin-left: 15px; + color: #a0a0a0; +} +.main-header .top-search-holder .search-area .categories-filter .dropdown-menu { + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + border: 1px solid #e1e1e1; + padding: 12px 17px; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; +} +.main-header .top-search-holder .search-area .categories-filter .dropdown-menu li { + margin-bottom: 10px; +} +.main-header .top-search-holder .search-area .categories-filter .dropdown-menu li a { + padding: 0px; +} +.main-header .top-search-holder .search-area .categories-filter .dropdown-menu li a:hover, +.main-header .top-search-holder .search-area .categories-filter .dropdown-menu li a:focus { + background: rgba(0, 0, 0, 0); +} +.main-header .top-search-holder .search-area .categories-filter .dropdown-menu li.menu-header { + font-family: 'Open Sans', sans-serif; + line-height: 30px; +} +.main-header .top-search-holder .search-area .search-button { + border-radius: 0px 999px 999px 0px; + display: inline-block; + float: right; + margin: 0px; + padding: 19px 25px 19px; + text-align: center; + background-color: #fdd922; + +} +.main-header .top-search-holder .search-area .search-button:after { + color: #333; + content: "\f002"; + font-family: fontawesome; + font-size: 18px; + line-height: 9px; + vertical-align: middle; +} +.cnt-home .header-style-1.header-style-2 .header-nav .navbar-default { + background: #404040; +} +.top-cart-row { + padding-top:8px; +} +.top-cart-row .dropdown-cart { + float: right; + +} + +.top-cart-row .dropdown-cart img {width:100%} + +.top-cart-row .dropdown-cart .lnk-cart { + padding: 0px; + color: #fff; +} +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner { + position: relative; +} +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .total-price-basket { + padding: 0px 0px 13px 5px; + font-family: 'Barlow', sans-serif; + letter-spacing: 0.2px; + display:inline-block; + font-size:15px; +} + +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .total-price-basket .lbl {display:block; color: rgba(255,255,255,0.8);} + +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .total-price-basket .value {font-size:22px; font-weight:600; display:block} + +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .basket { + padding: 12px; + padding:0px; + overflow:hidden +} + +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .basket:before { + content: ''; + /* height: 40px; */ + display: inline-block; + /* line-height: 40px; */ + text-align: center; + font-weight: normal; + margin-right: 11px; + background: url(../../../public/images/font/icon-cart.png) no-repeat top left; + padding: 15px 0px; + border-radius: 5px; + width: 50px; + height: 51px; + float: left; +} + +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .basket-item-count { + -webkit-border-radius: 100px; + -moz-border-radius: 100px; + border-radius: 100px; + height: 18px; + position: absolute; + left: 20px; + top: 10px; + width: 18px; + background: #fdd922; + color: #0f6cb2; + font-size: 11px; + text-align: center; + line-height: 19px;; +} +.top-cart-row .dropdown-cart .dropdown-menu { + border:none; + border-radius: 5px; + float: right; + left: auto; + min-width: 0; + padding: 24px 22px; + right: 0; + width: 230px; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} +.top-cart-row .dropdown-cart .dropdown-menu .cart-item.product-summary .name { + font-size: 14px; + margin-top: 0px; + font-weight:400; + +} + +.top-cart-row .dropdown-cart .dropdown-menu .cart-item .col-xs-7 {padding-left:0px} + +.top-cart-row .dropdown-cart .dropdown-menu .cart-item.product-summary .name a { + color: #666666; +} +.top-cart-row .dropdown-cart .dropdown-menu .cart-item.product-summary .price { + font-weight: 600; +} +.top-cart-row .dropdown-cart .dropdown-menu .cart-item.product-summary .action { + padding: 0; + position: relative; + font-size: 15px; + right: 8px; + top: 8px; +} +.top-cart-row .dropdown-cart .dropdown-menu .cart-item.product-summary .action a { + color: #898989; +} +.top-cart-row .dropdown-cart .dropdown-menu .cart-total .text { + font-size: 14px; + color: #666666; + margin-right: 10px; +} +.top-cart-row .dropdown-cart .dropdown-menu .cart-total .price { + font-weight: 600; +} +.header-style-1 .header-nav .navbar-default { + border: medium none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + background: rgba(0, 0, 0, 0); + margin: 0; + min-height:auto; +} +.header-style-1 .header-nav .navbar-default .navbar-collapse { + padding: 0; +} +.header-style-1 .header-nav .navbar-default .navbar-collapse .navbar-nav > li.active > a { + color: #fff; +} +.navbar-nav {float:none} + +.special-menu {float:right} +.special-menu a {color:#ffdd35!important; border:none!important; padding-right:0px!important} +.special-menu a:hover{ background:none!important; color:#fff!important} + +.header-style-1 .header-nav .navbar-default .navbar-collapse .navbar-nav > li > a { + background: none repeat scroll 0 0 rgba(0, 0, 0, 0); + color: #FFFFFF; + font-family: 'Barlow', sans-serif; + font-size: 18px; + line-height:normal; + padding: 18px 18px; + -webkit-transitio: all 0.2s linear 0s; + -moz-transition: all 0.2s linear 0s; + -o-transition: all 0.2s linear 0s; + transition: all 0.2s linear 0s; + font-weight:500; + letter-spacing:normal; + position: relative; + +} +.header-style-1 .header-nav .navbar-default .navbar-collapse .navbar-nav > li .menu-label { + position: absolute; + text-transform: uppercase; + top: -10px; + display: inline; + padding: 4px 8px; + color: #fff; + font-size: 10px; + font-family:'Barlow', sans-serif; + right: 23px; + line-height: normal; + letter-spacing:1px; + border-radius:2px +} +.header-style-1 .header-nav .navbar-default .navbar-collapse .navbar-nav > li .menu-label:after { + border-width: 6px 7px 0 6px; + right: 18px; + top: 90%; + border-style: solid; + content: ""; + display: block; + height: 0; + position: absolute; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transitio: all 0.3s ease 0s; + transition: all 0.3s ease 0s; + width: 0; + z-index: 100; + +} +.header-style-1 .header-nav .navbar-default .navbar-collapse .navbar-nav > li .menu-label:before { + right: 18px; + top: 90%; +} +.header-style-1 .header-nav .navbar-default .navbar-collapse .navbar-nav > li .menu-label.new-menu { + background: #f1c40f; +} +.header-style-1 .header-nav .navbar-default .navbar-collapse .navbar-nav > li .menu-label.new-menu:after { + border-color: #f1c40f rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); +} +.header-style-1 .header-nav .navbar-default .navbar-collapse .navbar-nav > li .menu-label.new-menu:before { + border-color: #f1c40f rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); +} +.header-style-1 .header-nav .navbar-default .navbar-collapse .navbar-nav > li .menu-label.hot-menu { + background: #ff7878; +} +.header-style-1 .header-nav .navbar-default .navbar-collapse .navbar-nav > li .menu-label.hot-menu:after { + border-color: #ff7878 rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); +} +.header-style-1 .header-nav .navbar-default .navbar-collapse .navbar-nav > li .menu-label.hot-menu:before { + border-color: #ff7878 rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); +} +.header-style-2 { + /*margin-bottom:10px;*/ +} +.header-style-2 .header-nav { + background: rgba(0, 0, 0, 0) !important; +} +.header-style-2 .header-nav .navbar-default .nav-bg-class { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + margin: 0; +} +.header-style-2 .header-nav .navbar-default .nav-bg-class .navbar-collapse .navbar-nav > li > a { + color: #555; +} +.header-style-2 .header-nav .navbar-default .nav-bg-class .navbar-collapse .navbar-nav > li > a:hover, +.header-style-2 .header-nav .navbar-default .nav-bg-class .navbar-collapse .navbar-nav > li > a:focus { + color: #fff; +} +.header-style-2 .header-nav .navbar-default .nav-bg-class .navbar-collapse .navbar-nav > li.open > a { + color: #fff; +} +.header-style-3 .header-nav { + background: #202020 !important; + border: medium none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + margin: 0; +} +.header-style-3 .header-nav .navbar-default .navbar-collapse .navbar-nav > li > a { + color: #fff; +} +.header-style-3 .header-nav .navbar-default .navbar-collapse .navbar-nav > li > a:hover, +.header-style-3 .header-nav .navbar-default .navbar-collapse .navbar-nav > li > a:focus { + color: #fff; +} +.header-style-3 .header-nav .yamm .dropdown-menu { + top: 62px; +} +.yamm .nav, +.yamm .collapse, +.yamm .dropup, +.yamm .dropdown { + position: static; +} +.yamm .dropdown-menu { + left:auto; + top: 100% ; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + border:none; + padding:0px +} + +.yamm .dropdown-menu .custom-banner a {padding:0px} +.yamm .dropdown-menu .banner-image { margin-bottom:0px} + +.navbar-nav .open a{ + float: none; + background:#fff!important; + color:#888!important; + border-radius:3px 3px 0px 0px; +} + +.yamm .dropdown-menu .yamm-content { + padding: 20px 20px; + +} + +.yamm .dropdown-menu .yamm-content .col-menu {min-width:150px} + +.yamm .dropdown-menu .yamm-content .links li a { + padding: 6px 0px; + font-size:14px; + color:#565656; + +} + + +.yamm .dropdown-menu h2 { + font-size: 16px; + color: #555; + margin-top: 0px; + font-weight:600 +} +.yamm .dropdown-menu li { + line-height:normal; + padding: 0px 0px; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; +} +.yamm .dropdown-menu li a { + color: #3D3D3D; + line-height: normal; + text-transform: none ; + display: block; + padding: 8px 16px; +} +.yamm .dropdown-menu li a:hover, +.yamm .dropdown-menu li a:focus { + background: rgba(0, 0, 0, 0); + margin-left: 0px; +} +.yamm .dropdown-menu .text { + font-size: 13px; + line-height: 20px; + position: relative; + bottom: 0px; + top: 73px; +} +.yamm .dropdown.yamm-fw .dropdown-menu { + left: 0; + right: 0; +} +.cnt-home .header-style-1.header-style-2 .header-nav .navbar .navbar-nav > li.active > a, +.cnt-homepage .header-style-1.header-style-2 .header-nav .navbar .navbar-nav > li.active > a { + color: #fff; +} +.cnt-home .header-style-1.header-style-2 .header-nav .navbar-default { + background: #404040; +} +.cnt-home .header-style-1.header-style-2 .header-nav .navbar-default .nav-bg-class { + border: none; +} +.cnt-home .header-style-1.header-style-2 .header-nav .navbar-default .nav-bg-class .navbar-collapse .navbar-nav > li > a { + color: #fff; +} +.cnt-homepage .header-style-2 .header-nav .navbar-default { + background: #fff; +} +.cnt-homepage .header-style-2 .header-nav .navbar-default .nav-bg-class { + -moz-box-shadow: 0 0 0 3px #F6F6F6 inset; + -webkit-box-shadow: 0 0 0 3px #F6F6F6 inset; + box-shadow: 0 0 0 3px #F6F6F6 inset; +} +.header-nav .navbar-default .dropdown .dropdown-menu.pages .links > li { + border-bottom: 1px solid #eaeaea; + padding: 5px 0; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; +} +.header-nav .navbar-default .dropdown .dropdown-menu.pages .links > li:last-child { + border-bottom: none; +} +.header-nav .navbar-default .dropdown .dropdown-menu.pages .links > li > a { + line-height: 26px; + padding: 0px; +} +.header-nav .navbar-default .dropdown .dropdown-menu.pages .links > li > a:hover, +.header-nav .navbar-default .dropdown .dropdown-menu.pages .links > li > a:focus { + margin-left: 0px; +} + + +/*===================================================================================*/ +/* Side menu +/*===================================================================================*/ + +.sidebar .side-menu { + background-color: #fff; + border-radius: 10px; +} + +.sidebar .custom-carousel .owl-controls .owl-prev {top: -20px;} +.sidebar .custom-carousel .owl-controls .owl-next {top: -20px;} + +.sidebar .side-menu .head { + border-radius: 10px 10px 0px 0px; + color: #333; + font-size: 20px; + font-family:'Barlow', sans-serif; + padding: 15px 17px; + background-color: #fdd922; + font-weight:500; + letter-spacing: 0.2px; +} +.sidebar .side-menu .head .icon { + margin-right: 5px; +} +.sidebar .side-menu nav .nav > li { + -moz-border-bottom-colors: none; + -moz-border-left-colors: none; + -moz-border-right-colors: none; + -moz-border-top-colors: none; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; + position: relative; + width: 100%; + border-bottom: 1px solid #eaeaea; + +} + +.sidebar .side-menu nav .nav > li:last-child {border-bottom:none} + +.sidebar .side-menu nav .nav > li > a { + padding: 15px 20px; + color: #666666; + font-family:'Barlow', sans-serif; + letter-spacing:0.2px; + font-size:14px; +} +.sidebar .side-menu nav .nav > li > a:after { + color: #bababa; + content: "\f105"; + float: right; + font-size: 12px; + height: 20px; + line-height: 18px; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; + width: 10px; + font-family: FontAwesome; +} +.sidebar .side-menu nav .nav > li > a .icon { + font-size: 16px; + margin-right: 12px; +} +.sidebar .side-menu nav .nav > li > a:hover, +.sidebar .side-menu nav .nav > li > a:focus { + background: #fff; + +} +.sidebar .side-menu nav .nav > li > a:hover .icon, +.sidebar .side-menu nav .nav > li > a:focus .icon { + color: #666666; +} +.sidebar .side-menu nav .nav > li > .mega-menu { + padding: 3px 0; + top: 0 !important; + left: 100%; + margin: 0; + min-width: 330%; + /*338%;*/ + position: absolute; + top: 0px; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + overflow:hidden +} +.sidebar .side-menu nav .nav > li > .mega-menu .yamm-content { + padding: 10px 20px; +} +.sidebar .side-menu nav .nav > li > .mega-menu .yamm-content ul > li { + + padding:3px 0; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; +} +.sidebar .side-menu nav .nav > li > .mega-menu .yamm-content ul > li:last-child { + border-bottom: none; +} +.sidebar .side-menu nav .nav > li > .mega-menu .yamm-content ul > li > a { + line-height: 26px; + padding: 0px; + font-size:14px; + +} +.sidebar .side-menu nav .nav > li > .mega-menu .yamm-content .dropdown-banner-holder { + position: absolute; + right: -16px; + top: -8px; +} +.sidebar .side-menu2 nav .nav li a { + padding: 14.3px 15px; +} +.sidebar .sidebar-module-container .sidebar-widget .widget-header { + padding: 10px 0px 5px 0px; +} +.sidebar .sidebar-module-container .sidebar-widget .widget-header .widget-title { + font-size: 16px; + margin: 0px; + font-weight:600 +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-heading .accordion-toggle { + clear: both; + display: block; + font-size: 14px; + line-height: 28px; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-heading .accordion-toggle:after { + content:"\f068"; + float: right; + font-family: fontawesome; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-heading .accordion-toggle.collapsed { + color: #666666; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-heading .accordion-toggle.collapsed:after { + color: #636363; + content: "\f067"; + font-family: fontawesome; + font-weight:normal +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-body .accordion-inner { + margin: 0px 0 20px; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-body .accordion-inner ul { + padding-left: 15px; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-body .accordion-inner ul li { + line-height: 27px; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-body .accordion-inner ul li a { + color: #666666; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-body .accordion-inner ul li a:before { + content: "\f105"; + font-family: fontawesome; + font-size: 14px; + line-height: 15px; + margin: 0 5px 0 0; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-body .accordion-inner ul li a:hover:before { + margin: 0 8px 0 0; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .price-range-holder { + padding: 0 0 20px; + position: relative; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .price-range-holder .slider { + display: inline-block; + position: relative; + vertical-align: middle; + margin-top:0px; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .price-range-holder .slider.slider-horizontal { + height: 20px; + width: 100% !important; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .price-range-holder .slider .slider-track { + background-color: #f1f1f1; + background-repeat: repeat-x; + cursor: pointer; + position: absolute; + width: 94% !important; + height: 6px; + left: 0; + margin-top: -5px; + top: 50%; + width: 100%; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .price-range-holder .slider .slider-track .slider-selection { + bottom: 0; + height: 100%; + top: 0; + background-repeat: repeat-x; + box-sizing: border-box; + position: absolute; + background: #c3c3c3; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .price-range-holder .slider .slider-track .slider-handle { + background-color: #FFFFFF; + background-repeat: repeat-x; + -webkit-border-radius: 400px; + -moz-border-radius: 400px; + border-radius: 400px; + height: 20px; + margin-left: -3px !important; + opacity: 1; + position: absolute; + top: -3px; + width: 20px; + margin-top: -5px; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .price-range-holder .slider .tooltip { + margin-top: -36px; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .price-range-holder .min-max { + font-size: 15px; + font-weight: 500; + color: #fe5252; + margin-top: 15px; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .list li { + clear: both; + display: block; + font-size: 14px; + font-weight: normal; + line-height: 28px; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .list li a { + color: #666666; + display: block; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .compare-report { + margin-top: 20px; + margin-bottom: 20px; +} +.sidebar .sidebar-widget .advertisement .item { + background-position: center 55%; + background-size: cover; + padding-bottom:60px + +} +.sidebar .sidebar-widget .advertisement .item .caption { + color: #636363; + left: 12%; + letter-spacing: -3px; + position: absolute; + top: 11%; + z-index: 100; + display: table-cell; +} +.sidebar .sidebar-widget .advertisement .item .caption .big-text { + font-size: 60px; + line-height: 125px; + text-transform: uppercase; + font-family: 'Open Sans', sans-serif; + color: #fff; + text-shadow: 1px 1px 3px #cfcfcf; +} +.sidebar .sidebar-widget .advertisement .item .caption .big-text .big { + font-size: 120px; + color: #ff7878; + display: block; + text-shadow: 1px 1px 3px #cfcfcf; +} +.sidebar .sidebar-widget .advertisement .item .caption .excerpt { + font-size: 24px; + letter-spacing: -1px; + text-transform: uppercase; + color: #e6e6e6; + text-shadow: 1px 1px 3px #cfcfcf; +} +.sidebar .sidebar-widget .advertisement .owl-controls { + bottom: 10px; + position: absolute; + text-align: center; + top: auto; + width: 100%; +} +.sidebar .sidebar-widget .advertisement .owl-controls .owl-pagination { + display: inline-block; +} +.sidebar .sidebar-widget .advertisement .owl-controls .owl-pagination .owl-page { + display: inline-block; +} +.sidebar .sidebar-widget .advertisement .owl-controls .owl-pagination .owl-page span { + display: block; + width: 10px; + height: 10px; + background: #ddd; + border: none; + border-radius: 2px; + margin: 0 2px; + -webkit-transition: all 200ms ease-out; + -moz-transition: all 200ms ease-out; + -o-transition: all 200ms ease-out; + transition: all 200ms ease-out; +} + +.sidebar-widget { background-color: #fff; + padding:20px; + border-radius:5px + } + +.related-product .tag { + font-size: 15px; + font-weight: 700; + height: 50px; + line-height: 45px; + left: 15px; + text-align: center; + top: 3.5%; + width: 50px; + position: absolute; +} + +/*===================================================================================*/ +/* Slider +/*===================================================================================*/ +#owl-main { + text-align: center; + cursor: default; + height: 520px; +} +#owl-main .owl-controls { + display: inline-block; + position: relative; + margin-top: 40px; +} +/*.panel-group .panel .owl-controls { + margin-top: 25px; +} +.panel-group.blank .panel .owl-controls { + margin-top: 40px; +}*/ +#owl-main .owl-pagination { + position: relative; + line-height: 30px; +} +#owl-main .owl-buttons { + display: block; +} +#owl-main .owl-prev, +#owl-main .owl-next { + display: inline-block; + position: absolute; + top: 0; + bottom: 0; + width: 30px; + height: 50px; + font-size: 21px; + background-color: #f2f2f2; + border: none; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + margin: auto; + -webkit-transition: all 200ms ease-out; + -moz-transition: all 200ms ease-out; + -o-transition: all 200ms ease-out; + transition: all 200ms ease-out; + opacity: 0; +} +#owl-main .owl-prev { + left: 20px; + /* -35px;*/ +} +#owl-main .owl-next { + right: 20px; +} +#owl-main:hover .owl-prev { + left: 0px; + opacity: 0.5; +} +#owl-main:hover .owl-next { + right: 0px; + opacity: 0.5; +} +#owl-main:hover .owl-prev:hover, +#owl-main:hover .owl-next:hover { + opacity: 1; +} +#owl-main .owl-outer-nav:after { + content: ""; + position: absolute; + top: 0; + left: -15%; + width: 130%; + height: 100%; + z-index: 0; +} +#owl-main .owl-outer-nav .owl-wrapper-outer, +#owl-main .owl-outer-nav .owl-pagination, +#owl-main .owl-outer-nav .owl-prev, +#owl-main .owl-outer-nav .owl-next { + z-index: 1; +} +#owl-main .owl-outer-nav .owl-controls { + position: static; +} +#owl-main .owl-outer-nav .owl-prev { + left: -65px; +} +#owl-main .owl-outer-nav .owl-next { + right: -65px; +} +#owl-main .owl-outer-nav:hover .owl-prev { + left: -80px; +} +#owl-main .owl-outer-nav:hover .owl-next { + right: -80px; +} +#owl-main .owl-ui-md .owl-pagination { + line-height: 45px; +} +#owl-main .owl-ui-md .owl-prev, +#owl-main .owl-ui-md .owl-next { + width: 45px; + height: 45px; + font-size: 45px; +} +#owl-main .owl-ui-md .owl-prev { + left: -55px; +} +#owl-main .owl-ui-md .owl-next { + right: -55px; +} +#owl-main .owl-ui-md:hover .owl-prev { + left: -60px; +} +#owl-main .owl-ui-md:hover .owl-next { + right: -60px; +} +#owl-main .owl-outer-nav.owl-ui-md:after { + left: -18%; + width: 136%; +} +#owl-main .owl-outer-nav.owl-ui-md .owl-prev { + left: -85px; +} +#owl-main .owl-outer-nav.owl-ui-md .owl-next { + right: -85px; +} +#owl-main .owl-outer-nav.owl-ui-md:hover .owl-prev { + left: -100px; +} +#owl-main .owl-outer-nav.owl-ui-md:hover .owl-next { + right: -100px; +} +#owl-main .owl-ui-lg .owl-pagination { + line-height: 60px; +} +#owl-main .owl-ui-lg .owl-prev, +#owl-main .owl-ui-lg .owl-next { + width: 60px; + height: 60px; + font-size: 42px; +} +#owl-main .owl-ui-lg .owl-prev { + left: -75px; +} +#owl-main .owl-ui-lg .owl-next { + right: -75px; +} +#owl-main .owl-ui-lg:hover .owl-prev { + left: -80px; +} +#owl-main .owl-ui-lg:hover .owl-next { + right: -80px; +} +#owl-main .owl-outer-nav.owl-ui-lg:after { + left: -22%; + width: 144%; +} +#owl-main .owl-outer-nav.owl-ui-lg .owl-prev { + left: -105px; +} +.owl-outer-nav.owl-ui-lg .owl-next { + right: -105px; +} +#owl-main .owl-outer-nav.owl-ui-lg:hover .owl-prev { + left: -120px; +} +#owl-main .owl-outer-nav.owl-ui-lg:hover .owl-next { + right: -120px; +} +#owl-main .owl-inner-nav .owl-controls { + position: static; +} +#owl-main .owl-inner-nav .owl-prev { + left: 45px; +} +#owl-main .owl-inner-nav .owl-next { + right: 45px; +} +#owl-main .owl-inner-nav:hover .owl-prev { + left: 30px; +} +#owl-main .owl-inner-nav:hover .owl-next { + right: 30px; +} +#owl-main .owl-outer-nav .owl-prev, +#owl-main .owl-outer-nav .owl-next, +#owl-main .owl-inner-nav .owl-prev, +#owl-main .owl-inner-nav .owl-next { + bottom: 70px; +} +#owl-main .owl-outer-nav.owl-ui-md .owl-prev, +#owl-main .owl-outer-nav.owl-ui-md .owl-next, +#owl-main .owl-inner-nav.owl-ui-md .owl-prev, +#owl-main .owl-inner-nav.owl-ui-md .owl-next { + bottom: 85px; +} +#owl-main .owl-outer-nav.owl-ui-lg .owl-prev, +#owl-main .owl-outer-nav.owl-ui-lg .owl-next, +#owl-main .owl-inner-nav.owl-ui-lg .owl-prev, +#owl-main .owl-inner-nav.owl-ui-lg .owl-next { + bottom: 100px; +} +#owl-main .owl-inner-pagination .owl-pagination, +#owl-main .owl-inner-pagination .owl-prev, +#owl-main .owl-inner-pagination .owl-next { + margin-top: -40px; + top: -60px; +} +#owl-main .owl-inner-pagination.owl-ui-md .owl-pagination, +#owl-main .owl-inner-pagination.owl-ui-md .owl-prev, +#owl-main .owl-inner-pagination.owl-ui-md .owl-next { + margin-top: -50px; + top: -65px; +} +#owl-main .owl-inner-pagination.owl-ui-lg .owl-pagination, +#owl-main .owl-inner-pagination.owl-ui-lg .owl-prev, +#owl-main .owl-inner-pagination.owl-ui-lg .owl-next { + margin-top: -60px; + top: -75px; +} +#owl-main .owl-inner-pagination.owl-outer-nav .owl-prev, +#owl-main .owl-inner-pagination.owl-outer-nav .owl-next, +#owl-main .owl-inner-pagination.owl-inner-nav .owl-prev, +#owl-main .owl-inner-pagination.owl-inner-nav .owl-next { + margin: auto; + top: 0; + bottom: 43px; +} +#owl-main .owl-inner-pagination .owl-pagination { + -webkit-transition: all 200ms ease-out; + -moz-transition: all 200ms ease-out; + -o-transition: all 200ms ease-out; + transition: all 200ms ease-out; + opacity: 0; +} +#owl-main .owl-inner-pagination:hover .owl-pagination { + opacity: 1; +} +#owl-main .owl-inner-pagination.owl-inner-nav .owl-pagination, +.owl-inner-pagination.owl-outer-nav .owl-pagination { + top: -45px; +} +.owl-inner-pagination.owl-inner-nav.owl-ui-md .owl-pagination, +.owl-inner-pagination.owl-outer-nav.owl-ui-md .owl-pagination { + top: -50px; +} +.owl-inner-pagination.owl-inner-nav.owl-ui-lg .owl-pagination, +.owl-inner-pagination.owl-outer-nav.owl-ui-lg .owl-pagination { + top: -60px; +} +.owl-inner-pagination.owl-inner-nav:hover .owl-pagination, +.owl-inner-pagination.owl-outer-nav:hover .owl-pagination { + top: -60px; +} +.owl-inner-pagination.owl-inner-nav.owl-ui-md:hover .owl-pagination, +.owl-inner-pagination.owl-outer-nav.owl-ui-md:hover .owl-pagination { + top: -65px; +} +.owl-inner-pagination.owl-inner-nav.owl-ui-lg:hover .owl-pagination, +.owl-inner-pagination.owl-outer-nav.owl-ui-lg:hover .owl-pagination { + top: -75px; +} +#owl-main.height-md .item { + height: 457px; +} +#owl-main.height-lg .item { + height: 675px; +} +#owl-main .container { + display: table; + height: inherit; +} +#owl-main .caption { + display: table-cell; +} +#owl-main .caption.vertical-center { + vertical-align: middle; + padding-bottom: 3vh; +} +#owl-main .caption.vertical-top { + vertical-align: top; + padding-top: 8vh; +} +#owl-main .caption.vertical-bottom { + vertical-align: bottom; + padding-bottom: 14vh; +} +#owl-main .caption.text-center { + padding-left: 10%; + padding-right: 10%; +} +#owl-main .caption.text-left { + padding-right: 20%; +} +#owl-main .caption.text-right { + padding-left: 20%; +} +#owl-main .owl-controls { + display: block; + position: static; + margin-top: -47px; + +} +#owl-main .owl-pagination { + background: #FFF; + line-height: inherit; + position: relative; + bottom: -40px; + padding: 10px; + display: inline-block; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + margin: auto; + opacity: 0; + -webkit-transition: all 200ms ease-out; + -moz-transition: all 200ms ease-out; + -o-transition: all 200ms ease-out; + transition: all 200ms ease-out; +} +#owl-main:hover .owl-pagination { + bottom: -15px; + opacity: 1; + display:none +} +#owl-main .owl-prev, +#owl-main .owl-next { + bottom: 0; +} +#owl-main .owl-controls .owl-page { + display: inline-block; +} +#owl-main .owl-pagination .owl-page span { + display: block; + width: 15px; + height: 15px; + background: #d3d3d3; + border: none; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + border-radius: 50%; + margin: 0 5px; + -webkit-transition: all 200ms ease-out; + -moz-transition: all 200ms ease-out; + -o-transition: all 200ms ease-out; + transition: all 200ms ease-out; +} +#owl-main .owl-item-gap .item { + margin: 0 15px; +} +#owl-main .owl-item-gap-sm .item { + margin: 0 10px; +} +#owl-main .owl-item.loading { + min-height: inherit; + background: none; +} +#owl-main .item { + background-color: #FFFFFF; + background-position: center 55%; + background-size: cover; + height: 520px; +} +#owl-main .item .caption { + color: #636363; + left:10%; + position: absolute; + top: 30%; + z-index: 100; + padding-right: 8%; +} +#owl-main .item .caption .slider-header { + font-family: 'Barlow', sans-serif; + font-size:26px; + font-weight:400; + text-transform:uppercase; + letter-spacing:1px +} + +#owl-main .item .caption .big-text { + font-size: 62px; + line-height: 50px; + font-family: 'Barlow', sans-serif; + padding: 0px 25px; + background: #bbbbbb; + color: #fff; + font-weight:600; + letter-spacing:-2px +} +#owl-main .item .caption .big-text .highlight { + color: #f1c40f; +} +#owl-main .item .caption .excerpt, +#owl-main .item .caption .small { + font-size: 18px; + /*line-height: 50px;*/ + margin-top: 10px; + font-family: 'Barlow', sans-serif; + font-weight: 200; + padding-left: 23px; + background: rgba(0, 0, 0, 0); + color: #fff; +} +#owl-main .item .caption .excerpt span, +#owl-main .item .caption .small span { + background: none repeat scroll 0 0 #bbbbbb; + -moz-box-shadow: -1.4em 0 0 #bbbbbb, 1.4em 0 0 #bbbbbb; + -webkit-box-shadow: -1.4em 0 0 #bbbbbb, 1.4em 0 0 #bbbbbb; + box-shadow: -1.4em 0 0 #bbbbbb, 1.4em 0 0 #bbbbbb; + line-height: 336%; + padding: 5px 0; + display: inline; +} +#owl-main .item .caption .button-holder { + margin: 20px 0 0; +} + + +#owl-main .btn-primary {border-radius:5px; padding:12px 25px} + +#owl-main .item .caption.bg-color { + padding-right: 3%; +} +#owl-main .item .caption.bg-color .big-text { + background: rgba(0, 0, 0, 0); + padding: 0px; + color: #000; +} +#owl-main .item .caption.bg-color .excerpt, +#owl-main .item .caption.bg-color .small { + background: rgba(0, 0, 0, 0); + padding: 0px; + color: #000; + margin-top: 10px; +} +#owl-main .item .caption.bg-color .excerpt span, +#owl-main .item .caption.bg-color .small span { + background: rgba(0, 0, 0, 0); + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + display: block; + + line-height: 24px; +} +#owl-main .full-width-slider { + margin-bottom: 30px; +} +#owl-main .full-width-slider .item { + background-color: #FFFFFF; + background-position: center 55%; + background-size: cover; + height: 449px; +} +#owl-main .full-width-slider .item .caption { + position: absolute; + top: 11%; + z-index: 100; +} +#owl-main .full-width-slider .item .caption .big-text { + font-size: 119px; + line-height: 80px; + font-family: 'PacificoRegular'; + color: #fff; + background: rgba(0, 0, 0, 0); + padding: 0px; + text-transform: none; +} +#owl-main .full-width-slider .item .caption .excerpt { + font-size: 60px; + line-height: 80px; + margin-top: 15px; + font-family: 'LatoBold'; + text-transform: uppercase; + color: #fff; + background: rgba(0, 0, 0, 0); + padding: 0px; +} +#owl-main .full-width-slider .item .caption .button-holder { + margin: 31px 0 0; +} +.cnt-homepage .homepage-slider2 { + height: 449px; +} +.cnt-homepage .homepage-slider2 #owl-main .item .caption { + top: 24%; + padding-right: 10%; + right: 0px; + left: 0px; +} +.cnt-homepage .homepage-slider2 #owl-main .owl-controls { + margin-top: -89px; + text-align: center !important; +} +.cnt-homepage .breadcrumb ul { + text-align: left; +} +.cnt-homepage .cart .action .left { + margin-left: 10px; + padding: 2px 10px; +} +.cnt-homepage .sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .price-range-holder .slider .slider-track .slider-handle { + height: 15px; + width: 15px; + top: 0px; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + border: 2px solid #e4e4e4; +} +.homepage-slider3 { + height: 368px; +} +.homepage-slider3 #owl-main .item { + height: 368px; +} +.homepage-slider3 #owl-main .item .caption { + padding-left: 10%; + padding-right: 44%; +} +.homepage-slider3 #owl-main .item .caption .small { + font-size: 15px; + line-height: 50px; + text-transform: uppercase; + font-family: 'Open Sans', sans-serif; + text-shadow: 2px 2px #c3c3c3; + color: #fff ; + padding-left: 0px; +} +.homepage-slider3 #owl-main .item .caption .big-text { + font-size: 45px; + line-height: 50px; + text-transform: uppercase; + font-family: 'Open Sans', sans-serif; + text-shadow: 2px 2px #c3c3c3; + color: #000; +} +.homepage-slider3 #owl-main .item .caption .excerpt { + font-size: 13px; + line-height: 20px; + color: #fff; + text-transform: none; +} +.homepage-slider3 #owl-main .owl-controls { + margin-top: -79px; +} +.home-page-slider4 { + position: relative; +} +.home-page-slider4 .customNavigation { + position: absolute; + top: 50%; + width: 100%; + margin-top: -15px; +} +.home-page-slider4 .customNavigation .controls { + position: relative; +} +.home-page-slider4 .owl-controls { + bottom: 20px; + position: absolute; + text-align: center; + top: auto; + width: 100%; +} +.home-page-slider4 .owl-controls .owl-buttons { + display: none !important; +} +.home-page-slider4 .owl-controls .owl-pagination .owl-page { + display: inline-block; +} +.home-page-slider4 .owl-controls .owl-pagination .owl-page span { + background: none repeat scroll 0 0 #e6e6e6; + border: medium none; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + border-radius: 50%; + display: block; + height: 12px; + margin: 0 5px; + -webkit-transition: all 200ms ease-out 0s; + -moz-transition: all 200ms ease-out 0s; + -o-transition: all 200ms ease-out 0s; + transition: all 200ms ease-out 0s; + width: 12px; + -moz-box-shadow: 1px 3px rgba(0, 0, 0, 0.1) inset; + -webkit-box-shadow: 1px 3px rgba(0, 0, 0, 0.1) inset; + box-shadow: 1px 3px rgba(0, 0, 0, 0.1) inset; +} +.home-page-slider4 .owl-prev, +.home-page-slider4 .owl-next { + position: absolute; + -webkit-transition: all 200ms ease-out; + -moz-transition: all 200ms ease-out; + -o-transition: all 200ms ease-out; + transition: all 200ms ease-out; + opacity: 0; +} +.home-page-slider4 .owl-prev { + left: 20px; +} +.home-page-slider4 .owl-next { + right: 20px; +} +.home-page-slider4:hover .owl-prev { + left: 0px; + opacity: 1; +} +.home-page-slider4:hover .owl-next { + right: 0px; + opacity: 1; +} +.home-page-slider4:hover .owl-prev:hover, +.home-page-slider4:hover .owl-next:hover { + opacity: 1; +} +.home-page-slider4 #owl-main .owl-pagination { + background: rgba(0, 0, 0, 0); + -webkit-border-radius: 3px; + -moz-border-radiu: 3px; + border-radius: 3px; + display: inline-block; + line-height: inherit; + margin: auto; + opacity: 1; + padding: 10px; + position: relative; + -webkit-transition: all 200ms ease-out 0s; + -moz-transition: all 200ms ease-out 0s; + -o-transition: all 200ms ease-out 0s; + transition: all 200ms ease-out 0s; + bottom: none; + bottom: 0px; +} +.cnt-homepage .homepage-container .btn-primary { + padding: 2px 17px; + -webkit-border-radius: 0px; + -moz-border-radiu: 0px; + border-radius: 0px; +} +.cnt-homepage .homepage-container #owl-main .owl-prev, +.cnt-homepage .homep2474 +.age-container #owl-main .owl-next { + top: 25%; +} + +.our-features-box { + overflow: hidden; + background: #e9e9de; + padding-top: 40px; + padding-bottom: 40px; + margin-bottom: 0px; + margin-top:0px; + margin:0 +} + +.our-features-box .container{ padding:0px; width:100%} + +.our-features-box ul { + list-style: none; + margin: auto; + padding: 0; + border: none; + padding:0px 0px; + overflow: hidden +} +.our-features-box li { + float: left; + margin-bottom: 0px; + text-align: center; + width: 25%; + padding: 0; + display: inline-block; +} +.our-features-box li.last { + margin-right: 0; + width: 20%; + border:none; + background:#80b435; + float:right +} + +.our-features-box li.last .feature-box {margin-right:0px!important; border:none} +.our-features-box li.last a { display:block; padding:15px 15px; background:#fff; border-radius:999px; margin-bottom:10px; margin-top:10px; color:#6a9c23} +.our-features-box li.last .feature-box i {font-size:20px; margin-right:10px} + + +.our-features-box .feature-box { + overflow: hidden; + font-size: 18px; + text-align: center; + color: #121212; + line-height: 1.4em; + font-weight: 500; + font-family:'Barlow', sans-serif; + letter-spacing:normal; + border-radius: 3px; + padding:0px; + + +} + + +.our-features-box .feature-box .content-blocks { + display: block; + text-align: center; + line-height: 22px; + +} +.our-features-box .feature-box span { + font-size: 12px; + display: block; + font-weight: 400; + text-transform: none; + display: block; + padding-top: 5px; + color: #fff; + line-height: 18px; + font-style: italic; +} +.icon-truck:before { + content: "\f0d1"; +} +.icon-truck, .icon-money, .icon-support, .icon-return { +font-family: FontAwesome; + display: block !important; + font-size: 20px; + margin: auto; + color: #121212; + width: 65px!important; + text-align: center; + margin-bottom:15px + + + +} +.icon-money:before { + content: "\f155"; +} +.icon-support:before { + content: "\f095"; +} +.icon-return:before { + content: "\f0b1"; +} +/* ======================== End Features Box ============================ */ + +/*===================================================================================*/ +/* Home Tabs +/*===================================================================================*/ + +.scroll-tabs { + margin-bottom: 30px; + background-color: #fff; + border-radius:5px + + +} +.scroll-tabs .more-info-tab { + border-bottom: 1px solid #eaeaea; + padding-bottom: 10px; + padding: 20px 20px; +} +.scroll-tabs .more-info-tab .new-product-title { + margin-bottom: 0px; + margin-top: 0px; + font-size:24px; + font-family: 'Barlow', sans-serif; + font-weight:600 +} +.scroll-tabs .nav-tab-line { + border-bottom: none; + margin-top: 6px; + margin-right: 55px; +} +.scroll-tabs .nav-tab-line li.active a { + border: none; +} +.scroll-tabs .nav-tab-line li a { + font-weight: 400; + color: #666666; + font-size: 13px; + border: medium none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + padding: 0 10px !important; + position: relative; + font-family: 'Barlow', sans-serif; + text-transform:uppercase; + letter-spacing:0.5px +} +.scroll-tabs .nav-tab-line li a:hover, +.scroll-tabs .nav-tab-line li a:focus { + background: rgba(0, 0, 0, 0); +} + +.tab-content {padding-left:20px} + +.product { + position: relative; +} +.product .product-image img {width:100%} + +.product .product-image .tag { + position: absolute; +} +.product .product-info .name { + font-size: 16px; + font-family:'Barlow', sans-serif; + font-weight:600 +} +.product .product-info .name a { + color: #555; +} +.product .product-info .star-rating .color { + color: #ffb400; +} +.product .product-info .product-price .price { + font-weight: 600; + font-size: 14px; + line-height: 30px; + margin-right: 8px; +} +.product .product-info .product-price .price-before-discount { + text-decoration: line-through; + color: #d3d3d3; + font-weight: 400; + line-height: 30px; + font-size: 14px; +} +.product .cart { + margin-top: 5px; + opacity: 0; + -webkit-transition: all 0.5s linear 0s; + -moz-transition: all 0.5s linear 0s; + -o-transition: all 0.5s linear 0s; + transition: all 0.5s linear 0s; + width: 100%; + z-index: 666; + left: 50%; + position:absolute; + top:0; + margin-left:-70px + +} +.product .cart .action ul li { + float: left; +} +.product .cart .action ul li.add-cart-button .btn.btn-primary.icon { + border-radius: 999px; + background: #fdd922 ; + padding: 10px 14px; + margin-left:3px; + margin-right:3px +} +.product .cart .action ul li.lnk { + margin: 10px 0px; + background: #0f6cb2; + margin: 0px; + padding: 12px 4px; + border-radius:999px; + margin-left:3px; + margin-right:3px +} +.product .cart .action ul li.lnk a { + padding: 0 10px; + color: #fff; + padding: 8px 10px; +} +.product .cart .action ul li.lnk.wishlist { + background:#0f6cb2; + margin:0px 3px; + border-radius:999px + + +} +.tag { + font-size: 10px; + font-weight: 500; + line-height: 40px; + width: 40px; + height: 40px; + text-transform: uppercase; + top: 2.5%; + z-index: 100; + -webkit-border-radius: 50px; + -moz-border-radius: 50px; + border-radius: 50px; + color: #fff; + right: 10px; + /*11px;*/ + text-align: center; + letter-spacing:1px +} +.tag span { + position: relative; + z-index: 100; +} +.tag.new { + background: #46aad7; +} +.tag.hot { + background: #ff7878; +} +.product:hover .cart { + opacity: 1; + top:45% +} +.best-seller .product .product-info .name, +.special-offer .product .product-info .name { + margin-top: 4px; +} +.cart { + margin-top: 5px; + opacity: 1; + -webkit-transition: all 0.2s linear 0s; + -moz-transition: all 0.2s linear 0s; + -o-transition: all 0.2s linear 0s; + transition: all 0.2s linear 0s; + width: 100%; + z-index: 666; + left: 0px; + + +} +.cart .action { + float: left; +} +.cart .action .add-cart-button .btn.btn-primary.icon { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + background: #fdd922 ; + color:#333 +} + + +.sidebar { + width: 290px; +} + +.homebanner-holder { + width: calc(100% - 290px); +} +.cart .action.lnk { + margin: 10px 0px; +} +.cart .action.lnk a { + padding: 0 10px; + color: #dadada; +} +.cart .action.lnk.wishlist { + border-right: 1px solid #dadada; +} +.product-micro .product-image .image a .zoom-overlay:before { + color: #FFFFFF; + content: "\f00e"; + font-family: fontawesome; + left: 45%; + position: relative; + right: 40%; +} +.product-micro .product-image .image a .zoom-overlay { + height: 100%; + left: 0; + opacity: 0; + position: absolute; + top: 0; + -webkit-transition: all 0.2s linear 0s; + -moz-transition: all 0.2s linear 0s; + -o-transition: all 0.2s linear 0s; + transition: all 0.2s linear 0s; + width: 100%; + z-index: 99; +} +.product-micro .product-image .image a .zoom-overlay:hover, +.product-micro .product-image .image a .zoom-overlay:focus { + opacity: 1; +} +.cnt-home .product-micro .tag-micro { + width: 30px; + height: 30px; + font-size: 11px; + line-height: 29px; + top: 5.5%; +} +.cnt-home .product-micro .product-info .name { + font-size: 14px; + margin-top: 5px !important; +} +.cnt-home .product-micro .product-info .product-price .price { + font-size: 14px; + +} +.cnt-home .product-micro .product-info .action .lnk.btn.btn-primary { + font-size: 12px; + line-height: 1.7; +} +.copyright-bar { + background: #2e353b; + padding: 35px 0px; + border-top:1px rgba(255,255,255,0.1) solid +} +.copyright-bar .copyright { + color: #72797e; + line-height: 28px; + text-align:center +} +.copyright-bar .payment-methods { + text-align: right; +} +.copyright-bar .payment-methods ul li { + display: inline-block; + margin-right: 15px; +} +.copyright-bar .payment-methods ul li:last-child { + margin-right: 0px; +} +.copyright-bar .no-padding { + padding: 0px; +} +.wide-banner { + overflow: hidden; +} +.wide-banner .image img { + display: block; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + border-radius:8px +} +.wide-banner:hover img { + +} +.cnt-strip { + position: relative; +} +.cnt-strip .strip { + position: absolute; + bottom: 16%; + width: 100%; + padding: 8px 30px 5px 30px; + right:10px; +} +.cnt-strip .strip h1 { + font-size: 36px; + color: #ff4c4c; + margin: 0; + text-transform: uppercase; + font-family:'Barlow', sans-serif; + font-weight:bold +} +.cnt-strip .strip h2 { + font-size: 36px; + color: #fff; + margin: 0; + text-transform: uppercase; + font-family:'Barlow', sans-serif; + font-weight:600 +} +.cnt-strip .strip h2 .shopping-needs { + font-family:'Barlow', sans-serif; + color: #fff; + font-weight:400; + font-size:22px; + text-transform:none +} +.cnt-strip .strip h3 { + font-size: 30px; + color: #434343; + margin: 0; + text-transform: uppercase; + font-family:'Montserrat', sans-serif; +} +.cnt-strip .strip h4 { + font-size: 20px; + margin: 0; + text-transform: uppercase; + font-family:'Montserrat', sans-serif; +} +.cnt-strip .strip.strip-text { + width: 60%; +} +.cnt-strip .strip .red { + color: #ff7878; +} +.cnt-strip .strip .black { + color: #434343; +} +.cnt-strip .strip .green { + color: #83c038; +} +.cnt-strip .strip .white { + color: #fff; +} +.cnt-strip .strip .normal-shopping-needs { + font-size: 35px; + font-family: 'Open Sans', sans-serif; +} +.cnt-strip .new-label { + background: url("../../../public/images/font/label.png") no-repeat scroll right top; + height: 72px; + position: absolute; + left: -1px; + top: -1px; + width: 72px; + z-index: 999; +} +.cnt-strip .new-label .text { + color: #fff; + font-family: 'Open Sans', sans-serif, sans-serif; + font-size: 14px; + font-weight: bold; + line-height: 22px; + left: -13px; + position: absolute; + text-align: center; + top: 14px; + -ms-transform: rotate(-43deg); + letter-spacing:1px; + /* IE 9 */ + -webkit-transform: rotate(-43deg); + /* Chrome, Safari, Opera */ + transform: rotate(-43deg); + width: 100%; +} +.wide-banners { + overflow:hidden + +} +.wide-banners.homepage-banner { + margin-top: 30px; +} +.wide-banners.homepage-banner h4 { + font-size: 30px; + font-family: 'Open Sans', sans-serif; +} +.wide-banners.homepage-banner h3 { + font-size: 35px; + font-family: 'Open Sans', sans-serif; +} +.new-banner { + margin-top: 30px; +} +.new-banner .cnt-strip .strip { + width: auto; + padding: 0px; + right: 23px; +} +.new-banner .cnt-strip .strip h3 { + background: #707070; + padding: 13px 23px 13px 16px; + line-height: 24px; + font-size: 30px; + font-family: 'Open Sans', sans-serif; +} +.new-banner .cnt-strip .strip h5 { + font-size: 16px; + line-height: 30px; + font-weight: 700; + padding-right: 21px; + text-transform: uppercase; +} +.new-banner .cnt-strip .strip h5 span { + background: none repeat scroll 0 0 #707070; + -moz-box-shadow: -1.4em 0 0 #707070, 1.4em 0 0 #707070; + -webkit-box-shadow: -1.4em 0 0 #707070, 1.4em 0 0 #707070; + box-shadow: -1.4em 0 0 #707070, 1.4em 0 0 #707070; + padding: 0.6em 0; +} +.new-banner.no-margin { + margin-top: -10px; +} +.megamenu-banner { + margin-top: 30px !important; +} +.megamenu-banner h3 { + font-size: 30px; + font-family: 'BebasNeueRegular'; +} +.megamenu-banner h2 { + font-size: 40px; + font-family: 'BebasNeueBold'; +} +.wide-banner-4 .cnt-strip .strip h1 { + font-size: 50px; + font-family: 'Open Sans', sans-serif; +} +.wide-banner-4 .cnt-strip .strip h2 { + font-size: 40px; + font-family: 'Open Sans', sans-serif; +} +.wide-banner-4 .cnt-strip .strip h3 { + font-size: 30px; + font-family: 'Open Sans', sans-serif; +} +.wide-banner-4 .cnt-strip .strip h4 { + font-size: 20px; + font-family: 'Open Sans', sans-serif; +} +.wide-banner-4 .cnt-strip .strip p { + font-size: 23px; + font-family: 'Open Sans', sans-serif; + margin-bottom: 0px; +} +.blog-slider-container .blog-slider .blog-post-info .name { + font-size: 18px; + font-weight:600; + font-family: 'Barlow', sans-serif; +} +.blog-slider-container .blog-slider .blog-post-info .name a { + color: #555; +} +.blog-slider-container .blog-slider .blog-post-info .info { + color: #9c9c9c; + font-size: 13px; + margin-bottom:8px; + overflow:hidden; + display:block +} +.blog-slider-container .blog-slider .blog-post-info .text { + color: #434343; + font-size: 13px; + font-family: 'Open Sans', sans-serif; +} +.footer .links-social { + border-top: 1px solid #e5e5e5; + font-size: 12px; + line-height: 18px; + color: #666666; + margin-bottom: 70px; +} + +.address-block { font-size:16px; overflow:hidden; margin-top:10px} +.address-block a { font-size:16px!important; padding-top:7px} + +.social { + overflow: hidden +} +.social a { + color: #fff; + width: 40px; + height: 40px; + line-height: 40px; + border-radius: 4px; +} +.social a:hover { + color: #fff; +} +.social .fb a:before { + content: "\f09a"; + font-family: FontAwesome; +} +.social .fb a { + font-size: 16px; + display: inline-block!important; + text-align: center; + padding: 0; + background: #3C5B9B !important; +} +.social .tw a:before { + content: "\f099"; + font-family: FontAwesome; +} +.social .tw a { + font-size: 16px; + display: inline-block!important; + text-align: center; + padding: 0; + background: #359BED !important; +} +.social .googleplus a:before { + content: "\f0d5"; + font-family: FontAwesome; +} +.social .googleplus a { + font-size: 16px; + display: inline-block!important; + text-align: center; + padding: 0; + background: #E33729!important; +} +.social .rss a:before { + content: "\f09e"; + font-family: FontAwesome; +} +.social .rss a { + content: "\f09e"; + font-family: FontAwesome; + font-size: 16px; + display: inline-block!important; + text-align: center; + padding: 0; + background: #FD9F13 !important; +} +.social .pintrest a:before { + content: "\f0d3"; + font-family: FontAwesome; +} +.social .pintrest a { + content: "\f0d3"; + font-family: FontAwesome; + font-size: 16px; + display: inline-block!important; + text-align: center; + padding: 0; + background: #cb2027 !important; +} +.social .linkedin a:before { + content: "\f0e1"; + font-family: FontAwesome; +} +.social .linkedin a { + content: "\f0e1"; + font-family: FontAwesome; + font-size: 16px; + display: inline-block!important; + text-align: center; + padding: 0; + background: #027ba5 !important; +} +.social .youtube a:before { + content: "\f167"; + font-family: FontAwesome; +} +.social .youtube a { + font-size: 16px; + display: inline-block!important; + text-align: center; + padding: 0; + background: #F03434 !important; +} +.social h4 { + margin: 25px 0 0px 0px; +} +.social ul { + margin: 0; + list-style: none; +} +.social ul li { + margin-right: 7px; +} +.social ul li { + border-bottom: none; +} +.social a { + transition: background 400ms ease-in-out; + -webkit-transition: background 400ms ease-in-out; + -moz-transition: background 400ms ease-in-out; + -o-transition: background 400ms ease-in-out; +} + +.footer .links-social .contact-info .footer-logo { + margin-top: 10px; +} +.footer .links-social .contact-info .about-us { + margin-bottom: 20px; +} +.footer .links-social .contact-info .social-icons a { + color: #888888; + font-size: 16px; + -webkit-transition: all 0.2s linear 0s; + -moz-transition: all 0.2s linear 0s; + -o-transition: all 0.2s linear 0s; + transition: all 0.2s linear 0s; + width: 2em; + height: 2em; + display: inline-block; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; + text-align: center; +} +.footer .links-social .contact-info .social-icons a:hover, +.footer .links-social .contact-info .social-icons a:focus, +.footer .links-social .contact-info .social-icons a.active { + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; + color: #fff; +} +.footer .links-social .contact-info .social-icons a .icon { + line-height: 2em; +} +.footer .module-heading { + font-size: 16px; + color: #555555; +} +.footer .contact-timing .table tbody tr { + border-bottom: 1px solid #e1e1e1; +} +.footer .contact-timing .table tbody tr td { + border-top: none; + font-size: 12px; + line-height: 36px; + padding: 0px !important; +} +.footer .contact-timing .contact-number { + +} +.footer .contact-information .media .media-body a { + color: #666666; +} +.footer .footer-bottom { + background: #2e353b; + padding-top: 50px; + padding-bottom:50px; + font-size:14px; +} + +.footer .module-title { + font-size:18px; + font-weight:500; + letter-spacing:normal; + margin-bottom:15px + } + +.footer .footer-bottom .module-heading { + font-size: 18px; + color: #fff; +} +.footer .footer-bottom .module-body ul li { + +} + +.toggle-footer {color:#abafb1} +.toggle-footer a {margin-left:0px!important} +.toggle-footer a:before {display:none} +.toggle-footer i{background:#f6dc5b; border-radius:999px; color:#2e353b} + +.footer .footer-bottom .module-body ul li:last-child{border:none} + +.footer .footer-bottom .module-body ul li a { + font-size: 16px; + line-height: 30px; + color: #abafb1; + position: relative; + margin-left: 23px; + display: block; +} +.footer .footer-bottom .module-body ul li a:before { + content: "\f111"; + font-family: FontAwesome; + position: absolute; + margin-left: -22px; + font-size: 6px; +} +.product-tag .item { + background-color: #f5f5f5; + color: #666666; + display: inline-block; + margin-bottom: 5px; + margin-right: 2px; + padding: 6px 12px; + border-radius:3px +} +.product-tag .item.active, +.product-tag .item:hover, +.product-tag .item:focus { + color: #fff; +} +.newsletter .sidebar-widget-body input { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + border: 1px solid #eaeaea; + background: #fafafa; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + font-size:13px +} + +.hot-deals .custom-carousel .owl-controls .owl-next { + top:-20px +} +.hot-deals .custom-carousel .owl-controls .owl-prev { + top:-20px +} +.hot-deals .hot-deal-wrapper { + position: relative; +} +.hot-deals .hot-deal-wrapper .image img{ + width: 100%; +} + +.item .products .image a{ + width: 100%; + display: block; + position: relative; + padding-top: 125%; +} +.item .products .image a img { + width: 100%; + position: absolute; + height: 100%; + top: 0; + left: 0; + object-fit: cover; +} + +.item .products .image a .hover-image { + padding: 0; +} +.item .products .image a .hover-image { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 2; + opacity: 0; + visibility: hidden; + transition: opacity 0.7s, visibility 0.7s; +} + +.item .products .image a:hover .hover-image { + opacity: 1; + visibility: visible; +} + + +.item .products .image a:before { + position: absolute; + width: 100%; + height: 100%; + top: 0px; + left: 0px; + z-index: 1; + content: ""; + opacity: 0; + -webkit-transition: all 0.4s ease-out 0.2s; + -moz-transition: all 0.4s ease-out 0.2s; + -o-transition: all 0.4s ease-out 0.2s; + transition: all 0.4s ease-out 0.2s; + background-color: #ccc; +} + +.hot-deals .hot-deal-wrapper .sale-offer-tag { + -webkit-border-radius: 50px; + -moz-border-radius: 50px; + border-radius: 50px; + color: #FFFFFF; + font-size: 11px; + font-weight: 700; + height: 50px; + text-transform: uppercase; + top: 4%; + right: 10px; + width: 50px; + z-index: 100; + background: #ff7878; + position: absolute; + text-align: center; +} +.hot-deals .hot-deal-wrapper .sale-offer-tag span { + position: relative; + z-index: 100; + top: 10px; +} +.hot-deals .hot-deal-wrapper .timing-wrapper { + bottom: 20px; + position: absolute; + left: 15px; + z-index:10 +} +.hot-deals .hot-deal-wrapper .timing-wrapper .box-wrapper { + display: table; + text-align: center; + margin-right: 4px; + float: left; +} +.hot-deals .hot-deal-wrapper .timing-wrapper .box-wrapper .box { + background-color: #fff; + color: #333; + display: table-cell; + height: 44px; + vertical-align: middle; + width: 45px; + line-height: 15px; + border-radius:3px + +} +.hot-deals .hot-deal-wrapper .timing-wrapper .box-wrapper .box .key { + display: block; + font-size: 14px; + text-transform: uppercase; + font-weight: 700; + font-family:'Open Sans', sans-serif +} +.hot-deals .hot-deal-wrapper .timing-wrapper .box-wrapper .box .value { + display: block; + font-size: 9px; + font-weight: 500; + letter-spacing:0.5px +} +.hot-deals .hot-deal-wrapper .timing-wrapper .box-wrapper:last-child { + margin-right: 0px; +} +.hot-deals .product-info .name { + font-size: 16px; + font-family:'Barlow', sans-serif; + font-weight:400 +} +.hot-deals .product-info .name a { + color: #555; +} +.hot-deals .product-info .product-price .price { + font-weight: 600; + font-size: 16px; + line-height: 30px; + margin-right: 8px; +} +.hot-deals .product-info .product-price .price-before-discount { + text-decoration: line-through; + color: #d3d3d3; + font-weight: 400; + line-height: 30px; + font-size: 14px; +} +.hot-deals .cart { + margin-top: 5px; + -webkit-transition: all 0.2s linear 0s; + -moz-transition: all 0.2s linear 0s; + -o-transition: all 0.2s linear 0s; + transition: all 0.2s linear 0s; + z-index: 666; + left: 0px; +} +.hot-deals .cart .action { + float: left; +} +.hot-deals .cart .action .add-cart-button a { + background: none repeat scroll 0 0 #a8a8a8; + border: medium none; + color: #FFFFFF; + display: block; + overflow: hidden; + position: relative; + text-decoration: none; + padding: 0px; +} +.hot-deals .cart .action .add-cart-button a .icon { + background: none repeat scroll 0 0 #575757; + color: #FFFFFF; + height: 100%; + left: 0; + font-size: 13px; + padding: 11px 0 0; + position: absolute; + text-align: center; + top: 0; + width: 35px; +} +.hot-deals .cart .action .add-cart-button a span { + display: block; + margin-left: 35px; + overflow: hidden; + padding: 8px 13px; +} +.hot-deals .cart .action .add-cart-button a:hover, +.hot-deals .cart .action .add-cart-button a:focus { + background: #c6c6c6; +} +.breadcrumb { + background: rgba(0, 0, 0, 0); + padding: 0; +} +.breadcrumb ul { + + margin: auto; + padding:8px 0 0px; + text-align: left; +} + +.breadcrumb ul li{ + display: inline; +} + +.breadcrumb ul li:after { + + color: #666666; + content: "/"; + font-family: 'Open Sans', sans-serif, sans-serif; + font-size: 12px; + line-height: 24px; + margin-left: 9px; + margin-right: -4px; + padding: 0px; +} +.breadcrumb ul li:last-child:after { + content: ""; +} +.breadcrumb ul li a { + color: #666666; + font-family: 'Open Sans', sans-serif, sans-serif; + font-size: 12px; + line-height: 24px; + font-weight: 500; +} +.category-carousel { + text-align: center; + cursor: default; +} +.category-carousel .item { + position: relative; + margin-bottom:30px; +} +.category-carousel .item .caption { + color: #636363; + left: 5%; + letter-spacing: -3px; + position: absolute; + top: 10%; + z-index: 100; + display: table-cell; +} +.category-carousel .item .caption .big-text { + font-size: 100px; + line-height: 135px; + text-transform: uppercase; + font-family: 'Barlow', sans-serif; + color: #333; +} +.category-carousel .item .caption .excerpt { + font-size:36px; + letter-spacing:normal; + color: #333; +} +.category-carousel .item .caption .excerpt-normal { + font-size:14px; + letter-spacing:normal; + color: #333; + letter-spacing:normal +} +.category-carousel .item img {border-radius:5px} +.category-carousel .item .buy-btn {margin-top:30px} + + +.category-carousel .item .owl-controls { + display: inline-block; + position: relative; + margin-top: 40px; +} +.category-carousel .item .owl-controls .owl-prev, +.category-carousel .item .owl-controls .owl-next { + display: inline-block; + position: absolute; + top: 0; + bottom: 0; + width: 30px; + height: 30px; + font-size: 21px; + color: #FFF; + background-color: #d3d3d3; + border: none; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + margin: auto; + -webkit-transition: all 200ms ease-out; + -moz-transition: all 200ms ease-out; + -o-transition: all 200ms ease-out; + transition: all 200ms ease-out; + opacity: 0; +} +.category-carousel .item .owl-controls .owl-prev { + left: -35px; +} +.category-carousel .item .owl-controls .owl-next { + right: -35px; +} +.category-carousel .item:hover .owl-prev { + left: -40px; + opacity: .25; +} +.category-carousel .item:hover .owl-next { + right: -40px; + opacity: .25; +} +.category-carousel .item:hover .owl-prev:hover, +.category-carousel .item:hover .owl-next:hover { + opacity: 1; +} +.filters-container { + padding: 15px 20px; + background-color: #fff; + padding-bottom:0px; + font-size:14px; + border-radius:5px 5px 0px 0px + +} + +.filters-container.bottom-row {border-radius:0px 0px 5px 5px; padding-top:0px} + +.filters-container .nav-tabs.nav-tab-box { + border: medium none; + margin-top: 3px; +} +.filters-container .nav-tabs.nav-tab-box li { + margin-right: 5px; + padding: 0; +} +.filters-container .nav-tabs.nav-tab-box li a { + background: none repeat scroll 0 0 #FFFFFF; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #666666; + line-height: 18px; + border: none !important; + padding: 0px; + margin-right:10px + + +} +.filters-container .nav-tabs.nav-tab-box li a .icon { + margin-right: 5px; + color: #aaa; + font-size:18px; + vertical-align: top; + +} +.filters-container .lbl-cnt { + color: #666666; + font-size: 14px; + line-height: 24px; +} +.filters-container .lbl-cnt .lbl { + color: #666666; + display: inline-block; + font-size: 14px; + line-height: 28px; + margin-right: 10px; +} +.filters-container .lbl-cnt .dropdown.dropdown-med .btn { + border: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + padding: 4px 12px; + background: #fff; + font-size: 13px; +} +.filters-container .lbl-cnt .dropdown.dropdown-med .btn .caret { + margin-left: 13px; + margin-top: -2px; +} +.filters-container .lbl-cnt .dropdown.dropdown-med .dropdown-menu { + -webkit-border-radius: 0px; + -moz-border-radius: 0; + border-radius: 0; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + border: 1px solid #e1e1e1; +} +.filters-container .lbl-cnt .dropdown.dropdown-med .dropdown-menu li a:hover, +.filters-container .lbl-cnt .dropdown.dropdown-med .dropdown-menu li a:focus { + background: rgba(0, 0, 0, 0); +} +.filters-container .pagination-container { + margin-top: 4px; + margin-bottom:20px; +} +.filters-container .pagination-container ul { + margin: 0px; +} +.filters-container .pagination-container ul li.prev, +.filters-container .pagination-container ul li.next { + background: none repeat scroll 0 0 #dddddd; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.filters-container .pagination-container ul li.prev a, +.filters-container .pagination-container ul li.next a, +.filters-container .pagination-container ul li.prev a:hover, +.filters-container .pagination-container ul li.next a:hover, +.filters-container .pagination-container ul li.prev a:focus, +.filters-container .pagination-container ul li.next a:focus { + color: #fff; +} +.filters-container .pagination-container ul li a { + color: #666666; + display: inline-block; + font-size: 14px; + line-height: 20px; + padding: 0 3px; +} +.filters-container .pagination-container ul li.active a { + +} +.search-result-container .category-product { + +} +.search-result-container .category-product .product { + margin-bottom: 30px; +} +.search-result-container .category-product .product .product-image .tag { + width: 35px; + height: 35px; + line-height: 35px; + font-size: 10px; + right: 14px; + letter-spacing: 0.5px; +} + + +.search-result-container .category-product-inner .product-list.product { + position: relative; + margin-bottom: 30px; +} +.search-result-container .category-product-inner .product-list.product .product-info { + padding:0px; +} +.search-result-container .category-product-inner .product-list.product .product-info .cart { + margin-top: 20px; + top: auto; + bottom: 0px; + opacity: 1; + left: 0; + position: relative; + margin-left:0px +} + +.search-result-container .category-product-inner .product-list.product .product-info .cart-btn { + display: none; + margin-right: 5px; +} + +.search-result-container .category-product-inner .product-list.product .tag { + position: absolute; + right: 12px; + top: 18px; + width: 35px; + height: 35px; + line-height: 35px; + font-size: 10px; + right: 14px; + letter-spacing: 0.5px; +} +.product-list.product .product-info .name { + font-size: 18px; +} +.product-list.product .product-info .description { + line-height: 20px; + font-family: 'Open Sans', sans-serif; + +} + +/*===================================================================================*/ +/* Product Detail +/*===================================================================================*/ + +.detail-block { + background-color: #fff; + padding: 20px; + overflow:hidden; + border-radius:5px + +} + +.single-product .product-info-block .name {margin-top:0px; font-weight:600; letter-spacing:normal; font-size:40px} + +.single-product .single-product-gallery {padding-bottom:30px} + +.single-product .favorite-button .btn-primary {background:#ddd; border-radius:999px; padding: 10px 14px;} + +.single-product .gallery-holder #owl-single-product .single-product-gallery-item { + +} +.single-product .gallery-holder .gallery-thumbs { + margin: 15px 0 0; + position: relative; + text-align: left; +} +.single-product .gallery-holder .gallery-thumbs .owl-item .item { + margin-right: 10px; + border: 1px solid #e5e5e5; +} + +.single-product .product-info .rating-reviews .reviews .lnk { + color: #aaaaaa; + margin-left:10px +} +.single-product .product-info .stock-container .stock-box .label { + font-size: 14px; + line-height: 18px; + color: #666666; + padding: 0px; + font-weight: normal; +} +.single-product .product-info .stock-container .stock-box .value { + font-size: 13px; + color: #ff7878; + margin-left:10px +} +.single-product .product-info .description-container { + line-height: 20px; + color: #666666; + font-family: 'Open Sans', sans-serif; + font-size:14px +} +.single-product .product-info .price-container { + border-bottom: 1px solid #F2F2F2; + border-top: 1px solid #F2F2F2; + margin-bottom: 0; + padding: 20px 0; +} +.single-product .product-info .price-container .price-box .price { + font-size: 30px; + font-weight: 600; + line-height: 50px; +} +.single-product .product-info .price-container .price-box .price-strike { + color: #aaa; + font-size: 24px; + font-weight: 300; + line-height: 50px; + text-decoration: line-through; + vertical-align:top; + margin-left:10px; + + +} +.single-product .product-info .quantity-container { + margin-bottom: 0; + padding: 30px 0; +} + +.single-product .qty {float:left; padding-left:15px} +.single-product .qty-count {float:left; padding-left:15px} +.single-product .add-btn {float:left; padding-left:15px} +.single-product .add-btn .btn-primary {padding:12px 30px; font-size: 18px; background-color: #fdd922; color:#333} + +.single-product .product-info .quantity-container .label { + font-size: 14px; + line-height: 35px; + color: #666666; + padding: 0px; + font-weight: normal; +} +.single-product .product-info .quantity-container .cart-quantity .quant-input { + display: inline-block; + height: 45px; + position: relative; + width: 80px; + +} +.single-product .product-info .quantity-container .cart-quantity .quant-input .arrows { + position: absolute; + right: 0; + top: 0; + z-index: 2; + height: 100%; +} +.single-product .product-info .quantity-container .cart-quantity .quant-input .arrows .arrow { + box-sizing: border-box; + display: block; + text-align: center; + width: 40px; + cursor: pointer; +} +.single-product .product-info .quantity-container .cart-quantity .quant-input .arrows .arrow .ir .icon { + position: relative; +} +.single-product .product-info .quantity-container .cart-quantity .quant-input .arrows .arrow .ir .icon.fa-sort-asc { + top: 8px; +} +.single-product .product-info .quantity-container .cart-quantity .quant-input .arrows .arrow .ir .icon.fa-sort-desc { + top: 0px; +} +.single-product .product-info .quantity-container .cart-quantity .quant-input input { + background: none repeat scroll 0 0 #fff; + border: 1px solid #e5e5e5; + box-sizing: border-box; + font-size: 15px; + height: 45px; + left: 0; + padding: 0 20px 0 18px; + position: absolute; + top: 0; + width: 80px; + z-index: 1; + border-radius:5px +} +.single-product .product-info .product-social-link .social-label { + font-size: 15px; + font-family: 'Open Sans', sans-serif; + line-height: 20px; + text-transform: uppercase; +} +.single-product .product-info .product-social-link .social-icons { + display: inline-block; +} +.single-product .product-info .product-social-link .social-icons ul li a { + color: #888888; + font-size: 16px; + -webkit-transition: all 0.2s linear 0s; + -moz-transition: all 0.2s linear 0s; + -o-transition: all 0.2s linear 0s; + transition: all 0.2s linear 0s; + padding: 5px 6px; +} +.single-product .product-info .product-social-link .social-icons ul li a:hover, +.single-product .product-info .product-social-link .social-icons ul li a:focus { + -webkit-border-radius: 50px; + -moz-border-radius: 50px; + border-radius: 50px; + color: #fff; +} +.single-product .product-tabs { + margin-top: 30px; + background-color: #fff; + padding: 0px; + overflow:hidden; + margin-bottom:30px; + border-radius:5px +} +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell > li { + float: none !important; + +} +.single-product .nav-tabs {border:none} + +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell > li > a { + border: none; + color: #555; + display: block; + padding: 12px 28px; + font-size: 14px; + line-height: 28px; + position: relative; + font-weight:400; + letter-spacing:1px; + background: #f8f8f8; + border: 1px #fff solid; +} +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell > li > a:hover, +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell > li > a:focus { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + color: #fff; +} +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell > li > a:hover:before, +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell > li > a:focus:before { + border-color: rgba(0, 0, 0, 0) #e0e0e0 rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); + right: -10px; +} +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell > li > a:hover:after, +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell > li > a:focus:after { + border-style: solid; + border-width: 7.5px 1px 7.5px 10px; + content: ""; + height: 0; + position: absolute; + top: 20px; + width: 0; + right: -8px; +} +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell > li.active > a { + color: #fff; + border-radius:5px +} +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell > li.active > a:before { + border-color: rgba(0, 0, 0, 0) #e0e0e0 rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); + right: -10px; +} +.single-product .product-tabs .nav.nav-tabs.nav-tab-cell > li.active > a:after { + border-style: solid; + border-width: 7.5px 1px 7.5px 10px; + content: ""; + height: 0; + position: absolute; + top: 20px; + width: 0; + right: -8px; +} +.single-product .product-tabs .tab-content { + padding-left:0px +} +.single-product .product-tabs .tab-content .tab-pane { + padding: 24px; +} +.single-product .product-tabs .tab-content .tab-pane .text { + line-height: 22px; + font-family: 'Open Sans', sans-serif; + font-size:14px; +} + +.single-product #owl-single-product-thumbnails .owl-controls { + position: absolute; + text-align: center; + top: auto; + width: 100%; + margin-top: 20px; +} +.single-product #owl-single-product-thumbnails .owl-controls .owl-pagination .owl-page { + display: inline-block; +} +.single-product #owl-single-product-thumbnails .owl-controls .owl-pagination .owl-page span { + background: none repeat scroll 0 0 #ddd; + border: medium none; + border-radius: 3px; + display: block; + height: 10px; + margin: 0 2px; + -webkit-transition: all 200ms ease-out 0s; + -moz-transition: all 200ms ease-out 0s; + -o-transition: all 200ms ease-out 0s; + transition: all 200ms ease-out 0s; + width: 10px; + cursor: pointer; +} +.single-product .sidebar .sidebar-module-container .sidebar-widget .section-title { + margin-top: 0px; +} +.cnt-homepage .single-product .single-product-gallery .gallery-thumbs .nav-holder { + background-color: #FFFFFF; + height: 100%; + position: absolute; + top: 0; + width: 30px; + z-index: 50; +} +.cnt-homepage .single-product .single-product-gallery .gallery-thumbs .nav-holder.left { + left: 0px; +} +.cnt-homepage .single-product .single-product-gallery .gallery-thumbs .nav-holder.right { + right: 0; +} +.cnt-homepage .single-product .single-product-gallery .gallery-thumbs .nav-holder .prev-btn { + left: 0; +} +.cnt-homepage .single-product .single-product-gallery .gallery-thumbs .nav-holder .prev-btn:after { + content: "\f104"; +} +.cnt-homepage .single-product .single-product-gallery .gallery-thumbs .nav-holder .next-btn { + right: 0px; +} +.cnt-homepage .single-product .single-product-gallery .gallery-thumbs .nav-holder .next-btn:after { + content: "\f105"; +} +.cnt-homepage .single-product .single-product-gallery .gallery-thumbs .nav-holder .prev-btn, +.cnt-homepage .single-product .single-product-gallery .gallery-thumbs .nav-holder .next-btn { + background-color: #fff; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + display: inline-block; + height: 100%; + position: absolute; + vertical-align: top; + width: 90%; + z-index: 100; + border: 1px solid #e5e5e5; + color: #dadada; +} +.cnt-homepage .single-product .single-product-gallery .gallery-thumbs .nav-holder .prev-btn:after, +.cnt-homepage .single-product .single-product-gallery .gallery-thumbs .nav-holder .next-btn:after { + bottom: 0; + font-family: fontawesome; + font-size: 30px; + height: 30px; + left: 0; + line-height: 30px; + margin: auto; + position: absolute; + right: 0; + text-align: center; + top: 0; +} +.cnt-homepage .single-product .single-product-gallery .gallery-thumbs .nav-holder .prev-btn:hover, +.cnt-homepage .single-product .single-product-gallery .gallery-thumbs .nav-holder .next-btn:hover, +.cnt-homepage .single-product .single-product-gallery .gallery-thumbs .nav-holder .prev-btn:focus, +.cnt-homepage .single-product .single-product-gallery .gallery-thumbs .nav-holder .next-btn:focus { + background: #dadada; + color: #fff; +} +.cnt-homepage .single-product .single-product-gallery .owl-item .single-product-gallery-item > a > img { + display: block; + width: 100%; +} +.cnt-homepage .single-product .single-product-gallery .owl-item .single-product-gallery-thumbs.gallery-thumbs .owl-item { + margin-left: 10px; +} +.cnt-homepage .single-product .product-info-block label, +.cnt-homepage .single-product .product-info-block .label { + font-size: 13px; + font-weight: normal; + line-height: 30px; + color: #434343 !important; +} +.cnt-homepage .single-product .product-info-block .label { + padding: 0px; +} +.cnt-homepage .single-product .product-info-block .cart { + width: auto; + left: 0; + margin-top: -8px; + padding: 0px; +} +.cnt-homepage .single-product .product-info-block .cart .action .left { + padding: 2px 8px; + margin-left: 5px; +} +.cnt-homepage .single-product .product-info-block .form-control .selectpicker { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + border: 1px solid #f1f1f1; + background: #fff; + color: #b0b0b0; +} +.cnt-homepage .single-product .product-info-block .form-control .dropdown-menu { + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + border: 1px solid #f1f1f1; +} +.cnt-homepage .single-product .product-info-block .form-control .dropdown-menu ul li a:hover, +.cnt-homepage .single-product .product-info-block .form-control .dropdown-menu ul li a:focus { + background: rgba(0, 0, 0, 0); +} +.cnt-homepage .single-product .product-info-block .txt.txt-qty { + font-size: 15px; + line-height: 18px; + border: 1px solid #f1f1f1; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + height: 30px; + padding: 5px 10px; + text-align: center; + width: 60px; +} +.cnt-homepage .single-product .product-info-block .stock-container .stock-box .label { + color: #434343; + font-family: 'Open Sans', sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 20px; + padding: 0; + text-transform: none; +} +.cnt-homepage .single-product .product-info-block .stock-container .stock-box .value { + font-size: 13px; +} +.cnt-homepage .single-product .product-tabs .nav-tab-cell-detail li { + margin-right: 10px; + padding: 0; +} +.cnt-homepage .single-product .product-tabs .nav-tab-cell-detail li a { + border: 2px solid #e1e1e1; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + color: #666666; + font-family: 'Open Sans', sans-serif; + font-size: 20px; + line-height: 30px; + padding-bottom: 4px; + padding-top: 4px; + text-transform: uppercase; +} +.cnt-homepage .single-product .product-tabs .nav-tab-cell-detail li a:hover, +.cnt-homepage .single-product .product-tabs .nav-tab-cell-detail li a:focus { + color: #fff; +} +.cnt-homepage .single-product .product-tabs .nav-tab-cell-detail li.active a { + color: #fff; +} +.cnt-homepage .single-product .product-tabs .tab-content { + border: none; +} +.cnt-homepage .single-product .product-tabs .tab-content .tab-pane { + padding: 0px; +} +.cnt-homepage .single-product .product-tabs .tab-content .tab-pane .product-tab .text { + font-size: 13px; + line-height: 22px; +} +.single-product .second-gallery-thumb.gallery-thumbs { + padding: 0 40px; +} +.single-product .second-gallery-thumb.gallery-thumbs #owl-single-product2-thumbnails .owl-wrapper-outer { + margin-left: 5px; +} +.product-tabs .tab-content .tab-pane .product-reviews .title { + color: #666666; + font-size: 18px; + font-weight: 600; + line-height: 20px; + margin: 0 0 10px; + + +} +.product-tabs .tab-content .tab-pane .product-reviews .reviews .review { + margin-bottom: 20px; + font-family: 'Open Sans', sans-serif, sans-serif; + text-transform: none; + background:#f8f8f8; + padding:20px +} +.product-tabs .tab-content .tab-pane .product-reviews .reviews .review .review-title { + margin-bottom: 5px; +} +.product-tabs .tab-content .tab-pane .product-reviews .reviews .review .review-title .summary { + color: #666666; + font-size: 14px; + font-weight: normal; + margin-right: 10px; + font-style:italic + +} +.product-tabs .tab-content .tab-pane .product-reviews .reviews .review .review-title .date { + font-size: 12px; +} +.product-tabs .tab-content .tab-pane .product-reviews .reviews .review .review-title .date span { + margin-left: 5px; +} +.product-tabs .tab-content .tab-pane .product-reviews .reviews .review .text { + line-height: 18px; +} +.product-tabs .tab-content .tab-pane .product-reviews .reviews .review .author span { + margin-left: 5px; +} +.product-tabs .tab-content .tab-pane .product-add-review .title { + color: #666666; + font-size: 16px; + font-weight: 400; + line-height: 20px; + margin: 0 0 10px; + +} +.product-tabs .tab-content .tab-pane .product-add-review .review-table .table thead th { + font-weight: normal; + border-bottom-width: 1px; + text-align: center; + vertical-align: middle; + background: #f8f8f8; + border:none +} +.product-tabs .tab-content .tab-pane .product-add-review .review-table .table tbody tr td { + text-align: center; + vertical-align: middle; + font-size:14px +} +.product-tabs .tab-content .tab-pane .product-add-review .review-table .table tbody tr td input { + float: none; + margin: auto; +} +.product-tabs .tab-content .tab-pane .product-add-review .review-form label { + font-weight: normal; + font-size: 14px; +} +.product-tabs .tab-content .tab-pane .product-add-review .review-form label .astk { + color: #FF0000; + font-size: 12px; +} +.product-tabs .tab-content .tab-pane .product-add-review .review-form .txt { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} +.product-tabs .tab-content .tab-pane .product-tag .title { + color: #666666; + font-size: 18px; + font-weight: 600; + line-height: 20px; + margin: 0 0 20px; + +} +.product-tabs .tab-content .tab-pane .product-tag .form-group label { + font-weight: normal; + font-size: 14px; + line-height: 24px; + margin-right: 10px; +} +.product-tabs .tab-content .tab-pane .product-tag .form-group .txt { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} +.product-tabs .tab-content .tab-pane .product-tag .form-group .text { + margin-left: 90px; + font-size:13px; + color:#999 +} +.furniture-container .product { + position: relative; +} +.furniture-container .product .btn-primary { + font-size: 15px; + line-height: 30px; + font-family: 'Open Sans', sans-serif; + background: #cbc9c9; + text-transform: uppercase; + border: none; + color: #fff; +} +.furniture-container .product .btn-primary:hover, +.furniture-container .product .btn-primary:focus { + border: none; +} +.furniture-container .best-seller .product .product-info .name, +.furniture-container .special-offer .product .product-info .name { + margin-top: 4px; +} +.furniture-container .cart { + margin-top: 5px; + opacity: 1; + -webkit-transition: all 0.2s linear 0s; + -moz-transition: all 0.2s linear 0s; + -ms-transition: all 0.2s linear 0s; + -o-transition: all 0.2s linear 0s; + transition: all 0.2s linear 0s; + width: 100%; + z-index: 666; + left: 0px; +} +.furniture-container .cart .action { + float: left; +} +.furniture-container .cart .action .add-cart-button .btn.btn-primary.icon { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + background: #575757 ; +} +.furniture-container .cart .action.lnk { + margin: 10px 0px; +} +.furniture-container .cart .action.lnk a { + padding: 0 10px; + color: #dadada; +} +.furniture-container .cart .action.lnk.wishlist { + border-right: 1px solid #dadada; +} +.homepage-container .product { + position: relative; +} +.homepage-container .product .product-image .tag { + font-size: 15px; + font-weight: 700; + width: 50px; + height: 50px; + text-transform: uppercase; + top: 2.5%; + z-index: 100; + -webkit-border-radius: 50px; + -moz-border-radius: 50px; + border-radius: 50px; + color: #fff; + right: 25px; + /*11px;*/ + text-align: center; + position: absolute; +} +.homepage-container .product .product-image .tag span { + position: relative; + z-index: 100; + line-height: 48px; +} +.homepage-container .product .product-image .tag.new { + background: #46aad7; +} +.homepage-container .product .product-image .tag.hot { + background: #ff7878; +} +.homepage-container .product .product-info .name { + font-size: 18px !important; + font-family: 'Open Sans', sans-serif; +} +.homepage-container .product .product-info .name a { + color: #555; +} +.homepage-container .product .product-info .star-rating .color { + color: #ffb400; +} +.homepage-container .product .product-info .product-price .price { + font-weight: 700; + font-size: 16px; + line-height: 30px; + margin-right: 8px; +} +.homepage-container .product .product-info .product-price .price-before-discount { + text-decoration: line-through; + color: #d3d3d3; + font-weight: 400; + line-height: 30px; + font-size: 14px; +} +.homepage-container .product .cart { + margin-top: 5px; + -webkit-transition: all 0.2s linear 0s; + -moz-transition: all 0.2s linear 0s; + -o-transition: all 0.2s linear 0s; + transition: all 0.2s linear 0s; + width: 100%; + z-index: 666; + left: 0px; + opacity: 1; +} +.homepage-container .product .cart .action { + float: left; +} +.homepage-container .product .cart .action .add-cart-button .btn.btn-primary.icon { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + background: #575757 ; +} +.homepage-container .product .cart .action.lnk { + margin: 10px 0px; +} +.homepage-container .product .cart .action.lnk a { + padding: 0 10px; + color: #dadada; +} +.homepage-container .product .cart .action.lnk.wishlist { + border-right: 1px solid #dadada; +} +.homepage-container .featured-product .products .product:first-child { + margin-bottom: 30px; +} +.homepage-container .blog-slider-container .blog-slider .blog-post-info .name { + font-size: 18px; +} +.homepage-container .btn-primary { + font-size: 15px; + line-height: 30px; + font-family: 'Open Sans', sans-serif; + background: rgba(0, 0, 0, 0); + text-transform: uppercase; + border: 2px solid #f2f2f2; + color: #747474; +} +.homepage-container .btn-primary:hover, +.homepage-container .btn-primary:focus { + color: #fff; +} +.homepage-container .best-seller .product .product-info .name, +.homepage-container .special-offer .product .product-info .name { + margin-top: 4px; +} +.homepage-container .cart { + margin-top: 5px; + opacity: 1; + -webkit-transition: all 0.2s linear 0s; + -moz-transition: all 0.2s linear 0s; + -o-transition: all 0.2s linear 0s; + transition: all 0.2s linear 0s; + width: 100%; + z-index: 666; + left: 0px; +} +.homepage-container .cart .action .add-cart-button .btn.btn-primary.icon { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + background: #575757 ; +} +.wrapper .box { + margin-left: auto; + margin-right: auto; + padding-left: 50px; + padding-right: 50px; +} +.wrapper .box .wrapper-inner { + background: none repeat scroll 0 0 #FFFFFF; + -moz-box-shadow: 0 10px 10px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 10px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 10px 10px rgba(0, 0, 0, 0.2); +} +.wrapper .box .wrapper-inner .wrapper-body-inner .owl-item .tag { + font-size: 15px; + font-weight: 700; + line-height: 55px; + width: 55px; + height: 55px; + text-transform: uppercase; + top: 2.5%; + z-index: 100; + -webkit-border-radius: 50px; + -moz-border-radius: 50px; + border-radius: 50px; + color: #fff; + right: 25px; + /*11px;*/ + text-align: center; +} +.wrapper .box .wrapper-inner .wrapper-body-inner .owl-item .tag span { + position: relative; + z-index: 100; +} +.wrapper .box .wrapper-inner .wrapper-body-inner .owl-item .tag.new { + background: #46aad7; +} +.wrapper .box .wrapper-inner .wrapper-body-inner .owl-item .tag.sale { + background: #989898; +} +.wrapper .box .wrapper-inner .wrapper-body-inner .owl-item .tag.hot { + background: #ff7878; +} +.body-content .x-page .x-text h1 { + font-size: 200px; + font-weight:bold +} +.checkout-box .checkout-steps .panel .panel-heading .unicase-checkout-title { + margin: 0px !important; + font-size: 16px; + font-weight: 600; +} +.body-content .terms-conditions-page .terms-conditions h2, .body-content .faq-page h2, .body-content .track-order-page h2 { + font-size: 25px; +} +.body-content .terms-conditions-page .terms-conditions h3 { + font-size: 18px; + color: #555; + margin-bottom: 30px; + font-weight: 600; +} +.body-content .sign-in-page .sign-in .social-sign-in .facebook-sign-in { + background-color: #3d5c98; + margin-right: 10px; +} +.blog-page .blog-post { + background-color: #fff; + padding: 20px; + border-radius:5px +} + +.blog-page .blog-post h1 { + font-size: 28px; + font-weight:600; + +} +.blog-page .blog-post h1 a { + color: #555; +} + +.blog-page .tab-content .blog-post {padding:0px 0px 25px 0px!important; box-shadow:none!important} + +.blog-page .blog-post span { + padding-right: 20px; + color: #aaa; + font-size: 13px; + +} +.blog-page .blog-post p { + padding-top: 16px; + font-size: 14px; + color: #666666; + margin-bottom: 0px; + font-family: 'Open Sans', sans-serif; + line-height:21px +} +.blog-page .blog-post a { + margin-top: 20px; +} +.blog-page .blog-post .blog-pagination .pagination { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; +} +.blog-page .blog-post .social-media { + margin-top: 20px; + margin-bottom: 30px; +} +.blog-page .blog-post .social-media span { + font-size: 13px; + color: #434343; +} +.blog-page .blog-post .social-media a { + font-size: 18px; + margin: 0px 10px 0px 0px; + height: 30px; + width: 30px; + display: inline-block; + text-align: center; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; + color: #888888; +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .blog-post h4 { + font-size: 14px; + font-weight:600 + +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .blog-post h4 a { + color: #555; +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .blog-post span { + padding-right: 10px; + color: #aaa; + font-size: 12px; +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .blog-post p { + padding-top: 10px; + font-size: 14px; + color: #666666; +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .nav-tabs { + border-bottom: none; +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .nav-tabs > li { + text-transform: uppercase; + color: #666666; +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .nav-tabs > li > a { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + font-size: 13px; + border: none; + letter-spacing:1px +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .nav-tabs > li:first-child > a { + padding-right: 10px; + border-right: 1px solid #d4d4d4; +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .nav-tabs > li:last-child > a { + padding-left: 10px; + letter-spacing:0.5px +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .nav > li > a { + padding: 0px; + color: #666666; +} +.blog-page .sidebar .sidebar-module-container .search-area .search-button:after { + content: "\f002"; + font-family: fontawesome; + font-size: 13px; + position: absolute; + top: 14px; + right: 30px; + background-color: #fff; + padding-left: 10px; +} +.blog-page .sidebar .sidebar-module-container .search-area input { + font-size: 14px; + color: #9e9e9e; + padding: 14px; + border: 1px solid #e1e1e1; + width: 100%; + position: relative; + border-radius:5px; + font-family: 'Barlow', sans-serif; +} +.blog-page .blog-pagination { + border-top: 1px solid #ececec; +} +.blog-page .blog-pagination .pagination > li:first-child > a { + margin-right: 10px; +} +.blog-page .blog-pagination .pagination > li:last-child > a { + margin-left: 2px; +} +.blog-page .side-bar-blog .widget .categories .side-bar-title h3 { + font-family: 'Open Sans', sans-serif; + font-size: 18px; + text-transform: uppercase; + color: #555; + padding-bottom: 8px; + border-bottom: 1px solid #e3e3e3; + margin: 0px; +} +.blog-page .blog-post-author-details { + padding: 40px 0px; + background-color: #fff; + padding: 20px; + border-radius:5px; + margin-bottom:30px; + margin-top:30px +} + +.blog-page .blog-post-author-details .col-md-2 {max-width:120px} +.blog-review .col-md-2 {width:120px} +.blog-review .col-sm-10 {width: calc(100% - 120px);} +.blog-review .img-rounded {border-radius:999px} +.blog-review { + background-color: #fff; + padding: 20px; + border-radius:5px;} + +.blog-write-comment { + background-color: #fff; + padding: 20px; + border-radius:5px} + +.blog-page .blog-post-author-details .author-social-network { + display: inline-block; +} +.blog-page .blog-post-author-details .author-social-network button { + background-color: #fff; + border: 1px solid #e3e3e3; +} +.blog-page .blog-post-author-details .author-social-network button .twitter-icon { + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; + color: #fff; + font-size: 16px; + height: 26px; + width: 26px; + text-align: center; + display: inline-block; + margin: 6px; + line-height: 26px; +} +.blog-page .blog-post-author-details .author-social-network > span { + font-size: 13px; + color: #434343; + margin-right: 16px; +} +.blog-page .blog-post-author-details .author-social-network .caret { + color: #e3e3e3; +} +.blog-page .blog-post-author-details .btn-group.open .dropdown-toggle { + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} +.blog-page .blog-post-author-details img { + float: left; +} +.blog-page .blog-post-author-details .author-job { + display: block; + padding: 0px; + color: #aaa; + font-size: 13px; +} +.blog-page .blog-post-author-details h4 { + display: inline-block; + font-size: 16px; + color: #555; + margin: 0px; + font-weight:600 +} +.blog-page .blog-post-author-details p { + font-size: 13px; + color: #666666; + padding: 16px 0px 0px 0px; + text-align: justify; + font-family: 'Open Sans', sans-serif; +} +.blog-page .blog-review .title-review-comments { + font-size: 18px; + color: #555; + margin-bottom: 40px; + +} +.blog-page .blog-review p { + font-size: 13px; + color: #666666; + font-family: 'Open Sans', sans-serif; + +} +.blog-page .blog-review .review-action { + font-size: 13px; + color: #666666; +} +.blog-page .blog-review .post-load-more { + text-align: center; + padding-bottom: 10px; +} +.blog-page .blog-post .author:before, +.blog-page .blog-post .review:before, +.blog-page .blog-post .date-time:before { + color: #aaa; + font-size: 13px; + padding-right: 8px; + font-family: FontAwesome; +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .blog-post .author:before, +.blog-page .sidebar .sidebar-module-container .sidebar-widget .blog-post .review:before, +.blog-page .sidebar .sidebar-module-container .sidebar-widget .blog-post .date-time:before { + color: #666666; + font-size: 13px; + padding-right: 4px; + ont-family: FontAwesome; +} +.blog-page .blog-post .author:before, +.blog-page .sidebar .sidebar-module-container .sidebar-widget .blog-post .author:before { + content: "\f007"; +} +.blog-page .blog-post .review:before, +.blog-page .sidebar .sidebar-module-container .sidebar-widget .blog-post .review:before { + content: "\f086"; +} +.blog-page .blog-post .date-time:before, +.blog-page .sidebar .sidebar-module-container .sidebar-widget .blog-post .date-time:before { + content: "\f073"; +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .nav-tabs > li.active > a, +.blog-page .sidebar .sidebar-module-container .sidebar-widget .nav-tabs > li.active > a:hover, +.blog-page .sidebar .sidebar-module-container .sidebar-widget .nav-tabs > li.active > a:focus { + background-color: #fff; +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .nav > li > a:hover, +.blog-page .sidebar .sidebar-module-container .sidebar-widget .nav > li > a:focus { + background-color: #fff; +} +.blog-page .blog-post .social-media a:hover, +.blog-page .blog-post .social-media a:focus { + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; + color: #fff; +} +.blog-page .blog-post .social-media i, +.blog-page .blog-post-author-details .author-social-network button a i { + padding-top: 6px; +} +.blog-page .blog-review h4, +.blog-page .blog-write-comment h4, +.contact-page .contact-title h4 { + font-size: 16px; + color: #555; + display: inline-block; + font-family: 'Barlow', sans-serif; +} +.blog-page .blog-review .review-action a:hover, +.blog-page .blog-review .review-action a:focus { + text-decoration: underline; +} + +.blog-page .blog-post-author-details .author-social-network .dropdown-menu { + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; +} +.blog-page .blog-post-author-details .author-social-network .dropdown-menu > li > a .icon { + margin-right: 5px; +} +.blog-page .blog-post-author-details .author-social-network .dropdown-menu > li > a:hover, +.blog-page .blog-post-author-details .author-social-network .dropdown-menu > li > a:focus { + background: rgba(0, 0, 0, 0); +} + +/*===================================================================================*/ +/* Checkout +/*===================================================================================*/ +.checkout-box .checkout-steps .panel-default { + background-color: #fff; + padding: 20px; +} + +.checkout-box .checkout-steps .checkout-step-01 .already-registered-login form .form-group .info-title { + font-weight: normal; + margin-bottom: 5px; + font-size: 14px; +} +.checkout-box .checkout-steps .checkout-step-01 .already-registered-login .forgot-password { + padding-top: 14px; + display: inline-block; +} +.checkout-box .checkout-steps .checkout-step-01 .already-registered-login a { + font-size: 13px; + color: #666666; + text-decoration: underline; +} +.checkout-box .checkout-steps .checkout-step-01 .already-registered-login button { + margin-top: 15px; +} + +.checkout-box .checkout-steps .panel .panel-heading .unicase-checkout-title a { + color: #555; + text-transform: uppercase; + display: block; +} +.checkout-box .checkout-steps .panel .panel-heading .unicase-checkout-title a span { + background-color: #aaaaaa; + color: #fff !important; + display: inline-block; + margin-right: 10px; + padding: 15px 20px; + border-radius:5px +} +.checkout-box .checkout-steps .checkout-subtitle { + font-size: 18px; + color: #434343; + margin-right: 12px; +} +.checkout-box .checkout-steps .panel-body { + padding: 20px; + border:none +} + +.panel-group .panel-heading+.panel-collapse>.panel-body {border:none} + +.checkout-box .checkout-steps .guest-login form .radio-checkout-unicase .guest-check { + margin-bottom: 6px; +} +.checkout-box .checkout-steps .guest-login ul .save-time-reg { + padding-bottom: 4px; +} +.checkout-box .panel-group .panel { + border-radius: 5px !important; + background-color: #fff; + padding: 20px; + border:none; + margin-bottom:15px +} +.checkout-box .checkout-progress-sidebar .panel-body ul li a { + color: #666666; +} +.checkout-box .checkout-progress-sidebar .panel .panel-heading { + padding: 27px 30px; + border-bottom: 1px solid #ddd; +} +.checkout-box .checkout-progress-sidebar .panel .panel-heading h4 { + margin: 0px; + font-size: 20px; + font-weight: 500; + background: #fff; + border-bottom: 1px #e5e5e5 solid; + padding-bottom: 14px; + margin-bottom: 10px; + font-family: 'Barlow', sans-serif; +} +.checkout-box .checkout-steps .checkout-step-01 .guest-login form .radio input[type="radio"], +.checkout-box .checkout-steps form .radio-inline input[type="radio"], +.checkout-box .checkout-steps form .checkbox input[type="checkbox"], +.checkout-box .checkout-steps form .checkbox-inline input[type="checkbox"] { + margin-left: 0px; +} +.checkout-box .checkout-steps .panel .panel-heading, +.checkout-box .checkout-progress-sidebar .panel .panel-heading { + font-size: 20px; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + padding:0px; + border:none; + border-radius:5px +} +.checkout-box .checkout-steps .guest-login .title-tag-line, +.checkout-box .checkout-steps .already-registered-login .title-tag-line { + margin-bottom: 15px; + font-size: 14px; +} +.checkout-box .checkout-steps .guest-login form .radio-checkout-unicase, +.checkout-box .checkout-steps .guest-login ul { + padding-left: 10px; + font-size: 14px; +} +.checkout-box .checkout-steps .checkout-step-01 .already-registered-login a:hover, +.checkout-box .checkout-steps .checkout-step-01 .already-registered-login a:focus, +.checkout-box .checkout-progress-sidebar .panel-body ul li a:hover { + background-color: rgba(0, 0, 0, 0); +} +.checkout-progress-sidebar {font-size:14px} +.checkout-progress-sidebar .nav>li>a {padding: 10px 0px;} +.checkout-progress-sidebar .nav>li>a:hover, .nav>li>a:focus {background:none} + + + +/*===================================================================================*/ +/* Contact Us +/*===================================================================================*/ + +.contact-page { + background-color: #fff; + padding: 20px; + overflow:hidden; + border-radius:5px} + +.contact-page .contact-map iframe { + height: 400px; + width: 100%; +} +.contact-page .contact-info { + font-size: 14px; + color: #666; +} +.contact-page .contact-info .contact-i { + display: inline-block; + height: 30px; + width: 30px; + text-align: center; + -webkit-border-radius: 50px; + -moz-border-radius: 50px; + border-radius: 50px; + color: #fff; + margin-right: 16px; + float: left; +} +.contact-page .contact-info .contact-i i { + padding-top: 8px; + font-size: 14px; +} +.contact-page .contact-info .contact-span { + display: block; +} +.contact-page .contact-title h4 { + margin-bottom: 30px; + font-size:18px; + font-weight:600 +} +.contact-page .contact-info .address, +.contact-page .contact-info .phone-no { + margin-bottom: 10px; +} + + +/*===================================================================================*/ +/* Shopping Cart +/*===================================================================================*/ + +.shopping-cart { + background-color: #fff; + padding: 20px; + overflow:hidden ; + border-radius:5px +} + +.shopping-cart .shopping-cart-table { + margin-bottom: 50px; +} +.shopping-cart .shopping-cart-table table { + margin-bottom: 0px !important; +} +.shopping-cart .shopping-cart-table table tbody tr td { + vertical-align: middle; +} + +.shopping-cart .cart-image img { + width:150px +} + +.cart-shopping-total {background:#f8f8f8} + +.shopping-cart .shopping-cart-table table tbody tr .romove-item a { + font-size: 18px; + color: #666666; +} +.shopping-cart .shopping-cart-table table tbody tr .romove-item a:hover, +.shopping-cart .shopping-cart-table table tbody tr .romove-item a:focus { + color: #ff000 !important; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-image .entry-thumbnail { + display: block; + text-align: center; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info { + vertical-align: middle !important; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info h4 { + margin-top: 0px; + font-size: 16px; + font-family: 'Barlow', sans-serif; + font-weight:400 + +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info h4 a { + color: #555; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info .reviews { + font-size: 11px; + color: #aaa; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info .cart-product-info { + margin-top: 10px; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info .cart-product-info span { + font-size: 14px; + color: #666666; + text-transform: uppercase; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info .cart-product-info span span { + font-family: 'Open Sans', sans-serif, sans-serif; + font-size: 12px; + text-transform: lowercase; + margin-left: 14px; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-edit a { + color: #666666; + text-decoration: underline; +} +.shopping-cart .shopping-cart-table .table > thead > tr > th { + text-align: center; + padding: 18px; + font-size: 15px; + font-weight:600; + border-bottom: 1px solid #e5e5e5; +} +.shopping-cart .shopping-cart-table .shopping-cart-btn span { + padding: 20px 0px; + display: block; +} +.shopping-cart .estimate-ship-tax table thead tr th .estimate-title { + font-size: 18px; + color: #555; + margin-bottom: 2px; + margin-top: 0px; + display: block; + font-weight:600 +} +.shopping-cart .estimate-ship-tax table thead tr th p { + font-size: 14px; + color: #666666; + font-weight: normal; + margin-bottom: 0px; +} +.shopping-cart .estimate-ship-tax table thead tr > th { + padding: 24px 10px 20px 10px; +} +.shopping-cart .estimate-ship-tax table tbody tr > td { + padding: 24px 10px !important; +} +.shopping-cart .estimate-ship-tax table tbody .unicase-form-control .selectpicker { + background: #fff; + color: #999; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + border: 1px solid #eee; +} +.shopping-cart .estimate-ship-tax table tbody .unicase-form-control .dropdown-menu.open ul li a:hover, +.shopping-cart .estimate-ship-tax table tbody .unicase-form-control .dropdown-menu.open ul li a:focus { + background: rgba(0, 0, 0, 0); +} +.shopping-cart .cart-shopping-total table thead tr th { + background-color: #fafafa; + text-align: right; + padding: 24px 30px; + +} +.shopping-cart .cart-shopping-total table thead tr th .cart-sub-total { + color: #555; + margin-bottom: 7px; +} +.shopping-cart .cart-shopping-total table tbody tr td { + padding: 24px 20px; +} +.shopping-cart .cart-shopping-total table tbody tr td .cart-checkout-btn button { + float: right !important; + margin-bottom: 8px; +} +.shopping-cart .cart-shopping-total table tbody tr td .cart-checkout-btn span { + display: block; + font-weight: normal; + color: #666666; + text-align:center +} +.shopping-cart .shopping-cart-table table tbody tr .romove-item, +.shopping-cart .shopping-cart-table table tbody tr .cart-product-edit, +.shopping-cart .shopping-cart-table table tbody tr .cart-product-sub-total, +.shopping-cart .shopping-cart-table table tbody tr .cart-product-grand-total, +.shopping-cart .shopping-cart-table table tbody tr .cart-product-quantity { + text-align: center; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-sub-total span, +.shopping-cart .shopping-cart-table table tbody tr .cart-product-grand-total span { + display: block; + font-size: 16px; + color: #555; + text-transform: uppercase; +} +.shopping-cart .estimate-ship-tax table tbody tr td .form-group label, +.shopping-cart .estimate-ship-tax table tbody tr td .form-group input, +.blog-page .blog-write-comment .form-group label, +.blog-page .blog-write-comment .form-group input, +.contact-page .contact-form form label, +.contact-page .contact-form form input { + font-size: 14px; + font-weight: normal; + color: #999; +} +.shopping-cart .estimate-ship-tax table tbody tr td .form-group label span, +.blog-page .blog-write-comment label span, +.contact-page .contact-form form label span, +.checkout-box .checkout-steps .checkout-step-01 .already-registered-login form .form-group label span { + color: red; +} +.shopping-cart .cart-shopping-total table thead tr th .cart-sub-total, +.shopping-cart .cart-shopping-total table thead tr th .cart-grand-total { + font-size: 18px; + font-weight:600 +} +.shopping-cart-table table tbody tr td .quant-input { + display: inline-block; + height: 35px; + position: relative; + width: 70px; +} +.shopping-cart-table table tbody tr td .quant-input .arrows { + height: 100%; + position: absolute; + right: 0; + top: 0; + z-index: 2; +} +.shopping-cart-table table tbody tr td .quant-input .arrows .arrow { + box-sizing: border-box; + cursor: pointer; + display: block; + text-align: center; + width: 40px; +} +.shopping-cart-table table tbody tr td .quant-input .arrows .arrow .ir .icon.fa-sort-asc { + top: 5px; +} +.shopping-cart-table table tbody tr td .quant-input .arrows .arrow .ir .icon.fa-sort-desc { + top: -7px; +} +.shopping-cart-table table tbody tr td .quant-input .arrows .arrow .ir .icon { + position: relative; +} +.shopping-cart-table table tbody tr td .quant-input input { + background: none repeat scroll 0 0 #FFFFFF; + border: 1px solid #F2F2F2; + box-sizing: border-box; + font-size: 15px; + height: 35px; + left: 0; + padding: 0 20px 0 18px; + position: absolute; + top: 0; + width: 70px; + z-index: 1; +} + +.checkout-btn { background:#fdd922; color:#333; padding: 12px 25px; font-size:20px} + + +.product-comparison .page-title { + font-size: 30px; + color: #333; + margin-bottom: 40px; + font-weight:600 +} + +.product-comparison img {width:150px!important} + +.product-comparison .compare-table tr th { + font-size: 16px; + font-weight: 500; + color: #666666; + padding: 18px 25px; + vertical-align: middle; + border: 1px solid #e5e5e5; +} +.product-comparison .compare-table tr td { + padding: 18px 30px; + border: 1px solid #e5e5e5; +} +.product-comparison .compare-table tr td .product { + margin-bottom: 15px; + margin-top: 40px; +} +.product-comparison .compare-table tr td .product .product-image .image a { + display: block; + text-align: left; +} +.product-comparison .compare-table tr td .product-price .price { + font-size: 16px; + font-weight: 600; + line-height: 30px; + margin-right: 8px; +} +.product-comparison .compare-table tr td .product-price .price-before-discount { + color: #D3D3D3; + font-size: 14px; + font-weight: 400; + line-height: 30px; + text-decoration: line-through; +} +.product-comparison .compare-table tr td .text { + font-size: 14px; + line-height: 22px; +} +.product-comparison .compare-table tr td .in-stock { + font-size: 15px; + font-weight: 700; + margin-bottom: 0px; +} +.product-comparison .compare-table tr td .remove-icon { + color: #666666; +} +.product-comparison .compare-table tr td .remove-icon:hover, +.product-comparison .compare-table tr td .remove-icon:focus { + color: #ff6666; +} + +.body-content .x-page .x-text p { + font-size: 18px; + font-style: normal; + font-weight: normal; +} +.body-content .x-page .x-text .le-button { + border-radius: 0 3px 3px 0; + margin: 0 0 0 -5px; + padding: 19px 23px 20px; + font-size: 19px; + font-weight: 600; + line-height: 10px; + border: medium none; + color: #333; + background:#fdd922 +} +.body-content .x-page .x-text form input { + border: 1px solid #e0e0e0; + border-radius: 3px 0 0 3px; + color: #3d3d3d; + padding: 13px; + font-size: 15px; + width: 40%; +} +.body-content .x-page .x-text a { + font-size: 15px; +} +.body-content .x-page .x-text a i { + padding-right: 2px; +} + +/*===================================================================================*/ +/* Terms and Condition/track orders/ +/*===================================================================================*/ + +.terms-conditions-page { + background-color: #fff; + padding: 20px; + overflow: hidden; + border-radius:5px +} + +.body-content .terms-conditions-page .terms-conditions h2, +.body-content .faq-page h2, +.body-content .track-order-page h2 { + font-size: 30px; + color: #555; + text-align: center; + font-weight:600 +} + +.body-content .terms-conditions-page .terms-conditions ol { + padding-left: 22px; +} +.body-content .terms-conditions-page .terms-conditions ol li { + font-style: normal; + font-size: 14px; + color: #666; + padding-bottom: 20px; + font-family:'Open Sans', sans-serif +} +.body-content .terms-conditions-page .terms-conditions p { + font-size: 15px; +} +.body-content .terms-conditions-page .terms-conditions h2, +.body-content .terms-conditions-page .terms-conditions span, +.body-content .track-order-page span { + text-align: left; +} + +.track-order-page { + background-color: #fff; + padding: 20px; + overflow: hidden; + border-radius:5px +} + +.product-comparison { + background-color: #fff; + padding: 20px; + overflow: hidden; + border-radius:5px; + margin-bottom:20px +} + +.faq-page { + background-color: #fff; + padding: 20px; + overflow: hidden; + border-radius:5px +} + +.faq-page .panel-group .panel {padding:0px; box-shadow:none} +.faq-page .panel-body {font-family: 'Open Sans', sans-serif;} + + +.body-content .terms-conditions-page .terms-conditions span, +.body-content .faq-page .title-tag, +.body-content .track-order-page span { + display: block; + font-style: normal; + font-size: 14px; + color: #666; +} +.body-content .faq-page .title-tag { + text-align: left; + padding-bottom: 30px; +} +.body-content .track-order-page .register-form label { + font-weight: 400; + font-size: 14px; +} +.body-content .track-order-page .register-form .form-group { + margin-bottom: 25px; +} + + +/*===================================================================================*/ +/* Wishlist +/*===================================================================================*/ + +.my-wishlist-page { + background-color: #fff; + padding: 20px; + overflow: hidden; + border-radius:5px +} + +.heading-title { + text-align: left!important; + text-transform: none!important; + padding: 0px 0px 15px 0px!important; + font-weight: bold; + font-size: 22px; + border-bottom: 1px #eaeaea solid!important;} + +.body-content .my-wishlist-page .my-wishlist table > thead > tr > th { + text-align: center; +font-size: 24px; + font-family: 'Barlow', sans-serif; + font-weight: 600; + border: none; + +} + +.body-content .my-wishlist-page img {width:100%} +.body-content .my-wishlist-page .my-wishlist table tbody tr:nth-child(even) { + border-top: 1px solid #ddd; +} +.body-content .my-wishlist-page .my-wishlist table tbody .product-name { + font-size: 16px; + font-family: 'Open Sans', sans-serif; + padding-bottom: 6px; +} +.body-content .my-wishlist-page .my-wishlist table tbody .product-name a { + color: #434343; +} +.body-content .my-wishlist-page .my-wishlist table tbody .rating span { + font-size: 11px; + color: #aaa; + padding-left: 10px; +} +.body-content .my-wishlist-page .my-wishlist table tbody .rating .rate { + color: #ffb400; +} +.body-content .my-wishlist-page .my-wishlist table tbody .rating .non-rate { + color: #dcdcdc; +} +.body-content .my-wishlist-page .my-wishlist table tbody .price { + font-size: 16px; + padding-top: 4px; + font-weight: 600; +} +.body-content .my-wishlist-page .my-wishlist table tbody .price span { + font-size: 15px; + color: #ddd; + text-decoration: line-through; + padding-left: 10px; +} +.body-content .my-wishlist-page .my-wishlist table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + vertical-align: middle; + border: none; + padding: 30px; +} +.body-content .my-wishlist-page .my-wishlist table tbody .close-btn a, +.body-content .my-wishlist-page .my-wishlist table tbody .close-btn a:hover { + color: #ff7878; + font-size: 15px; +} + +/*===================================================================================*/ +/* Signup and login +/*===================================================================================*/ + +.sign-in-page { + background-color: #fff; + padding: 20px; + overflow: hidden; + border-radius:5px +} + +.body-content .sign-in-page .sign-in h4, +.body-content .sign-in-page .create-new-account h4 { + font-size:18px; + padding-bottom: 14px; + border-bottom: 1px solid #eaeaea; + font-weight:600 + +} +.body-content .sign-in-page .sign-in p, +.body-content .sign-in-page .create-new-account p { + font-size: 14px; + color: #40b62c; +} +.body-content .sign-in-page .sign-in .social-sign-in a, +.body-content .sign-in-page .sign-in .social-sign-in a:hover, +.body-content .sign-in-page .sign-in .social-sign-in a:focus { + + border-radius: 3px; + padding: 14px 30px; + font-size: 15px; + display: inline-block; + color: #fff; + text-align: center; +} +.body-content .sign-in-page .sign-in .social-sign-in a i { + padding-right: 6px; +} + +.body-content .sign-in-page .sign-in .social-sign-in .facebook-sign-in:hover, +.body-content .sign-in-page .sign-in .social-sign-in .facebook-sign-in:focus { + background-color: #153470; +} +.body-content .sign-in-page .sign-in .social-sign-in .twitter-sign-in { + background-color: #22aadf; +} +.body-content .sign-in-page .sign-in .social-sign-in .twitter-sign-in:hover, +.body-content .sign-in-page .sign-in .social-sign-in .twitter-sign-in:focus { + background-color: #0084B9; +} +.body-content .sign-in-page .create-new-account > span { + font-size: 20px; + font-family: 'Open Sans', sans-serif; + padding-bottom: 14px; + text-transform: uppercase; + display: inline-block; +} +.body-content .sign-in-page .create-new-account .checkbox label { + margin-bottom: 10px; + font-size: 16px; +} +.body-content .sign-in-page form .form-group span { + color: red; +} +.body-content .sign-in-page .register-form label { + font-size: 16px; + font-weight: 400; +} +.body-content .sign-in-page .register-form .form-group { + margin-bottom: 20px; +} + +.tooltip.top { + padding: 5px 0; + margin-top: -5px; + +} +.tooltip-inner { +border-radius:3px; +min-width:70px; +z-index:10000; +height:25px + + +} + +/*===================================================================================*/ +/* Responsive Layout +/*===================================================================================*/ + +@media (min-width: 320px) and (max-width: 479px) { + +.outer-top-vs { + margin-top: 20px; +} + +.outer-bottom-xs { + margin-bottom: 20px; +} + +.outer-bottom-small { + margin-bottom: 20px; +} + +.scroll-tabs .more-info-tab .new-product-title {font-size:22px} + + + +.footer .footer-bottom .module-body {margin-bottom:20px} + +.top-bar .cnt-block {float:none} +.top-cart-row .dropdown-cart .lnk-cart {} +/*.top-cart-row {padding:15px 20px;}*/ +.top-cart-row .dropdown-cart { + float: none; + text-align: center; + +} + +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner { + +} +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .basket { +display: inline-block; +position: relative; +} +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .basket:before { + float: none; +} +.body-content .terms-conditions-page .terms-conditions h3 { + margin-bottom: 16px; +} + +ul.categories-filter .dropdown { + text-align: left; +} +#product-tabs-slider .custom-carousel .owl-controls { +top:-13%; +} +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .total-price-basket{padding: 0;} +#owl-main .item .caption .big-text {font-size:24px; line-height: normal; letter-spacing:normal} +#owl-main .item .caption {left:30px} +#owl-main {height:100%} +#owl-main .item {height:150px} +#owl-main .item .caption .slider-header { + font-size: 14px; + font-weight: 500; + } +#owl-main .item .caption .button-holder {margin:0px} +#hero .btn-primary {padding:8px 10px; font-size:13px; line-height:normal; margin-top:8px} + .body-content .sidebar { + margin-bottom: 20px; + width:100%; + } +.scroll-tabs .nav-tab-line li a { + padding: 0 4px 3px 0px!important + } + .scroll-tabs .nav-tab-line { + margin-right:10px; + margin-top: 13px; + float: left; +} +.featured-product .custom-carousel .owl-controls { + display: none !important; +} +.featured-product .section-title { + border-radius: 5px 5px 0px 0px; +} +.featured-product .products { + margin-right: 0px; +} +.featured-product .col-lg-9 { + padding:0px; +} +.featured-product .product-image { + padding: 0 30px; +} +.featured-product .text-left { + padding-left: 30px; +} +.tag { + top: 1.5%; + right: 33px; + } +.featured-product .text-left { + padding-left: 30px; +} +.product .product-info .name a { + color: #555; + font-size: 16px; + font-weight: 500; +} +.hot-deals .product-info .name a { + font-weight: 500; +} +.homebanner-holder { + width: calc(100% - 0px); +} +.our-features-box li { + width:100%; +} +.our-features-box .feature-box .content-blocks { + text-align: left; +} +.icon-truck, .icon-money, .icon-support, .icon-return { + float: left; +} + .sidebar .side-menu nav .nav > li > a { + font-size: 16px; +} +.sidebar .side-menu nav .nav > li > .mega-menu .yamm-content ul > li > a { + font-size: 15px; + padding: 3px; + border-bottom: 1px solid #eaeaea; +} +.top-bar .header-top-inner .cnt-block .list-inline li.lang{display: none;} +.top-bar .header-top-inner .cnt-block .list-inline li { + float: left; +} +.our-features-box .feature-box { + text-align: left; + padding: 5px 0; +} +.our-features-box ul { + padding: 0 20px; +} +.hot-deals .hot-deal-wrapper .timing-wrapper .box-wrapper { + margin-bottom: 10px; + margin-right: 0; +} +.hot-deals .hot-deal-wrapper .timing-wrapper { + float: none; + width: 19%; + bottom: 0px; +} +.section-title { + font-size: 24px; +} + +.product .product-info .product-price .price { + font-size:16px; +} +.product .product-info .product-price .price-before-discount { + font-size: 16px; +} +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .total-price-basket { + display: inline-flex; + padding-top: 19px; + vertical-align: top; +} +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .total-price-basket .value { + padding-left: 12px; + margin-top: -5px; +} +.cnt-strip .strip h2 { + font-size:18px; +} +.cnt-strip .strip h2 .shopping-needs { + font-size: 17px; +} +.cnt-strip .strip.strip-text { + width:100%; +} +.wide-banner1 { margin-bottom:20px} +.wide-banner .image img { +margin-bottom:15px; +} +.wide-banner.outer-bottom-xs { + margin-bottom:0px; +} +/* category page */ +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-heading .accordion-toggle { + font-size:15px; + padding-top: 8px; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .list li { + font-size: 15px; + padding-top: 6px; +} +.sidebar .sidebar-module-container .sidebar-widget .widget-header .widget-title { + font-size: 17px; +} +.rht-col { + width: calc(100% - 0px); +} +.filters-container .lbl-cnt { + display: none; +} +.filters-container .nav-tabs.nav-tab-box { + margin-top: 6px; +} +.filters-container .nav-tabs.nav-tab-box li a .icon { + font-size: 21px; +} +.body-content .x-page .x-text h1 { + font-size: 100px; + font-weight: bold; +} +.body-content .x-page .x-text form input { + width: 75%; +} +.checkout-box .checkout-steps .panel .panel-heading .unicase-checkout-title { + font-size: 11px; +} +.social a { + color: #fff; + width: 35px; + height: 35px; + line-height: 35px; + border-radius: 4px; +} +.social ul li { + margin-right: 6px; +} +.copyright-bar .payment-methods ul li img { + width: 51px; +} +.single-product .product-info .price-container .price-box .price { + font-size: 25px; +} +.single-product .product-info .price-container .price-box .price-strike { + font-size: 20px; +} +.single-product .rht-col .featured-product .outer-top-xs { + margin-top:0px; +} +} +@media(min-width: 480px) and (max-width: 767px){ + .body-content .sidebar { + margin-bottom: 30px; + width:100%; + } + .top-cart-row .dropdown-cart .lnk-cart .items-cart-inner { + position: relative; + text-align: center; +} + +.wide-banner1 { margin-bottom:20px} + +.our-features-box ul { + padding: 0 20px; +} +.body-content .terms-conditions-page .terms-conditions h3 { + margin-bottom: 16px; +} +#product-tabs-slider .custom-carousel .owl-controls { + top: -9%; +} +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .basket { + display: inline-block; + position: relative; +} + .top-cart-row .dropdown-cart { + float: none; + text-align: center; + padding: 0 32px; +} +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .basket:before { + float: none; +} +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .total-price-basket { + display: inline-flex; + padding-top: 19px; + vertical-align: top; +} +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .total-price-basket { + display: inline-flex; + padding-top: 15px; +} +.single-product .rht-col .featured-product .outer-top-xs { + margin-top: 0px; +} + +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .total-price-basket .value { + padding-left: 12px; + margin-top: -3px; +} +ul.categories-filter .dropdown { + text-align: left; +} +.scroll-tabs .nav-tab-line li a { + padding: 0 10px !important; + } + .scroll-tabs .nav-tab-line { + margin-right:80px; + margin-top: 12px; + float: left; +} +.featured-product .custom-carousel .owl-controls { + display: none !important; +} +.featured-product .section-title { + border-radius: 5px 5px 0px 0px; +} +.top-cart-row { + margin-top: 12px; +} +#owl-main .item { + height:250px; +} +#owl-main { + height: 100%; +} +.wide-banner .image img { + margin-bottom: 30px; +} +.cnt-strip .strip h2 { + font-size:31px; +} +.cnt-strip .strip.strip-text { + width:100%; +} +.cnt-strip .strip { + right:-10px; + bottom: 35%; +} +.wide-banner .image img { +margin-bottom: 10px; +} +.wide-banners .outer-bottom-xs { + margin-bottom:0px; +} +.featured-product .product-image { + padding: 0 15px; +} +.featured-product .text-left { + padding-left: 15px; +} +#owl-main .item .caption .big-text { + font-size: 35px; + line-height: 35px; + } + #owl-main .item .caption .slider-header { + font-size: 14px; + font-weight: 500; + } + #owl-main .item .caption .button-holder { + margin: 10px 0 0; +} +.product .product-info .name a { + color: #555; + font-size: 16px; + font-weight: 500; +} +.hot-deals .product-info .name a { + font-weight: 500; +} +.homebanner-holder { + width: calc(100% - 0px); +} +.our-features-box li { + width:50%; +} +.our-features-box .feature-box .content-blocks { + text-align: left; +} +.our-features-box .feature-box { + overflow: hidden; + font-size: 18px; +} +.icon-truck, .icon-money, .icon-support, .icon-return { + width:70px!important; + } +.icon-truck, .icon-money, .icon-support, .icon-return { + float: left; +} + .sidebar .side-menu nav .nav > li > a { + font-size: 16px; +} +.sidebar .side-menu nav .nav > li > .mega-menu .yamm-content ul > li > a { + font-size: 15px; + padding: 3px; + border-bottom: 1px solid #eaeaea; +} +.copyright-bar .copyright { + text-align: left; +} +.wide-banners.wow.fadeInUp.outer-bottom-xs.animated { + text-align: -webkit-center; +} +.top-bar .cnt-block { + float: left; +} +.hot-deals .hot-deal-wrapper .timing-wrapper .box-wrapper { + margin-bottom: 10px; + margin-right: 0; +} +.hot-deals .hot-deal-wrapper .timing-wrapper { + float: none; + width: 19%; + bottom:5px; +} +.our-features-box .feature-box { + text-align: left; + padding: 5px 0; +} +.our-features-box .container { + padding: 0px; +} +.hot-deals .item { + padding: 0 10px; +} + +/* category page */ +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-heading .accordion-toggle { + font-size:15px; + padding-top: 8px; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .list li { + font-size: 15px; + padding-top: 6px; +} +.sidebar .sidebar-module-container .sidebar-widget .widget-header .widget-title { + font-size: 17px; +} +.rht-col { + width: calc(100% - 0px); +} +.filters-container .lbl-cnt { + display: none; +} +.filters-container .nav-tabs.nav-tab-box { + margin-top: 6px; +} + +.filters-container .nav-tabs.nav-tab-box li a .icon { + font-size: 21px; +} +#myTabContent .product .product-info .name a { + color: #555; + font-size: 18px; + font-weight: 500; +} +#myTabContent .product .product-info .product-price .price { + font-weight: 600; + font-size: 17px; + line-height: 30px; + margin-right: 8px; +} +.body-content .x-page .x-text h1 { + font-size: 150px; + font-weight: bold; +} +.body-content .x-page .x-text form input { + width: 75%; +} +.social a { + color: #fff; + width: 45px; + height: 45px; + line-height: 45px; + border-radius: 4px; +} +.copyright-bar .payment-methods ul li img { + width: 66px; +} +.product .product-info .product-price .price { + font-size:16px; +} +.product .product-info .product-price .price-before-discount { + font-size: 16px; +} +} +/* Extra small devices (phones, less than 768px) */ +@media (max-width: 767px) { + +li.dropdown.mega-menu { position: relative;} +li.dropdown.mega-menu a.dropdown-toggle > ul.dropdown-menu:after { + content: ""; + /* margin-right: 10px; */ + color: #555; + font-size: 12px; + position: absolute; + right: 0px; + top: 8px; + height: 24px; + width: 24px; + vertical-align: top; + text-align: center; + font-family: FontAwesome; + font-weight: normal; + background-image: url(../../../public/images/font/plus.html); + background-repeat: no-repeat; +} + .heading-title { + margin-top: 0; +} +.address-block { + padding-bottom: 20px; +} +li.dropdown.navbar-right.special-menu { + display: none; +} +.cnt-home .header-style-1 .header-nav .navbar .navbar-nav > li a:hover:after{ +display: none !important; +} +.cnt-home .product-micro .product-info .product-price .price { + font-size: 16px; +} + .top-bar .cnt-account ul > li.myaccount a:before { + content: '\f007'; + font-family: FontAwesome; + font-size: 13px; + padding-right: 6px; +} + + .top-bar .cnt-account ul > li.wishlist a:before { + content: '\f004'; + font-family: FontAwesome; + font-size: 13px; + padding-right: 6px; +} + .top-bar .cnt-account ul > li.header_cart a:before { + content: '\f290'; + font-family: FontAwesome; + font-size: 13px; + padding-right: 6px; + +} + .top-bar .cnt-account ul > li.check a:before { + content: '\f00c'; + font-family: FontAwesome; + font-size: 13px; + padding-right: 6px; +} + .top-bar .cnt-account ul > li.login a:before { + content: '\f13e'; + font-family: FontAwesome; + font-size: 13px; + padding-right: 6px; +} + + .top-bar .cnt-account ul > li a span{display: none;} + .navbar-toggle {float:left; border:none} + .navbar-default .navbar-toggle .icon-bar {background-color: #fff;} + .navbar-collapse {box-shadow:none; border:none; padding-right: 15px; padding-left: 15px;} + .header-style-1 .header-nav .navbar-default .navbar-collapse {padding-right: 15px; padding-left: 15px;} + .header-style-1 .header-nav .navbar-default .navbar-collapse .navbar-nav > li > a {border:none; padding: 10px 10px;} + .mega-menu img {width:100%; display: none;} + .sidebar .side-menu nav .nav > li > .mega-menu .yamm-content .dropdown-banner-holder { + right: 0px; + top: 0px; +} + .yamm .dropdown-menu .yamm-content .col-menu {margin-bottom:15px} + + .top-search-holder { + padding: 0 15px; +} +/*.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .total-price-basket .lbl { + display: none; +} +.top-cart-row .dropdown-cart .lnk-cart .items-cart-inner .total-price-basket .value { + display: none; +}*/ +.cnt-home .header-style-1 .header-nav .navbar .navbar-nav > li.active a:after { + display: none!important; +} +.main-header { + padding: 10px 0px 10px 0px; +} +.top-bar { + border-bottom: 1px solid hsla(0,0%,100%,.2); +} +.control-group { + text-align: center; +} + .top-bar .header-top-inner { + text-align: center; + } + .top-bar .header-top-inner .cnt-account { + clear: both; + display: inline-block; + float: right; + margin: auto; + text-align: center; + } + + .top-bar .header-top-inner .cnt-block .list-inline li { + margin:0px 0; + } + .top-bar .cnt-account { + padding:7px 0px; +} + .main-header .logo-holder { + text-align: center; + margin-bottom:10px; + } + .main-header .top-cart-row { + padding-top: 13px; +} + .main-header .top-search-holder .contact-row { + margin-bottom: 20px; + text-align: center; + } + .main-header .top-search-holder .contact-row .phone, + .main-header .top-search-holder .contact-row .contact { + margin: 0 0 5px; + padding-right: 0px; + border-right: none; + display: block; + } + + .main-header .top-search-holder .search-area { + background:transparent; +} + .main-header .top-search-holder .search-area .search-button { + padding: 19px 19px; + position: absolute; + right: 12px; + top:71px; + } + .main-header .top-search-holder .search-area .categories-filter { + width: 100%; + border-right: none; + border-bottom: 1px solid #e0e0e0; + border-radius: 999px; + margin-bottom: 6px; + } + .main-header .top-search-holder .search-area .search-field { + border-radius: 999px; + width: 100%; + } + .sidebar .side-menu nav .nav > li > .mega-menu { + left: 0px; + min-width: 100%; + top: 100%!important; + } + .logo-slider-inner .item { + text-align: center; + } + .filters-container .filter-tabs, + .filters-container .lbl-cnt, + .filters-container .pagination-container { + margin-bottom: 10px; + } + .homepage-container .wide-banners .wide-banner { + margin-bottom: 10px; + } + .cnt-homepage .wrapper .box { + padding: 0 10px; + } + #owl-main .item .caption { + padding: 0 0px; + } + .wide-banners .wide-banner:first-child { + margin-bottom: 10px; + } + .product .product-image .image img { + width: 100%; + height: auto; + display: block; + } + .header-nav .yamm .dropdown-menu { + background: #fff; + } + .copyright-bar .copyright { + text-align: left; +} +.footer .footer-bottom { + padding-left: 16px; + padding: 25px; +} +.copyright-bar { + padding-left: 15px; +} + +.copyright-bar .payment-methods ul li { + margin-right: 5px; +} +.copyright-bar .no-padding { + padding: 4px 0 0; +} +.featured-product .col-lg-3 { + padding-right: 15px; + border-radius: 5px 5px 0px 0px; +} + .filters-container .no-padding { + padding: 0px; + } + .search-result-container .category-product-inner .product-list.product .product-info { + padding: 0px; + } + .search-result-container .category-product-inner .product-list.product .product-info .cart { + margin-bottom: 20px; + } + .single-product .gallery-holder { + margin-bottom: 30px; + } + .single-product .product-info-block { + clear: both; + } + .yamm .dropdown-menu.pages { + padding: 0px 0px; + } + .yamm .dropdown-menu .yamm-content { + padding:0px 12px; +} + .hot-deal-wrapper .image img { + width: 100%; + height: auto; + display: block; + } + .seller-product .products .product .product-info .name { + font-size: 15px; + margin-top: 0px !important; + } + .cnt-homepage .single-product .product-tabs .nav-tab-cell-detail li a { + font-size: 16px; + } + .cnt-homepage .header-nav .yamm .navbar-header { + border: 1px solid #f1f1f1; + } + .info-boxes .info-box { + margin-bottom: 10px; + } + .cnt-homepage .single-product .product-info-block .cart { + margin-top: 10px; + padding: 0 15px; + } + .product-comparison .compare-table tr td .product .product-image .image img { + width: auto; + } + +.hot-deals .products {/*margin-right:15px*/} +.m-t-20 { + margin-top: 20px; + text-align: center; +} +.hot-deals .cart .action { + float: none; +} +.hot-deals .cart { + text-align: center; +} +.product-tag .item { + margin-right: 6px; + padding: 10px 18px; + font-size: 13px; +} +.copyright-bar .payment-methods {text-align:left; margin-top:10px} +.single-product .home-banner {display:none;} +/* Detail Page */ +.single-product .product-info-block .name { + font-size: 35px; +} +.single-product .product-info-block .m-t-20 { + text-align: left; +} +.single-product .add-btn .btn-primary { + padding: 11px 20px; + font-size: 15px; +} +.single-product .product-info .quantity-container .cart-quantity .quant-input input { + height: 43px; + } + .homepage-owl-carousel .featured-product .ad-imgs img { + padding-bottom: 16px; +} +.homepage-owl-carousel .featured-product .text-left { + padding-left: 30px; + text-align: center; +} +.single-product .product-info .quantity-container { + margin-bottom: 0; + padding: 15px 0 0; +} +.featured-product .ad-imgs img { + padding-bottom: 15px; +} +.breadcrumb-inner { + padding: 6px 0 0; +} +.table-responsive { + border: 1px solid transparent !important; + +} +.body-content .sign-in-page .sign-in .social-sign-in .facebook-sign-in { + margin-bottom: 10px; +} +.sign-in .outer-top-xs { + margin-top: 20px; + margin-bottom: 30px; +} +.contact-map.outer-bottom-vs { + margin-bottom: 20px; +} +.blog-page .blog-post h1 { + font-size: 24px; + font-weight: 600; +} +.blog-review .col-md-2 { + width: 100%; + text-align: -webkit-center; +} +.blog-review .col-sm-10 { + width: calc(100% - 0px); +} +.blog-page .blog-review .review-action { + padding-top: 8px; +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .blog-post h4 { + font-size: 19px; +} +.home-banner.outer-top-n.outer-bottom-xs { + display: none; +} +.shopping-cart .shopping-cart-table { + margin-bottom: 10px; +} +td.cart-product-sub-total { + font-weight: 500; +} +td.cart-product-grand-total { + font-weight: 500; +} +.estimate-ship-tax table { + margin-bottom: 0; +} +.shopping-cart tfoot > tr > td { padding: 10px !important; } +.shopping-cart .estimate-ship-tax table thead tr > th { + padding:10px; +} +.shopping-cart .btn-primary { + font-size: 13px; + padding: 8px 14px; + font-weight: 500; +} +.shopping-cart .cart-shopping-total table tbody tr td .cart-checkout-btn button { + background: #fdd922; + color: #333; + padding: 12px 25px; + font-size: 15px; + letter-spacing: 1px; + font-weight: 500; +} +.shopping-cart .cart-shopping-total table thead tr th .cart-sub-total, .shopping-cart .cart-shopping-total table thead tr th .cart-grand-total { + font-size: 16px; + font-weight: 600; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info h4 a { + color: #555; + font-weight: 500; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info .cart-product-info span { + font-weight: 500; +} +.breadcrumb { + margin-bottom: 10px; + } +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-body .accordion-inner ul li a { + font-size: 15px; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-body .accordion-inner { + margin:0px; +} +.body-content .my-wishlist-page img { + width: 100px; +} +.special-product .product .product-micro { + padding: 0 10px; +} +.top-cart-row .dropdown-cart .dropdown-menu { + width: 306px; +} +} +/* Small devices (tablets, 768px and up) */ +@media (min-width: 768px) and (max-width: 991px) { + +.table-responsive { + border: 1px solid transparent !important; + width: 100%; + margin-bottom: 15px; + overflow-x: auto; + overflow-y: hidden; +} +.product-info-block {margin-top:20px} + .shopping-cart tfoot > tr > td { padding: 10px !important; } +.shopping-cart .estimate-ship-tax table thead tr > th { + padding:10px; +} +.product-list.product .product-info .name { + margin: 0 0 10px; +} +.shopping-cart .shopping-cart-table { + margin-bottom:10px; +} +.single-product .product-info-block .name { + font-size: 35px; +} +.category-carousel .item .caption .big-text { + font-size:40px; + line-height:60px; +} +.sidebar .sidebar-module-container .sidebar-widget .sidebar-widget-body .accordion .accordion-group .accordion-body .accordion-inner { + margin:0px; +} +.shopping-cart .btn-primary { + font-size: 13px; + padding: 8px 14px; + font-weight: 500; +} +.breadcrumb { + margin-bottom: 10px; + } +td.cart-product-sub-total span { + font-weight: 500; +} +.checkout-box .checkout-steps .panel .panel-heading .unicase-checkout-title { + font-size: 14px; +} +.shopping-cart .cart-shopping-total table tbody tr td .cart-checkout-btn button { + background: #fdd922; + color: #333; + padding: 12px 25px; + font-size: 15px; + letter-spacing: 1px; + font-weight: 500; +} +.shopping-cart .cart-shopping-total table thead tr th .cart-sub-total, .shopping-cart .cart-shopping-total table thead tr th .cart-grand-total { + font-size: 16px; + font-weight: 600; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info h4 a { + color: #555; + font-weight: 500; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info .cart-product-info span { + font-weight: 500; +} + .heading-title { + margin-top: 0; +} +.body-content .sign-in-page .sign-in .social-sign-in .facebook-sign-in { + margin-bottom: 13px; +} + .main-header .top-search-holder .search-area .search-field { + width: 55%; +} +.product-tag .item { + font-size: 14px; +} + +.blog-page .tab-content .blog-post { + padding: 0px 0px 36px 0px!important; +} +.blog-page .sidebar .sidebar-module-container .sidebar-widget .blog-post h4 { + font-size: 19px; +} +.blog-page .blog-post h1 { + font-size: 26px; +} +.top-search-holder { + padding: 0 15px; +} +.category-carousel .item .buy-btn { + margin-top: 0px; +} +.filters-container .nav-tabs.nav-tab-box li a .icon { + margin-right: 5px; + color: #aaa; + font-size: 22px; + vertical-align: top; +} +.body-content .terms-conditions-page .terms-conditions h3 { + margin-bottom: 16px; +} +#myTabContent .product .product-info .name a { + color: #555; + font-size: 17px; + font-weight: 500; +} +#myTabContent .product .product-info .product-price .price { + font-size: 16px; +} +.top-bar { + border-bottom: 1px solid hsla(0,0%,100%,.2); +} +.m-t-20 { + margin-top: 20px; + text-align: center; +} +.hot-deals .cart .action { + float: none; +} +.hot-deals .cart { + text-align: center; +} + + +.section-title { + font-size: 25px; +} +#owl-main .item { + height:300px; +} +#owl-main { + height: 100%; +} +#owl-main .item .caption .big-text { + font-size: 39px; + line-height: 39px; + } + #owl-main .item .caption .slider-header { + font-size: 21px; + } + #owl-main .item .caption .button-holder { + margin: 9px 0 0; +} +.featured-product .col-lg-3 { + padding-right: 15px; + border-radius: 5px 5px 0px 0px; +} +.featured-product .section-title { + border-radius: 5px 5px 0px 0px; +} +.wide-banner .image img { + +} +.wide-banners.wow.fadeInUp.outer-bottom-xs.animated { + margin-bottom:0px; +} +.our-features-box .feature-box { + font-size: 20px; + } + .icon-truck, .icon-money, .icon-support, .icon-return { + font-size: 22px; + } + .social a { + color: #fff; + width: 25px; + height: 25px; + line-height: 25px; + } + .copyright-bar .payment-methods ul li img{width:40px;} + .copyright-bar .payment-methods ul li { + margin-right: 6px; +} +.copyright-bar .copyright { + text-align: center; + font-size: 12px; +} +.featured-product .custom-carousel .owl-controls { + display: none !important; +} +.featured-product .col-lg-9 { + border-left: none; +} +.featured-product .text-left { + padding-left:5px; +} +#owl-main .btn-primary { + border-radius: 5px; + padding: 10px 22px; +} +.btn-primary { + font-size: 13px; + } + .sidebar .side-menu nav .nav > li > .mega-menu { + min-width: 100%; + left: 0px; + top:100%!important + } + .logo-slider-inner .item { + text-align: center; + } + .filters-container .filter-tabs, + .filters-container .lbl-cnt, + .filters-container .pagination-container { + margin-bottom: 10px; + } + .filters-container .pagination-container { + float: right; + } + .homepage-container .wide-banners .wide-banner { + margin-bottom: 10px; + } + .cnt-homepage .wrapper .box { + padding: 0 15px; + } + .cnt-homepage .container { + width: 100%; + } + .body-content .sidebar { + margin-bottom: 30px; + } + .product .product-image .image img { + width: 100%; + height: auto; + display: block; + } + .blog-slider .image img { + width: 100%; + height: auto; + display: block; + } + .sidebar-module-container.owl-item { + padding: 10px; + } + #owl-main .owl-item { + padding: 0px; + } + .wide-banners .wide-banner1 { + margin-bottom:30px + + } + .filters-container .no-padding { + padding: 0px; + } + .search-result-container .category-product-inner .product-list.product .product-info { + padding: 0px; + } + .hot-deal-wrapper .image img { + width: 100%; + height: auto; + display: block; + } + .main-header .logo-holder { + margin-bottom: 20px; + } + .main-header .contact-row { + text-align: center; + } + .special-menu {display:none!important} + .body-content .sidebar { + margin-bottom: 30px; + + } +.scroll-tabs .nav-tab-line li a { + padding: 0 10px !important; + } + .scroll-tabs .nav-tab-line { + margin-right: 84px; + margin-top: 7px; + float: left; +} +.product .product-info .name a { + color: #555; + font-size: 16px; + font-weight: 500; +} +.hot-deals .product-info .name a { + font-weight: 500; +} +.homebanner-holder { + +} +.our-features-box li { + width:50%; +} +.our-features-box .feature-box .content-blocks { + text-align: left; + font-size: 20px; +} +.icon-truck, .icon-money, .icon-support, .icon-return { + float: left; +} + .sidebar .side-menu nav .nav > li > a { + font-size: 16px; +} +.sidebar .side-menu nav .nav > li > .mega-menu .yamm-content ul > li > a { + font-size: 15px; + padding: 3px; + border-bottom: 1px solid #eaeaea; +} +.copyright-bar .copyright { + text-align: left; +} +.wide-banners.wow.fadeInUp.outer-bottom-xs.animated { + text-align: -webkit-center; +} +.top-bar .cnt-block { + float: left; +} +.hot-deals .hot-deal-wrapper .timing-wrapper .box-wrapper { + margin-bottom: 10px; +} +.hot-deals .hot-deal-wrapper .timing-wrapper { + float: none; + width: 19%; + bottom: 0; +} +.our-features-box .feature-box { + text-align: left; + padding: 5px 0; +} +.our-features-box .container { + padding: 0px; + width: 80%; +} +.hot-deals .item { + padding: 0 0px; +} + +.product-info-block .m-t-20 { + text-align: left; +} +.single-product .featured-product .ad-imgs img { + width: 50%; + /* position: absolute; */ + float: left; + padding-right: 10px; +} + +.breadcrumb-inner { + padding: 6px 0 0; +} +.single-product .featured-product .ad-imgs { + padding: 22px 24px; +} +.single-product .rht-col .featured-product .item-carousel { + padding: 16px 15px; +} + +} +/* Medium devices (desktops, 992px and up) */ +@media (min-width: 992px) and (max-width: 1199px) { + + + + + .shopping-cart tfoot > tr > td { padding: 10px !important; } +.shopping-cart .estimate-ship-tax table thead tr > th { + padding:10px; +} +.product-list.product .product-info .name { + margin: 0 0 10px; +} +.breadcrumb { + margin-bottom: 10px; + } +.shopping-cart .shopping-cart-table { + margin-bottom:10px; +} +.shopping-cart .btn-primary { + font-size: 13px; + padding: 8px 14px; + font-weight: 500; +} +.shopping-cart .shopping-cart-table table tbody tr td { + vertical-align: middle; + font-weight: 500; +} +td.cart-product-sub-total span { + font-weight: 500; +} + + + +.shopping-cart .cart-shopping-total table tbody tr td .cart-checkout-btn button { + background: #fdd922; + color: #333; + padding: 12px 25px; + font-size: 15px; + letter-spacing: 1px; + font-weight: 500; +} +.shopping-cart .cart-shopping-total table thead tr th .cart-sub-total, .shopping-cart .cart-shopping-total table thead tr th .cart-grand-total { + font-size: 16px; + font-weight: 600; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info h4 a { + color: #555; + font-weight: 500; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info .cart-product-info span { + font-weight: 500; +} + .breadcrumb-inner { + padding: 6px 0 0; +} +.body-content .sign-in-page .sign-in .social-sign-in .facebook-sign-in { + margin-bottom: 13px; +} +.hot-deals .hot-deal-wrapper .timing-wrapper { + float: none; + width: 19%; +} +.hot-deals .hot-deal-wrapper .timing-wrapper .box-wrapper { + margin-bottom: 10px; +} +.body-content .terms-conditions-page .terms-conditions h3 { + margin-bottom: 16px; +} +.single-product .featured-product .ad-imgs { + padding:15px; +} +.single-product .featured-product .ad-imgs img { + width: 50%; + float: left; + padding: 0 10px; + padding-bottom: 15px; +} + #myTabContent .product .product-info .name a { + color: #555; + font-size: 17px; + font-weight: 500; +} + .hot-deals .hot-deal-wrapper .timing-wrapper { + float: none; + width: 19%; + bottom: 0; +} +.hot-deals .hot-deal-wrapper .timing-wrapper .box-wrapper { + margin-bottom: 10px; + margin-right: 0; +} + .header-style-1 .header-nav .navbar-default .navbar-collapse .navbar-nav > li > a { + font-size: 16px; + } + .top-bar .cnt-block { + float: left; +} + .main-header .top-search-holder .search-area .control-group { + position: relative; + } + .top-search-holder { + padding: 0 15px; +} +.main-header .top-search-holder .search-area .search-field { + width: 43%; + } + .main-header .top-search-holder .search-area .control-group .search-button { + position: absolute; + top: 0px; + right: 0px; + } + .top-bar { + border-bottom: 1px solid hsla(0,0%,100%,.2); +} +.category-carousel .item .caption .big-text { + font-size: 94px; + line-height: 115px; +} +.category-carousel .item .buy-btn { + margin-top: 0px; +} + + +.main-header .logo-holder { + text-align: center; +} +#owl-main .item { + height: 420px; +} +#owl-main { + height: 420px; +} +.sidebar .side-menu nav .nav > li > .mega-menu .yamm-content .dropdown-banner-holder { + position: absolute; + right: 79px; + top: -8px; +} +.featured-product .col-lg-9 { + border-left: none; + padding-left: 25px; +} +.featured-product .products {margin-right:0px} + +.featured-product .product-image { + padding: 0 15px; +} +.featured-product .text-left { + padding-left: 15px; +} +.featured-product .custom-carousel .owl-controls { + display: none !important; +} +owl-main .item .caption .excerpt, #owl-main .item .caption .small { + font-size: 17px; + } + .featured-product .section-title { + border-radius: 5px 5px 0px 0px; +} +.featured-product .col-lg-3 { + padding-right: 15px; +} +#owl-main .item .caption .slider-header { + font-size: 23px; + } + .cnt-strip .strip h2 { + font-size:20px; + } + .cnt-strip .strip h2 .shopping-needs { + font-size: 14px; +} +.main-header .logo-holder { + margin-top:11px; +} +.copyright-bar .payment-methods ul li { + margin-right: 1px; +} +.social a { + color: #fff; + width: 35px; + height: 35px; + line-height: 35px; +} + .category-carousel .item { + height: auto; + } + .filters-container .nav-tabs.nav-tab-box li { + margin-right: 3px; + } + .filters-container .lbl-cnt .lbl { + margin-right: -1px; + } + .cnt-homepage .single-product .product-info-block .cart { + clear: both; + margin-top: 20px; + } + .shopping-cart .estimate-ship-tax table thead tr th .estimate-title { + font-size: 16px !important; + } + .shopping-cart .cart-shopping-total table thead tr th .cart-sub-total, + .shopping-cart .cart-shopping-total table thead tr th .cart-grand-total { + font-size: 16px !important; + } + .wrapper .box .wrapper-inner .container { + width: auto !important; + } + + .special-menu {display:none!important} + .home-banner img {width:100%} + .sidebar .side-menu nav .nav > li > .mega-menu .yamm-content ul > li { + width: 35%; + float: left; +} +} + +@media (min-width:1200px) and (max-width:1300px) { + + + + .shopping-cart tfoot > tr > td { padding: 10px !important; } +.shopping-cart .estimate-ship-tax table thead tr > th { + padding:10px; +} +li.dropdown.navbar-right.special-menu { + display: none; +} +.breadcrumb { + margin-bottom: 10px; + } +.shopping-cart .shopping-cart-table { + margin-bottom:10px; +} +.shopping-cart .btn-primary { + font-size: 13px; + padding: 8px 14px; + font-weight: 500; +} +.shopping-cart .shopping-cart-table table tbody tr td { + vertical-align: middle; + font-weight: 500; +} +td.cart-product-sub-total span { + font-weight: 500; +} +.shopping-cart .cart-shopping-total table tbody tr td .cart-checkout-btn button { + background: #fdd922; + color: #333; + padding: 12px 25px; + font-size: 15px; + letter-spacing: 1px; + font-weight: 500; +} +.shopping-cart .cart-shopping-total table thead tr th .cart-sub-total, .shopping-cart .cart-shopping-total table thead tr th .cart-grand-total { + font-size: 16px; + font-weight: 600; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info h4 a { + color: #555; + font-weight: 500; +} +.shopping-cart .shopping-cart-table table tbody tr .cart-product-name-info .cart-product-info span { + font-weight: 500; +} +.shopping-cart .shopping-cart-table table tbody tr td { + vertical-align: middle; + font-weight: 500; +} +.top-bar .cnt-block { + float: left; +} +.special-menu { + display: none!important; +} +.main-header .logo-holder { + margin-top: 11px; +} +.main-header .logo-holder { + text-align: center; +} +.top-bar { + border-bottom: 1px solid hsla(0,0%,100%,.2); +} +.featured-product .section-title { + font-size: 18px; + padding: 10px 15px; +} +.featured-product .sub-cat li { + padding: 0px 0px; + font-size: 15px; + line-height: 25px; +} +.featured-product .sub-cat { + padding-top: 0px; + padding-left: 15px; +} +.featured-product .custom-carousel .owl-controls .owl-next { + left: -30px; + top: 27px; +} +.featured-product .custom-carousel .owl-controls .owl-prev { + left: -55px; + top: 28px; +} +.cnt-strip .strip h2 .shopping-needs { + font-size: 20px; +} +.cnt-strip .strip h2 { + font-size:30px; +} +.category-carousel .item .caption .big-text { + font-size: 89px; + line-height: 72px; +} +.category-product .text-left { + text-align: center; +} +#product-tabs-slider .text-left { + text-align: center; +} + +} +/* Large devices (large desktops, 1200px and up) */ +@media (min-width:1300px) and (max-width:1500px) { +li.dropdown.navbar-right.special-menu { + display: none; +} + +.category-carousel .item .caption .big-text { + font-size: 90px; + line-height: 100px; +} + +.category-carousel .item .buy-btn {display:none} +.filters-container .lbl-cnt .lbl {display:none} + +} + +@media(min-width: 1300px){ + .container { + padding: 0 60px; + width:auto + } + +} + +@media(min-width: 1600px){ + .container { + padding: 0 120px; + width:auto + } + +} + +/*===================================================================================*/ +/* Testimonials +/*===================================================================================*/ + +.avatar {margin-top:10px; text-align:center; overflow:hidden; margin-bottom:10px} +.avatar img {border-radius:0px; margin-bottom:10px; width:auto; display:inline-block; width:110px; border-radius:999px } +.testimonials {color:#333;font-size:14px; margin-bottom:15px; letter-spacing:0.5px; text-align:center} +.clients_author {font-size:14px; font-weight:bold; color:#333; letter-spacing:0.5px; display:block; text-align:center} +.clients_author span{font-size:13px; font-weight:normal; color:#999; display:block;} +.testimonials-section .bx-wrapper .bx-pager {padding-top: 30px;} +.testimonials-section .bx-wrapper {margin: 0 0 50px;} +.testimonials-section em {font-size:30px; font-style:normal; vertical-align:top; display:inline-block; line-height:5px; margin-top:15px; font-family: Arial, Helvetica, sans-serif;} + +/*===================================================================================*/ +/* LHS banners +/*===================================================================================*/ + +.home-banner { margin-top: 30px;} +.home-banner img {border-radius:5px} \ No newline at end of file diff --git a/assets/styles/frontend/radio.css b/assets/styles/frontend/radio.css new file mode 100644 index 0000000..c009c39 --- /dev/null +++ b/assets/styles/frontend/radio.css @@ -0,0 +1,91 @@ + .radio { + padding-left: 20px; } + .radio label { + display: inline-block; + position: relative; + padding-left: 5px; } + .radio label::before { + content: ""; + display: inline-block; + position: absolute; + width: 17px; + height: 17px; + left: 0; + margin-left: -20px; + border: 1px solid #cccccc; + border-radius: 50%; + background-color: #fff; + -webkit-transition: border 0.15s ease-in-out; + -o-transition: border 0.15s ease-in-out; + transition: border 0.15s ease-in-out; } + .radio label::after { + display: inline-block; + position: absolute; + content: " "; + width: 11px; + height: 11px; + left: 3px; + top: 3px; + margin-left: -20px; + border-radius: 50%; + background-color: #555555; + -webkit-transform: scale(0, 0); + -ms-transform: scale(0, 0); + -o-transform: scale(0, 0); + transform: scale(0, 0); + -webkit-transition: -webkit-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + -moz-transition: -moz-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + -o-transition: -o-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + transition: transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); } + .radio input[type="radio"] { + opacity: 0; } + .radio input[type="radio"]:focus + label::before { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; } + .radio input[type="radio"]:checked + label::after { + -webkit-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); } + .radio input[type="radio"]:disabled + label { + opacity: 0.65; } + .radio input[type="radio"]:disabled + label::before { + cursor: not-allowed; } + .radio.radio-inline { + margin-top: 0; } + + .radio-primary input[type="radio"] + label::after { + background-color: #428bca; } + .radio-primary input[type="radio"]:checked + label::before { + border-color: #428bca; } + .radio-primary input[type="radio"]:checked + label::after { + background-color: #428bca; } + + .radio-danger input[type="radio"] + label::after { + background-color: #d9534f; } + .radio-danger input[type="radio"]:checked + label::before { + border-color: #d9534f; } + .radio-danger input[type="radio"]:checked + label::after { + background-color: #d9534f; } + + .radio-info input[type="radio"] + label::after { + background-color: #5bc0de; } + .radio-info input[type="radio"]:checked + label::before { + border-color: #5bc0de; } + .radio-info input[type="radio"]:checked + label::after { + background-color: #5bc0de; } + + .radio-warning input[type="radio"] + label::after { + background-color: #f0ad4e; } + .radio-warning input[type="radio"]:checked + label::before { + border-color: #f0ad4e; } + .radio-warning input[type="radio"]:checked + label::after { + background-color: #f0ad4e; } + + .radio-success input[type="radio"] + label::after { + background-color: #5cb85c; } + .radio-success input[type="radio"]:checked + label::before { + border-color: #5cb85c; } + .radio-success input[type="radio"]:checked + label::after { + background-color: #5cb85c; } \ No newline at end of file diff --git a/assets/styles/frontend/rateit.scss b/assets/styles/frontend/rateit.scss new file mode 100644 index 0000000..918e22e --- /dev/null +++ b/assets/styles/frontend/rateit.scss @@ -0,0 +1,133 @@ + +/*===================================================================================*/ +/* Rating CSS +/*===================================================================================*/ + +.rateit { + display: -moz-inline-box; + display: inline-block; + position: relative; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -o-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-touch-callout: none; +} + +.rateit .rateit-range +{ + position: relative; + display: -moz-inline-box; + display: inline-block; + background: url(../../../public/images/font/star.html); + height: 14px; + outline: none; +} + +.rateit-small .rateit-range +{ + position: relative; + display: -moz-inline-box; + display: inline-block; + background: url(../../../public/images/font/star-small.png); + height: 14px; + outline: none; +} + +.rateit .rateit-range * { + display:block; +} + +/* for IE 6 */ +* html .rateit, * html .rateit .rateit-range +{ + display: inline; +} + +/* for IE 7 */ +* + html .rateit, * + html .rateit .rateit-range +{ + display: inline; +} + +.rateit .rateit-hover, .rateit .rateit-selected +{ + position: absolute; + left: 0px; +} + +.rateit .rateit-hover-rtl, .rateit .rateit-selected-rtl +{ + left: auto; + right: 0px; +} + +.rateit .rateit-hover +{ + background: url(../../../public/images/font/star.html) left -28px; +} + +.rateit-small .rateit-hover +{ + background: url(../../../public/images/font/star-small.png) left -328px; +} + +.rateit .rateit-hover-rtl +{ + background-position: right -28px; +} + +.rateit .rateit-selected +{ + background: url(../../../public/images/font/star.html) left -14px; +} + +.rateit-small .rateit-selected +{ + background: url(../../../public/images/font/star-small.png) left -14px; +} + +.rateit .rateit-selected-rtl +{ + background-position: right -14px; +} + +.rateit .rateit-preset +{ + background: url(../../../public/images/font/star.html) left -48px; +} + +.rateit .rateit-preset-rtl +{ + background: url(../../../public/images/font/star.html) left -48px; +} + +.rateit-small .rateit-preset +{ + background: url(../../../public/images/font/star-small.png) left -48px; +} + +.rateit-small .rateit-preset-rtl +{ + background: url(../../../public/images/font/star-small.png) left -48px; +} + +.rateit button.rateit-reset +{ + background: url(../../../public/images/font/delete.gif) 0 0; + width: 14px; + height: 14px; + display: -moz-inline-box; + display: inline-block; + float: left; + outline: none; + border:none; + padding: 0; +} + +.rateit button.rateit-reset:hover, .rateit button.rateit-reset:focus +{ + background-position: 0 -14px; +} diff --git a/assets/styles/googleapis/barlow.css b/assets/styles/googleapis/barlow.css new file mode 100644 index 0000000..fc7dc7b --- /dev/null +++ b/assets/styles/googleapis/barlow.css @@ -0,0 +1,240 @@ +/* vietnamese */ +@font-face { + font-family: 'Barlow'; + font-style: italic; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHsv4kjgoGqM7E_CfOQ4mohvTobdw.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Barlow'; + font-style: italic; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHsv4kjgoGqM7E_CfOQ4mogvTobdw.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Barlow'; + font-style: italic; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHsv4kjgoGqM7E_CfOQ4mouvTo.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* vietnamese */ +@font-face { + font-family: 'Barlow'; + font-style: italic; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHrv4kjgoGqM7E_Cfs0wH8RnA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Barlow'; + font-style: italic; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHrv4kjgoGqM7E_Cfs1wH8RnA.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Barlow'; + font-style: italic; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHrv4kjgoGqM7E_Cfs7wH8.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* vietnamese */ +@font-face { + font-family: 'Barlow'; + font-style: italic; + font-weight: 500; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHsv4kjgoGqM7E_CfPI42ohvTobdw.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Barlow'; + font-style: italic; + font-weight: 500; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHsv4kjgoGqM7E_CfPI42ogvTobdw.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Barlow'; + font-style: italic; + font-weight: 500; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHsv4kjgoGqM7E_CfPI42ouvTo.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* vietnamese */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 200; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E3w-os6FospT4.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 200; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E3w-os6VospT4.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 200; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E3w-os51os.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* vietnamese */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E3p-ks6FospT4.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E3p-ks6VospT4.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E3p-ks51os.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* vietnamese */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHpv4kjgoGqM7E_A8s52Hs.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHpv4kjgoGqM7E_Ass52Hs.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHpv4kjgoGqM7E_DMs5.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* vietnamese */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 500; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E3_-gs6FospT4.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 500; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E3_-gs6VospT4.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 500; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E3_-gs51os.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* vietnamese */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E30-8s6FospT4.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E30-8s6VospT4.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E30-8s51os.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* vietnamese */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E3t-4s6FospT4.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E3t-4s6VospT4.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E3t-4s51os.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* vietnamese */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 800; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E3q-0s6FospT4.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 800; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E3q-0s6VospT4.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Barlow'; + font-style: normal; + font-weight: 800; + src: url(https://fonts.gstatic.com/s/barlow/v12/7cHqv4kjgoGqM7E3q-0s51os.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/assets/styles/googleapis/montserrat.css b/assets/styles/googleapis/montserrat.css new file mode 100644 index 0000000..8a1bad5 --- /dev/null +++ b/assets/styles/googleapis/montserrat.css @@ -0,0 +1,80 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUSjIg1_i6t8kCHKm459WRhyzbi.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUSjIg1_i6t8kCHKm459W1hyzbi.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUSjIg1_i6t8kCHKm459WZhyzbi.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUSjIg1_i6t8kCHKm459Wdhyzbi.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUSjIg1_i6t8kCHKm459Wlhyw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUSjIg1_i6t8kCHKm459WRhyzbi.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUSjIg1_i6t8kCHKm459W1hyzbi.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUSjIg1_i6t8kCHKm459WZhyzbi.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUSjIg1_i6t8kCHKm459Wdhyzbi.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUSjIg1_i6t8kCHKm459Wlhyw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/assets/styles/googleapis/nunito.css b/assets/styles/googleapis/nunito.css new file mode 100644 index 0000000..18727e2 --- /dev/null +++ b/assets/styles/googleapis/nunito.css @@ -0,0 +1,560 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 200; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaORs71cA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 200; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaHRs71cA.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 200; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaMRs71cA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 200; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaNRs71cA.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 200; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaDRs4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaORs71cA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaHRs71cA.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaMRs71cA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaNRs71cA.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaDRs4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaORs71cA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaHRs71cA.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaMRs71cA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaNRs71cA.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaDRs4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaORs71cA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaHRs71cA.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaMRs71cA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaNRs71cA.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaDRs4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaORs71cA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaHRs71cA.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaMRs71cA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaNRs71cA.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaDRs4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 800; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaORs71cA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 800; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaHRs71cA.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 800; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaMRs71cA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 800; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaNRs71cA.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 800; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaDRs4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 900; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaORs71cA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 900; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaHRs71cA.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 900; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaMRs71cA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 900; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaNRs71cA.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Nunito'; + font-style: italic; + font-weight: 900; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXX3I6Li01BKofIMNaDRs4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 200; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIOOaBXso.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 200; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIMeaBXso.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 200; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIOuaBXso.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 200; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIO-aBXso.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 200; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofINeaB.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIOOaBXso.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIMeaBXso.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIOuaBXso.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIO-aBXso.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofINeaB.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIOOaBXso.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIMeaBXso.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIOuaBXso.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIO-aBXso.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofINeaB.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIOOaBXso.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIMeaBXso.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIOuaBXso.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIO-aBXso.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofINeaB.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIOOaBXso.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIMeaBXso.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIOuaBXso.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIO-aBXso.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofINeaB.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 800; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIOOaBXso.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 800; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIMeaBXso.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 800; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIOuaBXso.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 800; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIO-aBXso.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 800; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofINeaB.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 900; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIOOaBXso.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 900; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIMeaBXso.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 900; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIOuaBXso.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 900; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofIO-aBXso.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 900; + src: url(https://fonts.gstatic.com/s/nunito/v25/XRXV3I6Li01BKofINeaB.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/assets/styles/googleapis/open_sans.css b/assets/styles/googleapis/open_sans.css new file mode 100644 index 0000000..9cbf3c2 --- /dev/null +++ b/assets/styles/googleapis/open_sans.css @@ -0,0 +1,576 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtE6F15M.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWvU6F15M.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtU6F15M.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuk6F15M.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* hebrew */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWu06F15M.woff2) format('woff2'); + unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtk6F15M.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWt06F15M.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuU6F.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtE6F15M.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWvU6F15M.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtU6F15M.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuk6F15M.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* hebrew */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWu06F15M.woff2) format('woff2'); + unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtk6F15M.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWt06F15M.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuU6F.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtE6F15M.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWvU6F15M.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtU6F15M.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuk6F15M.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* hebrew */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWu06F15M.woff2) format('woff2'); + unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtk6F15M.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWt06F15M.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuU6F.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* hebrew */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2) format('woff2'); + unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* hebrew */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2) format('woff2'); + unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* hebrew */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2) format('woff2'); + unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* hebrew */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2) format('woff2'); + unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* hebrew */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2) format('woff2'); + unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + font-stretch: 100%; + src: url(https://fonts.gstatic.com/s/opensans/v35/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/assets/styles/googleapis/roboto.css b/assets/styles/googleapis/roboto.css new file mode 100644 index 0000000..6d0b80e --- /dev/null +++ b/assets/styles/googleapis/roboto.css @@ -0,0 +1,224 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fCRc4EsA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fABc4EsA.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fCBc4EsA.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fBxc4EsA.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fCxc4EsA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmSU5fBBc4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fCRc4EsA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fABc4EsA.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fCBc4EsA.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fBxc4EsA.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fCxc4EsA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fChc4EsA.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmEU9fBBc4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2) format('woff2'); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfBBc4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/bin/console b/bin/console new file mode 100755 index 0000000..d8d530e --- /dev/null +++ b/bin/console @@ -0,0 +1,21 @@ +#!/usr/bin/env php += 80000) { + require dirname(__DIR__).'/vendor/phpunit/phpunit/phpunit'; + } else { + define('PHPUNIT_COMPOSER_INSTALL', dirname(__DIR__).'/vendor/autoload.php'); + require PHPUNIT_COMPOSER_INSTALL; + PHPUnit\TextUI\Command::main(); + } +} else { + if (!is_file(dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit.php')) { + echo "Unable to find the `simple-phpunit.php` script in `vendor/symfony/phpunit-bridge/bin/`.\n"; + exit(1); + } + + require dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit.php'; +} diff --git a/composer.json b/composer.json new file mode 100755 index 0000000..624f6ff --- /dev/null +++ b/composer.json @@ -0,0 +1,115 @@ +{ + "type": "project", + "license": "proprietary", + "minimum-stability": "stable", + "prefer-stable": true, + "require": { + "php": ">=8.2", + "ext-ctype": "*", + "ext-iconv": "*", + "bw/active-menu-item-bundle": "^1.2", + "doctrine/dbal": "^3", + "doctrine/doctrine-bundle": "^2.18", + "doctrine/doctrine-migrations-bundle": "^3.4", + "doctrine/orm": "^3.5", + "dompdf/dompdf": "^3.1", + "friendsofsymfony/ckeditor-bundle": "^2.6", + "phpdocumentor/reflection-docblock": "^5.6", + "phpstan/phpdoc-parser": "^2.2", + "snapappointments/bootstrap-select": "^1.13", + "symfony/asset": "7.3.*", + "symfony/asset-mapper": "7.3.*", + "symfony/console": "7.3.*", + "symfony/doctrine-messenger": "7.3.*", + "symfony/dotenv": "7.3.*", + "symfony/expression-language": "7.3.*", + "symfony/flex": "^2", + "symfony/form": "7.3.*", + "symfony/framework-bundle": "7.3.*", + "symfony/http-client": "7.3.*", + "symfony/intl": "7.3.*", + "symfony/mailer": "7.3.*", + "symfony/mime": "7.3.*", + "symfony/monolog-bundle": "^3.0", + "symfony/notifier": "7.3.*", + "symfony/process": "7.3.*", + "symfony/property-access": "7.3.*", + "symfony/property-info": "7.3.*", + "symfony/runtime": "7.3.*", + "symfony/security-bundle": "7.3.*", + "symfony/serializer": "7.3.*", + "symfony/stimulus-bundle": "^2.29", + "symfony/string": "7.3.*", + "symfony/translation": "7.3.*", + "symfony/twig-bundle": "7.3.*", + "symfony/ux-turbo": "^2.29", + "symfony/validator": "7.3.*", + "symfony/web-link": "7.3.*", + "symfony/webpack-encore-bundle": "^2.3", + "symfony/yaml": "7.3.*", + "twbs/bootstrap": "^5.3", + "twig/extra-bundle": "^2.12|^3.0", + "twig/twig": "^2.12|^3.0" + }, + "config": { + "allow-plugins": { + "php-http/discovery": true, + "symfony/flex": true, + "symfony/runtime": true + }, + "bump-after-update": true, + "sort-packages": true + }, + "autoload": { + "psr-4": { + "App\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "App\\Tests\\": "tests/" + } + }, + "replace": { + "symfony/polyfill-ctype": "*", + "symfony/polyfill-iconv": "*", + "symfony/polyfill-php72": "*", + "symfony/polyfill-php73": "*", + "symfony/polyfill-php74": "*", + "symfony/polyfill-php80": "*", + "symfony/polyfill-php81": "*", + "symfony/polyfill-php82": "*" + }, + "scripts": { + "auto-scripts": { + "cache:clear": "symfony-cmd", + "assets:install %PUBLIC_DIR%": "symfony-cmd", + "importmap:install": "symfony-cmd", + "ckeditor:install": "symfony-cmd" + }, + "post-install-cmd": [ + "@auto-scripts" + ], + "post-update-cmd": [ + "@auto-scripts" + ] + }, + "conflict": { + "symfony/symfony": "*" + }, + "extra": { + "symfony": { + "allow-contrib": false, + "require": "7.3.*" + } + }, + "require-dev": { + "phpunit/phpunit": "^12.3", + "symfony/browser-kit": "7.3.*", + "symfony/css-selector": "7.3.*", + "symfony/debug-bundle": "7.3.*", + "symfony/maker-bundle": "^1.0", + "symfony/stopwatch": "7.3.*", + "symfony/web-profiler-bundle": "7.3.*" + } +} diff --git a/composer.lock b/composer.lock new file mode 100755 index 0000000..8edd0a6 --- /dev/null +++ b/composer.lock @@ -0,0 +1,10473 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "892948585d1d0da77140ca5096872045", + "packages": [ + { + "name": "bw/active-menu-item-bundle", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/bocharsky-bw/ActiveMenuItemBundle.git", + "reference": "cbacbde9b65bdc32832e997924bbc61f7c27a2e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bocharsky-bw/ActiveMenuItemBundle/zipball/cbacbde9b65bdc32832e997924bbc61f7c27a2e8", + "reference": "cbacbde9b65bdc32832e997924bbc61f7c27a2e8", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/framework-bundle": "^4.4|^5.4|^6.0|^7.0", + "symfony/twig-bundle": "^4.4|^5.4|^6.0|^7.0", + "twig/twig": "^2.0|^3.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "BW\\ActiveMenuItemBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Victor Bocharsky", + "email": "bocharsky.bw@gmail.com" + } + ], + "description": "The active menu item highlighting of simple HTML menu in Symfony applications", + "homepage": "https://github.com/bocharsky-bw/ActiveMenuItemBundle", + "keywords": [ + "active", + "bw", + "highlight", + "item", + "menu" + ], + "support": { + "issues": "https://github.com/bocharsky-bw/ActiveMenuItemBundle/issues", + "source": "https://github.com/bocharsky-bw/ActiveMenuItemBundle/tree/v1.2.0" + }, + "time": "2024-01-17T10:03:37+00:00" + }, + { + "name": "composer/semver", + "version": "3.4.4", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.4" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + } + ], + "time": "2025-08-20T19:15:30+00:00" + }, + { + "name": "doctrine/collections", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/2eb07e5953eed811ce1b309a7478a3b236f2273d", + "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1", + "php": "^8.1", + "symfony/polyfill-php84": "^1.30" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "ext-json": "*", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Collections\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", + "homepage": "https://www.doctrine-project.org/projects/collections.html", + "keywords": [ + "array", + "collections", + "iterators", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/2.3.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcollections", + "type": "tidelift" + } + ], + "time": "2025-03-22T10:17:19+00:00" + }, + { + "name": "doctrine/dbal", + "version": "3.10.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "3626601014388095d3af9de7e9e958623b7ef005" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/3626601014388095d3af9de7e9e958623b7ef005", + "reference": "3626601014388095d3af9de7e9e958623b7ef005", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/deprecations": "^0.5.3|^1", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" + }, + "conflict": { + "doctrine/cache": "< 1.11" + }, + "require-dev": { + "doctrine/cache": "^1.11|^2.0", + "doctrine/coding-standard": "13.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "2.1.17", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "9.6.23", + "slevomat/coding-standard": "8.16.2", + "squizlabs/php_codesniffer": "3.13.1", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/console": "^4.4|^5.4|^6.0|^7.0" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/3.10.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", + "type": "tidelift" + } + ], + "time": "2025-08-05T12:18:06+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "1.1.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=13" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^12 || ^13", + "phpstan/phpstan": "1.4.10 || 2.1.11", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "psr/log": "^1 || ^2 || ^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.5" + }, + "time": "2025-04-07T20:06:18+00:00" + }, + { + "name": "doctrine/doctrine-bundle", + "version": "2.18.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineBundle.git", + "reference": "cd5d4da6a5f7cf3d8708e17211234657b5eb4e95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/cd5d4da6a5f7cf3d8708e17211234657b5eb4e95", + "reference": "cd5d4da6a5f7cf3d8708e17211234657b5eb4e95", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^3.7.0 || ^4.0", + "doctrine/deprecations": "^1.0", + "doctrine/persistence": "^3.1 || ^4", + "doctrine/sql-formatter": "^1.0.1", + "php": "^8.1", + "symfony/cache": "^6.4 || ^7.0", + "symfony/config": "^6.4 || ^7.0", + "symfony/console": "^6.4 || ^7.0", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/doctrine-bridge": "^6.4.3 || ^7.0.3", + "symfony/framework-bundle": "^6.4 || ^7.0", + "symfony/service-contracts": "^2.5 || ^3" + }, + "conflict": { + "doctrine/annotations": ">=3.0", + "doctrine/cache": "< 1.11", + "doctrine/orm": "<2.17 || >=4.0", + "symfony/var-exporter": "< 6.4.1 || 7.0.0", + "twig/twig": "<2.13 || >=3.0 <3.0.4" + }, + "require-dev": { + "doctrine/annotations": "^1 || ^2", + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^14", + "doctrine/orm": "^2.17 || ^3.1", + "friendsofphp/proxy-manager-lts": "^1.0", + "phpstan/phpstan": "2.1.1", + "phpstan/phpstan-phpunit": "2.0.3", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.53 || ^12.3.10", + "psr/log": "^1.1.4 || ^2.0 || ^3.0", + "symfony/doctrine-messenger": "^6.4 || ^7.0", + "symfony/expression-language": "^6.4 || ^7.0", + "symfony/messenger": "^6.4 || ^7.0", + "symfony/property-info": "^6.4 || ^7.0", + "symfony/security-bundle": "^6.4 || ^7.0", + "symfony/stopwatch": "^6.4 || ^7.0", + "symfony/string": "^6.4 || ^7.0", + "symfony/twig-bridge": "^6.4 || ^7.0", + "symfony/validator": "^6.4 || ^7.0", + "symfony/var-exporter": "^6.4.1 || ^7.0.1", + "symfony/web-profiler-bundle": "^6.4 || ^7.0", + "symfony/yaml": "^6.4 || ^7.0", + "twig/twig": "^2.14.7 || ^3.0.4" + }, + "suggest": { + "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", + "ext-pdo": "*", + "symfony/web-profiler-bundle": "To use the data collector." + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\DoctrineBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Doctrine Project", + "homepage": "https://www.doctrine-project.org/" + } + ], + "description": "Symfony DoctrineBundle", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "database", + "dbal", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineBundle/issues", + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.18.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-bundle", + "type": "tidelift" + } + ], + "time": "2025-10-11T04:43:27+00:00" + }, + { + "name": "doctrine/doctrine-migrations-bundle", + "version": "3.4.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", + "reference": "5a6ac7120c2924c4c070a869d08b11ccf9e277b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/5a6ac7120c2924c4c070a869d08b11ccf9e277b9", + "reference": "5a6ac7120c2924c4c070a869d08b11ccf9e277b9", + "shasum": "" + }, + "require": { + "doctrine/doctrine-bundle": "^2.4", + "doctrine/migrations": "^3.2", + "php": "^7.2 || ^8.0", + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "composer/semver": "^3.0", + "doctrine/coding-standard": "^12", + "doctrine/orm": "^2.6 || ^3", + "phpstan/phpstan": "^1.4 || ^2", + "phpstan/phpstan-deprecation-rules": "^1 || ^2", + "phpstan/phpstan-phpunit": "^1 || ^2", + "phpstan/phpstan-strict-rules": "^1.1 || ^2", + "phpstan/phpstan-symfony": "^1.3 || ^2", + "phpunit/phpunit": "^8.5 || ^9.5", + "symfony/phpunit-bridge": "^6.3 || ^7", + "symfony/var-exporter": "^5.4 || ^6 || ^7" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\MigrationsBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Doctrine Project", + "homepage": "https://www.doctrine-project.org" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DoctrineMigrationsBundle", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "dbal", + "migrations", + "schema" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.4.2" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-migrations-bundle", + "type": "tidelift" + } + ], + "time": "2025-03-11T17:36:26+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e", + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/common": "<2.9" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^10.5", + "vimeo/psalm": "^5.24" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/2.0.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2024-05-22T20:47:39+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.1.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2025-08-10T19:31:58+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:23:10+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:56:58+00:00" + }, + { + "name": "doctrine/migrations", + "version": "3.9.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/migrations.git", + "reference": "1b88fcb812f2cd6e77c83d16db60e3cf1e35c66c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/1b88fcb812f2cd6e77c83d16db60e3cf1e35c66c", + "reference": "1b88fcb812f2cd6e77c83d16db60e3cf1e35c66c", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/dbal": "^3.6 || ^4", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2.0", + "php": "^8.1", + "psr/log": "^1.1.3 || ^2 || ^3", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", + "symfony/var-exporter": "^6.2 || ^7.0" + }, + "conflict": { + "doctrine/orm": "<2.12 || >=4" + }, + "require-dev": { + "doctrine/coding-standard": "^13", + "doctrine/orm": "^2.13 || ^3", + "doctrine/persistence": "^2 || ^3 || ^4", + "doctrine/sql-formatter": "^1.0", + "ext-pdo_sqlite": "*", + "fig/log-test": "^1", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-phpunit": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpstan/phpstan-symfony": "^2", + "phpunit/phpunit": "^10.3 || ^11.0 || ^12.0", + "symfony/cache": "^5.4 || ^6.0 || ^7.0", + "symfony/process": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + }, + "suggest": { + "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", + "symfony/yaml": "Allows the use of yaml for migration configuration files." + }, + "bin": [ + "bin/doctrine-migrations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Migrations\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Michael Simonson", + "email": "contact@mikesimonson.com" + } + ], + "description": "PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying changes to it. It is a very easy to use and a powerful tool.", + "homepage": "https://www.doctrine-project.org/projects/migrations.html", + "keywords": [ + "database", + "dbal", + "migrations" + ], + "support": { + "issues": "https://github.com/doctrine/migrations/issues", + "source": "https://github.com/doctrine/migrations/tree/3.9.4" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fmigrations", + "type": "tidelift" + } + ], + "time": "2025-08-19T06:41:07+00:00" + }, + { + "name": "doctrine/orm", + "version": "3.5.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/orm.git", + "reference": "5a541b8b3a327ab1ea5f93b1615b4ff67a34e109" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/orm/zipball/5a541b8b3a327ab1ea5f93b1615b4ff67a34e109", + "reference": "5a541b8b3a327ab1ea5f93b1615b4ff67a34e109", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/collections": "^2.2", + "doctrine/dbal": "^3.8.2 || ^4", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2", + "doctrine/inflector": "^1.4 || ^2.0", + "doctrine/instantiator": "^1.3 || ^2", + "doctrine/lexer": "^3", + "doctrine/persistence": "^3.3.1 || ^4", + "ext-ctype": "*", + "php": "^8.1", + "psr/cache": "^1 || ^2 || ^3", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/var-exporter": "^6.3.9 || ^7.0" + }, + "require-dev": { + "doctrine/coding-standard": "^13.0", + "phpbench/phpbench": "^1.0", + "phpdocumentor/guides-cli": "^1.4", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "2.0.3", + "phpstan/phpstan-deprecation-rules": "^2", + "phpunit/phpunit": "^10.4.0", + "psr/log": "^1 || ^2 || ^3", + "squizlabs/php_codesniffer": "3.12.0", + "symfony/cache": "^5.4 || ^6.2 || ^7.0" + }, + "suggest": { + "ext-dom": "Provides support for XSD validation for XML mapping files", + "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\ORM\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "Object-Relational-Mapper for PHP", + "homepage": "https://www.doctrine-project.org/projects/orm.html", + "keywords": [ + "database", + "orm" + ], + "support": { + "issues": "https://github.com/doctrine/orm/issues", + "source": "https://github.com/doctrine/orm/tree/3.5.2" + }, + "time": "2025-08-08T17:00:40+00:00" + }, + { + "name": "doctrine/persistence", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/persistence.git", + "reference": "dcbdfe4b211ae09478e192289cae7ab0987b29a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/dcbdfe4b211ae09478e192289cae7ab0987b29a4", + "reference": "dcbdfe4b211ae09478e192289cae7ab0987b29a4", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "^1 || ^2", + "php": "^8.1", + "psr/cache": "^1.0 || ^2.0 || ^3.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "1.12.7", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.6", + "phpunit/phpunit": "^9.6", + "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0", + "symfony/finder": "^4.4 || ^5.4 || ^6.0 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Persistence\\": "src/Persistence" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", + "homepage": "https://www.doctrine-project.org/projects/persistence.html", + "keywords": [ + "mapper", + "object", + "odm", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/persistence/issues", + "source": "https://github.com/doctrine/persistence/tree/4.1.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fpersistence", + "type": "tidelift" + } + ], + "time": "2025-08-21T16:00:31+00:00" + }, + { + "name": "doctrine/sql-formatter", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/sql-formatter.git", + "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "ergebnis/phpunit-slow-test-detector": "^2.14", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5" + }, + "bin": [ + "bin/sql-formatter" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\SqlFormatter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "https://jeremydorn.com/" + } + ], + "description": "a PHP SQL highlighting library", + "homepage": "https://github.com/doctrine/sql-formatter/", + "keywords": [ + "highlight", + "sql" + ], + "support": { + "issues": "https://github.com/doctrine/sql-formatter/issues", + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.2" + }, + "time": "2025-01-24T11:45:48+00:00" + }, + { + "name": "dompdf/dompdf", + "version": "v3.1.4", + "source": { + "type": "git", + "url": "https://github.com/dompdf/dompdf.git", + "reference": "db712c90c5b9868df3600e64e68da62e78a34623" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/db712c90c5b9868df3600e64e68da62e78a34623", + "reference": "db712c90c5b9868df3600e64e68da62e78a34623", + "shasum": "" + }, + "require": { + "dompdf/php-font-lib": "^1.0.0", + "dompdf/php-svg-lib": "^1.0.0", + "ext-dom": "*", + "ext-mbstring": "*", + "masterminds/html5": "^2.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "ext-gd": "*", + "ext-json": "*", + "ext-zip": "*", + "mockery/mockery": "^1.3", + "phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11", + "squizlabs/php_codesniffer": "^3.5", + "symfony/process": "^4.4 || ^5.4 || ^6.2 || ^7.0" + }, + "suggest": { + "ext-gd": "Needed to process images", + "ext-gmagick": "Improves image processing performance", + "ext-imagick": "Improves image processing performance", + "ext-zlib": "Needed for pdf stream compression" + }, + "type": "library", + "autoload": { + "psr-4": { + "Dompdf\\": "src/" + }, + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "The Dompdf Community", + "homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md" + } + ], + "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", + "homepage": "https://github.com/dompdf/dompdf", + "support": { + "issues": "https://github.com/dompdf/dompdf/issues", + "source": "https://github.com/dompdf/dompdf/tree/v3.1.4" + }, + "time": "2025-10-29T12:43:30+00:00" + }, + { + "name": "dompdf/php-font-lib", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/dompdf/php-font-lib.git", + "reference": "6137b7d4232b7f16c882c75e4ca3991dbcf6fe2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/6137b7d4232b7f16c882c75e4ca3991dbcf6fe2d", + "reference": "6137b7d4232b7f16c882c75e4ca3991dbcf6fe2d", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3 || ^4 || ^5 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "FontLib\\": "src/FontLib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "The FontLib Community", + "homepage": "https://github.com/dompdf/php-font-lib/blob/master/AUTHORS.md" + } + ], + "description": "A library to read, parse, export and make subsets of different types of font files.", + "homepage": "https://github.com/dompdf/php-font-lib", + "support": { + "issues": "https://github.com/dompdf/php-font-lib/issues", + "source": "https://github.com/dompdf/php-font-lib/tree/1.0.1" + }, + "time": "2024-12-02T14:37:59+00:00" + }, + { + "name": "dompdf/php-svg-lib", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/dompdf/php-svg-lib.git", + "reference": "eb045e518185298eb6ff8d80d0d0c6b17aecd9af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/eb045e518185298eb6ff8d80d0d0c6b17aecd9af", + "reference": "eb045e518185298eb6ff8d80d0d0c6b17aecd9af", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1 || ^8.0", + "sabberworm/php-css-parser": "^8.4" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Svg\\": "src/Svg" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "The SvgLib Community", + "homepage": "https://github.com/dompdf/php-svg-lib/blob/master/AUTHORS.md" + } + ], + "description": "A library to read, parse and export to PDF SVG files.", + "homepage": "https://github.com/dompdf/php-svg-lib", + "support": { + "issues": "https://github.com/dompdf/php-svg-lib/issues", + "source": "https://github.com/dompdf/php-svg-lib/tree/1.0.0" + }, + "time": "2024-04-29T13:26:35+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2025-03-06T22:45:56+00:00" + }, + { + "name": "friendsofsymfony/ckeditor-bundle", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfSymfony/FOSCKEditorBundle.git", + "reference": "dc0f0dc1ba328e0adf5df0a37f1676b6072f46de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfSymfony/FOSCKEditorBundle/zipball/dc0f0dc1ba328e0adf5df0a37f1676b6072f46de", + "reference": "dc0f0dc1ba328e0adf5df0a37f1676b6072f46de", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-zip": "*", + "php": "^8.0", + "symfony/asset": "^5.4 || ^6.0 || ^7.0", + "symfony/config": "^5.4 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "symfony/expression-language": "^5.4 || ^6.0 || ^7.0", + "symfony/form": "^5.4 || ^6.0 || ^7.0", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0", + "symfony/http-foundation": "^5.4 || ^6.0 || ^7.0", + "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0", + "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0", + "symfony/property-access": "^5.4 || ^6.0 || ^7.0", + "symfony/routing": "^5.4 || ^6.0 || ^7.0", + "symfony/twig-bundle": "^5.4 || ^6.0 || ^7.0", + "twig/twig": "^2.4 || ^3.0" + }, + "conflict": { + "sebastian/environment": "<1.3.4", + "sebastian/exporter": "<2.0.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.41", + "matthiasnoback/symfony-dependency-injection-test": "^4.0 || ^5.0", + "phpunit/phpunit": "^9.6", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + }, + "suggest": { + "egeloen/form-extra-bundle": "Allows to load CKEditor asynchronously" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "FOS\\CKEditorBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "FriendsOfSymfony Community", + "homepage": "https://github.com/FriendsOfSymfony/FOSCKEditorBundle/graphs/contributors" + } + ], + "description": "Provides a CKEditor integration for your Symfony project.", + "keywords": [ + "CKEditor" + ], + "support": { + "issues": "https://github.com/FriendsOfSymfony/FOSCKEditorBundle/issues", + "source": "https://github.com/FriendsOfSymfony/FOSCKEditorBundle/tree/2.6.0" + }, + "time": "2025-01-13T15:11:41+00:00" + }, + { + "name": "masterminds/html5", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "fcf91eb64359852f00d921887b219479b4f21251" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251", + "reference": "fcf91eb64359852f00d921887b219479b4f21251", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.10.0" + }, + "time": "2025-07-25T09:04:22+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.9.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.9.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2025-03-24T10:02:05+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.6.3", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94f8051919d1b0369a6bcc7931d679a511c03fe9", + "reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.1", + "ext-filter": "*", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.5 || ~1.6.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^5.26" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.3" + }, + "time": "2025-08-01T19:43:32+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.18|^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" + }, + "time": "2024-11-09T15:12:26+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/b9e61a61e39e02dd90944e9115241c7f7e76bfd8", + "reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^5.3.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.2.0" + }, + "time": "2025-07-13T07:04:09+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/link", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/link.git", + "reference": "84b159194ecfd7eaa472280213976e96415433f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/link/zipball/84b159194ecfd7eaa472280213976e96415433f7", + "reference": "84b159194ecfd7eaa472280213976e96415433f7", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "suggest": { + "fig/link-util": "Provides some useful PSR-13 utilities" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Link\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for HTTP links", + "homepage": "https://github.com/php-fig/link", + "keywords": [ + "http", + "http-link", + "link", + "psr", + "psr-13", + "rest" + ], + "support": { + "source": "https://github.com/php-fig/link/tree/2.0.1" + }, + "time": "2021-03-11T23:00:27+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "sabberworm/php-css-parser", + "version": "v8.9.0", + "source": { + "type": "git", + "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git", + "reference": "d8e916507b88e389e26d4ab03c904a082aa66bb9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/d8e916507b88e389e26d4ab03c904a082aa66bb9", + "reference": "d8e916507b88e389e26d4ab03c904a082aa66bb9", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": "^5.6.20 || ^7.0.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + }, + "require-dev": { + "phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.41", + "rawr/cross-data-providers": "^2.0.0" + }, + "suggest": { + "ext-mbstring": "for parsing UTF-8 CSS" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "9.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Sabberworm\\CSS\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Schweikert" + }, + { + "name": "Oliver Klee", + "email": "github@oliverklee.de" + }, + { + "name": "Jake Hotson", + "email": "jake.github@qzdesign.co.uk" + } + ], + "description": "Parser for CSS Files written in PHP", + "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "keywords": [ + "css", + "parser", + "stylesheet" + ], + "support": { + "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues", + "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.9.0" + }, + "time": "2025-07-11T13:20:48+00:00" + }, + { + "name": "snapappointments/bootstrap-select", + "version": "v1.13.18", + "source": { + "type": "git", + "url": "https://github.com/snapappointments/bootstrap-select.git", + "reference": "6c4c75f61e69ca54d5ab557a2b90ffdccf1c63cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/snapappointments/bootstrap-select/zipball/6c4c75f61e69ca54d5ab557a2b90ffdccf1c63cd", + "reference": "6c4c75f61e69ca54d5ab557a2b90ffdccf1c63cd", + "shasum": "" + }, + "suggest": { + "components/jquery": "1.9.1 - 3", + "twbs/bootstrap": ">=3.0.0" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Casey Holzer", + "homepage": "https://github.com/caseyjhol" + }, + { + "name": "Silvio Moreto", + "homepage": "https://github.com/silviomoreto" + }, + { + "name": "SnapAppointments, LLC", + "homepage": "https://snapappointments.com" + } + ], + "description": "The jQuery plugin that brings select elements into the 21st century with intuitive multiselection, searching, and much more. Now with Bootstrap 4 support.", + "homepage": "https://developer.snapappointments.com/bootstrap-select", + "keywords": [ + "bootstrap", + "dropdown", + "form", + "javascript", + "jquery", + "replacement", + "select" + ], + "support": { + "issues": "https://github.com/snapappointments/bootstrap-select/issues", + "source": "https://github.com/snapappointments/bootstrap-select/tree/v1.13.18" + }, + "funding": [ + { + "url": "https://github.com/caseyjhol", + "type": "github" + } + ], + "time": "2020-06-26T18:04:14+00:00" + }, + { + "name": "symfony/asset", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/asset.git", + "reference": "56c4d9f759247c4e07d8549e3baf7493cb9c3e4b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/asset/zipball/56c4d9f759247c4e07d8549e3baf7493cb9c3e4b", + "reference": "56c4d9f759247c4e07d8549e3baf7493cb9c3e4b", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "conflict": { + "symfony/http-foundation": "<6.4" + }, + "require-dev": { + "symfony/http-client": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Asset\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/asset/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-03-05T10:15:41+00:00" + }, + { + "name": "symfony/asset-mapper", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/asset-mapper.git", + "reference": "71792bc7d4cd8d0cebcbcf393d3426f4821b3306" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/asset-mapper/zipball/71792bc7d4cd8d0cebcbcf393d3426f4821b3306", + "reference": "71792bc7d4cd8d0cebcbcf393d3426f4821b3306", + "shasum": "" + }, + "require": { + "composer/semver": "^3.0", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/filesystem": "^7.1", + "symfony/http-client": "^6.4|^7.0" + }, + "conflict": { + "symfony/framework-bundle": "<6.4" + }, + "require-dev": { + "symfony/asset": "^6.4|^7.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/event-dispatcher-contracts": "^3.0", + "symfony/finder": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\AssetMapper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps directories of assets & makes them available in a public directory with versioned filenames.", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/asset-mapper/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T11:36:08+00:00" + }, + { + "name": "symfony/cache", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "6621a2bee5373e3e972b2ae5dbedd5ac899d8cb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/6621a2bee5373e3e972b2ae5dbedd5ac899d8cb6", + "reference": "6621a2bee5373e3e972b2ae5dbedd5ac899d8cb6", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/cache": "^2.0|^3.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^3.6", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/var-exporter": "^6.4|^7.0" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/dependency-injection": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/var-dumper": "<6.4" + }, + "provide": { + "psr/cache-implementation": "2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0", + "symfony/cache-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "classmap": [ + "Traits/ValueWrapper.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-30T17:13:41+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/5d68a57d66910405e5c0b63d6f0af941e66fc868", + "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/cache": "^3.0" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-03-13T15:25:07+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/config", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "faef36e271bbeb74a9d733be4b56419b157762e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/faef36e271bbeb74a9d733be4b56419b157762e2", + "reference": "faef36e271bbeb74a9d733be4b56419b157762e2", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/filesystem": "^7.1", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "require-dev": { + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-26T13:55:06+00:00" + }, + { + "name": "symfony/console", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "5f360ebc65c55265a74d23d7fe27f957870158a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/5f360ebc65c55265a74d23d7fe27f957870158a1", + "reference": "5f360ebc65c55265a74d23d7fe27f957870158a1", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^7.2" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-30T17:13:41+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "6cd2a1a77e8a0676a26e8bcddf10acfe7b0ba352" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/6cd2a1a77e8a0676a26e8bcddf10acfe7b0ba352", + "reference": "6cd2a1a77e8a0676a26e8bcddf10acfe7b0ba352", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^3.5", + "symfony/var-exporter": "^6.4.20|^7.2.5" + }, + "conflict": { + "ext-psr": "<1.1|>=2", + "symfony/config": "<6.4", + "symfony/finder": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "symfony/service-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "symfony/config": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows you to standardize and centralize the way objects are constructed in your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-30T17:31:46+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/doctrine-bridge", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-bridge.git", + "reference": "a2cbc12baf9bcc5d0c125e4c0f8330b98af841ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/a2cbc12baf9bcc5d0c125e4c0f8330b98af841ca", + "reference": "a2cbc12baf9bcc5d0c125e4c0f8330b98af841ca", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "^2", + "doctrine/persistence": "^3.1|^4", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/collections": "<1.8", + "doctrine/dbal": "<3.6", + "doctrine/lexer": "<1.1", + "doctrine/orm": "<2.15", + "symfony/cache": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/form": "<6.4.6|>=7,<7.0.6", + "symfony/http-foundation": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/lock": "<6.4", + "symfony/messenger": "<6.4", + "symfony/property-info": "<6.4", + "symfony/security-bundle": "<6.4", + "symfony/security-core": "<6.4", + "symfony/validator": "<6.4" + }, + "require-dev": { + "doctrine/collections": "^1.8|^2.0", + "doctrine/data-fixtures": "^1.1|^2", + "doctrine/dbal": "^3.6|^4", + "doctrine/orm": "^2.15|^3", + "psr/log": "^1|^2|^3", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/doctrine-messenger": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/form": "^6.4.6|^7.0.6", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/type-info": "^7.1.8", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Doctrine\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Doctrine with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T11:36:08+00:00" + }, + { + "name": "symfony/doctrine-messenger", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-messenger.git", + "reference": "31ef09fa3185c8ef9a331170b7a9dd891047f5cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/31ef09fa3185c8ef9a331170b7a9dd891047f5cb", + "reference": "31ef09fa3185c8ef9a331170b7a9dd891047f5cb", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^3.6|^4", + "php": ">=8.2", + "symfony/messenger": "^7.2", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/persistence": "<1.3" + }, + "require-dev": { + "doctrine/persistence": "^1.3|^2|^3", + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "type": "symfony-messenger-bridge", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\Bridge\\Doctrine\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Doctrine Messenger Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/doctrine-messenger/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-30T17:13:41+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "2192790a11f9e22cbcf9dc705a3ff22a5503923a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/2192790a11f9e22cbcf9dc705a3ff22a5503923a", + "reference": "2192790a11f9e22cbcf9dc705a3ff22a5503923a", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "conflict": { + "symfony/console": "<6.4", + "symfony/process": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Dotenv\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Registers environment variables from a .env file", + "homepage": "https://symfony.com", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "source": "https://github.com/symfony/dotenv/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-10T08:29:33+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/0b31a944fcd8759ae294da4d2808cbc53aebd0c3", + "reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^6.4|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/webpack-encore-bundle": "^1.0|^2.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-07T08:17:57+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "497f73ac996a598c92409b44ac43b6690c4f666d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d", + "reference": "497f73ac996a598c92409b44ac43b6690c4f666d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-04-22T09:11:45+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/expression-language", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/expression-language.git", + "reference": "32d2d19c62e58767e6552166c32fb259975d2b23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/32d2d19c62e58767e6552166c32fb259975d2b23", + "reference": "32d2d19c62e58767e6552166c32fb259975d2b23", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/cache": "^6.4|^7.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ExpressionLanguage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an engine that can compile and evaluate expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/expression-language/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-10T08:29:33+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "edcbb768a186b5c3f25d0643159a787d3e63b7fd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/edcbb768a186b5c3f25d0643159a787d3e63b7fd", + "reference": "edcbb768a186b5c3f25d0643159a787d3e63b7fd", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "require-dev": { + "symfony/process": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-07T08:17:47+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe", + "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T13:41:35+00:00" + }, + { + "name": "symfony/flex", + "version": "v2.8.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/flex.git", + "reference": "f356aa35f3cf3d2f46c31d344c1098eb2d260426" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/flex/zipball/f356aa35f3cf3d2f46c31d344c1098eb2d260426", + "reference": "f356aa35f3cf3d2f46c31d344c1098eb2d260426", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.1", + "php": ">=8.0" + }, + "conflict": { + "composer/semver": "<1.7.2" + }, + "require-dev": { + "composer/composer": "^2.1", + "symfony/dotenv": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/phpunit-bridge": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Symfony\\Flex\\Flex" + }, + "autoload": { + "psr-4": { + "Symfony\\Flex\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien.potencier@gmail.com" + } + ], + "description": "Composer plugin for Symfony", + "support": { + "issues": "https://github.com/symfony/flex/issues", + "source": "https://github.com/symfony/flex/tree/v2.8.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-22T07:17:23+00:00" + }, + { + "name": "symfony/form", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/form.git", + "reference": "e83e898d1589f3ec647824bd4416defe3d6e3875" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/form/zipball/e83e898d1589f3ec647824bd4416defe3d6e3875", + "reference": "e83e898d1589f3ec647824bd4416defe3d6e3875", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/options-resolver": "^7.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/polyfill-mbstring": "~1.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/error-handler": "<6.4", + "symfony/framework-bundle": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4" + }, + "require-dev": { + "doctrine/collections": "^1.0|^2.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/html-sanitizer": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/security-csrf": "^6.4|^7.0", + "symfony/translation": "^6.4.3|^7.0.3", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Form\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows to easily create, process and reuse HTML forms", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/form/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-24T12:10:26+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "06c0f678129f99bda8b5cf8873b3d8ef5a0029e7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/06c0f678129f99bda8b5cf8873b3d8ef5a0029e7", + "reference": "06c0f678129f99bda8b5cf8873b3d8ef5a0029e7", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "ext-xml": "*", + "php": ">=8.2", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^7.3", + "symfony/dependency-injection": "^7.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^7.3", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/filesystem": "^7.1", + "symfony/finder": "^6.4|^7.0", + "symfony/http-foundation": "^7.3", + "symfony/http-kernel": "^7.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/routing": "^6.4|^7.0" + }, + "conflict": { + "doctrine/persistence": "<1.3", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/asset": "<6.4", + "symfony/asset-mapper": "<6.4", + "symfony/clock": "<6.4", + "symfony/console": "<6.4", + "symfony/dom-crawler": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/json-streamer": ">=7.4", + "symfony/lock": "<6.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/object-mapper": ">=7.4", + "symfony/property-access": "<6.4", + "symfony/property-info": "<6.4", + "symfony/runtime": "<6.4.13|>=7.0,<7.1.6", + "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", + "symfony/security-core": "<6.4", + "symfony/security-csrf": "<7.2", + "symfony/serializer": "<7.2.5", + "symfony/stopwatch": "<6.4", + "symfony/translation": "<7.3", + "symfony/twig-bridge": "<6.4", + "symfony/twig-bundle": "<6.4", + "symfony/validator": "<6.4", + "symfony/web-profiler-bundle": "<6.4", + "symfony/webhook": "<7.2", + "symfony/workflow": "<7.3.0-beta2" + }, + "require-dev": { + "doctrine/persistence": "^1.3|^2|^3", + "dragonmantank/cron-expression": "^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "seld/jsonlint": "^1.10", + "symfony/asset": "^6.4|^7.0", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/dotenv": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/html-sanitizer": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/json-streamer": "7.3.*", + "symfony/lock": "^6.4|^7.0", + "symfony/mailer": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/notifier": "^6.4|^7.0", + "symfony/object-mapper": "^v7.3.0-beta2", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/scheduler": "^6.4.4|^7.0.4", + "symfony/security-bundle": "^6.4|^7.0", + "symfony/semaphore": "^6.4|^7.0", + "symfony/serializer": "^7.2.5", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0", + "symfony/translation": "^7.3", + "symfony/twig-bundle": "^6.4|^7.0", + "symfony/type-info": "^7.1.8", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/webhook": "^7.2", + "symfony/workflow": "^7.3", + "symfony/yaml": "^6.4|^7.0", + "twig/twig": "^3.12" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\FrameworkBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/framework-bundle/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-30T17:13:41+00:00" + }, + { + "name": "symfony/http-client", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client.git", + "reference": "1c064a0c67749923483216b081066642751cc2c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client/zipball/1c064a0c67749923483216b081066642751cc2c7", + "reference": "1c064a0c67749923483216b081066642751cc2c7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-client-contracts": "~3.4.4|^3.5.2", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "amphp/amp": "<2.5", + "amphp/socket": "<1.1", + "php-http/discovery": "<1.15", + "symfony/http-foundation": "<6.4" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "1.0", + "symfony/http-client-implementation": "3.0" + }, + "require-dev": { + "amphp/http-client": "^4.2.1|^5.0", + "amphp/http-tunnel": "^1.0|^2.0", + "guzzlehttp/promises": "^1.4|^2.0", + "nyholm/psr7": "^1.0", + "php-http/httplug": "^1.0|^2.0", + "psr/http-client": "^1.0", + "symfony/amphp-http-client-meta": "^1.0|^2.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", + "homepage": "https://symfony.com", + "keywords": [ + "http" + ], + "support": { + "source": "https://github.com/symfony/http-client/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T11:36:08+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "75d7043853a42837e68111812f4d964b01e5101c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/75d7043853a42837e68111812f4d964b01e5101c", + "reference": "75d7043853a42837e68111812f4d964b01e5101c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-04-29T11:18:49+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "6877c122b3a6cc3695849622720054f6e6fa5fa6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6877c122b3a6cc3695849622720054f6e6fa5fa6", + "reference": "6877c122b3a6cc3695849622720054f6e6fa5fa6", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + }, + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5", + "symfony/clock": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-10T08:47:49+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "6ecc895559ec0097e221ed2fd5eb44d5fede083c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6ecc895559ec0097e221ed2fd5eb44d5fede083c", + "reference": "6ecc895559ec0097e221ed2fd5eb44d5fede083c", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^7.3", + "symfony/http-foundation": "^7.3", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.12" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^7.1", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^7.1", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.12" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-31T10:45:04+00:00" + }, + { + "name": "symfony/intl", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/intl.git", + "reference": "d1197fb6661b05f6178ddb2dc9c6d576f6f67ec8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/intl/zipball/d1197fb6661b05f6178ddb2dc9c6d576f6f67ec8", + "reference": "d1197fb6661b05f6178ddb2dc9c6d576f6f67ec8", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/string": "<7.1" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Intl\\": "" + }, + "exclude-from-classmap": [ + "/Tests/", + "/Resources/data/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Eriksen Costa", + "email": "eriksen.costa@infranology.com.br" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides access to the localization data of the ICU library", + "homepage": "https://symfony.com", + "keywords": [ + "i18n", + "icu", + "internationalization", + "intl", + "l10n", + "localization" + ], + "support": { + "source": "https://github.com/symfony/intl/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-10T08:47:49+00:00" + }, + { + "name": "symfony/mailer", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "d43e84d9522345f96ad6283d5dfccc8c1cfc299b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/d43e84d9522345f96ad6283d5dfccc8c1cfc299b", + "reference": "d43e84d9522345f96ad6283d5dfccc8c1cfc299b", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/mime": "^7.2", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T11:36:08+00:00" + }, + { + "name": "symfony/messenger", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/messenger.git", + "reference": "f990f0d09deaa45955593be6aafbafe73b0682b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/messenger/zipball/f990f0d09deaa45955593be6aafbafe73b0682b9", + "reference": "f990f0d09deaa45955593be6aafbafe73b0682b9", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/clock": "^6.4|^7.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/console": "<7.2", + "symfony/event-dispatcher": "<6.4", + "symfony/event-dispatcher-contracts": "<2.5", + "symfony/framework-bundle": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/lock": "<6.4", + "symfony/serializer": "<6.4" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/console": "^7.2", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Samuel Roze", + "email": "samuel.roze@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps applications send and receive messages to/from other applications or via message queues", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/messenger/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T11:36:08+00:00" + }, + { + "name": "symfony/mime", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/e0a0f859148daf1edf6c60b398eb40bfc96697d1", + "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T13:41:35+00:00" + }, + { + "name": "symfony/monolog-bridge", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bridge.git", + "reference": "1b188c8abbbef25b111da878797514b7a8d33990" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/1b188c8abbbef25b111da878797514b7a8d33990", + "reference": "1b188c8abbbef25b111da878797514b7a8d33990", + "shasum": "" + }, + "require": { + "monolog/monolog": "^3", + "php": ">=8.2", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/console": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/security-core": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/mailer": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Monolog\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Monolog with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/monolog-bridge/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-03-21T12:17:46+00:00" + }, + { + "name": "symfony/monolog-bundle", + "version": "v3.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bundle.git", + "reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181", + "reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181", + "shasum": "" + }, + "require": { + "monolog/monolog": "^1.25.1 || ^2.0 || ^3.0", + "php": ">=7.2.5", + "symfony/config": "^5.4 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0", + "symfony/monolog-bridge": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^6.3 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MonologBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony MonologBundle", + "homepage": "https://symfony.com", + "keywords": [ + "log", + "logging" + ], + "support": { + "issues": "https://github.com/symfony/monolog-bundle/issues", + "source": "https://github.com/symfony/monolog-bundle/tree/v3.10.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-11-06T17:08:13+00:00" + }, + { + "name": "symfony/notifier", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/notifier.git", + "reference": "9e68a3266c8b0381f8756022b1c1ba3c0264416e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/notifier/zipball/9e68a3266c8b0381f8756022b1c1ba3c0264416e", + "reference": "9e68a3266c8b0381f8756022b1c1ba3c0264416e", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3" + }, + "conflict": { + "symfony/event-dispatcher": "<6.4", + "symfony/event-dispatcher-contracts": "<2.5", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/event-dispatcher-contracts": "^2.5|^3", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Notifier\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Sends notifications via one or more channels (email, SMS, ...)", + "homepage": "https://symfony.com", + "keywords": [ + "notification", + "notifier" + ], + "support": { + "source": "https://github.com/symfony/notifier/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-05-01T12:12:53+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "119bcf13e67dbd188e5dbc74228b1686f66acd37" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/119bcf13e67dbd188e5dbc74228b1686f66acd37", + "reference": "119bcf13e67dbd188e5dbc74228b1686f66acd37", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T11:36:08+00:00" + }, + { + "name": "symfony/password-hasher", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/password-hasher.git", + "reference": "31fbe66af859582a20b803f38be96be8accdf2c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/31fbe66af859582a20b803f38be96be8accdf2c3", + "reference": "31fbe66af859582a20b803f38be96be8accdf2c3", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "conflict": { + "symfony/security-core": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PasswordHasher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Robin Chalas", + "email": "robin.chalas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides password hashing utilities", + "homepage": "https://symfony.com", + "keywords": [ + "hashing", + "password" + ], + "support": { + "source": "https://github.com/symfony/password-hasher/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-02-04T08:22:58+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-27T09:58:17+00:00" + }, + { + "name": "symfony/polyfill-intl-icu", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-icu.git", + "reference": "bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c", + "reference": "bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance and support of other locales than \"en\"" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Icu\\": "" + }, + "classmap": [ + "Resources/stubs" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's ICU-related data and classes", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "icu", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-20T22:24:30+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-10T14:38:51+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-23T08:48:59+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-08T02:45:35+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-24T13:30:11+00:00" + }, + { + "name": "symfony/process", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", + "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-04-17T09:11:12+00:00" + }, + { + "name": "symfony/property-access", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "317916e49b2577a1908f321796f2b67984e61eab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/317916e49b2577a1908f321796f2b67984e61eab", + "reference": "317916e49b2577a1908f321796f2b67984e61eab", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/property-info": "^6.4|^7.0" + }, + "require-dev": { + "symfony/cache": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides functions to read and write from/to an object or array using a simple string notation", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property-path", + "reflection" + ], + "support": { + "source": "https://github.com/symfony/property-access/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T17:58:03+00:00" + }, + { + "name": "symfony/property-info", + "version": "v7.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-info.git", + "reference": "90586acbf2a6dd13bee4f09f09111c8bd4773970" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-info/zipball/90586acbf2a6dd13bee4f09f09111c8bd4773970", + "reference": "90586acbf2a6dd13bee4f09f09111c8bd4773970", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0", + "symfony/type-info": "~7.2.8|^7.3.1" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<5.2", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/cache": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/serializer": "<6.4" + }, + "require-dev": { + "phpdocumentor/reflection-docblock": "^5.2", + "phpstan/phpdoc-parser": "^1.0|^2.0", + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts information about PHP class' properties using metadata of popular sources", + "homepage": "https://symfony.com", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], + "support": { + "source": "https://github.com/symfony/property-info/tree/v7.3.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-27T19:55:54+00:00" + }, + { + "name": "symfony/routing", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/7614b8ca5fa89b9cd233e21b627bfc5774f586e4", + "reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T11:36:08+00:00" + }, + { + "name": "symfony/runtime", + "version": "v7.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/runtime.git", + "reference": "9516056d432f8acdac9458eb41b80097da7a05c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/runtime/zipball/9516056d432f8acdac9458eb41b80097da7a05c9", + "reference": "9516056d432f8acdac9458eb41b80097da7a05c9", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": ">=8.2" + }, + "conflict": { + "symfony/dotenv": "<6.4" + }, + "require-dev": { + "composer/composer": "^2.6", + "symfony/console": "^6.4|^7.0", + "symfony/dotenv": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Symfony\\Component\\Runtime\\Internal\\ComposerPlugin" + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Runtime\\": "", + "Symfony\\Runtime\\Symfony\\Component\\": "Internal/" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Enables decoupling PHP applications from global state", + "homepage": "https://symfony.com", + "keywords": [ + "runtime" + ], + "support": { + "source": "https://github.com/symfony/runtime/tree/v7.3.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-13T07:48:40+00:00" + }, + { + "name": "symfony/security-bundle", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-bundle.git", + "reference": "d8278a973b305c0b79b162f265d8ce1e96703236" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/d8278a973b305c0b79b162f265d8ce1e96703236", + "reference": "d8278a973b305c0b79b162f265d8ce1e96703236", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "ext-xml": "*", + "php": ">=8.2", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^7.3", + "symfony/dependency-injection": "^6.4.11|^7.1.4", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/password-hasher": "^6.4|^7.0", + "symfony/security-core": "^7.3", + "symfony/security-csrf": "^6.4|^7.0", + "symfony/security-http": "^7.3", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/browser-kit": "<6.4", + "symfony/console": "<6.4", + "symfony/framework-bundle": "<6.4", + "symfony/http-client": "<6.4", + "symfony/ldap": "<6.4", + "symfony/serializer": "<6.4", + "symfony/twig-bundle": "<6.4", + "symfony/validator": "<6.4" + }, + "require-dev": { + "symfony/asset": "^6.4|^7.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/ldap": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0", + "symfony/twig-bundle": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", + "twig/twig": "^3.12", + "web-token/jwt-library": "^3.3.2|^4.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\SecurityBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-bundle/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-22T08:15:39+00:00" + }, + { + "name": "symfony/security-core", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-core.git", + "reference": "d8e1bb0de26266e2e4525beda0aed7f774e9c80d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-core/zipball/d8e1bb0de26266e2e4525beda0aed7f774e9c80d", + "reference": "d8e1bb0de26266e2e4525beda0aed7f774e9c80d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/event-dispatcher-contracts": "^2.5|^3", + "symfony/password-hasher": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/ldap": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/validator": "<6.4" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "psr/container": "^1.1|^2.0", + "psr/log": "^1|^2|^3", + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/ldap": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0", + "symfony/translation": "^6.4.3|^7.0.3", + "symfony/validator": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Core\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - Core Library", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-core/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-23T09:11:24+00:00" + }, + { + "name": "symfony/security-csrf", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-csrf.git", + "reference": "2b4b0c46c901729e4e90719eacd980381f53e0a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/2b4b0c46c901729e4e90719eacd980381f53e0a3", + "reference": "2b4b0c46c901729e4e90719eacd980381f53e0a3", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/security-core": "^6.4|^7.0" + }, + "conflict": { + "symfony/http-foundation": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Csrf\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - CSRF Library", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-csrf/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-01-02T18:42:10+00:00" + }, + { + "name": "symfony/security-http", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-http.git", + "reference": "ca8d92035a5c8d31012458589bdaef30ef3c54d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-http/zipball/ca8d92035a5c8d31012458589bdaef30ef3c54d6", + "reference": "ca8d92035a5c8d31012458589bdaef30ef3c54d6", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/security-core": "^7.3", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/clock": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/http-client-contracts": "<3.0", + "symfony/security-bundle": "<6.4", + "symfony/security-csrf": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/cache": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/http-client-contracts": "^3.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/security-csrf": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "web-token/jwt-library": "^3.3.2|^4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Http\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - HTTP Integration", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-http/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-10T08:47:49+00:00" + }, + { + "name": "symfony/serializer", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/serializer.git", + "reference": "0ed011583fd24899fa003abf77c45d4a901714da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/serializer/zipball/0ed011583fd24899fa003abf77c45d4a901714da", + "reference": "0ed011583fd24899fa003abf77c45d4a901714da", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/dependency-injection": "<6.4", + "symfony/property-access": "<6.4", + "symfony/property-info": "<6.4", + "symfony/uid": "<6.4", + "symfony/validator": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", + "phpstan/phpdoc-parser": "^1.0|^2.0", + "seld/jsonlint": "^1.10", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^7.2", + "symfony/error-handler": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/type-info": "^7.1.8", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Serializer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/serializer/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-26T13:07:17+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-04-25T09:37:31+00:00" + }, + { + "name": "symfony/stimulus-bundle", + "version": "v2.29.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/stimulus-bundle.git", + "reference": "7788eaec422c0d606e042e947faff9ed793954c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/7788eaec422c0d606e042e947faff9ed793954c6", + "reference": "7788eaec422c0d606e042e947faff9ed793954c6", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/config": "^5.4|^6.0|^7.0|^8.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0|^8.0", + "symfony/deprecation-contracts": "^2.0|^3.0", + "symfony/finder": "^5.4|^6.0|^7.0|^8.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0|^8.0", + "twig/twig": "^2.15.3|^3.8" + }, + "require-dev": { + "symfony/asset-mapper": "^6.3|^7.0|^8.0", + "symfony/framework-bundle": "^5.4|^6.0|^7.0|^8.0", + "symfony/phpunit-bridge": "^5.4|^6.0|^7.0|^8.0", + "symfony/twig-bundle": "^5.4|^6.0|^7.0|^8.0", + "zenstruck/browser": "^1.4" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\UX\\StimulusBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Integration with your Symfony app & Stimulus!", + "keywords": [ + "symfony-ux" + ], + "support": { + "source": "https://github.com/symfony/stimulus-bundle/tree/v2.29.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-18T09:13:24+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", + "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/service-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-02-24T10:49:57+00:00" + }, + { + "name": "symfony/string", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "42f505aff654e62ac7ac2ce21033818297ca89ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/42f505aff654e62ac7ac2ce21033818297ca89ca", + "reference": "42f505aff654e62ac7ac2ce21033818297ca89ca", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-10T08:47:49+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "81b48f4daa96272efcce9c7a6c4b58e629df3c90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/81b48f4daa96272efcce9c7a6c4b58e629df3c90", + "reference": "81b48f4daa96272efcce9c7a6c4b58e629df3c90", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "nikic/php-parser": "<5.0", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-30T17:31:46+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-27T08:32:26+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "81d1c69769cf913240afdd4c9673304ddca964b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/81d1c69769cf913240afdd4c9673304ddca964b0", + "reference": "81d1c69769cf913240afdd4c9673304ddca964b0", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/translation-contracts": "^2.5|^3", + "twig/twig": "^3.21" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/console": "<6.4", + "symfony/form": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/mime": "<6.4", + "symfony/serializer": "<6.4", + "symfony/translation": "<6.4", + "symfony/workflow": "<6.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^6.4|^7.0", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/emoji": "^7.1", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/form": "^6.4.20|^7.2.5", + "symfony/html-sanitizer": "^6.4|^7.0", + "symfony/http-foundation": "^7.3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/security-csrf": "^6.4|^7.0", + "symfony/security-http": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/workflow": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", + "twig/cssinliner-extra": "^3", + "twig/inky-extra": "^3", + "twig/markdown-extra": "^3" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Twig with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bridge/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-26T16:47:03+00:00" + }, + { + "name": "symfony/twig-bundle", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "5d85220df4d8d79e6a9ca57eea6f70004de39657" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/5d85220df4d8d79e6a9ca57eea6f70004de39657", + "reference": "5d85220df4d8d79e6a9ca57eea6f70004de39657", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "php": ">=8.2", + "symfony/config": "^7.3", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/twig-bridge": "^7.3", + "twig/twig": "^3.12" + }, + "conflict": { + "symfony/framework-bundle": "<6.4", + "symfony/translation": "<6.4" + }, + "require-dev": { + "symfony/asset": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\TwigBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration of Twig into the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bundle/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-10T08:47:49+00:00" + }, + { + "name": "symfony/type-info", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/type-info.git", + "reference": "b72d44c7d6638480fce101b7c4cd3abea4c2efba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/type-info/zipball/b72d44c7d6638480fce101b7c4cd3abea4c2efba", + "reference": "b72d44c7d6638480fce101b7c4cd3abea4c2efba", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "phpstan/phpdoc-parser": "<1.30" + }, + "require-dev": { + "phpstan/phpdoc-parser": "^1.30|^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\TypeInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathias Arlaud", + "email": "mathias.arlaud@gmail.com" + }, + { + "name": "Baptiste LEDUC", + "email": "baptiste.leduc@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts PHP types information.", + "homepage": "https://symfony.com", + "keywords": [ + "PHPStan", + "phpdoc", + "symfony", + "type" + ], + "support": { + "source": "https://github.com/symfony/type-info/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-10T05:39:45+00:00" + }, + { + "name": "symfony/ux-turbo", + "version": "v2.29.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/ux-turbo.git", + "reference": "b8a6f2ecb707ef69b53ff049b52e86c0dc06bc7b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/b8a6f2ecb707ef69b53ff049b52e86c0dc06bc7b", + "reference": "b8a6f2ecb707ef69b53ff049b52e86c0dc06bc7b", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/stimulus-bundle": "^2.9.1" + }, + "conflict": { + "symfony/flex": "<1.13" + }, + "require-dev": { + "dbrekelmans/bdi": "dev-main", + "doctrine/doctrine-bundle": "^2.4.3", + "doctrine/orm": "^2.8 | 3.0", + "php-webdriver/webdriver": "^1.15", + "phpstan/phpstan": "^2.1.17", + "symfony/asset-mapper": "^6.4|^7.0|^8.0", + "symfony/debug-bundle": "^5.4|^6.0|^7.0|^8.0", + "symfony/expression-language": "^5.4|^6.0|^7.0|^8.0", + "symfony/form": "^5.4|^6.0|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/mercure-bundle": "^0.3.7", + "symfony/messenger": "^5.4|^6.0|^7.0|^8.0", + "symfony/panther": "^2.2", + "symfony/phpunit-bridge": "^5.4|^6.0|^7.0|^8.0", + "symfony/process": "^5.4|6.3.*|^7.0|^8.0", + "symfony/property-access": "^5.4|^6.0|^7.0|^8.0", + "symfony/security-core": "^5.4|^6.0|^7.0|^8.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0|^8.0", + "symfony/twig-bundle": "^6.4|^7.0|^8.0", + "symfony/ux-twig-component": "^2.21", + "symfony/web-profiler-bundle": "^5.4|^6.0|^7.0|^8.0" + }, + "type": "symfony-bundle", + "extra": { + "thanks": { + "url": "https://github.com/symfony/ux", + "name": "symfony/ux" + } + }, + "autoload": { + "psr-4": { + "Symfony\\UX\\Turbo\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "kevin@dunglas.fr" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Hotwire Turbo integration for Symfony", + "homepage": "https://symfony.com", + "keywords": [ + "hotwire", + "javascript", + "mercure", + "symfony-ux", + "turbo", + "turbo-stream" + ], + "support": { + "source": "https://github.com/symfony/ux-turbo/tree/v2.29.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-18T20:25:45+00:00" + }, + { + "name": "symfony/validator", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "e5cc60fd44aab8e1d662fc0d954da322c2e08b43" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/e5cc60fd44aab8e1d662fc0d954da322c2e08b43", + "reference": "e5cc60fd44aab8e1d662fc0d954da322c2e08b43", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php83": "^1.27", + "symfony/translation-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/lexer": "<1.1", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<7.0", + "symfony/expression-language": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/intl": "<6.4", + "symfony/property-info": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3|^4", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0", + "symfony/translation": "^6.4.3|^7.0.3", + "symfony/type-info": "^7.1.8", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Validator\\": "" + }, + "exclude-from-classmap": [ + "/Tests/", + "/Resources/bin/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to validate values", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/validator/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-29T20:02:46+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "53205bea27450dc5c65377518b3275e126d45e75" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/53205bea27450dc5c65377518b3275e126d45e75", + "reference": "53205bea27450dc5c65377518b3275e126d45e75", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.12" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-29T20:02:46+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "05b3e90654c097817325d6abd284f7938b05f467" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/05b3e90654c097817325d6abd284f7938b05f467", + "reference": "05b3e90654c097817325d6abd284f7938b05f467", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "require-dev": { + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "lazy-loading", + "proxy", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-10T08:47:49+00:00" + }, + { + "name": "symfony/web-link", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-link.git", + "reference": "7697f74fce67555665339423ce453cc8216a98ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-link/zipball/7697f74fce67555665339423ce453cc8216a98ff", + "reference": "7697f74fce67555665339423ce453cc8216a98ff", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/link": "^1.1|^2.0" + }, + "conflict": { + "symfony/http-kernel": "<6.4" + }, + "provide": { + "psr/link-implementation": "1.0|2.0" + }, + "require-dev": { + "symfony/http-kernel": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\WebLink\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Manages links between resources", + "homepage": "https://symfony.com", + "keywords": [ + "dns-prefetch", + "http", + "http2", + "link", + "performance", + "prefetch", + "preload", + "prerender", + "psr13", + "push" + ], + "support": { + "source": "https://github.com/symfony/web-link/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-05-19T13:28:18+00:00" + }, + { + "name": "symfony/webpack-encore-bundle", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/webpack-encore-bundle.git", + "reference": "7ae70d44c24c3b913f308af8396169b5c6d9e0f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/7ae70d44c24c3b913f308af8396169b5c6d9e0f5", + "reference": "7ae70d44c24c3b913f308af8396169b5c6d9e0f5", + "shasum": "" + }, + "require": { + "php": ">=8.1.0", + "symfony/asset": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/config": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/dependency-injection": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/http-kernel": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/service-contracts": "^1.1.9 || ^2.1.3 || ^3.0" + }, + "require-dev": { + "symfony/framework-bundle": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/http-client": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/phpunit-bridge": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/twig-bundle": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/web-link": "^5.4 || ^6.2 || ^7.0 || ^8.0" + }, + "type": "symfony-bundle", + "extra": { + "thanks": { + "url": "https://github.com/symfony/webpack-encore", + "name": "symfony/webpack-encore" + } + }, + "autoload": { + "psr-4": { + "Symfony\\WebpackEncoreBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Integration of your Symfony app with Webpack Encore", + "support": { + "issues": "https://github.com/symfony/webpack-encore-bundle/issues", + "source": "https://github.com/symfony/webpack-encore-bundle/tree/v2.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-05T11:43:32+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "b8d7d868da9eb0919e99c8830431ea087d6aae30" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/b8d7d868da9eb0919e99c8830431ea087d6aae30", + "reference": "b8d7d868da9eb0919e99c8830431ea087d6aae30", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-10T08:47:49+00:00" + }, + { + "name": "twbs/bootstrap", + "version": "v5.3.8", + "source": { + "type": "git", + "url": "https://github.com/twbs/bootstrap.git", + "reference": "25aa8cc0b32f0d1a54be575347e6d84b70b1acd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twbs/bootstrap/zipball/25aa8cc0b32f0d1a54be575347e6d84b70b1acd7", + "reference": "25aa8cc0b32f0d1a54be575347e6d84b70b1acd7", + "shasum": "" + }, + "replace": { + "twitter/bootstrap": "self.version" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Otto", + "email": "markdotto@gmail.com" + }, + { + "name": "Jacob Thornton", + "email": "jacobthornton@gmail.com" + } + ], + "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", + "homepage": "https://getbootstrap.com/", + "keywords": [ + "JS", + "css", + "framework", + "front-end", + "mobile-first", + "responsive", + "sass", + "web" + ], + "support": { + "issues": "https://github.com/twbs/bootstrap/issues", + "source": "https://github.com/twbs/bootstrap/tree/v5.3.8" + }, + "time": "2025-08-26T02:01:02+00:00" + }, + { + "name": "twig/extra-bundle", + "version": "v3.21.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/twig-extra-bundle.git", + "reference": "62d1cf47a1aa009cbd07b21045b97d3d5cb79896" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/62d1cf47a1aa009cbd07b21045b97d3d5cb79896", + "reference": "62d1cf47a1aa009cbd07b21045b97d3d5cb79896", + "shasum": "" + }, + "require": { + "php": ">=8.1.0", + "symfony/framework-bundle": "^5.4|^6.4|^7.0", + "symfony/twig-bundle": "^5.4|^6.4|^7.0", + "twig/twig": "^3.2|^4.0" + }, + "require-dev": { + "league/commonmark": "^1.0|^2.0", + "symfony/phpunit-bridge": "^6.4|^7.0", + "twig/cache-extra": "^3.0", + "twig/cssinliner-extra": "^3.0", + "twig/html-extra": "^3.0", + "twig/inky-extra": "^3.0", + "twig/intl-extra": "^3.0", + "twig/markdown-extra": "^3.0", + "twig/string-extra": "^3.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Twig\\Extra\\TwigExtraBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "A Symfony bundle for extra Twig extensions", + "homepage": "https://twig.symfony.com", + "keywords": [ + "bundle", + "extra", + "twig" + ], + "support": { + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.21.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2025-02-19T14:29:33+00:00" + }, + { + "name": "twig/twig", + "version": "v3.21.1", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/285123877d4dd97dd7c11842ac5fb7e86e60d81d", + "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d", + "shasum": "" + }, + "require": { + "php": ">=8.1.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Resources/core.php", + "src/Resources/debug.php", + "src/Resources/escaper.php", + "src/Resources/string_loader.php" + ], + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.21.1" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2025-05-03T07:21:55+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "myclabs/deep-copy", + "version": "1.13.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.6.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", + "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.1" + }, + "time": "2025-08-13T20:13:15+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "12.3.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "086553c5b2e0e1e20293d782d788ab768202b621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/086553c5b2e0e1e20293d782d788ab768202b621", + "reference": "086553c5b2e0e1e20293d782d788ab768202b621", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^5.4.0", + "php": ">=8.3", + "phpunit/php-file-iterator": "^6.0", + "phpunit/php-text-template": "^5.0", + "sebastian/complexity": "^5.0", + "sebastian/environment": "^8.0", + "sebastian/lines-of-code": "^4.0", + "sebastian/version": "^6.0", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.1" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "12.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.3.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" + } + ], + "time": "2025-07-29T06:19:24+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "961bc913d42fe24a257bfff826a5068079ac7782" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/961bc913d42fe24a257bfff826a5068079ac7782", + "reference": "961bc913d42fe24a257bfff826a5068079ac7782", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:58:37+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406", + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^12.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:58:58+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53", + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:59:16+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "8.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "8.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:59:38+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "12.3.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "a2cab3224f687150ac2f3cc13d99b64ba1e1d088" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a2cab3224f687150ac2f3cc13d99b64ba1e1d088", + "reference": "a2cab3224f687150ac2f3cc13d99b64ba1e1d088", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.3", + "phpunit/php-code-coverage": "^12.3.2", + "phpunit/php-file-iterator": "^6.0.0", + "phpunit/php-invoker": "^6.0.0", + "phpunit/php-text-template": "^5.0.0", + "phpunit/php-timer": "^8.0.0", + "sebastian/cli-parser": "^4.0.0", + "sebastian/comparator": "^7.1.3", + "sebastian/diff": "^7.0.0", + "sebastian/environment": "^8.0.3", + "sebastian/exporter": "^7.0.0", + "sebastian/global-state": "^8.0.0", + "sebastian/object-enumerator": "^7.0.0", + "sebastian/type": "^6.0.3", + "sebastian/version": "^6.0.0", + "staabm/side-effects-detector": "^1.0.5" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "12.3-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/12.3.6" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2025-08-20T14:43:23+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "6d584c727d9114bcdc14c86711cd1cad51778e7c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/6d584c727d9114bcdc14c86711cd1cad51778e7c", + "reference": "6d584c727d9114bcdc14c86711cd1cad51778e7c", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:53:50+00:00" + }, + { + "name": "sebastian/comparator", + "version": "7.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "dc904b4bb3ab070865fa4068cd84f3da8b945148" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/dc904b4bb3ab070865fa4068cd84f3da8b945148", + "reference": "dc904b4bb3ab070865fa4068cd84f3da8b945148", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.3", + "sebastian/diff": "^7.0", + "sebastian/exporter": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^12.2" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" + } + ], + "time": "2025-08-20T11:27:00+00:00" + }, + { + "name": "sebastian/complexity", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb", + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:55:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "7.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7ab1ea946c012266ca32390913653d844ecd085f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f", + "reference": "7ab1ea946c012266ca32390913653d844ecd085f", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0", + "symfony/process": "^7.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:55:46+00:00" + }, + { + "name": "sebastian/environment", + "version": "8.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "24a711b5c916efc6d6e62aa65aa2ec98fef77f68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/24a711b5c916efc6d6e62aa65aa2ec98fef77f68", + "reference": "24a711b5c916efc6d6e62aa65aa2ec98fef77f68", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "8.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/8.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", + "type": "tidelift" + } + ], + "time": "2025-08-12T14:11:56+00:00" + }, + { + "name": "sebastian/exporter", + "version": "7.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "76432aafc58d50691a00d86d0632f1217a47b688" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/76432aafc58d50691a00d86d0632f1217a47b688", + "reference": "76432aafc58d50691a00d86d0632f1217a47b688", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.3", + "sebastian/recursion-context": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:56:42+00:00" + }, + { + "name": "sebastian/global-state", + "version": "8.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "570a2aeb26d40f057af686d63c4e99b075fb6cbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/570a2aeb26d40f057af686d63c4e99b075fb6cbc", + "reference": "570a2aeb26d40f057af686d63c4e99b075fb6cbc", + "shasum": "" + }, + "require": { + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "8.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:56:59+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/97ffee3bcfb5805568d6af7f0f893678fc076d2f", + "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:57:28+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "7.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894", + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894", + "shasum": "" + }, + "require": { + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/7.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:57:48+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "4bfa827c969c98be1e527abd576533293c634f6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a", + "reference": "4bfa827c969c98be1e527abd576533293c634f6a", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:58:17+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "7.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" + } + ], + "time": "2025-08-13T04:44:59+00:00" + }, + { + "name": "sebastian/type", + "version": "6.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/e549163b9760b8f71f191651d22acf32d56d6d4d", + "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/6.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" + } + ], + "time": "2025-08-09T06:57:12+00:00" + }, + { + "name": "sebastian/version", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c", + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T05:00:38+00:00" + }, + { + "name": "staabm/side-effects-detector", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" + }, + { + "name": "symfony/browser-kit", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/browser-kit.git", + "reference": "f0b889b73a845cddef1d25fe207b37fd04cb5419" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/f0b889b73a845cddef1d25fe207b37fd04cb5419", + "reference": "f0b889b73a845cddef1d25fe207b37fd04cb5419", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/dom-crawler": "^6.4|^7.0" + }, + "require-dev": { + "symfony/css-selector": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\BrowserKit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/browser-kit/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-10T08:47:49+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/debug-bundle", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug-bundle.git", + "reference": "781acc90f31f5fe18915f9276890864ebbbe3da8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/781acc90f31f5fe18915f9276890864ebbbe3da8", + "reference": "781acc90f31f5fe18915f9276890864ebbbe3da8", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "ext-xml": "*", + "php": ">=8.2", + "symfony/config": "^7.3", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "require-dev": { + "symfony/web-profiler-bundle": "^6.4|^7.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\DebugBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/debug-bundle/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-05-04T13:21:13+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v7.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "8b2ee2e06ab99fa5f067b6699296d4e35c156bb9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/8b2ee2e06ab99fa5f067b6699296d4e35c156bb9", + "reference": "8b2ee2e06ab99fa5f067b6699296d4e35c156bb9", + "shasum": "" + }, + "require": { + "masterminds/html5": "^2.6", + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "symfony/css-selector": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases DOM navigation for HTML and XML documents", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dom-crawler/tree/v7.3.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-15T10:07:06+00:00" + }, + { + "name": "symfony/maker-bundle", + "version": "v1.64.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/maker-bundle.git", + "reference": "c86da84640b0586e92aee2b276ee3638ef2f425a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/c86da84640b0586e92aee2b276ee3638ef2f425a", + "reference": "c86da84640b0586e92aee2b276ee3638ef2f425a", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^2.0", + "nikic/php-parser": "^5.0", + "php": ">=8.1", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/deprecation-contracts": "^2.2|^3", + "symfony/filesystem": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0" + }, + "conflict": { + "doctrine/doctrine-bundle": "<2.10", + "doctrine/orm": "<2.15" + }, + "require-dev": { + "composer/semver": "^3.0", + "doctrine/doctrine-bundle": "^2.5.0", + "doctrine/orm": "^2.15|^3", + "symfony/http-client": "^6.4|^7.0", + "symfony/phpunit-bridge": "^6.4.1|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/security-http": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", + "twig/twig": "^3.0|^4.x-dev" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MakerBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.", + "homepage": "https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html", + "keywords": [ + "code generator", + "dev", + "generator", + "scaffold", + "scaffolding" + ], + "support": { + "issues": "https://github.com/symfony/maker-bundle/issues", + "source": "https://github.com/symfony/maker-bundle/tree/v1.64.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-23T16:12:08+00:00" + }, + { + "name": "symfony/web-profiler-bundle", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-profiler-bundle.git", + "reference": "c5e02451fe4e430c5067ddbf0899493522782390" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/c5e02451fe4e430c5067ddbf0899493522782390", + "reference": "c5e02451fe4e430c5067ddbf0899493522782390", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "php": ">=8.2", + "symfony/config": "^7.3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/twig-bundle": "^6.4|^7.0", + "twig/twig": "^3.12" + }, + "conflict": { + "symfony/form": "<6.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/serializer": "<7.2", + "symfony/workflow": "<7.3" + }, + "require-dev": { + "symfony/browser-kit": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\WebProfilerBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a development tool that gives detailed information about the execution of any request", + "homepage": "https://symfony.com", + "keywords": [ + "dev" + ], + "support": { + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-26T16:47:03+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": ">=8.2", + "ext-ctype": "*", + "ext-iconv": "*" + }, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/config/bundles.php b/config/bundles.php new file mode 100755 index 0000000..bc1e4bf --- /dev/null +++ b/config/bundles.php @@ -0,0 +1,14 @@ + ['all' => true], + Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], + Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], + Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], + Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], + Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], + BW\ActiveMenuItemBundle\BWActiveMenuItemBundle::class => ['all' => true], + FOS\CKEditorBundle\FOSCKEditorBundle::class => ['all' => true], +]; diff --git a/config/packages/cache.yaml b/config/packages/cache.yaml new file mode 100755 index 0000000..6899b72 --- /dev/null +++ b/config/packages/cache.yaml @@ -0,0 +1,19 @@ +framework: + cache: + # Unique name of your app: used to compute stable namespaces for cache keys. + #prefix_seed: your_vendor_name/app_name + + # The "app" cache stores to the filesystem by default. + # The data in this cache should persist between deploys. + # Other options include: + + # Redis + #app: cache.adapter.redis + #default_redis_provider: redis://localhost + + # APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues) + #app: cache.adapter.apcu + + # Namespaced pools use the above "app" backend by default + #pools: + #my.dedicated.cache: null diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml new file mode 100755 index 0000000..bdff96f --- /dev/null +++ b/config/packages/doctrine.yaml @@ -0,0 +1,44 @@ +doctrine: + dbal: + url: '%env(resolve:DATABASE_URL)%' + + # IMPORTANT: You MUST configure your server version, + # either here or in the DATABASE_URL env var (see .env file) + #server_version: '15' + orm: + auto_generate_proxy_classes: true + enable_lazy_ghost_objects: true + naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware + auto_mapping: true + mappings: + App: + is_bundle: false + dir: '%kernel.project_dir%/src/Entity' + prefix: 'App\Entity' + alias: App + +when@test: + doctrine: + dbal: + # "TEST_TOKEN" is typically set by ParaTest + dbname_suffix: '_test%env(default::TEST_TOKEN)%' + +when@prod: + doctrine: + orm: + auto_generate_proxy_classes: false + proxy_dir: '%kernel.build_dir%/doctrine/orm/Proxies' + query_cache_driver: + type: pool + pool: doctrine.system_cache_pool + result_cache_driver: + type: pool + pool: doctrine.result_cache_pool + + framework: + cache: + pools: + doctrine.result_cache_pool: + adapter: cache.app + doctrine.system_cache_pool: + adapter: cache.system diff --git a/config/packages/doctrine_migrations.yaml b/config/packages/doctrine_migrations.yaml new file mode 100755 index 0000000..29231d9 --- /dev/null +++ b/config/packages/doctrine_migrations.yaml @@ -0,0 +1,6 @@ +doctrine_migrations: + migrations_paths: + # namespace is arbitrary but should be different from App\Migrations + # as migrations classes should NOT be autoloaded + 'DoctrineMigrations': '%kernel.project_dir%/migrations' + enable_profiler: false diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml new file mode 100755 index 0000000..6d85c29 --- /dev/null +++ b/config/packages/framework.yaml @@ -0,0 +1,25 @@ +# see https://symfony.com/doc/current/reference/configuration/framework.html +framework: + secret: '%env(APP_SECRET)%' + #csrf_protection: true + http_method_override: false + handle_all_throwables: true + + # Enables session support. Note that the session will ONLY be started if you read or write from it. + # Remove or comment this section to explicitly disable session support. + session: + handler_id: null + cookie_secure: auto + cookie_samesite: lax + storage_factory_id: session.storage.factory.native + + #esi: true + #fragments: true + php_errors: + log: true + +when@test: + framework: + test: true + session: + storage_factory_id: session.storage.factory.mock_file diff --git a/config/packages/routing.yaml b/config/packages/routing.yaml new file mode 100755 index 0000000..4b766ce --- /dev/null +++ b/config/packages/routing.yaml @@ -0,0 +1,12 @@ +framework: + router: + utf8: true + + # Configure how to generate URLs in non-HTTP contexts, such as CLI commands. + # See https://symfony.com/doc/current/routing.html#generating-urls-in-commands + #default_uri: http://localhost + +when@prod: + framework: + router: + strict_requirements: null diff --git a/config/packages/security.yaml b/config/packages/security.yaml new file mode 100755 index 0000000..5a0f010 --- /dev/null +++ b/config/packages/security.yaml @@ -0,0 +1,50 @@ +security: + # https://symfony.com/doc/current/security.html#registering-the-user-hashing-passwords + password_hashers: + Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto' + # https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider + providers: + # used to reload user from session & other features (e.g. switch_user) + app_user_provider: + entity: + class: App\Entity\User + property: email + firewalls: + dev: + pattern: ^/(_(profiler|wdt)|css|images|js)/ + security: false + main: + lazy: true + provider: app_user_provider + custom_authenticator: App\Security\LoginAuthenticator + logout: + path: frontend_security_logout + target: frontend_security_login + + # activate different ways to authenticate + # https://symfony.com/doc/current/security.html#the-firewall + + # https://symfony.com/doc/current/security/impersonating_user.html + # switch_user: true + + role_hierarchy: + ROLE_SUPER_ADMIN: ROLE_ADMIN + # Easy way to control access for large sections of your site + # Note: Only the *first* access control that matches will be used + access_control: + - { path: ^/backend/admin, roles: ROLE_ADMIN } + - { path: ^/backend/partner, roles: ROLE_PARTNER_ADVANCED } + - { path: ^/backend/partner, roles: ROLE_PARTNER } + +when@test: + security: + password_hashers: + # By default, password hashers are resource intensive and take time. This is + # important to generate secure password hashes. In tests however, secure hashes + # are not important, waste resources and increase test times. The following + # reduces the work factor to the lowest possible values. + Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: + algorithm: auto + cost: 4 # Lowest possible value for bcrypt + time_cost: 3 # Lowest possible value for argon + memory_cost: 10 # Lowest possible value for argon diff --git a/config/packages/twig.yaml b/config/packages/twig.yaml new file mode 100755 index 0000000..4460518 --- /dev/null +++ b/config/packages/twig.yaml @@ -0,0 +1,8 @@ +twig: + default_path: '%kernel.project_dir%/templates' + #form_themes: ['bootstrap_4_layout.html.twig'] + form_themes: + - '@FOSCKEditor/Form/ckeditor_widget.html.twig' +when@test: + twig: + strict_variables: true diff --git a/config/packages/validator.yaml b/config/packages/validator.yaml new file mode 100644 index 0000000..0201281 --- /dev/null +++ b/config/packages/validator.yaml @@ -0,0 +1,13 @@ +framework: + validation: + email_validation_mode: html5 + + # Enables validator auto-mapping support. + # For instance, basic validation constraints will be inferred from Doctrine's metadata. + #auto_mapping: + # App\Entity\: [] + +when@test: + framework: + validation: + not_compromised_password: false diff --git a/config/packages/web_profiler.yaml b/config/packages/web_profiler.yaml new file mode 100755 index 0000000..b946111 --- /dev/null +++ b/config/packages/web_profiler.yaml @@ -0,0 +1,17 @@ +when@dev: + web_profiler: + toolbar: true + intercept_redirects: false + + framework: + profiler: + only_exceptions: false + collect_serializer_data: true + +when@test: + web_profiler: + toolbar: false + intercept_redirects: false + + framework: + profiler: { collect: false } diff --git a/config/packages/webpack_encore.yaml b/config/packages/webpack_encore.yaml new file mode 100755 index 0000000..4c009ee --- /dev/null +++ b/config/packages/webpack_encore.yaml @@ -0,0 +1,45 @@ +webpack_encore: + # The path where Encore is building the assets - i.e. Encore.setOutputPath() + output_path: '%kernel.project_dir%/public/build' + # If multiple builds are defined (as shown below), you can disable the default build: + # output_path: false + + # Set attributes that will be rendered on all script and link tags + script_attributes: + defer: true + # Uncomment (also under link_attributes) if using Turbo Drive + # https://turbo.hotwired.dev/handbook/drive#reloading-when-assets-change + # 'data-turbo-track': reload + # link_attributes: + # Uncomment if using Turbo Drive + # 'data-turbo-track': reload + + # If using Encore.enableIntegrityHashes() and need the crossorigin attribute (default: false, or use 'anonymous' or 'use-credentials') + # crossorigin: 'anonymous' + + # Preload all rendered script and link tags automatically via the HTTP/2 Link header + # preload: true + + # Throw an exception if the entrypoints.json file is missing or an entry is missing from the data + # strict_mode: false + + # If you have multiple builds: + # builds: + # frontend: '%kernel.project_dir%/public/frontend/build' + + # pass the build name as the 3rd argument to the Twig functions + # {{ encore_entry_script_tags('entry1', null, 'frontend') }} + +framework: + assets: + json_manifest_path: '%kernel.project_dir%/public/build/manifest.json' + +#when@prod: +# webpack_encore: +# # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes) +# # Available in version 1.2 +# cache: true + +#when@test: +# webpack_encore: +# strict_mode: false diff --git a/config/preload.php b/config/preload.php new file mode 100755 index 0000000..5ebcdb2 --- /dev/null +++ b/config/preload.php @@ -0,0 +1,5 @@ + [ + 'path' => './assets/app.js', + 'entrypoint' => true, + ], + '@hotwired/stimulus' => [ + 'version' => '3.2.2', + ], + '@symfony/stimulus-bundle' => [ + 'path' => './vendor/symfony/stimulus-bundle/assets/dist/loader.js', + ], + '@hotwired/turbo' => [ + 'version' => '7.3.0', + ], +]; diff --git a/migrations/.gitignore b/migrations/.gitignore new file mode 100755 index 0000000..e69de29 diff --git a/package.json b/package.json new file mode 100755 index 0000000..d3cadb4 --- /dev/null +++ b/package.json @@ -0,0 +1,54 @@ +{ + "devDependencies": { + "@babel/core": "^7.17.0", + "@babel/preset-env": "^7.16.0", + "@fortawesome/fontawesome-free": "^6.4.0", + "@hotwired/stimulus": "^3.0.0", + "@symfony/stimulus-bridge": "^3.2.0", + "@symfony/webpack-encore": "^4.0.0", + "autoprefixer": "^10.4.14", + "core-js": "^3.23.0", + "postcss-loader": "^7.3.0", + "regenerator-runtime": "^0.13.9", + "sass": "^1.62.1", + "sass-loader": "^13.0.0", + "webpack": "^5.74.0", + "webpack-cli": "^4.10.0", + "webpack-notifier": "^1.15.0" + }, + "license": "UNLICENSED", + "private": true, + "scripts": { + "dev-server": "encore dev-server", + "dev": "encore dev", + "watch": "encore dev --watch", + "build": "encore production --progress" + }, + "dependencies": { + "@popperjs/core": "^2.11.7", + "@pqina/pintura": "^8.64.1", + "animate.css": "^4.1.1", + "bootstrap": "^5.3.1", + "bootstrap-datepicker": "^1.10.0", + "bootstrap-dropdown-hover": "^4.2.0", + "bootstrap-select": "^1.14.0-beta3", + "chart.js": "^2.9.4", + "choices.js": "^10.2.0", + "copy-text-to-clipboard": "^3.2.0", + "country-select-bd": "^2.1.5", + "cropperjs": "^1.5.13", + "datatables.net-bs5": "^1.13.4", + "echo-js": "^1.7.3", + "filepond": "^4.30.4", + "intl-tel-input": "^18.1.6", + "jquery": "^3.7.0", + "jquery-cropper": "^1.0.1", + "jquery-mask-plugin": "^1.14.16", + "jquery-ui": "^1.13.2", + "jquery.easing": "^1.4.1", + "jquery.rateit": "^1.1.5", + "lightbox2": "^2.11.4", + "toastr": "^2.1.4", + "wow.js": "^1.2.2" + } +} diff --git a/phpunit.dist.xml b/phpunit.dist.xml new file mode 100755 index 0000000..22bd879 --- /dev/null +++ b/phpunit.dist.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + tests + + + + + + src + + + + Doctrine\Deprecations\Deprecation::trigger + Doctrine\Deprecations\Deprecation::delegateTriggerToBackend + trigger_deprecation + + + + + + diff --git a/public/images/backend/img/h.png b/public/images/backend/img/h.png new file mode 100644 index 0000000..4530fd4 Binary files /dev/null and b/public/images/backend/img/h.png differ diff --git a/public/images/backend/img/undraw_posting_photo.svg b/public/images/backend/img/undraw_posting_photo.svg new file mode 100644 index 0000000..fc0d549 --- /dev/null +++ b/public/images/backend/img/undraw_posting_photo.svg @@ -0,0 +1 @@ +posting photo \ No newline at end of file diff --git a/public/images/backend/img/undraw_profile.svg b/public/images/backend/img/undraw_profile.svg new file mode 100644 index 0000000..9802341 --- /dev/null +++ b/public/images/backend/img/undraw_profile.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + diff --git a/public/images/backend/img/undraw_profile_1.svg b/public/images/backend/img/undraw_profile_1.svg new file mode 100644 index 0000000..fcc91c7 --- /dev/null +++ b/public/images/backend/img/undraw_profile_1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/backend/img/undraw_profile_2.svg b/public/images/backend/img/undraw_profile_2.svg new file mode 100644 index 0000000..488d1bd --- /dev/null +++ b/public/images/backend/img/undraw_profile_2.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/backend/img/undraw_profile_3.svg b/public/images/backend/img/undraw_profile_3.svg new file mode 100644 index 0000000..eecb335 --- /dev/null +++ b/public/images/backend/img/undraw_profile_3.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/backend/img/undraw_rocket.svg b/public/images/backend/img/undraw_rocket.svg new file mode 100644 index 0000000..4542614 --- /dev/null +++ b/public/images/backend/img/undraw_rocket.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + diff --git a/public/images/font/ajax.gif b/public/images/font/ajax.gif new file mode 100644 index 0000000..e2a116c Binary files /dev/null and b/public/images/font/ajax.gif differ diff --git a/public/images/font/banners/LHS-banner.jpg b/public/images/font/banners/LHS-banner.jpg new file mode 100644 index 0000000..6c7d7b0 Binary files /dev/null and b/public/images/font/banners/LHS-banner.jpg differ diff --git a/public/images/font/banners/banner-side.png b/public/images/font/banners/banner-side.png new file mode 100644 index 0000000..9694c54 Binary files /dev/null and b/public/images/font/banners/banner-side.png differ diff --git a/public/images/font/banners/cat-banner-1.jpg b/public/images/font/banners/cat-banner-1.jpg new file mode 100644 index 0000000..da81cae Binary files /dev/null and b/public/images/font/banners/cat-banner-1.jpg differ diff --git a/public/images/font/banners/home-banner.jpg b/public/images/font/banners/home-banner.jpg new file mode 100644 index 0000000..59717cc Binary files /dev/null and b/public/images/font/banners/home-banner.jpg differ diff --git a/public/images/font/banners/home-banner1.jpg b/public/images/font/banners/home-banner1.jpg new file mode 100644 index 0000000..ed23264 Binary files /dev/null and b/public/images/font/banners/home-banner1.jpg differ diff --git a/public/images/font/banners/home-banner2.jpg b/public/images/font/banners/home-banner2.jpg new file mode 100644 index 0000000..75df47d Binary files /dev/null and b/public/images/font/banners/home-banner2.jpg differ diff --git a/public/images/font/banners/home-banner3.jpg b/public/images/font/banners/home-banner3.jpg new file mode 100644 index 0000000..4bdd4ed Binary files /dev/null and b/public/images/font/banners/home-banner3.jpg differ diff --git a/public/images/font/banners/home-banner4.jpg b/public/images/font/banners/home-banner4.jpg new file mode 100644 index 0000000..7d1c5ef Binary files /dev/null and b/public/images/font/banners/home-banner4.jpg differ diff --git a/public/images/font/banners/top-menu-banner.jpg b/public/images/font/banners/top-menu-banner.jpg new file mode 100644 index 0000000..323eedb Binary files /dev/null and b/public/images/font/banners/top-menu-banner.jpg differ diff --git a/public/images/font/banners/top-menu-banner1.jpg b/public/images/font/banners/top-menu-banner1.jpg new file mode 100644 index 0000000..7e114c2 Binary files /dev/null and b/public/images/font/banners/top-menu-banner1.jpg differ diff --git a/public/images/font/blank.gif b/public/images/font/blank.gif new file mode 100644 index 0000000..f191b28 Binary files /dev/null and b/public/images/font/blank.gif differ diff --git a/public/images/font/blog-post/blog_big_01.jpg b/public/images/font/blog-post/blog_big_01.jpg new file mode 100644 index 0000000..b90b119 Binary files /dev/null and b/public/images/font/blog-post/blog_big_01.jpg differ diff --git a/public/images/font/blog-post/blog_big_02.jpg b/public/images/font/blog-post/blog_big_02.jpg new file mode 100644 index 0000000..c1f77f4 Binary files /dev/null and b/public/images/font/blog-post/blog_big_02.jpg differ diff --git a/public/images/font/blog-post/blog_big_03.jpg b/public/images/font/blog-post/blog_big_03.jpg new file mode 100644 index 0000000..7c36a18 Binary files /dev/null and b/public/images/font/blog-post/blog_big_03.jpg differ diff --git a/public/images/font/close.png b/public/images/font/close.png new file mode 100644 index 0000000..20baa1d Binary files /dev/null and b/public/images/font/close.png differ diff --git a/public/images/font/delete.gif b/public/images/font/delete.gif new file mode 100644 index 0000000..2799b45 Binary files /dev/null and b/public/images/font/delete.gif differ diff --git a/public/images/font/hot-deals/p13.jpg b/public/images/font/hot-deals/p13.jpg new file mode 100644 index 0000000..2b9c073 Binary files /dev/null and b/public/images/font/hot-deals/p13.jpg differ diff --git a/public/images/font/hot-deals/p13_hover.jpg b/public/images/font/hot-deals/p13_hover.jpg new file mode 100644 index 0000000..4f26d09 Binary files /dev/null and b/public/images/font/hot-deals/p13_hover.jpg differ diff --git a/public/images/font/hot-deals/p14.jpg b/public/images/font/hot-deals/p14.jpg new file mode 100644 index 0000000..d9394fe Binary files /dev/null and b/public/images/font/hot-deals/p14.jpg differ diff --git a/public/images/font/hot-deals/p14_hover.jpg b/public/images/font/hot-deals/p14_hover.jpg new file mode 100644 index 0000000..3802d43 Binary files /dev/null and b/public/images/font/hot-deals/p14_hover.jpg differ diff --git a/public/images/font/hot-deals/p15.jpg b/public/images/font/hot-deals/p15.jpg new file mode 100644 index 0000000..f90b0bb Binary files /dev/null and b/public/images/font/hot-deals/p15.jpg differ diff --git a/public/images/font/hot-deals/p15_hover.jpg b/public/images/font/hot-deals/p15_hover.jpg new file mode 100644 index 0000000..b2fe94a Binary files /dev/null and b/public/images/font/hot-deals/p15_hover.jpg differ diff --git a/public/images/font/icon-cart.png b/public/images/font/icon-cart.png new file mode 100644 index 0000000..2190eb9 Binary files /dev/null and b/public/images/font/icon-cart.png differ diff --git a/public/images/font/label.png b/public/images/font/label.png new file mode 100644 index 0000000..a61a7e8 Binary files /dev/null and b/public/images/font/label.png differ diff --git a/public/images/font/loading.gif b/public/images/font/loading.gif new file mode 100644 index 0000000..5087c2a Binary files /dev/null and b/public/images/font/loading.gif differ diff --git a/public/images/font/logo.png b/public/images/font/logo.png new file mode 100644 index 0000000..56c04a5 Binary files /dev/null and b/public/images/font/logo.png differ diff --git a/public/images/font/next.png b/public/images/font/next.png new file mode 100644 index 0000000..08365ac Binary files /dev/null and b/public/images/font/next.png differ diff --git a/public/images/font/payments/1.png b/public/images/font/payments/1.png new file mode 100644 index 0000000..cf3c81b Binary files /dev/null and b/public/images/font/payments/1.png differ diff --git a/public/images/font/payments/2.png b/public/images/font/payments/2.png new file mode 100644 index 0000000..f599481 Binary files /dev/null and b/public/images/font/payments/2.png differ diff --git a/public/images/font/payments/3.png b/public/images/font/payments/3.png new file mode 100644 index 0000000..39b9cf7 Binary files /dev/null and b/public/images/font/payments/3.png differ diff --git a/public/images/font/payments/4.png b/public/images/font/payments/4.png new file mode 100644 index 0000000..aa9e095 Binary files /dev/null and b/public/images/font/payments/4.png differ diff --git a/public/images/font/payments/5.png b/public/images/font/payments/5.png new file mode 100644 index 0000000..f808305 Binary files /dev/null and b/public/images/font/payments/5.png differ diff --git a/public/images/font/plus.html b/public/images/font/plus.html new file mode 100644 index 0000000..c26c98c --- /dev/null +++ b/public/images/font/plus.html @@ -0,0 +1,115 @@ + + + + + +
+
+

+

+

+
+
+
+
+
+
+ + + diff --git a/public/images/font/prev.png b/public/images/font/prev.png new file mode 100644 index 0000000..329fa98 Binary files /dev/null and b/public/images/font/prev.png differ diff --git a/public/images/font/products/p1.jpg b/public/images/font/products/p1.jpg new file mode 100644 index 0000000..8edeea4 Binary files /dev/null and b/public/images/font/products/p1.jpg differ diff --git a/public/images/font/products/p10.jpg b/public/images/font/products/p10.jpg new file mode 100644 index 0000000..db29808 Binary files /dev/null and b/public/images/font/products/p10.jpg differ diff --git a/public/images/font/products/p10_hover.jpg b/public/images/font/products/p10_hover.jpg new file mode 100644 index 0000000..7dfa008 Binary files /dev/null and b/public/images/font/products/p10_hover.jpg differ diff --git a/public/images/font/products/p11.jpg b/public/images/font/products/p11.jpg new file mode 100644 index 0000000..930a5f6 Binary files /dev/null and b/public/images/font/products/p11.jpg differ diff --git a/public/images/font/products/p11_hover.jpg b/public/images/font/products/p11_hover.jpg new file mode 100644 index 0000000..b78e3e3 Binary files /dev/null and b/public/images/font/products/p11_hover.jpg differ diff --git a/public/images/font/products/p12.jpg b/public/images/font/products/p12.jpg new file mode 100644 index 0000000..e98ba58 Binary files /dev/null and b/public/images/font/products/p12.jpg differ diff --git a/public/images/font/products/p12_hover.jpg b/public/images/font/products/p12_hover.jpg new file mode 100644 index 0000000..42f5380 Binary files /dev/null and b/public/images/font/products/p12_hover.jpg differ diff --git a/public/images/font/products/p13.jpg b/public/images/font/products/p13.jpg new file mode 100644 index 0000000..2b9c073 Binary files /dev/null and b/public/images/font/products/p13.jpg differ diff --git a/public/images/font/products/p13_hover.jpg b/public/images/font/products/p13_hover.jpg new file mode 100644 index 0000000..4f26d09 Binary files /dev/null and b/public/images/font/products/p13_hover.jpg differ diff --git a/public/images/font/products/p14.jpg b/public/images/font/products/p14.jpg new file mode 100644 index 0000000..d9394fe Binary files /dev/null and b/public/images/font/products/p14.jpg differ diff --git a/public/images/font/products/p14_hover.jpg b/public/images/font/products/p14_hover.jpg new file mode 100644 index 0000000..3802d43 Binary files /dev/null and b/public/images/font/products/p14_hover.jpg differ diff --git a/public/images/font/products/p15.jpg b/public/images/font/products/p15.jpg new file mode 100644 index 0000000..f90b0bb Binary files /dev/null and b/public/images/font/products/p15.jpg differ diff --git a/public/images/font/products/p15_hover.jpg b/public/images/font/products/p15_hover.jpg new file mode 100644 index 0000000..b2fe94a Binary files /dev/null and b/public/images/font/products/p15_hover.jpg differ diff --git a/public/images/font/products/p1_hover.jpg b/public/images/font/products/p1_hover.jpg new file mode 100644 index 0000000..5d06d3a Binary files /dev/null and b/public/images/font/products/p1_hover.jpg differ diff --git a/public/images/font/products/p2.jpg b/public/images/font/products/p2.jpg new file mode 100644 index 0000000..0178470 Binary files /dev/null and b/public/images/font/products/p2.jpg differ diff --git a/public/images/font/products/p2_hover.jpg b/public/images/font/products/p2_hover.jpg new file mode 100644 index 0000000..432c08f Binary files /dev/null and b/public/images/font/products/p2_hover.jpg differ diff --git a/public/images/font/products/p3.jpg b/public/images/font/products/p3.jpg new file mode 100644 index 0000000..7d79f4b Binary files /dev/null and b/public/images/font/products/p3.jpg differ diff --git a/public/images/font/products/p3_hover.jpg b/public/images/font/products/p3_hover.jpg new file mode 100644 index 0000000..2c721c0 Binary files /dev/null and b/public/images/font/products/p3_hover.jpg differ diff --git a/public/images/font/products/p4.jpg b/public/images/font/products/p4.jpg new file mode 100644 index 0000000..e3308a8 Binary files /dev/null and b/public/images/font/products/p4.jpg differ diff --git a/public/images/font/products/p4_hover.jpg b/public/images/font/products/p4_hover.jpg new file mode 100644 index 0000000..cd961e1 Binary files /dev/null and b/public/images/font/products/p4_hover.jpg differ diff --git a/public/images/font/products/p5.jpg b/public/images/font/products/p5.jpg new file mode 100644 index 0000000..040f1dd Binary files /dev/null and b/public/images/font/products/p5.jpg differ diff --git a/public/images/font/products/p5_hover.jpg b/public/images/font/products/p5_hover.jpg new file mode 100644 index 0000000..66ccff2 Binary files /dev/null and b/public/images/font/products/p5_hover.jpg differ diff --git a/public/images/font/products/p6.jpg b/public/images/font/products/p6.jpg new file mode 100644 index 0000000..64ffaab Binary files /dev/null and b/public/images/font/products/p6.jpg differ diff --git a/public/images/font/products/p6_hover.jpg b/public/images/font/products/p6_hover.jpg new file mode 100644 index 0000000..4d4f967 Binary files /dev/null and b/public/images/font/products/p6_hover.jpg differ diff --git a/public/images/font/products/p7.jpg b/public/images/font/products/p7.jpg new file mode 100644 index 0000000..ea17c1b Binary files /dev/null and b/public/images/font/products/p7.jpg differ diff --git a/public/images/font/products/p7_hover.jpg b/public/images/font/products/p7_hover.jpg new file mode 100644 index 0000000..43186c7 Binary files /dev/null and b/public/images/font/products/p7_hover.jpg differ diff --git a/public/images/font/products/p8.jpg b/public/images/font/products/p8.jpg new file mode 100644 index 0000000..3bc54f6 Binary files /dev/null and b/public/images/font/products/p8.jpg differ diff --git a/public/images/font/products/p8_hover.jpg b/public/images/font/products/p8_hover.jpg new file mode 100644 index 0000000..bae36ab Binary files /dev/null and b/public/images/font/products/p8_hover.jpg differ diff --git a/public/images/font/products/p9.jpg b/public/images/font/products/p9.jpg new file mode 100644 index 0000000..836ab8f Binary files /dev/null and b/public/images/font/products/p9.jpg differ diff --git a/public/images/font/products/p9_hover.jpg b/public/images/font/products/p9_hover.jpg new file mode 100644 index 0000000..0c41b93 Binary files /dev/null and b/public/images/font/products/p9_hover.jpg differ diff --git a/public/images/font/sliders/01.jpg b/public/images/font/sliders/01.jpg new file mode 100644 index 0000000..4420cf9 Binary files /dev/null and b/public/images/font/sliders/01.jpg differ diff --git a/public/images/font/sliders/02.jpg b/public/images/font/sliders/02.jpg new file mode 100644 index 0000000..7754613 Binary files /dev/null and b/public/images/font/sliders/02.jpg differ diff --git a/public/images/font/spinner.png b/public/images/font/spinner.png new file mode 100644 index 0000000..5eb9678 Binary files /dev/null and b/public/images/font/spinner.png differ diff --git a/public/images/font/star-small.png b/public/images/font/star-small.png new file mode 100644 index 0000000..1e8b936 Binary files /dev/null and b/public/images/font/star-small.png differ diff --git a/public/images/font/star.html b/public/images/font/star.html new file mode 100644 index 0000000..c26c98c --- /dev/null +++ b/public/images/font/star.html @@ -0,0 +1,115 @@ + + + + + +
+
+

+

+

+
+
+
+
+
+
+ + + diff --git a/public/images/font/testimonials/member1.png b/public/images/font/testimonials/member1.png new file mode 100644 index 0000000..060a3c3 Binary files /dev/null and b/public/images/font/testimonials/member1.png differ diff --git a/public/images/font/testimonials/member2.png b/public/images/font/testimonials/member2.png new file mode 100644 index 0000000..53770bc Binary files /dev/null and b/public/images/font/testimonials/member2.png differ diff --git a/public/images/font/testimonials/member3.png b/public/images/font/testimonials/member3.png new file mode 100644 index 0000000..a4ddf17 Binary files /dev/null and b/public/images/font/testimonials/member3.png differ diff --git a/public/images/font/testimonials/member4.png b/public/images/font/testimonials/member4.png new file mode 100644 index 0000000..4c0fc28 Binary files /dev/null and b/public/images/font/testimonials/member4.png differ diff --git a/public/index.php b/public/index.php new file mode 100755 index 0000000..9982c21 --- /dev/null +++ b/public/index.php @@ -0,0 +1,9 @@ +annonceRepository = $annonceRepository; + $this->em = $em; + } + + + #[Route('/index', name: 'backend_admin_annonce_index')] + public function index(): Response + { + return $this->render('backend_admin/annonce/index.html.twig', ['annonces'=> $this->annonceRepository->findBy([], ["id"=>'DESC'])]); + } + + + #[Route('/add', name: 'backend_admin_annonce_add')] + public function add(Request $request): Response + { + $annonce = new Annonce(); + + $form = $this->createForm(AnnonceType::class, $annonce); + + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + + $annonce->setCreateBy($this->getUser()); + $this->em->persist($annonce); + $this->em->flush(); + + $this->addFlash('info', ['title'=>'Info', + 'message'=>"L'annonce a été bien créer. pour qu'il soit complet il faut ajouter au moins l'image d'accueil, recherche et détail"]); + + return $this->redirectToRoute('backend_admin_annonce_uploder', ['id' => $annonce->getId()]); + + } + + return $this->render('backend_admin/annonce/add_update.htm.twig',['form'=>$form]); + } + + + + #[Route('/update/{id}', name: 'backend_admin_annonce_update')] + public function update(Request $request, Annonce $annonce): Response + { + $form = $this->createForm(AnnonceType::class, $annonce); + + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + + $annonce->setDateUpdate(new \DateTime()); + $this->em->persist($annonce); + $this->em->flush(); + + $this->addFlash('success', ['title'=>'Success', 'message'=>"L'annonce a été bien modifier."]); + + } + + return $this->render('backend_admin/annonce/add_update.htm.twig',['form'=>$form]); + } + + + #[Route('/delete/{id}', name: 'backend_admin_annonce_delete')] + public function delete(Annonce $annonce, Request $request) + { + $delete = (boolean)$request->get('delete'); + + $annonce->setActive($delete); + $this->em->persist($annonce); + $this->em->flush(); + + if($delete == true ){ + $this->addFlash('success', ['title'=>'Success', 'message'=>"L'annoce a été bien activer"]); + }else{ + $this->addFlash('success', ['title'=>'Success', 'message'=>"L'annoce a été bien déactiver"]); + } + + $referer = $request->headers->get('referer'); + return $this->redirect($referer); + } + + + + #[Route('/uploder/{id}', name: 'backend_admin_annonce_uploder')] + public function uploder(Annonce $annonce) + { + return $this->render('backend_admin/annonce/uploder.htm.twig', ['annonce'=>$annonce]); + } + + + #[Route('/uploder_image/{id}', name: 'backend_admin_annonce_uploder_add')] + public function uploder_add(Annonce $annonce, Request $request) + { + $idSociete = $annonce->getSociete()->getId(); + $idAnnonce = $annonce->getId(); + + $type = $request->request->get('type'); + + $directory = $this->getParameter('annonces_directory'); + + $base64_image = $request->request->get('image64'); + + $posJpeg = strpos($base64_image, 'data:image/jpeg;base64,'); + if ($posJpeg !== false){ + $base64_img = str_replace('data:image/jpeg;base64,', '', $base64_image); + $extension = ".jpeg"; + } + + $posPng = strpos($base64_image,'data:image/png;base64,'); + if ($posPng !== false){ + $base64_img = str_replace('data:image/png;base64,', '', $base64_image); + $extension = ".png"; + } + + $posJpg = strpos($base64_image, 'data:image/jpg;base64,'); + if ($posJpg !== false){ + $base64_img = str_replace('data:image/jpg;base64,', '', $base64_image); + $extension = ".jpg"; + } + + $posGif = strpos($base64_image,'data:image/gif;base64,'); + if ($posGif !== false){ + $base64_img = str_replace('data:image/gif;base64,', '', $base64_image); + $extension = ".gif"; + } + + $namefile = "$idSociete-$idAnnonce-$type-".md5(rand()).$extension; + + $image = base64_decode($base64_img); + + + if($image){ + + $result = file_put_contents($directory . $namefile, $image); + + if($result){ + if($type == 'home'){ + if($annonce->getImageHome() && file_exists($directory . $annonce->getImageHome()) ){ + unlink($directory . $annonce->getImageHome()); + } + $annonce->setImageHome($namefile); + }elseif($type == 'search'){ + if($annonce->getImageSearch() && file_exists($directory . $annonce->getImageSearch()) ){ + unlink($directory . $annonce->getImageSearch()); + } + $annonce->setImageSearch($namefile); + } + elseif($type == 'detail1'){ + if($annonce->getImageDetail1() && file_exists($directory . $annonce->getImageDetail1()) ){ + unlink($directory . $annonce->getImageDetail1()); + } + $annonce->setImageDetail1($namefile); + } + elseif($type == 'detail2'){ + if($annonce->getImageDetail2() && file_exists($directory . $annonce->getImageDetail2()) ){ + unlink($directory . $annonce->getImageDetail2()); + } + $annonce->setImageDetail2($namefile); + } + elseif($type == 'detail3'){ + if($annonce->getImageDetail3() && file_exists($directory . $annonce->getImageDetail3()) ){ + unlink($directory . $annonce->getImageDetail3()); + } + $annonce->setImageDetail3($namefile); + } + elseif($type == 'detail4'){ + if($annonce->getImageDetail4() && file_exists($directory . $annonce->getImageDetail4()) ){ + unlink($directory . $annonce->getImageDetail4()); + } + $annonce->setImageDetail4($namefile); + } + + $annonce->checkComplet(); + + $this->em->persist($annonce); + } + } + + $this->em->flush(); + return new Response(); + } + + + #[Route('/uploder_image_delete', name: 'backend_admin_annonce_uploder_delete')] + public function uploder_delete(Request $request) + { + + + die(); + } + + +} + + +//datatable.html.twig \ No newline at end of file diff --git a/src/Controller/BackendAdmin/AnnoncePositionController.php b/src/Controller/BackendAdmin/AnnoncePositionController.php new file mode 100755 index 0000000..a72e91c --- /dev/null +++ b/src/Controller/BackendAdmin/AnnoncePositionController.php @@ -0,0 +1,258 @@ +positionRepository = $positionRepository; + $this->annonceRepository = $annonceRepository; + $this->ligneRepository = $ligneRepository; + $this->serviceAnnonce = $serviceAnnonce; + $this->em = $em; + } + + #[Route('/index', name: 'backend_admin_position_index')] + public function index(): Response + { + $positions = $this->positionRepository->findAll(); + + return $this->render('backend_admin/position_affichage/index.html.twig', ['positions'=>$positions]); + } + + #[Route('/detail', name: 'backend_admin_position_detail')] + public function detail(Request $request): Response + { + $idPosition = $request->get('idPosition'); + + $position = $this->positionRepository->find($idPosition); + + $lignes = $this->ligneRepository->findAllKeyId(); + + $msg = $request->get('msg'); + if($msg == 'add'){ + $this->addFlash('success', ['title'=>'Success', + 'message'=>"La position et l'affichage d'annonce (".$position->getAnnonce()->getTitre().") a été bien enregister."]); + } + + + + return $this->render('backend_admin/position_affichage/detail.html.twig', ['position'=>$position, 'ligne' => $lignes[$position->getLigne()]]); + } + + + #[Route('/creer', name: 'backend_admin_position_creer')] + public function creer(Request $request, + SocieteRepository $societeRepository): Response + { + $idSociete = $request->get('idSociete'); + if($idSociete){ + $annonces = $this->annonceRepository->findBy(["societe"=>$idSociete], ["id"=>'DESC']); + $options = ''; + foreach($annonces as $annonce){ + $options .= ''; + } + return new Response($options); + } + + return $this->render('backend_admin/position_affichage/creer.html.twig',['societes'=>$societeRepository->findAll()]); + } + + + #[Route('/ligne_detail', name: 'backend_admin_position_ligne_detail')] + public function ligne_detail(Request $request): Response + { + + $dimension = $request->get('dimension'); + + $lignes = $this->ligneRepository->findAllKeyId(); + + $options = ''; + + foreach($lignes as $ligne){ + $options .= ''; + } + + return new Response($options); + } + + + + + #[Route('/disponibilite', name: 'backend_admin_position_disponibilite')] + public function disponibilite(Request $request, + AffichageRepository $affichageRepository): Response + { + $id_annonce = $request->get('id_annonce'); + $id_ligne = $request->get('id_ligne'); + $date_debut = $request->get('date_debut'); + $date_fin = $request->get('date_fin'); + + $annonce = $this->annonceRepository->find($id_annonce); + + $arrAffichages = $this->serviceAnnonce->getAnnoncePosition($annonce, $date_debut, $date_fin, $id_ligne); + + $totalPrix = $nbrDates = $nbrDispo = 0; + + $body = ""; + + foreach($arrAffichages as $val) + { + + $totalPrix += $val['prix']; + + $nbrDates++; + + if($val['dispo']){ + if($id_ligne == $val['ligne']->getId()){ + $nbrDispo ++; + $body .= '
  • +
    +
    '.$val['date']->format("d/m/Y").'
    + Disponible +
    + Ligne '.$val['ligne']->getRang().' + '.$val['prix'].' DT +
  • '; + + }else{ + $body .= '
  • +
    +
    '.$val['date']->format("d/m/Y").'
    + Disponible sur une autre ligne +
    + Ligne '.$val['ligne']->getRang().' + '.$val['prix'].' DT +
  • '; + } + }else{ + $body .= '
  • +
    +
    '.$val['date']->format("d/m/Y").'
    + Ligne Suivante Disponible +
    + Ligne '.$val['ligne']->getRang().' + '.$val['prix'].' DT +
  • '; + } + + } + + $result = '
    +

    + Disponibilité annonce sur la Ligne + '.$nbrDispo.'/'.$nbrDates.' +

    +
    +
      '.$body ; + + $result .= '
    +
    +
    +

    + Nombre des jours: '.$nbrDates.'

    + Prix Total d\'annonce: '.$totalPrix.' DT +

    +
    '; + + return new Response($result); + } + + + #[Route('/save', name: 'backend_admin_position_save')] + public function save(Request $request): Response + { + $id_annonce = $request->get('id_annonce'); + $id_ligne =$request->get('id_ligne'); + $date_debut = $request->get('date_debut'); + $date_fin = $request->get('date_fin'); + + $annonce = $this->annonceRepository->find($id_annonce); + + $position = $this->positionRepository->addPosition($annonce, $date_debut, $date_fin, $id_ligne, $this->getUser()); + + $arrAffichages = $this->serviceAnnonce->getAnnoncePosition($annonce, $date_debut, $date_fin, $id_ligne); + + foreach($arrAffichages as $value){ + if($value['dispo']){ + $affichage = new Affichage(); + $affichage->setAnnonce($annonce); + $affichage->setDateShow($value['date']); + $affichage->setLigne($value['ligne']->getId()); + $affichage->setPosition($position); + $affichage->setPrix($value['prix']); + $this->em->persist($affichage); + } + } + $this->em->flush(); + + return new Response($position->getId()); + } + + +} + + +//datatable.html.twig \ No newline at end of file diff --git a/src/Controller/BackendAdmin/ArticleController.php b/src/Controller/BackendAdmin/ArticleController.php new file mode 100755 index 0000000..3e8689d --- /dev/null +++ b/src/Controller/BackendAdmin/ArticleController.php @@ -0,0 +1,233 @@ +articleRepository = $articleRepository; + $this->em = $em; + } + + + #[Route('/index', name: 'backend_admin_article_index')] + public function index(): Response + { + return $this->render('backend_admin/article/index.html.twig', ['articles'=> $this->articleRepository->findBy([], ["id"=>'DESC'])]); + } + + #[Route('/add', name: 'backend_admin_article_add')] + public function add(Request $request): Response + { + $article = new Article(); + + $form = $this->createForm(ArticleType::class, $article); + + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + $article = $form->getData(); + + if( ($article->getLimitType() == 0) && ($article->getLimitDate() == null) ){ + $this->addFlash('danger', ['title'=>'Erreur', 'message'=>"Limitation Par Date vide"]); + return $this->redirectToRoute('backend_admin_article_add', ['form'=>$form]); + } + + if( ($article->getLimitType() == 1) && ($article->getLimitQuantite() <= 0) ){ + $this->addFlash('danger', ['title'=>'Erreur', 'message'=>"Limitation Par Quantité vide"]); + return $this->redirectToRoute('backend_admin_article_add', ['form'=>$form]); + } + + $article->setCreateBy($this->getUser()); + $this->em->persist($article); + $this->em->flush(); + + $this->addFlash('info', ['title'=>'Info', + 'message'=>"Le produit a été bien créer. pour qu'il soit active il faut ajouter au moins l'image d'accueil"]); + + return $this->redirectToRoute('backend_admin_article_uploder', ['id' => $article->getId()]); + } + + return $this->render('backend_admin/article/add.html.twig', ['form'=>$form->createView()] ); + } + + #[Route('/activation/{id}', name: 'backend_admin_article_activation')] + public function activation(Article $article, Request $request) + { + $activation = $request->get('activation'); + + if($activation == 'true'){ + $article->setActive(true); + }else if($activation == 'false'){ + $article->setActive(false); + } + + $this->em->persist($article); + $this->em->flush(); + + return $this->redirectToRoute('backend_admin_article_index'); + } + + + #[Route('/update/{id}', name: 'backend_admin_article_update')] + public function update(Article $article, Request $request): Response + { + $form = $this->createForm(ArticleType::class, $article); + + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + + $article = $form->getData(); + + if( ($article->getLimitType() == 0) && ($article->getLimitDate() == null) ){ + $this->addFlash('danger', ['title'=>'Erreur', 'message'=>"Limitation Par Date vide"]); + return $this->redirectToRoute('backend_admin_article_add', ['form'=>$form]); + } + + if( ($article->getLimitType() == 1) && ($article->getLimitQuantite() <= 0) ){ + $this->addFlash('danger', ['title'=>'Erreur', 'message'=>"Limitation Par Quantité vide"]); + return $this->redirectToRoute('backend_admin_article_add', ['form'=>$form]); + } + + $this->em->persist($article); + $this->em->flush(); + + } + + return $this->render('backend_admin/article/detail.html.twig', ['form'=>$form->createView(), 'article'=>$article] ); + } + + + #[Route('/uploder/{id}', name: 'backend_admin_article_uploder')] + public function uploder(Article $article) + { + return $this->render('backend_admin/article/uploder.htm.twig', ['article'=>$article]); + } + + + #[Route('/uploder_image/{id}', name: 'backend_admin_article_uploder_add')] + public function uploder_add(Article $article, Request $request) + { + $idSociete = $article->getSociete()->getId(); + $idArticle = $article->getId(); + + $type = $request->request->get('type'); + + $directory = $this->getParameter('articles_directory'); + + $base64_image = $request->request->get('image64'); + + $posJpeg = strpos($base64_image, 'data:image/jpeg;base64,'); + if ($posJpeg !== false){ + $base64_img = str_replace('data:image/jpeg;base64,', '', $base64_image); + $extension = ".jpeg"; + } + + $posPng = strpos($base64_image,'data:image/png;base64,'); + if ($posPng !== false){ + $base64_img = str_replace('data:image/png;base64,', '', $base64_image); + $extension = ".png"; + } + + $posJpg = strpos($base64_image, 'data:image/jpg;base64,'); + if ($posJpg !== false){ + $base64_img = str_replace('data:image/jpg;base64,', '', $base64_image); + $extension = ".jpg"; + } + + $posGif = strpos($base64_image,'data:image/gif;base64,'); + if ($posGif !== false){ + $base64_img = str_replace('data:image/gif;base64,', '', $base64_image); + $extension = ".gif"; + } + + $namefile = "$idSociete-$idArticle-$type-".md5(rand()).$extension; + + $image = base64_decode($base64_img); + + + if($image){ + + $result = file_put_contents($directory . $namefile, $image); + + if($result){ + if($type == 'default'){ + if($article->getImageDefault() && file_exists($directory . $article->getImageDefault()) ){ + unlink($directory . $article->getImageDefault()); + } + $article->setImageDefault($namefile); + $article->setActive(true); + }elseif($type == 'detail1'){ + if($article->getImageDetail1() && file_exists($directory . $article->getImageDetail1()) ){ + unlink($directory . $article->getImageDetail1()); + } + $article->setImageDetail1($namefile); + } + elseif($type == 'detail2'){ + if($article->getImageDetail2() && file_exists($directory . $article->getImageDetail2()) ){ + unlink($directory . $article->getImageDetail2()); + } + $article->setImageDetail2($namefile); + } + elseif($type == 'detail3'){ + if($article->getImageDetail3() && file_exists($directory . $article->getImageDetail3()) ){ + unlink($directory . $article->getImageDetail3()); + } + $article->setImageDetail3($namefile); + } + elseif($type == 'detail4'){ + if($article->getImageDetail4() && file_exists($directory . $article->getImageDetail4()) ){ + unlink($directory . $article->getImageDetail4()); + } + $article->setImageDetail4($namefile); + } + + $this->em->persist($article); + } + } + + $this->em->flush(); + return new Response(); + } + + + #[Route('/uploder_image_delete', name: 'backend_admin_article_uploder_delete')] + public function uploder_delete(Request $request) + { + die(); + } + +} \ No newline at end of file diff --git a/src/Controller/BackendAdmin/CategorieController.php b/src/Controller/BackendAdmin/CategorieController.php new file mode 100755 index 0000000..207ecbb --- /dev/null +++ b/src/Controller/BackendAdmin/CategorieController.php @@ -0,0 +1,105 @@ +categorieRepository = $categorieRepository; + $this->em = $em; + } + + + #[Route('/index', name: 'backend_admin_categorie_index')] + public function index(Request $request): Response + { + $categorie = new Categorie(); + + $idCategorie = $request->get('idCategorie'); + if($idCategorie){ + $categorie = $this->categorieRepository->find($idCategorie); + } + + $form = $this->createForm(CategorieType::class, $categorie); + + return $this->render('backend_admin/categorie/index_categorie.html.twig', ['form'=>$form, 'categorie' => $categorie, 'categories'=> $this->categorieRepository->findBy([], ["id"=>'DESC'])]); + } + + + #[Route('/add', name: 'backend_admin_categorie_add')] + public function add(Request $request): Response + { + $categorie = new Categorie(); + + $form = $this->createForm(CategorieType::class, $categorie); + + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $this->em->persist($categorie); + $this->em->flush(); + $this->addFlash('success', ['title'=>'Success', + 'message'=>"La catégorie (".$categorie->getNom().") a été bien créer."]); + } + return $this->redirectToRoute('backend_admin_categorie_index'); + } + + + #[Route('/update/{id}', name: 'backend_admin_categorie_update')] + public function update(Request $request, Categorie $categorie): Response + { + $form = $this->createForm(CategorieType::class, $categorie); + + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + + $this->em->persist($categorie); + $this->em->flush(); + + $this->addFlash('success', ['title'=>'Success', + 'message'=>"La catégorie (".$categorie->getNom().") a été bien Modifier."]); + } + + return $this->redirectToRoute('backend_admin_categorie_index'); + } + + + + +} + + +//datatable.html.twig \ No newline at end of file diff --git a/src/Controller/BackendAdmin/DashboardController.php b/src/Controller/BackendAdmin/DashboardController.php new file mode 100755 index 0000000..e106b5f --- /dev/null +++ b/src/Controller/BackendAdmin/DashboardController.php @@ -0,0 +1,24 @@ +render('backend_admin/dashboard/index.html.twig', ['titlePage'=> 'Dashboard']); + } + + + + +} + + +//datatable.html.twig \ No newline at end of file diff --git a/src/Controller/BackendAdmin/DemoController.php b/src/Controller/BackendAdmin/DemoController.php new file mode 100755 index 0000000..0d24068 --- /dev/null +++ b/src/Controller/BackendAdmin/DemoController.php @@ -0,0 +1,199 @@ +findOneBy(['reference'=>"6781-4065-9580-5000"]); + + //$reservationArticle = $reservationArticleRepository->findByReferenceNotValid("6781-4065-9580-5000"); + + dd($reservationArticle); + die; + } + + #[Route('/test1')] + public function test1() + { + $duree = 60; + $between = 15; + + $startTime = "09:00:00"; + $endTime = "13:00:00"; + + $excludeDay = ["Sun"]; + + $intervalDay = new \DateInterval('P1D'); + $dateRangeDay = new \DatePeriod(new \DateTime("2023-09-01"), $intervalDay, new \DateTime("2023-09-03")); + + $range = []; + foreach ($dateRangeDay as $date) { + + $dateStr = $date->format("Y-m-d"); + + + $Indice = array_search($date->format('D'), $excludeDay); + if(!$excludeDay || !is_numeric($Indice)){ + + $debut = new \DateTime("$dateStr $startTime"); + $tempo = new \DateTime("$dateStr $startTime"); + + $end = new \DateTime("$dateStr $endTime"); + + do{ + + $fin = clone $tempo->modify("+$duree minutes"); + + if($fin<$end){ + $range[] = ['debut'=>$debut, 'fin'=>$fin]; + } + + $debut = clone $tempo->modify("+$between minutes"); + + }while($debut < $end); + } + + } + + dd($range); + + die; + } + + #[Route('/index', name: 'backend_admin_demo_index')] + public function index(): Response + { + return $this->render('backend_admin/demo/index.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + #[Route('/test', name: 'backend_admin_demo_test')] + public function test(): Response + { + return $this->render('backend_admin/demo/test.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + #[Route('/button', name: 'backend_admin_demo_button')] + public function button(): Response + { + return $this->render('backend_admin/demo/button.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + #[Route('/datatable', name: 'demo_backend_datatable')] + public function datatable(): Response + { + return $this->render('backend_admin/demo/datatable.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + #[Route('/page404', name: 'backend_admin_demo_page404')] + public function page404(): Response + { + return $this->render('backend_admin/demo/page404.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + #[Route('/bootstrap', name: 'demo_backend_bootstrap')] + public function bootstrap(): Response + { + return $this->render('backend_admin/demo/bootstrap.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + #[Route('/cards', name: 'demo_backend_cards')] + public function cards(): Response + { + return $this->render('backend_admin/demo/cards.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + + #[Route('/charts', name: 'demo_backend_charts')] + public function charts(): Response + { + return $this->render('backend_admin/demo/charts.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + + #[Route('/animation', name: 'demo_backend_animation')] + public function animation(): Response + { + return $this->render('backend_admin/demo/animation.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + + #[Route('/border', name: 'demo_backend_border')] + public function border(): Response + { + return $this->render('backend_admin/demo/border.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + #[Route('/color', name: 'demo_backend_color')] + public function color(): Response + { + return $this->render('backend_admin/demo/color.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + + #[Route('/other', name: 'demo_backend_other')] + public function other(): Response + { + return $this->render('backend_admin/demo/other.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + #[Route('/authentication', name: 'demo_backend_authentication')] + public function authentication(): Response + { + return $this->render('backend_admin/demo/authentication.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + + + #[Route('/phpinfo', name: 'demo_backend_phpinfo')] + public function phpinfo() + { + phpinfo();die; + } + + +} + + +//datatable.html.twig \ No newline at end of file diff --git a/src/Controller/BackendAdmin/GroupCategorieController.php b/src/Controller/BackendAdmin/GroupCategorieController.php new file mode 100755 index 0000000..737b3d9 --- /dev/null +++ b/src/Controller/BackendAdmin/GroupCategorieController.php @@ -0,0 +1,143 @@ +groupeRepository = $groupeRepository; + $this->em = $em; + } + + #[Route('/index', name: 'backend_admin_groupe_categorie_index')] + public function index(Request $request): Response + { + + $groupe = new GroupeCategorie(); + + $idGroupe = $request->get('idGroupe'); + if($idGroupe){ + $groupe = $this->groupeRepository->find($idGroupe); + } + + $form = $this->createForm(GroupeCategorieType::class, $groupe); + + return $this->render('backend_admin/categorie/index_group.html.twig',['form'=>$form, 'groupe' => $groupe, 'groupes'=> $this->groupeRepository->findAll()]); + } + + + #[Route('/add', name: 'backend_admin_groupe_categorie_add')] + public function add(Request $request, UploaderService $uploaderService): Response + { + $groupe = new GroupeCategorie(); + + $form = $this->createForm(GroupeCategorieType::class, $groupe); + + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + + $image = $form->get('image')->getData(); + if ($image) { + $directory = $this->getParameter('groupes_directory'); + $groupe->setImage($uploaderService->uploadFile($image, $directory)); + } + + $this->em->persist($groupe); + $this->em->flush(); + + $this->addFlash('success', ['title'=>'Success', + 'message'=>"Le groupe (".$groupe->getNom().") a été bien ajouter."]); + } + return $this->redirectToRoute('backend_admin_groupe_categorie_index'); + } + + + #[Route('/update/{id}', name: 'backend_admin_groupe_categorie_update')] + public function update(Request $request, GroupeCategorie $groupe, UploaderService $uploaderService): Response + { + $form = $this->createForm(GroupeCategorieType::class, $groupe); + + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + + $image = $form->get('image')->getData(); + if ($image) { + $directory = $this->getParameter('groupes_directory'); + $pathImage = $directory.$groupe->getImage(); + + $groupe->setImage($uploaderService->uploadFile($image, $directory)); + if(is_file($pathImage)){ + unlink($pathImage); + } + + } + + $this->em->persist($groupe); + $this->em->flush(); + + $this->addFlash('success', ['title'=>'Success', + 'message'=>"Le groupe (".$groupe->getNom().") a été bien modifier."]); + } + + return $this->redirectToRoute('backend_admin_groupe_categorie_index'); + } + + + #[Route('/remove_image/{id}', name: 'backend_admin_groupe_categorie_remove_image')] + public function remove_image(GroupeCategorie $groupe): Response + { + $directory = $this->getParameter('groupes_directory'); + $pathImage = $directory.$groupe->getImage(); + if($groupe->getImage() && is_file($pathImage)){ + unlink($pathImage); + $groupe->setImage(null); + $this->em->persist($groupe); + $this->em->flush(); + + $this->addFlash('success', ['title'=>'Success', + 'message'=>"l'image du groupe (".$groupe->getNom().") a été bien supprimer."]); + } + return $this->redirectToRoute('backend_admin_groupe_categorie_update',['id'=>$groupe->getId()]); + } + + +} + + +//datatable.html.twig \ No newline at end of file diff --git a/src/Controller/BackendAdmin/PartenaireController.php b/src/Controller/BackendAdmin/PartenaireController.php new file mode 100755 index 0000000..7807e66 --- /dev/null +++ b/src/Controller/BackendAdmin/PartenaireController.php @@ -0,0 +1,138 @@ +em = $em; + $this->partenaireRepository = $partenaireRepository; + } + + #[Route('/index', name: 'backend_admin_partenaire_index')] + public function index(): Response + { + $partenaires = $this->partenaireRepository->findAll(); + + return $this->render('backend_admin/partenaire/index.html.twig', ['partenaires'=>$partenaires]); + } + + + #[Route('/add', name: 'backend_admin_partenaire_add')] + public function add(Request $request): Response + { + $partenaire = new Partenaire(); + + $form = $this->createForm(PartenaireType::class, $partenaire); + + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + + $partenaire = $form->getData(); + + $partenaires = $partenaire->getPartenaire()->getPartenaires(); + foreach($partenaires as $partner){ + if($partenaire->getSociete()->getId() == $partner->getSociete()->getId()){ + $this->addFlash('warning', ['title'=>'Attention', 'message'=>"cette société existe déja pour ce utilisateur"]); + return $this->render('backend_admin/partenaire/add.html.twig', ['form'=>$form]); + } + } + + $partenaire->setAdmin($this->getUser()); + $partenaire->setActive(true); + $partenaire->setNotifier(true); + + if(count($partenaires) == 0){ + $partenaire->setSelected(true); + }else{ + $partenaire->setSelected(false); + } + + // update role user + $partner = $partenaire->getPartenaire(); + $partner->addRole("ROLE_PARTNER_ADVANCED"); + + $this->em->persist($partner); + $this->em->persist($partenaire); + + $this->em->flush(); + + $this->addFlash('success', ['title'=>'Success', 'message'=>"L'ajout a été effectuée avec succès"]); + return $this->redirectToRoute('backend_admin_partenaire_index'); + } + + return $this->render('backend_admin/partenaire/add.html.twig', ['form'=>$form]); + } + + + #[Route('/activated/{id}/{active}', name: 'backend_admin_partenaire_activated')] + public function activated(partenaire $partenaire, $active): Response + { + $message = ""; + $partenaire->setActive($active); + $partenaire->setAdmin($this->getUser()); + $partenaire->setNotifier(true); + + $user = $partenaire->getPartenaire(); + $roles = $user->getRoles(); + + if($active){ + $roles[] = "ROLE_PARTNER_ADVANCED"; + $message = "Le partenaire a été bien activer."; + $societe = $partenaire->getSociete(); + $societe->setActive(true); + $this->em->persist($societe); + $this->em->flush(); + }else{ + $roles = []; + $message = "Le partenaire a été bien déactiver."; + } + + $user->setRoles($roles); + $this->em->persist($user); + $this->em->flush(); + + $this->em->persist($partenaire); + $this->em->flush(); + + $this->addFlash('success', ['title'=>'Success', 'message'=>$message]); + + return $this->redirectToRoute('backend_admin_partenaire_index'); + } + + +} \ No newline at end of file diff --git a/src/Controller/BackendAdmin/ServiceController.php b/src/Controller/BackendAdmin/ServiceController.php new file mode 100755 index 0000000..aa07271 --- /dev/null +++ b/src/Controller/BackendAdmin/ServiceController.php @@ -0,0 +1,227 @@ +serviceRepository = $serviceRepository; + $this->em = $em; + } + + + #[Route('/index', name: 'backend_admin_service_index')] + public function index(): Response + { + return $this->render('backend_admin/service/index.html.twig', ['services'=> $this->serviceRepository->findBy([], ["id"=>'DESC'])]); + } + + #[Route('/add', name: 'backend_admin_service_add')] + public function add(Request $request): Response + { + $service = new Service(); + + $form = $this->createForm(ServiceType::class, $service); + + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + $service = $form->getData(); + + if( ($service->getLimitType() == 0) && ($service->getLimitDate() == null) ){ + $this->addFlash('danger', ['title'=>'Erreur', 'message'=>"Limitation Par Date vide"]); + return $this->redirectToRoute('backend_admin_service_add', ['form'=>$form]); + } + + $service->setCreateBy($this->getUser()); + $this->em->persist($service); + $this->em->flush(); + + $this->addFlash('info', ['title'=>'Info', + 'message'=>"Le service a été bien créer. pour qu'il soit active il faut ajouter les images et les rendez-vous "]); + + + return $this->redirectToRoute('backend_admin_service_uploder', ['id' => $service->getId()]); + } + + return $this->render('backend_admin/service/add.html.twig', ['form'=>$form->createView()] ); + } + + + #[Route('/activation/{id}', name: 'backend_admin_service_activation')] + public function activation(Service $service, Request $request) + { + $activation = $request->get('activation'); + + if($activation == 'true'){ + $service->setActive(true); + }else if($activation == 'false'){ + $service->setActive(false); + } + + $this->em->persist($service); + $this->em->flush(); + + return $this->redirectToRoute('backend_admin_service_index'); + } + + + #[Route('/update/{id}', name: 'backend_admin_service_update')] + public function update(Service $service, Request $request): Response + { + $form = $this->createForm(ServiceType::class, $service); + + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + + $service = $form->getData(); + + if( ($service->getLimitType() == 0) && ($service->getLimitDate() == null) ){ + $this->addFlash('danger', ['title'=>'Erreur', 'message'=>"Limitation Par Date vide"]); + return $this->redirectToRoute('backend_admin_service_add', ['form'=>$form]); + } + + $service->gestionActive(); + + $this->em->persist($service); + $this->em->flush(); + + } + + return $this->render('backend_admin/service/detail.html.twig', ['form'=>$form->createView(), 'service'=>$service] ); + } + + + #[Route('/uploder/{id}', name: 'backend_admin_service_uploder')] + public function uploder(Service $service) + { + return $this->render('backend_admin/service/uploder.htm.twig', ['service'=>$service]); + } + + + #[Route('/uploder_image/{id}', name: 'backend_admin_service_uploder_add')] + public function uploder_add(Service $service, Request $request) + { + $idSociete = $service->getSociete()->getId(); + $idService = $service->getId(); + + $type = $request->request->get('type'); + + $directory = $this->getParameter('services_directory'); + + $base64_image = $request->request->get('image64'); + + $posJpeg = strpos($base64_image, 'data:image/jpeg;base64,'); + if ($posJpeg !== false){ + $base64_img = str_replace('data:image/jpeg;base64,', '', $base64_image); + $extension = ".jpeg"; + } + + $posPng = strpos($base64_image,'data:image/png;base64,'); + if ($posPng !== false){ + $base64_img = str_replace('data:image/png;base64,', '', $base64_image); + $extension = ".png"; + } + + $posJpg = strpos($base64_image, 'data:image/jpg;base64,'); + if ($posJpg !== false){ + $base64_img = str_replace('data:image/jpg;base64,', '', $base64_image); + $extension = ".jpg"; + } + + $posGif = strpos($base64_image,'data:image/gif;base64,'); + if ($posGif !== false){ + $base64_img = str_replace('data:image/gif;base64,', '', $base64_image); + $extension = ".gif"; + } + + $namefile = "$idSociete-$idService-$type-".md5(rand()).$extension; + + $image = base64_decode($base64_img); + + if($image){ + + $result = file_put_contents($directory . $namefile, $image); + + if($result){ + if($type == 'default'){ + if($service->getImageDefault() && file_exists($directory . $service->getImageDefault()) ){ + unlink($directory . $service->getImageDefault()); + } + $service->setImageDefault($namefile); + }elseif($type == 'detail1'){ + if($service->getImageDetail1() && file_exists($directory . $service->getImageDetail1()) ){ + unlink($directory . $service->getImageDetail1()); + } + $service->setImageDetail1($namefile); + } + elseif($type == 'detail2'){ + if($service->getImageDetail2() && file_exists($directory . $service->getImageDetail2()) ){ + unlink($directory . $service->getImageDetail2()); + } + $service->setImageDetail2($namefile); + } + elseif($type == 'detail3'){ + if($service->getImageDetail3() && file_exists($directory . $service->getImageDetail3()) ){ + unlink($directory . $service->getImageDetail3()); + } + $service->setImageDetail3($namefile); + } + elseif($type == 'detail4'){ + if($service->getImageDetail4() && file_exists($directory . $service->getImageDetail4()) ){ + unlink($directory . $service->getImageDetail4()); + } + $service->setImageDetail4($namefile); + } + + $service->gestionActive(); + + $this->em->persist($service); + } + } + + $this->em->flush(); + return new Response(); + } + + + #[Route('/uploder_image_delete', name: 'backend_admin_service_uploder_delete')] + public function uploder_delete(Request $request) + { + die(); + } + +} \ No newline at end of file diff --git a/src/Controller/BackendAdmin/ServiceRDVController.php b/src/Controller/BackendAdmin/ServiceRDVController.php new file mode 100755 index 0000000..7024626 --- /dev/null +++ b/src/Controller/BackendAdmin/ServiceRDVController.php @@ -0,0 +1,147 @@ +isMethod('POST')) { + + $data = $request->request->all(); + + if(isset($data['Sun'])){$excludeDay[] = 'Sun'; } + if(isset($data['Mon'])){$excludeDay[] = 'Mon'; } + if(isset($data['Tue'])){$excludeDay[] = 'Tue'; } + if(isset($data['Wed'])){$excludeDay[] = 'Wed'; } + if(isset($data['Thu'])){$excludeDay[] = 'Thu'; } + if(isset($data['Fri'])){$excludeDay[] = 'Fri'; } + if(isset($data['Sat'])){$excludeDay[] = 'Sat'; } + + $Param['id'] = $service->getId(); + $Param['startDate'] = $data['date-debut']; + $Param['endDate'] = $data['date-fin']; + $Param['startTime'] = $data['time-debut']; + $Param['endTime'] = $data['time-fin']; + $Param['between'] = $data['duree-entre']; + $Param ['duree'] = $service->getDuree(); + $Param['excludeDay'] = $excludeDay; + $Param['save'] = 'true'; + + $ranges = $serviceService->getListRendezVous(new \DateTime($Param['startDate']), new \DateTime($Param['endDate']), $Param['startTime'], $Param['endTime'], $Param ['duree'], $Param['between'], $excludeDay); + $RendezVous = []; + foreach($ranges as $range){ + + $RendezVous[$range['debut']->format('d/m/Y')][] = ['debut'=>$range['debut']->format('H:i'), 'fin'=>$range['fin']->format('H:i')]; + } + $Param['arrRendezVous'] = $RendezVous; + + return $this->render('backend_admin/service_rdv/show_new_rdv.html.twig', $Param); + } + return $this->render('backend_admin/service_rdv/add.html.twig', ["service"=>$service]); + } + + + #[Route('/show/{id}', name: 'backend_admin_service_rdv_show')] + public function show(ServiceRdv $serviceRdv): Response + { + $Param = $serviceRdv->toArray(); + $Param['save'] = 'false'; + + return $this->render('backend_admin/service_rdv/show_new_rdv.html.twig', $Param); + } + + + #[Route('/rdv_ajax_show', name: 'backend_admin_service_rdv_ajax_show')] + public function rdv_ajax_show(Request $request, ServiceRDVRepository $serviceRdvRepository) + { + $idRdv = $request->get('idRdv'); + $serviceRdvs = $serviceRdvRepository->findBy(['service'=>$idRdv],["id"=>'DESC']); + $result = ""; + foreach($serviceRdvs as $serviceRdv){ + $result .= ""; + $result .= "".$serviceRdv->getId().""; + $result .= "".$serviceRdv->getStringStartDate().""; + $result .= "".$serviceRdv->getStringEndDate().""; + $result .= "".$serviceRdv->getStringStartTime().""; + $result .= "".$serviceRdv->getStringEndTime().""; + $result .= "".$serviceRdv->getBetweenRdv().""; + $result .= "".$serviceRdv->getExcludeDay().""; + $result .= ''; + $result .= ""; + } + return new Response($result); + } + + + #[Route('/save/{id}', name: 'backend_admin_service_rdv_save')] + public function save(Service $service, + Request $request, + ServiceService $serviceService, + EntityManagerInterface $em): Response + { + $Param['startDate'] = $request->get('startDate'); + $Param['endDate'] = $request->get('endDate'); + $Param['startTime'] = $request->get('startTime'); + $Param['endTime'] = $request->get('endTime'); + $Param['duree'] = $service->getDuree(); + $Param['between'] = $request->get('between'); + $Param['excludeDay'] = $excludeDay = $request->get('excludeDay'); + $Param['id'] = $service->getId(); + $Param['save'] = 'false'; + + $ranges = $serviceService->getListRendezVous(new \DateTime($Param['startDate']), new \DateTime($Param['endDate']), $Param['startTime'], $Param['endTime'], $Param ['duree'], $Param['between'], $excludeDay); + + $serviceRdv = new ServiceRdv(); + $serviceRdv->setStartDate(new \DateTime($Param['startDate'])); + $serviceRdv->setEndDate(new \DateTime($Param['endDate'])); + $serviceRdv->setDuree($Param['duree']); + $serviceRdv->setStartTime(new \DateTime($Param['startTime'])); + $serviceRdv->setEndTime(new \DateTime($Param['endTime'])); + $serviceRdv->setBetweenRdv($Param['between']); + $serviceRdv->setExcludeDay(implode(",", $Param['excludeDay'])); + $serviceRdv->setService($service); + $serviceRdv->setReservationJson($ranges); + $serviceRdv->setCreateBy($this->getUser()); + $em->persist($serviceRdv); + $em->flush(); + + $RendezVous = []; + foreach($ranges as $reservation){ + $serviceRdvReservation = new ServiceRdvReservation(); + $serviceRdvReservation->setDateDebut($reservation['debut']); + $serviceRdvReservation->setDateFin($reservation['fin']); + $serviceRdvReservation->setServiceRdv($serviceRdv); + $serviceRdvReservation->setService($service); + $em->persist($serviceRdvReservation); + $RendezVous[$reservation['debut']->format('d/m/Y')][] = ['debut'=>$reservation['debut']->format('H:i'), 'fin'=>$reservation['fin']->format('H:i')]; + } + $Param['arrRendezVous'] = $RendezVous; + + $em->flush(); + + return $this->render('backend_admin/service_rdv/show_new_rdv.html.twig', $Param); + } + + + +} + diff --git a/src/Controller/BackendAdmin/SocieteController.php b/src/Controller/BackendAdmin/SocieteController.php new file mode 100755 index 0000000..4a717a4 --- /dev/null +++ b/src/Controller/BackendAdmin/SocieteController.php @@ -0,0 +1,129 @@ +societeRepository = $societeRepository; + $this->em = $em; + } + + + #[Route('/index', name: 'backend_admin_societe_index')] + public function index(): Response + { + return $this->render('backend_admin/societe/index.html.twig', ['societes'=> $this->societeRepository->findBy([], ["id"=>'DESC'])]); + } + + + #[Route('/add', name: 'backend_admin_societe_add')] + public function add(Request $request, UploaderService $uploaderService): Response + { + $societe = new Societe(); + + $form = $this->createForm(SocieteType::class, $societe); + + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + + $photo = $form->get('photo')->getData(); + if ($photo) { + $directory = $this->getParameter('societes_directory'); + $societe->setLogo($uploaderService->uploadFile($photo, $directory)); + } + $this->em->persist($societe); + $this->em->flush(); + } + + return $this->render('backend_admin/societe/add_update.html.twig',['form'=>$form]); + } + + + #[Route('/update/{id}', name: 'backend_admin_societe_update')] + public function update(Request $request, Societe $societe, UploaderService $uploaderService): Response + { + $form = $this->createForm(SocieteType::class, $societe); + + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + + $photo = $form->get('photo')->getData(); + if ($photo) { + $pathImage = $this->getParameter('societes_directory').'/'.$societe->getLogo(); + $directory = $this->getParameter('societes_directory'); + $societe->setLogo($uploaderService->uploadFile($photo, $directory)); + if(file_exists($pathImage)){ + unlink($pathImage); + } + + } + + $this->em->persist($societe); + $this->em->flush(); + } + + return $this->render('backend_admin/societe/add_update.html.twig',['form'=>$form]); + } + + + #[Route('/activated/{id}/{active}', name: 'backend_admin_societe_activated')] + public function activated(Societe $societe, $active) + { + $societe->setActive($active); + $this->em->persist($societe); + $this->em->flush(); + + if($active){ + $this->addFlash('success', ['title'=>'Success', 'message'=>'Société a été bien déactiver']); + }else{ + foreach($societe->getPartenaires() as $partenaire){ + $partenaire->setActive(false); + $this->em->persist($partenaire); + } + $this->em->flush(); + $this->addFlash('success', ['title'=>'Success', 'message'=>'Société a été bien activer']); + } + + + return $this->redirectToRoute('backend_admin_societe_index'); + } + +} \ No newline at end of file diff --git a/src/Controller/BackendAdmin/UserController.php b/src/Controller/BackendAdmin/UserController.php new file mode 100755 index 0000000..0e11944 --- /dev/null +++ b/src/Controller/BackendAdmin/UserController.php @@ -0,0 +1,84 @@ +userRepository = $userRepository; + $this->em = $em; + } + + + #[Route('/index', name: 'backend_admin_user_index')] + public function index(): Response + { + $users = $this->userRepository->findBy(['isDeleted'=> false]); + return $this->render('backend_admin/user/index.html.twig',['users'=>$users]); + } + + + #[Route('/deleted', name: 'backend_admin_user_deleted')] + public function deleted(): Response + { + $users = $this->userRepository->findBy(['isDeleted'=> true]); + return $this->render('backend_admin/user/deleted.html.twig',['users'=>$users]); + } + + + #[Route('/update_delete/{id}', name: 'backend_admin_user_update_delete')] + public function update_delete(User $user, Request $request) + { + + $delete = (boolean)$request->get('delete'); + + $user->setIsDeleted($delete); + $this->em->persist($user); + $this->em->flush(); + + + + if($delete == true ){ + $this->addFlash('success', ['title'=>'Success', 'message'=>'Le compte du utilisateur'.$user->getFirstname().' '.$user->getLastname().' a été bien déactiver']); + + }else{ + $this->addFlash('success', ['title'=>'Success', 'message'=>'Le compte du utilisateur'.$user->getFirstname().' '.$user->getLastname().' a été bien activer']); + + } + + $referer = $request->headers->get('referer'); + return $this->redirect($referer); + } + +} diff --git a/src/Controller/BackendPartner/DashboardController.php b/src/Controller/BackendPartner/DashboardController.php new file mode 100755 index 0000000..c18ff14 --- /dev/null +++ b/src/Controller/BackendPartner/DashboardController.php @@ -0,0 +1,24 @@ +render('backend_partner/dashboard/index.html.twig', ['titlePage'=> 'Dashboard']); + } + + + + +} + + +//datatable.html.twig \ No newline at end of file diff --git a/src/Controller/BackendPartner/PartenaireController.php b/src/Controller/BackendPartner/PartenaireController.php new file mode 100755 index 0000000..654be09 --- /dev/null +++ b/src/Controller/BackendPartner/PartenaireController.php @@ -0,0 +1,90 @@ +em = $em; + $this->partenaireRepository = $partenaireRepository; + } + + #[Route('/selected', name: 'backend_partner_partenaire_selected')] + public function update_selected(Request $request): Response + { + $idPartner = $request->get('id_partner'); + + $partenaires = $this->getUser()->getPartenairesActive(); + + foreach($partenaires as $partenaire){ + if($idPartner == $partenaire->getId()){ + $partenaire->setSelected(true); + }else{ + $partenaire->setSelected(false); + } + $this->em->persist($partenaire); + + } + $this->em->flush(); + + $referer = $request->headers->get('referer'); + + return $this->redirect($referer); + } + + + #[Route('/gestion', name: 'backend_partner_partenaire_gestion')] + public function gestion(Request $request): Response + { + $societe = $this->getUser()->getSelectPartner()->getSociete(); + //$partenaires = $this->partenaireRepository->findBy(); + + return $this->render('backend_partner/partenaire/gestion.html.twig'); + } + + + #[Route('/add', name: 'backend_partner_partenaire_add')] + public function add(Request $request): Response + { + + } + + + + + + +} \ No newline at end of file diff --git a/src/Controller/BackendPartner/ReservationListeController.php b/src/Controller/BackendPartner/ReservationListeController.php new file mode 100755 index 0000000..3bac44b --- /dev/null +++ b/src/Controller/BackendPartner/ReservationListeController.php @@ -0,0 +1,106 @@ +reservationArticleRepository = $reservationArticleRepository; + $this->reservationArticleValidationRepository = $reservationArticleValidationRepository; + $this->reservationServiceRepository = $reservationServiceRepository; + $this->reservationServiceValidationRepository = $reservationServiceValidationRepository; + } + + + #[Route('/valider', name: 'backend_partner_reservation_liste_valider')] + public function valider(Request $request): Response + { + $societe = $this->getUser()->getSelectPartner()->getSociete(); + + $reservationArticleValidations = $this->reservationArticleValidationRepository->findBySociete($societe); + + $reservationServiceValidations = $this->reservationServiceValidationRepository->findBySociete($societe); + + $reservationValidations = array_merge($reservationArticleValidations, $reservationServiceValidations); + + usort($reservationValidations, function($a, $b) { + return $a->getDateAdd()->getTimestamp() - $b->getDateAdd()->getTimestamp(); + }); + + return $this->render('backend_partner/reservation/liste_valider.html.twig',[ + 'reservationValidations'=>$reservationValidations + ]); + } + + + + #[Route('/encours', name: 'backend_partner_reservation_liste_encours')] + public function encours(Request $request): Response + { + $societe = $this->getUser()->getSelectPartner()->getSociete(); + + $reservationArticles = $this->reservationArticleRepository->findBySociete($societe); + + $reservationServices = $this->reservationServiceRepository->findBySociete($societe); + + $reservations = array_merge($reservationArticles, $reservationServices); + + usort($reservations, function($a, $b) { + return $a->getDateAdd()->getTimestamp() - $b->getDateAdd()->getTimestamp(); + }); + + return $this->render('backend_partner/reservation/liste_encours.html.twig', [ + 'reservations'=>$reservations + + ]); + } + +} \ No newline at end of file diff --git a/src/Controller/BackendPartner/ReservationValiderController.php b/src/Controller/BackendPartner/ReservationValiderController.php new file mode 100755 index 0000000..ddeaa24 --- /dev/null +++ b/src/Controller/BackendPartner/ReservationValiderController.php @@ -0,0 +1,176 @@ +em = $em; + $this->reservationArticleRepository = $reservationArticleRepository; + $this->reservationServiceRepository = $reservationServiceRepository; + } + + #[Route('/valider', name: 'backend_partner_reservation_valider')] + public function valider(Request $request): Response + { + $formArticle = $this->createFormBuilder() + ->add('reservnumarticle', \Symfony\Component\Form\Extension\Core\Type\TextType::class, ['required' => true]) + ->add('save', \Symfony\Component\Form\Extension\Core\Type\SubmitType::class) + ->getForm(); + + + $formService = $this->createFormBuilder() + ->add('reservnumservice', \Symfony\Component\Form\Extension\Core\Type\TextType::class, ['required' => true]) + ->add('save', \Symfony\Component\Form\Extension\Core\Type\SubmitType::class) + ->getForm(); + + return $this->render('backend_partner/reservation/valider.html.twig', ['formArticle'=> $formArticle, 'formService'=>$formService]); + } + + + #[Route('/article', name: 'backend_partner_reservation_valider_article')] + public function article(Request $request): Response + { + $data = $request->request->all(); + if(!isset($data['form']['reservnumarticle'])){ + $this->addFlash('danger', ['title'=>'Erreur', 'message'=>"Numéro Réservation Vide"]); + return $this->redirectToRoute('backend_partner_reservation_valider'); + } + + + $numReservation = $data['form']['reservnumarticle']; + + if($numReservation){ + $partner = $this->getUser()->getSelectPartner(); + + + $reservationArticle = $this->reservationArticleRepository->findOneBy(['reference'=>$numReservation]); + + if($reservationArticle){ + $societe = $reservationArticle->getArticle()->getSociete(); + $valider = $reservationArticle->getReservationArticleValidation(); + + if($partner->getSociete()->getId() != $societe->getId()){ + $this->addFlash('danger', ['title'=>'Erreur', 'message'=>"Incorrect séléct Société (".$societe->getNom().")"]); + }else if($valider != null){ + $dateAdd = $valider->getDateAdd(); + $this->addFlash('danger', ['title'=>'Erreur', 'message'=>"Réservation article déja valider le ".$dateAdd->format('d/m/Y H:i').""]); + }else{ + $reservationArticleValidation = new ReservationArticleValidation(); + $reservationArticleValidation->setReservationArticle($reservationArticle); + $reservationArticleValidation->setPartenaire($partner); + $this->em->persist($reservationArticleValidation); + $this->em->flush(); + if($reservationArticleValidation->getId()){ + $dateAdd = new \DateTime(); + $reservationArticle->addEtat("valider", $dateAdd->format('Y-m-d H:i')); + $this->em->persist($reservationArticle); + $this->em->flush(); + $this->addFlash('success', ['title'=>'Success', 'message'=>'Réservation article valider']); + } + } + }else{ + $this->addFlash('danger', ['title'=>'Erreur', 'message'=>"Numéro Réservation Incorrect"]); + } + }else{ + $this->addFlash('danger', ['title'=>'Erreur', 'message'=>"Numéro Réservation Vide"]); + } + + return $this->redirectToRoute('backend_partner_reservation_valider'); + } + + + + #[Route('/service', name: 'backend_partner_reservation_valider_service')] + public function service(Request $request): Response + { + $data = $request->request->all(); + if(!isset($data['form']['reservnumservice'])){ + $this->addFlash('danger', ['title'=>'Erreur', 'message'=>"Numéro Réservation Vide"]); + return $this->redirectToRoute('backend_partner_reservation_valider'); + } + + + $numReservation = $data['form']['reservnumservice']; + + if($numReservation){ + $partner = $this->getUser()->getSelectPartner(); + + + $reservationService = $this->reservationServiceRepository->findOneBy(['reference'=>$numReservation]); + + if($reservationService){ + $societe = $reservationService->getService()->getSociete(); + $valider = $reservationService->getReservationServiceValidation(); + + if($partner->getSociete()->getId() != $societe->getId()){ + $this->addFlash('danger', ['title'=>'Erreur', 'message'=>"Incorrect séléct Société (".$societe->getNom().")"]); + }else if($valider != null){ + $dateAdd = $valider->getDateAdd(); + $this->addFlash('danger', ['title'=>'Erreur', 'message'=>"Réservation service déja valider le ".$dateAdd->format('d/m/Y H:i').""]); + }else{ + $reservationServiceValidation = new ReservationServiceValidation(); + $reservationServiceValidation->setReservationService($reservationService); + $reservationServiceValidation->setPartenaire($partner); + $this->em->persist($reservationServiceValidation); + $this->em->flush(); + if($reservationServiceValidation->getId()){ + $dateAdd = new \DateTime(); + $reservationService->addEtat("valider", $dateAdd->format('Y-m-d H:i')); + $this->em->persist($reservationService); + $this->em->flush(); + $this->addFlash('success', ['title'=>'Success', 'message'=>'Réservation service valider']); + } + } + }else{ + $this->addFlash('danger', ['title'=>'Erreur', 'message'=>"Numéro Réservation Incorrect"]); + } + }else{ + $this->addFlash('danger', ['title'=>'Erreur', 'message'=>"Numéro Réservation Vide"]); + } + + return $this->redirectToRoute('backend_partner_reservation_valider'); + } + +} diff --git a/src/Controller/Frontend/AnnonceController.php b/src/Controller/Frontend/AnnonceController.php new file mode 100755 index 0000000..b45dbe0 --- /dev/null +++ b/src/Controller/Frontend/AnnonceController.php @@ -0,0 +1,74 @@ +annonceRepository = $annonceRepository; + $this->positionRepository = $positionRepository; + } + + + + #[Route('/index', name: 'frontend_annonce_index')] + public function index(): Response + { + $annonces = []; + + $positions = $this->positionRepository->getPositionByDate(new \DateTime()); + + foreach($positions as $position){ + $annonce = $position->getAnnonce(); + $annonces[$annonce->getId()] = $annonce; + } + + return $this->render('frontend/annonce/index.html.twig', [ + 'annonces' => $annonces, + ]); + } + + + #[Route('/detail/{id}', name: 'frontend_annonce_detail')] + public function detail(Annonce $annonce): Response + { + + $detailtwig = 'frontend/annonce/detailSimpleImage.html.twig'; + + if($annonce->getImageHome() && $annonce->getImageDetail1()){ + $detailtwig = 'frontend/annonce/detailManyImages.html.twig'; + } + + return $this->render($detailtwig, [ 'annonce' => $annonce ]); + } + + +} \ No newline at end of file diff --git a/src/Controller/Frontend/ArticleServiceController.php b/src/Controller/Frontend/ArticleServiceController.php new file mode 100755 index 0000000..bda5887 --- /dev/null +++ b/src/Controller/Frontend/ArticleServiceController.php @@ -0,0 +1,154 @@ +articleRepository = $articleRepository; + $this->serviceRepository = $serviceRepository; + $this->rdvTempoRepository = $rdvTempoRepository; + } + + + #[Route('/index', name: 'frontend_article_service_index')] + public function index(): Response + { + $promos = []; + + $articles = $this->articleRepository->show(); + + $services = $this->serviceRepository->show(); + + $leng = (count($articles)>= count($services)) ? count($articles) : count($services); + + for($i=0; $i<$leng; $i++) + { + if(isset($articles[$i])){ + $promos[] = $articles[$i]; + } + + if(isset($services[$i])){ + $promos[] = $services[$i]; + } + } + + return $this->render('frontend/article_service/index.html.twig', [ + 'leng' => $leng, + 'articles' => $articles, + 'services' => $services, + ]); + } + + + #[Route('/article/detail/{id}', name: 'frontend_article_detail')] + #[IsGranted(new Expression('is_granted("ROLE_USER")'))] + public function detail_article(Article $article): Response + { + return $this->render('frontend/article_service/article_detail.html.twig', [ + 'article' => $article, + ]); + } + + + #[Route('/service/detail/{id}', name: 'frontend_service_detail')] + #[IsGranted(new Expression('is_granted("ROLE_USER")'))] + public function detail_service(Service $service): Response + { + return $this->render('frontend/article_service/service_detail.html.twig', [ + 'service' => $service + ]); + } + + + #[Route('/service/getlistrdv/{id}', name: 'frontend_service_get_list_rdv')] + #[IsGranted(new Expression('is_granted("ROLE_USER")'))] + public function get_list_rdv(Service $service, ServiceRdvReservationRepository $serviceRdvReservationRepository) + { + $serviceRdvReservations = $serviceRdvReservationRepository->findBy(['service'=>$service, 'disponible'=> true]); + + $ListIdRdvEncours = $this->rdvTempoRepository->RdvEncoursListId(); + + $RendezVous = []; + foreach($serviceRdvReservations as $reservation){ + + $idRdv = $reservation->getId(); + + $Indice = array_search($idRdv, $ListIdRdvEncours); + if(!is_numeric($Indice)){ + $RendezVous[$reservation->getDateDebut()->format('d/m/Y')][] = ['idRdv'=>$idRdv, 'debut'=>$reservation->getDateDebut()->format('H:i'), 'fin'=>$reservation->getDateFin()->format('H:i')]; + } + } + + return new JsonResponse($RendezVous); + } + + + + + + #[Route('/service/select/rdv', name: 'frontend_service_select_rdv')] + #[IsGranted(new Expression('is_granted("ROLE_USER")'))] + public function service_select_rdv(Request $request, ServiceRdvReservationRepository $serviceRdvReservationRepository): Response + { + $id = $request->get('id'); + + $user = $this->getUser(); + + $serviceRdvReservation = $serviceRdvReservationRepository->find($id); + + $this->rdvTempoRepository->RdvEncoursAdd($user, $serviceRdvReservation); + + return $this->render('frontend/article_service/service_select_rdv.html.twig', [ + 'serviceRdvReservation'=>$serviceRdvReservation, + 'user'=> $user + ]); + } + + +} \ No newline at end of file diff --git a/src/Controller/Frontend/BasicController.php b/src/Controller/Frontend/BasicController.php new file mode 100755 index 0000000..0fcf3a9 --- /dev/null +++ b/src/Controller/Frontend/BasicController.php @@ -0,0 +1,43 @@ +getUser(); + + $paniers = []; + $total = $nbr = 0; + if($user){ + $basket = $user->getPanier($request, true); + $paniers = $basket['paniers']; + $total = $basket['total']; + $nbr = $basket['nbr']; + } + + return $this->render('frontend/basic/search.html.twig', [ + 'groupes'=>$groupeRepository->findAll(), + 'paniers' => $paniers, + 'total' => $total, + 'nbr'=> $nbr + ]); + } + + + #[Route('/frontend/basic/navbar', name: 'frontend_basic_navbar')] + public function navbar(): Response + { + return $this->render('frontend/basic/navbar.html.twig'); + } + +} diff --git a/src/Controller/Frontend/CommentController.php b/src/Controller/Frontend/CommentController.php new file mode 100755 index 0000000..7c7dfef --- /dev/null +++ b/src/Controller/Frontend/CommentController.php @@ -0,0 +1,135 @@ +em = $em; + } + + #[Route('/article/add/{id}', name: 'frontend_comment_article_add')] + public function article_add(Article $article, Request $request): Response + { + $id = $article->getId(); + + $form = $this->createForm(CommentType::class); + + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + + $commentaire = $form->getData()['commentaire']; + + $commentArticle = new CommentArticle(); + $commentArticle->setCommentaire($commentaire); + $commentArticle->setArticle($article); + $commentArticle->setClient($this->getUser()); + + $this->em->persist($commentArticle); + $this->em->flush(); + + return $this->redirectToRoute('frontend_article_detail', ['id'=>$id]); + } + + return $this->render('frontend/comment/add.html.twig', [ + 'form' => $form, + 'id' => $id, + 'pathComment'=> "/frontend/comment/article/add/$id" + ]); + } + + + #[Route('/service/add/{id}', name: 'frontend_comment_service_add')] + public function service_add(Service $service, Request $request): Response + { + $id = $service->getId(); + $form = $this->createForm(CommentType::class); + + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + + $commentaire = $form->getData()['commentaire']; + + $commentService = new CommentService(); + $commentService->setCommentaire($commentaire); + $commentService->setService($service); + $commentService->setClient($this->getUser()); + + $this->em->persist($commentService); + $this->em->flush(); + + return $this->redirectToRoute('frontend_service_detail', ['id'=>$id]); + } + + return $this->render('frontend/comment/add.html.twig', [ + 'form' => $form, + 'id' => $id, + 'pathComment'=> "/frontend/comment/service/add/$id" + ]); + } + + #[Route('/annonce/add/{id}', name: 'frontend_comment_annonce_add')] + public function annonce_add(Annonce $annonce, Request $request): Response + { + $id = $annonce->getId(); + + $form = $this->createForm(CommentType::class); + + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + + $commentaire = $form->getData()['commentaire']; + + $commentAnnonce = new CommentAnnonce(); + $commentAnnonce->setCommentaire($commentaire); + $commentAnnonce->setAnnonce($annonce); + $commentAnnonce->setClient($this->getUser()); + + $this->em->persist($commentAnnonce); + $this->em->flush(); + + return $this->redirectToRoute('frontend_annonce_detail', ['id'=>$id]); + } + + return $this->render('frontend/comment/add.html.twig', [ + 'form' => $form, + 'id' => $id, + 'pathComment'=> "/frontend/comment/annonce/add/$id" + ]); + } + +} diff --git a/src/Controller/Frontend/DemoController.php b/src/Controller/Frontend/DemoController.php new file mode 100755 index 0000000..cd10131 --- /dev/null +++ b/src/Controller/Frontend/DemoController.php @@ -0,0 +1,70 @@ +render('frontend/demo/test.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + #[Route('/index', name: 'frontend_demo_index')] + public function index(): Response + { + return $this->render('frontend/demo/index.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + #[Route('/checkbox', name: 'frontend_demo_checkbox')] + public function checkbox(): Response + { + return $this->render('frontend/demo/checkbox.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + #[Route('/radio', name: 'frontend_demo_radio')] + public function radio(): Response + { + return $this->render('frontend/demo/radio.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + #[Route('/404', name: 'frontend_demo_404')] + public function demo404(): Response + { + return $this->render('frontend/demo/404.html.twig'); + } + + #[Route('/blog', name: 'frontend_demo_blog')] + public function blog(): Response + { + return $this->render('frontend/demo/blog.html.twig'); + } + + #[Route('/blogdetails', name: 'frontend_demo_blogdetails')] + public function blogdetails(): Response + { + return $this->render('frontend/demo/blogdetails.html.twig'); + } + + + #[Route('/blogdetails2', name: 'frontend_demo_blogdetails2')] + public function blogdetails2(): Response + { + return $this->render('frontend/demo/blogdetails2.html.twig'); + } +} diff --git a/src/Controller/Frontend/FooterController.php b/src/Controller/Frontend/FooterController.php new file mode 100755 index 0000000..615a0ff --- /dev/null +++ b/src/Controller/Frontend/FooterController.php @@ -0,0 +1,99 @@ +render('frontend/footer/faq.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + #[Route('/aide', name: 'frontend_footer_aide')] + public function aide(): Response + { + return $this->render('frontend/footer/aide.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + + #[Route('/contacter', name: 'frontend_footer_contacter')] + public function contacter(): Response + { + return $this->render('frontend/footer/contacter.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + + + + + + #[Route('/presentation', name: 'frontend_footer_presentation')] + public function presentation(): Response + { + return $this->render('frontend/footer/presentation.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + #[Route('/quisommesnous', name: 'frontend_footer_quisommesnous')] + public function quisommesnous(): Response + { + return $this->render('frontend/footer/quisommesnous.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + + #[Route('/mentionslegales', name: 'frontend_footer_mentionslegales')] + public function mentionslegales(): Response + { + return $this->render('frontend/footer/mentionslegales.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + + + + + + #[Route('/nospartenaires', name: 'frontend_footer_nospartenaires')] + public function nospartenaires(): Response + { + return $this->render('frontend/footer/nospartenaires.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + #[Route('/temoignages', name: 'frontend_footer_temoignages')] + public function temoignages(): Response + { + return $this->render('frontend/footer/temoignages.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + + + #[Route('/nosactualites', name: 'frontend_footer_nosactualites')] + public function nosactualites(): Response + { + return $this->render('frontend/footer/nosactualites.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } + +} diff --git a/src/Controller/Frontend/HomeController.php b/src/Controller/Frontend/HomeController.php new file mode 100755 index 0000000..55ca8f1 --- /dev/null +++ b/src/Controller/Frontend/HomeController.php @@ -0,0 +1,122 @@ +groupeRepository = $groupeRepository; + $this->affichageRepository = $affichageRepository; + } + + + #[Route('/', name: 'frontend_home_index')] + public function index(ServiceHome $serviceHome): Response + { + + return $this->render('frontend/home/index.html.twig', [ + 'shows' => $serviceHome->show(), + 'groupes' => $this->groupeRepository->findAll() + ]); + } + + + #[Route('/frontend/home/profile', name: 'frontend_home_profile')] + public function profile(): Response + { + + return $this->render('frontend/home/profile.html.twig', [ + 'titlePage' => 'Inscription', + ]); + } + + + #[Route('/frontend/search/groupe/{id}', name: 'frontend_search_groupe')] + public function search_groupe(GroupeCategorie $groupeCategorie): Response + { + $annonces = []; + + $categories = $groupeCategorie->getCategories(); + foreach($categories as $categorie){ + foreach($categorie->getAnnonces() as $annonce){ + if($annonce->isActive()){ + $annonces[] = $annonce; + } + } + } + + $breadcrumbs[] = ['title'=>"Recherche", 'active'=>false, 'link'=>null]; + $breadcrumbs[] = ['title'=>"Groupe Catégories", 'active'=>false, 'link'=>null]; + $breadcrumbs[] = ['title'=>$groupeCategorie->getNom(), 'active'=>true, 'link'=>null]; + + return $this->render('frontend/home/show-promo.html.twig', [ + 'annonces' => $annonces, + 'breadcrumbs' => $breadcrumbs + ]); + } + + + #[Route('/frontend/search/categorie/{id}', name: 'frontend_search_categorie')] + public function search_categorie(Categorie $categorie): Response + { + $annonces = []; + + foreach($categorie->getAnnonces() as $annonce){ + if($annonce->isActive()){ + $annonces[] = $annonce; + } + } + + $breadcrumbs[] = ['title'=>"Recherche", 'active'=>false, 'link'=>null]; + $breadcrumbs[] = ['title'=>"Catégories", 'active'=>false, 'link'=>null]; + $breadcrumbs[] = ['title'=>$categorie->getNom(), 'active'=>true, 'link'=>null]; + + return $this->render('frontend/home/show-promo.html.twig', [ + 'annonces' => $annonces, + 'breadcrumbs' => $breadcrumbs + ]); + } + + + #[Route('/frontend/search/annonce', name: 'frontend_search_annonce')] + public function search_annonce(): Response + { + $annonces = []; + + return $this->render('frontend/home/show-promo.html.twig', [ + 'annonces' => $annonces, + 'breadcrumb' => "Accueil" + ]); + } +} diff --git a/src/Controller/Frontend/NewslettreController.php b/src/Controller/Frontend/NewslettreController.php new file mode 100755 index 0000000..d63c865 --- /dev/null +++ b/src/Controller/Frontend/NewslettreController.php @@ -0,0 +1,59 @@ +getUser()->getNewslettres() as $newslettre){ + $selectNews[] = $newslettre->getRelated(); + } + + return $this->render('frontend/newslettre/index.html.twig', [ + 'groupes'=>$groupeCategorieRepository->findAll(), + 'selectNews'=> $selectNews + ]); + } + + + #[Route('/update', name: 'frontend_newslettre_update')] + public function update(Request $request, EntityManagerInterface $em, NewslettreRepository $newslettreRepository) + { + $operation = $request->get('operation'); + $related = $request->get('related'); + $user = $this->getUser(); + + if($operation == "true"){ + $newslettre = new Newslettre(); + $newslettre->setProfile($user); + $newslettre->setRelated($related); + $em->persist($newslettre); + }else{ + $newslettre = $newslettreRepository->findOneBy(['related'=>$related, 'profile'=>$user]); + $em->remove($newslettre); + } + + $em->flush(); + + return new Response("true"); + } + +} diff --git a/src/Controller/Frontend/PaiementController.php b/src/Controller/Frontend/PaiementController.php new file mode 100755 index 0000000..91a54a3 --- /dev/null +++ b/src/Controller/Frontend/PaiementController.php @@ -0,0 +1,120 @@ +serviceRdvReservationRepository = $serviceRdvReservationRepository; + $this->articleRepository = $articleRepository; + $this->em = $em; + } + + + #[Route('/index', name: 'frontend_paiement_index')] + public function index(): Response + { + return $this->render('frontend/reservation_panier/paiement.html.twig', [ + ]); + } + + + #[Route('/valider', name: 'frontend_paiement_valider')] + public function valider(Request $request, ServicePanier $servicePanier): Response + { + $user = $this->getUser(); + + $paniers = $user->getPanier($request); + + foreach($paniers as $panier){ + if($panier['type'] == 'SERVICE'){ + $serviceRdvReservation = $this->serviceRdvReservationRepository->find($panier['idRdv']); + $service = $serviceRdvReservation->getService(); + $reservationService = new ReservationService(); + $reservationService->setClient($user); + $reservationService->setServiceRdvReservation($serviceRdvReservation); + $reservationService->setService($service); + $reservationService->setPrix($panier['prix']); + $reservationService->setAvance($panier['avance']); + $reservationService->setFrais($panier['frais']); + $reservationService->setData($panier['data']); + $reservationService->setDateRdv($serviceRdvReservation->getDateDebut()); + $reservationService->setEtat(['payer'=>new \DateTime()]); + + $serviceRdvReservation->setDisponible(false); + $this->em->persist($serviceRdvReservation); + $this->em->persist($reservationService); + }elseif($panier['type'] == 'ARTICLE'){ + $reservationArticle = new ReservationArticle(); + $article = $this->articleRepository->find($panier['id']); + $reservationArticle->setClient($user); + $reservationArticle->setArticle($article); + + $reservationArticle->setPrix($panier['prix']); + + $reservationArticle->setAvance($panier['avance']); + $reservationArticle->setQuantite($panier['qtyRdv']); + + $reservationArticle->setFrais($panier['frais']); + $reservationArticle->setEtat(['payer'=>new \DateTime()]); + + if($article->getLimitType() == 1){ + $Qty = $article->getLimitQuantite(); + $Qty -= $panier['qtyRdv']; + $article->setLimitQuantite($Qty); + $this->em->persist($article); + } + + $this->em->persist($reservationArticle); + } + } + $this->em->flush(); + + $servicePanier->clear($user); + + return $this->redirectToRoute('frontend_reservation_index'); + } + +} diff --git a/src/Controller/Frontend/PanierController.php b/src/Controller/Frontend/PanierController.php new file mode 100755 index 0000000..2eeb65a --- /dev/null +++ b/src/Controller/Frontend/PanierController.php @@ -0,0 +1,110 @@ +getSession(); + + $user = $this->getUser(); + + $nameSession = 'Panier-'.$user->getId(); + + $paniers = $session->get($nameSession); + + return $this->render('frontend/reservation_panier/panier_index.html.twig', ['paniers'=>$paniers]); + } + + + #[Route('/add/article/{id}', name: 'frontend_panier_add_article')] + public function add_article(Article $article, Request $request): Response + { + $qte = $request->get('qty'); + + $user = $this->getUser(); + + $avance = ($article->getPrixPromo() * $qte * 30) / 100; + + $panier = ['type'=>'ARTICLE', + 'id'=>$article->getId(), + 'titre'=>$article->getTitre(), + 'image'=> "uploads/images/articles/".$article->getImageDefault(), + 'qtyRdv'=> $qte, + 'idRdv'=>'', + 'prix'=>$article->getPrixPromo(), + 'avance'=> $avance, + 'frais'=> ($user->getFrais() > 0)? ($article->getPrixPromo() * $qte * $user->getFrais()) / 100 : 0 , + 'data'=>[]]; + + $user->setPanier($request, $panier); + + $this->addFlash('success', ['title'=>'Success', + 'message'=>"L'article a été ajouté à votre panier."]); + + $referer = $request->headers->get('referer'); + + return $this->redirect($referer); + } + + + #[Route('/add/service/{id}', name: 'frontend_panier_add_service')] + public function add_service(Request $request, ServiceRdvReservation $serviceRdvReservation): Response + { + $user = $this->getUser(); + + $service = $serviceRdvReservation->getService(); + + $data = ['nom'=>$request->get('nom'), 'prenom'=>$request->get('prenom'), 'naissance'=>$request->get('naissance'), 'email'=>$request->get('email')]; + + $panier = ['type'=>'SERVICE', + 'id'=>$service->getId(), + 'titre'=>$service->getTitre(), + 'image'=> "uploads/images/services/".$service->getImageDefault(), + 'qtyRdv'=> $serviceRdvReservation->getDateDebut()->format('d/m/Y H:i'), + 'idRdv'=>$serviceRdvReservation->getId(), + 'prix'=>$service->getPrixPromo(), + 'avance'=> ($service->getPrixPromo() * 30) / 100, + 'frais'=>($user->getFrais() > 0)? ($service->getPrixPromo() * $user->getFrais()) / 100 : 0, + 'data'=>$data]; + + $user->setPanier($request, $panier); + + return $this->redirectToRoute('frontend_panier_index'); + } + + + #[Route('/remove/{idDele}', name: 'frontend_panier_remove')] + public function remove(Request $request, int $idDele): Response + { + $user = $this->getUser(); + + $id = $user->getId(); + + $session = $request->getSession(); + $sessionName = "Panier-$id"; + + $panier = $session->get($sessionName); + + unset($panier[$idDele]); + + $session->set($sessionName, $panier); + + return $this->redirectToRoute('frontend_panier_index'); + } +} diff --git a/src/Controller/Frontend/PartenaireController.php b/src/Controller/Frontend/PartenaireController.php new file mode 100755 index 0000000..8410096 --- /dev/null +++ b/src/Controller/Frontend/PartenaireController.php @@ -0,0 +1,89 @@ +societeRepository = $societeRepository; + $this->em = $em; + } + + #[Route('/societe/add', name: 'frontend_partenaire_societe_add')] + public function add(Request $request, UploaderService $uploaderService): Response + { + $societe = new Societe(); + + $form = $this->createForm(SocieteType::class, $societe); + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + $photo = $form->get('photo')->getData(); + if ($photo) { + $directory = $this->getParameter('societes_directory'); + $societe->setLogo($uploaderService->uploadFile($photo, $directory)); + } + $this->em->persist($societe); + $this->em->flush(); + + $partenaire = new Partenaire(); + $partenaire->setPartenaire($this->getUser()); + $partenaire->setSociete($societe); + $partenaire->setSelected(true); + $partenaire->setRole(1); + $this->em->persist($partenaire); + $this->em->flush(); + + $this->addFlash('success', ['title'=>'Success', + 'message'=>"Votre demande (Devenir partenaire ) à été enregistrer et envoyer avec succées aux administateurs. + Votre demande sera traitée au maxum 24 heur"]); + } + + return $this->render('frontend/partenaire/add.html.twig',['form'=>$form]); + } + + + + + #[Route('/index', name: 'frontend_partenaire_index')] + public function test(Request $request): Response + { + return $this->render('frontend/partenaire/index.html.twig', [ + 'controller_name' => 'HomeController', + ]); + } +} diff --git a/src/Controller/Frontend/ReservationController.php b/src/Controller/Frontend/ReservationController.php new file mode 100755 index 0000000..fed27ec --- /dev/null +++ b/src/Controller/Frontend/ReservationController.php @@ -0,0 +1,95 @@ +reservationServiceRepository = $reservationServiceRepository; + $this->reservationArticleRepository = $reservationArticleRepository; + $this->serviceReservation = $serviceReservation; + } + + #[Route('/index', name: 'frontend_reservation_index')] + public function index(): Response + { + $user = $this->getUser(); + + $reservationServices = $this->reservationServiceRepository->findBy(['client'=>$user]); + $reservationArticles = $this->reservationArticleRepository->findBy(['client'=>$user]); + + $reservations = array_merge($reservationServices, $reservationArticles); + + usort($reservations,function($first,$second){ + return $first->getDateAdd() < $second->getDateAdd(); + }); + + return $this->render('frontend/reservation_panier/reservation_index.html.twig', [ + 'reservations'=>$reservations + ]); + + } + + #[Route('/export/pdf/article/{id}', name: 'frontend_reservation_export_pdf_article')] + public function export_pdf_article(ReservationArticle $reservationArticle): Response + { + $html = $this->renderView('frontend/reservation_panier/reservation_template_pdf_article.html.twig', ['reservationArticle'=>$reservationArticle]); + + $idReservation = $reservationArticle->getId(); + $this->serviceReservation->generatePdfFile($html, "réservation_article_$idReservation.pdf"); + + return new Response(); + } + + #[Route('/export/pdf/service/{id}', name: 'frontend_reservation_export_pdf_service')] + public function export_pdf_service(ReservationService $reservationService): Response + { + $idReservation = $reservationService->getId(); + + $html = $this->renderView('frontend/reservation_panier/reservation_template_pdf_service.html.twig', ['reservationService'=>$reservationService]); + + $this->serviceReservation->generatePdfFile($html, "réservation_service_$idReservation.pdf"); + + return new Response($html); + } + +} diff --git a/src/Controller/Frontend/SecurityController.php b/src/Controller/Frontend/SecurityController.php new file mode 100644 index 0000000..d04e784 --- /dev/null +++ b/src/Controller/Frontend/SecurityController.php @@ -0,0 +1,97 @@ +getUser()) { + return $this->redirectToRoute('frontend_home_index'); + } + + // get the login error if there is one + $error = $authenticationUtils->getLastAuthenticationError(); + + // last username entered by the user + $lastUsername = $authenticationUtils->getLastUsername(); + + return $this->render('frontend/security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error, 'titlePage' => 'Connexion',]); + } + + #[Route(path: '/logout', name: 'frontend_security_logout')] + public function logout(): void + { + throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.'); + } + + + #[Route(path: '/registration', name: 'frontend_security_registration')] + public function registration(Request $request, + UserPasswordHasherInterface $userPasswordHasher, + UserAuthenticatorInterface $userAuthenticator, + LoginAuthenticator $authenticator, + EntityManagerInterface $em, + Session $session): Response + { + $user = new User(); + + $form = $this->createForm(UserRegistrationType::class, $user); + $form->handleRequest($request); + + + if($form->isSubmitted() && $form->isValid()) { + + $user->setPassword($userPasswordHasher->hashPassword($user, $form->get('password')->getData())); + + $em->persist($user); + $em->flush(); + + $IdOrigine = $session->get('user_parrai'); + if($IdOrigine){ + $parrainage = new Parrainage(); + $parrainage->setNew($user); + $orginUser = $em->getRepository(User::class)->find($IdOrigine); + $parrainage->setOrigine($orginUser); + $em->persist($parrainage); + $em->flush(); + $session->remove('user_parrai'); + } + + + return $userAuthenticator->authenticateUser($user, $authenticator, $request); + } + + + return $this->render('frontend/security/register.html.twig', [ + 'form' => $form->createView(), + 'errors' => $form->getErrors(), + 'titlePage' => 'Inscription', + ]); + } + + +} diff --git a/src/Controller/Frontend/UserController.php b/src/Controller/Frontend/UserController.php new file mode 100755 index 0000000..e905f6a --- /dev/null +++ b/src/Controller/Frontend/UserController.php @@ -0,0 +1,161 @@ +em = $em; + } + + #[Route('/frontend/user/edit', name: 'frontend_user_profile')] + public function profile(Request $request): Response + { + + $user = $this->getUser(); + + $formInfoPerso = $this->createForm(UserInfoPersoType::class, $user); + $formInfoPerso->handleRequest($request); + + $formInfoAdress = $this->createForm(UserAdresseType::class, $user); + $formInfoAdress->handleRequest($request); + + $formInfoCnx = $this->createForm(UserInfoCnxType::class, $user); + $formInfoCnx->handleRequest($request); + + if( ($formInfoPerso->isSubmitted() && $formInfoPerso->isValid()) or + ($formInfoAdress->isSubmitted() && $formInfoAdress->isValid()) or + ($formInfoCnx->isSubmitted() && $formInfoCnx->isValid()) + ) + { + $this->em->persist($user); + $this->em->flush(); + } + + return $this->render('frontend/user/edit.html.twig', [ + + 'user' => $user, + + 'formInfoPerso' => $formInfoPerso->createView(), + 'errorsInfoPerso' => $formInfoPerso->getErrors(), + + 'formInfoAdress' => $formInfoAdress->createView(), + 'errorsInfoAdress' => $formInfoAdress->getErrors(), + + 'formInfoCnx' => $formInfoCnx->createView(), + 'errorsInfoCnx' => $formInfoCnx->getErrors(), + + ]); + } + + + #[Route('/frontend/user/update_password', name: 'frontend_user_update_password')] + public function update_password(Request $request, UserPasswordHasherInterface $passwordHasher): Response + { + $user = $this->getUser(); + + $form = $this->createForm(UserUpdatePasswordType::class); + $form->handleRequest($request); + + if($form->isSubmitted() && $form->isValid() ) { + + $plaintextPassword = $form->get('new_password')->getData(); + + $hashedPassword = $passwordHasher->hashPassword($user, $plaintextPassword); + + $user->setPassword($hashedPassword); + $user->setLastChangePassword(new \DateTime()); + + $this->em->persist($user); + $this->em->flush(); + $this->addFlash('success', ''); + + return $this->redirectToRoute('frontend_security_logout'); + } + + return $this->render('frontend/user/update_password.html.twig', [ + "form"=>$form, + 'errors' => $form->getErrors(), + ]); + } + + #[Route('/frontend/user/delete', name: 'frontend_user_delete')] + public function delete(): Response + { + $user = $this->getUser(); + $user->setIsDeleted(true); + $this->em->persist($user); + $this->em->flush(); + + return $this->redirectToRoute('frontend_security_logout'); + } + + + #[Route('/frontend/user/parrainage', name: 'frontend_user_parrainage')] + public function parrainage(Request $request): Response + { + $user = $this->getUser(); + + $form = $this->createFormBuilder() + ->add('email', \Symfony\Component\Form\Extension\Core\Type\EmailType::class) + ->add('save', \Symfony\Component\Form\Extension\Core\Type\SubmitType::class, ['attr'=>['class'=>'envoyer']]) + ->getForm(); + + $hash = openssl_encrypt(json_encode($user->getId()), "AES-128-ECB", $_ENV['APP_SECRET']); + $urlParinage = $request->getScheme().'://'.$request->getHttpHost().$request->getBasePath().'/frontend/user_parrai?use='.$hash; + + return $this->render('frontend/user/parrainage.html.twig', [ + "form"=>$form, + "parrainages"=>$user->getParrainages(), + "urlParinage"=>$urlParinage + ]); + } + + #[Route('/frontend/user_parrai', name: 'frontend_user_parrai')] + public function user_parrai(Request $request, Session $session): Response + { + $hash = $request->get('use'); + + $plain = openssl_decrypt($hash, "AES-128-ECB", $_ENV['APP_SECRET']); + if(is_numeric($plain)){ + $session->set("user_parrai", $plain); + } + + + return $this->redirectToRoute('frontend_security_registration'); + } +} diff --git a/src/Entity/.gitignore b/src/Entity/.gitignore new file mode 100755 index 0000000..e69de29 diff --git a/src/Entity/Affichage.php b/src/Entity/Affichage.php new file mode 100644 index 0000000..75d77e0 --- /dev/null +++ b/src/Entity/Affichage.php @@ -0,0 +1,145 @@ +id; + } + + public function getAnnonce(): ?Annonce + { + return $this->annonce; + } + + public function setAnnonce(?Annonce $annonce): static + { + $this->annonce = $annonce; + $this->largeur = $annonce->getLargeur(); + return $this; + } + + public function getDateShow(): ?\DateTimeInterface + { + return $this->date_show; + } + + public function setDateShow(\DateTimeInterface $date_show): static + { + $this->date_show = $date_show; + + return $this; + } + + public function getLigne(): ?int + { + return $this->ligne; + } + + public function setLigne(int $ligne): static + { + $this->ligne = $ligne; + + return $this; + } + + public function getPosition(): ?Position + { + return $this->position; + } + + public function setPosition(?Position $position): static + { + $this->position = $position; + + return $this; + } + + public function getPrix(): ?float + { + return $this->prix; + } + + public function setPrix(float $prix): static + { + $this->prix = $prix; + + return $this; + } + + public function getLigneRange() + { + switch ($this->ligne): + case 1: + return "A"; + case 2: + return "B"; + case 3: + return "C"; + case 4: + return "D"; + case 5: + return "E"; + case 6: + return "F"; + case 7: + return "G"; + case 8: + return "H"; + case 9: + return "I"; + case 10: + return "J"; + case 11: + return "K"; + case 12: + return "L"; + case 12: + return "M"; + endswitch; + } + + public function getLargeur(): ?int + { + return $this->largeur; + } + + public function setLargeur(int $largeur): static + { + $this->largeur = $largeur; + + return $this; + } +} diff --git a/src/Entity/Annonce.php b/src/Entity/Annonce.php new file mode 100644 index 0000000..b504d7a --- /dev/null +++ b/src/Entity/Annonce.php @@ -0,0 +1,478 @@ + 'DESC'])] + private Collection $commentAnnonces; + + public function __construct() + { + $this->active = true; + $this->complet = false; + $this->date_add = new \DateTime(); + $this->date_update = new \DateTime(); + $this->positions = new ArrayCollection(); + $this->affichages = new ArrayCollection(); + $this->commentAnnonces = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getTitre(): ?string + { + return $this->titre; + } + + public function setTitre(string $titre): self + { + $this->titre = $titre; + + return $this; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(string $description): self + { + $this->description = $description; + + return $this; + } + + public function getPrixMarche(): ?float + { + return $this->prix_marche; + } + + public function setPrixMarche(?float $prix_marche): self + { + $this->prix_marche = $prix_marche; + + return $this; + } + + public function getPrixPromo(): ?float + { + return $this->prix_promo; + } + + public function setPrixPromo(float $prix_promo): self + { + $this->prix_promo = $prix_promo; + + return $this; + } + + public function getPourcentageReduction(): ?float + { + return $this->pourcentage_reduction; + } + + public function setPourcentageReduction(?float $pourcentage_reduction): self + { + $this->pourcentage_reduction = $pourcentage_reduction; + + return $this; + } + + + public function getDateAdd(): ?\DateTimeInterface + { + return $this->date_add; + } + + public function setDateAdd(\DateTimeInterface $date_add): self + { + $this->date_add = $date_add; + + return $this; + } + + public function isActive(): ?bool + { + return $this->active; + } + + public function setActive(bool $active): self + { + $this->active = $active; + + return $this; + } + + public function getSociete(): ?Societe + { + return $this->societe; + } + + public function setSociete(?Societe $societe): self + { + $this->societe = $societe; + + return $this; + } + + public function getCreateBy(): ?User + { + return $this->create_by; + } + + public function setCreateBy(?User $create_by): self + { + $this->create_by = $create_by; + + return $this; + } + + public function getDateUpdate(): ?\DateTimeInterface + { + return $this->date_update; + } + + public function setDateUpdate(\DateTimeInterface $date_update): static + { + $this->date_update = $date_update; + + return $this; + } + + public function getCategorie(): ?Categorie + { + return $this->categorie; + } + + public function setCategorie(?Categorie $categorie): static + { + $this->categorie = $categorie; + + return $this; + } + + /** + * @return Collection + */ + public function getPositions(): Collection + { + return $this->positions; + } + + public function addPosition(Position $position): static + { + if (!$this->positions->contains($position)) { + $this->positions->add($position); + $position->setAnnonce($this); + } + + return $this; + } + + public function removePosition(Position $position): static + { + if ($this->positions->removeElement($position)) { + // set the owning side to null (unless already changed) + if ($position->getAnnonce() === $this) { + $position->setAnnonce(null); + } + } + + return $this; + } + + public function getLargeur(): ?int + { + return $this->largeur; + } + + public function setLargeur(int $largeur): static + { + $this->largeur = $largeur; + + return $this; + } + + public function getDimension(): ?string + { + if($this->largeur == 1){ + return "1/4 (438 * 240) pixels"; + }elseif($this->largeur == 2){ + return "2/4 (876 * 240) pixels"; + }elseif($this->largeur == 3){ + return "3/4 (1314 * 240) pixels"; + }elseif($this->largeur == 4){ + return "4/4 (1752 * 240) pixels"; + } + } + + public function getDimensionWidth(): ?string + { + if($this->largeur == 1){ + return 438; + }elseif($this->largeur == 2){ + return 876; + }elseif($this->largeur == 3){ + return 1314; + }elseif($this->largeur == 4){ + return 1752; + } + } + + /** + * @return Collection + */ + public function getAffichages(): Collection + { + return $this->affichages; + } + + public function addAffichage(Affichage $affichage): static + { + if (!$this->affichages->contains($affichage)) { + $this->affichages->add($affichage); + $affichage->setAnnonce($this); + } + + return $this; + } + + public function removeAffichage(Affichage $affichage): static + { + if ($this->affichages->removeElement($affichage)) { + // set the owning side to null (unless already changed) + if ($affichage->getAnnonce() === $this) { + $affichage->setAnnonce(null); + } + } + + return $this; + } + + public function getImageHome(): ?string + { + return $this->image_home; + } + + public function setImageHome(?string $image_home): static + { + $this->image_home = $image_home; + + return $this; + } + + public function getImageSearch(): ?string + { + return $this->image_search; + } + + public function setImageSearch(?string $image_search): static + { + $this->image_search = $image_search; + + return $this; + } + + public function getImageDetail1(): ?string + { + return $this->image_detail_1; + } + + public function setImageDetail1(?string $image_detail_1): static + { + $this->image_detail_1 = $image_detail_1; + + return $this; + } + + public function getImageDetail2(): ?string + { + return $this->image_detail_2; + } + + public function setImageDetail2(?string $image_detail_2): static + { + $this->image_detail_2 = $image_detail_2; + + return $this; + } + + public function getImageDetail3(): ?string + { + return $this->image_detail_3; + } + + public function setImageDetail3(?string $image_detail_3): static + { + $this->image_detail_3 = $image_detail_3; + + return $this; + } + + public function getImageDetail4(): ?string + { + return $this->image_detail_4; + } + + public function setImageDetail4(?string $image_detail_4): static + { + $this->image_detail_4 = $image_detail_4; + + return $this; + } + + public function getAllImage(): ?array + { + $ListImg = []; + + if($this->image_search) $ListImg[] = $this->image_search; + if($this->image_home) $ListImg[] = $this->image_home; + if($this->image_detail_1) $ListImg[] = $this->image_detail_1; + if($this->image_detail_2) $ListImg[] = $this->image_detail_2; + if($this->image_detail_3) $ListImg[] = $this->image_detail_3; + if($this->image_detail_4) $ListImg[] = $this->image_detail_4; + + return $ListImg; + } + + public function isComplet(): ?bool + { + return $this->complet; + } + + public function setComplet(bool $complet): static + { + $this->complet = $complet; + + return $this; + } + + + public function checkComplet(): static + { + if( ($this->image_home!="") && + ($this->image_search!="") && + ($this->image_detail_1!="") + ) + { + $this->complet = true; + }else{ + $this->complet = false; + } + return $this; + } + + /** + * @return Collection + */ + public function getCommentAnnonces(): Collection + { + return $this->commentAnnonces; + } + + public function addCommentAnnonce(CommentAnnonce $commentAnnonce): static + { + if (!$this->commentAnnonces->contains($commentAnnonce)) { + $this->commentAnnonces->add($commentAnnonce); + $commentAnnonce->setAnnonce($this); + } + + return $this; + } + + public function removeCommentAnnonce(CommentAnnonce $commentAnnonce): static + { + if ($this->commentAnnonces->removeElement($commentAnnonce)) { + // set the owning side to null (unless already changed) + if ($commentAnnonce->getAnnonce() === $this) { + $commentAnnonce->setAnnonce(null); + } + } + + return $this; + } +} diff --git a/src/Entity/Article.php b/src/Entity/Article.php new file mode 100644 index 0000000..67b2b0c --- /dev/null +++ b/src/Entity/Article.php @@ -0,0 +1,419 @@ + 0 | 'Limitation par quantité'=> 1 + #[ORM\Column(type: Types::SMALLINT)] + private ?int $limit_type = null; + + #[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)] + private ?\DateTimeInterface $limit_date = null; + + #[ORM\Column(nullable: true)] + private ?int $limit_quantite = null; + + #[ORM\Column(length: 255, nullable: true)] + private ?string $image_default = null; + + #[ORM\Column(length: 255, nullable: true)] + private ?string $image_detail_1 = null; + + #[ORM\Column(length: 255, nullable: true)] + private ?string $image_detail_2 = null; + + #[ORM\Column(length: 255, nullable: true)] + private ?string $image_detail_3 = null; + + #[ORM\Column(length: 255, nullable: true)] + private ?string $image_detail_4 = null; + + #[ORM\Column(type: Types::DATETIME_MUTABLE)] + private ?\DateTimeInterface $date_add = null; + + #[ORM\Column(type: Types::DATETIME_MUTABLE)] + private ?\DateTimeInterface $date_update = null; + + #[ORM\ManyToOne(inversedBy: 'articles')] + #[ORM\JoinColumn(nullable: false)] + private ?Societe $societe = null; + + #[ORM\Column] + private ?bool $active = null; + + #[ORM\ManyToOne(inversedBy: 'articles')] + #[ORM\JoinColumn(nullable: false)] + private ?Categorie $categorie = null; + + #[ORM\ManyToOne(inversedBy: 'articles')] + #[ORM\JoinColumn(nullable: false)] + private ?User $create_by = null; + + #[ORM\OneToMany(mappedBy: 'article', targetEntity: ReservationArticle::class)] + private Collection $reservationArticles; + + #[ORM\OneToMany(mappedBy: 'article', targetEntity: CommentArticle::class)] + #[ORM\OrderBy(['id' => 'DESC'])] + private Collection $commentArticles; + + + public function __construct() + { + $this->active = false; + $this->date_add = new \DateTime(); + $this->date_update = new \DateTime(); + $this->reservationArticles = new ArrayCollection(); + $this->commentArticles = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getTitre(): ?string + { + return $this->titre; + } + + public function setTitre(string $titre): static + { + $this->titre = $titre; + + return $this; + } + + public function getMarque(): ?string + { + return $this->marque; + } + + public function setMarque(string $marque): static + { + $this->marque = $marque; + + return $this; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(string $description): static + { + $this->description = $description; + + return $this; + } + + public function getPrixMarche(): ?float + { + return $this->prix_marche; + } + + public function setPrixMarche(?float $prix_marche): self + { + $this->prix_marche = $prix_marche; + + return $this; + } + + public function getPrixPromo(): ?float + { + return $this->prix_promo; + } + + public function setPrixPromo(float $prix_promo): self + { + $this->prix_promo = $prix_promo; + + return $this; + } + + public function getAdress(): ?string + { + return $this->adress; + } + + public function setAdress(?string $adress): static + { + $this->adress = $adress; + + return $this; + } + + public function getLimitType(): ?int + { + return $this->limit_type; + } + + public function setLimitType(int $limit_type): static + { + $this->limit_type = $limit_type; + + return $this; + } + + public function getLimitDate(): ?\DateTimeInterface + { + return $this->limit_date; + } + + public function setLimitDate(?\DateTimeInterface $limit_date): static + { + $this->limit_date = $limit_date; + + return $this; + } + + public function getLimitQuantite(): ?int + { + return $this->limit_quantite; + } + + public function setLimitQuantite(?int $limit_quantite): static + { + $this->limit_quantite = $limit_quantite; + + return $this; + } + + public function getImageDefault(): ?string + { + return $this->image_default; + } + + public function setImageDefault(?string $image_default): static + { + $this->image_default = $image_default; + + return $this; + } + + public function getImageDetail1(): ?string + { + return $this->image_detail_1; + } + + public function setImageDetail1(?string $image_detail_1): static + { + $this->image_detail_1 = $image_detail_1; + + return $this; + } + + public function getImageDetail2(): ?string + { + return $this->image_detail_2; + } + + public function setImageDetail2(?string $image_detail_2): static + { + $this->image_detail_2 = $image_detail_2; + + return $this; + } + + public function getImageDetail3(): ?string + { + return $this->image_detail_3; + } + + public function setImageDetail3(?string $image_detail_3): static + { + $this->image_detail_3 = $image_detail_3; + + return $this; + } + + public function getImageDetail4(): ?string + { + return $this->image_detail_4; + } + + public function setImageDetail4(?string $image_detail_4): static + { + $this->image_detail_4 = $image_detail_4; + + return $this; + } + + public function getAllImage(): ?array + { + $ListImg = []; + + if($this->image_default) $ListImg[] = $this->image_default; + if($this->image_detail_1) $ListImg[] = $this->image_detail_1; + if($this->image_detail_2) $ListImg[] = $this->image_detail_2; + if($this->image_detail_3) $ListImg[] = $this->image_detail_3; + if($this->image_detail_4) $ListImg[] = $this->image_detail_4; + + return $ListImg; + } + + public function getDateAdd(): ?\DateTimeInterface + { + return $this->date_add; + } + + public function setDateAdd(\DateTimeInterface $date_add): static + { + $this->date_add = $date_add; + + return $this; + } + + public function getDateUpdate(): ?\DateTimeInterface + { + return $this->date_update; + } + + public function setDateUpdate(\DateTimeInterface $date_update): static + { + $this->date_update = $date_update; + + return $this; + } + + public function getSociete(): ?Societe + { + return $this->societe; + } + + public function setSociete(?Societe $societe): static + { + $this->societe = $societe; + + return $this; + } + + public function isActive(): ?bool + { + return $this->active; + } + + public function setActive(bool $active): static + { + $this->active = $active; + + return $this; + } + + public function getCategorie(): ?Categorie + { + return $this->categorie; + } + + public function setCategorie(?Categorie $categorie): static + { + $this->categorie = $categorie; + + return $this; + } + + public function getCreateBy(): ?User + { + return $this->create_by; + } + + public function setCreateBy(?User $create_by): static + { + $this->create_by = $create_by; + + return $this; + } + + /** + * @return Collection + */ + public function getReservationArticles(): Collection + { + return $this->reservationArticles; + } + + public function addReservationArticle(ReservationArticle $reservationArticle): static + { + if (!$this->reservationArticles->contains($reservationArticle)) { + $this->reservationArticles->add($reservationArticle); + $reservationArticle->setArticle($this); + } + + return $this; + } + + public function removeReservationArticle(ReservationArticle $reservationArticle): static + { + if ($this->reservationArticles->removeElement($reservationArticle)) { + // set the owning side to null (unless already changed) + if ($reservationArticle->getArticle() === $this) { + $reservationArticle->setArticle(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getCommentArticles(): Collection + { + return $this->commentArticles; + } + + public function addCommentArticle(CommentArticle $commentArticle): static + { + if (!$this->commentArticles->contains($commentArticle)) { + $this->commentArticles->add($commentArticle); + $commentArticle->setArticle($this); + } + + return $this; + } + + public function removeCommentArticle(CommentArticle $commentArticle): static + { + if ($this->commentArticles->removeElement($commentArticle)) { + // set the owning side to null (unless already changed) + if ($commentArticle->getArticle() === $this) { + $commentArticle->setArticle(null); + } + } + + return $this; + } + + +} diff --git a/src/Entity/Categorie.php b/src/Entity/Categorie.php new file mode 100644 index 0000000..1041661 --- /dev/null +++ b/src/Entity/Categorie.php @@ -0,0 +1,159 @@ +annonces = new ArrayCollection(); + $this->articles = new ArrayCollection(); + $this->services = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getNom(): ?string + { + return $this->nom; + } + + public function setNom(string $nom): static + { + $this->nom = $nom; + + return $this; + } + + public function getGroupeCategorie(): ?GroupeCategorie + { + return $this->groupeCategorie; + } + + public function setGroupeCategorie(?GroupeCategorie $groupeCategorie): static + { + $this->groupeCategorie = $groupeCategorie; + + return $this; + } + + /** + * @return Collection + */ + public function getAnnonces(): Collection + { + return $this->annonces; + } + + public function addAnnonce(Annonce $annonce): static + { + if (!$this->annonces->contains($annonce)) { + $this->annonces->add($annonce); + $annonce->setCategorie($this); + } + + return $this; + } + + public function removeAnnonce(Annonce $annonce): static + { + if ($this->annonces->removeElement($annonce)) { + // set the owning side to null (unless already changed) + if ($annonce->getCategorie() === $this) { + $annonce->setCategorie(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getArticles(): Collection + { + return $this->articles; + } + + public function addArticle(Article $article): static + { + if (!$this->articles->contains($article)) { + $this->articles->add($article); + $article->setCategorie($this); + } + + return $this; + } + + public function removeArticle(Article $article): static + { + if ($this->articles->removeElement($article)) { + // set the owning side to null (unless already changed) + if ($article->getCategorie() === $this) { + $article->setCategorie(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getServices(): Collection + { + return $this->services; + } + + public function addService(Service $service): static + { + if (!$this->services->contains($service)) { + $this->services->add($service); + $service->setCategorie($this); + } + + return $this; + } + + public function removeService(Service $service): static + { + if ($this->services->removeElement($service)) { + // set the owning side to null (unless already changed) + if ($service->getCategorie() === $this) { + $service->setCategorie(null); + } + } + + return $this; + } +} diff --git a/src/Entity/CommentAnnonce.php b/src/Entity/CommentAnnonce.php new file mode 100644 index 0000000..ec0d206 --- /dev/null +++ b/src/Entity/CommentAnnonce.php @@ -0,0 +1,104 @@ +date_add = new \DateTime(); + $this->active = true; + } + + public function getId(): ?int + { + return $this->id; + } + + public function getClient(): ?User + { + return $this->client; + } + + public function setClient(?User $client): static + { + $this->client = $client; + + return $this; + } + + public function getAnnonce(): ?Annonce + { + return $this->annonce; + } + + public function setAnnonce(?Annonce $annonce): static + { + $this->annonce = $annonce; + + return $this; + } + + public function getDateAdd(): ?\DateTimeInterface + { + return $this->date_add; + } + + public function setDateAdd(\DateTimeInterface $date_add): static + { + $this->date_add = $date_add; + + return $this; + } + + public function getCommentaire(): ?string + { + return $this->commentaire; + } + + public function setCommentaire(string $commentaire): static + { + $this->commentaire = $commentaire; + + return $this; + } + + public function isActive(): ?bool + { + return $this->active; + } + + public function setActive(bool $active): static + { + $this->active = $active; + + return $this; + } +} diff --git a/src/Entity/CommentArticle.php b/src/Entity/CommentArticle.php new file mode 100644 index 0000000..f7d7aae --- /dev/null +++ b/src/Entity/CommentArticle.php @@ -0,0 +1,104 @@ +date_add = new \DateTime(); + $this->active = true; + } + + public function getId(): ?int + { + return $this->id; + } + + public function getClient(): ?User + { + return $this->client; + } + + public function setClient(?User $client): static + { + $this->client = $client; + + return $this; + } + + public function getArticle(): ?Article + { + return $this->article; + } + + public function setArticle(?Article $article): static + { + $this->article = $article; + + return $this; + } + + public function getDateAdd(): ?\DateTimeInterface + { + return $this->date_add; + } + + public function setDateAdd(\DateTimeInterface $date_add): static + { + $this->date_add = $date_add; + + return $this; + } + + public function getCommentaire(): ?string + { + return $this->commentaire; + } + + public function setCommentaire(string $commentaire): static + { + $this->commentaire = $commentaire; + + return $this; + } + + public function isActive(): ?bool + { + return $this->active; + } + + public function setActive(bool $active): static + { + $this->active = $active; + + return $this; + } +} diff --git a/src/Entity/CommentService.php b/src/Entity/CommentService.php new file mode 100644 index 0000000..b6fa1d0 --- /dev/null +++ b/src/Entity/CommentService.php @@ -0,0 +1,104 @@ +date_add = new \DateTime(); + $this->active = true; + } + + public function getId(): ?int + { + return $this->id; + } + + public function getClient(): ?User + { + return $this->client; + } + + public function setClient(?User $client): static + { + $this->client = $client; + + return $this; + } + + public function getService(): ?Service + { + return $this->service; + } + + public function setService(?Service $service): static + { + $this->service = $service; + + return $this; + } + + public function getCommentaire(): ?string + { + return $this->commentaire; + } + + public function setCommentaire(string $commentaire): static + { + $this->commentaire = $commentaire; + + return $this; + } + + public function getDateAdd(): ?\DateTimeInterface + { + return $this->date_add; + } + + public function setDateAdd(\DateTimeInterface $date_add): static + { + $this->date_add = $date_add; + + return $this; + } + + public function isActive(): ?bool + { + return $this->active; + } + + public function setActive(bool $active): static + { + $this->active = $active; + + return $this; + } +} diff --git a/src/Entity/GroupeCategorie.php b/src/Entity/GroupeCategorie.php new file mode 100644 index 0000000..45a21cd --- /dev/null +++ b/src/Entity/GroupeCategorie.php @@ -0,0 +1,105 @@ +categories = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getNom(): ?string + { + return $this->nom; + } + + public function setNom(string $nom): static + { + $this->nom = $nom; + + return $this; + } + + /** + * @return Collection + */ + public function getCategories(): Collection + { + return $this->categories; + } + + public function addCategory(Categorie $category): static + { + if (!$this->categories->contains($category)) { + $this->categories->add($category); + $category->setGroupeCategorie($this); + } + + return $this; + } + + public function removeCategory(Categorie $category): static + { + if ($this->categories->removeElement($category)) { + // set the owning side to null (unless already changed) + if ($category->getGroupeCategorie() === $this) { + $category->setGroupeCategorie(null); + } + } + + return $this; + } + + public function getIconFontawesome(): ?string + { + return $this->icon_fontawesome; + } + + public function setIconFontawesome(?string $icon_fontawesome): static + { + $this->icon_fontawesome = $icon_fontawesome; + + return $this; + } + + public function getImage(): ?string + { + return $this->image; + } + + public function setImage(?string $image): static + { + $this->image = $image; + + return $this; + } +} diff --git a/src/Entity/Ligne.php b/src/Entity/Ligne.php new file mode 100644 index 0000000..fd80173 --- /dev/null +++ b/src/Entity/Ligne.php @@ -0,0 +1,138 @@ +id; + } + + public function getRang(): ?string + { + return $this->rang; + } + + public function setRang(string $rang): static + { + $this->rang = $rang; + + return $this; + } + + public function getPrixDim1(): ?float + { + return $this->prix_dim_1; + } + + public function setPrixDim1(float $prix_dim_1): static + { + $this->prix_dim_1 = $prix_dim_1; + + return $this; + } + + public function getPrixDim2(): ?float + { + return $this->prix_dim_2; + } + + public function setPrixDim2(float $prix_dim_2): static + { + $this->prix_dim_2 = $prix_dim_2; + + return $this; + } + + public function getPrixDim3(): ?float + { + return $this->prix_dim_3; + } + + public function setPrixDim3(float $prix_dim_3): static + { + $this->prix_dim_3 = $prix_dim_3; + + return $this; + } + + public function getPrixDim4(): ?float + { + return $this->prix_dim_4; + } + + public function setPrixDim4(float $prix_dim_4): static + { + $this->prix_dim_4 = $prix_dim_4; + + return $this; + } + + public function getPrixByBimension(int $dim): ?float + { + return match ($dim) { + 1 => $this->prix_dim_1, + 2 => $this->prix_dim_2, + 3 => $this->prix_dim_3, + 4 => $this->prix_dim_4, + + }; + } + + public function getDateUpdate(): ?\DateTimeInterface + { + return $this->date_update; + } + + public function setDateUpdate(\DateTimeInterface $date_update): static + { + $this->date_update = $date_update; + + return $this; + } + + public function getCreateBy(): ?User + { + return $this->create_by; + } + + public function setCreateBy(?User $create_by): static + { + $this->create_by = $create_by; + + return $this; + } +} diff --git a/src/Entity/Newslettre.php b/src/Entity/Newslettre.php new file mode 100644 index 0000000..9f38622 --- /dev/null +++ b/src/Entity/Newslettre.php @@ -0,0 +1,73 @@ +date_add = new \DateTime(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getRelated(): ?int + { + return $this->related; + } + + public function setRelated(int $related): static + { + $this->related = $related; + + return $this; + } + + public function getDateAdd(): ?\DateTimeInterface + { + return $this->date_add; + } + + public function setDateAdd(\DateTimeInterface $date_add): static + { + $this->date_add = $date_add; + + return $this; + } + + public function getProfile(): ?User + { + return $this->profile; + } + + public function setProfile(?User $profile): static + { + $this->profile = $profile; + + return $this; + } +} diff --git a/src/Entity/Parrainage.php b/src/Entity/Parrainage.php new file mode 100644 index 0000000..dfc5a6b --- /dev/null +++ b/src/Entity/Parrainage.php @@ -0,0 +1,74 @@ +add = new \DateTime(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getOrigine(): ?User + { + return $this->origine; + } + + public function setOrigine(?User $origine): static + { + $this->origine = $origine; + + return $this; + } + + public function getNew(): ?User + { + return $this->new; + } + + public function setNew(?User $new): static + { + $this->new = $new; + + return $this; + } + + public function getAdd(): ?\DateTimeInterface + { + return $this->add; + } + + public function setAdd(\DateTimeInterface $add): static + { + $this->add = $add; + + return $this; + } +} diff --git a/src/Entity/Partenaire.php b/src/Entity/Partenaire.php new file mode 100755 index 0000000..fadc2a5 --- /dev/null +++ b/src/Entity/Partenaire.php @@ -0,0 +1,239 @@ +active = false; + $this->notifier = false; + $this->selected = false; + $this->role = 1; // 1 ROLE_PARTNER_ADVANCED | 2 ROLE_PARTNER + $this->date_add = new \DateTime(); + $this->reservationArticleValidations = new ArrayCollection(); + $this->reservationServiceValidations = new ArrayCollection(); + + } + + public function getId(): ?int + { + return $this->id; + } + + public function getPartenaire(): ?User + { + return $this->partenaire; + } + + public function setPartenaire(?User $partenaire): static + { + $this->partenaire = $partenaire; + + return $this; + } + + public function getSociete(): ?Societe + { + return $this->societe; + } + + public function setSociete(?Societe $societe): static + { + $this->societe = $societe; + + return $this; + } + + public function getDateAdd(): ?\DateTimeInterface + { + return $this->date_add; + } + + public function setDateAdd(\DateTimeInterface $date_add): static + { + $this->date_add = $date_add; + + return $this; + } + + public function isActive(): ?bool + { + return $this->active; + } + + public function setActive(bool $active): static + { + $this->active = $active; + + return $this; + } + + public function getAdmin(): ?User + { + return $this->admin; + } + + public function setAdmin(?User $admin): static + { + $this->admin = $admin; + + return $this; + } + + public function getRole(): ?int + { + return $this->role; + } + + public function setRole(int $role): static + { + $this->role = $role; + + return $this; + } + + public function isNotifier(): ?bool + { + return $this->notifier; + } + + public function setNotifier(bool $notifier): static + { + $this->notifier = $notifier; + + return $this; + } + + public function getAccess(): ?array + { + return $this->access; + } + + public function setAccess(?array $access): static + { + $this->access = $access; + + return $this; + } + + /** + * @return Collection + */ + public function getReservationArticleValidations(): Collection + { + return $this->reservationArticleValidations; + } + + public function addReservationArticleValidation(ReservationArticleValidation $reservationArticleValidation): static + { + if (!$this->reservationArticleValidations->contains($reservationArticleValidation)) { + $this->reservationArticleValidations->add($reservationArticleValidation); + $reservationArticleValidation->setPartenaire($this); + } + + return $this; + } + + public function removeReservationArticleValidation(ReservationArticleValidation $reservationArticleValidation): static + { + if ($this->reservationArticleValidations->removeElement($reservationArticleValidation)) { + // set the owning side to null (unless already changed) + if ($reservationArticleValidation->getPartenaire() === $this) { + $reservationArticleValidation->setPartenaire(null); + } + } + + return $this; + } + + public function isSelected(): ?bool + { + return $this->selected; + } + + public function setSelected(bool $selected): static + { + $this->selected = $selected; + + return $this; + } + + /** + * @return Collection + */ + public function getReservationServiceValidations(): Collection + { + return $this->reservationServiceValidations; + } + + public function addReservationServiceValidation(ReservationServiceValidation $reservationServiceValidation): static + { + if (!$this->reservationServiceValidations->contains($reservationServiceValidation)) { + $this->reservationServiceValidations->add($reservationServiceValidation); + $reservationServiceValidation->setPartenaire($this); + } + + return $this; + } + + public function removeReservationServiceValidation(ReservationServiceValidation $reservationServiceValidation): static + { + if ($this->reservationServiceValidations->removeElement($reservationServiceValidation)) { + // set the owning side to null (unless already changed) + if ($reservationServiceValidation->getPartenaire() === $this) { + $reservationServiceValidation->setPartenaire(null); + } + } + + return $this; + } + +} diff --git a/src/Entity/Position.php b/src/Entity/Position.php new file mode 100644 index 0000000..465b506 --- /dev/null +++ b/src/Entity/Position.php @@ -0,0 +1,216 @@ +affichages = new ArrayCollection(); + $this->date_add = new \DateTime(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getDateDebut(): ?\DateTimeInterface + { + return $this->date_debut; + } + + public function setDateDebut(\DateTimeInterface $date_debut): static + { + $this->date_debut = $date_debut; + + return $this; + } + + public function getDateFin(): ?\DateTimeInterface + { + return $this->date_fin; + } + + public function setDateFin(\DateTimeInterface $date_fin): static + { + $this->date_fin = $date_fin; + + return $this; + } + + + public function getLigne(): ?int + { + return $this->ligne; + } + + public function setLigne(?int $ligne): static + { + $this->ligne = $ligne; + + return $this; + } + + + + public function getPriorite(): ?int + { + return $this->priorite; + } + + public function setPriorite(?int $priorite): static + { + $this->priorite = $priorite; + + return $this; + } + + public function getAnnonce(): ?Annonce + { + return $this->annonce; + } + + public function setAnnonce(?Annonce $annonce): static + { + $this->annonce = $annonce; + + return $this; + } + + public function getDateAdd(): ?\DateTimeInterface + { + return $this->date_add; + } + + public function setDateAdd(\DateTimeInterface $date_add): static + { + $this->date_add = $date_add; + + return $this; + } + + public function getCreateBy(): ?User + { + return $this->create_by; + } + + public function setCreateBy(?User $create_by): static + { + $this->create_by = $create_by; + + return $this; + } + + /** + * @return Collection + */ + public function getAffichages(): Collection + { + return $this->affichages; + } + + public function addAffichage(Affichage $affichage): static + { + if (!$this->affichages->contains($affichage)) { + $this->affichages->add($affichage); + $affichage->setPosition($this); + } + + return $this; + } + + public function removeAffichage(Affichage $affichage): static + { + if ($this->affichages->removeElement($affichage)) { + // set the owning side to null (unless already changed) + if ($affichage->getPosition() === $this) { + $affichage->setPosition(null); + } + } + + return $this; + } + + public function getTotalPrix(): ?int + { + $prix = 0; + foreach($this->affichages as $affichage){ + $prix += $affichage->getPrix(); + } + return $prix; + } + + + public function getLigneRange() + { + switch ($this->ligne): + case 1: + return "A"; + case 2: + return "B"; + case 3: + return "C"; + case 4: + return "D"; + case 5: + return "E"; + case 6: + return "F"; + case 7: + return "G"; + case 8: + return "H"; + case 9: + return "I"; + case 10: + return "J"; + case 11: + return "K"; + case 12: + return "L"; + case 13: + return "M"; + endswitch; + } + +} diff --git a/src/Entity/RdvTempo.php b/src/Entity/RdvTempo.php new file mode 100644 index 0000000..ee00672 --- /dev/null +++ b/src/Entity/RdvTempo.php @@ -0,0 +1,67 @@ +id; + } + + public function getClient(): ?User + { + return $this->client; + } + + public function setClient(?User $client): static + { + $this->client = $client; + + return $this; + } + + public function getDateAdd(): ?\DateTimeInterface + { + return $this->date_add; + } + + public function setDateAdd(\DateTimeInterface $date_add): static + { + $this->date_add = $date_add; + + return $this; + } + + public function getServiceRdvReservation(): ?ServiceRdvReservation + { + return $this->serviceRdvReservation; + } + + public function setServiceRdvReservation(ServiceRdvReservation $serviceRdvReservation): static + { + $this->serviceRdvReservation = $serviceRdvReservation; + + return $this; + } +} diff --git a/src/Entity/ReservationArticle.php b/src/Entity/ReservationArticle.php new file mode 100755 index 0000000..ddd6e9f --- /dev/null +++ b/src/Entity/ReservationArticle.php @@ -0,0 +1,224 @@ +date_add = new \DateTime(); + $this->generateReference(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getReference(): ?string + { + return $this->reference; + } + + public function setReference(string $reference): static + { + $this->reference = $reference; + + return $this; + } + + public function getArticle(): ?Article + { + return $this->article; + } + + public function setArticle(?Article $article): static + { + $this->article = $article; + $this->societe = $article->getSociete(); + return $this; + } + + public function getClient(): ?User + { + return $this->client; + } + + public function setClient(?User $client): static + { + $this->client = $client; + + return $this; + } + + public function getQuantite(): ?int + { + return $this->quantite; + } + + public function setQuantite(int $quantite): static + { + $this->quantite = $quantite; + + return $this; + } + + public function getPrix(): ?float + { + return $this->prix; + } + + public function setPrix(float $prix): static + { + $this->prix = $prix; + + return $this; + } + + public function getAvance(): ?float + { + return $this->avance; + } + + public function setAvance(float $avance): static + { + $this->avance = $avance; + + return $this; + } + + public function getFrais(): ?int + { + return $this->frais; + } + + public function setFrais(int $frais): static + { + $this->frais = $frais; + + return $this; + } + + public function getDateAdd(): ?\DateTimeInterface + { + return $this->date_add; + } + + public function setDateAdd(\DateTimeInterface $date_add): static + { + $this->date_add = $date_add; + + return $this; + } + + public function getEtat(): array + { + return $this->etat; + } + + public function setEtat(array $etat): static + { + $this->etat = $etat; + + return $this; + } + + public function addEtat(string $key, string $str): static + { + $this->etat[$key] = $str; + + return $this; + } + + public function getType(): string + { + return "ReservationArticle"; + } + + public function generateReference():static + { + $code1 = random_int(1000, 9999); + $code2 = random_int(1000, 9999); + $code3 = random_int(1000, 9999); + $code4 = random_int(1000, 9999); + + $this->reference = "$code1-$code2-$code3-$code4"; + return $this; + } + + public function getReservationArticleValidation(): ?ReservationArticleValidation + { + return $this->reservationArticleValidation; + } + + public function setReservationArticleValidation(ReservationArticleValidation $reservationArticleValidation): static + { + // set the owning side of the relation if necessary + if ($reservationArticleValidation->getReservationArticle() !== $this) { + $reservationArticleValidation->setReservationArticle($this); + } + + $this->reservationArticleValidation = $reservationArticleValidation; + + return $this; + } + + public function getSociete(): ?Societe + { + return $this->societe; + } + + public function setSociete(?Societe $societe): static + { + $this->societe = $societe; + + return $this; + } + +} diff --git a/src/Entity/ReservationArticleValidation.php b/src/Entity/ReservationArticleValidation.php new file mode 100644 index 0000000..157ac11 --- /dev/null +++ b/src/Entity/ReservationArticleValidation.php @@ -0,0 +1,79 @@ +date_add = new \DateTime(); + } + + public function getType(): string + { + return "ReservationArticleValidation"; + } + + public function getId(): ?int + { + return $this->id; + } + + public function getPartenaire(): ?Partenaire + { + return $this->partenaire; + } + + public function setPartenaire(?Partenaire $partenaire): static + { + $this->partenaire = $partenaire; + + return $this; + } + + public function getReservationArticle(): ?ReservationArticle + { + return $this->reservationArticle; + } + + public function setReservationArticle(ReservationArticle $reservationArticle): static + { + $this->reservationArticle = $reservationArticle; + + return $this; + } + + public function getDateAdd(): ?\DateTimeInterface + { + return $this->date_add; + } + + public function setDateAdd(\DateTimeInterface $date_add): static + { + $this->date_add = $date_add; + + return $this; + } +} diff --git a/src/Entity/ReservationService.php b/src/Entity/ReservationService.php new file mode 100755 index 0000000..932b886 --- /dev/null +++ b/src/Entity/ReservationService.php @@ -0,0 +1,254 @@ +date_add = new \DateTime(); + $this->generateReference(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getReference(): ?string + { + return $this->reference; + } + + public function setReference(string $reference): static + { + $this->reference = $reference; + + return $this; + } + + public function getService(): ?Service + { + return $this->service; + } + + public function setService(?Service $service): static + { + $this->service = $service; + $this->societe = $service->getSociete(); + return $this; + } + + public function getClient(): ?User + { + return $this->client; + } + + public function setClient(?User $client): static + { + $this->client = $client; + + return $this; + } + + public function getDateRdv(): ?\DateTimeInterface + { + return $this->date_rdv; + } + + public function setDateRdv(\DateTimeInterface $date_rdv): static + { + $this->date_rdv = $date_rdv; + + return $this; + } + + public function getServiceRdvReservation(): ?ServiceRdvReservation + { + return $this->serviceRdvReservation; + } + + public function setServiceRdvReservation(ServiceRdvReservation $serviceRdvReservation): static + { + $this->serviceRdvReservation = $serviceRdvReservation; + + return $this; + } + + public function getPrix(): ?float + { + return $this->prix; + } + + public function setPrix(float $prix): static + { + $this->prix = $prix; + + return $this; + } + + public function getAvance(): ?float + { + return $this->avance; + } + + public function setAvance(float $avance): static + { + $this->avance = $avance; + + return $this; + } + + public function getFrais(): ?float + { + return $this->frais; + } + + public function setFrais(float $frais): static + { + $this->frais = $frais; + + return $this; + } + + public function getData(): ?array + { + return $this->data; + } + + public function setData(?array $data): static + { + $this->data = $data; + + return $this; + } + + public function getDateAdd(): ?\DateTimeInterface + { + return $this->date_add; + } + + public function setDateAdd(\DateTimeInterface $date_add): static + { + $this->date_add = $date_add; + + return $this; + } + + public function getEtat(): array + { + return $this->etat; + } + + public function setEtat(array $etat): static + { + $this->etat = $etat; + + return $this; + } + + public function addEtat(string $key, string $str): static + { + $this->etat[$key] = $str; + + return $this; + } + + public function getType(): string + { + return "ReservationService"; + } + + public function generateReference():static + { + $code1 = random_int(1000, 9999); + $code2 = random_int(1000, 9999); + $code3 = random_int(1000, 9999); + $code4 = random_int(1000, 9999); + + $this->reference = "$code1-$code2-$code3-$code4"; + return $this; + } + + public function getReservationServiceValidation(): ?ReservationServiceValidation + { + return $this->reservationServiceValidation; + } + + public function setReservationServiceValidation(ReservationServiceValidation $reservationServiceValidation): static + { + // set the owning side of the relation if necessary + if ($reservationServiceValidation->getReservationService() !== $this) { + $reservationServiceValidation->setReservationService($this); + } + + $this->reservationServiceValidation = $reservationServiceValidation; + + return $this; + } + + public function getSociete(): ?Societe + { + return $this->societe; + } + + public function setSociete(?Societe $societe): static + { + $this->societe = $societe; + + return $this; + } + +} diff --git a/src/Entity/ReservationServiceValidation.php b/src/Entity/ReservationServiceValidation.php new file mode 100644 index 0000000..6a454af --- /dev/null +++ b/src/Entity/ReservationServiceValidation.php @@ -0,0 +1,80 @@ +date_add = new \DateTime(); + } + + public function getType(): string + { + return "ReservationServiceValidation"; + } + + public function getId(): ?int + { + return $this->id; + } + + public function getPartenaire(): ?Partenaire + { + return $this->partenaire; + } + + public function setPartenaire(?Partenaire $partenaire): static + { + $this->partenaire = $partenaire; + + return $this; + } + + + public function getDateAdd(): ?\DateTimeInterface + { + return $this->date_add; + } + + public function setDateAdd(\DateTimeInterface $date_add): static + { + $this->date_add = $date_add; + + return $this; + } + + public function getReservationService(): ?ReservationService + { + return $this->reservationService; + } + + public function setReservationService(ReservationService $reservationService): static + { + $this->reservationService = $reservationService; + + return $this; + } +} diff --git a/src/Entity/Service.php b/src/Entity/Service.php new file mode 100644 index 0000000..695d887 --- /dev/null +++ b/src/Entity/Service.php @@ -0,0 +1,522 @@ + 0 | 'Limitation par rendez-vous'=> 1 + #[ORM\Column(type: Types::SMALLINT)] + private ?int $limit_type = null; + + #[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)] + private ?\DateTimeInterface $limit_date = null; + + #[ORM\Column(nullable: true)] + private ?int $limit_nbr_rdv = null; + + #[ORM\Column(length: 255, nullable: true)] + private ?string $image_default = null; + + #[ORM\Column(length: 255, nullable: true)] + private ?string $image_detail_1 = null; + + #[ORM\Column(length: 255, nullable: true)] + private ?string $image_detail_2 = null; + + #[ORM\Column(length: 255, nullable: true)] + private ?string $image_detail_3 = null; + + #[ORM\Column(length: 255, nullable: true)] + private ?string $image_detail_4 = null; + + #[ORM\Column(type: Types::DATETIME_MUTABLE)] + private ?\DateTimeInterface $date_add = null; + + #[ORM\Column(type: Types::DATETIME_MUTABLE)] + private ?\DateTimeInterface $date_update = null; + + #[ORM\Column] + private ?bool $active = null; + + #[ORM\Column(nullable: false)] + private ?int $duree = null; + + #[ORM\ManyToOne(inversedBy: 'services')] + #[ORM\JoinColumn(nullable: false)] + private ?Societe $societe = null; + + #[ORM\ManyToOne(inversedBy: 'services')] + #[ORM\JoinColumn(nullable: false)] + private ?Categorie $categorie = null; + + #[ORM\ManyToOne(inversedBy: 'services')] + #[ORM\JoinColumn(nullable: false)] + private ?User $create_by = null; + + #[ORM\OneToMany(mappedBy: 'service', targetEntity: ServiceRdv::class)] + private Collection $serviceRdvs; + + #[ORM\OneToMany(mappedBy: 'service', targetEntity: ServiceRdvReservation::class)] + private Collection $serviceRdvReservations; + + #[ORM\OneToMany(mappedBy: 'service', targetEntity: ReservationService::class)] + private Collection $reservationServices; + + #[ORM\OneToMany(mappedBy: 'service', targetEntity: CommentService::class)] + #[ORM\OrderBy(['id' => 'DESC'])] + private Collection $commentServices; + + public function __construct() + { + $this->active = false; + $this->date_add = new \DateTime(); + $this->date_update = new \DateTime(); + $this->serviceRdvs = new ArrayCollection(); + $this->serviceRdvReservations = new ArrayCollection(); + $this->reservationServices = new ArrayCollection(); + $this->commentServices = new ArrayCollection(); + } + + + public function getId(): ?int + { + return $this->id; + } + + public function getTitre(): ?string + { + return $this->titre; + } + + public function setTitre(string $titre): static + { + $this->titre = $titre; + + return $this; + } + + public function getMarque(): ?string + { + return $this->marque; + } + + public function setMarque(string $marque): static + { + $this->marque = $marque; + + return $this; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(string $description): static + { + $this->description = $description; + + return $this; + } + + public function getPrixMarche(): ?float + { + return $this->prix_marche; + } + + public function setPrixMarche(?float $prix_marche): self + { + $this->prix_marche = $prix_marche; + + return $this; + } + + public function getPrixPromo(): ?float + { + return $this->prix_promo; + } + + public function setPrixPromo(float $prix_promo): self + { + $this->prix_promo = $prix_promo; + + return $this; + } + + public function getAdress(): ?string + { + return $this->adress; + } + + public function setAdress(?string $adress): static + { + $this->adress = $adress; + + return $this; + } + + public function getLimitType(): ?int + { + return $this->limit_type; + } + + public function setLimitType(int $limit_type): static + { + $this->limit_type = $limit_type; + + return $this; + } + + public function getLimitDate(): ?\DateTimeInterface + { + return $this->limit_date; + } + + public function setLimitDate(?\DateTimeInterface $limit_date): static + { + $this->limit_date = $limit_date; + + return $this; + } + + public function getLimitNbrRdv(): ?int + { + return $this->limit_nbr_rdv; + } + + public function setLimitNbrRdv(?int $limit_nbr_rdv): static + { + $this->limit_nbr_rdv = $limit_nbr_rdv; + + return $this; + } + + public function getImageDefault(): ?string + { + return $this->image_default; + } + + public function setImageDefault(?string $image_default): static + { + $this->image_default = $image_default; + + return $this; + } + + public function getImageDetail1(): ?string + { + return $this->image_detail_1; + } + + public function setImageDetail1(?string $image_detail_1): static + { + $this->image_detail_1 = $image_detail_1; + + return $this; + } + + public function getImageDetail2(): ?string + { + return $this->image_detail_2; + } + + public function setImageDetail2(?string $image_detail_2): static + { + $this->image_detail_2 = $image_detail_2; + + return $this; + } + + public function getImageDetail3(): ?string + { + return $this->image_detail_3; + } + + public function setImageDetail3(?string $image_detail_3): static + { + $this->image_detail_3 = $image_detail_3; + + return $this; + } + + public function getImageDetail4(): ?string + { + return $this->image_detail_4; + } + + public function setImageDetail4(?string $image_detail_4): static + { + $this->image_detail_4 = $image_detail_4; + + return $this; + } + + public function getAllImage(): ?array + { + $ListImg = []; + + if($this->image_default) $ListImg[] = $this->image_default; + if($this->image_detail_1) $ListImg[] = $this->image_detail_1; + if($this->image_detail_2) $ListImg[] = $this->image_detail_2; + if($this->image_detail_3) $ListImg[] = $this->image_detail_3; + if($this->image_detail_4) $ListImg[] = $this->image_detail_4; + + return $ListImg; + } + + public function getDateAdd(): ?\DateTimeInterface + { + return $this->date_add; + } + + public function setDateAdd(\DateTimeInterface $date_add): static + { + $this->date_add = $date_add; + + return $this; + } + + public function getDateUpdate(): ?\DateTimeInterface + { + return $this->date_update; + } + + public function setDateUpdate(\DateTimeInterface $date_update): static + { + $this->date_update = $date_update; + + return $this; + } + + public function isActive(): ?bool + { + return $this->active; + } + + public function setActive(bool $active): static + { + $this->active = $active; + + return $this; + } + + public function gestionActive(): static + { + if($this->image_default == null){ + $this->active = false; + }else{ + if($this->limit_type == 0){ + if($this->limit_date != null){ + $this->active = true; + }else{ + $this->active = false; + } + }elseif($this->limit_type == 1){ + if($this->limit_nbr_rdv > 1){ + $this->active = true; + }else{ + $this->active = false; + } + } + } + return $this; + } + + public function getDuree(): ?int + { + return $this->duree; + } + + public function setDuree(?int $duree): static + { + $this->duree = $duree; + + return $this; + } + + public function getSociete(): ?Societe + { + return $this->societe; + } + + public function setSociete(?Societe $societe): static + { + $this->societe = $societe; + + return $this; + } + + public function getCategorie(): ?Categorie + { + return $this->categorie; + } + + public function setCategorie(?Categorie $categorie): static + { + $this->categorie = $categorie; + + return $this; + } + + public function getCreateBy(): ?User + { + return $this->create_by; + } + + public function setCreateBy(?User $create_by): static + { + $this->create_by = $create_by; + + return $this; + } + + /** + * @return Collection + */ + public function getServiceRdvs(): Collection + { + return $this->serviceRdvs; + } + + public function addServiceRdv(ServiceRdv $serviceRdv): static + { + if (!$this->serviceRdvs->contains($serviceRdv)) { + $this->serviceRdvs->add($serviceRdv); + $serviceRdv->setService($this); + } + + return $this; + } + + public function removeServiceRdv(ServiceRdv $serviceRdv): static + { + if ($this->serviceRdvs->removeElement($serviceRdv)) { + // set the owning side to null (unless already changed) + if ($serviceRdv->getService() === $this) { + $serviceRdv->setService(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getServiceRdvReservations(): Collection + { + return $this->serviceRdvReservations; + } + + public function addServiceRdvReservation(ServiceRdvReservation $serviceRdvReservation): static + { + if (!$this->serviceRdvReservations->contains($serviceRdvReservation)) { + $this->serviceRdvReservations->add($serviceRdvReservation); + $serviceRdvReservation->setService($this); + } + + return $this; + } + + public function removeServiceRdvReservation(ServiceRdvReservation $serviceRdvReservation): static + { + if ($this->serviceRdvReservations->removeElement($serviceRdvReservation)) { + // set the owning side to null (unless already changed) + if ($serviceRdvReservation->getService() === $this) { + $serviceRdvReservation->setService(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getReservationServices(): Collection + { + return $this->reservationServices; + } + + public function addReservationService(ReservationService $reservationService): static + { + if (!$this->reservationServices->contains($reservationService)) { + $this->reservationServices->add($reservationService); + $reservationService->setService($this); + } + + return $this; + } + + public function removeReservationService(ReservationService $reservationService): static + { + if ($this->reservationServices->removeElement($reservationService)) { + // set the owning side to null (unless already changed) + if ($reservationService->getService() === $this) { + $reservationService->setService(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getCommentServices(): Collection + { + return $this->commentServices; + } + + public function addCommentService(CommentService $commentService): static + { + if (!$this->commentServices->contains($commentService)) { + $this->commentServices->add($commentService); + $commentService->setService($this); + } + + return $this; + } + + public function removeCommentService(CommentService $commentService): static + { + if ($this->commentServices->removeElement($commentService)) { + // set the owning side to null (unless already changed) + if ($commentService->getService() === $this) { + $commentService->setService(null); + } + } + + return $this; + } +} diff --git a/src/Entity/ServiceRdv.php b/src/Entity/ServiceRdv.php new file mode 100644 index 0000000..7c94db9 --- /dev/null +++ b/src/Entity/ServiceRdv.php @@ -0,0 +1,274 @@ +dateAdd = new \DateTime(); + $this->serviceRdvReservations = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getStartDate(): ?\DateTimeInterface + { + return $this->start_date; + } + + public function getStringStartDate(): ?string + { + return $this->start_date->format('d/m/Y'); + } + + public function setStartDate(\DateTimeInterface $start_date): static + { + $this->start_date = $start_date; + + return $this; + } + + public function getEndDate(): ?\DateTimeInterface + { + return $this->end_date; + } + + public function getStringEndDate(): ?string + { + return $this->end_date->format('d/m/Y'); + } + + public function setEndDate(\DateTimeInterface $end_date): static + { + $this->end_date = $end_date; + + return $this; + } + + public function getStartTime(): ?\DateTimeInterface + { + return $this->start_time; + } + + public function getStringStartTime(): ?string + { + return $this->start_time->format('H:i'); + } + + public function setStartTime(\DateTimeInterface $start_time): static + { + $this->start_time = $start_time; + + return $this; + } + + public function getEndTime(): ?\DateTimeInterface + { + return $this->end_time; + } + + public function getStringEndTime(): ?string + { + return $this->end_time->format('H:i'); + } + + public function setEndTime(\DateTimeInterface $end_time): static + { + $this->end_time = $end_time; + + return $this; + } + + public function getDuree(): ?int + { + return $this->duree; + } + + public function setDuree(int $duree): static + { + $this->duree = $duree; + + return $this; + } + + public function getExcludeDay(): ?string + { + return $this->excludeDay; + } + + public function setExcludeDay(?string $excludeDay): static + { + $this->excludeDay = $excludeDay; + + return $this; + } + + public function getService(): ?Service + { + return $this->service; + } + + public function setService(?Service $service): static + { + $this->service = $service; + + return $this; + } + + public function getCreateBy(): ?User + { + return $this->createBy; + } + + public function setCreateBy(?User $createBy): static + { + $this->createBy = $createBy; + + return $this; + } + + public function getReservationJson(): ?array + { + return $this->reservationJson; + } + + public function setReservationJson(?array $reservationJson): static + { + $this->reservationJson = $reservationJson; + + return $this; + } + + + + public function getBetweenRdv(): ?int + { + return $this->betweenRdv; + } + + public function setBetweenRdv(int $betweenRdv): static + { + $this->betweenRdv = $betweenRdv; + + return $this; + } + + public function getDateAdd(): ?\DateTimeInterface + { + return $this->dateAdd; + } + + public function setDateAdd(\DateTimeInterface $dateAdd): static + { + $this->dateAdd = $dateAdd; + + return $this; + } + + /** + * @return Collection + */ + public function getServiceRdvReservations(): Collection + { + return $this->serviceRdvReservations; + } + + public function addServiceRdvReservation(ServiceRdvReservation $serviceRdvReservation): static + { + if (!$this->serviceRdvReservations->contains($serviceRdvReservation)) { + $this->serviceRdvReservations->add($serviceRdvReservation); + $serviceRdvReservation->setServiceRdv($this); + } + + return $this; + } + + public function removeServiceRdvReservation(ServiceRdvReservation $serviceRdvReservation): static + { + if ($this->serviceRdvReservations->removeElement($serviceRdvReservation)) { + // set the owning side to null (unless already changed) + if ($serviceRdvReservation->getServiceRdv() === $this) { + $serviceRdvReservation->setServiceRdv(null); + } + } + + return $this; + } + + + public function toArray(): ?array + { + $Param['id'] = $this->service->getId(); + $Param['startDate'] = $this->start_date->format('d/m/Y'); + $Param['endDate'] = $this->end_date->format('d/m/Y'); + $Param['startTime'] = $this->start_time->format('H:i'); + $Param['endTime'] = $this->end_time->format('H:i'); + $Param['between'] = $this->duree; + $Param ['duree'] = $this->service->getDuree(); + $Param['excludeDay'] = $this->excludeDay; + + $RendezVous = []; + foreach($this->serviceRdvReservations as $reservation){ + $RendezVous[$reservation->getDateDebut()->format('d/m/Y')][] = ['debut'=>$reservation->getDateDebut()->format('H:i'), 'fin'=>$reservation->getDateFin()->format('H:i')]; + } + $Param['arrRendezVous'] = $RendezVous; + + return $Param; + } + + +} diff --git a/src/Entity/ServiceRdvReservation.php b/src/Entity/ServiceRdvReservation.php new file mode 100644 index 0000000..35091ab --- /dev/null +++ b/src/Entity/ServiceRdvReservation.php @@ -0,0 +1,123 @@ +disponible = true; + } + + public function getId(): ?int + { + return $this->id; + } + + public function getDateDebut(): ?\DateTimeInterface + { + return $this->dateDebut; + } + + public function setDateDebut(\DateTimeInterface $dateDebut): static + { + $this->dateDebut = $dateDebut; + + return $this; + } + + public function getDateFin(): ?\DateTimeInterface + { + return $this->dateFin; + } + + public function setDateFin(\DateTimeInterface $dateFin): static + { + $this->dateFin = $dateFin; + + return $this; + } + + public function getServiceRdv(): ?ServiceRdv + { + return $this->serviceRdv; + } + + public function setServiceRdv(?ServiceRdv $serviceRdv): static + { + $this->serviceRdv = $serviceRdv; + + return $this; + } + + public function getService(): ?Service + { + return $this->service; + } + + public function setService(?Service $service): static + { + $this->service = $service; + + return $this; + } + + public function isDisponible(): ?bool + { + return $this->disponible; + } + + public function setDisponible(bool $disponible): static + { + $this->disponible = $disponible; + + return $this; + } + + public function getReservationService(): ?ReservationService + { + return $this->reservationService; + } + + public function setReservationService(ReservationService $reservationService): static + { + // set the owning side of the relation if necessary + if ($reservationService->getServiceRdvReservation() !== $this) { + $reservationService->setServiceRdvReservation($this); + } + + $this->reservationService = $reservationService; + + return $this; + } +} diff --git a/src/Entity/Societe.php b/src/Entity/Societe.php new file mode 100755 index 0000000..80ce7b8 --- /dev/null +++ b/src/Entity/Societe.php @@ -0,0 +1,383 @@ +active = false; + $this->annonces = new ArrayCollection(); + $this->articles = new ArrayCollection(); + $this->services = new ArrayCollection(); + $this->date_add = new \DateTime(); + $this->partenaires = new ArrayCollection(); + $this->reservationArticles = new ArrayCollection(); + $this->reservationServices = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getNom(): ?string + { + return $this->nom; + } + + public function setNom(string $nom): self + { + $this->nom = $nom; + + return $this; + } + + public function getImmatriculation(): ?string + { + return $this->immatriculation; + } + + public function setImmatriculation(string $immatriculation): self + { + $this->immatriculation = $immatriculation; + + return $this; + } + + public function getLogo(): ?string + { + return $this->logo; + } + + public function setLogo(string $logo): self + { + $this->logo = $logo; + + return $this; + } + + public function getAdresse(): ?string + { + return $this->adresse; + } + + public function setAdresse(string $adresse): self + { + $this->adresse = $adresse; + + return $this; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(string $description): self + { + $this->description = $description; + + return $this; + } + + /** + * @return Collection + */ + public function getAnnonces(): Collection + { + return $this->annonces; + } + + public function addAnnonce(Annonce $annonce): self + { + if (!$this->annonces->contains($annonce)) { + $this->annonces->add($annonce); + $annonce->setSociete($this); + } + + return $this; + } + + public function removeAnnonce(Annonce $annonce): self + { + if ($this->annonces->removeElement($annonce)) { + // set the owning side to null (unless already changed) + if ($annonce->getSociete() === $this) { + $annonce->setSociete(null); + } + } + + return $this; + } + + public function getEmail(): ?string + { + return $this->email; + } + + public function setEmail(?string $email): self + { + $this->email = $email; + + return $this; + } + + public function getTelephone(): ?string + { + return $this->telephone; + } + + public function setTelephone(string $telephone): self + { + $this->telephone = $telephone; + + return $this; + } + + public function getFax(): ?string + { + return $this->fax; + } + + public function setFax(?string $fax): self + { + $this->fax = $fax; + + return $this; + } + + /** + * @return Collection + */ + public function getArticles(): Collection + { + return $this->articles; + } + + public function addArticle(Article $article): static + { + if (!$this->articles->contains($article)) { + $this->articles->add($article); + $article->setSociete($this); + } + + return $this; + } + + public function removeArticle(Article $article): static + { + if ($this->articles->removeElement($article)) { + // set the owning side to null (unless already changed) + if ($article->getSociete() === $this) { + $article->setSociete(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getServices(): Collection + { + return $this->services; + } + + public function addService(Service $service): static + { + if (!$this->services->contains($service)) { + $this->services->add($service); + $service->setSociete($this); + } + + return $this; + } + + public function removeService(Service $service): static + { + if ($this->services->removeElement($service)) { + // set the owning side to null (unless already changed) + if ($service->getSociete() === $this) { + $service->setSociete(null); + } + } + + return $this; + } + + public function isActive(): ?bool + { + return $this->active; + } + + public function setActive(bool $active): static + { + $this->active = $active; + + return $this; + } + + public function getDateAdd(): ?\DateTimeInterface + { + return $this->date_add; + } + + public function setDateAdd(\DateTimeInterface $date_add): static + { + $this->date_add = $date_add; + + return $this; + } + + /** + * @return Collection + */ + public function getPartenaires(): Collection + { + return $this->partenaires; + } + + public function addPartenaire(Partenaire $partenaire): static + { + if (!$this->partenaires->contains($partenaire)) { + $this->partenaires->add($partenaire); + $partenaire->setSociete($this); + } + + return $this; + } + + public function removePartenaire(Partenaire $partenaire): static + { + if ($this->partenaires->removeElement($partenaire)) { + // set the owning side to null (unless already changed) + if ($partenaire->getSociete() === $this) { + $partenaire->setSociete(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getReservationArticles(): Collection + { + return $this->reservationArticles; + } + + public function addReservationArticle(ReservationArticle $reservationArticle): static + { + if (!$this->reservationArticles->contains($reservationArticle)) { + $this->reservationArticles->add($reservationArticle); + $reservationArticle->setSociete($this); + } + + return $this; + } + + public function removeReservationArticle(ReservationArticle $reservationArticle): static + { + if ($this->reservationArticles->removeElement($reservationArticle)) { + // set the owning side to null (unless already changed) + if ($reservationArticle->getSociete() === $this) { + $reservationArticle->setSociete(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getReservationServices(): Collection + { + return $this->reservationServices; + } + + public function addReservationService(ReservationService $reservationService): static + { + if (!$this->reservationServices->contains($reservationService)) { + $this->reservationServices->add($reservationService); + $reservationService->setSociete($this); + } + + return $this; + } + + public function removeReservationService(ReservationService $reservationService): static + { + if ($this->reservationServices->removeElement($reservationService)) { + // set the owning side to null (unless already changed) + if ($reservationService->getSociete() === $this) { + $reservationService->setSociete(null); + } + } + + return $this; + } +} diff --git a/src/Entity/User.php b/src/Entity/User.php new file mode 100644 index 0000000..c650586 --- /dev/null +++ b/src/Entity/User.php @@ -0,0 +1,868 @@ +isDeleted = false; + $this->dateAdd = new \DateTime(); + $this->lastLogin = new \DateTime(); + $this->LastChangePassword = new \DateTime(); + $this->positions = new ArrayCollection(); + $this->lignes = new ArrayCollection(); + $this->parrainages = new ArrayCollection(); + $this->newslettres = new ArrayCollection(); + $this->articles = new ArrayCollection(); + $this->services = new ArrayCollection(); + $this->serviceRdvs = new ArrayCollection(); + $this->reservationArticles = new ArrayCollection(); + $this->reservationServices = new ArrayCollection(); + $this->partenaires = new ArrayCollection(); + $this->commentArticles = new ArrayCollection(); + $this->commentServices = new ArrayCollection(); + $this->commentAnnonces = new ArrayCollection(); + } + + + public function getId(): ?int + { + return $this->id; + } + + public function getEmail(): ?string + { + return $this->email; + } + + public function setEmail(string $email): self + { + $this->email = $email; + + return $this; + } + + /** + * A visual identifier that represents this user. + * + * @see UserInterface + */ + public function getUserIdentifier(): string + { + return (string) $this->email; + } + + /** + * @see UserInterface + */ + public function getRoles(): array + { + $roles = $this->roles; + // guarantee every user at least has ROLE_USER + $roles[] = 'ROLE_USER'; + + return array_unique($roles); + } + + public function setRoles(array $roles): self + { + $this->roles = $roles; + + return $this; + } + + public function hasRole(string $role): ?bool + { + $Indice = array_search($role, $this->roles); + if(is_numeric($Indice)){ + return true; + }else{ + return false; + } + } + + public function addRole(string $role): ?bool + { + if(!$this->hasRole($role)){ + $this->roles[] = $role; + return true; + } + return false; + } + + /** + * @see PasswordAuthenticatedUserInterface + */ + public function getPassword(): string + { + return $this->password; + } + + public function setPassword(string $password): self + { + $this->password = $password; + + return $this; + } + + /** + * @see UserInterface + */ + public function eraseCredentials(): void + { + + } + + public function getFirstname(): ?string + { + return $this->firstname; + } + + public function setFirstname(string $firstname): self + { + $this->firstname = $firstname; + + return $this; + } + + public function getLastname(): ?string + { + return $this->lastname; + } + + public function setLastname(string $lastname): self + { + $this->lastname = $lastname; + + return $this; + } + + + public function getFullName(): ?string + { + return $this->firstname." ".$this->lastname; + } + + + public function getGender(): ?int + { + return $this->gender; + } + + public function setGender(int $gender): self + { + $this->gender = $gender; + + return $this; + } + + public function getPseudo(): ?string + { + return ($this->pseudo) ? $this->pseudo : $this->firstname ; + } + + public function setPseudo(?string $pseudo): self + { + $this->pseudo = $pseudo; + + return $this; + } + + public function getBirthdate(): ?\DateTimeInterface + { + return $this->birthdate; + } + + public function setBirthdate(\DateTimeInterface $birthdate): self + { + $this->birthdate = $birthdate; + + return $this; + } + + public function getPhoneNumber(): ?string + { + return $this->phoneNumber; + } + + public function setPhoneNumber(string $phoneNumber): self + { + $this->phoneNumber = $phoneNumber; + + return $this; + } + + public function getLastLogin(): ?\DateTimeInterface + { + return $this->lastLogin; + } + + public function setLastLogin(\DateTimeInterface $lastLogin): self + { + $this->lastLogin = $lastLogin; + + return $this; + } + + public function getDateAdd(): ?\DateTimeInterface + { + return $this->dateAdd; + } + + public function setDateAdd(\DateTimeInterface $dateAdd): self + { + $this->dateAdd = $dateAdd; + + return $this; + } + + public function getIsDeleted(): ?bool + { + return $this->isDeleted; + } + + public function setIsDeleted(bool $isDeleted): self + { + $this->isDeleted = $isDeleted; + + return $this; + } + + /** + * @return Collection + */ + public function getPositions(): Collection + { + return $this->positions; + } + + public function addPosition(Position $position): static + { + if (!$this->positions->contains($position)) { + $this->positions->add($position); + $position->setCreateBy($this); + } + + return $this; + } + + public function removePosition(Position $position): static + { + if ($this->positions->removeElement($position)) { + // set the owning side to null (unless already changed) + if ($position->getCreateBy() === $this) { + $position->setCreateBy(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getLignes(): Collection + { + return $this->lignes; + } + + public function addLigne(Ligne $ligne): static + { + if (!$this->lignes->contains($ligne)) { + $this->lignes->add($ligne); + $ligne->setCreateBy($this); + } + + return $this; + } + + public function removeLigne(Ligne $ligne): static + { + if ($this->lignes->removeElement($ligne)) { + // set the owning side to null (unless already changed) + if ($ligne->getCreateBy() === $this) { + $ligne->setCreateBy(null); + } + } + + return $this; + } + + public function getCountry(): ?string + { + return $this->country; + } + + public function setCountry(string $country): static + { + $this->country = $country; + + return $this; + } + + public function getZip(): ?int + { + return $this->zip; + } + + public function setZip(int $zip): static + { + $this->zip = $zip; + + return $this; + } + + public function getAdresse(): ?string + { + return $this->adresse; + } + + public function setAdresse(string $adresse): static + { + $this->adresse = $adresse; + + return $this; + } + + public function getLastChangePassword(): ?\DateTimeInterface + { + return $this->LastChangePassword; + } + + public function setLastChangePassword(\DateTimeInterface $LastChangePassword): static + { + $this->LastChangePassword = $LastChangePassword; + + return $this; + } + + /** + * @return Collection + */ + public function getParrainages(): Collection + { + return $this->parrainages; + } + + public function addParrainage(Parrainage $parrainage): static + { + if (!$this->parrainages->contains($parrainage)) { + $this->parrainages->add($parrainage); + $parrainage->setOrigine($this); + } + + return $this; + } + + public function removeParrainage(Parrainage $parrainage): static + { + if ($this->parrainages->removeElement($parrainage)) { + // set the owning side to null (unless already changed) + if ($parrainage->getOrigine() === $this) { + $parrainage->setOrigine(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getNewslettres(): Collection + { + return $this->newslettres; + } + + public function addNewslettre(Newslettre $newslettre): static + { + if (!$this->newslettres->contains($newslettre)) { + $this->newslettres->add($newslettre); + $newslettre->setProfile($this); + } + + return $this; + } + + public function removeNewslettre(Newslettre $newslettre): static + { + if ($this->newslettres->removeElement($newslettre)) { + // set the owning side to null (unless already changed) + if ($newslettre->getProfile() === $this) { + $newslettre->setProfile(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getArticles(): Collection + { + return $this->articles; + } + + public function addArticle(Article $article): static + { + if (!$this->articles->contains($article)) { + $this->articles->add($article); + $article->setCreateBy($this); + } + + return $this; + } + + public function removeArticle(Article $article): static + { + if ($this->articles->removeElement($article)) { + // set the owning side to null (unless already changed) + if ($article->getCreateBy() === $this) { + $article->setCreateBy(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getServices(): Collection + { + return $this->services; + } + + public function addService(Service $service): static + { + if (!$this->services->contains($service)) { + $this->services->add($service); + $service->setCreateBy($this); + } + + return $this; + } + + public function removeService(Service $service): static + { + if ($this->services->removeElement($service)) { + // set the owning side to null (unless already changed) + if ($service->getCreateBy() === $this) { + $service->setCreateBy(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getServiceRdvs(): Collection + { + return $this->serviceRdvs; + } + + public function addServiceRdv(ServiceRdv $serviceRdv): static + { + if (!$this->serviceRdvs->contains($serviceRdv)) { + $this->serviceRdvs->add($serviceRdv); + $serviceRdv->setCreateBy($this); + } + + return $this; + } + + public function removeServiceRdv(ServiceRdv $serviceRdv): static + { + if ($this->serviceRdvs->removeElement($serviceRdv)) { + // set the owning side to null (unless already changed) + if ($serviceRdv->getCreateBy() === $this) { + $serviceRdv->setCreateBy(null); + } + } + + return $this; + } + + public function getFrais(): ?int + { + return $this->frais; + } + + public function setFrais(int $frais): static + { + $this->frais = $frais; + + return $this; + } + + + public function getPanier($request, $detail = false): ?array + { + $session = $request->getSession(); + + $nameSession = 'Panier-'.$this->id; + + $data = $session->get($nameSession); + + $paniers = ($data)? $data : []; + + if($detail) + { + $total = $nbr = 0; + + foreach($paniers as $panier){ + $total += $panier['avance']; + $nbr++; + } + + return ['paniers'=>$paniers, 'total'=> $total, 'nbr'=>$nbr]; + } + + return $paniers; + } + + public function setPanier($request, $data): ?array + { + $session = $request->getSession(); + + $nameSession = 'Panier-'.$this->id; + + $paniers = $session->get($nameSession); + + $paniers[] = $data; + + $session->set($nameSession, $paniers); + + return $session->get($nameSession); + } + + /** + * @return Collection + */ + public function getReservationArticles(): Collection + { + return $this->reservationArticles; + } + + public function addReservationArticle(ReservationArticle $reservationArticle): static + { + if (!$this->reservationArticles->contains($reservationArticle)) { + $this->reservationArticles->add($reservationArticle); + $reservationArticle->setClient($this); + } + + return $this; + } + + public function removeReservationArticle(ReservationArticle $reservationArticle): static + { + if ($this->reservationArticles->removeElement($reservationArticle)) { + // set the owning side to null (unless already changed) + if ($reservationArticle->getClient() === $this) { + $reservationArticle->setClient(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getReservationServices(): Collection + { + return $this->reservationServices; + } + + public function addReservationService(ReservationService $reservationService): static + { + if (!$this->reservationServices->contains($reservationService)) { + $this->reservationServices->add($reservationService); + $reservationService->setClient($this); + } + + return $this; + } + + public function removeReservationService(ReservationService $reservationService): static + { + if ($this->reservationServices->removeElement($reservationService)) { + // set the owning side to null (unless already changed) + if ($reservationService->getClient() === $this) { + $reservationService->setClient(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getPartenaires(): Collection + { + return $this->partenaires; + } + + + public function getPartenairesActive() + { + $arrPartenaires = []; + foreach($this->partenaires as $partenaire){ + if($partenaire->isActive() && $partenaire->getSociete()->isActive()){ + $arrPartenaires[] = $partenaire; + } + } + + return $arrPartenaires; + } + + public function addPartenaire(Partenaire $partenaire): static + { + if (!$this->partenaires->contains($partenaire)) { + $this->partenaires->add($partenaire); + $partenaire->setPartenaire($this); + } + + return $this; + } + + public function removePartenaire(Partenaire $partenaire): static + { + if ($this->partenaires->removeElement($partenaire)) { + // set the owning side to null (unless already changed) + if ($partenaire->getPartenaire() === $this) { + $partenaire->setPartenaire(null); + } + } + + return $this; + } + + public function isActiveRolePartner(): bool + { + if($this->getIsDeleted()){ return false;} + + foreach($this->partenaires as $partner){ + if($partner->isActive()){ + return true; + } + } + + return false; + } + + + public function getSelectPartner(){ + foreach($this->partenaires as $partner){ + if($partner->isActive() && $partner->isSelected()){ + return $partner; + } + } + } + + /** + * @return Collection + */ + public function getCommentArticles(): Collection + { + return $this->commentArticles; + } + + public function addCommentArticle(CommentArticle $commentArticle): static + { + if (!$this->commentArticles->contains($commentArticle)) { + $this->commentArticles->add($commentArticle); + $commentArticle->setClient($this); + } + + return $this; + } + + public function removeCommentArticle(CommentArticle $commentArticle): static + { + if ($this->commentArticles->removeElement($commentArticle)) { + // set the owning side to null (unless already changed) + if ($commentArticle->getClient() === $this) { + $commentArticle->setClient(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getCommentServices(): Collection + { + return $this->commentServices; + } + + public function addCommentService(CommentService $commentService): static + { + if (!$this->commentServices->contains($commentService)) { + $this->commentServices->add($commentService); + $commentService->setClient($this); + } + + return $this; + } + + public function removeCommentService(CommentService $commentService): static + { + if ($this->commentServices->removeElement($commentService)) { + // set the owning side to null (unless already changed) + if ($commentService->getClient() === $this) { + $commentService->setClient(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getCommentAnnonces(): Collection + { + return $this->commentAnnonces; + } + + public function addCommentAnnonce(CommentAnnonce $commentAnnonce): static + { + if (!$this->commentAnnonces->contains($commentAnnonce)) { + $this->commentAnnonces->add($commentAnnonce); + $commentAnnonce->setClient($this); + } + + return $this; + } + + public function removeCommentAnnonce(CommentAnnonce $commentAnnonce): static + { + if ($this->commentAnnonces->removeElement($commentAnnonce)) { + // set the owning side to null (unless already changed) + if ($commentAnnonce->getClient() === $this) { + $commentAnnonce->setClient(null); + } + } + + return $this; + } + + +} diff --git a/src/Form/BackendAdmin/AnnonceType.php b/src/Form/BackendAdmin/AnnonceType.php new file mode 100644 index 0000000..b861fbe --- /dev/null +++ b/src/Form/BackendAdmin/AnnonceType.php @@ -0,0 +1,84 @@ +add('titre') + ->add('description', CKEditorType::class) + ->add('prix_marche') + ->add('prix_promo') + ->add('pourcentage_reduction') + ->add('largeur', ChoiceType::class, array( + 'label' => 'Liste des groupes', + 'required' => true, + 'placeholder' => "Sélectionnez la dimension d'annonce", + 'choices' => [ + '1/4 (438 * 240) pixels' => 1, + '2/4 (876 * 240) pixels' => 2, + '3/4 (1314 * 240) pixels' => 3, + '4/4 (1752 * 240) pixels' => 4, + ], + )) + + ->add('societe', EntityType::class, array( + 'label' => 'availability.host', + 'class' => Societe::class, + 'placeholder' => 'Sélectionnez une Société', + 'required' => true, + 'query_builder' => function (SocieteRepository $er){ + return $er->createQueryBuilder('S') + ->orderBy('S.id', 'DESC'); + }, + + 'choice_label' => function (Societe $societe) { + return $societe->getId() . ' ' . $societe->getNom(); + }//,'attr' => ['class' => 'select-filter select2bs4 select-filter-speaker'], + )) + ->add('categorie', EntityType::class, array( + 'label' => 'Liste des groupes', + 'class' => Categorie::class, + 'required' => true, + 'placeholder' => 'Sélectionnez une catégorie', + 'query_builder' => function (CategorieRepository $er) { + return $er->createQueryBuilder('u') + ->orderBy('u.nom', 'ASC'); + }, + 'choice_label' => function (Categorie $categorie) { + return $categorie->getId() . ' - ' . $categorie->getNom(); + } + )) + ->add("save", SubmitType::class) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Annonce::class, + ]); + } +} diff --git a/src/Form/BackendAdmin/ArticleType.php b/src/Form/BackendAdmin/ArticleType.php new file mode 100644 index 0000000..39abdf0 --- /dev/null +++ b/src/Form/BackendAdmin/ArticleType.php @@ -0,0 +1,80 @@ +add('titre') + ->add('marque') + ->add('description', CKEditorType::class) + ->add('adress') + ->add('prix_marche') + ->add('prix_promo') + ->add('limit_type', ChoiceType::class, array( + 'choices' => array( + 'Limitation par date' => 0, + 'Limitation par quantité' => 1, + ), + 'expanded' => true + )) + + + ->add('limit_quantite') + + ->add('limit_date', DateType::class, [ + 'widget' => 'single_text', + 'required' => false, + ]) + + + + ->add('societe', EntityType::class, [ + 'class' => Societe::class, + 'choice_label' => 'nom', + 'multiple' => false,]) + ->add('categorie', EntityType::class, array( + 'label' => 'Liste des groupes', + 'class' => Categorie::class, + 'required' => true, + 'placeholder' => 'Sélectionnez une catégorie', + 'query_builder' => function (CategorieRepository $er) { + return $er->createQueryBuilder('u') + ->orderBy('u.nom', 'ASC'); + }, + 'choice_label' => function (Categorie $categorie) { + return $categorie->getId() . ' - ' . $categorie->getNom(); + } + )) + ->add("save", SubmitType::class) + + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Article::class, + ]); + } +} diff --git a/src/Form/BackendAdmin/CategorieType.php b/src/Form/BackendAdmin/CategorieType.php new file mode 100644 index 0000000..9d85e1c --- /dev/null +++ b/src/Form/BackendAdmin/CategorieType.php @@ -0,0 +1,46 @@ +add('nom') + ->add('groupeCategorie', EntityType::class, array( + 'label' => 'Liste des groupes', + 'class' => GroupeCategorie::class, + 'required' => false, + 'placeholder' => 'Sélectionnez un groupe', + 'query_builder' => function (GroupeCategorieRepository $er) { + return $er->createQueryBuilder('u') + ->orderBy('u.nom', 'ASC'); + }, + 'choice_label' => function (GroupeCategorie $group) { + return $group->getId() . ' - ' . $group->getNom(); + } + )) + ->add("save", SubmitType::class) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Categorie::class, + ]); + } +} diff --git a/src/Form/BackendAdmin/GroupeCategorieType.php b/src/Form/BackendAdmin/GroupeCategorieType.php new file mode 100644 index 0000000..5c04231 --- /dev/null +++ b/src/Form/BackendAdmin/GroupeCategorieType.php @@ -0,0 +1,51 @@ +add('nom') + ->add('icon_fontawesome') + ->add('image', FileType::class, [ + 'label' => 'Votre image de profil (Des fichiers images uniquement)', + 'mapped' => false, + 'required' => false, + 'constraints' => [ + new File([ + 'maxSize' => '1024k', + 'mimeTypes' => [ + 'image/gif', + 'image/jpeg', + 'image/png', + 'image/jpg', + ], + 'mimeTypesMessage' => 'Please upload a valid Image', + ]) + ], + ]) + ->add("save", SubmitType::class) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => GroupeCategorie::class, + ]); + } +} diff --git a/src/Form/BackendAdmin/PartenaireType.php b/src/Form/BackendAdmin/PartenaireType.php new file mode 100644 index 0000000..f5e815a --- /dev/null +++ b/src/Form/BackendAdmin/PartenaireType.php @@ -0,0 +1,59 @@ +add('partenaire', EntityType::class, array( + 'class' => User::class, + 'label' => 'Nom Partenaire', + 'query_builder' => function (EntityRepository $er) { + return $er->createQueryBuilder('U') + ->where("U.isDeleted = false") + ->orderBy('U.firstname', 'ASC'); + }, + 'choice_label' => 'firstname', + 'multiple' => false, + 'required' => true, + 'by_reference' => false, + )) + ->add('societe', EntityType::class, array( + 'class' => Societe::class, + 'label' => 'Société', + 'query_builder' => function (EntityRepository $er) { + return $er->createQueryBuilder('S') + ->where("S.active = false") + ->orderBy('S.nom', 'ASC'); + }, + 'choice_label' => 'nom', + 'multiple' => false, + 'required' => true, + //'by_reference' => false, + )) + ->add("save", SubmitType::class) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Partenaire::class, + ]); + } +} diff --git a/src/Form/BackendAdmin/ServiceType.php b/src/Form/BackendAdmin/ServiceType.php new file mode 100644 index 0000000..7541b7b --- /dev/null +++ b/src/Form/BackendAdmin/ServiceType.php @@ -0,0 +1,79 @@ +add('titre') + ->add('marque') + ->add('description', CKEditorType::class) + ->add('adress') + ->add('prix_marche') + ->add('prix_promo') + ->add('limit_type', ChoiceType::class, array( + 'choices' => array( + 'Limitation par date' => 0, + 'Limitation par Rendez-vous' => 1, + ), + 'expanded' => true + )) + + ->add('duree') + + ->add('limit_date', DateType::class, [ + 'widget' => 'single_text', + 'required' => false, + ]) + + + + ->add('societe', EntityType::class, [ + 'class' => Societe::class, + 'choice_label' => 'nom', + 'multiple' => false,]) + ->add('categorie', EntityType::class, array( + 'label' => 'Liste des groupes', + 'class' => Categorie::class, + 'required' => true, + 'placeholder' => 'Sélectionnez une catégorie', + 'query_builder' => function (CategorieRepository $er) { + return $er->createQueryBuilder('u') + ->orderBy('u.nom', 'ASC'); + }, + 'choice_label' => function (Categorie $categorie) { + return $categorie->getId() . ' - ' . $categorie->getNom(); + } + )) + ->add("save", SubmitType::class) + + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Service::class, + ]); + } +} diff --git a/src/Form/BackendAdmin/SocieteType.php b/src/Form/BackendAdmin/SocieteType.php new file mode 100644 index 0000000..b9ee84c --- /dev/null +++ b/src/Form/BackendAdmin/SocieteType.php @@ -0,0 +1,64 @@ +add('nom', TextType::class, array( + 'label' => 'Nom du Société' + )) + ->add('immatriculation') + ->add('adresse') + ->add('description', CKEditorType::class) + ->add('email', EmailType::class, array( + 'label' => 'Email' + )) + ->add('telephone') + ->add('fax') + ->add('photo', FileType::class, [ + 'label' => 'Votre image de société (Des fichiers images uniquement)', + 'mapped' => false, + 'required' => false, + 'constraints' => [ + new File([ + 'maxSize' => '1024k', + 'mimeTypes' => [ + 'image/gif', + 'image/jpeg', + 'image/png', + 'image/jpg', + ], + 'mimeTypesMessage' => 'Please upload a valid Image', + ]) + ], + ]) + ->add("save", SubmitType::class) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Societe::class, + ]); + } +} diff --git a/src/Form/Frontend/CommentType.php b/src/Form/Frontend/CommentType.php new file mode 100644 index 0000000..29af3b1 --- /dev/null +++ b/src/Form/Frontend/CommentType.php @@ -0,0 +1,24 @@ +add('commentaire', TextareaType::class, [ + 'required' => true, + ]) + ->add('save', SubmitType::class, ['label' => 'Enregiser le commentaire']) + ; + } + + +} diff --git a/src/Form/Frontend/UserAdresseType.php b/src/Form/Frontend/UserAdresseType.php new file mode 100644 index 0000000..1589a83 --- /dev/null +++ b/src/Form/Frontend/UserAdresseType.php @@ -0,0 +1,42 @@ +add('country', TextType::class, array( + 'label' => 'Pays', + 'required' => true + )) + ->add('zip', IntegerType::class, array( + 'label' => 'Code Postal', + 'required' => true + )) + ->add('adresse', TextType::class, array( + 'label' => 'Adresse', + 'required' => true + )) + ->add("save", SubmitType::class, ['attr'=>['class'=>'save'] ]) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => User::class, + ]); + } +} diff --git a/src/Form/Frontend/UserInfoCnxType.php b/src/Form/Frontend/UserInfoCnxType.php new file mode 100644 index 0000000..51df243 --- /dev/null +++ b/src/Form/Frontend/UserInfoCnxType.php @@ -0,0 +1,34 @@ +add('email', EmailType::class, array( + 'label' => 'Email' + )) + ->add('pseudo') + + ->add("save", SubmitType::class, ['attr'=>['class'=>'save'], ]) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => User::class, + ]); + } +} diff --git a/src/Form/Frontend/UserInfoPersoType.php b/src/Form/Frontend/UserInfoPersoType.php new file mode 100644 index 0000000..b90f453 --- /dev/null +++ b/src/Form/Frontend/UserInfoPersoType.php @@ -0,0 +1,57 @@ +add('firstname', TextType::class, array( + 'label' => 'Prénom', + 'required' => true + )) + ->add('lastname', TextType::class, array( + 'label' => 'Nom', + 'required' => true + )) + ->add('birthdate', BirthdayType::class, array( + 'label' => 'Date de naissance', + 'format' => 'dd/MM/yyyy', + 'widget' => 'single_text', + 'html5' => false, + 'attr' => [ + 'class'=> 'datepicker form-control unicase-form-control', + ] + )) + ->add('phoneNumber', TextType::class, array( + 'label' => 'Numéro Téléphone', + 'required' => true + )) + ->add('gender', ChoiceType::class, array( + 'label' => 'Gender', + 'choices' => ['Femme' => 0, 'Homme' => 1 ], + 'required' => true + )) + ->add("save", SubmitType::class, ['attr'=>['class'=>'save']]) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => User::class, + ]); + } +} diff --git a/src/Form/Frontend/UserRegistrationType.php b/src/Form/Frontend/UserRegistrationType.php new file mode 100644 index 0000000..5f12245 --- /dev/null +++ b/src/Form/Frontend/UserRegistrationType.php @@ -0,0 +1,117 @@ +add('email', EmailType::class, array( + 'label' => 'Email' + )) + ->add('password', RepeatedType::class, [ + 'type' => PasswordType::class, + 'invalid_message' => 'The password fields must match.', + 'options' => ['attr' => ['class' => 'password-field']], + 'required' => true, + 'first_options' => ['label' => 'Mot de passe'], + 'second_options' => ['label' => 'Confirmation mot de passe'], + 'constraints' => [ + new NotBlank([ + 'message' => 'Please enter a password', + ]), + new Length([ + 'min' => 6, + 'minMessage' => 'Your password should be at least {{ limit }} characters', + // max length allowed by Symfony for security reasons + 'max' => 4096, + ]), + ], + ]) + ->add('firstname', TextType::class, array( + 'label' => 'Prénom', + 'required' => true + )) + ->add('lastname', TextType::class, array( + 'label' => 'Nom', + 'required' => true + )) + ->add('birthdate', BirthdayType::class, array( + 'label' => 'Date de naissance', + 'format' => 'dd/MM/yyyy', + 'widget' => 'single_text', + 'html5' => false, + 'attr' => [ + 'class'=> 'datepicker form-control unicase-form-control', + ] + )) + ->add('phoneNumber', TextType::class, array( + 'label' => 'Numéro Téléphone', + 'required' => true + )) + ->add('gender', ChoiceType::class, array( + 'label' => 'Gender', + 'choices' => ['Femme' => 0, 'Homme' => 1 ], + 'required' => true + )) + ->add('pseudo') + + ->add('country', TextType::class, array( + 'label' => 'Pays', + 'required' => true + )) + + ->add('zip', IntegerType::class, array( + 'label' => 'Code Postal', + 'required' => true + )) + + ->add('adresse', TextType::class, array( + 'label' => 'Adresse', + 'required' => true + )) + + ->add('newsletter', CheckboxType::class, array( + 'mapped' => false, + 'required' => false, + 'label' => 'Je m’inscris à la newsletter et accepte de recevoir des communications de la part TNpromo', + )) + ->add('cgu', CheckboxType::class, array( + 'mapped' => false, + 'constraints' => [ + new IsTrue([ + 'message' => 'Merci d’accepter les conditions générales d’utilisation en cochant la case ci-dessous' + ]) + ], + )) + ->add("save", SubmitType::class, ['attr'=>['class'=>'save'], ]) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => User::class, + ]); + } +} diff --git a/src/Form/Frontend/UserUpdatePasswordType.php b/src/Form/Frontend/UserUpdatePasswordType.php new file mode 100644 index 0000000..62dc068 --- /dev/null +++ b/src/Form/Frontend/UserUpdatePasswordType.php @@ -0,0 +1,57 @@ +add('password', PasswordType::class, array( + 'constraints' => [ + new \Symfony\Component\Security\Core\Validator\Constraints\UserPassword(), + ], + 'label' => 'Mot de passe actuel', + 'required' => true, + )) + ->add('new_password', PasswordType::class, [ + 'label' => 'Nouveau mot de passe *', + 'required' => true, + 'mapped' => false, + 'constraints' =>[ + new Assert\Regex(['pattern'=> "/^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z]).{8,200}$/", + 'message' => 'Mot de passe très faible']), + ], + + ]) + ->add('confirm_password', PasswordType::class, [ + 'required' => true, + 'mapped' => false, + 'label' => 'Confirmation du nouveau mot de passe *', + 'constraints' => [ + new Assert\EqualTo(['propertyPath'=>'parent.all[new_password].data', + 'message' => 'Les 2 mots de passe ne sont pas identiques.']) + ], + ]) + ->add('submit', SubmitType::class, array( + 'label' => 'Envoyer' + )) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => User::class, + ]); + } +} diff --git a/src/Kernel.php b/src/Kernel.php new file mode 100755 index 0000000..779cd1f --- /dev/null +++ b/src/Kernel.php @@ -0,0 +1,11 @@ + + * + * @method Affichage|null find($id, $lockMode = null, $lockVersion = null) + * @method Affichage|null findOneBy(array $criteria, array $orderBy = null) + * @method Affichage[] findAll() + * @method Affichage[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class AffichageRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Affichage::class); + } + + /** + * @return Affichage[] Returns an array of Affichage objects + */ + public function findBetweenDate($debut, $end): array + { + return $this->createQueryBuilder('a') + ->where('a.date_show BETWEEN :Debut AND :Fin') + ->setParameter('Debut', new \DateTime($debut)) + ->setParameter('Fin', new \DateTime($end)) + ->orderBy('a.date_show', 'ASC') + ->getQuery() + ->getResult() + ; + } + +// public function findOneBySomeField($value): ?Affichage +// { +// return $this->createQueryBuilder('a') +// ->andWhere('a.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/AnnoncePositionRepository.php b/src/Repository/AnnoncePositionRepository.php new file mode 100644 index 0000000..6ea252a --- /dev/null +++ b/src/Repository/AnnoncePositionRepository.php @@ -0,0 +1,66 @@ + + * + * @method AnnoncePosition|null find($id, $lockMode = null, $lockVersion = null) + * @method AnnoncePosition|null findOneBy(array $criteria, array $orderBy = null) + * @method AnnoncePosition[] findAll() + * @method AnnoncePosition[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class AnnoncePositionRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, AnnoncePosition::class); + } + + public function save(AnnoncePosition $entity, bool $flush = false): void + { + $this->getEntityManager()->persist($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(AnnoncePosition $entity, bool $flush = false): void + { + $this->getEntityManager()->remove($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + +// /** +// * @return AnnoncePosition[] Returns an array of AnnoncePosition objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('a') +// ->andWhere('a.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('a.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?AnnoncePosition +// { +// return $this->createQueryBuilder('a') +// ->andWhere('a.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/AnnonceRepository.php b/src/Repository/AnnonceRepository.php new file mode 100644 index 0000000..236f967 --- /dev/null +++ b/src/Repository/AnnonceRepository.php @@ -0,0 +1,66 @@ + + * + * @method Annonce|null find($id, $lockMode = null, $lockVersion = null) + * @method Annonce|null findOneBy(array $criteria, array $orderBy = null) + * @method Annonce[] findAll() + * @method Annonce[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class AnnonceRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Annonce::class); + } + + public function save(Annonce $entity, bool $flush = false): void + { + $this->getEntityManager()->persist($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(Annonce $entity, bool $flush = false): void + { + $this->getEntityManager()->remove($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + +// /** +// * @return Annonce[] Returns an array of Annonce objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('a') +// ->andWhere('a.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('a.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?Annonce +// { +// return $this->createQueryBuilder('a') +// ->andWhere('a.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/ArticleRepository.php b/src/Repository/ArticleRepository.php new file mode 100644 index 0000000..77101f8 --- /dev/null +++ b/src/Repository/ArticleRepository.php @@ -0,0 +1,64 @@ + + * + * @method Article|null find($id, $lockMode = null, $lockVersion = null) + * @method Article|null findOneBy(array $criteria, array $orderBy = null) + * @method Article[] findAll() + * @method Article[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class ArticleRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Article::class); + } + + /** + * @return Article[] Returns an array of Article objects + */ + public function show(){ + return $this->createQueryBuilder('a') + ->Where('(a.limit_type = 0) AND (a.limit_date >= :LimitDate)') + ->orWhere('(a.limit_type = 1) AND (a.limit_quantite > 0)') + ->andWhere('a.active = :Active') + ->setParameter('LimitDate', new \DateTime()) + ->setParameter('Active', true) + ->orderBy('a.id', 'DESC') + ->getQuery() + ->getResult() + ; + } + +// /** +// * @return Article[] Returns an array of Article objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('a') +// ->andWhere('a.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('a.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?Article +// { +// return $this->createQueryBuilder('a') +// ->andWhere('a.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/CategorieRepository.php b/src/Repository/CategorieRepository.php new file mode 100644 index 0000000..636a793 --- /dev/null +++ b/src/Repository/CategorieRepository.php @@ -0,0 +1,48 @@ + + * + * @method Categorie|null find($id, $lockMode = null, $lockVersion = null) + * @method Categorie|null findOneBy(array $criteria, array $orderBy = null) + * @method Categorie[] findAll() + * @method Categorie[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class CategorieRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Categorie::class); + } + +// /** +// * @return Categorie[] Returns an array of Categorie objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('c') +// ->andWhere('c.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('c.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?Categorie +// { +// return $this->createQueryBuilder('c') +// ->andWhere('c.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/CommentAnnonceRepository.php b/src/Repository/CommentAnnonceRepository.php new file mode 100644 index 0000000..9432d26 --- /dev/null +++ b/src/Repository/CommentAnnonceRepository.php @@ -0,0 +1,48 @@ + + * + * @method CommentAnnonce|null find($id, $lockMode = null, $lockVersion = null) + * @method CommentAnnonce|null findOneBy(array $criteria, array $orderBy = null) + * @method CommentAnnonce[] findAll() + * @method CommentAnnonce[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class CommentAnnonceRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, CommentAnnonce::class); + } + +// /** +// * @return CommentAnnonce[] Returns an array of CommentAnnonce objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('c') +// ->andWhere('c.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('c.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?CommentAnnonce +// { +// return $this->createQueryBuilder('c') +// ->andWhere('c.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/CommentArticleRepository.php b/src/Repository/CommentArticleRepository.php new file mode 100644 index 0000000..31d2a0f --- /dev/null +++ b/src/Repository/CommentArticleRepository.php @@ -0,0 +1,48 @@ + + * + * @method CommentArticle|null find($id, $lockMode = null, $lockVersion = null) + * @method CommentArticle|null findOneBy(array $criteria, array $orderBy = null) + * @method CommentArticle[] findAll() + * @method CommentArticle[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class CommentArticleRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, CommentArticle::class); + } + +// /** +// * @return CommentArticle[] Returns an array of CommentArticle objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('c') +// ->andWhere('c.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('c.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?CommentArticle +// { +// return $this->createQueryBuilder('c') +// ->andWhere('c.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/CommentServiceRepository.php b/src/Repository/CommentServiceRepository.php new file mode 100644 index 0000000..be4265d --- /dev/null +++ b/src/Repository/CommentServiceRepository.php @@ -0,0 +1,48 @@ + + * + * @method CommentService|null find($id, $lockMode = null, $lockVersion = null) + * @method CommentService|null findOneBy(array $criteria, array $orderBy = null) + * @method CommentService[] findAll() + * @method CommentService[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class CommentServiceRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, CommentService::class); + } + +// /** +// * @return CommentService[] Returns an array of CommentService objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('c') +// ->andWhere('c.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('c.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?CommentService +// { +// return $this->createQueryBuilder('c') +// ->andWhere('c.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/GroupeCategorieRepository.php b/src/Repository/GroupeCategorieRepository.php new file mode 100644 index 0000000..0ccd2bd --- /dev/null +++ b/src/Repository/GroupeCategorieRepository.php @@ -0,0 +1,48 @@ + + * + * @method GroupeCategorie|null find($id, $lockMode = null, $lockVersion = null) + * @method GroupeCategorie|null findOneBy(array $criteria, array $orderBy = null) + * @method GroupeCategorie[] findAll() + * @method GroupeCategorie[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class GroupeCategorieRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, GroupeCategorie::class); + } + +// /** +// * @return GroupeCategorie[] Returns an array of GroupeCategorie objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('g') +// ->andWhere('g.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('g.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?GroupeCategorie +// { +// return $this->createQueryBuilder('g') +// ->andWhere('g.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/LigneRepository.php b/src/Repository/LigneRepository.php new file mode 100644 index 0000000..d3ddf4e --- /dev/null +++ b/src/Repository/LigneRepository.php @@ -0,0 +1,60 @@ + + * + * @method Ligne|null find($id, $lockMode = null, $lockVersion = null) + * @method Ligne|null findOneBy(array $criteria, array $orderBy = null) + * @method Ligne[] findAll() + * @method Ligne[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class LigneRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Ligne::class); + } + + + public function findAllKeyId() + { + $lignes = []; + foreach($this->findAll() as $ligne){ + $lignes[$ligne->getId()] = $ligne; + } + ksort($lignes); + return $lignes; + } + + +// /** +// * @return Ligne[] Returns an array of Ligne objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('l') +// ->andWhere('l.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('l.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?Ligne +// { +// return $this->createQueryBuilder('l') +// ->andWhere('l.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/NewslettreRepository.php b/src/Repository/NewslettreRepository.php new file mode 100644 index 0000000..2d9c7fc --- /dev/null +++ b/src/Repository/NewslettreRepository.php @@ -0,0 +1,48 @@ + + * + * @method Newslettre|null find($id, $lockMode = null, $lockVersion = null) + * @method Newslettre|null findOneBy(array $criteria, array $orderBy = null) + * @method Newslettre[] findAll() + * @method Newslettre[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class NewslettreRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Newslettre::class); + } + +// /** +// * @return Newslettre[] Returns an array of Newslettre objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('n') +// ->andWhere('n.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('n.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?Newslettre +// { +// return $this->createQueryBuilder('n') +// ->andWhere('n.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/ParrainageRepository.php b/src/Repository/ParrainageRepository.php new file mode 100644 index 0000000..aaff62b --- /dev/null +++ b/src/Repository/ParrainageRepository.php @@ -0,0 +1,48 @@ + + * + * @method Parrainage|null find($id, $lockMode = null, $lockVersion = null) + * @method Parrainage|null findOneBy(array $criteria, array $orderBy = null) + * @method Parrainage[] findAll() + * @method Parrainage[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class ParrainageRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Parrainage::class); + } + +// /** +// * @return Parrainage[] Returns an array of Parrainage objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('p') +// ->andWhere('p.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('p.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?Parrainage +// { +// return $this->createQueryBuilder('p') +// ->andWhere('p.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/PartenaireRepository.php b/src/Repository/PartenaireRepository.php new file mode 100644 index 0000000..99ac6c4 --- /dev/null +++ b/src/Repository/PartenaireRepository.php @@ -0,0 +1,48 @@ + + * + * @method Partenaire|null find($id, $lockMode = null, $lockVersion = null) + * @method Partenaire|null findOneBy(array $criteria, array $orderBy = null) + * @method Partenaire[] findAll() + * @method Partenaire[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class PartenaireRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Partenaire::class); + } + +// /** +// * @return Partenaire[] Returns an array of Partenaire objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('p') +// ->andWhere('p.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('p.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?Partenaire +// { +// return $this->createQueryBuilder('p') +// ->andWhere('p.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/PositionRepository.php b/src/Repository/PositionRepository.php new file mode 100644 index 0000000..bf45a36 --- /dev/null +++ b/src/Repository/PositionRepository.php @@ -0,0 +1,76 @@ + + * + * @method Position|null find($id, $lockMode = null, $lockVersion = null) + * @method Position|null findOneBy(array $criteria, array $orderBy = null) + * @method Position[] findAll() + * @method Position[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class PositionRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Position::class); + } + + public function addPosition($annonce, $date_debut, $date_fin, $id_ligne, $user) + { + $position = new Position(); + $position->setAnnonce($annonce); + $position->setDateDebut(new \DateTime($date_debut)); + $position->setDateFin(new \DateTime($date_fin)); + $position->setLigne($id_ligne); + $position->setCreateBy($user); + + $this->_em->persist($position); + $this->_em->flush(); + + return $position; + } + + + public function getPositionByDate($date) + { + return $this->createQueryBuilder('p') + ->where('p.date_debut <= :DateSelect') + ->andWhere('p.date_fin >= :DateSelect') + ->setParameter('DateSelect', $date) + ->orderBy('p.ligne', 'ASC') + ->getQuery() + ->getResult() + ; + } + +// /** +// * @return Position[] Returns an array of Position objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('p') +// ->andWhere('p.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('p.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?Position +// { +// return $this->createQueryBuilder('p') +// ->andWhere('p.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/RdvTempoRepository.php b/src/Repository/RdvTempoRepository.php new file mode 100644 index 0000000..195d343 --- /dev/null +++ b/src/Repository/RdvTempoRepository.php @@ -0,0 +1,82 @@ + + * + * @method RdvTempo|null find($id, $lockMode = null, $lockVersion = null) + * @method RdvTempo|null findOneBy(array $criteria, array $orderBy = null) + * @method RdvTempo[] findAll() + * @method RdvTempo[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class RdvTempoRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, RdvTempo::class); + } + + + public function RdvEncoursAdd($user, $serviceRdvReservation) + { + $this->RdvEncoursPasser(); + + $rdvTempo = new RdvTempo(); + $rdvTempo->setClient($user); + $rdvTempo->setDateAdd(new \DateTime()); + $rdvTempo->setServiceRdvReservation($serviceRdvReservation); + + $this->_em->persist($rdvTempo); + $this->_em->flush(); + + return $rdvTempo; + } + + public function RdvEncoursListId() + { + $this->RdvEncoursPasser(); + + $ListId = []; + foreach($this->findAll() as $value){ + $ListId[] = $value->getServiceRdvReservation()->getId(); + } + return $ListId; + } + + + public function RdvEncoursPasser() + { + $now = new \DateTime(); + + foreach($this->findAll() as $RdvEncour){ + $dateAdd = clone $RdvEncour->getDateAdd(); + $dateAdd->modify("+15 minutes"); + if($now > $dateAdd){ + $this->_em->remove($RdvEncour); + } + } + + $this->_em->flush(); + } + + + public function RdvEncoursDelete($serviceRdvReservation) + { + $rdvTempo = $this->findOneByBy(['serviceRdvReservation'=>$serviceRdvReservation]); + + if($rdvTempo){ + $this->_em->remove($rdvTempo); + $this->_em->flush(); + return true; + } + + return false; + + } + +} \ No newline at end of file diff --git a/src/Repository/ReservationArticleRepository.php b/src/Repository/ReservationArticleRepository.php new file mode 100644 index 0000000..b4db8bf --- /dev/null +++ b/src/Repository/ReservationArticleRepository.php @@ -0,0 +1,65 @@ + + * + * @method ReservationArticle|null find($id, $lockMode = null, $lockVersion = null) + * @method ReservationArticle|null findOneBy(array $criteria, array $orderBy = null) + * @method ReservationArticle[] findAll() + * @method ReservationArticle[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class ReservationArticleRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, ReservationArticle::class); + } + + /** + * @return ReservationArticle[] Returns an array of ReservationArticle objects + */ + public function findBySociete($societe): array + { + return $this->createQueryBuilder('r') + ->Where('r.societe = :Societe') + ->setParameter('Societe', $societe) + + ->leftjoin('r.reservationArticleValidation', 'v') + ->andWhere('v.id IS NULL') + + ->getQuery() + ->getResult() + ; + } + +// /** +// * @return ReservationArticle[] Returns an array of ReservationArticle objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('r') +// ->andWhere('r.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('r.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?ReservationArticle +// { +// return $this->createQueryBuilder('r') +// ->andWhere('r.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/ReservationArticleValidationRepository.php b/src/Repository/ReservationArticleValidationRepository.php new file mode 100644 index 0000000..d90ccec --- /dev/null +++ b/src/Repository/ReservationArticleValidationRepository.php @@ -0,0 +1,49 @@ + + * + * @method ReservationArticleValidation|null find($id, $lockMode = null, $lockVersion = null) + * @method ReservationArticleValidation|null findOneBy(array $criteria, array $orderBy = null) + * @method ReservationArticleValidation[] findAll() + * @method ReservationArticleValidation[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class ReservationArticleValidationRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, ReservationArticleValidation::class); + } + + /** + * @return ReservationArticleValidation[] Returns an array of ReservationArticleValidation objects + */ + public function findBySociete($societe): array + { + return $this->createQueryBuilder('v') + + ->innerJoin('v.reservationArticle', 'ra') + ->andWhere('ra.societe = :Societe') + ->setParameter('Societe', $societe) + //->orderBy('r.id', 'ASC') + ->getQuery() + ->getResult() + ; + } + +// public function findOneBySomeField($value): ?ReservationArticleValidation +// { +// return $this->createQueryBuilder('r') +// ->andWhere('r.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/ReservationServiceRepository.php b/src/Repository/ReservationServiceRepository.php new file mode 100644 index 0000000..20dce8c --- /dev/null +++ b/src/Repository/ReservationServiceRepository.php @@ -0,0 +1,66 @@ + + * + * @method ReservationService|null find($id, $lockMode = null, $lockVersion = null) + * @method ReservationService|null findOneBy(array $criteria, array $orderBy = null) + * @method ReservationService[] findAll() + * @method ReservationService[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class ReservationServiceRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, ReservationService::class); + } + + /** + * @return ReservationService[] Returns an array of ReservationService objects + */ + public function findBySociete($societe): array + { + return $this->createQueryBuilder('r') + ->Where('r.societe = :Societe') + ->setParameter('Societe', $societe) + + ->leftjoin('r.reservationServiceValidation', 'v') + ->andWhere('v.id IS NULL') + + ->getQuery() + ->getResult() + ; + } + + +// /** +// * @return ReservationService[] Returns an array of ReservationService objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('r') +// ->andWhere('r.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('r.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?ReservationService +// { +// return $this->createQueryBuilder('r') +// ->andWhere('r.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/ReservationServiceValidationRepository.php b/src/Repository/ReservationServiceValidationRepository.php new file mode 100644 index 0000000..9389be2 --- /dev/null +++ b/src/Repository/ReservationServiceValidationRepository.php @@ -0,0 +1,64 @@ + + * + * @method ReservationServiceValidation|null find($id, $lockMode = null, $lockVersion = null) + * @method ReservationServiceValidation|null findOneBy(array $criteria, array $orderBy = null) + * @method ReservationServiceValidation[] findAll() + * @method ReservationServiceValidation[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class ReservationServiceValidationRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, ReservationServiceValidation::class); + } + + /** + * @return ReservationServiceValidation[] Returns an array of ReservationServiceValidation objects + */ + public function findBySociete($societe): array + { + return $this->createQueryBuilder('s') + + ->innerJoin('s.reservationService', 'rs') + ->andWhere('rs.societe = :Societe') + ->setParameter('Societe', $societe) + //->orderBy('r.id', 'ASC') + ->getQuery() + ->getResult() + ; + } + +// /** +// * @return ReservationServiceValidation[] Returns an array of ReservationServiceValidation objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('r') +// ->andWhere('r.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('r.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?ReservationServiceValidation +// { +// return $this->createQueryBuilder('r') +// ->andWhere('r.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/ServiceRDVRepository.php b/src/Repository/ServiceRDVRepository.php new file mode 100644 index 0000000..2494456 --- /dev/null +++ b/src/Repository/ServiceRDVRepository.php @@ -0,0 +1,48 @@ + + * + * @method ServiceRDV|null find($id, $lockMode = null, $lockVersion = null) + * @method ServiceRDV|null findOneBy(array $criteria, array $orderBy = null) + * @method ServiceRDV[] findAll() + * @method ServiceRDV[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class ServiceRDVRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, ServiceRDV::class); + } + +// /** +// * @return ServiceRDV[] Returns an array of ServiceRDV objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('s') +// ->andWhere('s.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('s.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?ServiceRDV +// { +// return $this->createQueryBuilder('s') +// ->andWhere('s.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/ServiceRdvRepository.php b/src/Repository/ServiceRdvRepository.php new file mode 100644 index 0000000..91ce087 --- /dev/null +++ b/src/Repository/ServiceRdvRepository.php @@ -0,0 +1,48 @@ + + * + * @method ServiceRdv|null find($id, $lockMode = null, $lockVersion = null) + * @method ServiceRdv|null findOneBy(array $criteria, array $orderBy = null) + * @method ServiceRdv[] findAll() + * @method ServiceRdv[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class ServiceRdvRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, ServiceRdv::class); + } + +// /** +// * @return ServiceRdv[] Returns an array of ServiceRdv objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('s') +// ->andWhere('s.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('s.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?ServiceRdv +// { +// return $this->createQueryBuilder('s') +// ->andWhere('s.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/ServiceRdvReservationRepository.php b/src/Repository/ServiceRdvReservationRepository.php new file mode 100644 index 0000000..e82c236 --- /dev/null +++ b/src/Repository/ServiceRdvReservationRepository.php @@ -0,0 +1,48 @@ + + * + * @method ServiceRdvReservation|null find($id, $lockMode = null, $lockVersion = null) + * @method ServiceRdvReservation|null findOneBy(array $criteria, array $orderBy = null) + * @method ServiceRdvReservation[] findAll() + * @method ServiceRdvReservation[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class ServiceRdvReservationRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, ServiceRdvReservation::class); + } + +// /** +// * @return ServiceRdvReservation[] Returns an array of ServiceRdvReservation objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('s') +// ->andWhere('s.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('s.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?ServiceRdvReservation +// { +// return $this->createQueryBuilder('s') +// ->andWhere('s.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/ServiceRepository.php b/src/Repository/ServiceRepository.php new file mode 100644 index 0000000..1c280d5 --- /dev/null +++ b/src/Repository/ServiceRepository.php @@ -0,0 +1,97 @@ + + * + * @method Service|null find($id, $lockMode = null, $lockVersion = null) + * @method Service|null findOneBy(array $criteria, array $orderBy = null) + * @method Service[] findAll() + * @method Service[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class ServiceRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Service::class); + } + + /** + * @return Service[] Returns an array of Service objects + */ + public function show(): array + { + $serviceDate = $this->showLimitationByDate(); + $serviceRDV = $this->showLimitationByRDV(); + return array_merge($serviceDate, $serviceRDV); + } + + /** + * @return Service[] Returns an array of Service objects + */ + public function showLimitationByDate(): array + { + return $this->createQueryBuilder('s') + ->Where('s.active = :Active') + ->andWhere('s.limit_type = 0') + ->andWhere('s.limit_date >= :LimitDate') + ->setParameter('Active', true) + ->setParameter('LimitDate', new \DateTime()) + ->getQuery() + ->getResult() + ; + } + + + /** + * @return Service[] Returns an array of Service objects + */ + public function showLimitationByRDV(): array + { + $data = $this->createQueryBuilder('s') + ->select('S.id') + ->from(ServiceRdvReservation::class, 'R') + ->innerJoin('R.service', 'S') + ->Where('R.disponible = :Dispo')->setParameter('Dispo', true) + ->andWhere('R.dateDebut > :DateDebut')->setParameter('DateDebut', new \DateTime()) + ->groupBy('S.id') + ->getQuery() + ->getResult() + ; + $ListId = array_column($data, 'id'); + + return $this->findBy(['id'=>$ListId, 'active'=>true]); + } + + +// /** +// * @return Service[] Returns an array of Service objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('s') +// ->andWhere('s.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('s.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?Service +// { +// return $this->createQueryBuilder('s') +// ->andWhere('s.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/SocieteRepository.php b/src/Repository/SocieteRepository.php new file mode 100644 index 0000000..ddf0cb3 --- /dev/null +++ b/src/Repository/SocieteRepository.php @@ -0,0 +1,66 @@ + + * + * @method Societe|null find($id, $lockMode = null, $lockVersion = null) + * @method Societe|null findOneBy(array $criteria, array $orderBy = null) + * @method Societe[] findAll() + * @method Societe[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class SocieteRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Societe::class); + } + + public function save(Societe $entity, bool $flush = false): void + { + $this->getEntityManager()->persist($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(Societe $entity, bool $flush = false): void + { + $this->getEntityManager()->remove($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + +// /** +// * @return Societe[] Returns an array of Societe objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('s') +// ->andWhere('s.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('s.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?Societe +// { +// return $this->createQueryBuilder('s') +// ->andWhere('s.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/UserRepository.php b/src/Repository/UserRepository.php new file mode 100644 index 0000000..9b60483 --- /dev/null +++ b/src/Repository/UserRepository.php @@ -0,0 +1,83 @@ + + * + * @method User|null find($id, $lockMode = null, $lockVersion = null) + * @method User|null findOneBy(array $criteria, array $orderBy = null) + * @method User[] findAll() + * @method User[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class UserRepository extends ServiceEntityRepository implements PasswordUpgraderInterface +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, User::class); + } + + public function save(User $entity, bool $flush = false): void + { + $this->getEntityManager()->persist($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(User $entity, bool $flush = false): void + { + $this->getEntityManager()->remove($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + /** + * Used to upgrade (rehash) the user's password automatically over time. + */ + public function upgradePassword(PasswordAuthenticatedUserInterface $user, string $newHashedPassword): void + { + if (!$user instanceof User) { + throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', \get_class($user))); + } + + $user->setPassword($newHashedPassword); + + $this->save($user, true); + } + +// /** +// * @return User[] Returns an array of User objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('u') +// ->andWhere('u.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('u.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?User +// { +// return $this->createQueryBuilder('u') +// ->andWhere('u.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Security/LoginAuthenticator.php b/src/Security/LoginAuthenticator.php new file mode 100644 index 0000000..dd07c89 --- /dev/null +++ b/src/Security/LoginAuthenticator.php @@ -0,0 +1,75 @@ +em = $em; + } + + public function authenticate(Request $request): Passport + { + $email = $request->request->get('email', ''); + + $request->getSession()->set(SecurityRequestAttributes::LAST_USERNAME, $email); + + return new Passport( + new UserBadge($email), + new PasswordCredentials($request->request->get('password', '')), + [ + new CsrfTokenBadge('authenticate', $request->request->get('_csrf_token')), + ] + ); + } + + public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response + { + if ($targetPath = $this->getTargetPath($request->getSession(), $firewallName)) { + return new RedirectResponse($targetPath); + } + + $user = $token->getUser(); + $user->setLastLogin(new \DateTime()); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); + + if ($user->hasRole('ROLE_ADMIN')){ + return new RedirectResponse($this->urlGenerator->generate('backend_admin_dashboard_index')); + }elseif ($user->hasRole('ROLE_PARTNER') or $user->hasRole('ROLE_PARTNER_ADVANCED')){ + return new RedirectResponse($this->urlGenerator->generate('backend_partner_dashboard_index')); + }else{ + return new RedirectResponse($this->urlGenerator->generate('frontend_home_index')); + } + } + + protected function getLoginUrl(Request $request): string + { + return $this->urlGenerator->generate(self::LOGIN_ROUTE); + } +} diff --git a/src/Service/BackendAdmin/ServiceAnnonce.php b/src/Service/BackendAdmin/ServiceAnnonce.php new file mode 100644 index 0000000..a04be7b --- /dev/null +++ b/src/Service/BackendAdmin/ServiceAnnonce.php @@ -0,0 +1,118 @@ +positionRepository = $positionRepository; + $this->annonceRepository = $annonceRepository; + $this->ligneRepository = $ligneRepository; + $this->affichageRepository = $affichageRepository; + $this->em = $em; + } + + public function getDisponiblePosition($annonce, $id_ligne, $date, $affichages) + { + $totalLargeur = $annonce->getLargeur(); + foreach($affichages as $affichage){ + if($date == $affichage->getDateShow()){ + if($id_ligne == $affichage->getLigne()){ + $totalLargeur += $affichage->getLargeur(); + } + } + } + + if($id_ligne > 10){ + return null; + }elseif($totalLargeur > 4){ + return $this->getDisponiblePosition($annonce, ++$id_ligne, $date, $affichages); + }else{ + return $id_ligne; + } + } + + + public function getAnnoncePosition($annonce, $date_debut, $date_fin, $id_ligne) + { + $arrAffichage = []; + + $interval = new \DateInterval('P1D'); + $realEnd = new \DateTime($date_fin); + $realEnd->add($interval); + $period = new \DatePeriod(new \DateTime($date_debut), $interval, $realEnd); + + $lignes = $this->ligneRepository->findAllKeyId(); + + $affichages = $this->affichageRepository->findBetweenDate($date_debut, $date_fin); + + foreach($period as $date) { + + $ligneTrouver = $this->getDisponiblePosition($annonce, $id_ligne, $date, $affichages); + + if($ligneTrouver){ + $ligne = $lignes[$ligneTrouver]; + $prix = $ligne->getPrixByBimension($annonce->getLargeur()); + $arrAffichage[] = ['date'=>$date, 'ligne'=>$ligne, 'prix'=>$prix, 'dispo'=>true]; + }else{ + $arrAffichage[] = ['date'=>$date, 'ligne'=>null, 'prix'=>0, 'dispo'=>false]; + } + + } + + return $arrAffichage; + + } + + + +} +?> diff --git a/src/Service/BackendAdmin/ServiceService.php b/src/Service/BackendAdmin/ServiceService.php new file mode 100644 index 0000000..1eabe26 --- /dev/null +++ b/src/Service/BackendAdmin/ServiceService.php @@ -0,0 +1,47 @@ +format("Y-m-d"); + + + $Indice = array_search($date->format('D'), $excludeDay); + if(!$excludeDay || !is_numeric($Indice)){ + + $debut = new \DateTime("$dateStr $startTime"); + $tempo = new \DateTime("$dateStr $startTime"); + + $end = new \DateTime("$dateStr $endTime"); + + do{ + + $fin = clone $tempo->modify("+$duree minutes"); + + if($fin<$end){ + $range[] = ['debut'=>$debut, 'fin'=>$fin]; + } + + $debut = clone $tempo->modify("+$between minutes"); + + }while($debut < $end); + } + + } + return $range; + } + +} \ No newline at end of file diff --git a/src/Service/Frontend/ServiceHome.php b/src/Service/Frontend/ServiceHome.php new file mode 100644 index 0000000..66519b5 --- /dev/null +++ b/src/Service/Frontend/ServiceHome.php @@ -0,0 +1,221 @@ +affichageRepository = $affichageRepository; + $this->articleRepository = $articleRepository; + $this->serviceRepository = $serviceRepository; + $this->em = $em; + } + + public function show() + { + $affichages = $this->affichageRepository->findBy(['date_show'=>new \DateTime()], ["ligne"=>"ASC", "largeur"=>"DESC"]); + $articles = $this->articleRepository->show(); + $services = $this->serviceRepository->show(); + + $Art = $Ser = 0; + $LengArt = count($articles); + $LengSer = count($services); + $promos = []; + + foreach($affichages as $affichage){ + $promos[$affichage->getLigne()]['largeur'][] = $affichage->getLargeur(); + + $annonce = $affichage->getAnnonce(); + $promos[$affichage->getLigne()]['promos'][] = ['id'=>$annonce->getId(), 'img'=>$annonce->getImageHome(), 'type'=>'annonce', 'title'=>$annonce->getTitre()]; + } + + for($i=1; $i<=12; $i++){ + + $largeur = 0; + if(isset($promos[$i]['largeur'])){ + foreach($promos[$i]['largeur'] as $larg){ + $largeur += $larg; + } + } + + //(largeur=4) + if($largeur == 4){ + break; + } + + //(largeur=3) 1 + if($largeur == 3){ + $dataLarg1111 = $this->Largeur31($promos, $i, $articles, $Art, $LengArt, $services, $Ser, $LengSer); + $Art = $dataLarg1111['Art']; + $Ser = $dataLarg1111['Ser']; + $promos = $dataLarg1111['promos']; + } + + //(largeur=2) 1, 1 + if($largeur == 2){ + $dataLarg1111 = $this->Largeur211($promos, $i, $articles, $Art, $LengArt, $services, $Ser, $LengSer); + $Art = $dataLarg1111['Art']; + $Ser = $dataLarg1111['Ser']; + $promos = $dataLarg1111['promos']; + } + + + //(largeur=1) 1, 1, 1 + if($largeur == 1){ + $dataLarg1111 = $this->Largeur1111($promos, $i, $articles, $Art, $LengArt, $services, $Ser, $LengSer); + $Art = $dataLarg1111['Art']; + $Ser = $dataLarg1111['Ser']; + $promos = $dataLarg1111['promos']; + } + + //(largeur=0) 1, 1, 1, 1 + if($largeur == 0){ + $dataLarg1111 = $this->Largeur01111($promos, $i, $articles, $Art, $LengArt, $services, $Ser, $LengSer); + $Art = $dataLarg1111['Art']; + $Ser = $dataLarg1111['Ser']; + $promos = $dataLarg1111['promos']; + } + + } + + + ksort($promos); + + return $promos; + } + + + + //largeur 2, 1, 1 + public function Largeur211($promos, $start, $articles, $art, $lengArt, $services, $ser, $lengSer) + { + if( ($art<$lengArt) && (isset($articles[$art])) ){ + $promos[$start]['largeur'][] = 1; + $promos[$start]['promos'][] = ['id'=>$articles[$art]->getId(), 'img'=>$articles[$art]->getImageDefault(), 'type'=>'article', 'title'=>$articles[$art]->getTitre()]; + $art++; + }elseif( ($ser<$lengSer) && (isset($services[$ser])) ){ + $promos[$start]['largeur'][] = 1; + $promos[$start]['promos'][] = ['id'=>$services[$ser]->getId(), 'img'=>$services[$ser]->getImageDefault(), 'type'=>'service', 'title'=>$services[$ser]->getTitre()]; + $ser++; + } + + if( ($ser<$lengSer) && (isset($services[$ser])) ){ + $promos[$start]['largeur'][] = 1; + $promos[$start]['promos'][] = ['id'=>$services[$ser]->getId(), 'img'=>$services[$ser]->getImageDefault(), 'type'=>'service', 'title'=>$services[$ser]->getTitre()]; + $ser++; + }elseif( ($art<$lengArt) && (isset($articles[$art])) ){ + $promos[$start]['largeur'][] = 1; + $promos[$start]['promos'][] = ['id'=>$articles[$art]->getId(), 'img'=>$articles[$art]->getImageDefault(), 'type'=>'article', 'title'=>$articles[$art]->getTitre()]; + $art++; + } + + return ['promos'=>$promos, 'Art'=>$art, 'Ser'=>$ser]; + } + + //largeur 3, 1 + public function Largeur31($promos, $start, $articles, $art, $lengArt, $services, $ser, $lengSer) + { + if( ($art<$lengArt) && (isset($articles[$art])) ){ + $promos[$start]['largeur'][] = 1; + $promos[$start]['promos'][] = ['id'=>$articles[$art]->getId(), 'img'=>$articles[$art]->getImageDefault(), 'type'=>'article', 'title'=>$articles[$art]->getTitre()]; + $art++; + }elseif( ($ser<$lengSer) && (isset($services[$ser])) ){ + $promos[$start]['largeur'][] = 1; + $promos[$start]['promos'][] = ['id'=>$services[$ser]->getId(), 'img'=>$services[$ser]->getImageDefault(), 'type'=>'service', 'title'=>$services[$ser]->getTitre()]; + $ser++; + } + + return ['promos'=>$promos, 'Art'=>$art, 'Ser'=>$ser]; + } + + //largeur 1, 1, 1 + public function Largeur1111($promos, $start, $articles, $art, $lengArt, $services, $ser, $lengSer) + { + $l = 1; + do{ + if( ($art<$lengArt) && (isset($articles[$art])) ){ + $promos[$start]['largeur'][] = 1; + $promos[$start]['promos'][] = ['id'=>$articles[$art]->getId(), 'img'=>$articles[$art]->getImageDefault(), 'type'=>'article', 'title'=>$articles[$art]->getTitre()]; + $art++; + } + + if( ($ser<$lengSer) && (isset($services[$ser])) ){ + $promos[$start]['largeur'][] = 1; + $promos[$start]['promos'][] = ['id'=>$services[$ser]->getId(), 'img'=>$services[$ser]->getImageDefault(), 'type'=>'service', 'title'=>$services[$ser]->getTitre()]; + $ser++; + } + + $l++; + }while( ($l<=3) and (($art<$lengArt) or ($ser<$lengSer)) ); + + return ['promos'=>$promos, 'Art'=>$art, 'Ser'=>$ser]; + } + + //largeur 1, 1, 1, 1 + public function Largeur01111($promos, $start, $articles, $art, $lengArt, $services, $ser, $lengSer) + { + $l = 1; + do{ + if( ($art<$lengArt) && (isset($articles[$art])) ){ + $promos[$start]['largeur'][] = 1; + $promos[$start]['promos'][] = ['id'=>$articles[$art]->getId(), 'img'=>$articles[$art]->getImageDefault(), 'type'=>'article', 'title'=>$articles[$art]->getTitre()]; + $art++; + } + + if( ($ser<$lengSer) && (isset($services[$ser])) ){ + $promos[$start]['largeur'][] = 1; + $promos[$start]['promos'][] = ['id'=>$services[$ser]->getId(), 'img'=>$services[$ser]->getImageDefault(), 'type'=>'service', 'title'=>$services[$ser]->getTitre()]; + $ser++; + } + + $l++; + }while( ($l<=4) and (($art<$lengArt) or ($ser<$lengSer)) ); + + return ['promos'=>$promos, 'Art'=>$art, 'Ser'=>$ser]; + } + + + + +} + diff --git a/src/Service/Frontend/ServicePanier.php b/src/Service/Frontend/ServicePanier.php new file mode 100644 index 0000000..f6f382c --- /dev/null +++ b/src/Service/Frontend/ServicePanier.php @@ -0,0 +1,46 @@ +session = $requestStack->getSession(); + } + + public function clear($user) + { + $id = $user->getId(); + + $this->session->set("Panier-$id", []); + + return true; + } + + + + + + + + +} + diff --git a/src/Service/Frontend/ServiceReservation.php b/src/Service/Frontend/ServiceReservation.php new file mode 100644 index 0000000..26b452b --- /dev/null +++ b/src/Service/Frontend/ServiceReservation.php @@ -0,0 +1,44 @@ +domPdf = new DomPdf(); + $this->domPdf->setPaper('A4', 'portrait'); + + $pdfOptions = new Options(); + $pdfOptions->set('defaultFont', 'Arial'); + $pdfOptions->setTempDir('temp'); + $pdfOptions->set(['IsHtml5ParserEnabled'=> true]); + + $this->domPdf->setOptions($pdfOptions); + } + + + public function generatePdfFile($html, $fileName = "details.pdf") { + $this->domPdf->loadHtml($html); + $this->domPdf->render(); + $this->domPdf->stream($fileName, [ + 'Attachement' => true + ]); + return true; + } + +} + diff --git a/src/Service/UploaderService.php b/src/Service/UploaderService.php new file mode 100644 index 0000000..84d2457 --- /dev/null +++ b/src/Service/UploaderService.php @@ -0,0 +1,36 @@ +getClientOriginalName(), PATHINFO_FILENAME); + // this is needed to safely include the file name as part of the URL + $safeFilename = $this->slugger->slug($originalFilename); + $newFilename = $safeFilename.'-'.uniqid().'.'.$file->guessExtension(); + + // Move the file to the directory where brochures are stored + try { + $file->move( + $directoryFolder, + $newFilename + ); + } catch (FileException $e) { + dd($e->getMessage()); + } + return $newFilename; + } +} \ No newline at end of file diff --git a/symfony.lock b/symfony.lock new file mode 100755 index 0000000..20a648b --- /dev/null +++ b/symfony.lock @@ -0,0 +1,356 @@ +{ + "bw/active-menu-item-bundle": { + "version": "v1.2.0" + }, + "doctrine/deprecations": { + "version": "1.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "1.0", + "ref": "87424683adc81d7dc305eefec1fced883084aab9" + } + }, + "doctrine/doctrine-bundle": { + "version": "2.15", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "2.13", + "ref": "620b57f496f2e599a6015a9fa222c2ee0a32adcb" + }, + "files": [ + "config/packages/doctrine.yaml", + "src/Entity/.gitignore", + "src/Repository/.gitignore" + ] + }, + "doctrine/doctrine-migrations-bundle": { + "version": "3.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "3.1", + "ref": "1d01ec03c6ecbd67c3375c5478c9a423ae5d6a33" + }, + "files": [ + "config/packages/doctrine_migrations.yaml", + "migrations/.gitignore" + ] + }, + "friendsofsymfony/ckeditor-bundle": { + "version": "2.6", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "main", + "version": "2.0", + "ref": "f5ad42002183a6881962683e6d84bbb25cdfce5d" + }, + "files": [ + "config/packages/fos_ckeditor.yaml" + ] + }, + "phpunit/phpunit": { + "version": "12.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "11.1", + "ref": "c6658a60fc9d594805370eacdf542c3d6b5c0869" + }, + "files": [ + ".env.test", + "phpunit.dist.xml", + "tests/bootstrap.php", + "bin/phpunit" + ] + }, + "symfony/asset-mapper": { + "version": "7.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "6.4", + "ref": "5ad1308aa756d58f999ffbe1540d1189f5d7d14a" + }, + "files": [ + "assets/app.js", + "assets/styles/app.css", + "config/packages/asset_mapper.yaml", + "importmap.php" + ] + }, + "symfony/console": { + "version": "7.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "5.3", + "ref": "1781ff40d8a17d87cf53f8d4cf0c8346ed2bb461" + }, + "files": [ + "bin/console" + ] + }, + "symfony/debug-bundle": { + "version": "7.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "5.3", + "ref": "5aa8aa48234c8eb6dbdd7b3cd5d791485d2cec4b" + }, + "files": [ + "config/packages/debug.yaml" + ] + }, + "symfony/flex": { + "version": "2.8", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "2.4", + "ref": "52e9754527a15e2b79d9a610f98185a1fe46622a" + }, + "files": [ + ".env", + ".env.dev" + ] + }, + "symfony/form": { + "version": "7.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "7.2", + "ref": "7d86a6723f4a623f59e2bf966b6aad2fc461d36b" + }, + "files": [ + "config/packages/csrf.yaml" + ] + }, + "symfony/framework-bundle": { + "version": "7.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "7.3", + "ref": "5a1497d539f691b96afd45ae397ce5fe30beb4b9" + }, + "files": [ + "config/packages/cache.yaml", + "config/packages/framework.yaml", + "config/preload.php", + "config/routes/framework.yaml", + "config/services.yaml", + "public/index.php", + "src/Controller/.gitignore", + "src/Kernel.php", + ".editorconfig" + ] + }, + "symfony/mailer": { + "version": "7.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "4.3", + "ref": "09051cfde49476e3c12cd3a0e44289ace1c75a4f" + }, + "files": [ + "config/packages/mailer.yaml" + ] + }, + "symfony/maker-bundle": { + "version": "1.64", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "1.0", + "ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f" + } + }, + "symfony/messenger": { + "version": "7.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "6.0", + "ref": "ba1ac4e919baba5644d31b57a3284d6ba12d52ee" + }, + "files": [ + "config/packages/messenger.yaml" + ] + }, + "symfony/monolog-bundle": { + "version": "3.10", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "3.7", + "ref": "aff23899c4440dd995907613c1dd709b6f59503f" + }, + "files": [ + "config/packages/monolog.yaml" + ] + }, + "symfony/notifier": { + "version": "7.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "5.0", + "ref": "178877daf79d2dbd62129dd03612cb1a2cb407cc" + }, + "files": [ + "config/packages/notifier.yaml" + ] + }, + "symfony/property-info": { + "version": "7.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "7.3", + "ref": "dae70df71978ae9226ae915ffd5fad817f5ca1f7" + }, + "files": [ + "config/packages/property_info.yaml" + ] + }, + "symfony/routing": { + "version": "7.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "7.0", + "ref": "21b72649d5622d8f7da329ffb5afb232a023619d" + }, + "files": [ + "config/packages/routing.yaml", + "config/routes.yaml" + ] + }, + "symfony/security-bundle": { + "version": "7.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "6.4", + "ref": "2ae08430db28c8eb4476605894296c82a642028f" + }, + "files": [ + "config/packages/security.yaml", + "config/routes/security.yaml" + ] + }, + "symfony/stimulus-bundle": { + "version": "2.29", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "2.20", + "ref": "c30f782a8910ae9f12e7a1399db607d172d23da6" + }, + "files": [ + "assets/bootstrap.js", + "assets/controllers.json", + "assets/controllers/csrf_protection_controller.js", + "assets/controllers/hello_controller.js" + ] + }, + "symfony/translation": { + "version": "7.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "6.3", + "ref": "620a1b84865ceb2ba304c8f8bf2a185fbf32a843" + }, + "files": [ + "config/packages/translation.yaml", + "translations/.gitignore" + ] + }, + "symfony/twig-bundle": { + "version": "7.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "6.4", + "ref": "cab5fd2a13a45c266d45a7d9337e28dee6272877" + }, + "files": [ + "config/packages/twig.yaml", + "templates/base.html.twig" + ] + }, + "symfony/ux-turbo": { + "version": "2.29", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "2.20", + "ref": "287f7c6eb6e9b65e422d34c00795b360a787380b" + }, + "files": [ + "config/packages/ux_turbo.yaml" + ] + }, + "symfony/validator": { + "version": "7.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "7.0", + "ref": "8c1c4e28d26a124b0bb273f537ca8ce443472bfd" + }, + "files": [ + "config/packages/validator.yaml" + ] + }, + "symfony/web-profiler-bundle": { + "version": "7.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "7.3", + "ref": "a363460c1b0b4a4d0242f2ce1a843ca0f6ac9026" + }, + "files": [ + "config/packages/web_profiler.yaml", + "config/routes/web_profiler.yaml" + ] + }, + "symfony/webapp-pack": { + "version": "1.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "1.0", + "ref": "7d5c5e282f7e2c36a2c3bbb1504f78456c352407" + }, + "files": [ + "config/packages/messenger.yaml" + ] + }, + "symfony/webpack-encore-bundle": { + "version": "2.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "2.0", + "ref": "719f6110345acb6495e496601fc1b4977d7102b3" + }, + "files": [ + "assets/app.js", + "assets/styles/app.css", + "config/packages/webpack_encore.yaml", + "package.json", + "webpack.config.js" + ] + }, + "twig/extra-bundle": { + "version": "v3.21.0" + } +} diff --git a/templates/backend_admin/annonce/add_update.htm.twig b/templates/backend_admin/annonce/add_update.htm.twig new file mode 100644 index 0000000..676ce50 --- /dev/null +++ b/templates/backend_admin/annonce/add_update.htm.twig @@ -0,0 +1,146 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Annonce {% endblock %} + +{% block content %} + + +{% set titlePage = 'Ajouter' %} +{% if app.request.attributes.get('_route') == 'backend_societe_update' %} + {% set titlePage = 'Modifier' %} +{% endif %} + + + +
    +

    Annonces

    + +
    + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + +
    + +
    +
    {{ titlePage }} une nouvelle Annonce
    +
    +
    + + {{ form_start(form) }} +
    + + {{ form_errors(form) }} + {{ form_row(form._token) }} + +
    + {{ form_label(form.titre, 'Titre *', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.titre, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.titre) }} +
    +
    +
    + +
    + {{ form_label(form.categorie, 'Catégorie', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.categorie, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.categorie) }} +
    +
    +
    + + +
    + {{ form_label(form.prix_promo, 'Prix promo *', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.prix_promo, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.prix_promo) }} +
    +
    +
    + +
    + {{ form_label(form.pourcentage_reduction, 'Pourcentage reduction', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.pourcentage_reduction, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.pourcentage_reduction) }} +
    +
    +
    + + +
    + {{ form_label(form.societe, 'Société', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.societe, {'attr': {'class': 'form-control select-filter select2bs4 select-filter-speaker'}}) }} +
    + {{ form_errors(form.societe) }} +
    +
    +
    + +
    + {{ form_label(form.prix_marche, 'Prix du marché', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.prix_marche, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.prix_marche) }} +
    +
    +
    + + +
    +
    + {{ form_label(form.largeur, 'Largeur Annonce', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.largeur, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.largeur) }} +
    +
    +
    +
    + + +
    + {{ form_label(form.description, 'Déscription *', {'attr': {'class': 'form-label'}}) }} + {{ form_widget(form.description, {'attr': {'class': 'form-control'}}) }} +
    {{ form_errors(form.description) }}
    +
    + +
    + {{ form_widget(form.save, {'label': "Enregister", 'attr': {'class': 'w-90 btn btn-primary btn-lg'}}) }} + + +
    + + {{ form_end(form) }} + +
    +
    + +
    + + +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/annonce/index.html.twig b/templates/backend_admin/annonce/index.html.twig new file mode 100644 index 0000000..facca80 --- /dev/null +++ b/templates/backend_admin/annonce/index.html.twig @@ -0,0 +1,113 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Annonce {% endblock %} + +{% block content %} + +
    +

    Annonce

    + +
    + + + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + + + Ajouter une nouvelle annonce + + + + +
    + +
    +
    Liste des annonces
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% for annonce in annonces %} + + + + + + + + + + + + {% endfor %} + +
    #TitrePrix PromoRéductionDimensionSociétéActiverCompletModifier
    #TitrePrix PromoRéductionDimensionSociétéActiverCompletModifier
    {{ annonce.getId() }}{{ annonce.getTitre() }}{{ annonce.getPrixPromo() }}{{ annonce.getPourcentageReduction() }}%{{ annonce.Dimension() }}{{ annonce.getSociete().getNom() }}{% if annonce.isActive() and annonce.isComplet() %} + + {% else %} + + {% endif %} + + {% if annonce.isComplet() %} + + {% else %} + + {% endif %} + + + + + + + {% if annonce.isComplet() and not annonce.isActive() %} + + {% elseif annonce.isComplet() and annonce.isActive() %} + + {% endif %} + + +
    +
    +
    +
    +
    +{% endblock %} + + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('app_backend_annonce') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/annonce/uploder.htm.twig b/templates/backend_admin/annonce/uploder.htm.twig new file mode 100644 index 0000000..eec4290 --- /dev/null +++ b/templates/backend_admin/annonce/uploder.htm.twig @@ -0,0 +1,306 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Annonce {% endblock %} + + +{% block stylesheets %} + {{ parent() }} + {{ encore_entry_link_tags('app_backend_annonce') }} +{% endblock %} + +{% block content %} + +
    +

    Anonnce Images

    + +
    + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + +
    + +
    +
    Chargement des images d'annonce pour la page d'accueil et de recherche
    +
    + +
    + + + + + + + + + + + + + +
    +
    + {% if annonce.getImageHome() %} + pic + {% else %} + pic + {% endif %} +
    +
    +
    +
    0%
    +
    +
    +

    + Image pour la page d'accueil +

    +

    + Largeur d'image doit d'être {{ annonce.getDimensionWidth() }}px | Hauteur d'image doit d'être 240px
    +

    + + +
    +
    +
    + +
    +
    + {% if annonce.getImageSearch() %} + pic + {% else %} + pic + {% endif %} +
    +
    +
    + +
    +
    +

    + Image pour la page de recherche +

    +

    + Largeur d'image doit d'être 438px | Hauteur d'image doit d'être 240px
    +

    + + +
    +
    +
    + +
    +
    +
    + + + + + + + + +
    + +
    +
    Chargement des images d'annonce pour la page détail
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + {% if annonce.getImageDetail1() %} + pic + {% else %} + pic + {% endif %} +
    +
    +
    +
    0%
    +
    +
    +

    + Image 1 pour la page détail +

    +

    + Taille maximum de l'image 2Mo
    +

    + + +
    +
    +
    + + {#
    +
    + {% if annonce.getImageDetail2() %} + pic + {% else %} + pic + {% endif %} +
    +
    +
    +
    0%
    +
    +
    +

    + Image 2 pour la page détail +

    +

    + Taille maximum de l'image 2Mo
    +

    + + +
    +
    +
    + + {#
    +
    + {% if annonce.getImageDetail3() %} + pic + {% else %} + pic + {% endif %} +
    +
    +
    +
    0%
    +
    +
    +

    + Image 3 pour la page détail +

    +

    + Taille maximum de l'image 2Mo
    +

    + + +
    +
    +
    + + {#
    +
    + {% if annonce.getImageDetail4() %} + pic + {% else %} + pic + {% endif %} +
    +
    +
    +
    0%
    +
    +
    +

    + Image 4 pour la page détail +

    +

    + Taille maximum de l'image 2Mo
    +

    + + +
    +
    +
    + + {#
    +
    +
    +
    + + + + + + + +{% endblock %} + +{% block javascripts %} + + + {{ parent() }} + {{ encore_entry_script_tags('app_backend_annonce') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/article/add.html.twig b/templates/backend_admin/article/add.html.twig new file mode 100644 index 0000000..8de7622 --- /dev/null +++ b/templates/backend_admin/article/add.html.twig @@ -0,0 +1,180 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Article {% endblock %} + +{% block content %} + +
    +

    Article

    + +
    + + + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + +
    + +
    +
    Ajouter un article
    +
    +
    + + {{ form_start(form) }} +
    + + {{ form_errors(form) }} + {{ form_row(form._token) }} + +
    + {{ form_label(form.titre, 'Titre *', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.titre, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.titre) }} +
    +
    +
    + +
    + {{ form_label(form.categorie, 'Catégorie', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.categorie, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.categorie) }} +
    +
    +
    + + +
    + {{ form_label(form.adress, 'Adresse', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.adress, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.adress) }} +
    +
    +
    + +
    + {{ form_label(form.marque, 'Marque', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.marque, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.marque) }} +
    +
    +
    + +
    + {{ form_label(form.prix_promo, 'Prix promo *', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.prix_promo, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.prix_promo) }} +
    +
    +
    + +
    + {{ form_label(form.prix_marche, 'Prix du marché', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.prix_marche, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.prix_marche) }} +
    +
    +
    + + + +
    + {{ form_label(form.societe, 'Société *', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.societe, {'attr': {'class': 'form-control select-filter select2bs4 select-filter-speaker'}}) }} +
    + {{ form_errors(form.societe) }} +
    +
    +
    + +
    + +
    + {{ form_label(form.limit_type, 'Limitation par', {'attr': {'class': 'form-check-input'}}) }} + {% for key,child in form.limit_type %} +
    + {% if key == 0 %} + {{ form_widget(child, {'attr': {'class': 'form-check-input', 'checked':''}} ) }} + {% else %} + {{ form_widget(child, {'attr': {'class': 'form-check-input'}} ) }} + {% endif %} + {{ form_label(child) }} +
    + {% endfor %} +
    + +
    + {{ form_label(form.limit_date, 'Limitation Par Date', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.limit_date, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.limit_date) }} +
    +
    +
    + + + +
    + + +
    + {{ form_label(form.description, 'Déscription *', {'attr': {'class': 'form-label'}}) }} + {{ form_widget(form.description, {'attr': {'class': 'form-control'}}) }} +
    {{ form_errors(form.description) }}
    +
    + +
    + {{ form_widget(form.save, {'label': "Enregister", 'attr': {'class': 'w-90 btn btn-primary btn-lg'}}) }} + + +
    + + {{ form_end(form) }} + +
    +
    +
    +{% endblock %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('app_backend_article_service') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/article/detail.html.twig b/templates/backend_admin/article/detail.html.twig new file mode 100644 index 0000000..d8fba1c --- /dev/null +++ b/templates/backend_admin/article/detail.html.twig @@ -0,0 +1,173 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Article {% endblock %} + +{% block content %} + +
    +

    Article

    + +
    + + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + +
    + +
    +
    Détail article
    +
    +
    + + {{ form_start(form) }} +
    + + {{ form_errors(form) }} + {{ form_row(form._token) }} + +
    + {{ form_label(form.titre, 'Titre *', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.titre, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.titre) }} +
    +
    +
    + +
    + {{ form_label(form.categorie, 'Catégorie', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.categorie, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.categorie) }} +
    +
    +
    + + +
    + {{ form_label(form.adress, 'Adresse', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.adress, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.adress) }} +
    +
    +
    + +
    + {{ form_label(form.marque, 'Marque', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.marque, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.marque) }} +
    +
    +
    + +
    + {{ form_label(form.prix_promo, 'Prix promo *', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.prix_promo, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.prix_promo) }} +
    +
    +
    + +
    + {{ form_label(form.prix_marche, 'Prix du marché', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.prix_marche, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.prix_marche) }} +
    +
    +
    + +
    + {{ form_label(form.societe, 'Société *', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.societe, {'attr': {'class': 'form-control select-filter select2bs4 select-filter-speaker'}}) }} +
    + {{ form_errors(form.societe) }} +
    +
    +
    + +
    + +
    + {{ form_label(form.limit_type, 'Limitation par', {'attr': {'class': 'form-check-input'}}) }} + {% for key,child in form.limit_type %} +
    + {{ form_widget(child, {'attr': {'class': 'form-check-input'}} ) }} + {{ form_label(child) }} +
    + {% endfor %} +
    + + + + + +
    + + +
    + {{ form_label(form.description, 'Déscription *', {'attr': {'class': 'form-label'}}) }} + {{ form_widget(form.description, {'attr': {'class': 'form-control'}}) }} +
    {{ form_errors(form.description) }}
    +
    + +
    + {{ form_widget(form.save, {'label': "Enregister", 'attr': {'class': 'w-90 btn btn-primary btn-lg'}}) }} + + +
    + + {{ form_end(form) }} + +
    +
    +
    +{% endblock %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('app_backend_article_service') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/article/index.html.twig b/templates/backend_admin/article/index.html.twig new file mode 100644 index 0000000..b6c9bdb --- /dev/null +++ b/templates/backend_admin/article/index.html.twig @@ -0,0 +1,84 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Article {% endblock %} + +{% block content %} + +
    +

    Article

    + +
    + + + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + +
    + +
    +
    Liste des articles
    +
    +
    +
    + + + + + + + + + + + + + + {% for article in articles %} + + + + + + + + + + {% endfor %} + +
    #TitreSociétéDate AjouteLimitationActiverDétail
    {{ article.getId() }}{{ article.getTitre()}}{{ article.getSociete().getNom() }}{{ article.getDateAdd()|date("d/m/Y")}} + {% if article.getLimitType() == 0 %} + Par Date: {{ article.getLimitDate()|date("d/m/Y") }} + {% elseif article.getLimitType() == 1 %} + Par Quantité: {{ article.getLimitQuantite() }} + {% endif %} + + {% if article.isActive() %} + + {% else %} + + {% endif %} + + + + + + {% if article.isActive() %} + + {% elseif (article.isActive() == false) and (article.getImageDefault() != '') %} + + {% endif %} +
    +
    +
    +
    +
    + + +{% endblock %} diff --git a/templates/backend_admin/article/uploder.htm.twig b/templates/backend_admin/article/uploder.htm.twig new file mode 100644 index 0000000..6070363 --- /dev/null +++ b/templates/backend_admin/article/uploder.htm.twig @@ -0,0 +1,258 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Article {% endblock %} + + +{% block stylesheets %} + {{ parent() }} + {{ encore_entry_link_tags('app_backend_article_service') }} +{% endblock %} + + +{% block content %} + +
    +

    Produit Images

    + +
    + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + +
    + +
    +
    Chargement d'image par default
    +
    + +
    + + + + + + + + +
    +
    + {% if article.getImageDefault() %} + pic + {% else %} + pic + {% endif %} +
    +
    +
    +
    0%
    +
    +
    +

    + Image pour la page par default +

    +

    + Largeur d'image doit d'être 438px | Hauteur d'image doit d'être 240px
    +

    + + +
    +
    +
    + +
    +
    +
    + +
    + +
    +
    Chargement des images d'article pour la page détail
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + {% if article.getImageDetail1() %} + pic + {% else %} + pic + {% endif %} +
    +
    +
    +
    0%
    +
    +
    +

    + Image 1 pour la page détail +

    +

    + Taille maximum de l'image 2Mo
    +

    + + +
    +
    +
    + +
    +
    + {% if article.getImageDetail2() %} + pic + {% else %} + pic + {% endif %} +
    +
    +
    +
    0%
    +
    +
    +

    + Image 2 pour la page détail +

    +

    + Taille maximum de l'image 2Mo
    +

    + + +
    +
    +
    + +
    +
    + {% if article.getImageDetail3() %} + pic + {% else %} + pic + {% endif %} +
    +
    +
    +
    0%
    +
    +
    +

    + Image 3 pour la page détail +

    +

    + Taille maximum de l'image 2Mo
    +

    + + +
    +
    +
    + +
    +
    + {% if article.getImageDetail4() %} + pic + {% else %} + pic + {% endif %} +
    +
    +
    +
    0%
    +
    +
    +

    + Image 4 pour la page détail +

    +

    + Taille maximum de l'image 2Mo
    +

    + + +
    +
    +
    + +
    +
    +
    +
    + + + + + + + +{% endblock %} + +{% block javascripts %} + + + {{ parent() }} + {{ encore_entry_script_tags('app_backend_article_service') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/basic/menu.html.twig b/templates/backend_admin/basic/menu.html.twig new file mode 100644 index 0000000..152c129 --- /dev/null +++ b/templates/backend_admin/basic/menu.html.twig @@ -0,0 +1,170 @@ + + + + + \ No newline at end of file diff --git a/templates/backend_admin/basic/notice.html.twig b/templates/backend_admin/basic/notice.html.twig new file mode 100644 index 0000000..47c271a --- /dev/null +++ b/templates/backend_admin/basic/notice.html.twig @@ -0,0 +1,73 @@ +{% for notice in app.flashes('primary') %} + +
    +
    + {{ notice.title }} +
    {{ notice.message|raw }}
    +
    +
    +{% endfor %} + +{% for notice in app.flashes('success') %} +
    +
    + {{ notice.title }} +
    {{ notice.message|raw }}
    +
    +
    +{% endfor %} + +{% for notice in app.flashes('info') %} +
    + +
    + {{ notice.title }}
    + +
    {{ notice.message|raw }}
    +
    +
    +{% endfor %} + +{% for notice in app.flashes('warning') %} +
    +
    + {{ notice.title }} : {{ notice.message|raw }} +
    +
    +{% endfor %} + +{% for notice in app.flashes('danger') %} +
    +
    + {{ notice.title }} +
    {{ notice.message|raw }}
    +
    +
    +{% endfor %} + +{% for notice in app.flashes('secondary') %} +
    +
    + {{ notice.title }} +
    {{ notice.message|raw }}
    +
    +
    +{% endfor %} + +{% for notice in app.flashes('light') %} +
    +
    + {{ notice.title }} +
    {{ notice.message|raw }}
    +
    +
    +{% endfor %} + +{% for notice in app.flashes('dark') %} +
    +
    + {{ notice.title }} +
    {{ notice.message|raw }}
    +
    +
    +{% endfor %} \ No newline at end of file diff --git a/templates/backend_admin/categorie/index_categorie.html.twig b/templates/backend_admin/categorie/index_categorie.html.twig new file mode 100644 index 0000000..390e492 --- /dev/null +++ b/templates/backend_admin/categorie/index_categorie.html.twig @@ -0,0 +1,146 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Catégorie {% endblock %} + +{% block content %} + +
    +

    Catégories

    + +
    + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + {% if categorie.id is empty%} +
    +
    + Ajouter une nouvelle catégorie +
    +
    + {{ form_start(form, {'action': path('backend_admin_categorie_add'), 'method': 'POST'}) }} +
    + +
    + {{ form_label(form.nom, 'Nom Catégorie', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.nom, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.nom) }} +
    +
    +
    + +
    + {{ form_label(form.groupeCategorie, 'Nom du groupe', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.groupeCategorie, {'attr': {'class': 'form-control' }}) }} +
    + {{ form_errors(form.groupeCategorie) }} +
    +
    +
    + +
    + {{ form_widget(form.save, {'label': "Ajouter", 'attr': {'class': 'w-90 btn btn-primary '}}) }} +
    + +
    + {{ form_end(form) }} +
    +
    + {% else %} +
    +
    + Modifier une catégorie +
    +
    + {{ form_start(form, {'action': path('backend_admin_categorie_update',{'id': categorie.id}), 'method': 'POST'}) }} +
    +
    + {{ form_label(form.nom, 'Nom Catégorie', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.nom, {'attr': {'class': 'form-control', 'value':categorie.nom }}) }} +
    + {{ form_errors(form.nom) }} +
    +
    +
    + +
    + {{ form_label(form.groupeCategorie, 'Nom du groupe', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.groupeCategorie, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.groupeCategorie) }} +
    +
    +
    + +
    + {{ form_widget(form.save, {'label': "Modifier", 'attr': {'class': 'w-90 btn btn-primary '}}) }} +
    + +
    + {{ form_end(form) }} +
    +
    + {% endif %} + + +
    + +
    +
    Liste des catégories
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + {% for categorie in categories %} + + + + + + + {% endfor %} + +
    #NomNombre des annoncesModifier
    #NomNombre des annoncesModifier
    {{ categorie.id }}{{ categorie.nom }} + +
    +
    +
    +
    +
    +{% endblock %} + + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('app_backend_other') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/categorie/index_group.html.twig b/templates/backend_admin/categorie/index_group.html.twig new file mode 100644 index 0000000..791095c --- /dev/null +++ b/templates/backend_admin/categorie/index_group.html.twig @@ -0,0 +1,171 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Groupe des catégories {% endblock %} + +{% block content %} + +
    +

    Groupe des catégories

    + +
    + + + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + + {% if groupe.id is empty%} +
    +
    + Ajouter un nouveau groupe +
    +
    + + {{ form_start(form, {'action': path('backend_admin_groupe_categorie_add'), 'method': 'POST'}) }} +
    +
    + {{ form_label(form.nom, 'Nom de groupe', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.nom, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.nom) }} +
    +
    +
    + +
    + {{ form_label(form.icon_fontawesome, 'Icon fontawesome menu', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.icon_fontawesome, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.icon_fontawesome) }} +
    +
    +
    + +
    + {{ form_label(form.image, 'Image memu', {'attr': {'class': 'form-label'}}) }} + {{ form_widget(form.image, {'attr': {'class': 'form-control'}}) }} +
    {{ form_errors(form.image) }}
    +
    + +
    + {{ form_widget(form.save, {'label': "Ajouter", 'attr': {'class': 'w-90 btn btn-primary '}}) }} +
    +
    + {{ form_end(form) }} + +
    +
    + {% else %} +
    +
    + Modifier un groupe +
    +
    + {{ form_start(form, {'action': path('backend_admin_groupe_categorie_update',{'id': groupe.id}), 'method': 'POST'}) }} +
    +
    + {{ form_label(form.nom, 'Nom de groupe', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.nom, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.nom) }} +
    +
    +
    + +
    + {{ form_label(form.icon_fontawesome, 'Icon fontawesome menu', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.icon_fontawesome, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.icon_fontawesome) }} +
    +
    +
    + +
    + {{ form_label(form.image, 'Image memu', {'attr': {'class': 'form-label'}}) }} + {{ form_widget(form.image, {'attr': {'class': 'form-control'}}) }} +
    {{ form_errors(form.image) }}
    +
    + + + +
    + {{ form_widget(form.save, {'label': "Modifier", 'attr': {'class': 'w-90 btn btn-primary '}}) }} +
    +
    + {{ form_end(form) }} +
    + {% endif %} + + + +
    + +
    +
    Liste des groupes
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + {% for groupe in groupes %} + + + + + + + {% endfor %} + +
    #NomListe des catégoriesModifier
    #NomListe des catégoriesModifier
    {{ groupe.id }}{{ groupe.nom }} +
      + {% for categorie in groupe.getCategories() %} +
    • {{ categorie.getNom() }}
    • + {% endfor %} +
    +
    + +
    +
    +
    +
    +
    +{% endblock %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('app_backend_other') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/dashboard/index.html.twig b/templates/backend_admin/dashboard/index.html.twig new file mode 100644 index 0000000..5d26719 --- /dev/null +++ b/templates/backend_admin/dashboard/index.html.twig @@ -0,0 +1,170 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Dashboard {% endblock %} + +{% block content %} + + +
    +

    Dashboard

    + +
    + +
    + +
    +
    +
    +
    +
    +
    + Nombre des inscrits
    +
    40.000
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + Nombre des visiteurs
    +
    215
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    Nombre des annonces
    +
    +
    +
    50
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + Nombre des Commandes
    +
    18
    +
    +
    + +
    +
    +
    +
    +
    +
    + + + +
    + +
    +
    + +
    +
    Nombre d’inscrits au site
    + +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    les commandes passé
    + +
    + +
    +
    + +
    +
    + + Total Commandes + + + Commander + + + Annuler + +
    +
    +
    +
    +
    + +{% endblock %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('app_backend_dashboard') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/demo/animation.html.twig b/templates/backend_admin/demo/animation.html.twig new file mode 100644 index 0000000..517b32b --- /dev/null +++ b/templates/backend_admin/demo/animation.html.twig @@ -0,0 +1,519 @@ + + + + + {% block title %}utilities-animation!{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_backend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_backend') }} + {% endblock %} + + + + {% block body %} + + + + +
    + + + + + + +
    + + +
    + + + + + + +
    + + +

    Animation Utilities

    +

    Bootstrap's default utility classes can be found on the official Bootstrap Documentation page. The custom utilities + below were created to extend this theme past the default utility classes built into Bootstrap's + framework.

    + + +
    + + +
    + +
    +
    +
    Grow In Animation Utilty
    +
    +
    +
    + .animated--grow-in +
    +
    Navbar Dropdown Example:
    + +

    Note: This utility animates the CSS transform property, + meaning it will override any existing transforms on an element being animated! + In this theme, the grow in animation is only being used on dropdowns within the + navbar.

    +
    +
    + +
    + + +
    + +
    +
    +
    Fade In Animation Utilty
    +
    +
    +
    + .animated--fade-in +
    +
    Navbar Dropdown Example:
    + +
    Dropdown Button Example:
    + +

    Note: This utility animates the CSS opacity property, meaning + it will override any existing opacity on an element being animated!

    +
    +
    + +
    + +
    + +
    + + +
    + + + +
    +
    + +
    +
    + + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + {% endblock %} + + diff --git a/templates/backend_admin/demo/authentication.html.twig b/templates/backend_admin/demo/authentication.html.twig new file mode 100644 index 0000000..e9a54c5 --- /dev/null +++ b/templates/backend_admin/demo/authentication.html.twig @@ -0,0 +1,76 @@ + + + + + {% block title %}Welcome!{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_backend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_backend') }} + {% endblock %} + + + + {% block body %} + + + +
    + + +
    + +
    + + +
    + +
    +
    +
    +

    Connexion

    +

    connexion a votre compte admin

    +
    +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + +
    +
    + +
    + +
    + + + + {% endblock %} + + diff --git a/templates/backend_admin/demo/bootstrap.html.twig b/templates/backend_admin/demo/bootstrap.html.twig new file mode 100644 index 0000000..56c9edc --- /dev/null +++ b/templates/backend_admin/demo/bootstrap.html.twig @@ -0,0 +1,282 @@ + +{% extends 'base_backend_admin.html.twig' %} + +{% block title %}Hello HomeController! +{% endblock %} + +{% block body %} +
    + +
    +
    +

    Checkout form

    +

    Below is an example form built entirely with Bootstrap’s form controls. Each required form group has a validation state that can be triggered by attempting to submit the form without completing it.

    +
    + +
    +
    +

    + Your cart + 3 +

    +
      +
    • +
      +
      Product name
      + Brief description +
      + $12 +
    • +
    • +
      +
      Second product
      + Brief description +
      + $8 +
    • +
    • +
      +
      Third item
      + Brief description +
      + $5 +
    • +
    • +
      +
      Promo code
      + EXAMPLECODE +
      + −$5 +
    • +
    • + Total (USD) + $20 +
    • +
    + +
    +
    + + +
    +
    +
    +
    +

    Billing address

    +
    +
    +
    + + +
    + Valid first name is required. +
    +
    + +
    + + +
    + Valid last name is required. +
    +
    + +
    + +
    + @ + +
    + Your username is required. +
    +
    +
    + +
    + + +
    + Please enter a valid email address for shipping updates. +
    +
    + +
    + + +
    + Please enter your shipping address. +
    +
    + +
    + + +
    + +
    + + +
    + Please select a valid country. +
    +
    + +
    + + +
    + Please provide a valid state. +
    +
    + +
    + + +
    + Zip code required. +
    +
    +
    + +
    + +
    + + +
    + +
    + + +
    + +
    + +

    Payment

    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + + + Full name as displayed on card +
    + Name on card is required +
    +
    + +
    + + +
    + Credit card number is required +
    +
    + +
    + + +
    + Expiration date required +
    +
    + +
    + + +
    + Security code required +
    +
    +
    + +
    + + +
    +
    +
    +
    + + +
    + +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/demo/border.html.twig b/templates/backend_admin/demo/border.html.twig new file mode 100644 index 0000000..a924ca8 --- /dev/null +++ b/templates/backend_admin/demo/border.html.twig @@ -0,0 +1,522 @@ + + + + + {% block title %}utilities-border !{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_backend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_backend') }} + {% endblock %} + + + + {% block body %} + + + +
    + + + + + + +
    + + +
    + + + + + + +
    + + +

    Border Utilities

    +

    Bootstrap's default utility classes can be found on the official Bootstrap Documentation page. The custom utilities + below were created to extend this theme past the default utility classes built into Bootstrap's + framework.

    + + +
    + + +
    + +
    +
    + .border-left-primary +
    +
    + +
    +
    + .border-left-secondary +
    +
    + +
    +
    + .border-left-success +
    +
    + +
    +
    + .border-left-info +
    +
    + +
    +
    + .border-left-warning +
    +
    + +
    +
    + .border-left-danger +
    +
    + +
    +
    + .border-left-dark +
    +
    + +
    + + +
    + +
    +
    + .border-bottom-primary +
    +
    + +
    +
    + .border-bottom-secondary +
    +
    + +
    +
    + .border-bottom-success +
    +
    + +
    +
    + .border-bottom-info +
    +
    + +
    +
    + .border-bottom-warning +
    +
    + +
    +
    + .border-bottom-danger +
    +
    + +
    +
    + .border-bottom-dark +
    +
    + +
    + +
    + +
    + + +
    + + + +
    +
    + +
    +
    + + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + {% endblock %} + + diff --git a/templates/backend_admin/demo/button.html.twig b/templates/backend_admin/demo/button.html.twig new file mode 100644 index 0000000..48716d8 --- /dev/null +++ b/templates/backend_admin/demo/button.html.twig @@ -0,0 +1,582 @@ + + + + + {% block title %}Button{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_backend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_backend') }} + {% endblock %} + + + {% block body %} + + + +
    + + + + + + +
    + + +
    + + + + + + +
    + + +

    Buttons

    + +
    + +
    + + +
    +
    +
    Circle Buttons
    +
    +
    +

    Use Font Awesome Icons (included with this theme package) along with the circle + buttons as shown in the examples below!

    + +
    + .btn-circle +
    + + + + + + + + + + + + + + + + +
    + .btn-circle .btn-sm +
    + + + + + + + + + + + + + + + + +
    + .btn-circle .btn-lg +
    + + + + + + + + + + + + + + + +
    +
    + + +
    +
    +
    Brand Buttons
    +
    +
    +

    Google and Facebook buttons are available featuring each company's respective + brand color. They are used on the user login and registration pages.

    +

    You can create more custom buttons by adding a new color variable in the + _variables.scss file and then using the Bootstrap button variant + mixin to create a new style, as demonstrated in the _buttons.scss + file.

    + + .btn-google + .btn-facebook + +
    +
    + +
    + +
    + +
    +
    +
    Split Buttons with Icon
    +
    +
    +

    Works with any button colors, just use the .btn-icon-split class and + the markup in the examples below. The examples below also use the + .text-white-50 helper class on the icons for additional styling, + but it is not required.

    + + + + + Split Button Primary + +
    + + + + + Split Button Success + +
    + + + + + Split Button Info + +
    + + + + + Split Button Warning + +
    + + + + + Split Button Danger + +
    + + + + + Split Button Secondary + +
    + + + + + Split Button Light + +
    +

    Also works with small and large button classes!

    + + + + + Split Button Small + +
    + + + + + Split Button Large + +
    +
    + +
    + +
    + +
    + + +
    + + + +
    +
    + +
    +
    + + +
    + + +
    + + + + + + + + + + + + {% endblock %} + + diff --git a/templates/backend_admin/demo/cards.html.twig b/templates/backend_admin/demo/cards.html.twig new file mode 100644 index 0000000..4ca647d --- /dev/null +++ b/templates/backend_admin/demo/cards.html.twig @@ -0,0 +1,586 @@ + + + + + {% block title %}Cards{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_backend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_backend') }} + {% endblock %} + + + {% block body %} + + + +
    + + + + + + +
    + + +
    + + + + + +
    + + +
    +

    Cards

    +
    + +
    + + +
    +
    +
    +
    +
    +
    + Earnings (Monthly)
    +
    $40,000
    +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + Earnings (Annual)
    +
    $215,000
    +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    Tasks +
    +
    +
    +
    50%
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + Pending Requests
    +
    18
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    + +
    + + +
    +
    + Default Card Example +
    +
    + This card uses Bootstrap's default styling with no utility classes added. Global + styles are the only things modifying the look and feel of this default card example. +
    +
    + + +
    +
    +
    Basic Card Example
    +
    +
    + The styling for this basic card example is created by using default Bootstrap + utility classes. By using utility classes, the style of the card component can be + easily modified with no need for any custom CSS! +
    +
    + +
    + +
    + + +
    + +
    +
    Dropdown Card Example
    + +
    + +
    + Dropdown menus can be placed in the card header in order to extend the functionality + of a basic card. In this dropdown card example, the Font Awesome vertical ellipsis + icon in the card header can be clicked on in order to toggle a dropdown menu. +
    +
    + + +
    + + +
    Collapsable Card Example
    +
    + +
    +
    + This is a collapsable card example using Bootstrap's built in collapse + functionality. Click on the card header to see the card body + collapse and expand! +
    +
    +
    + +
    + +
    + +
    + + +
    + + + +
    +
    + +
    +
    + + +
    + + +
    + + +
    + + + + + + + + + + + + + + {% endblock %} + + diff --git a/templates/backend_admin/demo/charts.html.twig b/templates/backend_admin/demo/charts.html.twig new file mode 100644 index 0000000..dc92545 --- /dev/null +++ b/templates/backend_admin/demo/charts.html.twig @@ -0,0 +1,471 @@ + + + + + {% block title %}Welcome!{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_backend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_backend') }} + {% endblock %} + + + + {% block body %} + + + + +
    + + + + + + +
    + + +
    + + + + + + +
    + + +

    Charts

    +

    Chart.js is a third party plugin that is used to generate the charts in this theme. + The charts below have been customized - for further customization options, please visit the official Chart.js + documentation.

    + + +
    + +
    + + +
    +
    +
    Area Chart
    +
    +
    +
    + +
    +
    + Styling for the area chart can be found in the + /js/demo/chart-area-demo.js file. +
    +
    + + +
    +
    +
    Bar Chart
    +
    +
    +
    + +
    +
    + Styling for the bar chart can be found in the + /js/demo/chart-bar-demo.js file. +
    +
    + +
    + + +
    +
    + +
    +
    Donut Chart
    +
    + +
    +
    + +
    +
    + Styling for the donut chart can be found in the + /js/demo/chart-pie-demo.js file. +
    +
    +
    +
    + +
    + + +
    + + + +
    +
    + +
    +
    + + +
    + + +
    + + + + + + + + + + + + + + {% endblock %} + + diff --git a/templates/backend_admin/demo/color.html.twig b/templates/backend_admin/demo/color.html.twig new file mode 100644 index 0000000..ed35826 --- /dev/null +++ b/templates/backend_admin/demo/color.html.twig @@ -0,0 +1,500 @@ + + + + + {% block title %}utilities-color !{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_backend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_backend') }} + {% endblock %} + + + + {% block body %} + + + + +
    + + + + + + +
    + + +
    + + + + + + +
    + + +

    Color Utilities

    +

    Bootstrap's default utility classes can be found on the official Bootstrap Documentation page. The custom utilities + below were created to extend this theme past the default utility classes built into Bootstrap's + framework.

    + + +
    + + +
    + + +
    +
    +
    Custom Text Color Utilities
    +
    +
    +

    .text-gray-100

    +

    .text-gray-200

    +

    .text-gray-300

    +

    .text-gray-400

    +

    .text-gray-500

    +

    .text-gray-600

    +

    .text-gray-700

    +

    .text-gray-800

    +

    .text-gray-900

    +
    +
    + + +
    +
    +
    Custom Font Size Utilities
    +
    +
    +

    .text-xs

    +

    .text-lg

    +
    +
    + +
    + + +
    + + +
    +
    +
    Custom Background Gradient Utilities +
    +
    +
    +
    .bg-gradient-primary
    +
    .bg-gradient-secondary
    +
    .bg-gradient-success
    +
    .bg-gradient-info
    +
    .bg-gradient-warning
    +
    .bg-gradient-danger
    +
    .bg-gradient-light
    +
    .bg-gradient-dark
    +
    +
    + +
    + + +
    + + +
    +
    +
    Custom Grayscale Background Utilities +
    +
    +
    +
    .bg-gray-100
    +
    .bg-gray-200
    +
    .bg-gray-300
    +
    .bg-gray-400
    +
    .bg-gray-500
    +
    .bg-gray-600
    +
    .bg-gray-700
    +
    .bg-gray-800
    +
    .bg-gray-900
    +
    +
    +
    + +
    + +
    + + +
    + + + +
    +
    + +
    +
    + + +
    + + +
    + + + + + + + + + + + + + {% endblock %} + + + + diff --git a/templates/backend_admin/demo/datatable.html.twig b/templates/backend_admin/demo/datatable.html.twig new file mode 100644 index 0000000..8040efc --- /dev/null +++ b/templates/backend_admin/demo/datatable.html.twig @@ -0,0 +1,902 @@ + + + + + {% block title %}Data Table{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_backend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_backend') }} + {% endblock %} + + + {% block body %} + + + +
    + + + + + + +
    + + +
    + + + + + + +
    + + +

    Tables

    +

    DataTables is a third party plugin that is used to generate the demo table below. + For more information about DataTables, please visit the official DataTables documentation.

    + + +
    +
    +
    DataTables Example
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NamePositionOfficeAgeStart dateSalary
    NamePositionOfficeAgeStart dateSalary
    Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
    Garrett WintersAccountantTokyo632011/07/25$170,750
    Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
    Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
    Airi SatouAccountantTokyo332008/11/28$162,700
    Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
    Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
    Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
    Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
    Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
    Jena GainesOffice ManagerLondon302008/12/19$90,560
    Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
    Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
    Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
    Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
    Michael SilvaMarketing DesignerLondon662012/11/27$198,500
    Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
    Gloria LittleSystems AdministratorNew York592009/04/10$237,500
    Bradley GreerSoftware EngineerLondon412012/10/13$132,000
    Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
    Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
    Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
    Caesar VancePre-Sales SupportNew York212011/12/12$106,450
    Doris WilderSales AssistantSidney232010/09/20$85,600
    Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
    Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
    Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
    Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
    Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
    Shou ItouRegional MarketingTokyo202011/08/14$163,000
    Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
    Suki BurksDeveloperLondon532009/10/22$114,500
    Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
    Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
    Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
    Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
    Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
    Hope FuentesSecretarySan Francisco412010/02/12$109,850
    Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
    Timothy MooneyOffice ManagerLondon372008/12/11$136,200
    Jackson BradshawDirectorNew York652008/09/26$645,750
    Olivia LiangSupport EngineerSingapore642011/02/03$234,500
    Bruno NashSoftware EngineerLondon382011/05/03$163,500
    Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
    Thor WaltonDeveloperNew York612013/08/11$98,540
    Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
    Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
    Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
    Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
    Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
    Cara StevensSales AssistantNew York462011/12/06$145,600
    Hermione ButlerRegional DirectorLondon472011/03/21$356,250
    Lael GreerSystems AdministratorLondon212009/02/27$103,500
    Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
    Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
    Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
    Donna SniderCustomer SupportNew York272011/01/25$112,000
    +
    +
    +
    + +
    + + +
    + + + +
    +
    + +
    +
    + + +
    + + +
    + + + + + + + + + + + {% endblock %} + + diff --git a/templates/backend_admin/demo/index.html.twig b/templates/backend_admin/demo/index.html.twig new file mode 100644 index 0000000..147aae3 --- /dev/null +++ b/templates/backend_admin/demo/index.html.twig @@ -0,0 +1,742 @@ + + + + + {% block title %}Welcome!{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_backend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_backend') }} + {% endblock %} + + + {% block body %} + + + +
    + + + + + + +
    + + +
    + + + + + + +
    + + +
    +

    Dashboard

    + Generate Report +
    + + +
    + + +
    +
    +
    +
    +
    +
    + Earnings (Monthly)
    +
    $40,000
    +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + Earnings (Annual)
    +
    $215,000
    +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    Tasks +
    +
    +
    +
    50%
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + Pending Requests
    +
    18
    +
    +
    + +
    +
    +
    +
    +
    +
    + + + +
    + + +
    +
    + +
    +
    Earnings Overview
    + +
    + +
    +
    + +
    +
    +
    +
    + + +
    +
    + +
    +
    Revenue Sources
    + +
    + +
    +
    + +
    +
    + + Direct + + + Social + + + Referral + +
    +
    +
    +
    +
    + + +
    + + +
    + + +
    +
    +
    Projects
    +
    +
    +

    Server Migration 20%

    +
    +
    +
    +

    Sales Tracking 40%

    +
    +
    +
    +

    Customer Database 60%

    +
    +
    +
    +

    Payout Details 80%

    +
    +
    +
    +

    Account Setup Complete!

    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + Primary +
    #4e73df
    +
    +
    +
    +
    +
    +
    + Success +
    #1cc88a
    +
    +
    +
    +
    +
    +
    + Info +
    #36b9cc
    +
    +
    +
    +
    +
    +
    + Warning +
    #f6c23e
    +
    +
    +
    +
    +
    +
    + Danger +
    #e74a3b
    +
    +
    +
    +
    +
    +
    + Secondary +
    #858796
    +
    +
    +
    +
    +
    +
    + Light +
    #f8f9fc
    +
    +
    +
    +
    +
    +
    + Dark +
    #5a5c69
    +
    +
    +
    +
    + +
    + +
    + + +
    +
    +
    Illustrations
    +
    +
    +
    + ... +
    +

    Add some quality, svg illustrations to your project courtesy of unDraw, a + constantly updated collection of beautiful svg images that you can use + completely free and without attribution!

    + Browse Illustrations on + unDraw → +
    +
    + + +
    +
    +
    Development Approach
    +
    +
    +

    SB Admin 2 makes extensive use of Bootstrap 4 utility classes in order to reduce + CSS bloat and poor page performance. Custom CSS classes are used to create + custom components and custom utility classes.

    +

    Before working with this theme, you should become familiar with the + Bootstrap framework, especially the utility classes.

    +
    +
    + +
    +
    + +
    + + +
    + + + +
    +
    + +
    +
    + + +
    + + +
    + + + + + + + + + + + {% endblock %} + + + diff --git a/templates/backend_admin/demo/index1.html.twig b/templates/backend_admin/demo/index1.html.twig new file mode 100644 index 0000000..600a455 --- /dev/null +++ b/templates/backend_admin/demo/index1.html.twig @@ -0,0 +1,3772 @@ + + + + + + + + + + + + + Marazzo premium HTML5 & CSS3 Template + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    +
    + + + +
    + + +
    + +
    +
    + +
    + +
    + + +
    +
    +
    +
    + + + +
    + + +
    + + +
    +
    +
    + + +
    +
    +
    + +
    + + +
    + + + + + +
    + +
    + + +
    + + +
    + + + +
    +
    + + +
    + + +
    + + + +
    + + +
    +
    +
    + + + + + + +
    + + +
    + + +
    + + + + + +
    +
    +

    New Products

    + + +
    +
    +
    +
    + + +
    + +
    + + +
    +
    + + +
    + +
    + + +
    +
    + + +
    + +
    + + +
    +
    + + +
    + +
    + + +
    + +
    + + + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    + + +
    +
    +
    +
    + +
    + +
    + +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +

    Amazing Sunglasses
    + Get 40% off on selected items

    +
    +
    +
    +
    NEW
    +
    + +
    + +
    + +
    +
    +
    + + + +
    + +
    + +
    + +
    + + + + + + + + + +
    +

    Latest form Blog

    +
    + + +
    + +
    + + + + +
    +

    Featured Products

    + + +
    + + + +
    + + +
    + + + + + +
    + +
    + + + +
    +
    +
      +
    • +
      +
      +
      We ship worldwide
      +
      +
    • +
    • +
      +
      +
      call + +1 800 789 0000
      +
      +
    • +
    • +
      +
      +
      Money Back Guarantee
      +
      +
    • +
    • +
      +
      +
      30 days return
      +
      +
    • + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/backend_admin/demo/other.html.twig b/templates/backend_admin/demo/other.html.twig new file mode 100644 index 0000000..b7d0515 --- /dev/null +++ b/templates/backend_admin/demo/other.html.twig @@ -0,0 +1,492 @@ + + + + + {% block title %}other!{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_backend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_backend') }} + {% endblock %} + + + + {% block body %} + + + + +
    + + + + + + +
    + + +
    + + + + + + +
    + + +

    Other Utilities

    +

    Bootstrap's default utility classes can be found on the official Bootstrap Documentation page. The custom utilities + below were created to extend this theme past the default utility classes built into Bootstrap's + framework.

    + + +
    + +
    + + +
    +
    +
    Overflow Hidden Utilty
    +
    +
    + Use .o-hidden to set the overflow property of any element to hidden. +
    +
    + + +
    +
    +
    Progress Small Utility
    +
    +
    +
    Normal Progress Bar
    +
    +
    +
    +
    Small Progress Bar
    +
    +
    +
    + Use the .progress-sm class along with .progress +
    +
    + + +
    +
    +
    Dropdown - No Arrow
    +
    +
    + + Add the .no-arrow class alongside the .dropdown +
    +
    + +
    + +
    + + +
    +
    +
    Rotation Utilities
    +
    +
    +
    .rotate-15 +
    +
    +
    .rotate-n-15 +
    +
    +
    + +
    + +
    + +
    + + +
    + + + +
    +
    + +
    +
    + + +
    + + +
    + + + + + + + + + + + + diff --git a/templates/backend_admin/demo/page404.html.twig b/templates/backend_admin/demo/page404.html.twig new file mode 100644 index 0000000..b7d89d8 --- /dev/null +++ b/templates/backend_admin/demo/page404.html.twig @@ -0,0 +1,413 @@ + + + + + {% block title %}Page 404{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_backend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_backend') }} + {% endblock %} + + + + {% block body %} + + + +
    + + + + + + + + + +
    + + + + + + + + + + + {% endblock %} + + diff --git a/templates/backend_admin/demo/test.html.twig b/templates/backend_admin/demo/test.html.twig new file mode 100644 index 0000000..bca2145 --- /dev/null +++ b/templates/backend_admin/demo/test.html.twig @@ -0,0 +1,128 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %}Hello Backend!{% endblock %} + +{% block body %} + + + +
    +
    + +
    +

    Left Sidebar with Submenus

    +

    + An example 2-level sidebar with collasible menu items. The menu functions like an "accordion" where only a single + menu is be open at a time. While the sidebar itself is not toggle-able, it does responsively shrink in width on smaller screens.

    +
      +
    • Responsive
      shrinks in width, hides text labels and collapses to icons only on mobile
    • +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +

    +
    +
    + + + + +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/partenaire/add.html.twig b/templates/backend_admin/partenaire/add.html.twig new file mode 100644 index 0000000..375d842 --- /dev/null +++ b/templates/backend_admin/partenaire/add.html.twig @@ -0,0 +1,62 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Partenaire {% endblock %} + +{% block content %} + +
    +

    Partenaire

    + +
    + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + +
    + +
    +
    Ajouter un nouveau partenaire
    +
    +
    +
    + {{ form_start(form) }} + {{ form_errors(form) }} + +
    + {{ form_label(form.societe, 'Société', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.societe, {'attr': {'class': 'form-control select-filter select2bs4 select-filter-speaker'}}) }} +
    + {{ form_errors(form.societe) }} +
    +
    +
    + +
    + {{ form_label(form.partenaire, 'Partenaire', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.partenaire, {'attr': {'class': 'form-control select-filter select2bs4 select-filter-speaker'}}) }} +
    + {{ form_errors(form.partenaire) }} +
    +
    +
    + +
    + {{ form_widget(form.save, {'label': "Ajouter", 'attr': {'class': 'w-90 btn btn-primary '}}) }} +
    + + {{ form_end(form) }} +
    +
    +
    +
    +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/partenaire/index.html.twig b/templates/backend_admin/partenaire/index.html.twig new file mode 100644 index 0000000..189b341 --- /dev/null +++ b/templates/backend_admin/partenaire/index.html.twig @@ -0,0 +1,110 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Partenaire {% endblock %} + +{% block content %} + +
    +

    Partenaire

    + +
    + + + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + + + Ajouter un nouveau partenaire + + + +
    + +
    +
    Liste des partenaires
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% for partenaire in partenaires %} + {% set user = partenaire.getPartenaire() %} + {% set societe = partenaire.getSociete() %} + {% set admin = partenaire.getAdmin() %} + + + + + + + + + + + + + + {% endfor %} + +
    #NomPrénomEmailTéléRoleSociéteDate AjouteActiver ParEtatGestion
    #NomPrénomEmailTéléRoleSociéteDate AjouteActiver ParEtatGestion
    {{ partenaire.id }}{{ user.getFirstname() }}{{ user.getLastname() }}{{ user.getEmail() }}{{ user.getPhoneNumber() }}{{ partenaire.role }}{{ societe.getNom() }}{{ partenaire.getDateAdd()|date("d/m/Y H:i") }}{% if admin is not null %} {{ admin.getFullName() }}{% endif %} + {% if partenaire.isActive() %} +
    + {% else %} +
    + {% endif %} +
    + + {% if partenaire.isActive() %} + + {% else %} + + {% endif %} + +
    +
    +
    +
    +
    +{% endblock %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('app_backend_other') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/position_affichage/creer.html.twig b/templates/backend_admin/position_affichage/creer.html.twig new file mode 100644 index 0000000..1888a03 --- /dev/null +++ b/templates/backend_admin/position_affichage/creer.html.twig @@ -0,0 +1,150 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Position {% endblock %} + +{% block content %} + + +
    +

    Position et affichage

    + +
    + + + +
    +
    + +
    +
    Afficher l'annonce sur la page d'acceuil
    +
    + +
    + + + +
    +
    + +
    + +
    + + +
    + Please select a valid country. +
    +
    +
    + + + + + + + + + + + + + + +
    + + + +
    + + +
    + +
    + +
    + +
    + + + + +
    + +
    +
    +
    + +{% endblock %} + +{% block javascripts %} + + + {{ parent() }} + {{ encore_entry_script_tags('app_backend_annonce') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/position_affichage/detail.html.twig b/templates/backend_admin/position_affichage/detail.html.twig new file mode 100644 index 0000000..22688a6 --- /dev/null +++ b/templates/backend_admin/position_affichage/detail.html.twig @@ -0,0 +1,176 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Position {% endblock %} + +{% block content %} + +
    +

    Position et affichage

    + +
    + +{% include 'backend_admin/basic/notice.html.twig' %} + + +
    +
    + +
    +
    Afficher l'annonce sur la page d'acceuil
    +
    + +
    + + + +
    +
    + +
    +
    +
    +
    +
    +
    + Annonce: +
    +
    {{ position.getAnnonce().getTitre() }}
    +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + Date Début +
    +
    {{ position.getDateAdd()|date("d/m/Y") }}
    +
    +
    +
    + Date Fin +
    +
    {{ position.getDateFin()|date("d/m/Y") }}
    +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + Ligne d'affichage +
    +
    {{ ligne.getRang() }}
    +
    +
    +
    + Dimension +
    +
    {{ position.getAnnonce().getDimension() }}
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + Prix Total d'annonce: +
    +
    {{ position.getTotalPrix()}} DT
    +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + Créer par: +
    +
    {{ position.getCreateBy().getFirstname() }} {{ position.getCreateBy().getLastname() }}
    +
    +
    +
    + date: +
    +
    {{ position.getDateAdd()|date("d/m/Y") }}
    +
    +
    + +
    +
    +
    +
    +
    + +
    + + +
    +
    +

    + Affichage d'annonce sur la Ligne {{ position.getLigneRange() }} + {{ position.getAffichages()|length }} Jour +

    +
    +
      + + {% for affichage in position.getAffichages() %} +
    • +
      +
      {{ affichage.getDateShow()|date("d/m/Y") }}
      +
      + Ligne {{ affichage.getLigneRange() }} + {{ affichage.getPrix() }} DT +
    • + {% endfor %} +
    +
    +
    +
    + + + +
    + +
    +
    +
    + +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/position_affichage/index.html.twig b/templates/backend_admin/position_affichage/index.html.twig new file mode 100644 index 0000000..d970344 --- /dev/null +++ b/templates/backend_admin/position_affichage/index.html.twig @@ -0,0 +1,70 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Position et Affichage {% endblock %} + +{% block content %} + +
    +

    Position et Affichage

    + +
    + + + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + + + Ajouter une nouvelle Position et Affichage + + + + +
    + +
    +
    Liste Positions et Affichages des annonces sur la page d'acceuil
    +
    +
    +
    + + + + + + + + + + + + + {% for position in positions %} + + + + + + + + + {% endfor %} + +
    #TitreLigneDate débutDate finDétail
    {{ position.getId() }}{{ position.getAnnonce().getTitre() }}{{ position.getLigneRange() }}{{ position.getDateAdd()|date("d/m/Y")}}{{ position.getDateFin()|date("d/m/Y") }} + + + +
    +
    +
    +
    +
    + + +{% endblock %} diff --git a/templates/backend_admin/service/add.html.twig b/templates/backend_admin/service/add.html.twig new file mode 100644 index 0000000..e36b5bf --- /dev/null +++ b/templates/backend_admin/service/add.html.twig @@ -0,0 +1,183 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Service {% endblock %} + +{% block content %} + +
    +

    Service

    + +
    + + + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + +
    + +
    +
    Ajouter un service
    +
    +
    + + {{ form_start(form) }} +
    + + {{ form_errors(form) }} + {{ form_row(form._token) }} + +
    + {{ form_label(form.titre, 'Titre *', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.titre, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.titre) }} +
    +
    +
    + +
    + {{ form_label(form.categorie, 'Catégorie', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.categorie, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.categorie) }} +
    +
    +
    + + +
    + {{ form_label(form.adress, 'Adresse', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.adress, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.adress) }} +
    +
    +
    + +
    + {{ form_label(form.marque, 'Marque', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.marque, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.marque) }} +
    +
    +
    + +
    + {{ form_label(form.prix_promo, 'Prix promo *', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.prix_promo, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.prix_promo) }} +
    +
    +
    + +
    + {{ form_label(form.prix_marche, 'Prix du marché', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.prix_marche, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.prix_marche) }} +
    +
    +
    + +
    + +
    + {{ form_label(form.societe, 'Société *', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.societe, {'attr': {'class': 'form-control select-filter select2bs4 select-filter-speaker'}}) }} +
    + {{ form_errors(form.societe) }} +
    +
    +
    + +
    + {{ form_label(form.duree, 'Durée du service (en minute)', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.duree, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.duree) }} +
    +
    +
    + +
    + + +
    + +
    + {{ form_label(form.limit_type, 'Limitation par', {'attr': {'class': 'form-check-input'}}) }} + {% for key,child in form.limit_type %} +
    + {% if key == 0 %} + {{ form_widget(child, {'attr': {'class': 'form-check-input', 'checked':''}} ) }} + {% else %} + {{ form_widget(child, {'attr': {'class': 'form-check-input'}} ) }} + {% endif %} + {{ form_label(child) }} +
    + {% endfor %} +
    + +
    + {{ form_label(form.limit_date, 'Limitation Par Date', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.limit_date, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.limit_date) }} +
    +
    +
    + +
    + + +
    + {{ form_label(form.description, 'Déscription *', {'attr': {'class': 'form-label'}}) }} + {{ form_widget(form.description, {'attr': {'class': 'form-control'}}) }} +
    {{ form_errors(form.description) }}
    +
    + +
    + {{ form_widget(form.save, {'label': "Enregister", 'attr': {'class': 'w-90 btn btn-primary btn-lg'}}) }} + + +
    + + {{ form_end(form) }} + +
    +
    +
    +{% endblock %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('app_backend_article_service') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/service/detail.html.twig b/templates/backend_admin/service/detail.html.twig new file mode 100644 index 0000000..ef7651c --- /dev/null +++ b/templates/backend_admin/service/detail.html.twig @@ -0,0 +1,177 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Service {% endblock %} + +{% block content %} + +
    +

    Service

    + +
    + + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + +
    + +
    +
    Détail service
    +
    +
    + + {{ form_start(form) }} +
    + + {{ form_errors(form) }} + {{ form_row(form._token) }} + +
    + {{ form_label(form.titre, 'Titre *', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.titre, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.titre) }} +
    +
    +
    + +
    + {{ form_label(form.categorie, 'Catégorie', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.categorie, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.categorie) }} +
    +
    +
    + + +
    + {{ form_label(form.adress, 'Adresse', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.adress, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.adress) }} +
    +
    +
    + +
    + {{ form_label(form.marque, 'Marque', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.marque, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.marque) }} +
    +
    +
    + +
    + {{ form_label(form.prix_promo, 'Prix promo *', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.prix_promo, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.prix_promo) }} +
    +
    +
    + +
    + {{ form_label(form.prix_marche, 'Prix du marché', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.prix_marche, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.prix_marche) }} +
    +
    +
    + +
    + +
    + {{ form_label(form.societe, 'Société *', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.societe, {'attr': {'class': 'form-control select-filter select2bs4 select-filter-speaker'}}) }} +
    + {{ form_errors(form.societe) }} +
    +
    +
    + +
    + {{ form_label(form.duree, 'Durée du service (en minute)', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.duree, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.duree) }} +
    +
    +
    + +
    + +
    + +
    + {{ form_label(form.limit_type, 'Limitation par', {'attr': {'class': 'form-check-input'}}) }} + {% for key,child in form.limit_type %} +
    + {{ form_widget(child, {'attr': {'class': 'form-check-input'}} ) }} + {{ form_label(child) }} +
    + {% endfor %} +
    + + + +
    + + +
    + {{ form_label(form.description, 'Déscription *', {'attr': {'class': 'form-label'}}) }} + {{ form_widget(form.description, {'attr': {'class': 'form-control'}}) }} +
    {{ form_errors(form.description) }}
    +
    + +
    + {{ form_widget(form.save, {'label': "Enregister", 'attr': {'class': 'w-90 btn btn-primary btn-lg'}}) }} + + +
    + + {{ form_end(form) }} + +
    +
    +
    +{% endblock %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('app_backend_article_service') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/service/index.html.twig b/templates/backend_admin/service/index.html.twig new file mode 100644 index 0000000..dbac659 --- /dev/null +++ b/templates/backend_admin/service/index.html.twig @@ -0,0 +1,131 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Service {% endblock %} + +{% block content %} + +
    +

    Service

    + +
    + + + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + +
    + +
    +
    Liste des services
    +
    +
    +
    + + + + + + + + + + + + + + {% for service in services %} + + + + + + + + + + {% endfor %} + +
    #TitreSociétéDate AjouteLimitationActiverDétail
    {{ service.getId() }}{{ service.getTitre()}}{{ service.getSociete().getNom() }}{{ service.getDateAdd()|date("d/m/Y")}} + {% if service.getLimitType() == 0 %} + Par Date: {{ service.getLimitDate()|date("d/m/Y") }} + {% elseif service.getLimitType() == 1 %} + Par RDV: + + {% endif %} + + {% if service.isActive() %} + + {% else %} + + {% endif %} + + + + + + + + {% if service.isActive() %} + + {% elseif (service.isActive() == false) and (service.getImageDefault() != '') %} + + {% endif %} + + {% if service.getLimitType() == 1 %} + + + + {% endif %} + +
    +
    +
    +
    +
    + + + +{% endblock %} + +{% block javascripts %} + + {{ parent() }} + {{ encore_entry_script_tags('app_backend_article_service') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/service/uploder.htm.twig b/templates/backend_admin/service/uploder.htm.twig new file mode 100644 index 0000000..6bdaafe --- /dev/null +++ b/templates/backend_admin/service/uploder.htm.twig @@ -0,0 +1,258 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Service {% endblock %} + + +{% block stylesheets %} + {{ parent() }} + {{ encore_entry_link_tags('app_backend_article_service') }} +{% endblock %} + + +{% block content %} + +
    +

    Service Images

    + +
    + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + +
    + +
    +
    Chargement d'image par default
    +
    + +
    + + + + + + + + +
    +
    + {% if service.getImageDefault() %} + pic + {% else %} + pic + {% endif %} +
    +
    +
    +
    0%
    +
    +
    +

    + Image pour la page par default +

    +

    + Largeur d'image doit d'être 438px | Hauteur d'image doit d'être 240px
    +

    + + +
    +
    +
    + +
    +
    +
    + +
    + +
    +
    Chargement des images d'service pour la page détail
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + {% if service.getImageDetail1() %} + pic + {% else %} + pic + {% endif %} +
    +
    +
    +
    0%
    +
    +
    +

    + Image 1 pour la page détail +

    +

    + Taille maximum de l'image 2Mo
    +

    + + +
    +
    +
    + +
    +
    + {% if service.getImageDetail2() %} + pic + {% else %} + pic + {% endif %} +
    +
    +
    +
    0%
    +
    +
    +

    + Image 2 pour la page détail +

    +

    + Taille maximum de l'image 2Mo
    +

    + + +
    +
    +
    + +
    +
    + {% if service.getImageDetail3() %} + pic + {% else %} + pic + {% endif %} +
    +
    +
    +
    0%
    +
    +
    +

    + Image 3 pour la page détail +

    +

    + Taille maximum de l'image 2Mo
    +

    + + +
    +
    +
    + +
    +
    + {% if service.getImageDetail4() %} + pic + {% else %} + pic + {% endif %} +
    +
    +
    +
    0%
    +
    +
    +

    + Image 4 pour la page détail +

    +

    + Taille maximum de l'image 2Mo
    +

    + + +
    +
    +
    + +
    +
    +
    +
    + + + + + + + +{% endblock %} + +{% block javascripts %} + + + {{ parent() }} + {{ encore_entry_script_tags('app_backend_article_service') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/service_rdv/add.html.twig b/templates/backend_admin/service_rdv/add.html.twig new file mode 100644 index 0000000..63f1a02 --- /dev/null +++ b/templates/backend_admin/service_rdv/add.html.twig @@ -0,0 +1,84 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Service Rendez-vous{% endblock %} + +{% block content %} + +
    +

    Ajouter des Rendez-vous

    + +
    + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + +
    + +
    +
    Ajouter des Rendez-vous
    +
    +
    + +
    + +
    +
    Durée du service: {{ service.getDuree() }}mm
    +
    Exclure les jours:
    +
    Lundi
    +
    Mardi
    +
    Mercredi
    +
    Jeudi
    +
    Vendredi
    +
    Samedi
    +
    Dimanche
    +
    +
    +
    Date début:
    +
    Date Fin:
    +
    + +
    +
    Heur début:
    +
    Heur Fin:
    +
    + +
    +
    + Durée Entre les Rendez-Vous: +
    + + minute +
    +
    +
    + +
    +
    + +
    +
    + +
    + +
    +
    +
    +{% endblock %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('app_backend_article_service') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/service_rdv/show_new_rdv.html.twig b/templates/backend_admin/service_rdv/show_new_rdv.html.twig new file mode 100644 index 0000000..eda4295 --- /dev/null +++ b/templates/backend_admin/service_rdv/show_new_rdv.html.twig @@ -0,0 +1,102 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Paramètre Rendez-Vous{% endblock %} + +{% block content %} + +
    +

    Paramètre Rendez-Vous

    + +
    + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + +
    + +
    +
    Paramètre Rendez-vous
    +
    +
    + +
    +
    Date début: {{ startDate }}
    +
    Date Fin: {{ endDate }}
    +
    Durée du service: {{ duree }}minute
    +
    + +
    +
    Heur début: {{ startTime }}
    +
    Heur Fin: {{ endTime }}
    +
    Durée Entre les Rendez-Vous: {{ between }}minute
    +
    + +
    +
    + Exclure les jours: + {% for exclude in excludeDay %} + {% if exclude == 'Sun'%} dimanche, {% endif %} + {% if exclude == 'Mon'%} lundi, {% endif %} + {% if exclude == 'Tue'%} mardi, {% endif %} + {% if exclude == 'Wed'%} mercredi, {% endif %} + {% if exclude == 'Thu'%} jeudi, {% endif %} + {% if exclude == 'Fri'%} verdredi, {% endif %} + {% if exclude == 'Sat'%} samedi, {% endif %} + {% endfor %} +
    +
    + +
    +
    + + +
    +
    +
    Liste des Rendez-vous
    +
    +
    + + + {% for key,rendezVous in arrRendezVous %} + + + + + {% endfor %} +
    {{ key }} +
    + {% for val in rendezVous %} +
    {{ val['debut'] }} - {{ val['fin'] }}
    + {% endfor %} +
    +
    +
    +
    + + {% if save == 'true' %} + + {% endif %} +
    +{% endblock %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('app_backend_article_service') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/societe/add_update.html.twig b/templates/backend_admin/societe/add_update.html.twig new file mode 100644 index 0000000..41532a8 --- /dev/null +++ b/templates/backend_admin/societe/add_update.html.twig @@ -0,0 +1,137 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Société {% endblock %} + +{% block content %} + +{% set titlePage = 'Ajouter' %} +{% if app.request.attributes.get('_route') == 'backend_societe_update' %} + {% set titlePage = 'Modifier' %} +{% endif %} + + + +
    +

    Sociétés

    + +
    + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + +
    + +
    +
    {{ titlePage }} une nouvelle société
    +
    +
    + + + {{ form_start(form) }} +
    + + {{ form_errors(form) }} + {{ form_row(form._token) }} + +
    + {{ form_label(form.nom, 'Nom Société', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.nom, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.nom) }} +
    +
    +
    + +
    + {{ form_label(form.immatriculation, 'Immatriculation', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.immatriculation, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.immatriculation) }} +
    +
    +
    + +
    + {{ form_label(form.email, 'Email', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.email, {'attr': {'class': 'form-control'}}) }} +
    + Your username is required. +
    +
    +
    + + +
    + {{ form_label(form.telephone, 'Téléphone', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.telephone, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.telephone) }} +
    +
    +
    + +
    + {{ form_label(form.fax, 'Fax', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.fax, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.fax) }} +
    +
    +
    + + +
    + {{ form_label(form.adresse, 'Adresse', {'attr': {'class': 'form-label'}}) }} +
    + + {{ form_widget(form.adresse, {'attr': {'class': 'form-control'}}) }} +
    + {{ form_errors(form.adresse) }} +
    +
    +
    + +
    + {{ form_label(form.photo, 'Logo', {'attr': {'class': 'form-label'}}) }} + {{ form_widget(form.photo, {'attr': {'class': 'form-control'}}) }} +
    {{ form_errors(form.photo) }}
    +
    + +
    + {{ form_label(form.description, 'Déscription', {'attr': {'class': 'form-label'}}) }} + {{ form_widget(form.description, {'attr': {'class': 'form-control'}}) }} +
    {{ form_errors(form.description) }}
    +
    + +
    + {{ form_widget(form.save, {'label': "Enregister", 'attr': {'class': 'w-90 btn btn-primary btn-lg'}}) }} + + +
    + + {{ form_end(form) }} + +
    +
    + +
    + + +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/societe/index.html.twig b/templates/backend_admin/societe/index.html.twig new file mode 100644 index 0000000..3131200 --- /dev/null +++ b/templates/backend_admin/societe/index.html.twig @@ -0,0 +1,88 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Sociéte {% endblock %} + +{% block content %} + +
    +

    Sociétés

    + +
    + + + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + + + Ajouter une nouvelle Société + + + +
    + +
    +
    Liste des sociétés
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + {% for societe in societes %} + + + + + + + + + + {% endfor %} + +
    #NomAdresseEmailTéléphonePartenairesModifier
    #NomAdresseEmailTéléphonePartenairesModifier
    {{ societe.id }}{{ societe.nom }}{{ societe.adresse }}{{ societe.email }}{{ societe.telephone }}{{ societe.getPartenaires()|length }} + + {% if societe.isActive() %} + + {% else %} + + {% endif %} +
    +
    +
    +
    +
    +{% endblock %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('app_backend_other') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_admin/user/deleted.html.twig b/templates/backend_admin/user/deleted.html.twig new file mode 100644 index 0000000..bde8f0c --- /dev/null +++ b/templates/backend_admin/user/deleted.html.twig @@ -0,0 +1,86 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Utilisateur {% endblock %} + +{% block content %} + +
    +

    Utilisateurs

    + +
    + + + + + +
    + + +
    +
    +
    Liste des utilisateurs inactifs
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% for user in users %} + + + + + + + + + + + + + {% endfor %} + +
    #PrénomNomSexeEmailTéléphoneNaissanceInscriptionAction
    #PrénomNomGenderEmailTéléphoneNaissanceInscriptionAction
    {{ user.id }}{{ user.firstname }}{{ user.lastname }} + {% if user.gender == 0 %} + + {% else %} + + {% endif %} + {{ user.email }}{{ user.phoneNumber }}{{ user.birthdate|date('d/m/Y') }}{{ user.dateAdd|date('d/m/Y H:i:s') }} + +
    +
    +
    +
    +
    + + +{% endblock %} diff --git a/templates/backend_admin/user/index.html.twig b/templates/backend_admin/user/index.html.twig new file mode 100644 index 0000000..2b90aa6 --- /dev/null +++ b/templates/backend_admin/user/index.html.twig @@ -0,0 +1,91 @@ +{% extends 'base_backend_admin.html.twig' %} + +{% block title %} Utilisateur {% endblock %} + +{% block content %} + +
    +

    Utilisateurs

    + +
    + + + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + +
    +
    +
    Liste des Utilisateurs
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% for user in users %} + + + + + + + + + + + + + {% endfor %} + +
    #PrénomNomSexeEmailTéléphoneNaissanceInscriptionAction
    #PrénomNomGenderEmailTéléphoneNaissanceInscriptionAction
    {{ user.id }}{{ user.firstname }}{{ user.lastname }} + {% if user.gender == 0 %} + + {% else %} + + {% endif %} + {{ user.email }}{{ user.phoneNumber }}{{ user.birthdate|date('d/m/Y') }}{{ user.dateAdd|date('d/m/Y H:i:s') }} + + + + +
    +
    +
    +
    +
    + + +{% endblock %} diff --git a/templates/backend_partner/basic/menu.html.twig b/templates/backend_partner/basic/menu.html.twig new file mode 100644 index 0000000..373914c --- /dev/null +++ b/templates/backend_partner/basic/menu.html.twig @@ -0,0 +1,108 @@ + + + + + \ No newline at end of file diff --git a/templates/backend_partner/basic/notice.html.twig b/templates/backend_partner/basic/notice.html.twig new file mode 100644 index 0000000..2ca26f7 --- /dev/null +++ b/templates/backend_partner/basic/notice.html.twig @@ -0,0 +1,74 @@ +{% for notice in app.flashes('primary') %} + +
    +
    + {{ notice.title }} +
    {{ notice.message|raw }}
    +
    +
    +{% endfor %} + +{% for notice in app.flashes('success') %} +
    +
    + {{ notice.title }} +
    {{ notice.message|raw }}
    +
    +
    +{% endfor %} + +{% for notice in app.flashes('info') %} +
    + +
    + {{ notice.title }}
    + +
    {{ notice.message|raw }}
    +
    +
    +{% endfor %} + +{% for notice in app.flashes('warning') %} +
    +
    + {{ notice.title }} +
    {{ notice.message|raw }}
    +
    +
    +{% endfor %} + +{% for notice in app.flashes('danger') %} +
    +
    + {{ notice.title }} +
    {{ notice.message|raw }}
    +
    +
    +{% endfor %} + +{% for notice in app.flashes('secondary') %} +
    +
    + {{ notice.title }} +
    {{ notice.message|raw }}
    +
    +
    +{% endfor %} + +{% for notice in app.flashes('light') %} +
    +
    + {{ notice.title }} +
    {{ notice.message|raw }}
    +
    +
    +{% endfor %} + +{% for notice in app.flashes('dark') %} +
    +
    + {{ notice.title }} +
    {{ notice.message|raw }}
    +
    +
    +{% endfor %} \ No newline at end of file diff --git a/templates/backend_partner/dashboard/index.html.twig b/templates/backend_partner/dashboard/index.html.twig new file mode 100644 index 0000000..6a7c154 --- /dev/null +++ b/templates/backend_partner/dashboard/index.html.twig @@ -0,0 +1,170 @@ +{% extends 'base_backend_partner.html.twig' %} + +{% block title %} Dashboard {% endblock %} + +{% block content %} + + +
    +

    Dashboard

    + +
    + +
    + +
    +
    +
    +
    +
    +
    + Nombre des inscrits
    +
    40.000
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + Nombre des visiteurs
    +
    215
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    Nombre des annonces
    +
    +
    +
    50
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + Nombre des Commandes
    +
    18
    +
    +
    + +
    +
    +
    +
    +
    +
    + + + +
    + +
    +
    + +
    +
    Nombre d’inscrits au site
    + +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    les commandes passé
    + +
    + +
    +
    + +
    +
    + + Total Commandes + + + Commander + + + Annuler + +
    +
    +
    +
    +
    + +{% endblock %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('app_backend_dashboard') }} +{% endblock %} \ No newline at end of file diff --git a/templates/backend_partner/partenaire/gestion.html.twig b/templates/backend_partner/partenaire/gestion.html.twig new file mode 100644 index 0000000..e85950d --- /dev/null +++ b/templates/backend_partner/partenaire/gestion.html.twig @@ -0,0 +1,64 @@ +{% extends 'base_backend_partner.html.twig' %} + +{% block title %} Gestion des utilisateurs {% endblock %} + +{% block content %} + + +
    +

    Gestion des utilisateurs

    + +
    + + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + +
    + +
    +
    Liste des utilisateurs
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    #PrénomNomEmailTéléphoneDate AjouterAction
    #PrénomNomEmailTéléphoneDate AjouterAction
    +
    +
    +
    + +
    + + +{% endblock %} diff --git a/templates/backend_partner/reservation/encours.html.twig b/templates/backend_partner/reservation/encours.html.twig new file mode 100644 index 0000000..f68bc7e --- /dev/null +++ b/templates/backend_partner/reservation/encours.html.twig @@ -0,0 +1,68 @@ +{% extends 'base_backend_partner.html.twig' %} + +{% block title %} Réservation {% endblock %} + +{% block content %} + + +
    +

    Réservation

    + +
    + + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + +
    + +
    +
    Liste des Réservations Encours
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #ClientArticleQuantitéMontantAvance (payer en site)Reste (payer en société)Date RéglementDétail
    #ClientArticleQuantitéMontantAvance (payer en site)Reste (payer en société)Date RéglementDétail
    +
    +
    +
    + +
    + + +{% endblock %} diff --git a/templates/backend_partner/reservation/liste_encours.html.twig b/templates/backend_partner/reservation/liste_encours.html.twig new file mode 100644 index 0000000..94d784a --- /dev/null +++ b/templates/backend_partner/reservation/liste_encours.html.twig @@ -0,0 +1,74 @@ +{% extends 'base_backend_partner.html.twig' %} + +{% block title %} Réservation {% endblock %} + +{% block content %} + + +
    +

    Liste En Cours

    + +
    + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + +
    + +
    +
    Liste des Réservations En Cours
    +
    +
    +
    + + + + + + + + + + + + + + {% for reservation in reservations %} + {% if reservation.getType() == "ReservationArticle" %} + + + + + + + + + + {% elseif reservation.getType() == "ReservationService" %} + + + + + + + + + + {% endif %} + {% endfor %} + +
    ClientArticle / ServiceQuantité / RDV MontantAvance
    (payer en site)
    Reste
    (payer en société)
    Date Achat
    {{ reservation.getClient().getFullName() }}{{ reservation.getArticle().getTitre() }}{{ reservation.getQuantite() }}{{ reservation.getPrix() }} DT{{ reservation.getAvance() }} DT{{ (reservation.getPrix() * reservation.getQuantite()) - reservation.getAvance() }} DT{{ reservation.getDateAdd()|date("d/m/Y H:i") }}
    {{ reservation.getClient().getFullName() }}{{ reservation.getService().getTitre() }}{{ reservation.getDateRdv()|date("d/m/Y H:i") }}{{ reservation.getPrix() }} DT{{ reservation.getAvance() }} DT{{ reservation.getPrix() - reservation.getAvance() }} DT{{ reservation.getDateAdd()|date("d/m/Y H:i") }}
    +
    +
    +
    + +
    + + +{% endblock %} diff --git a/templates/backend_partner/reservation/liste_valider.html.twig b/templates/backend_partner/reservation/liste_valider.html.twig new file mode 100644 index 0000000..79d0c78 --- /dev/null +++ b/templates/backend_partner/reservation/liste_valider.html.twig @@ -0,0 +1,82 @@ +{% extends 'base_backend_partner.html.twig' %} + +{% block title %} Réservation {% endblock %} + +{% block content %} + + +
    +

    Liste Valide

    + +
    + + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + +
    + +
    +
    Liste des Réservations Valider
    +
    +
    +
    + + + + + + + + + + + + + + + + {% for reservationValidation in reservationValidations %} + {% if reservationValidation.getType() == "ReservationArticleValidation" %} + {% set reservationArticle = reservationValidation.getReservationArticle() %} + + + + + + + + + + + {% elseif reservationValidation.getType() == "ReservationServiceValidation" %} + {% set reservationService = reservationValidation.getReservationService() %} + + + + + + + + + + + {% endif %} + {% endfor %} + +
    Date ValidationClientArticle / ServiceQuantité / RDVMontantAvance
    (payer en site)
    Reste
    (payer en société)
    Valider par
    {{ reservationValidation.getDateAdd()|date("d/m/Y H:i") }}{{ reservationArticle.getClient().getFullName() }}{{ reservationArticle.getArticle().getTitre() }}{{ reservationArticle.getQuantite() }}{{ reservationArticle.getPrix() }} DT{{ reservationArticle.getAvance() }} DT{{ (reservationArticle.getPrix() * reservationArticle.getQuantite()) - reservationArticle.getAvance() }} DT{{ reservationValidation.getPartenaire().getPartenaire().getFullName() }}
    {{ reservationValidation.getDateAdd()|date("d/m/Y H:i") }}{{ reservationService.getClient().getFullName() }}{{ reservationService.getService().getTitre() }}{{ reservationService.getDateRdv()|date("d/m/Y H:i") }}{{ reservationService.getPrix() }} DT{{ reservationService.getAvance() }} DT{{ reservationService.getPrix() - reservationService.getAvance() }} DT{{ reservationValidation.getPartenaire().getPartenaire().getFullName() }}
    +
    +
    +
    + +
    + + +{% endblock %} diff --git a/templates/backend_partner/reservation/valider.html.twig b/templates/backend_partner/reservation/valider.html.twig new file mode 100644 index 0000000..e663b34 --- /dev/null +++ b/templates/backend_partner/reservation/valider.html.twig @@ -0,0 +1,77 @@ +{% extends 'base_backend_partner.html.twig' %} + +{% block title %} Réservation {% endblock %} + +{% block content %} + + +
    +

    Réservation

    + +
    + + + + +
    + + {% include 'backend_admin/basic/notice.html.twig' %} + + +
    +
    +
    Valider une Réservation d'article
    +
    +
    + {{ form_start(formArticle, {'action': path('backend_partner_reservation_valider_article'), 'method': 'POST'}) }} +
    +
    + {{ form_label(formArticle.reservnumarticle, 'Réservation Numéro:', {'attr': {'class': 'form-label'}}) }} +
    + +
    + {{ form_widget(formArticle.reservnumarticle, {'attr': {'class': 'form-control'}}) }} +
    + +
    + {{ form_widget(formArticle.save, {'label': "Valider", 'attr': {'class': 'w-90 btn btn-primary '}}) }} +
    +
    + {{ form_end(formArticle) }} +
    +
    + + +


    + + + +
    +
    +
    Valider une Réservation d'un Service
    +
    +
    + {{ form_start(formService, {'action': path('backend_partner_reservation_valider_service'), 'method': 'POST'}) }} +
    +
    + {{ form_label(formService.reservnumservice, 'Réservation Numéro:', {'attr': {'class': 'form-label'}}) }} +
    + +
    + {{ form_widget(formService.reservnumservice, {'attr': {'class': 'form-control'}}) }} +
    + +
    + {{ form_widget(formService.save, {'label': "Valider", 'attr': {'class': 'w-90 btn btn-primary '}}) }} +
    +
    + {{ form_end(formService) }} +
    +
    + +
    + + +{% endblock %} diff --git a/templates/base_backend_admin.html.twig b/templates/base_backend_admin.html.twig new file mode 100755 index 0000000..41d14b0 --- /dev/null +++ b/templates/base_backend_admin.html.twig @@ -0,0 +1,60 @@ + + + + + {% block title %}{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_backend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_backend') }} + {% endblock %} + + {% block body %} + + + +
    + + {% include 'backend_admin/basic/menu.html.twig' %} + + +
    + + +
    + + + + +
    + + {% block content %} + + {% endblock %} + +
    + + +
    + + +
    + + +
    + + + + + + + + + {% endblock %} + + {##} + + diff --git a/templates/base_backend_partner.html.twig b/templates/base_backend_partner.html.twig new file mode 100755 index 0000000..e6e3896 --- /dev/null +++ b/templates/base_backend_partner.html.twig @@ -0,0 +1,73 @@ + + + + + {% block title %}{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_backend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_backend') }} + {% endblock %} + + {% block body %} + + + +
    + + {% include 'backend_partner/basic/menu.html.twig' %} + + +
    + + +
    + +
    +
    +
    + Société: +
    +
    + +
    +
    +
    + + +
    + + {% block content %} + + {% endblock %} + +
    + + +
    + + +
    + + +
    + + + + + + + + + {% endblock %} + + {##} + + diff --git a/templates/base_frontend.html.twig b/templates/base_frontend.html.twig new file mode 100755 index 0000000..0206893 --- /dev/null +++ b/templates/base_frontend.html.twig @@ -0,0 +1,34 @@ + + + + + {% block title %} {{ titlePage }} {% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_frontend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_frontend') }} + {% endblock %} + + + +{% block body %} + + + {% include 'frontend/basic/menu.html.twig' %} + +
    + {% block content %}{% endblock %} +
    + + {% include 'frontend/basic/modal.html.twig' %} + + {% include 'frontend/basic/footer.html.twig' %} + + +{% endblock %} + + + diff --git a/templates/frontend/annonce/detailManyImages.html.twig b/templates/frontend/annonce/detailManyImages.html.twig new file mode 100644 index 0000000..8c25798 --- /dev/null +++ b/templates/frontend/annonce/detailManyImages.html.twig @@ -0,0 +1,126 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Détail Annonce {% endblock %} + +{% block content %} + + + + +
    +
    + + + +
    +
    + + +
    +
    +

    {{ annonce.getTitre() }}

    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    + {{ annonce.getPrixPromo() }} DT + {{ annonce.getPrixMarche() }} DT +
    +
    +
    + +
    +
    + +
    + + +
    + +
    + +
    + +
    + {{ annonce.getDescription()|raw }} +
    + +
    + +
    + + +
    + + + +{% set comments = annonce.getCommentAnnonces() %} +{% include 'frontend/comment/comments.html.twig' %} + +{{ render(controller( + 'App\\Controller\\Frontend\\CommentController::annonce_add', + { 'id': annonce.getId() } + )) }} + + +{% endblock %} diff --git a/templates/frontend/annonce/detailSimpleImage.html.twig b/templates/frontend/annonce/detailSimpleImage.html.twig new file mode 100644 index 0000000..ed36c0b --- /dev/null +++ b/templates/frontend/annonce/detailSimpleImage.html.twig @@ -0,0 +1,38 @@ + +{% extends 'base_frontend.html.twig' %} + +{% block title %} Détail Annonce {% endblock %} + +{% block content %} + + + +
    +
    +
    + +
    + {{ annonce.getTitre() }} +

    {{ annonce.getTitre() }}

    + {{ annonce.getSociete().getNom() }} + {{ annonce.getDateUpdate()|date("d/m/Y H:i:s") }} + {{ annonce.getCategorie().getNom() }} +

    {{ annonce.getDescription()|raw }}

    +
    + +
    +
    +
    + + +{% endblock %} + diff --git a/templates/frontend/annonce/index.html.twig b/templates/frontend/annonce/index.html.twig new file mode 100644 index 0000000..c126a09 --- /dev/null +++ b/templates/frontend/annonce/index.html.twig @@ -0,0 +1,47 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Annonces {% endblock %} + +{% block content %} + + + +
    + + +
    + +
    + + {% for annonce in annonces %} + +
    + +
    + +
    + {{ annonce.getTitre() }} +
    +
    + +
    +

    +
    + + {% endfor %} +
    + + +
    + + +
    + +{% endblock %} + diff --git a/templates/frontend/article_service/article_detail.html.twig b/templates/frontend/article_service/article_detail.html.twig new file mode 100644 index 0000000..a19f43c --- /dev/null +++ b/templates/frontend/article_service/article_detail.html.twig @@ -0,0 +1,192 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Détail Article {% endblock %} + +{% block content %} + + + +{% include 'frontend/basic/alert.html.twig' %} + + + +
    +
    + + +
    +
    + + +
    +
    +

    {{ article.getTitre() }}

    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + Exemplaire(s) en Stock: +
    +
    +
    +
    + {{ article.getLimitQuantite() }} +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + {{ article.getPrixPromo() }} DT + {{ article.getPrixMarche() }} DT +
    +
    +
    + +
    +
    + +
    + +
    +
    +
    + Qty : +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    + +
    + +
    + +
    + +
    +
    + +
    + + + + +
    +
    +
    +
    +
    + {{ article.getDescription()|raw }} + +
    +
    +
    +
    +
    +

    + +{% set comments = article.getCommentArticles() %} +{% include 'frontend/comment/comments.html.twig' %} + +{{ render(controller( + 'App\\Controller\\Frontend\\CommentController::article_add', + { 'id': article.getId() } + )) }} + +{% endblock %} + +{% block javascripts %} + + {{ parent() }} + {{ encore_entry_script_tags('app_frontend_article_service') }} +{% endblock %} \ No newline at end of file diff --git a/templates/frontend/article_service/index.html.twig b/templates/frontend/article_service/index.html.twig new file mode 100644 index 0000000..da9ccb2 --- /dev/null +++ b/templates/frontend/article_service/index.html.twig @@ -0,0 +1,59 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Article et Service {% endblock %} + +{% block content %} + + + +
    + +
    + +
    + {% for i in 0..leng %} + + {% if articles[i] is defined %} +
    +
    + +
    + {{ articles[i].getTitre() }} +
    +
    + +
    +

    +
    + {% endif %} + + {% if services[i] is defined %} +
    +
    + +
    + {{ services[i].getTitre() }} +
    +
    + +
    +

    +
    + {% endif %} + + {% endfor %} +
    + +
    + + +
    + +{% endblock %} + diff --git a/templates/frontend/article_service/service_detail.html.twig b/templates/frontend/article_service/service_detail.html.twig new file mode 100644 index 0000000..a3a01a8 --- /dev/null +++ b/templates/frontend/article_service/service_detail.html.twig @@ -0,0 +1,202 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Détail service {% endblock %} + +{% block content %} + + + + + + +
    +
    + + + +
    +
    + + +
    +
    +

    {{ service.getTitre() }}

    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + Rendez-vous Disponible: +
    +
    +
    +
    + {{ service.getServiceRdvReservations()|length }} +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + {{ service.getPrixPromo() }} DT + {{ service.getPrixMarche() }} DT +
    +
    +
    + +
    +
    + +
    + +
    +
    +
    +
    + +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + +
    +
    +
    +
    +
    + {{ service.getDescription()|raw }} + +
    +
    +
    +
    +
    +

    + + + + +{% set comments = service.getCommentServices() %} +{% include 'frontend/comment/comments.html.twig' %} + +{{ render(controller( + 'App\\Controller\\Frontend\\CommentController::service_add', + { 'id': service.getId() } + )) }} + + + + +{% endblock %} + +{% block javascripts %} + + {{ parent() }} + {{ encore_entry_script_tags('app_frontend_article_service') }} +{% endblock %} \ No newline at end of file diff --git a/templates/frontend/article_service/service_select_rdv.html.twig b/templates/frontend/article_service/service_select_rdv.html.twig new file mode 100644 index 0000000..f2a4131 --- /dev/null +++ b/templates/frontend/article_service/service_select_rdv.html.twig @@ -0,0 +1,57 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Détail service {% endblock %} + +{% block content %} + + + + +
    +
    +
    +
    +

    Rendez-vous sélectionné le: {{ serviceRdvReservation.getDateDebut()|date("d/m/Y H:i") }}

    +

    Service:{{ serviceRdvReservation.getService().getTitre() }}

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + +
    +
    +
    + +
    + +
    + +

    +{% endblock %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('app_frontend_article_service') }} +{% endblock %} \ No newline at end of file diff --git a/templates/frontend/basic/alert.html.twig b/templates/frontend/basic/alert.html.twig new file mode 100644 index 0000000..787e5fd --- /dev/null +++ b/templates/frontend/basic/alert.html.twig @@ -0,0 +1,31 @@ +{% for notice in app.flashes('primary') %} + +{% endfor %} + +{% for notice in app.flashes('success') %} + +{% endfor %} + +{% for notice in app.flashes('danger') %} + +{% endfor %} + +{% for notice in app.flashes('warning') %} + +{% endfor %} + +{% for notice in app.flashes('info') %} + +{% endfor %} diff --git a/templates/frontend/basic/boxes.html.twig b/templates/frontend/basic/boxes.html.twig new file mode 100644 index 0000000..1ac6a4d --- /dev/null +++ b/templates/frontend/basic/boxes.html.twig @@ -0,0 +1,34 @@ + +
    +
    +
      +
    • +
      +
      +
      We ship worldwide
      +
      +
    • +
    • +
      +
      +
      52 719 341
      +
      +
    • +
    • +
      +
      +
      Money Back Guarantee
      +
      +
    • +
    • +
      +
      +
      30 days return
      +
      +
    • + +
    +
    +
    + + \ No newline at end of file diff --git a/templates/frontend/basic/breadcrumb.html.twig b/templates/frontend/basic/breadcrumb.html.twig new file mode 100644 index 0000000..38bdeac --- /dev/null +++ b/templates/frontend/basic/breadcrumb.html.twig @@ -0,0 +1,15 @@ + \ No newline at end of file diff --git a/templates/frontend/basic/footer.html.twig b/templates/frontend/basic/footer.html.twig new file mode 100644 index 0000000..fa135f4 --- /dev/null +++ b/templates/frontend/basic/footer.html.twig @@ -0,0 +1,117 @@ +

    + + \ No newline at end of file diff --git a/templates/frontend/basic/menu.html.twig b/templates/frontend/basic/menu.html.twig new file mode 100644 index 0000000..7e548aa --- /dev/null +++ b/templates/frontend/basic/menu.html.twig @@ -0,0 +1,53 @@ + +
    + + +
    +
    +
    + + + + + + +
    +
    + +
    + +
    + + + + {{ render(path('frontend_basic_search')) }} + + + {% if is_granted('ROLE_USER') %} + {{ render(path('frontend_basic_navbar')) }} + {% endif %} + +
    + + diff --git a/templates/frontend/basic/modal.html.twig b/templates/frontend/basic/modal.html.twig new file mode 100644 index 0000000..16ce677 --- /dev/null +++ b/templates/frontend/basic/modal.html.twig @@ -0,0 +1,18 @@ + + \ No newline at end of file diff --git a/templates/frontend/basic/navbar.html.twig b/templates/frontend/basic/navbar.html.twig new file mode 100644 index 0000000..27093d4 --- /dev/null +++ b/templates/frontend/basic/navbar.html.twig @@ -0,0 +1,50 @@ +
    +
    + + +
    + +
    + diff --git a/templates/frontend/basic/search.html.twig b/templates/frontend/basic/search.html.twig new file mode 100644 index 0000000..a8b574b --- /dev/null +++ b/templates/frontend/basic/search.html.twig @@ -0,0 +1,98 @@ +
    +
    +
    +
    + + + +
    + + +
    + + +
    +
    +
    + + +
    +
    +
    + +
    + + +
    + + + + +
    + +
    + + +
    + + +
    \ No newline at end of file diff --git a/templates/frontend/comment/add.html.twig b/templates/frontend/comment/add.html.twig new file mode 100644 index 0000000..d1e2d6d --- /dev/null +++ b/templates/frontend/comment/add.html.twig @@ -0,0 +1,26 @@ +
    +
    +
    +

    Laissez un commentaire

    +
    +
    + {{ form_start(form, {'action': pathComment, 'method': 'POST'}) }} +
    + {{ form_errors(form) }} +
    +
    + + {{ form_row(form.commentaire, {'attr': {'class': 'form-control unicase-form-control', 'style':'height: 221px;'}}) }} +
    +
    + {{ form_row(form.save, {'attr': {'class': 'btn-upper btn btn-primary checkout-page-button'}}) }} +
    + + {{ form_end(form) }} +
    + +
    +
    + + + diff --git a/templates/frontend/comment/comments.html.twig b/templates/frontend/comment/comments.html.twig new file mode 100644 index 0000000..8ba5509 --- /dev/null +++ b/templates/frontend/comment/comments.html.twig @@ -0,0 +1,22 @@ +{% set commentsLength = comments|length %} +
    +
    +
    +
    +

    {{ commentsLength }} comments

    +
    + {% for comment in comments %} +
    +
    +

    {{ comment.getClient().getPseudo() }}

    + + {{ comment.getDateAdd()|date("d/m/Y H:i") }} + +

    {{ comment.getCommentaire() }}

    +
    +
    + {% endfor %} + {#
    Afficher plus
    #} +
    +
    +
    \ No newline at end of file diff --git a/templates/frontend/demo/404.html.twig b/templates/frontend/demo/404.html.twig new file mode 100644 index 0000000..f79fbfe --- /dev/null +++ b/templates/frontend/demo/404.html.twig @@ -0,0 +1,545 @@ + + + + + {% block title %}404 !{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_frontend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_frontend') }} + {% endblock %} + + + +{% block body %} + + +
    + + +
    +
    +
    + + + +
    + + +
    + +
    +
    + +
    + +
    + + +
    +
    +
    +
    + + + +
    + + +
    + + +
    +
    +
    + + +
    +
    +
    + +
    + + +
    + + + + + +
    + +
    + + +
    + + +
    + + + +
    +
    + + +
    + + +
    + + + +
    + + +
    +
    +
    +
    +
    +

    404

    +

    We are sorry, the page you've requested is not available.

    +
    + + +
    + Go To Homepage +
    +
    +
    +
    +
    + + + +
    +
    +
      +
    • +
      +
      +
      We ship worldwide
      +
      +
    • +
    • +
      +
      +
      call + +1 800 789 0000
      +
      +
    • +
    • +
      +
      +
      Money Back Guarantee
      +
      +
    • +
    • +
      +
      +
      30 days return
      +
      +
    • + +
    +
    +
    + + + + + +{% endblock %} \ No newline at end of file diff --git a/templates/frontend/demo/blog.html.twig b/templates/frontend/demo/blog.html.twig new file mode 100644 index 0000000..6981f74 --- /dev/null +++ b/templates/frontend/demo/blog.html.twig @@ -0,0 +1,858 @@ + + + + + blog ! + + {% block stylesheets %} + {{ encore_entry_link_tags('app_frontend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_frontend') }} + {% endblock %} + + + +{% block body %} + + +
    + + +
    +
    +
    + + + +
    + + +
    + +
    +
    + +
    + +
    + + +
    +
    +
    +
    + + + +
    + + +
    + + +
    +
    +
    + + +
    +
    +
    + +
    + + +
    + + + + + +
    + +
    + + +
    + + +
    + + + +
    +
    + + +
    + + +
    + + + +
    + + + + +
    +
    +
    +
    +
    +
    + +

    Nemo enim ipsam voluptatem quia voluptas sit aspernatur

    + John Doe + 6 Comments + 14/06/2016 10.00AM +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum...

    + read more +
    +
    + +

    Nemo enim ipsam voluptatem quia voluptas sit aspernatur

    + Sarah Smith + 6 Comments + 20/06/2016 11.00AM +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum...

    + read more +
    +
    + +

    Nemo enim ipsam voluptatem quia voluptas sit aspernatur

    + Mark Doe + 6 Comments + 14/06/2014 11.00AM +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum...

    + read more +
    + +
    + +
    +
    +
      + +
    • 1
    • +
    • 2
    • +
    • 3
    • +
    • 4
    • + +
    +
    + +
    + +
    +
    + + +
    +
    + + + +
    +
    +
      +
    • +
      +
      +
      We ship worldwide
      +
      +
    • +
    • +
      +
      +
      call + +1 800 789 0000
      +
      +
    • +
    • +
      +
      +
      Money Back Guarantee
      +
      +
    • +
    • +
      +
      +
      30 days return
      +
      +
    • + +
    +
    +
    + + + + + + +{% endblock %} \ No newline at end of file diff --git a/templates/frontend/demo/blogdetails.html.twig b/templates/frontend/demo/blogdetails.html.twig new file mode 100644 index 0000000..07d5a5e --- /dev/null +++ b/templates/frontend/demo/blogdetails.html.twig @@ -0,0 +1,912 @@ + + + + + blog detail ! + + {% block stylesheets %} + {{ encore_entry_link_tags('app_frontend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_frontend') }} + {% endblock %} + + + +{% block body %} + + +
    + + +
    +
    +
    + + + +
    + + +
    + +
    +
    + +
    + +
    + + +
    +
    +
    +
    + + + +
    + + +
    + + +
    +
    +
    + + +
    +
    +
    + +
    + + +
    + + + + + +
    + +
    + + +
    + + +
    + + + +
    +
    + + +
    + + +
    + + + +
    + + + +
    +
    +
    +
    +
    +
    + +

    Nemo enim ipsam voluptatem quia voluptas sit aspernatur

    + John Doe + 7 Comments + 18/06/2016 11.30AM +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    +

    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    + +
    + +
    +
    +
    +

    16 comments

    +
    +
    + Responsive image +
    +
    +
    +

    Jone doe

    + + 03 Day ago / + Repost / + Reply + +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam

    +
    +
    +
    +
    + Responsive image +
    +
    +
    +

    Sarah Smith

    + + 03 Day ago / + Repost / + Reply + +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam

    +
    +
    +
    + Responsive image +
    +
    +
    +

    Stephen

    + + 03 Day ago / + Repost / + Reply + +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam

    +
    +
    +
    +
    +
    +
    + Responsive image +
    +
    +
    +

    Saraha Smith

    + + 03 Day ago / + Repost / + Reply + +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam

    +
    +
    +
    + Responsive image +
    +
    +
    +

    Mark Doe

    + + 03 Day ago / + Repost / + Reply + +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam

    +
    +
    +
    Load more
    +
    +
    +
    +
    +

    Leave A Comment

    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + + + +
    +
    +
      +
    • +
      +
      +
      We ship worldwide
      +
      +
    • +
    • +
      +
      +
      call + +1 800 789 0000
      +
      +
    • +
    • +
      +
      +
      Money Back Guarantee
      +
      +
    • +
    • +
      +
      +
      30 days return
      +
      +
    • + +
    +
    +
    + + + + + + +{% endblock %} \ No newline at end of file diff --git a/templates/frontend/demo/blogdetails2.html.twig b/templates/frontend/demo/blogdetails2.html.twig new file mode 100644 index 0000000..aadffd2 --- /dev/null +++ b/templates/frontend/demo/blogdetails2.html.twig @@ -0,0 +1,1591 @@ + + + + + {% block title %}Welcome!{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_frontend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_frontend') }} + {% endblock %} + + + +{% block body %} + + +
    + + +
    +
    +
    + + + +
    + + +
    + +
    +
    + +
    + +
    + + +
    +
    +
    +
    + + + +
    + + +
    + + +
    +
    +
    + + +
    +
    +
    + +
    + + +
    + + + + + +
    + +
    + + +
    + + +
    + + + +
    +
    + + +
    + + +
    + + + +
    + + +
    +
    +
    + +
    +
    +
    + + +
    +
    +

    Floral Print Buttoned

    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +
    + Availability : +
    +
    +
    +
    + In Stock +
    +
    +
    +
    +
    + +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +

    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +
    + +
    +
    + + +
    +
    + $800.00 + $900.00 +
    +
    + +
    + +
    + +
    +
    + +
    +
    + +
    + Qty : +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + + + +
    +
    + + + + + + +
    +
    +
    +
    + +
    +
    +
    + +
    +
    + +
    + +
    +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +
    +
    + +
    +
    + +
    +

    Customer Reviews

    + +
    +
    +
    We love this product1 days ago
    +
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit.Aliquam suscipit."
    +
    + +
    +
    + + + +
    +

    Write your own review

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     1 star2 stars3 stars4 stars5 stars
    Quality
    Price
    Value
    +
    +
    + +
    +
    +
    + +
    +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    +
    + +
    + +
    + +
    +
    +
    + +
    + +
    +
    + +
    +
    + +

    Product Tags

    +
    +
    + +
    + + + + +
    + + +
    +
    + +
    +
    + + Use spaces to separate tags. Use single quotes (') for phrases. +
    +
    + +
    +
    + +
    +
    +
    +
    + + + + + +
    +
    +
    + + +
    +
    + + + + +
    +
    +
      +
    • +
      +
      +
      We ship worldwide
      +
      +
    • +
    • +
      +
      +
      call + +1 800 789 0000
      +
      +
    • +
    • +
      +
      +
      Money Back Guarantee
      +
      +
    • +
    • +
      +
      +
      30 days return
      +
      +
    • + +
    +
    +
    + + + + + + +{% endblock %} +{# + + + + + + + + + + + + + + + + + + + + + + + +#} \ No newline at end of file diff --git a/templates/frontend/demo/checkbox.html.twig b/templates/frontend/demo/checkbox.html.twig new file mode 100644 index 0000000..ddf5cfd --- /dev/null +++ b/templates/frontend/demo/checkbox.html.twig @@ -0,0 +1,338 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Newslettre {% endblock %} + +{% block content %} + + + +
    + + +



    + +
    +{% endblock %} \ No newline at end of file diff --git a/templates/frontend/demo/index.html.twig b/templates/frontend/demo/index.html.twig new file mode 100644 index 0000000..679854e --- /dev/null +++ b/templates/frontend/demo/index.html.twig @@ -0,0 +1,3731 @@ + + + + + {% block title %}Welcome!{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_frontend') }} + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app_frontend') }} + {% endblock %} + + + +{% block body %} + + + +
    + + +
    +
    +
    + + + +
    + + +
    + +
    +
    + +
    + +
    + + +
    +
    +
    +
    + + + +
    + + +
    + + +
    +
    +
    + + +
    +
    +
    + +
    + + +
    + + + + + +
    + +
    + + +
    + + +
    + + + +
    +
    + + +
    + + +
    + + + +
    + +
    +
    +
    + + + + + + +
    + + +
    + + +
    + + + + + +
    +
    +

    New Products

    + + +
    +
    +
    +
    + + +
    + +
    + + +
    +
    + + +
    + +
    + + +
    +
    + + +
    + +
    + + +
    +
    + + +
    + +
    + + +
    + +
    + + + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    + + +
    +
    +
    +
    + +
    + +
    + +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +

    Amazing Sunglasses
    + Get 40% off on selected items

    +
    +
    +
    +
    NEW
    +
    + +
    + +
    + +
    +
    +
    + + + +
    + +
    + +
    + +
    + + + + + + + + + +
    +

    Latest form Blog

    +
    + + +
    + +
    + + + + +
    +

    Featured Products

    + + +
    + + + +
    + + +
    + + + + + +
    + +
    + + + +
    +
    +
      +
    • +
      +
      +
      We ship worldwide
      +
      +
    • +
    • +
      +
      +
      call + +1 800 789 0000
      +
      +
    • +
    • +
      +
      +
      Money Back Guarantee
      +
      +
    • +
    • +
      +
      +
      30 days return
      +
      +
    • + +
    +
    +
    + + + + + +{% endblock %} \ No newline at end of file diff --git a/templates/frontend/demo/index1.html.twig b/templates/frontend/demo/index1.html.twig new file mode 100644 index 0000000..600a455 --- /dev/null +++ b/templates/frontend/demo/index1.html.twig @@ -0,0 +1,3772 @@ + + + + + + + + + + + + + Marazzo premium HTML5 & CSS3 Template + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    +
    + + + +
    + + +
    + +
    +
    + +
    + +
    + + +
    +
    +
    +
    + + + +
    + + +
    + + +
    +
    +
    + + +
    +
    +
    + +
    + + +
    + + + + + +
    + +
    + + +
    + + +
    + + + +
    +
    + + +
    + + +
    + + + +
    + + +
    +
    +
    + + + + + + +
    + + +
    + + +
    + + + + + +
    +
    +

    New Products

    + + +
    +
    +
    +
    + + +
    + +
    + + +
    +
    + + +
    + +
    + + +
    +
    + + +
    + +
    + + +
    +
    + + +
    + +
    + + +
    + +
    + + + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    + + +
    +
    +
    +
    + +
    + +
    + +
    + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +

    Amazing Sunglasses
    + Get 40% off on selected items

    +
    +
    +
    +
    NEW
    +
    + +
    + +
    + +
    +
    +
    + + + +
    + +
    + +
    + +
    + + + + + + + + + +
    +

    Latest form Blog

    +
    + + +
    + +
    + + + + +
    +

    Featured Products

    + + +
    + + + +
    + + +
    + + + + + +
    + +
    + + + +
    +
    +
      +
    • +
      +
      +
      We ship worldwide
      +
      +
    • +
    • +
      +
      +
      call + +1 800 789 0000
      +
      +
    • +
    • +
      +
      +
      Money Back Guarantee
      +
      +
    • +
    • +
      +
      +
      30 days return
      +
      +
    • + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/frontend/demo/radio.html.twig b/templates/frontend/demo/radio.html.twig new file mode 100644 index 0000000..2f386b1 --- /dev/null +++ b/templates/frontend/demo/radio.html.twig @@ -0,0 +1,107 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Radio {% endblock %} + +{% block content %} + + + +
    + + +



    + +
    +{% endblock %} \ No newline at end of file diff --git a/templates/frontend/demo/test.html.twig b/templates/frontend/demo/test.html.twig new file mode 100644 index 0000000..ad490df --- /dev/null +++ b/templates/frontend/demo/test.html.twig @@ -0,0 +1,725 @@ + + + + + {% block title %}Welcome!{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app_frontend') }} + {% endblock %} + {% block javascripts %} + {{ encore_entry_script_tags('app_frontend') }} + {% endblock %} + + {% block body %} + + +
    + +
    +
    +
    + + +
    + + +
    + +
    +
    + +
    + +
    + + +
    +
    +
    +
    + + + + +
    + +
    + + +
    + +
    + + + +
    + +
    + + +
    + +
    + + + + +
    + +
    + +
    + +
    + + +
    +
    + + +
    + +
    + + +
    + + + +
    +
    +
    + +
    +
    +
    + + +
    +
    +

    Floral Print Buttoned

    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + Availability : +
    +
    +
    +
    + In Stock +
    +
    +
    +
    + +
    + +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +

    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +
    + +
    +
    +
    +
    + $800.00 + $900.00 +
    +
    +
    + +
    +
    + +
    + +
    +
    +
    + Qty : +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +
    + +
    + +
    + +
    + +
    + +
    + + +
    + +
    +
    + + + + + +
    + +
    + + + +
    +
    +
      +
    • +
      +
      +
      We ship worldwide
      +
      +
    • +
    • +
      +
      +
      call + +1 800 789 0000 +
      +
      +
    • +
    • +
      +
      +
      Money Back Guarantee
      +
      +
    • +
    • +
      +
      +
      30 days return
      +
      +
    • +
    +
    +
    + + + {% endblock %} + {# + + + + + + + + + + + + + + + + + +#} diff --git a/templates/frontend/footer/aide.html.twig b/templates/frontend/footer/aide.html.twig new file mode 100644 index 0000000..61c16f8 --- /dev/null +++ b/templates/frontend/footer/aide.html.twig @@ -0,0 +1,49 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Aide {% endblock %} + +{% block content %} + + + +
    +
    +
    +
    +

    Terms and Conditions

    +
    +

    Intellectual Propertly

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    9. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    10. +
    11. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    12. +
    +

    Termination

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    +

    Changes to this agreement

    +

    We reserve the right, at our sole discretion, to modify or replace these Terms and Conditions by posting the updated terms on the Site. Your continued use of the Site after any such changes constitutes your acceptance of the new Terms and Conditions.

    +

    Contact Us

    +

    If you have any questions about this Agreement, please contact us filling this contact form

    +
    +
    +
    +
    +
    + + +{% endblock %} diff --git a/templates/frontend/footer/contacter.html.twig b/templates/frontend/footer/contacter.html.twig new file mode 100644 index 0000000..1a35e1f --- /dev/null +++ b/templates/frontend/footer/contacter.html.twig @@ -0,0 +1,49 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} FAQ {% endblock %} + +{% block content %} + + + +
    +
    +
    +
    +

    Terms and Conditions

    +
    +

    Intellectual Propertly

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    9. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    10. +
    11. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    12. +
    +

    Termination

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    +

    Changes to this agreement

    +

    We reserve the right, at our sole discretion, to modify or replace these Terms and Conditions by posting the updated terms on the Site. Your continued use of the Site after any such changes constitutes your acceptance of the new Terms and Conditions.

    +

    Contact Us

    +

    If you have any questions about this Agreement, please contact us filling this contact form

    +
    +
    +
    +
    +
    + + +{% endblock %} diff --git a/templates/frontend/footer/faq.html.twig b/templates/frontend/footer/faq.html.twig new file mode 100644 index 0000000..87010a3 --- /dev/null +++ b/templates/frontend/footer/faq.html.twig @@ -0,0 +1,49 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} FAQ {% endblock %} + +{% block content %} + + + +
    +
    +
    +
    +

    Terms and Conditions

    +
    +

    Intellectual Propertly

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    9. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    10. +
    11. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    12. +
    +

    Termination

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    +

    Changes to this agreement

    +

    We reserve the right, at our sole discretion, to modify or replace these Terms and Conditions by posting the updated terms on the Site. Your continued use of the Site after any such changes constitutes your acceptance of the new Terms and Conditions.

    +

    Contact Us

    +

    If you have any questions about this Agreement, please contact us filling this contact form

    +
    +
    +
    +
    +
    + + +{% endblock %} diff --git a/templates/frontend/footer/mentionslegales.html.twig b/templates/frontend/footer/mentionslegales.html.twig new file mode 100644 index 0000000..47a2711 --- /dev/null +++ b/templates/frontend/footer/mentionslegales.html.twig @@ -0,0 +1,49 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Mentions légales {% endblock %} + +{% block content %} + + + +
    +
    +
    +
    +

    Terms and Conditions

    +
    +

    Intellectual Propertly

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    9. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    10. +
    11. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    12. +
    +

    Termination

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    +

    Changes to this agreement

    +

    We reserve the right, at our sole discretion, to modify or replace these Terms and Conditions by posting the updated terms on the Site. Your continued use of the Site after any such changes constitutes your acceptance of the new Terms and Conditions.

    +

    Contact Us

    +

    If you have any questions about this Agreement, please contact us filling this contact form

    +
    +
    +
    +
    +
    + + +{% endblock %} diff --git a/templates/frontend/footer/nosactualites.html.twig b/templates/frontend/footer/nosactualites.html.twig new file mode 100644 index 0000000..03cc4d6 --- /dev/null +++ b/templates/frontend/footer/nosactualites.html.twig @@ -0,0 +1,49 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Nos actualités {% endblock %} + +{% block content %} + + + +
    +
    +
    +
    +

    Terms and Conditions

    +
    +

    Intellectual Propertly

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    9. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    10. +
    11. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    12. +
    +

    Termination

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    +

    Changes to this agreement

    +

    We reserve the right, at our sole discretion, to modify or replace these Terms and Conditions by posting the updated terms on the Site. Your continued use of the Site after any such changes constitutes your acceptance of the new Terms and Conditions.

    +

    Contact Us

    +

    If you have any questions about this Agreement, please contact us filling this contact form

    +
    +
    +
    +
    +
    + + +{% endblock %} diff --git a/templates/frontend/footer/nospartenaires.html.twig b/templates/frontend/footer/nospartenaires.html.twig new file mode 100644 index 0000000..b832bc4 --- /dev/null +++ b/templates/frontend/footer/nospartenaires.html.twig @@ -0,0 +1,49 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Nos partenaires {% endblock %} + +{% block content %} + + + +
    +
    +
    +
    +

    Terms and Conditions

    +
    +

    Intellectual Propertly

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    9. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    10. +
    11. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    12. +
    +

    Termination

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    +

    Changes to this agreement

    +

    We reserve the right, at our sole discretion, to modify or replace these Terms and Conditions by posting the updated terms on the Site. Your continued use of the Site after any such changes constitutes your acceptance of the new Terms and Conditions.

    +

    Contact Us

    +

    If you have any questions about this Agreement, please contact us filling this contact form

    +
    +
    +
    +
    +
    + + +{% endblock %} diff --git a/templates/frontend/footer/presentation.html.twig b/templates/frontend/footer/presentation.html.twig new file mode 100644 index 0000000..84791a7 --- /dev/null +++ b/templates/frontend/footer/presentation.html.twig @@ -0,0 +1,49 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Présentation {% endblock %} + +{% block content %} + + + +
    +
    +
    +
    +

    Terms and Conditions

    +
    +

    Intellectual Propertly

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    9. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    10. +
    11. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    12. +
    +

    Termination

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    +

    Changes to this agreement

    +

    We reserve the right, at our sole discretion, to modify or replace these Terms and Conditions by posting the updated terms on the Site. Your continued use of the Site after any such changes constitutes your acceptance of the new Terms and Conditions.

    +

    Contact Us

    +

    If you have any questions about this Agreement, please contact us filling this contact form

    +
    +
    +
    +
    +
    + + +{% endblock %} diff --git a/templates/frontend/footer/quisommesnous.html.twig b/templates/frontend/footer/quisommesnous.html.twig new file mode 100644 index 0000000..df293d3 --- /dev/null +++ b/templates/frontend/footer/quisommesnous.html.twig @@ -0,0 +1,49 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Qui sommes nous {% endblock %} + +{% block content %} + + + +
    +
    +
    +
    +

    Terms and Conditions

    +
    +

    Intellectual Propertly

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    9. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    10. +
    11. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    12. +
    +

    Termination

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    +

    Changes to this agreement

    +

    We reserve the right, at our sole discretion, to modify or replace these Terms and Conditions by posting the updated terms on the Site. Your continued use of the Site after any such changes constitutes your acceptance of the new Terms and Conditions.

    +

    Contact Us

    +

    If you have any questions about this Agreement, please contact us filling this contact form

    +
    +
    +
    +
    +
    + + +{% endblock %} diff --git a/templates/frontend/footer/temoignages.html.twig b/templates/frontend/footer/temoignages.html.twig new file mode 100644 index 0000000..6281fca --- /dev/null +++ b/templates/frontend/footer/temoignages.html.twig @@ -0,0 +1,49 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Témoignages {% endblock %} + +{% block content %} + + + +
    +
    +
    +
    +

    Terms and Conditions

    +
    +

    Intellectual Propertly

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    9. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    10. +
    11. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    12. +
    +

    Termination

    +
      +
    1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum.
    2. +
    3. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    4. +
    5. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    6. +
    7. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis diam erat. Duis velit lectus, posuere a blandit sit amet, tempor at lorem. Donec ultricies, lorem sed ultrices interdum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    8. +
    +

    Changes to this agreement

    +

    We reserve the right, at our sole discretion, to modify or replace these Terms and Conditions by posting the updated terms on the Site. Your continued use of the Site after any such changes constitutes your acceptance of the new Terms and Conditions.

    +

    Contact Us

    +

    If you have any questions about this Agreement, please contact us filling this contact form

    +
    +
    +
    +
    +
    + + +{% endblock %} diff --git a/templates/frontend/home/include/blocCollectionAnnonces.html.twig b/templates/frontend/home/include/blocCollectionAnnonces.html.twig new file mode 100644 index 0000000..db549e8 --- /dev/null +++ b/templates/frontend/home/include/blocCollectionAnnonces.html.twig @@ -0,0 +1,57 @@ + +
    +

    Featured Products

    + + +
    + + diff --git a/templates/frontend/home/include/blocUniquePromo.html.twig b/templates/frontend/home/include/blocUniquePromo.html.twig new file mode 100644 index 0000000..7bfeaeb --- /dev/null +++ b/templates/frontend/home/include/blocUniquePromo.html.twig @@ -0,0 +1,41 @@ +{% if promo['type'] == 'annonce' %} + +{% elseif promo['type'] == 'article' %} +
    + {% if app.user %} + +
    + {{ promo['title'] }} +
    +
    + {% else %} + +
    + {{ promo['title'] }} +
    +
    + {% endif %} +
    +{% elseif promo['type']== 'service' %} +
    + {% if app.user %} + +
    + {{ promo['title'] }} +
    +
    + {% else %} + +
    + {{ promo['title'] }} +
    +
    + {% endif %} +
    +{% endif %} \ No newline at end of file diff --git a/templates/frontend/home/include/categorie.html.twig b/templates/frontend/home/include/categorie.html.twig new file mode 100644 index 0000000..cf19aca --- /dev/null +++ b/templates/frontend/home/include/categorie.html.twig @@ -0,0 +1,65 @@ + + + diff --git a/templates/frontend/home/include/homebanner.html.twig b/templates/frontend/home/include/homebanner.html.twig new file mode 100644 index 0000000..186587b --- /dev/null +++ b/templates/frontend/home/include/homebanner.html.twig @@ -0,0 +1,36 @@ +
    + +
    + + +
    +
    \ No newline at end of file diff --git a/templates/frontend/home/index.html.twig b/templates/frontend/home/index.html.twig new file mode 100644 index 0000000..d43a324 --- /dev/null +++ b/templates/frontend/home/index.html.twig @@ -0,0 +1,76 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Accueil {% endblock %} + +{% block content %} +
    + +
    + + {% include 'frontend/home/include/categorie.html.twig' %} + + {% include 'frontend/home/include/homebanner.html.twig' %} +
    + + {% for show in shows %} + +
    + + {% if show['largeur'][0] == 4 %} + {% set promo = show['promos'][0] %} +
    +
    + {% include 'frontend/home/include/blocUniquePromo.html.twig' %} +
    +
    + {% elseif show['largeur'][0] == 3 %} +
    + {% for key, promo in show.promos %} + {% if (show['largeur'][0] == 3) and (key == 0) %} +
    + {% include 'frontend/home/include/blocUniquePromo.html.twig' %} +
    + {% else %} +
    + {% include 'frontend/home/include/blocUniquePromo.html.twig' %} +
    + {% endif %} + {% endfor %} +
    + {% elseif show['largeur'][0] == 2 %} +
    + {% for key, promo in show.promos %} + {% if (show['largeur'][0] == 2) and (key == 0) %} +
    + {% include 'frontend/home/include/blocUniquePromo.html.twig' %} +
    + {% else %} + {% if (show['largeur'][0] == 2) and (show['largeur'][key] == 1) %} +
    + {% include 'frontend/home/include/blocUniquePromo.html.twig' %} +
    + {% else %} +
    + {% include 'frontend/home/include/blocUniquePromo.html.twig' %} +
    + {% endif %} + {% endif %} + {% endfor %} +
    + {% elseif show['largeur'][0] == 1 %} +
    + {% for key, promo in show.promos %} +
    + {% include 'frontend/home/include/blocUniquePromo.html.twig' %} +
    + {% endfor %} +
    + {% endif %} +
    + + {% endfor %} + +
    + +{% endblock %} + diff --git a/templates/frontend/home/show-promo.html.twig b/templates/frontend/home/show-promo.html.twig new file mode 100644 index 0000000..3fa0c2c --- /dev/null +++ b/templates/frontend/home/show-promo.html.twig @@ -0,0 +1,38 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Accueil {% endblock %} + +{% block content %} + + {% include 'frontend/basic/breadcrumb.html.twig' %} + +
    + + +
    + +
    + + {% for annonce in annonces %} + +
    + +

    +
    + + {% endfor %} + +
    +
    + + +
    + +{% endblock %} + diff --git a/templates/frontend/newslettre/index.html.twig b/templates/frontend/newslettre/index.html.twig new file mode 100644 index 0000000..79c97d3 --- /dev/null +++ b/templates/frontend/newslettre/index.html.twig @@ -0,0 +1,87 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Newslettre {% endblock %} + +{% block content %} + + + +
    + + +



    + +
    +{% endblock %} + +{% block javascripts %} + + + {{ parent() }} + +{% endblock %} \ No newline at end of file diff --git a/templates/frontend/partenaire/add.html.twig b/templates/frontend/partenaire/add.html.twig new file mode 100644 index 0000000..a4fe54d --- /dev/null +++ b/templates/frontend/partenaire/add.html.twig @@ -0,0 +1,227 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Partenaire {% endblock %} + +{% block content %} + + + +
    + +



    + +
    +{% endblock %} + +{% block javascripts %} + + + {{ parent() }} + +{% endblock %} \ No newline at end of file diff --git a/templates/frontend/partenaire/index.html.twig b/templates/frontend/partenaire/index.html.twig new file mode 100644 index 0000000..1667159 --- /dev/null +++ b/templates/frontend/partenaire/index.html.twig @@ -0,0 +1,41 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Partenaire {% endblock %} + +{% block content %} + + + +
    + + +



    + +
    +{% endblock %} + +{% block javascripts %} + + + {{ parent() }} + +{% endblock %} \ No newline at end of file diff --git a/templates/frontend/reservation_panier/paiement.html.twig b/templates/frontend/reservation_panier/paiement.html.twig new file mode 100644 index 0000000..573503e --- /dev/null +++ b/templates/frontend/reservation_panier/paiement.html.twig @@ -0,0 +1,20 @@ + + +







    +
    + +
    + + + + \ No newline at end of file diff --git a/templates/frontend/reservation_panier/panier_index.html.twig b/templates/frontend/reservation_panier/panier_index.html.twig new file mode 100644 index 0000000..c4e8def --- /dev/null +++ b/templates/frontend/reservation_panier/panier_index.html.twig @@ -0,0 +1,165 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Détail Panier {% endblock %} + +{% block content %} + + +
    +
    +
    +
    +
    + + + + + + + + + + + + + + {% set TotalAvance = 0 %} + {% set FraisService = 0 %} + {% for key, panier in paniers %} + + {% if panier['type'] == 'SERVICE' %} + {% set pathUrl = path('frontend_service_detail', {id: panier['id']} ) %} + {% elseif panier['type'] == 'ARTICLE' %} + {% set pathUrl = path('frontend_article_detail', {id: panier['id']} ) %} + {% endif %} + + + + + + {% if panier['type'] == 'ARTICLE' %} + + + {% elseif panier['type'] == 'SERVICE' %} + + + {% endif %} + + + + + + + {% set TotalAvance = TotalAvance + panier['avance'] %} + {% set FraisService = FraisService + panier['frais'] %} + {% endfor %} + + + + + + + +
    SupprimerImageNom d'Article / ServiceQuantité / DatePrixAvance
    + + + + + + + + +

    + {{ panier['titre'] }} +

    +
    +
    +
    +
    +
    +
    + {% if panier['id'] == 'SERVICE' %} + {{ panier['data']['nom'] }} {{ panier['data']['prenom'] }} + {% endif %} +
    +
    +
    + +
    + {{ panier['type'] }} +
    +
    +
    + {{ panier['prix'] }} * {{ panier['qtyRdv'] }} +
    +
    + {{ panier['prix']* panier['qtyRdv'] }} DT + +
    + {{ panier['qtyRdv'] }} +
    +
    + {{ panier['prix'] }} DT + + {{ panier['avance'] }} DT +
    + + +
    + +
    +
    + + +
    + + + + + + + + + + + + + +
    +
    + Total Avance{{ TotalAvance }} DT +
    +
    + Frais de service{{ FraisService }} DT +
    +
    + Total A Payer{{ TotalAvance + FraisService }} DT +
    +
    +
    + Payer +
    +
    + +
    + +
    + +
    + +
    + +{% endblock %} diff --git a/templates/frontend/reservation_panier/reservation_index.html.twig b/templates/frontend/reservation_panier/reservation_index.html.twig new file mode 100644 index 0000000..9ef5130 --- /dev/null +++ b/templates/frontend/reservation_panier/reservation_index.html.twig @@ -0,0 +1,139 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Détail Panier {% endblock %} + +{% block content %} + + +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + {% for key, reservation in reservations %} + + {% if reservation.getType() == 'ReservationArticle' %} + {% set article = reservation.getArticle() %} + + + + + + + + + + + {% elseif reservation.getType() == 'ReservationService' %} + {% set service = reservation.getService() %} + + + + + + + + + + + {% endif %} + {% endfor %} + +
    DocumentImageDate RéservationNom d'Article / ServiceQuantité / Date RDVPrixAvanceÉtat
    + + + + + + {{ article.getTitre() }} + + +
    + {{ reservation.getDateAdd()|date("d/m/Y H:i") }} +
    +
    +

    + + {{ article.getTitre() }} + +

    +
    +
    + {{ reservation.getQuantite() }} +
    +
    + {{ reservation.getPrix() }} DT + + {{ reservation.getAvance() }} DT + + + + +
    + + + + + + {{ service.getTitre() }} + + +
    + {{ reservation.getDateAdd()|date("d/m/Y H:i") }} +
    +
    +

    + + {{ service.getTitre() }} + +

    +
    +
    + {{ reservation.getDateRdv()|date("d/m/Y H:i") }} +
    +
    + {{ reservation.getPrix() }} DT + + {{ reservation.getAvance() }} DT + + + + +
    + +
    +
    + + + + +
    + +
    + +
    + +{% endblock %} diff --git a/templates/frontend/reservation_panier/reservation_template_pdf_article.html.twig b/templates/frontend/reservation_panier/reservation_template_pdf_article.html.twig new file mode 100644 index 0000000..237d2a7 --- /dev/null +++ b/templates/frontend/reservation_panier/reservation_template_pdf_article.html.twig @@ -0,0 +1,39 @@ + + + Réservation Numéro:{{ reservationArticle.getReference() }}
    + Date: {{ reservationArticle.getDateAdd()|date("d/m/Y H:i:s") }} +

    + {% set article = reservationArticle.getArticle() %} + Article: +
      +
    • Titre: {{ article.getTitre() }}
    • +
    • Quantité: {{ reservationArticle.quantite }}
    • +
    • Prix: {{ reservationArticle.prix * reservationArticle.quantite }} DT
    • +
    • Avance Payer dans le site: {{ reservationArticle.avance }} DT
    • +
    • Reste à Payer dans société: {{ (reservationArticle.prix * reservationArticle.quantite) - reservationArticle.avance }} DT
    • +
    + {% set client = reservationArticle.getClient() %} + Client: +
      +
    • Nom: {{ client.firstname }}
    • +
    • Prénom: {{ client.lastname }}
    • +
    • Date de naissance: {{ client.getBirthdate()|date("d/m/Y") }}
    • +
    +
    + {% set societe = article.getSociete() %} + Sociéte: +
      +
    • Nom: {{ societe.getNom() }}
    • +
    • Adress: {{ article.getAdress() }}
    • +
    • Téléphone: {{ societe.getTelephone() }}
    • +
    +
    + Régle: +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum... + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum... + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum... + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum... +

    + + \ No newline at end of file diff --git a/templates/frontend/reservation_panier/reservation_template_pdf_service.html.twig b/templates/frontend/reservation_panier/reservation_template_pdf_service.html.twig new file mode 100644 index 0000000..b116a62 --- /dev/null +++ b/templates/frontend/reservation_panier/reservation_template_pdf_service.html.twig @@ -0,0 +1,40 @@ + + + Réservation Numéro: {{ reservationService.getReference() }}
    + Date: {{ reservationService.getDateAdd()|date("d/m/Y H:i:s") }} +

    + {% set service = reservationService.getService() %} + {% set serviceRdvReservation = reservationService.getServiceRdvReservation() %} + Service: +
      +
    • Référence: ******
    • +
    • Rendez-Vous: {{ serviceRdvReservation.getDateDebut()|date("d/m/Y H:i:s") }}
    • +
    • Prix: {{ reservationService.prix }}DT
    • +
    • Avance Payer dans le site: {{ reservationService.avance }}DT
    • +
    • Reste à Payer dans société: {{ reservationService.prix - (reservationService.avance + reservationService.frais) }}DT
    • +
    + {% set client = reservationService.getClient() %} + Client: +
      +
    • Nom: {{ client.firstname }}
    • +
    • Prénom: {{ client.lastname }}
    • +
    • Date de naissance: {{ client.getBirthdate()|date("d/m/Y") }}
    • +
    +
    + {% set societe = service.getSociete() %} + Sociéte: +
      +
    • Nom: {{ societe.getNom() }}
    • +
    • Adress: {{ service.getAdress() }}
    • +
    • Téléphone: {{ societe.getTelephone() }}
    • +
    +
    + Régle: +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum... + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum... + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum... + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum... +

    + + \ No newline at end of file diff --git a/templates/frontend/security/login.html.twig b/templates/frontend/security/login.html.twig new file mode 100644 index 0000000..6e0a412 --- /dev/null +++ b/templates/frontend/security/login.html.twig @@ -0,0 +1,61 @@ +{% extends 'base_frontend.html.twig' %} + +{% block content %} + + + +
    +
    + +



    +
    +
    +{% endblock %} \ No newline at end of file diff --git a/templates/frontend/security/register.html.twig b/templates/frontend/security/register.html.twig new file mode 100644 index 0000000..12fd931 --- /dev/null +++ b/templates/frontend/security/register.html.twig @@ -0,0 +1,163 @@ +{% extends 'base_frontend.html.twig' %} + +{% block content %} + + + + +
    +
    + +



    +
    +
    +{% endblock %} \ No newline at end of file diff --git a/templates/frontend/user/edit.html.twig b/templates/frontend/user/edit.html.twig new file mode 100644 index 0000000..c7f6421 --- /dev/null +++ b/templates/frontend/user/edit.html.twig @@ -0,0 +1,267 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Mon Profile {% endblock %} + +{% block content %} + + + +
    +
    + + +
    +
    + +

    +
    +
    + + +
    +
    + +

    +
    +
    + + +
    +
    +

    +
    +
    + + +
    +
    +

    + + +{% endblock %} \ No newline at end of file diff --git a/templates/frontend/user/parrainage.html.twig b/templates/frontend/user/parrainage.html.twig new file mode 100644 index 0000000..d6c9cae --- /dev/null +++ b/templates/frontend/user/parrainage.html.twig @@ -0,0 +1,67 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Parrainer un ami(e) {% endblock %} + +{% block content %} + + + +
    + + +



    + +
    +{% endblock %} \ No newline at end of file diff --git a/templates/frontend/user/update_password.html.twig b/templates/frontend/user/update_password.html.twig new file mode 100644 index 0000000..b410b12 --- /dev/null +++ b/templates/frontend/user/update_password.html.twig @@ -0,0 +1,75 @@ +{% extends 'base_frontend.html.twig' %} + +{% block title %} Changement de mot de passe {% endblock %} + +{% block content %} + + + +
    + + +



    + +
    +{% endblock %} \ No newline at end of file diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100755 index 0000000..47a5855 --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,13 @@ +bootEnv(dirname(__DIR__).'/.env'); +} + +if ($_SERVER['APP_DEBUG']) { + umask(0000); +} diff --git a/translations/.gitignore b/translations/.gitignore new file mode 100755 index 0000000..e69de29 diff --git a/webpack.config.js b/webpack.config.js new file mode 100755 index 0000000..109c234 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,91 @@ +const Encore = require('@symfony/webpack-encore'); + +// Manually configure the runtime environment if not already configured yet by the "encore" command. +// It's useful when you use tools that rely on webpack.config.js file. +if (!Encore.isRuntimeEnvironmentConfigured()) { + Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'dev'); +} + +Encore + // directory where compiled assets will be stored + .setOutputPath('public/build/') + // public path used by the web server to access the output path + .setPublicPath('/build') + // only needed for CDN's or subdirectory deploy + //.setManifestKeyPrefix('build/') + + /* + * ENTRY CONFIG + * + * Each entry will result in one JavaScript file (e.g. app.js) + * and one CSS file (e.g. app.css) if your JavaScript imports CSS. + */ + .addEntry('app_frontend', './assets/modules/frontend/app_frontend.js') + .addEntry('app_frontend_article_service', './assets/modules/frontend/app_frontend_article_service.js') + + + .addEntry('app_backend', './assets/modules/backend/app_backend.js') + .addEntry('app_backend_dashboard', './assets/modules/backend/app_backend_dashboard.js') + .addEntry('app_backend_annonce', './assets/modules/backend/app_backend_annonce.js') + .addEntry('app_backend_article_service', './assets/modules/backend/app_backend_article_service.js') + .addEntry('app_backend_other', './assets/modules/backend/app_backend_other.js') + + // enables the Symfony UX Stimulus bridge (used in assets/bootstrap.js) + .enableStimulusBridge('./assets/controllers.json') + + // When enabled, Webpack "splits" your files into smaller pieces for greater optimization. + .splitEntryChunks() + + // will require an extra script tag for runtime.js + // but, you probably want this, unless you're building a single-page app + .enableSingleRuntimeChunk() + + /* + * FEATURE CONFIG + * + * Enable & configure other features below. For a full + * list of features, see: + * https://symfony.com/doc/current/frontend.html#adding-more-features + */ + .cleanupOutputBeforeBuild() + .enableBuildNotifications() + .enableSourceMaps(!Encore.isProduction()) + // enables hashed filenames (e.g. app.abc123.css) + .enableVersioning(Encore.isProduction()) + + // configure Babel + // .configureBabel((config) => { + // config.plugins.push('@babel/a-babel-plugin'); + // }) + + // enables and configure @babel/preset-env polyfills + .configureBabelPresetEnv((config) => { + config.useBuiltIns = 'usage'; + config.corejs = '3.23'; + }) + + // enables Sass/SCSS support + .enableSassLoader() + + // uncomment if you use TypeScript + //.enableTypeScriptLoader() + + // uncomment if you use React + //.enableReactPreset() + + // uncomment to get integrity="..." attributes on your script & link tags + // requires WebpackEncoreBundle 1.4 or higher + //.enableIntegrityHashes(Encore.isProduction()) + + // uncomment if you're having problems with a jQuery plugin + .autoProvideVariables({ + $: 'jquery', + jQuery: 'jquery', + 'window.jQuery': 'jquery', + }) + + + +; + +module.exports = Encore.getWebpackConfig();