diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index bb8c6213..00000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -*.js linguist-language=java -*.css linguist-language=java diff --git a/.github/ISSUE_TEMPLATE/----.md b/.github/ISSUE_TEMPLATE/----.md deleted file mode 100644 index cf6c520c..00000000 --- a/.github/ISSUE_TEMPLATE/----.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: 普通反馈 -about: Describe this issue template's purpose here. -title: '' -labels: '' -assignees: '' - ---- - - diff --git a/.github/ISSUE_TEMPLATE/bug---.md b/.github/ISSUE_TEMPLATE/bug---.md deleted file mode 100644 index b64185d9..00000000 --- a/.github/ISSUE_TEMPLATE/bug---.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -name: Bug 反馈 -about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] - -**Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] - -**Additional context** -Add any other context about the problem here. diff --git a/.gitignore b/.gitignore index a9da66c8..4c8b07b8 100644 --- a/.gitignore +++ b/.gitignore @@ -16,43 +16,12 @@ nbproject/private/ build/ nbbuild/ +dist/ nbdist/ .nb-gradle/ -#### Maven ### -target/ -pom.xml.tag -pom.xml.releaseBackup -pom.xml.versionsBackup -pom.xml.next -release.properties -dependency-reduced-pom.xml -buildNumber.properties -.mvn/timing.properties -.mvn/wrapper/maven-wrapper.jar - ###my own### logs upload target - -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* \ No newline at end of file +tale.sql \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..088f8f40 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,5 @@ +language: java +jdk: + - oraclejdk8 +script: + - mvn clean package -Dmaven.test.skip=true diff --git a/LICENSE b/LICENSE index 261eeb9e..8dada3ed 100644 --- a/LICENSE +++ b/LICENSE @@ -178,7 +178,7 @@ APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" + boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index bd926db1..01f2acf0 100644 --- a/README.md +++ b/README.md @@ -1,192 +1,82 @@ -# Spring Boot Projects - -该仓库中主要是 Spring Boot 的入门学习教程以及一些常用的 Spring Boot 实战项目教程,包括 Spring Boot 使用的各种示例代码,同时也包括一些实战项目的项目源码和效果展示,实战项目包括基本的 Web 开发以及目前大家普遍使用的前后端分离实践项目等,后续会根据大家的反馈继续增加一些实战项目源码,摆脱各种 Hello World 入门案例的束缚,真正的掌握 Spring Boot 开发。 - -实战项目源码都已升级至 Spring Boot 3.x 版本,本仓库中的 Spring Boot 入门案例也已经升级至 Spring Boot 3.x 版本,Java 最低版本要求为 17,请知悉,想要学习和使用 Spring Boot 2.x 版本请自行切换分支。。 - -## 项目导航 - -[Spring Boot 入门小案例](./SpringBoot入门案例源码) | [Spring Boot 入门小案例](./SpringBoot入门案例源码) | [Spring Boot 整合案例系列2](./玩转SpringBoot系列案例源码) | [Spring Boot 前后端分离项目实践](./SpringBoot前后端分离实战项目源码) | [Spring Boot 咨询发布系统项目实践](./SpringBoot咨询发布系统实战项目源码)  |  [Spring Boot + Mybatis + Thymeleaf 实现的开源博客系统](https://github.com/ZHENFENG13/My-Blog) | [Spring Boot + Mybatis + Thymeleaf 实现的 BBS 论坛系统](https://github.com/ZHENFENG13/My-BBS) | [Spring Boot + Mybatis + Thymeleaf 仿知乎专栏项目](https://github.com/ZHENFENG13/My-Column) | [Spring Boot + layui 实现的后台管理系统](https://github.com/ZHENFENG13/My-Blog-layui)  |  [Spring Boot 大型商城项目实践](https://github.com/newbee-ltd/newbee-mall) |  [Spring Boot + Vue 前后端分离商城项目](https://github.com/newbee-ltd/newbee-mall-vue-app) |  [Spring Boot + Vue3 前后端分离商城项目](https://github.com/newbee-ltd/newbee-mall-vue3-app) |  [Github地址](https://github.com/ZHENFENG13/spring-boot-projects)  |  [码云 Gitee 地址](https://gitee.com/zhenfeng13/spring-boot-projects) - ---- - -#### 项目演示 - -- [Spring Boot 前后端分离项目预览](https://www.bilibili.com/video/av52551579) -- [Spring Boot 咨询发布系统项目预览](https://www.bilibili.com/video/av52551450) -- [Spring Boot 开源博客系统预览](https://www.bilibili.com/video/av52551095) -- [Spring Boot 商城项目总览](https://edu.csdn.net/course/play/26258/326466) -- [Spring Boot 商城系统介绍](https://edu.csdn.net/course/play/26258/326467) -- [Spring Boot 商城后台管理系统介绍](https://edu.csdn.net/course/play/26258/328801) - ---- - -#### Spring Boot 实战项目源码 - -- [前后端分离项目](./SpringBoot前后端分离实战项目源码/spring-boot-project-front-end&back-end) -- [咨询发布项目](./SpringBoot咨询发布系统实战项目源码/springboot-project-news-publish-system) -- [博客系统](https://github.com/ZHENFENG13/My-Blog) -- [BBS 论坛系统](https://github.com/ZHENFENG13/My-BBS) -- [仿知乎专栏项目](https://github.com/ZHENFENG13/My-Column) -- [Spring Boot + layui 实现的后台管理系统](https://github.com/ZHENFENG13/My-Blog-layui) -- [Spring Boot 大型商城项目](https://github.com/newbee-ltd/newbee-mall) -- [Spring Boot + Vue 前后端分离商城项目](https://github.com/newbee-ltd/newbee-mall-vue-app) -- [Spring Boot + Vue3 前后端分离商城项目](https://github.com/newbee-ltd/newbee-mall-vue3-app) - ---- - -## Spring Boot 基础使用案例 - -**示例代码** - -- [spring-boot-hello](./SpringBoot入门案例源码/spring-boot-helloworld):Spring Boot 第一个案例代码 -- [spring-boot-logging](./玩转SpringBoot系列案例源码/spring-boot-logging):Spring Boot 基础开发之日志输出案例 -- [spring-boot-test](./玩转SpringBoot系列案例源码/spring-boot-test):Spring Boot 基础开发之单元测试案例 -- [spring-boot-static-resources](./SpringBoot入门案例源码/spring-boot-static-resources):Spring Boot 基础开发之静态资源处理案例 -- [spring-boot-ajax](./SpringBoot入门案例源码/spring-boot-ajax):Spring Boot 项目实践之 Ajax 技术使用教程 -- [spring-boot-message-converter](./玩转SpringBoot系列案例源码/spring-boot-message-converter):Spring Boot 基础开发之消息转换器案例 -- [spring-boot-jdbc](./SpringBoot入门案例源码/spring-boot-jdbc):Spring Boot 连接数据库以及在 Spring Boot 项目中操作数据库 -- [spring-boot-druid](./玩转SpringBoot系列案例源码/spring-boot-druid):Spring Boot 中使用自定义 Druid 数据源案例 -- [spring-boot-mybatis](./SpringBoot入门案例源码/spring-boot-mybatis):Spring Boot 整合 MyBatis 操作数据库案例 -- [spring-boot-transaction](./玩转SpringBoot系列案例源码/spring-boot-transaction):Spring Boot 中的事务处理案例 -- [spring-boot-redis](./玩转SpringBoot系列案例源码/spring-boot-redis):Spring Boot 整合 Redis 操作缓存模块 -- [spring-boot-schedule](./玩转SpringBoot系列案例源码/spring-boot-schedule):Spring Boot 项目开发之@Scheduled实现定时任务案例 -- [spring-boot-quartz](./玩转SpringBoot系列案例源码/spring-boot-quartz):Spring Boot 项目开发之Quartz定时任务案例 -- [spring-boot-error-page](./玩转SpringBoot系列案例源码/spring-boot-error-page):Spring Boot 自定义错误页面案例 -- [spring-boot-swagger](./玩转SpringBoot系列案例源码/spring-boot-swagger):Spring Boot 集成 Swagger 生成接口文档案例 -- [spring-boot-file-upload](./SpringBoot入门案例源码/spring-boot-file-upload):Spring Boot 处理文件上传及路径回显 -- [spring-boot-RESTful-api](./SpringBoot入门案例源码/spring-boot-RESTful-api) :Spring Boot 项目实践之 RESTful API 设计与实现 -- [spring-boot-web-jsp](./玩转SpringBoot系列案例源码/spring-boot-web-jsp) :Spring Boot 整合 JSP 开发 web 项目 -- [spring-boot-web-thymeleaf](./玩转SpringBoot系列案例源码/spring-boot-web-thymeleaf) :Spring Boot 整合 Thymeleaf 案例 -- [spring-boot-web-thymeleaf-syntax](./玩转SpringBoot系列案例源码/spring-boot-web-thymeleaf-syntax) :Thymeleaf 语法详解 -- [spring-boot-web-freemarker](./玩转SpringBoot系列案例源码/spring-boot-web-freemarker) :Spring Boot 整合 FreeMarker 案例 -- [spring-boot-admin](./玩转SpringBoot系列案例源码/spring-boot-admin) :Spring Boot Admin 整合使用案例 - -这些案例主要是为了让大家能够掌握 Spring Boot 的开发和使用,旨在让读者更加熟悉 Spring Boot 及企业开发中需要注意的事项并具有使用 Spring Boot 技术进行大部分企业项目功能开发的能力。 - -关注公众号:**程序员十三**,回复"勾搭"进群交流。 - -![wx-gzh](https://newbee-mall.oss-cn-beijing.aliyuncs.com/wx-gzh/%E7%A8%8B%E5%BA%8F%E5%91%98%E5%8D%81%E4%B8%89-%E5%85%AC%E4%BC%97%E5%8F%B7.png) - ---- - -## 开发文档 - -### 《SpringBoot + Mybatis + Thymeleaf 搭建美观实用的个人博客》 - -[![lesson-03](https://newbee-mall.oss-cn-beijing.aliyuncs.com/poster/store/lesson-03.png)](https://www.lanqiao.cn/courses/1367) - -- [**第01课:Spring Boot 搭建简洁实用的个人博客系统导读**](https://www.lanqiao.cn/courses/1367) -- [第02课:快速构建 Spring Boot 应用](https://www.lanqiao.cn/courses/1367) -- [第03课:Spring Boot 项目开发之web项目开发讲解](https://www.lanqiao.cn/courses/1367) -- [第04课:Spring Boot 整合 Thymeleaf 模板引擎](https://www.lanqiao.cn/courses/1367) -- [第05课:Spring Boot 处理文件上传及路径回显](https://www.lanqiao.cn/courses) -- [第06课:Spring Boot 自动配置数据源及操作数据库](https://www.lanqiao.cn/courses/1367) -- [第07课:Spring Boot 整合 MyBatis 操作数据库](https://www.lanqiao.cn/courses/1367) -- [第08课:Mybatis-Generator 自动生成代码](https://www.lanqiao.cn/courses/1367) -- [第09课:Spring Boot 中的事务处理](https://www.lanqiao.cn/courses/1367) -- [第10课:Spring Boot 项目实践之 Ajax 技术使用教程](https://www.lanqiao.cn/courses/1367) -- [第11课:Spring Boot 项目实践之 RESTful API 设计与实现](https://www.lanqiao.cn/courses/1367) -- [第12课:Spring Boot 博客系统项目开发之分页功能实现](https://www.lanqiao.cn/courses/1367) -- [第13课:Spring Boot 博客系统项目开发之验证码功能](https://www.lanqiao.cn/courses/1367) -- [第14课:Spring Boot 博客系统项目开发之登录模块实现](https://www.lanqiao.cn/courses/1367) -- [第15课:Spring Boot 博客系统项目开发之登陆拦截器](https://www.lanqiao.cn/courses/1367) -- [第16课:Spring Boot 博客系统项目开发之分类功能实现](https://www.lanqiao.cn/courses/1367) -- [第17课:Spring Boot 博客系统项目开发之标签功能实现](https://www.lanqiao.cn/courses/1367) -- [第18课:Spring Boot 博客系统项目开发之文章编辑功能](https://www.lanqiao.cn/courses/1367) -- [第19课:Spring Boot 博客系统项目开发之文章编辑完善](https://www.lanqiao.cn/courses/1367) -- [第20课:Spring Boot 博客系统项目开发之文章模块实现](https://www.lanqiao.cn/courses/1367) -- [第21课:Spring Boot 博客系统项目开发之友链模块实现](https://www.lanqiao.cn/courses/1367) -- [第22课:Spring Boot 博客系统项目开发之网站首页制作](https://www.lanqiao.cn/courses/1367) -- [第23课:Spring Boot 博客系统项目开发之分页及侧边栏制作](https://www.lanqiao.cn/courses/1367) -- [第24课:Spring Boot 博客系统项目开发之搜索页面制作](https://www.lanqiao.cn/courses/1367) -- [第25课:Spring Boot 博客系统项目开发之文章详情页制作](https://www.lanqiao.cn/courses/1367) -- [第26课:Spring Boot 博客系统项目开发之错误页面制作](https://www.lanqiao.cn/courses/1367) -- [第27课:Spring Boot 博客系统项目开发之评论功能实现](https://www.lanqiao.cn/courses/1367) -- [第28课:Spring Boot 博客系统项目开发之项目打包部署](https://www.lanqiao.cn/courses/1367) - -### 《SpringBoot + Mybatis + Thymeleaf 开发 BBS 论坛项目》 - -[![lesson-11](https://newbee-mall.oss-cn-beijing.aliyuncs.com/poster/store/lesson-11.png)](https://www.shiyanlou.com/courses/4830) - -- [**第01课:Spring Boot 技术栈详解**](https://www.shiyanlou.com/courses/4830) -- [第02课:快速构建 Spring Boot 应用](https://www.shiyanlou.com/courses/4830) -- [第03课:Spring Boot 项目开发之Web项目开发讲解](https://www.shiyanlou.com/courses/4830) -- [第04课:Spring Boot 整合 Thymeleaf 模板引擎](https://www.shiyanlou.com/courses/4830) -- [第05课:Thymeleaf 语法详解](https://www.shiyanlou.com/courses/4830) -- [第06课:Spring Boot 自动配置数据源及操作数据库](https://www.shiyanlou.com/courses/4830) -- [第07课:Spring Boot 整合 MyBatis 操作数据库](https://www.shiyanlou.com/courses/4830) -- [第08课:分页功能的设计与实现](https://www.shiyanlou.com/courses/4830) -- [第09课:BBS论坛项目开发之验证码功能](https://www.shiyanlou.com/courses/4830) -- [第10课:BBS论坛项目开发之前端技术选型及源码目录详解](https://www.shiyanlou.com/courses/4830) -- [第11课:BBS论坛项目开发之用户注册模块实现](https://www.shiyanlou.com/courses/4830) -- [第12课:BBS论坛项目开发之用户登录模块实现](https://www.shiyanlou.com/courses/4830) -- [第13课:BBS论坛项目开发之用户登录拦截器](https://www.shiyanlou.com/courses/4830) -- [第14课:BBS论坛项目实战之处理文件上传及路径回显](https://www.shiyanlou.com/courses/4830) -- [第15课:BBS论坛项目实战之个人中心页面制作](https://www.shiyanlou.com/courses/4830) -- [第16课:富文本编辑器 wangEditor 整合](https://www.shiyanlou.com/courses/4830) -- [第17课:BBS论坛项目实战之论坛首页开发](https://www.shiyanlou.com/courses/4830) -- [第18课:BBS论坛项目实战之帖子发布功能开发](https://www.shiyanlou.com/courses/4830) -- [第19课:BBS论坛项目实战之帖子详情和修改功能开发](https://www.shiyanlou.com/courses/4830) -- [第20课:BBS论坛项目实战之评论功能开发](https://www.shiyanlou.com/courses/4830) - -### 《Spring Boot 前后端分离项目实践》 - -[![lesson-01](https://newbee-mall.oss-cn-beijing.aliyuncs.com/poster/store/lesson-springboot3-01.png)](https://www.lanqiao.cn/courses/1244) - -- [**开篇词:SpringBoot入门及前后端分离项目实践导读**](https://www.lanqiao.cn/courses/1244) -- [第02课:快速认识 Spring Boot 技术栈](https://www.lanqiao.cn/courses/1244) -- [第03课:开发环境搭建](https://www.lanqiao.cn/courses/1244) -- [第04课:快速构建 Spring Boot 应用](https://www.lanqiao.cn/courses/1244) -- [第05课:Spring Boot 之基础 web 功能开发](https://www.lanqiao.cn/courses) -- [第06课:Spring Boot 之数据库连接操作](https://www.lanqiao.cn/courses/1244) -- [第07课:Spring Boot 整合 MyBatis 操作数据库](https://www.lanqiao.cn/courses/1244) -- [第08课:Spring Boot 处理文件上传及路径回显](https://www.lanqiao.cn/courses/1244) -- [第09课:Spring Boot 项目实践之前后端分离详解](https://www.lanqiao.cn/courses/1244) -- [第10课:Spring Boot 项目实践之 Ajax 技术使用教程](https://www.lanqiao.cn/courses/1244) -- [第11课:Spring Boot 项目实践之 RESTful API 设计与实现](https://www.lanqiao.cn/courses/1244) -- [第12课:Spring Boot 项目实践之登录模块实现](https://www.lanqiao.cn/courses/1244) -- [第13课:Spring Boot 项目实践之分页功能实现](https://www.lanqiao.cn/courses/1244) -- [第14课:Spring Boot 项目实践之 jqgrid 分页整合](https://www.lanqiao.cn/courses/1244) -- [第15课:Spring Boot 项目实践之用户编辑功能实现](https://www.lanqiao.cn/courses/1244) -- [第16课:Spring Boot 项目实践之用户管理模块实现](https://www.lanqiao.cn/courses/1244) -- [第17课:Spring Boot 项目实践之图片管理模块](https://www.lanqiao.cn/courses/1244) -- [第18课:Spring Boot 项目实践之信息管理模块实现](https://www.lanqiao.cn/courses/1244) - -### 《25 个实验带你轻松玩转 Spring Boot》 - -[![lesson-02](https://newbee-mall.oss-cn-beijing.aliyuncs.com/poster/store/lesson-springboot3-02.png)](https://www.lanqiao.cn/courses/1274) - -- [**开篇词:《25 个实验带你轻松玩转 Spring Boot》导读**](https://www.lanqiao.cn/courses/1274) -- [第02课:Spring Boot 项目开发环境搭建](https://www.lanqiao.cn/courses/1274) -- [第03课:快速构建 Spring Boot 应用](https://www.lanqiao.cn/courses/1274) -- [第04课:Spring Boot 基础功能开发](https://www.lanqiao.cn/courses/1274) -- [第05课:Spring Boot 项目开发之 web 项目开发讲解](https://www.lanqiao.cn/courses/1274) -- [第06课:Spring Boot 整合 JSP 开发 web 项目](https://www.lanqiao.cn/courses/1274) -- [第07课:模板引擎介绍及 Spring Boot 整合 Thymeleaf](https://www.lanqiao.cn/courses/1274) -- [第08课:Thymeleaf 语法详解](https://www.lanqiao.cn/courses/1274) -- [第09课:FreeMarker 模板引擎整合使用教程](https://www.lanqiao.cn/courses/1274) -- [第10课:Spring Boot 处理文件上传及路径回显](https://www.lanqiao.cn/courses/1274) -- [第11课:Spring Boot 自动配置数据源及操作数据库](https://www.lanqiao.cn/courses/1274) -- [第12课:Spring Boot 整合 Druid 数据源](https://www.lanqiao.cn/courses/1274) -- [第13课:Spring Boot 整合 MyBatis 操作数据库](https://www.lanqiao.cn/courses/1274) -- [第14课:Spring Boot 中的事务处理](https://www.lanqiao.cn/courses/1274) -- [第15课:Spring Boot 整合 Redis 操作缓存模块](https://www.lanqiao.cn/courses/1274) -- [第16课:Spring Boot 项目开发之实现定时任务](https://www.lanqiao.cn/courses/1274) -- [第17课:Spring Boot 自定义错误页面](https://www.lanqiao.cn/courses/1274) -- [第18课:Spring Boot 集成 Swagger 生成接口文档](https://www.lanqiao.cn/courses/1274) -- [第19课:Spring Boot 项目打包部署介绍](https://www.lanqiao.cn/courses/1274) -- [第20课:Spring Boot Admin 介绍及整合使用](https://www.lanqiao.cn/courses/1274) -- [第21课:Spring Boot 资讯管理信息系统开发实战(一)](https://www.lanqiao.cn/courses/1274) -- [第22课:Spring Boot 资讯管理信息系统开发实战(二)](https://www.lanqiao.cn/courses/1274) -- [第23课:Spring Boot 资讯管理信息系统开发实战(三)](https://www.lanqiao.cn/courses/1274) -- [第24课:Spring Boot 资讯管理信息系统开发实战(四)](https://www.lanqiao.cn/courses/1274) - ---- - -## 交流 - -> 大家有任何问题或者建议都可以在 [issues](https://github.com/ZHENFENG13/spring-boot-projects/issues) 中反馈给我,我会慢慢完善这个 Spring Boot 仓库。 - -- 我的邮箱:2449207463@qq.com -- QQ技术交流群:719099151 784785001 +# My Blog + +My Blog是由Docker+SpringBoot+Mybatis+thymeleaf等技术实现的Java博客系统,本来是一个docker和springboot的实战练习项目,目前已经开源,功能齐全、部署简单及完善的代码,一定会给使用者无与伦比的体验,如果觉得这个项目不错,请为它[点赞](https://github.com/ZHENFENG13/My-Blog/stargazers)支持。 + +- **你可以拿它作为博客模板,因为My Blog界面十分美观简洁,满足私人博客的一切要求;** +- **你也可以把它作为springboot技术的学习项目,My Blog也足够符合要求,且代码和功能完备;** +- **你还可以将其视为一个docker技术的练手教程,体验和使用红极一时的虚拟容器技术,My Blog中脚本和文档十分完善并且持续更新。** + +演示站点:http://13blog.site + +[![Build Status](https://travis-ci.org/ZHENFENG13/My-Blog.svg?branch=master)](https://travis-ci.org/ZHENFENG13/My-Blog) +![Version 3.2.0](https://img.shields.io/badge/version-3.2.0-yellow.svg) +[![License](https://img.shields.io/badge/license-apache-blue.svg)](https://github.com/ZHENFENG13/My-Blog/blob/master/LICENSE) + +#### 相关博客文章 + +* [x] [Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦](http://www.cnblogs.com/han-1034683568/p/6840493.html) +* [x] [My-Blog搭建过程:如何让一个网站从零到可以上线访问](http://www.cnblogs.com/han-1034683568/p/6885545.html) +* [x] [利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置](http://www.cnblogs.com/han-1034683568/p/6941337.html) +* [x] [Java开源博客My-Blog之docker容器组件化修改](http://www.cnblogs.com/han-1034683568/p/7102765.html) +* [x] [Java开源博客My-Blog之mysql容器重复初始化的严重bug修复过程](http://www.cnblogs.com/han-1034683568/p/7231895.html) +* [x] [Springboot与Thymeleaf模板引擎整合基础教程](http://www.cnblogs.com/han-1034683568/p/7520012.html) +* [x] [thymeleaf模板引擎调用java类中的方法](http://www.cnblogs.com/han-1034683568/p/7527564.html) + +#### 捐赠 + +**网站的持续运行需要各项基础设施的搭建,而服务期的续费和维护及各种配套服务的购买也需要一定的费用,希望朋友们给予一点支持,谢谢!** + +**支付宝:**zhifubao**微信支付:**wxpay + +# Quick Start + +* [x] [1.如何部署My Blog](https://github.com/ZHENFENG13/My-Blog/wiki/1-%E5%A6%82%E4%BD%95%E9%83%A8%E7%BD%B2My-Blog) + - [1.0 基础环境搭建](https://github.com/ZHENFENG13/My-Blog/wiki/1.0-%E5%9F%BA%E7%A1%80%E7%8E%AF%E5%A2%83) + - [1.1 安装Docker环境](https://github.com/ZHENFENG13/My-Blog/wiki/1.1-安装Docker环境) + - [1.2 安装docker-compose](https://github.com/ZHENFENG13/My-Blog/wiki/1.2-%E5%AE%89%E8%A3%85docker-compose) +* [x] [2.通过共享镜像直接部署My Blog](https://github.com/ZHENFENG13/My-Blog/wiki/2-%E9%80%9A%E8%BF%87%E5%85%B1%E4%BA%AB%E9%95%9C%E5%83%8F%E7%9B%B4%E6%8E%A5%E9%83%A8%E7%BD%B2My-Blog) +* [x] [3.1 非docker环境运行My Blog](https://github.com/ZHENFENG13/My-Blog/wiki/3.1-%E9%9D%9Edocker%E7%8E%AF%E5%A2%83%E8%BF%90%E8%A1%8CMy-Blog) +* [x] [3.2 将My Blog部署到tomcat(非docker环境)](https://github.com/ZHENFENG13/My-Blog/wiki/3.2-%E5%B0%86My-Blog%E9%83%A8%E7%BD%B2%E5%88%B0tomcat(%E9%9D%9Edocker%E7%8E%AF%E5%A2%83)) +* [x] [4.开发环境运行代码](https://github.com/ZHENFENG13/My-Blog/wiki/4-%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E8%BF%90%E8%A1%8C%E4%BB%A3%E7%A0%81) +* [x] [5.博客上线及备案相关流程](https://github.com/ZHENFENG13/My-Blog/wiki/%E4%B8%8A%E7%BA%BF%E5%8F%8A%E5%A4%87%E6%A1%88%E7%9B%B8%E5%85%B3) + +[**常见问题**](https://github.com/ZHENFENG13/My-Blog/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98) + +# Preview + +**首页:** +![首页](http://images2015.cnblogs.com/blog/859549/201705/859549-20170511122850691-373579903.png) +**文章详情页:** +![文章页](http://images2015.cnblogs.com/blog/859549/201705/859549-20170510225208988-1419050749.png) +**登录页:** +![登录页](http://images2015.cnblogs.com/blog/859549/201705/859549-20170511122916004-738411708.png) +**文章列表页:** +![文章列表页](http://images2015.cnblogs.com/blog/859549/201705/859549-20170510225259722-688622603.png) +**文章编辑页:** +![文章编辑页](http://images2015.cnblogs.com/blog/859549/201705/859549-20170510225330566-559394265.png) +**分类编辑:** +![分类编辑](http://images2015.cnblogs.com/blog/859549/201705/859549-20170510225357207-57945087.png) + +# Log + +2017-03-27 添加docker整合
+2017-03-28 schema.sql修改
+2017-03-28 install步骤,数据库地址配置时:mysql地址写为mysql容器的名字即可,即mysql:3306
+2017-03-29 修复添加评论时空指针异常的bug
+2017-03-30 添加预览功能,限制文章浏览,如果为草稿状态前端即使通过正确的url也不能浏览
+2017-03-31 文章浏览数不变的bug,后期浏览数及评论这些参数放到缓存里去
+2017-04-01 添加druid数据源
+2017-04-02 重写mysql的Dockerfile文件,修改install过程
+2017-04-15 bug修复,footer样式调整
+2017-04-17 logo文件修改,附件上传功能
+2017-04-18 评论功能及页面修改
+2017-04-20 域名及网站的公网备案
+2017-04-25 docker-compose实现多容器部署
+2017-05-09 删除原install过程,改为脚本自动部署及初始化
+2017-05-10 docker容器时区不同步问题修复,文件整理
+2017-05-11 文件整理,排版和文案修改
+2017-05-13 正式上线啦
+2017-05-15 部署文档
+2017-05-21 My-Blog上线过程记录
+2017-06-30 目录调整:docker组件化
+2017-07-20 问题修复:docker-compose重启时mysql容器中数据被删除并初始化的问题
diff --git "a/SpringBoot+Vue3+Element Plus\344\274\201\344\270\232\347\272\247\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/README.md" "b/SpringBoot+Vue3+Element Plus\344\274\201\344\270\232\347\272\247\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/README.md" deleted file mode 100644 index 60274083..00000000 --- "a/SpringBoot+Vue3+Element Plus\344\274\201\344\270\232\347\272\247\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/README.md" +++ /dev/null @@ -1,91 +0,0 @@ -# vue3-admin - -Vue3 + Vite + Vue-Router + Element-Plus + Echarts + Axios 后台管理系统。 - -![vue3-admin-summary](https://13-doc.oss-cn-beijing.aliyuncs.com/images/2022/03/vue3-admin-summary.png) - -![Build Status](https://img.shields.io/badge/build-passing-green.svg) -![Version 3.0.0](https://img.shields.io/badge/version-3.0.0-yellow.svg) -[![License](https://img.shields.io/badge/license-GPL3.0-blue.svg)](https://github.com/newbee-ltd/vue3-admin/blob/main/LICENSE) - -## 源码地址 - -> vue3-admin 在 GitHub 和国内的码云都创建了代码仓库,如果有人访问 GitHub 比较慢的话,建议在 Gitee 上查看该项目,两个仓库会保持同步更新。 - -- [vue3-admin in GitHub](https://github.com/newbee-ltd/vue3-admin) -- [vue3-admin in Gitee](https://gitee.com/newbee-ltd/vue3-admin) - -## 开发及部署文档 - -- [开篇词:通关 Vue3 企业级项目开发,升职加薪快人一步](https://juejin.cn/book/6933939264455442444) -- [项目须知和课程约定](https://juejin.cn/book/6933939264455442444) -- [大势所趋:“前后端分离”开发模式](https://juejin.cn/book/6933939264455442444) -- [Vue3 简介及开发环境搭建](https://juejin.cn/book/6933939264455442444) -- [Vue3 组合 API 入口 Setup 浅析](https://juejin.cn/book/6933939264455442444) -- [Vue3 之响应式系统 API](https://juejin.cn/book/6933939264455442444) -- [Vue3 之生命周期钩子函数、提供注入](https://juejin.cn/book/6933939264455442444) -- [Vue3 性能和业务层面上的提升](https://juejin.cn/book/6933939264455442444) -- [Vite2 原理分析及简单插件编写](https://juejin.cn/book/6933939264455442444) -- [Vue-Router4 使用方法及路由原理](https://juejin.cn/book/6933939264455442444) -- [Vue3 实战项目启动篇](https://juejin.cn/book/6933939264455442444) -- [后端 API 开发技术选型之 Spring Boot](https://juejin.cn/book/6933939264455442444) -- [后端基础运行环境和开发工具准备](https://juejin.cn/book/6933939264455442444) -- [Spring Boot 项目搭建及快速上手](https://juejin.cn/book/6933939264455442444) -- [Spring Boot 实践之 Web 功能开发](https://juejin.cn/book/6933939264455442444) -- [Spring Boot 实践之文件上传处理](https://juejin.cn/book/6933939264455442444) -- [Spring Boot 实践之整合 MyBatis 操作数据库](https://juejin.cn/book/6933939264455442444) -- [Spring Boot 实践之整合 Lombok](https://juejin.cn/book/6933939264455442444) -- [Spring Boot 实践之整合 Swagger 生成接口文档](https://juejin.cn/book/6933939264455442444) -- [后端 API 项目启动和运行注意事项](https://juejin.cn/book/6933939264455442444) -- [接口参数处理和统一响应结果](https://juejin.cn/book/6933939264455442444) -- [API 接口开发实战之用户登录接口开发](https://juejin.cn/book/6933939264455442444) -- [API 接口开发实战之用户身份认证详解](https://juejin.cn/book/6933939264455442444) -- [API 接口开发实战之轮播图管理模块接口开发](https://juejin.cn/book/6933939264455442444) -- [API 接口开发实战之商品分类管理模块接口开发](https://juejin.cn/book/6933939264455442444) -- [API 接口开发实战之商品管理模块接口开发](https://juejin.cn/book/6933939264455442444) -- [API 接口开发实战之商品配置管理模块接口开发](https://juejin.cn/book/6933939264455442444) -- [API 接口开发实战之订单管理模块接口开发](https://juejin.cn/book/6933939264455442444) -- [前后端鉴权的四种方式](https://juejin.cn/book/6933939264455442444) -- [Vite2 + Vue3 + Element-Plus 搭建管理后台项目](https://juejin.cn/book/6933939264455442444) -- [Vue3 实战之管理后台左右栏目布局](https://juejin.cn/book/6933939264455442444) -- [Vue3 实战之登录鉴权](https://juejin.cn/book/6933939264455442444) -- [Vue3 实战之首页大盘数据](https://juejin.cn/book/6933939264455442444) -- [Vue3 实战之首页配置](https://juejin.cn/book/6933939264455442444) -- [Vue3 实战之分类管理](https://juejin.cn/book/6933939264455442444) -- [Vue3 实战之商品管理](https://juejin.cn/book/6933939264455442444) -- [Vue3 实战之订单管理](https://juejin.cn/book/6933939264455442444) -- [Vue3 实战之会员管理、账户修改](https://juejin.cn/book/6933939264455442444) -- [pm2 实现一键部署云端服务器](https://juejin.cn/book/6933939264455442444) -- [常见问题汇总讲解](https://juejin.cn/book/6933939264455442444) - -## 联系作者 - -> 大家有任何问题或者建议都可以在 [issues](https://github.com/newbee-ltd/vue3-admin/issues) 中反馈给我,我会慢慢完善这个项目。 - -- 我的邮箱:2449207463@qq.com -- QQ技术交流群:707779034 932227898 552142710 - -关注公众号:**程序员十三**,回复"勾搭"进群交流。 - -![wx-gzh](https://newbee-mall.oss-cn-beijing.aliyuncs.com/wx-gzh/%E7%A8%8B%E5%BA%8F%E5%91%98%E5%8D%81%E4%B8%89-%E5%85%AC%E4%BC%97%E5%8F%B7.png) - -## 软件著作权 - ->本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护! - -![](https://newbee-mall.oss-cn-beijing.aliyuncs.com/poster/store/newbee-mall-copyright.png) - -## 页面展示 - -以下为 vue3-admin 系统的部分页面预览图: - -![preview](https://user-images.githubusercontent.com/10935614/111867147-251df580-89ad-11eb-924f-6140b70a2cc0.png) - -## 感谢 - -- [Vue3](https://vue3js.cn/docs/zh/) -- [Element-Plus](https://element-plus.gitee.io/#/zh-CN) -- [Vite](https://cn.vitejs.dev/) -- [Vue-Router](https://next.router.vuejs.org/zh/index.html) -- [Echarts](https://echarts.apache.org/zh/index.html) -- [Axios](http://www.axios-js.com/) \ No newline at end of file diff --git "a/SpringBoot+Vue3\347\272\277\344\270\212\345\225\206\345\237\216\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/README.md" "b/SpringBoot+Vue3\347\272\277\344\270\212\345\225\206\345\237\216\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/README.md" deleted file mode 100644 index 2519d96b..00000000 --- "a/SpringBoot+Vue3\347\272\277\344\270\212\345\225\206\345\237\216\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/README.md" +++ /dev/null @@ -1,124 +0,0 @@ -![](https://github.com/newbee-ltd/newbee-mall-vue3-app/raw/main/static-files/newbee-mall.png) - -![Build Status](https://img.shields.io/badge/build-passing-green.svg) -![Version 3.0.0](https://img.shields.io/badge/version-3.0.0-yellow.svg) -[![License](https://img.shields.io/badge/license-GPL3.0-blue.svg)](https://github.com/newbee-ltd/newbee-mall-vue3-app/blob/master/LICENSE) - -Vue3 全家桶 + Vant 搭建大型单页面商城项目,新蜂商城 Vue3.2 版本,技术栈为 Vue3.2 + Vue-Router4.x + Pinia + Vant4.x。 - -## 源码地址 - -> newbee-mall-vue3-app 在 GitHub 和国内的码云都创建了代码仓库,如果有人访问 GitHub 比较慢的话,建议在 Gitee 上查看该项目,两个仓库会保持同步更新。 - -- [newbee-mall-vue3-app in GitHub](https://github.com/newbee-ltd/newbee-mall-vue3-app) -- [newbee-mall-vue3-app in Gitee](https://gitee.com/newbee-ltd/newbee-mall-vue3-app) - -## 开发及部署文档 - -- [开篇词:手把手带你搭建Vue3+Spring Boot大型前后端分离项目](https://juejin.im/book/6844733826191589390) -- [项目须知和课程约定](https://juejin.im/book/6844733826191589390) -- [2023年2月小册全新优化升级](https://juejin.im/book/6844733826191589390) -- [全栈开发!你必须要知道的“前后端分离”](https://juejin.im/book/6844733826191589390) -- [前端模块化的发展历史](https://juejin.im/book/6844733826191589390) -- [传统页面和单页面的权衡与抉择](https://juejin.im/book/6844733826191589390) -- [准备工作及基础环境搭建(后端)](https://juejin.im/book/6844733826191589390) -- [Spring Boot 项目初体验--项目搭建及启动](https://juejin.im/book/6844733826191589390) -- [项目编码简化利器!Spring Boot 整合 Lombok](https://juejin.im/book/6844733826191589390) -- [Lombok 插件问题处理](https://juejin.im/book/6844733826191589390) -- [商城后端项目启动和运行注意事项](https://juejin.im/book/6844733826191589390) -- [VSCode 的相关配置及插件介绍](https://juejin.im/book/6844733826191589390) -- [基础篇:Vue 指令](https://juejin.im/book/6844733826191589390) -- [Vue3 新特性介绍](https://juejin.im/book/6844733826191589390) -- [基础篇: CSS 预处理工具Less的介绍及使用](https://juejin.im/book/6844733826191589390) -- [脚手架工具 Vite](https://juejin.im/book/6844733826191589390) -- [Vue-Router 浅析原理及使用](https://juejin.im/book/6844733826191589390) -- [全局状态管理插件 Pinia 简介及使用](https://juejin.im/book/6844733826191589390) -- [商城前端 H5 开发环境搭建及项目启动](https://juejin.im/book/6844733826191589390) -- [前后端交互文档利器!Spring Boot 整合 Swagger](https://juejin.im/book/6844733826191589390) -- [接口参数处理和统一响应结果](https://juejin.im/book/6844733826191589390) -- [口设计规范及接口调用实践](https://juejin.im/book/6844733826191589390) -- [商城开发实战-用户登录接口开发](https://juejin.im/book/6844733826191589390) -- [商城开发实战-用户身份认证详解](https://juejin.im/book/6844733826191589390) -- [商城开发实战-首页模块接口开发](https://juejin.im/book/6844733826191589390) -- [商城开发实战-分类模块接口开发](https://juejin.im/book/6844733826191589390) -- [商城开发实战-商品搜索模块接口开发](https://juejin.im/book/6844733826191589390) -- [商城开发实战-购物车模块接口开发](https://juejin.im/book/6844733826191589390) -- [商城开发实战-个人信息及收货地址接口开发](https://juejin.im/book/6844733826191589390) -- [商城开发实战-下单流程接口开发](https://juejin.im/book/6844733826191589390) -- [商城开发实战-订单处理流程详解](https://juejin.im/book/6844733826191589390) -- [商城移动端开发实战-新蜂商城底部导航(抽离公共组件)](https://juejin.im/book/6844733826191589390) -- [商城移动端开发实战-新蜂商城登录注册页(前端鉴权)](https://juejin.im/book/6844733826191589390) -- [商城移动端开发实战-商城首页制作(轮播图、首页商品列表)](https://juejin.im/book/6844733826191589390) -- [商城移动端开发实战-商品分类页面制作(better-scrol的介绍及使用)](https://juejin.im/book/6844733826191589390) -- [商城移动端开发实战-商品列表页面制作(无限滚动加载)](https://juejin.im/book/6844733826191589390) -- [商城移动端开发实战-商品详情页面制作(Pinia 购物车数量全局管理)](https://juejin.im/book/6844733826191589390) -- [商城移动端开发实战-商城购物车页面制作(购物车页)](https://juejin.im/book/6844733826191589390) -- [商城移动端开发实战-确认订单页面制作](https://juejin.im/book/6844733826191589390) -- [商城移动端开发实战-地址栏管理页面制作](https://juejin.im/book/6844733826191589390) -- [商城移动端开发实战-我的订单页面制作](https://juejin.im/book/6844733826191589390) -- [常见问题汇总讲解](https://juejin.im/book/6844733826191589390) - -## 联系作者 - -> 大家有任何问题或者建议都可以在 [issues](https://github.com/newbee-ltd/newbee-mall-vue3-app/issues) 中反馈给我,我会慢慢完善这个项目。 - -- 我的邮箱:2449207463@qq.com -- QQ技术交流群:932227898 552142710 - -关注公众号:**程序员十三**,回复"勾搭"进群交流。 - -![wx-gzh](https://newbee-mall.oss-cn-beijing.aliyuncs.com/wx-gzh/%E7%A8%8B%E5%BA%8F%E5%91%98%E5%8D%81%E4%B8%89-%E5%85%AC%E4%BC%97%E5%8F%B7.png) - -## 软件著作权 - ->本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护! - -![](https://newbee-mall.oss-cn-beijing.aliyuncs.com/poster/store/newbee-mall-copyright-02.png) - -## 页面展示 - -以下为新蜂商城 Vue3 版本的页面预览: - -- 登录页 - -![](https://github.com/newbee-ltd/newbee-mall-vue3-app/raw/main/static-files/登录.png) - -- 首页 - -![](https://github.com/newbee-ltd/newbee-mall-vue3-app/raw/main/static-files/首页.png) - -- 商品搜索 - -![](https://github.com/newbee-ltd/newbee-mall-vue3-app/raw/main/static-files/商品搜索.png) - -- 商品详情页 - -![](https://github.com/newbee-ltd/newbee-mall-vue3-app/raw/main/static-files/详情页.png) - -- 购物车 - -![](https://github.com/newbee-ltd/newbee-mall-vue3-app/raw/main/static-files/购物车.png) - -- 生成订单 - -![](https://github.com/newbee-ltd/newbee-mall-vue3-app/raw/main/static-files/生成订单.png) - -- 地址管理 - -![](https://github.com/newbee-ltd/newbee-mall-vue3-app/raw/main/static-files/地址管理.png) - -- 订单列表 - -![](https://github.com/newbee-ltd/newbee-mall-vue3-app/raw/main/static-files/订单列表.png) - -- 订单详情 - -![](https://github.com/newbee-ltd/newbee-mall-vue3-app/raw/main/static-files/订单详情.png) - -## 感谢 - -- [Vue](https://github.com/vuejs/vue) -- [Vue-Router](https://github.com/vuejs/vue-router-next) -- [Vuex](https://github.com/vuejs/vuex/tree/4.0) -- [Vant](https://github.com/youzan/vant) -- [better-scroll](https://github.com/ustbhuangyi/better-scroll) \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/README.md" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/README.md" deleted file mode 100644 index da12a8a0..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/README.md" +++ /dev/null @@ -1,56 +0,0 @@ -# Spring Boot 入门案例源码 - -Spring Boot 入门代码,可以直接下载到本地编辑和使用。 - -- [spring-boot-hello](https://github.com/ZHENFENG13/spring-boot-projects/tree/master/SpringBoot入门案例源码/spring-boot-helloworld):Spring Boot 第一个案例代码 -- [spring-boot-static-resources](https://github.com/ZHENFENG13/spring-boot-projects/tree/master/SpringBoot入门案例源码/spring-boot-static-resources):Spring Boot 基础开发之静态资源处理案例 -- [spring-boot-ajax](https://github.com/ZHENFENG13/spring-boot-projects/tree/master/SpringBoot入门案例源码/spring-boot-ajax):Spring Boot 项目实践之 Ajax 技术使用教程 -- [spring-boot-jdbc](https://github.com/ZHENFENG13/spring-boot-projects/tree/master/SpringBoot入门案例源码/spring-boot-jdbc):Spring Boot 连接数据库以及在 Spring Boot 项目中操作数据库 -- [spring-boot-mybatis](https://github.com/ZHENFENG13/spring-boot-projects/tree/master/SpringBoot入门案例源码/spring-boot-mybatis):Spring Boot 整合 MyBatis 操作数据库案例 -- [spring-boot-file-upload](https://github.com/ZHENFENG13/spring-boot-projects/tree/master/SpringBoot入门案例源码/spring-boot-file-upload):Spring Boot 处理文件上传及路径回显 -- [spring-boot-RESTful-api](https://github.com/ZHENFENG13/spring-boot-projects/tree/master/SpringBoot入门案例源码/spring-boot-RESTful-api) :Spring Boot 项目实践之 RESTful API 设计与实现 - - -## 课程介绍 - -本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 个部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 项目实践开发。Spring Boot 介绍、前后端分离、API 规范等内容旨在让读者更加熟悉 SpringBoot 及企业开发中需要注意的事项并具有使用 SpringBoot 技术进行基本功能开发的能力;最后的项目实战为课程的主要部分,会带着大家实际的开发一个前后端分离的 Spring Boot 实践项目,让大家实际操作并从无到有开发一个线上项目,并学习到一定的开发经验以及其中的开发技巧,旨在让读者具有将 Spring Boot 真正应用于项目开发的能力; - -## 课程地址(课程的减免优惠券联系十三进行领取) - -- [**项目演示地址:http://lou.springboot.tech/**](http://lou.springboot.tech/) -- [**课程地址:https://www.shiyanlou.com/courses/1244**](https://www.shiyanlou.com/courses/1244) - -## 课程的五大特色 - -- 实践项目页面美观且实用,交互效果完美 -- 包含从零搭建项目、功能开发到网站上线的完整流程 -- 开发教程详细完整、文档资源齐全 -- 代码+讲解+演示网站全方位保证,向 Hello World 教程说拜拜 -- 丰富你的开发技术栈,提升个人市场价值 - -通过本课程你将学到以下内容: - -- Spring Boot 2 技术栈的使用和开发技巧; -- MySQL 8 数据库的基本使用方法; -- Maven 的配置及使用; -- SpringBoot 基础 web 功能开发; -- SpringBoot 整合MyBatis; -- SpringBoot 文件上传; -- SpringBoot 全局异常处理; -- 前后端分离详解; -- AJAX 异步技术; -- AdminLTE3、Bootstrap 4、SweetAlert、JqGrid、JQuery 等前端框架组件及控件的使用; -- Swagger 在线 API 文档生成; -- Linux 系统部署及发布项目; -- 上线互联网项目的过程实践。 - -熟悉我的朋友应该都知道,我在写教程时一般都是“文章”+“源码”+“演示网站”同时提供的,因此在课程完结后,会将源码全部分享给每一位同学用于学习实践,本课程内容主要是抛砖引玉,根据该实践项目中所讲解的技术和开发技巧以及各个单独的功能点实现,可以结合自身业务将其改造成任何企业开发项目。 - ---- - -## 交流 - -> 大家有任何问题或者建议都可以在 [issues](https://github.com/ZHENFENG13/springboot-projects/issues) 中反馈给我,我会慢慢完善这个 Spring Boot 仓库。 - -- 我的邮箱:2449207463@qq.com -- QQ技术交流群:784785001 diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/pom.xml" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/pom.xml" deleted file mode 100644 index 6fd30d90..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/pom.xml" +++ /dev/null @@ -1,58 +0,0 @@ - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.0.0 - - - cn.lanqiao - springboot3-api-demo - 0.0.1-SNAPSHOT - springboot3-api-demo - Spring Boot 项目实践之 RESTful API 设计与实现 - - UTF-8 - UTF-8 - 17 - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-jdbc - - - - - org.mybatis.spring.boot - mybatis-spring-boot-starter - 3.0.0 - - - - mysql - mysql-connector-java - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/springboot-tb-user-schema.sql" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/springboot-tb-user-schema.sql" deleted file mode 100644 index bd45d552..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/springboot-tb-user-schema.sql" +++ /dev/null @@ -1,12 +0,0 @@ -CREATE DATABASE /*!32312 IF NOT EXISTS*/`springboot3_db` /*!40100 DEFAULT CHARACTER SET utf8 */; - -USE `springboot3_db`; - -DROP TABLE IF EXISTS `tb_user`; - -CREATE TABLE `tb_user` ( - `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键', - `name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '登录名', - `password` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '密码', - PRIMARY KEY (`id`) -) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/Application.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/Application.java" deleted file mode 100644 index f74493a3..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/Application.java" +++ /dev/null @@ -1,15 +0,0 @@ -package cn.lanqiao.springboot3; - -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -@MapperScan("cn.lanqiao.springboot3.dao") -public class Application { - - public static void main(String[] args) { - System.out.println("启动 Spring Boot..."); - SpringApplication.run(Application.class, args); - } -} \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/common/Constants.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/common/Constants.java" deleted file mode 100644 index 47f8778b..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/common/Constants.java" +++ /dev/null @@ -1,16 +0,0 @@ -package cn.lanqiao.springboot3.common; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http:13blog.site - */ -public class Constants { - - public static final int RESULT_CODE_SUCCESS = 200; // 成功处理请求 - public static final int RESULT_CODE_BAD_REQUEST = 412; // 请求错误 - public static final int RESULT_CODE_NOT_LOGIN = 402; // 未登录 - public static final int RESULT_CODE_PARAM_ERROR = 406; // 传参错误 - public static final int RESULT_CODE_SERVER_ERROR = 500; // 服务器错误 -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/common/Result.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/common/Result.java" deleted file mode 100644 index fbdfce2f..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/common/Result.java" +++ /dev/null @@ -1,61 +0,0 @@ -package cn.lanqiao.springboot3.common; - -import java.io.Serializable; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http:13blog.site - */ -public class Result implements Serializable { - private static final long serialVersionUID = 1L; - private int resultCode; - private String message; - private T data; - - public Result() { - } - - public Result(int resultCode, String message) { - this.resultCode = resultCode; - this.message = message; - } - - public int getResultCode() { - return resultCode; - } - - public void setResultCode(int resultCode) { - this.resultCode = resultCode; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public T getData() { - return data; - } - - public void setData(T data) { - this.data = data; - } - - public Result failure(String code) { - return new Result(500, "服务错误"); - } - - @Override - public String toString() { - return "Result{" + - "resultCode=" + resultCode + - ", message='" + message + '\'' + - ", data=" + data + - '}'; - } -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/common/ResultGenerator.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/common/ResultGenerator.java" deleted file mode 100644 index 9574a205..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/common/ResultGenerator.java" +++ /dev/null @@ -1,62 +0,0 @@ -package cn.lanqiao.springboot3.common; - -import org.springframework.util.StringUtils; - -/** - * @note 响应结果生成工具 - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http:13blog.site - */ -public class ResultGenerator { - private static final String DEFAULT_SUCCESS_MESSAGE = "SUCCESS"; - private static final String DEFAULT_FAIL_MESSAGE = "FAIL"; - - public static Result genSuccessResult() { - Result result = new Result(); - result.setResultCode(Constants.RESULT_CODE_SUCCESS); - result.setMessage(DEFAULT_SUCCESS_MESSAGE); - return result; - } - - public static Result genSuccessResult(String message) { - Result result = new Result(); - result.setResultCode(Constants.RESULT_CODE_SUCCESS); - result.setMessage(message); - return result; - } - - public static Result genSuccessResult(Object data) { - Result result = new Result(); - result.setResultCode(Constants.RESULT_CODE_SUCCESS); - result.setMessage(DEFAULT_SUCCESS_MESSAGE); - result.setData(data); - return result; - } - - public static Result genFailResult(String message) { - Result result = new Result(); - result.setResultCode(Constants.RESULT_CODE_SERVER_ERROR); - if (StringUtils.isEmpty(message)) { - result.setMessage(DEFAULT_FAIL_MESSAGE); - } else { - result.setMessage(message); - } - return result; - } - - public static Result genNullResult(String message) { - Result result = new Result(); - result.setResultCode(Constants.RESULT_CODE_BAD_REQUEST); - result.setMessage(message); - return result; - } - - public static Result genErrorResult(int code, String message) { - Result result = new Result(); - result.setResultCode(code); - result.setMessage(message); - return result; - } -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/controller/ApiController.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/controller/ApiController.java" deleted file mode 100644 index 244eb387..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/controller/ApiController.java" +++ /dev/null @@ -1,88 +0,0 @@ -package cn.lanqiao.springboot3.controller; - -import cn.lanqiao.springboot3.common.Result; -import cn.lanqiao.springboot3.common.ResultGenerator; -import cn.lanqiao.springboot3.dao.UserDao; -import cn.lanqiao.springboot3.entity.User; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Controller; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -@Controller -@RequestMapping("/api") -public class ApiController { - - @Resource - UserDao userDao; - - // 查询一条记录 - @RequestMapping(value = "/users/{id}", method = RequestMethod.GET) - @ResponseBody - public Result getOne(@PathVariable("id") Integer id) { - if (id == null || id < 1) { - return ResultGenerator.genFailResult("缺少参数"); - } - User user = userDao.getUserById(id); - if (user == null) { - return ResultGenerator.genFailResult("无此数据"); - } - return ResultGenerator.genSuccessResult(user); - } - - // 查询所有记录 - @RequestMapping(value = "/users", method = RequestMethod.GET) - @ResponseBody - public Result> queryAll() { - List users = userDao.findAllUsers(); - return ResultGenerator.genSuccessResult(users); - } - - // 新增一条记录 - @RequestMapping(value = "/users", method = RequestMethod.POST) - @ResponseBody - public Result insert(@RequestBody User user) { - // 参数验证 - if (StringUtils.isEmpty(user.getName()) || StringUtils.isEmpty(user.getPassword())) { - return ResultGenerator.genFailResult("缺少参数"); - } - return ResultGenerator.genSuccessResult(userDao.insertUser(user) > 0); - } - - // 修改一条记录 - @RequestMapping(value = "/users", method = RequestMethod.PUT) - @ResponseBody - public Result update(@RequestBody User tempUser) { - //参数验证 - if (tempUser.getId() == null || tempUser.getId() < 1 || StringUtils.isEmpty(tempUser.getName()) || StringUtils.isEmpty(tempUser.getPassword())) { - return ResultGenerator.genFailResult("缺少参数"); - } - //实体验证,不存在则不继续修改操作 - User user = userDao.getUserById(tempUser.getId()); - if (user == null) { - return ResultGenerator.genFailResult("参数异常"); - } - user.setName(tempUser.getName()); - user.setPassword(tempUser.getPassword()); - return ResultGenerator.genSuccessResult(userDao.updUser(user) > 0); - } - - // 删除一条记录 - @RequestMapping(value = "/users/{id}", method = RequestMethod.DELETE) - @ResponseBody - public Result delete(@PathVariable("id") Integer id) { - if (id == null || id < 1) { - return ResultGenerator.genFailResult("缺少参数"); - } - return ResultGenerator.genSuccessResult(userDao.delUser(id) > 0); - } - -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/dao/UserDao.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/dao/UserDao.java" deleted file mode 100644 index a7b8fabf..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/dao/UserDao.java" +++ /dev/null @@ -1,50 +0,0 @@ -package cn.lanqiao.springboot3.dao; - -import cn.lanqiao.springboot3.entity.User; - -import java.util.List; - -/** - * @author 13 - * MyBatis 测试 - */ -public interface UserDao { - /** - * 返回数据列表 - * - * @return - */ - List findAllUsers(); - - /** - * 根据主键查询 - * - * @param id - * @return - */ - User getUserById(Integer id); - - /** - * 添加 - * - * @param User - * @return - */ - int insertUser(User User); - - /** - * 修改 - * - * @param User - * @return - */ - int updUser(User User); - - /** - * 删除 - * - * @param id - * @return - */ - int delUser(Integer id); -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/entity/User.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/entity/User.java" deleted file mode 100644 index 9d3225e9..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/java/cn/lanqiao/springboot3/entity/User.java" +++ /dev/null @@ -1,32 +0,0 @@ -package cn.lanqiao.springboot3.entity; - -public class User { - - private Integer id; - private String name; - private String password; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/resources/application.properties" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/resources/application.properties" deleted file mode 100644 index 1e2a10bd..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/resources/application.properties" +++ /dev/null @@ -1,7 +0,0 @@ -# datasource config -spring.datasource.url=jdbc:mysql://localhost:3306/springboot3_db?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.username=root -spring.datasource.password= -# mybatis config -mybatis.mapper-locations=classpath:mapper/*Dao.xml \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/resources/mapper/UserDao.xml" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/resources/mapper/UserDao.xml" deleted file mode 100644 index 1b7d3dc1..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/resources/mapper/UserDao.xml" +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - insert into tb_user(name,password) - values(#{name},#{password}) - - - - update tb_user - set - name=#{name},password=#{password} - where id=#{id} - - - - delete from tb_user where id=#{id} - - - \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/resources/static/api-test.html" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/resources/static/api-test.html" deleted file mode 100644 index ac37deb0..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/main/resources/static/api-test.html" +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - SpringBoot3 | api 请求测试 - - -
-
-
-
-
-
-
-
-
详情查询接口测试
-
-
- -
查询接口返回数据如下:
-

- 发送详情查询请求 -
-
-
-
-
-
-
列表查询接口测试
-
-
-
查询接口返回数据如下:
-

- 发送列表查询请求 -
-
-
-
-
-
-
添加接口测试
-
-
- - -
添加接口返回数据如下:
-

- 发送添加请求 -
-
-
-
-
-
-
修改接口测试
-
-
- - - -
修改接口返回数据如下:
-

- 发送修改请求 -
-
-
-
-
-
-
删除接口测试
-
-
- -
删除接口返回数据如下:
-

- 发送删除请求 -
-
-
-
-
-
-
-
- - - - - - diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/test/java/cn/lanqiao/springboot3/ApplicationTests.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/test/java/cn/lanqiao/springboot3/ApplicationTests.java" deleted file mode 100644 index f4ed8c7e..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-RESTful-api/src/test/java/cn/lanqiao/springboot3/ApplicationTests.java" +++ /dev/null @@ -1,33 +0,0 @@ -package cn.lanqiao.springboot3; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; - -import javax.sql.DataSource; -import java.sql.Connection; -import java.sql.SQLException; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http:13blog.site - */ -@SpringBootTest -public class ApplicationTests { - // 注入数据源对象 - @Autowired - private DataSource dataSource; - - @Test - public void datasourceTest() throws SQLException { - // 获取数据源类型 - System.out.println("默认数据源为:" + dataSource.getClass()); - // 获取数据库连接对象 - Connection connection = dataSource.getConnection(); - // 判断连接对象是否为空 - System.out.println(connection != null); - connection.close(); - } -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/pom.xml" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/pom.xml" deleted file mode 100644 index 38f1b497..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/pom.xml" +++ /dev/null @@ -1,45 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.0.0 - - - cn.lanqiao - springboot3-ajax-demo - 0.0.1-SNAPSHOT - springboot3-ajax-demo - Demo project for Spring Boot - - - UTF-8 - UTF-8 - 17 - - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/src/main/java/cn/lanqiao/springboot3/Application.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/src/main/java/cn/lanqiao/springboot3/Application.java" deleted file mode 100644 index fd125605..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/src/main/java/cn/lanqiao/springboot3/Application.java" +++ /dev/null @@ -1,14 +0,0 @@ -package cn.lanqiao.springboot3; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class Application { - - public static void main(String[] args) { - System.out.println("启动 Spring Boot..."); - System.out.println("Spring Boot 项目实践之 Ajax 技术使用教程"); - SpringApplication.run(Application.class, args); - } -} \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/src/main/java/cn/lanqiao/springboot3/controller/RequestTestController.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/src/main/java/cn/lanqiao/springboot3/controller/RequestTestController.java" deleted file mode 100644 index bc69b552..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/src/main/java/cn/lanqiao/springboot3/controller/RequestTestController.java" +++ /dev/null @@ -1,45 +0,0 @@ -package cn.lanqiao.springboot3.controller; - -import cn.lanqiao.springboot3.entity.User; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import java.util.ArrayList; -import java.util.List; - -@RestController -@RequestMapping("/api") -public class RequestTestController { - - @RequestMapping(value = "/test1", method = RequestMethod.GET) - public String test1(String info) { - if (StringUtils.isEmpty(info)) { - return "请输入info的值!"; - } - return "你输入的内容是:" + info; - } - - @RequestMapping(value = "/test2", method = RequestMethod.GET) - public List test2() { - List users = new ArrayList<>(); - User user1 = new User(); - user1.setId(1); - user1.setName("十一"); - user1.setPassword("12121"); - User user2 = new User(); - user2.setId(2); - user2.setName("十二"); - user2.setPassword("21212"); - User user3 = new User(); - user3.setId(3); - user3.setName("十三"); - user3.setPassword("31313"); - users.add(user1); - users.add(user2); - users.add(user3); - return users; - } - -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/src/main/java/cn/lanqiao/springboot3/entity/User.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/src/main/java/cn/lanqiao/springboot3/entity/User.java" deleted file mode 100644 index 9d3225e9..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/src/main/java/cn/lanqiao/springboot3/entity/User.java" +++ /dev/null @@ -1,32 +0,0 @@ -package cn.lanqiao.springboot3.entity; - -public class User { - - private Integer id; - private String name; - private String password; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/src/main/resources/application.properties" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/src/main/resources/application.properties" deleted file mode 100644 index e69de29b..00000000 diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/src/main/resources/static/ajax-test.html" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/src/main/resources/static/ajax-test.html" deleted file mode 100644 index 44c74f88..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/src/main/resources/static/ajax-test.html" +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - SpringBoot3 | Ajax 请求测试 - - -
-
-
-
-
-
-
-
接口测试1
-
-
- -
接口1返回数据如下:
-

- 发送请求1 -
-
-
-
-
-
接口测试2
-
-
-
接口2返回数据如下:
-

- 发送请求2 -
-
-
-
-
-
-
- - - - - - diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/src/test/java/cn/lanqiao/springboot3/ApplicationTests.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/src/test/java/cn/lanqiao/springboot3/ApplicationTests.java" deleted file mode 100644 index 8a1d2940..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-ajax/src/test/java/cn/lanqiao/springboot3/ApplicationTests.java" +++ /dev/null @@ -1,14 +0,0 @@ -package cn.lanqiao.springboot3; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -import java.sql.SQLException; - -@SpringBootTest -public class ApplicationTests { - - @Test - public void test() throws SQLException { - } -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/pom.xml" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/pom.xml" deleted file mode 100644 index 7a146004..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/pom.xml" +++ /dev/null @@ -1,43 +0,0 @@ - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.0.0 - - - cn.lanqiao - springboot3-upload-demo - 0.0.1-SNAPSHOT - springboot3-upload-demo - Spring Boot 处理文件上传及路径回显 - - UTF-8 - UTF-8 - 17 - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/src/main/java/cn/lanqiao/springboot3/Application.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/src/main/java/cn/lanqiao/springboot3/Application.java" deleted file mode 100644 index 26e363de..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/src/main/java/cn/lanqiao/springboot3/Application.java" +++ /dev/null @@ -1,18 +0,0 @@ -package cn.lanqiao.springboot3; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -/** - * 文件上传 - * - */ -@SpringBootApplication -public class Application { - - public static void main(String[] args) { - System.out.println("启动 Spring Boot..."); - System.out.println("Spring Boot 处理文件上传及路径回显"); - SpringApplication.run(Application.class, args); - } -} \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/src/main/java/cn/lanqiao/springboot3/config/SpringBootWebMvcConfigurer.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/src/main/java/cn/lanqiao/springboot3/config/SpringBootWebMvcConfigurer.java" deleted file mode 100644 index 668845d9..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/src/main/java/cn/lanqiao/springboot3/config/SpringBootWebMvcConfigurer.java" +++ /dev/null @@ -1,13 +0,0 @@ -package cn.lanqiao.springboot3.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -@Configuration -public class SpringBootWebMvcConfigurer implements WebMvcConfigurer { - public void addResourceHandlers(ResourceHandlerRegistry registry) { - //registry.addResourceHandler("/files/**").addResourceLocations("file:D:\\upload\\"); - registry.addResourceHandler("/files/**").addResourceLocations("file:/home/project/upload/"); - } -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/src/main/java/cn/lanqiao/springboot3/controller/UploadController.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/src/main/java/cn/lanqiao/springboot3/controller/UploadController.java" deleted file mode 100644 index fa8029c5..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/src/main/java/cn/lanqiao/springboot3/controller/UploadController.java" +++ /dev/null @@ -1,46 +0,0 @@ -package cn.lanqiao.springboot3.controller; - -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Random; - -@Controller -public class UploadController { - - //private final static String FILE_UPLOAD_PATH = "D:\\upload\\"; - private final static String FILE_UPLOAD_PATH = "/home/project/upload/"; - - @RequestMapping(value = "/upload", method = RequestMethod.POST) - @ResponseBody - public String upload(@RequestParam("file") MultipartFile file) { - if (file.isEmpty()) { - return "上传失败"; - } - String fileName = file.getOriginalFilename(); - String suffixName = fileName.substring(fileName.lastIndexOf(".")); - //生成文件名称通用方法 - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); - Random r = new Random(); - StringBuilder tempName = new StringBuilder(); - tempName.append(sdf.format(new Date())).append(r.nextInt(100)).append(suffixName); - String newFileName = tempName.toString(); - try { - // 保存文件 - byte[] bytes = file.getBytes(); - Path path = Paths.get(FILE_UPLOAD_PATH + newFileName); - Files.write(path, bytes); - - } catch (IOException e) { - e.printStackTrace(); - } - return "上传成功,图片地址为:/files/" + newFileName; - } -} \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/src/main/resources/application.properties" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/src/main/resources/application.properties" deleted file mode 100644 index e69de29b..00000000 diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/src/main/resources/static/upload-test.html" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/src/main/resources/static/upload-test.html" deleted file mode 100644 index 203de6d1..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/src/main/resources/static/upload-test.html" +++ /dev/null @@ -1,14 +0,0 @@ - - - - - Spring Boot 文件上传测试 - - - -
- - -
- - \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/src/test/java/cn/lanqiao/springboot3/ApplicationTests.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/src/test/java/cn/lanqiao/springboot3/ApplicationTests.java" deleted file mode 100644 index 4f58bb56..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-file-upload/src/test/java/cn/lanqiao/springboot3/ApplicationTests.java" +++ /dev/null @@ -1,15 +0,0 @@ -package cn.lanqiao.springboot3; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -import java.sql.SQLException; - -@SpringBootTest -public class ApplicationTests { - - @Test - public void test() throws SQLException { - - } -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-helloworld/pom.xml" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-helloworld/pom.xml" deleted file mode 100644 index 8412d228..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-helloworld/pom.xml" +++ /dev/null @@ -1,43 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.0.0 - - - cn.lanqiao - springboot3-web-demo - 0.0.1-SNAPSHOT - springboot3-web-demo - Demo project for Spring Boot - - UTF-8 - UTF-8 - 17 - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-helloworld/src/main/java/cn/lanqiao/springboot3/Application.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-helloworld/src/main/java/cn/lanqiao/springboot3/Application.java" deleted file mode 100644 index 011d651c..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-helloworld/src/main/java/cn/lanqiao/springboot3/Application.java" +++ /dev/null @@ -1,18 +0,0 @@ -package cn.lanqiao.springboot3; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -/** - * Hello World! - * - */ -@SpringBootApplication -public class Application { - - public static void main(String[] args) { - System.out.println("启动 Spring Boot..."); - System.out.println("Spring Boot Hello World"); - SpringApplication.run(Application.class, args); - } -} \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-helloworld/src/main/java/cn/lanqiao/springboot3/controller/HelloController.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-helloworld/src/main/java/cn/lanqiao/springboot3/controller/HelloController.java" deleted file mode 100644 index 859c3085..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-helloworld/src/main/java/cn/lanqiao/springboot3/controller/HelloController.java" +++ /dev/null @@ -1,15 +0,0 @@ -package cn.lanqiao.springboot3.controller; - -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -@Controller -public class HelloController { - - @GetMapping("/hello") - @ResponseBody - public String hello() { - return "hello,world"; - } -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-helloworld/src/main/resources/application.properties" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-helloworld/src/main/resources/application.properties" deleted file mode 100644 index e69de29b..00000000 diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/pom.xml" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/pom.xml" deleted file mode 100644 index 2b368d43..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/pom.xml" +++ /dev/null @@ -1,53 +0,0 @@ - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.0.0 - - - cn.lanqiao - springboot3-jdbc-demo - 0.0.1-SNAPSHOT - springboot3-jdbc-demo - Spring Boot 连接数据库以及在 Spring Boot 项目中操作数据库 - - - UTF-8 - UTF-8 - 17 - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-jdbc - - - - mysql - mysql-connector-java - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/springboot-jdbc-schema.sql" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/springboot-jdbc-schema.sql" deleted file mode 100644 index bd45d552..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/springboot-jdbc-schema.sql" +++ /dev/null @@ -1,12 +0,0 @@ -CREATE DATABASE /*!32312 IF NOT EXISTS*/`springboot3_db` /*!40100 DEFAULT CHARACTER SET utf8 */; - -USE `springboot3_db`; - -DROP TABLE IF EXISTS `tb_user`; - -CREATE TABLE `tb_user` ( - `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键', - `name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '登录名', - `password` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '密码', - PRIMARY KEY (`id`) -) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/src/main/java/cn/lanqiao/springboot3/Application.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/src/main/java/cn/lanqiao/springboot3/Application.java" deleted file mode 100644 index 6e830ffd..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/src/main/java/cn/lanqiao/springboot3/Application.java" +++ /dev/null @@ -1,17 +0,0 @@ -package cn.lanqiao.springboot3; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -/** - * Hello lanqiao! - * - */ -@SpringBootApplication -public class Application { - - public static void main(String[] args) { - System.out.println("启动 Spring Boot..."); - SpringApplication.run(Application.class, args); - } -} \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/src/main/java/cn/lanqiao/springboot3/controller/JdbcController.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/src/main/java/cn/lanqiao/springboot3/controller/JdbcController.java" deleted file mode 100644 index d040fbd3..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/src/main/java/cn/lanqiao/springboot3/controller/JdbcController.java" +++ /dev/null @@ -1,35 +0,0 @@ -package cn.lanqiao.springboot3.controller; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; -import java.util.Map; - -@RestController -public class JdbcController { - - //自动配置,因此可以直接通过 @Autowired 注入进来 - @Autowired - JdbcTemplate jdbcTemplate; - - // 查询所有记录 - @GetMapping("/users/queryAll") - public List> queryAll() { - List> list = jdbcTemplate.queryForList("select * from tb_user"); - return list; - } - - // 新增一条记录 - @GetMapping("/users/insert") - public Object insert(String name, String password) { - if (StringUtils.isEmpty(name) || StringUtils.isEmpty(password)) { - return false; - } - jdbcTemplate.execute("insert into tb_user(`name`,`password`) value (\"" + name + "\",\"" + password + "\")"); - return true; - } -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/src/main/resources/application.properties" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/src/main/resources/application.properties" deleted file mode 100644 index e0d2b5fd..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/src/main/resources/application.properties" +++ /dev/null @@ -1,5 +0,0 @@ -# datasource config -spring.datasource.url=jdbc:mysql://localhost:3306/springboot3_db?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.username=root -spring.datasource.password= diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/src/test/java/cn/lanqiao/springboot3/ApplicationTests.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/src/test/java/cn/lanqiao/springboot3/ApplicationTests.java" deleted file mode 100644 index f4ed8c7e..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-jdbc/src/test/java/cn/lanqiao/springboot3/ApplicationTests.java" +++ /dev/null @@ -1,33 +0,0 @@ -package cn.lanqiao.springboot3; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; - -import javax.sql.DataSource; -import java.sql.Connection; -import java.sql.SQLException; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http:13blog.site - */ -@SpringBootTest -public class ApplicationTests { - // 注入数据源对象 - @Autowired - private DataSource dataSource; - - @Test - public void datasourceTest() throws SQLException { - // 获取数据源类型 - System.out.println("默认数据源为:" + dataSource.getClass()); - // 获取数据库连接对象 - Connection connection = dataSource.getConnection(); - // 判断连接对象是否为空 - System.out.println(connection != null); - connection.close(); - } -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/pom.xml" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/pom.xml" deleted file mode 100644 index eae61c0c..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/pom.xml" +++ /dev/null @@ -1,59 +0,0 @@ - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.0.0 - - - cn.lanqiao - springboot3-mybatis-demo - 0.0.1-SNAPSHOT - springboot3-mybatis-demo - Spring Boot 整合 MyBatis 操作数据库 - - UTF-8 - UTF-8 - 17 - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-jdbc - - - - - org.mybatis.spring.boot - mybatis-spring-boot-starter - 3.0.0 - - - - mysql - mysql-connector-java - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/springboot-jdbc-schema.sql" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/springboot-jdbc-schema.sql" deleted file mode 100644 index bd45d552..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/springboot-jdbc-schema.sql" +++ /dev/null @@ -1,12 +0,0 @@ -CREATE DATABASE /*!32312 IF NOT EXISTS*/`springboot3_db` /*!40100 DEFAULT CHARACTER SET utf8 */; - -USE `springboot3_db`; - -DROP TABLE IF EXISTS `tb_user`; - -CREATE TABLE `tb_user` ( - `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键', - `name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '登录名', - `password` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '密码', - PRIMARY KEY (`id`) -) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/java/cn/lanqiao/springboot3/Application.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/java/cn/lanqiao/springboot3/Application.java" deleted file mode 100644 index 2adccc7e..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/java/cn/lanqiao/springboot3/Application.java" +++ /dev/null @@ -1,16 +0,0 @@ -package cn.lanqiao.springboot3; - -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -@MapperScan("cn.lanqiao.springboot3.dao") -public class Application { - - public static void main(String[] args) { - System.out.println("启动 Spring Boot..."); - System.out.println("Spring Boot 整合 MyBatis 操作数据库"); - SpringApplication.run(Application.class, args); - } -} \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/java/cn/lanqiao/springboot3/controller/MyBatisController.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/java/cn/lanqiao/springboot3/controller/MyBatisController.java" deleted file mode 100644 index 11f94872..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/java/cn/lanqiao/springboot3/controller/MyBatisController.java" +++ /dev/null @@ -1,57 +0,0 @@ -package cn.lanqiao.springboot3.controller; - -import cn.lanqiao.springboot3.dao.UserDao; -import cn.lanqiao.springboot3.entity.User; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -@RestController -public class MyBatisController { - - @Autowired - private UserDao userDao; - - // 查询所有记录 - @GetMapping("/users/mybatis/queryAll") - public List queryAll() { - return userDao.findAllUsers(); - } - - // 新增一条记录 - @GetMapping("/users/mybatis/insert") - public Boolean insert(String name, String password) { - if (StringUtils.isEmpty(name) || StringUtils.isEmpty(password)) { - return false; - } - User user = new User(); - user.setName(name); - user.setPassword(password); - return userDao.insertUser(user) > 0; - } - - // 修改一条记录 - @GetMapping("/users/mybatis/update") - public Boolean update(Integer id, String name, String password) { - if (id == null || id < 1 || StringUtils.isEmpty(name) || StringUtils.isEmpty(password)) { - return false; - } - User user = new User(); - user.setId(id); - user.setName(name); - user.setPassword(password); - return userDao.updUser(user) > 0; - } - - // 删除一条记录 - @GetMapping("/users/mybatis/delete") - public Boolean delete(Integer id) { - if (id == null || id < 1) { - return false; - } - return userDao.delUser(id) > 0; - } -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/java/cn/lanqiao/springboot3/dao/UserDao.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/java/cn/lanqiao/springboot3/dao/UserDao.java" deleted file mode 100644 index b234e6e1..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/java/cn/lanqiao/springboot3/dao/UserDao.java" +++ /dev/null @@ -1,42 +0,0 @@ -package cn.lanqiao.springboot3.dao; - -import cn.lanqiao.springboot3.entity.User; - -import java.util.List; - -/** - * @author 13 - * MyBatis 测试 - */ -public interface UserDao { - /** - * 返回数据列表 - * - * @return - */ - List findAllUsers(); - - /** - * 添加 - * - * @param User - * @return - */ - int insertUser(User User); - - /** - * 修改 - * - * @param User - * @return - */ - int updUser(User User); - - /** - * 删除 - * - * @param id - * @return - */ - int delUser(Integer id); -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/java/cn/lanqiao/springboot3/entity/User.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/java/cn/lanqiao/springboot3/entity/User.java" deleted file mode 100644 index 9d3225e9..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/java/cn/lanqiao/springboot3/entity/User.java" +++ /dev/null @@ -1,32 +0,0 @@ -package cn.lanqiao.springboot3.entity; - -public class User { - - private Integer id; - private String name; - private String password; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/resources/application.properties" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/resources/application.properties" deleted file mode 100644 index 5dc4d9c3..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/resources/application.properties" +++ /dev/null @@ -1,7 +0,0 @@ -# datasource config -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.url=jdbc:mysql://localhost:3306/springboot3_db?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false -spring.datasource.username=root -spring.datasource.password= - -mybatis.mapper-locations=classpath:mapper/*Dao.xml \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/resources/mapper/UserDao.xml" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/resources/mapper/UserDao.xml" deleted file mode 100644 index b2feb335..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/main/resources/mapper/UserDao.xml" +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - insert into tb_user(name,password) - values(#{name},#{password}) - - - - update tb_user - set - name=#{name},password=#{password} - where id=#{id} - - - - delete from tb_user where id=#{id} - - - \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/test/java/cn/lanqiao/springboot3/ApplicationTests.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/test/java/cn/lanqiao/springboot3/ApplicationTests.java" deleted file mode 100644 index f4ed8c7e..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-mybatis/src/test/java/cn/lanqiao/springboot3/ApplicationTests.java" +++ /dev/null @@ -1,33 +0,0 @@ -package cn.lanqiao.springboot3; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; - -import javax.sql.DataSource; -import java.sql.Connection; -import java.sql.SQLException; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http:13blog.site - */ -@SpringBootTest -public class ApplicationTests { - // 注入数据源对象 - @Autowired - private DataSource dataSource; - - @Test - public void datasourceTest() throws SQLException { - // 获取数据源类型 - System.out.println("默认数据源为:" + dataSource.getClass()); - // 获取数据库连接对象 - Connection connection = dataSource.getConnection(); - // 判断连接对象是否为空 - System.out.println(connection != null); - connection.close(); - } -} diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/pom.xml" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/pom.xml" deleted file mode 100644 index 0405eb4a..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/pom.xml" +++ /dev/null @@ -1,43 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.0.0 - - - cn.lanqiao - springboot3-web-demo - 0.0.1-SNAPSHOT - springboot3-web-demo - Spring Boot 基础开发之静态资源处理案例 - - UTF-8 - UTF-8 - 17 - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/java/cn/lanqiao/springboot3/Application.java" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/java/cn/lanqiao/springboot3/Application.java" deleted file mode 100644 index b77f16eb..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/java/cn/lanqiao/springboot3/Application.java" +++ /dev/null @@ -1,18 +0,0 @@ -package cn.lanqiao.springboot3; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -/** - * 静态资源处理 - * - */ -@SpringBootApplication -public class Application { - - public static void main(String[] args) { - System.out.println("启动 Spring Boot..."); - System.out.println("Spring Boot 基础开发之静态资源处理案例"); - SpringApplication.run(Application.class, args); - } -} \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/META-INF/resources/test.html" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/META-INF/resources/test.html" deleted file mode 100644 index 0c3e96fa..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/META-INF/resources/test.html" +++ /dev/null @@ -1,10 +0,0 @@ - - - - - test - - -resource - html - - \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/application.properties" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/application.properties" deleted file mode 100644 index 62bb081e..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/application.properties" +++ /dev/null @@ -1,4 +0,0 @@ -#server.port=8082 -#server.servlet.context-path=/lanqiao/ - -spring.resources.static-locations=classpath:/lanqiao/,classpath:/static/ \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/lanqiao/lanqiao.png" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/lanqiao/lanqiao.png" deleted file mode 100644 index 6a589132..00000000 Binary files "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/lanqiao/lanqiao.png" and /dev/null differ diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/lanqiao/test.css" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/lanqiao/test.css" deleted file mode 100644 index 23f1e3ff..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/lanqiao/test.css" +++ /dev/null @@ -1,3 +0,0 @@ -. test { - font-size: 14px; -} \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/lanqiao/test.html" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/lanqiao/test.html" deleted file mode 100644 index 0c3e96fa..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/lanqiao/test.html" +++ /dev/null @@ -1,10 +0,0 @@ - - - - - test - - -resource - html - - \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/public/lanqiao.png" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/public/lanqiao.png" deleted file mode 100644 index 6a589132..00000000 Binary files "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/public/lanqiao.png" and /dev/null differ diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/resources/test.css" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/resources/test.css" deleted file mode 100644 index 23f1e3ff..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/resources/test.css" +++ /dev/null @@ -1,3 +0,0 @@ -. test { - font-size: 14px; -} \ No newline at end of file diff --git "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/static/test.js" "b/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/static/test.js" deleted file mode 100644 index 35e66c91..00000000 --- "a/SpringBoot\345\205\245\351\227\250\346\241\210\344\276\213\346\272\220\347\240\201/spring-boot-static-resources/src/main/resources/static/test.js" +++ /dev/null @@ -1,3 +0,0 @@ -function test() { - console.log('resource - js'); -} \ No newline at end of file diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/README.md" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/README.md" deleted file mode 100644 index e1a6a380..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/README.md" +++ /dev/null @@ -1,87 +0,0 @@ -# Spring Boot 前后端分离实战项目源码 - -## 课程介绍 - -本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 个部分,当前仓库为课程的实战项目源码。前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 项目实践开发。Spring Boot 介绍、前后端分离、API 规范等内容旨在让读者更加熟悉 SpringBoot 及企业开发中需要注意的事项并具有使用 SpringBoot 技术进行基本功能开发的能力;最后的项目实战为课程的主要部分,会带着大家实际的开发一个前后端分离的 Spring Boot 实践项目,让大家实际操作并从无到有开发一个线上项目,并学习到一定的开发经验以及其中的开发技巧,旨在让读者具有将 Spring Boot 真正应用于项目开发的能力; - -## 课程地址 - -- [**课程地址:https://www.lanqiao.cn/courses/1244**](https://www.lanqiao.cn/courses/1244) - -## 项目展示 - -以下为实践项目的页面和功能展示,分别为: - -- 登录页面 - -![login](login.png) - -- 列表页面(分页功能) - -![list](list.gif) - -- 图片上传功能 - -![picture](picture.gif) - -- 富文本编辑器整合使用 - -![rich-txt](rich-txt.png) - -实践项目的主要功能和页面就是这些,通过项目展示大家也能够感受到,在实际应用开发中的高频次功能都已经实现,稍加修改就可以运用到企业开发中,整个项目的开发模式为前后端分离的模式,即 Spring Boot 提供后端接口,前端页面通过 Ajax 异步调用接口的方式与后端服务器进行交互并将数据填充至页面中,这也是目前企业开发中比较重用的开发模式,希望大家能够了解并且能够实际的上手开发。 - -## 课程的五大特色 - -- 实践项目页面美观且实用,交互效果完美 -- 包含从零搭建项目、功能开发到网站上线的完整流程 -- 开发教程详细完整、文档资源齐全 -- 代码+讲解+演示网站全方位保证,向 Hello World 教程说拜拜 -- 丰富你的开发技术栈,提升个人市场价值 - -通过本课程你将学到以下内容: - -- Spring Boot 3 技术栈的使用和开发技巧; -- MySQL 8 数据库的基本使用方法; -- Maven 的配置及使用; -- SpringBoot 基础 web 功能开发; -- SpringBoot 整合MyBatis; -- SpringBoot 文件上传; -- SpringBoot 全局异常处理; -- 前后端分离详解; -- AJAX 异步技术; -- AdminLTE3、Bootstrap 4、SweetAlert、JqGrid、JQuery 等前端框架组件及控件的使用; -- Swagger 在线 API 文档生成; -- Linux 系统部署及发布项目; -- 上线互联网项目的过程实践。 - -熟悉我的朋友应该都知道,我在写教程时一般都是“文章”+“源码”+“演示网站”同时提供的,因此在课程完结后,会将源码全部分享给每一位同学用于学习实践,本课程内容主要是抛砖引玉,根据该实践项目中所讲解的技术和开发技巧以及各个单独的功能点实现,可以结合自身业务将其改造成任何企业开发项目。 - -## 课程目录 - -- [**开篇词:SpringBoot入门及前后端分离项目实践导读**](https://www.lanqiao.cn/courses/1244) -- [第02课:快速认识 Spring Boot 技术栈](https://www.lanqiao.cn/courses/1244) -- [第03课:开发环境搭建](https://www.lanqiao.cn/courses/1244) -- [第04课:快速构建 Spring Boot 应用](https://www.lanqiao.cn/courses/1244) -- [第05课:Spring Boot 之基础 web 功能开发](https://www.lanqiao.cn/courses) -- [第06课:Spring Boot 之数据库连接操作](https://www.lanqiao.cn/courses/1244) -- [第07课:Spring Boot 整合 MyBatis 操作数据库](https://www.lanqiao.cn/courses/1244) -- [第08课:Spring Boot 处理文件上传及路径回显](https://www.lanqiao.cn/courses/1244) -- [第09课:Spring Boot 项目实践之前后端分离详解](https://www.lanqiao.cn/courses/1244) -- [第10课:Spring Boot 项目实践之 Ajax 技术使用教程](https://www.lanqiao.cn/courses/1244) -- [第11课:Spring Boot 项目实践之 RESTful API 设计与实现](https://www.lanqiao.cn/courses/1244) -- [第12课:Spring Boot 项目实践之登录模块实现](https://www.lanqiao.cn/courses/1244) -- [第13课:Spring Boot 项目实践之分页功能实现](https://www.lanqiao.cn/courses/1244) -- [第14课:Spring Boot 项目实践之 jqgrid 分页整合](https://www.lanqiao.cn/courses/1244) -- [第15课:Spring Boot 项目实践之用户编辑功能实现](https://www.lanqiao.cn/courses/1244) -- [第16课:Spring Boot 项目实践之用户管理模块实现](https://www.lanqiao.cn/courses/1244) -- [第17课:Spring Boot 项目实践之图片管理模块](https://www.lanqiao.cn/courses/1244) -- [第18课:Spring Boot 项目实践之信息管理模块实现](https://www.lanqiao.cn/courses/1244) - ---- - -## 交流 - -> 大家有任何问题或者建议都可以在 [issues](https://github.com/ZHENFENG13/springboot-projects/issues) 中反馈给我,我会慢慢完善这个 Spring Boot 仓库。 - -- 我的邮箱:2449207463@qq.com -- QQ技术交流群:784785001 \ No newline at end of file diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/list.gif" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/list.gif" deleted file mode 100644 index 00919238..00000000 Binary files "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/list.gif" and /dev/null differ diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/login.png" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/login.png" deleted file mode 100644 index d7d9d69e..00000000 Binary files "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/login.png" and /dev/null differ diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/picture.gif" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/picture.gif" deleted file mode 100644 index b4275f18..00000000 Binary files "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/picture.gif" and /dev/null differ diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/rich-txt.png" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/rich-txt.png" deleted file mode 100644 index 006c0fd4..00000000 Binary files "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/rich-txt.png" and /dev/null differ diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/pom.xml" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/pom.xml" deleted file mode 100644 index a7723e65..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/pom.xml" +++ /dev/null @@ -1,62 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.0.0 - - - cn.lanqiao - spring-boot-project-front-end-back-end - 0.0.1-SNAPSHOT - spring-boot-project-front-end-back-end - Spring Boot 3前后端分离实战项目 - - - UTF-8 - UTF-8 - 17 - - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-jdbc - - - - - org.mybatis.spring.boot - mybatis-spring-boot-starter - 3.0.0 - - - - mysql - mysql-connector-java - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/springboot3-project-schema.sql" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/springboot3-project-schema.sql" deleted file mode 100644 index d7209026..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/springboot3-project-schema.sql" +++ /dev/null @@ -1,39 +0,0 @@ -CREATE DATABASE /*!32312 IF NOT EXISTS*/`springboot3_db` /*!40100 DEFAULT CHARACTER SET utf8 */; - -USE `springboot3_db`; -DROP TABLE IF EXISTS `tb_admin_user`; -CREATE TABLE `tb_admin_user` ( - `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id', - `user_name` varchar(20) NOT NULL DEFAULT '' COMMENT '用户名', - `password_md5` varchar(50) NOT NULL DEFAULT '' COMMENT '密码', - `user_token` varchar(50) NOT NULL DEFAULT '' COMMENT 'token值', - `is_deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否已删除 0未删除 1已删除', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -INSERT INTO `tb_admin_user` (`id`, `user_name`, `password_md5`, `user_token`, `is_deleted`, `create_time`) -VALUES (1,'admin','e10adc3949ba59abbe56e057f20f883e','6f1d93269e8bfdcd2066a248bfdafee6',0,'2023-01-01 11:50:13'); - -USE springboot3_db; -DROP TABLE IF EXISTS `tb_ssm_picture`; -CREATE TABLE `tb_ssm_picture` ( - `id` BIGINT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增id', - `path` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '图片路径', - `remark` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '备注', - `is_deleted` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '是否已删除 0未删除 1已删除', - `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间', - PRIMARY KEY (`id`) -) ENGINE=INNODB DEFAULT CHARSET=utf8; - -USE springboot3_db; -DROP TABLE IF EXISTS `tb_ssm_article`; -CREATE TABLE `tb_ssm_article` ( - `id` int(4) NOT NULL AUTO_INCREMENT COMMENT '主键', - `article_title` varchar(200) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '文章标题', - `article_content` text COLLATE utf8_bin NOT NULL COMMENT '文章内容', - `add_name` varchar(100) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '添加人', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - `is_deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否已删除 0未删除 1已删除', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; \ No newline at end of file diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/Application.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/Application.java" deleted file mode 100644 index 411754d8..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/Application.java" +++ /dev/null @@ -1,22 +0,0 @@ -package cn.lanqiao.springboot3; - -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -@SpringBootApplication -@MapperScan("cn.lanqiao.springboot3.dao") -public class Application { - - public static void main(String[] args) { - System.out.println("启动 Spring Boot..."); - System.out.println("Spring Boot前后端分离实战项目"); - SpringApplication.run(Application.class, args); - } -} \ No newline at end of file diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/common/Constants.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/common/Constants.java" deleted file mode 100644 index c33b4610..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/common/Constants.java" +++ /dev/null @@ -1,20 +0,0 @@ -package cn.lanqiao.springboot3.common; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -public class Constants { - - public static final int RESULT_CODE_SUCCESS = 200; // 成功处理请求 - public static final int RESULT_CODE_BAD_REQUEST = 412; // 请求错误 - public static final int RESULT_CODE_NOT_LOGIN = 402; // 未登录 - public static final int RESULT_CODE_PARAM_ERROR = 406; // 传参错误 - public static final int RESULT_CODE_SERVER_ERROR = 500; // 服务器错误 - - //public final static String FILE_UPLOAD_PATH = "D:\\upload\\";//上传文件的保存地址,根据部署设置自行修改 - public final static String FILE_UPLOAD_PATH = "/home/project/upload/";//上传文件的保存地址,根据部署设置自行修改 - -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/common/Result.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/common/Result.java" deleted file mode 100644 index bec37b7a..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/common/Result.java" +++ /dev/null @@ -1,61 +0,0 @@ -package cn.lanqiao.springboot3.common; - -import java.io.Serializable; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -public class Result implements Serializable { - private static final long serialVersionUID = 1L; - private int resultCode; - private String message; - private T data; - - public Result() { - } - - public Result(int resultCode, String message) { - this.resultCode = resultCode; - this.message = message; - } - - public int getResultCode() { - return resultCode; - } - - public void setResultCode(int resultCode) { - this.resultCode = resultCode; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public T getData() { - return data; - } - - public void setData(T data) { - this.data = data; - } - - public Result failure(String code) { - return new Result(500, "服务错误"); - } - - @Override - public String toString() { - return "Result{" + - "resultCode=" + resultCode + - ", message='" + message + '\'' + - ", data=" + data + - '}'; - } -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/common/ResultGenerator.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/common/ResultGenerator.java" deleted file mode 100644 index 375aeebe..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/common/ResultGenerator.java" +++ /dev/null @@ -1,62 +0,0 @@ -package cn.lanqiao.springboot3.common; - -import org.springframework.util.StringUtils; - -/** - * @note 响应结果生成工具 - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -public class ResultGenerator { - private static final String DEFAULT_SUCCESS_MESSAGE = "SUCCESS"; - private static final String DEFAULT_FAIL_MESSAGE = "FAIL"; - - public static Result genSuccessResult() { - Result result = new Result(); - result.setResultCode(Constants.RESULT_CODE_SUCCESS); - result.setMessage(DEFAULT_SUCCESS_MESSAGE); - return result; - } - - public static Result genSuccessResult(String message) { - Result result = new Result(); - result.setResultCode(Constants.RESULT_CODE_SUCCESS); - result.setMessage(message); - return result; - } - - public static Result genSuccessResult(Object data) { - Result result = new Result(); - result.setResultCode(Constants.RESULT_CODE_SUCCESS); - result.setMessage(DEFAULT_SUCCESS_MESSAGE); - result.setData(data); - return result; - } - - public static Result genFailResult(String message) { - Result result = new Result(); - result.setResultCode(Constants.RESULT_CODE_SERVER_ERROR); - if (StringUtils.isEmpty(message)) { - result.setMessage(DEFAULT_FAIL_MESSAGE); - } else { - result.setMessage(message); - } - return result; - } - - public static Result genNullResult(String message) { - Result result = new Result(); - result.setResultCode(Constants.RESULT_CODE_BAD_REQUEST); - result.setMessage(message); - return result; - } - - public static Result genErrorResult(int code, String message) { - Result result = new Result(); - result.setResultCode(code); - result.setMessage(message); - return result; - } -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/config/SpringBootWebMvcConfigurer.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/config/SpringBootWebMvcConfigurer.java" deleted file mode 100644 index cd88dfa3..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/config/SpringBootWebMvcConfigurer.java" +++ /dev/null @@ -1,37 +0,0 @@ -package cn.lanqiao.springboot3.config; - -import cn.lanqiao.springboot3.common.Constants; -import cn.lanqiao.springboot3.config.handler.TokenToUserMethodArgumentResolver; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.method.support.HandlerMethodArgumentResolver; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -import java.util.List; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -@Configuration -public class SpringBootWebMvcConfigurer implements WebMvcConfigurer { - - @Autowired - private TokenToUserMethodArgumentResolver tokenUserMethodArgumentResolver; - - /** - * TokenToUser 注解处理方法 - * - * @param argumentResolvers - */ - public void addArgumentResolvers(List argumentResolvers) { - argumentResolvers.add(tokenUserMethodArgumentResolver); - } - - public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("/files/**").addResourceLocations("file:"+ Constants.FILE_UPLOAD_PATH); - } -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/config/annotation/TokenToUser.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/config/annotation/TokenToUser.java" deleted file mode 100644 index 98077ac6..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/config/annotation/TokenToUser.java" +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2002-2007 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cn.lanqiao.springboot3.config.annotation; - -import java.lang.annotation.*; - -@Target({ElementType.PARAMETER}) -@Retention(RetentionPolicy.RUNTIME) -@Documented -public @interface TokenToUser { - - /** - * 当前用户在request中的名字 - * - * @return - */ - String value() default "user"; - -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/config/handler/TokenToUserMethodArgumentResolver.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/config/handler/TokenToUserMethodArgumentResolver.java" deleted file mode 100644 index 45cd4f1b..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/config/handler/TokenToUserMethodArgumentResolver.java" +++ /dev/null @@ -1,63 +0,0 @@ -package cn.lanqiao.springboot3.config.handler; - -import cn.lanqiao.springboot3.entity.AdminUser; -import cn.lanqiao.springboot3.service.AdminUserService; -import cn.lanqiao.springboot3.config.annotation.TokenToUser; -import jakarta.servlet.http.HttpServletRequest; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.MethodParameter; -import org.springframework.stereotype.Component; -import org.springframework.web.bind.support.WebDataBinderFactory; -import org.springframework.web.context.request.NativeWebRequest; -import org.springframework.web.method.support.HandlerMethodArgumentResolver; -import org.springframework.web.method.support.ModelAndViewContainer; - -import java.io.IOException; - -@Component -public class TokenToUserMethodArgumentResolver implements HandlerMethodArgumentResolver { - - @Autowired - private AdminUserService adminUserService; - - public TokenToUserMethodArgumentResolver() { - } - - public boolean supportsParameter(MethodParameter parameter) { - if (parameter.hasParameterAnnotation(TokenToUser.class)) { - return true; - } - return false; - } - - public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { - if (parameter.getParameterAnnotation(TokenToUser.class) instanceof TokenToUser) { - AdminUser adminUser = null; - String token = webRequest.getHeader("token"); - if (null != token && !"".equals(token) && token.length() == 32) { - adminUser = adminUserService.getAdminUserByToken(token); - } - return adminUser; - } - return null; - } - - public static byte[] getRequestPostBytes(HttpServletRequest request) - throws IOException { - int contentLength = request.getContentLength(); - if (contentLength < 0) { - return null; - } - byte buffer[] = new byte[contentLength]; - for (int i = 0; i < contentLength; ) { - int readlen = request.getInputStream().read(buffer, i, - contentLength - i); - if (readlen == -1) { - break; - } - i += readlen; - } - return buffer; - } - -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/controller/AdminUserController.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/controller/AdminUserController.java" deleted file mode 100644 index ce5c7cef..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/controller/AdminUserController.java" +++ /dev/null @@ -1,123 +0,0 @@ -package cn.lanqiao.springboot3.controller; - -import cn.lanqiao.springboot3.common.Constants; -import cn.lanqiao.springboot3.common.Result; -import cn.lanqiao.springboot3.common.ResultGenerator; -import cn.lanqiao.springboot3.config.annotation.TokenToUser; -import cn.lanqiao.springboot3.entity.AdminUser; -import cn.lanqiao.springboot3.service.AdminUserService; -import cn.lanqiao.springboot3.utils.PageUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.*; - -import java.util.Map; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -@RestController -@RequestMapping("/users") -public class AdminUserController { - - @Autowired - private AdminUserService adminUserService; - - /** - * 列表 - */ - @RequestMapping(value = "/list", method = RequestMethod.GET) - public Result list(@RequestParam Map params) { - if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!"); - } - //查询列表数据 - PageUtil pageUtil = new PageUtil(params); - return ResultGenerator.genSuccessResult(adminUserService.getAdminUserPage(pageUtil)); - } - - @RequestMapping(value = "/login", method = RequestMethod.POST) - public Result login(@RequestBody AdminUser user) { - Result result = ResultGenerator.genFailResult("登录失败"); - if (StringUtils.isEmpty(user.getUserName()) || StringUtils.isEmpty(user.getPassword())) { - result.setMessage("请填写登录信息!"); - } - AdminUser loginUser = adminUserService.updateTokenAndLogin(user.getUserName(), user.getPassword()); - if (loginUser != null) { - result = ResultGenerator.genSuccessResult(loginUser); - } - return result; - } - - /** - * 保存 - */ - @RequestMapping(value = "/save", method = RequestMethod.POST) - public Result save(@RequestBody AdminUser user, @TokenToUser AdminUser loginUser) { - if (loginUser == null) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_NOT_LOGIN, "未登录!"); - } - if (StringUtils.isEmpty(user.getUserName()) || StringUtils.isEmpty(user.getPassword())) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!"); - } - AdminUser tempUser = adminUserService.selectByUserName(user.getUserName()); - if (tempUser != null) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "用户已存在勿重复添加!"); - } - if ("admin".endsWith(user.getUserName().trim())) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "不能添加admin用户!"); - } - if (adminUserService.save(user) > 0) { - return ResultGenerator.genSuccessResult(); - } else { - return ResultGenerator.genFailResult("添加失败"); - } - } - - /** - * 修改 - */ - @RequestMapping(value = "/updatePassword", method = RequestMethod.PUT) - public Result update(@RequestBody AdminUser user, @TokenToUser AdminUser loginUser) { - if (loginUser == null) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_NOT_LOGIN, "未登录!"); - } - if (StringUtils.isEmpty(user.getPassword())) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "请输入密码!"); - } - AdminUser tempUser = adminUserService.selectById(user.getId()); - if (tempUser == null) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "无此用户!"); - } - if ("admin".endsWith(tempUser.getUserName().trim())) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "不能修改admin用户!"); - } - tempUser.setPassword(user.getPassword()); - if (adminUserService.updatePassword(user) > 0) { - return ResultGenerator.genSuccessResult(); - } else { - return ResultGenerator.genFailResult("修改失败"); - } - } - - /** - * 删除 - */ - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - public Result delete(@RequestBody Integer[] ids, @TokenToUser AdminUser loginUser) { - if (loginUser == null) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_NOT_LOGIN, "未登录!"); - } - if (ids.length < 1) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!"); - } - if (adminUserService.deleteBatch(ids) > 0) { - return ResultGenerator.genSuccessResult(); - } else { - return ResultGenerator.genFailResult("删除失败"); - } - } -} \ No newline at end of file diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/controller/ArticleController.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/controller/ArticleController.java" deleted file mode 100644 index 7f712d01..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/controller/ArticleController.java" +++ /dev/null @@ -1,103 +0,0 @@ -package cn.lanqiao.springboot3.controller; - -import cn.lanqiao.springboot3.common.Constants; -import cn.lanqiao.springboot3.common.Result; -import cn.lanqiao.springboot3.common.ResultGenerator; -import cn.lanqiao.springboot3.config.annotation.TokenToUser; -import cn.lanqiao.springboot3.entity.AdminUser; -import cn.lanqiao.springboot3.entity.Article; -import cn.lanqiao.springboot3.service.ArticleService; -import cn.lanqiao.springboot3.utils.PageUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.*; - -import java.util.Map; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -@RestController -@RequestMapping("/articles") -public class ArticleController { - - @Autowired - private ArticleService articleService; - - /** - * 列表 - */ - @RequestMapping(value = "/list", method = RequestMethod.GET) - public Result list(@RequestParam Map params) { - if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!"); - } - //查询列表数据 - PageUtil pageUtil = new PageUtil(params); - return ResultGenerator.genSuccessResult(articleService.getArticlePage(pageUtil)); - } - - /** - * 详情 - */ - @RequestMapping(value = "/info/{id}", method = RequestMethod.GET) - public Result info(@PathVariable("id") Integer id) { - Article article = articleService.queryObject(id); - return ResultGenerator.genSuccessResult(article); - } - - /** - * 保存 - */ - @RequestMapping(value = "/save", method = RequestMethod.POST) - public Result save(@RequestBody Article article, @TokenToUser AdminUser loginUser) { - if (article.getAddName()==null){ - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "作者不能为空!"); - } - if (loginUser == null) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_NOT_LOGIN, "未登录!"); - } - if (articleService.save(article) > 0) { - return ResultGenerator.genSuccessResult(); - } else { - return ResultGenerator.genFailResult("添加失败"); - } - } - - /** - * 修改 - */ - @RequestMapping(value = "/update", method = RequestMethod.PUT) - public Result update(@RequestBody Article article, @TokenToUser AdminUser loginUser) { - if (loginUser == null) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_NOT_LOGIN, "未登录!"); - } - if (articleService.update(article) > 0) { - return ResultGenerator.genSuccessResult(); - } else { - return ResultGenerator.genFailResult("修改失败"); - } - } - - /** - * 删除 - */ - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - public Result delete(@RequestBody Integer[] ids, @TokenToUser AdminUser loginUser) { - if (loginUser == null) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_NOT_LOGIN, "未登录!"); - } - if (ids.length < 1) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!"); - } - if (articleService.deleteBatch(ids) > 0) { - return ResultGenerator.genSuccessResult(); - } else { - return ResultGenerator.genFailResult("删除失败"); - } - } - -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/controller/PictureController.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/controller/PictureController.java" deleted file mode 100644 index 8e1b5d3b..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/controller/PictureController.java" +++ /dev/null @@ -1,119 +0,0 @@ -package cn.lanqiao.springboot3.controller; - -import cn.lanqiao.springboot3.common.Constants; -import cn.lanqiao.springboot3.common.Result; -import cn.lanqiao.springboot3.common.ResultGenerator; -import cn.lanqiao.springboot3.config.annotation.TokenToUser; -import cn.lanqiao.springboot3.entity.AdminUser; -import cn.lanqiao.springboot3.entity.Picture; -import cn.lanqiao.springboot3.service.PictureService; -import cn.lanqiao.springboot3.utils.PageUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.*; - -import java.util.Map; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -@RestController -@RequestMapping("/pictures") -public class PictureController { - - @Autowired - private PictureService pictureService; - - /** - * 列表 - */ - @RequestMapping(value = "/list", method = RequestMethod.GET) - public Result list(@RequestParam Map params) { - if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!"); - } - //查询列表数据 - PageUtil pageUtil = new PageUtil(params); - return ResultGenerator.genSuccessResult(pictureService.getPicturePage(pageUtil)); - } - - /** - * 信息 - */ - @RequestMapping(value = "/info/{id}", method = RequestMethod.GET) - public Result info(@PathVariable("id") Integer id, @TokenToUser AdminUser loginUser) { - if (loginUser == null) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_NOT_LOGIN, "未登录!"); - } - if (id < 1) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!"); - } - Picture picture = pictureService.queryObject(id); - if (picture == null) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!"); - } - return ResultGenerator.genSuccessResult(picture); - } - - /** - * 保存 - */ - @RequestMapping(value = "/save", method = RequestMethod.POST) - public Result save(@RequestBody Picture picture, @TokenToUser AdminUser loginUser) { - if (loginUser == null) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_NOT_LOGIN, "未登录!"); - } - if (StringUtils.isEmpty(picture.getPath()) || StringUtils.isEmpty(picture.getRemark())) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!"); - } - if (pictureService.save(picture) > 0) { - return ResultGenerator.genSuccessResult(); - } else { - return ResultGenerator.genFailResult("添加失败"); - } - } - - /** - * 修改 - */ - @RequestMapping(value = "/update", method = RequestMethod.PUT) - public Result update(@RequestBody Picture picture, @TokenToUser AdminUser loginUser) { - if (loginUser == null) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_NOT_LOGIN, "未登录!"); - } - if (null == picture.getId() || StringUtils.isEmpty(picture.getPath()) || StringUtils.isEmpty(picture.getRemark())) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!"); - } - Picture tempPicture = pictureService.queryObject(picture.getId()); - if (tempPicture == null) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!"); - } - if (pictureService.update(picture) > 0) { - return ResultGenerator.genSuccessResult(); - } else { - return ResultGenerator.genFailResult("修改失败"); - } - } - - /** - * 删除 - */ - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - public Result delete(@RequestBody Integer[] ids, @TokenToUser AdminUser loginUser) { - if (loginUser == null) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_NOT_LOGIN, "未登录!"); - } - if (ids.length < 1) { - return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!"); - } - if (pictureService.deleteBatch(ids) > 0) { - return ResultGenerator.genSuccessResult(); - } else { - return ResultGenerator.genFailResult("删除失败"); - } - } - -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/controller/UploadController.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/controller/UploadController.java" deleted file mode 100644 index 8e3e10bd..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/controller/UploadController.java" +++ /dev/null @@ -1,49 +0,0 @@ -package cn.lanqiao.springboot3.controller; - -import cn.lanqiao.springboot3.common.Constants; -import cn.lanqiao.springboot3.common.Result; -import cn.lanqiao.springboot3.common.ResultGenerator; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Random; - -@Controller -@RequestMapping("/images") -public class UploadController { - - @RequestMapping(value = "/upload", method = RequestMethod.POST) - @ResponseBody - public Result upload(@RequestParam("file") MultipartFile file) { - if (file.isEmpty()) { - return ResultGenerator.genFailResult("请选择文件"); - } - String fileName = file.getOriginalFilename(); - String suffixName = fileName.substring(fileName.lastIndexOf(".")); - //生成文件名称通用方法 - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); - Random r = new Random(); - StringBuilder tempName = new StringBuilder(); - tempName.append(sdf.format(new Date())).append(r.nextInt(100)).append(suffixName); - String newFileName = tempName.toString(); - try { - // 保存文件 - byte[] bytes = file.getBytes(); - Path path = Paths.get(Constants.FILE_UPLOAD_PATH + newFileName); - Files.write(path, bytes); - - } catch (IOException e) { - e.printStackTrace(); - } - Result result = ResultGenerator.genSuccessResult(); - result.setData("files/" + newFileName); - return result; - } -} \ No newline at end of file diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/dao/AdminUserDao.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/dao/AdminUserDao.java" deleted file mode 100644 index ffc7e12a..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/dao/AdminUserDao.java" +++ /dev/null @@ -1,105 +0,0 @@ -package cn.lanqiao.springboot3.dao; - -import cn.lanqiao.springboot3.entity.AdminUser; -import org.apache.ibatis.annotations.Param; - -import java.util.List; -import java.util.Map; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -public interface AdminUserDao { - - /** - * 根据参数查询用户列表 - * - * @param param - * @return - */ - List findAdminUsers(Map param); - - /** - * 查询用户总数 - * - * @param param - * @return - */ - int getTotalAdminUser(Map param); - - /** - * 根据登录名和密码获取用户记录 - * - * @return - */ - AdminUser getAdminUserByUserNameAndPassword(@Param("userName") String userName, @Param("passwordMD5") String passwordMD5); - - /** - * 根据userToken获取用户记录 - * - * @return - */ - AdminUser getAdminUserByToken(String userToken); - - /** - * 根据id获取用户记录 - * - * @return - */ - AdminUser getAdminUserById(Long id); - - /** - * 根据用户名获取用户记录 - * - * @return - */ - AdminUser getAdminUserByUserName(String userName); - - /** - * 新增用户记录 - * - * @return - */ - int addUser(AdminUser user); - - /** - * 批量新增用户记录 - * - * @return - */ - int insertUsersBatch(@Param("adminUsers") List adminUsers); - - /** - * 修改密码 - * - * @return - */ - int updateUserPassword(@Param("userId") Long userId, @Param("newPassword") String newPassword); - - /** - * 更新用户token值 - * - * @param userId - * @param newToken - * @return - */ - int updateUserToken(@Param("userId") Long userId, @Param("newToken") String newToken); - - /** - * 批量删除 - * - * @param ids - * @return - */ - int deleteBatch(Object[] ids); - - /** - * 查询所有用户列表 - * - * @return - */ - List getAllAdminUsers(); -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/dao/ArticleDao.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/dao/ArticleDao.java" deleted file mode 100644 index 47bf7f50..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/dao/ArticleDao.java" +++ /dev/null @@ -1,66 +0,0 @@ -package cn.lanqiao.springboot3.dao; - -import cn.lanqiao.springboot3.entity.Article; - -import java.util.List; -import java.util.Map; - -/** - * @author 13 - * @date 2018-08-15 - */ -public interface ArticleDao { - /** - * 返回相应的数据集合 - * - * @param map - * @return - */ - List
findArticles(Map map); - - /** - * 数据数目 - * - * @param map - * @return - */ - int getTotalArticles(Map map); - - /** - * 添加 - * - * @return - */ - int insertArticle(Article article); - - /** - * 修改 - * - * @return - */ - int updArticle(Article article); - - /** - * 删除 - * - * @param id - * @return - */ - int delArticle(Integer id); - - /** - * 根据id查找 - * - * @param id - * @return - */ - Article getArticleById(Integer id); - - /** - * 批量删除 - * - * @param id - * @return - */ - int deleteBatch(Object[] id); -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/dao/PictureDao.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/dao/PictureDao.java" deleted file mode 100644 index c19f60e2..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/dao/PictureDao.java" +++ /dev/null @@ -1,70 +0,0 @@ -package cn.lanqiao.springboot3.dao; - -import cn.lanqiao.springboot3.entity.Picture; - -import java.util.List; -import java.util.Map; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -public interface PictureDao { - /** - * 返回数据列表 - * - * @param map - * @return - */ - List findPictures(Map map); - - /** - * 数据数目 - * - * @param map - * @return - */ - int getTotalPictures(Map map); - - /** - * 添加图片 - * - * @param picture - * @return - */ - int insertPicture(Picture picture); - - /** - * 修改图片 - * - * @param picture - * @return - */ - int updPicture(Picture picture); - - /** - * 删除 - * - * @param id - * @return - */ - int delPicture(Integer id); - - /** - * 根据id查找 - * - * @param id - * @return - */ - Picture findPictureById(Integer id); - - /** - * 批量删除 - * - * @param id - * @return - */ - int deleteBatch(Object[] id); -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/entity/AdminUser.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/entity/AdminUser.java" deleted file mode 100644 index 06bcc55c..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/entity/AdminUser.java" +++ /dev/null @@ -1,106 +0,0 @@ -package cn.lanqiao.springboot3.entity; - -import com.fasterxml.jackson.annotation.JsonFormat; - -import java.io.Serializable; -import java.util.Date; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -public class AdminUser implements Serializable { - - /** - * 主键 - */ - private Long id; - - /** - * 用户名 - */ - private String userName; - - /** - * 密码 - */ - private String password; - - /** - * token值 - */ - private String userToken; - - /** - * 是否已删除 0未删除 1已删除 - */ - private int isDeleted; - - /** - * 添加时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") - private Date createTime; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getUserName() { - return userName; - } - - public void setUserName(String userName) { - this.userName = userName; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getUserToken() { - return userToken; - } - - public void setUserToken(String userToken) { - this.userToken = userToken; - } - - public int getIsDeleted() { - return isDeleted; - } - - public void setIsDeleted(int isDeleted) { - this.isDeleted = isDeleted; - } - - public Date getCreateTime() { - return createTime; - } - - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } - - @Override - public String toString() { - return "AdminUser{" + - "id=" + id + - ", userName='" + userName + '\'' + - ", password='" + password + '\'' + - ", userToken='" + userToken + '\'' + - ", isDeleted=" + isDeleted + - ", createTime=" + createTime + - '}'; - } -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/entity/Article.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/entity/Article.java" deleted file mode 100644 index 7fb6ec18..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/entity/Article.java" +++ /dev/null @@ -1,77 +0,0 @@ -package cn.lanqiao.springboot3.entity; - -import com.fasterxml.jackson.annotation.JsonFormat; - -import java.io.Serializable; -import java.util.Date; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -public class Article implements Serializable { - //主键 - private Integer id; - //文章标题 - private String articleTitle; - //文章内容 - private String articleContent; - //添加人 - private String addName; - //添加时间 - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") - private Date createTime; - //最新更新时间 - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") - private Date updateTime; - - public void setId(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setArticleTitle(String articleTitle) { - this.articleTitle = articleTitle; - } - - public String getArticleTitle() { - return articleTitle; - } - - public void setArticleContent(String articleContent) { - this.articleContent = articleContent; - } - - public String getArticleContent() { - return articleContent; - } - - public void setAddName(String addName) { - this.addName = addName; - } - - public String getAddName() { - return addName; - } - - public Date getCreateTime() { - return createTime; - } - - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } - - public Date getUpdateTime() { - return updateTime; - } - - public void setUpdateTime(Date updateTime) { - this.updateTime = updateTime; - } -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/entity/Picture.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/entity/Picture.java" deleted file mode 100644 index 6f750890..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/entity/Picture.java" +++ /dev/null @@ -1,57 +0,0 @@ -package cn.lanqiao.springboot3.entity; - -import com.fasterxml.jackson.annotation.JsonFormat; - -import java.io.Serializable; -import java.util.Date; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -public class Picture implements Serializable { - - //主键 - private Integer id; - //图片地址 - private String path; - //备注 - private String remark; - //添加时间 - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") - private Date createTime; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getPath() { - return path; - } - - public void setPath(String path) { - this.path = path; - } - - public String getRemark() { - return remark; - } - - public void setRemark(String remark) { - this.remark = remark; - } - - public Date getCreateTime() { - return createTime; - } - - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/AdminUserService.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/AdminUserService.java" deleted file mode 100644 index 56ff546c..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/AdminUserService.java" +++ /dev/null @@ -1,73 +0,0 @@ -package cn.lanqiao.springboot3.service; - -import cn.lanqiao.springboot3.entity.AdminUser; -import cn.lanqiao.springboot3.utils.PageResult; -import cn.lanqiao.springboot3.utils.PageUtil; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ - -public interface AdminUserService { - - /** - * 分页功能 - * - * @param pageUtil - * @return - */ - PageResult getAdminUserPage(PageUtil pageUtil); - - /** - * 登陆功能 - * - * @return - */ - AdminUser updateTokenAndLogin(String userName, String password); - - /** - * 根据id获取用户记录 - * - * @return - */ - AdminUser selectById(Long id); - - /** - * 根据用户名获取用户记录 - * - * @return - */ - AdminUser selectByUserName(String userName); - - /** - * 新增用户记录 - * - * @return - */ - int save(AdminUser user); - - /** - * 修改密码 - * - * @return - */ - int updatePassword(AdminUser user); - - /** - * 批量删除功能 - * - * @param ids - * @return - */ - int deleteBatch(Integer[] ids); - - /** - * 根据userToken获取用户记录 - * - * @return - */ - AdminUser getAdminUserByToken(String userToken); -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/ArticleService.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/ArticleService.java" deleted file mode 100644 index e78fc8dc..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/ArticleService.java" +++ /dev/null @@ -1,34 +0,0 @@ -package cn.lanqiao.springboot3.service; - - -import cn.lanqiao.springboot3.utils.PageResult; -import cn.lanqiao.springboot3.utils.PageUtil; -import cn.lanqiao.springboot3.entity.Article; - -import java.util.List; -import java.util.Map; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -public interface ArticleService { - - PageResult getArticlePage(PageUtil pageUtil); - - Article queryObject(Integer id); - - List
queryList(Map map); - - int queryTotal(Map map); - - int save(Article article); - - int update(Article article); - - int delete(Integer id); - - int deleteBatch(Integer[] ids); -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/PictureService.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/PictureService.java" deleted file mode 100644 index 875b06ad..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/PictureService.java" +++ /dev/null @@ -1,57 +0,0 @@ -package cn.lanqiao.springboot3.service; - - -import cn.lanqiao.springboot3.entity.Picture; -import cn.lanqiao.springboot3.utils.PageResult; -import cn.lanqiao.springboot3.utils.PageUtil; - -/** - * @author 13 - * @date 2018-07-18 - */ -public interface PictureService { - - /** - * 查询列表数据 - * - * @param pageUtil - * @return - */ - PageResult getPicturePage(PageUtil pageUtil); - - /** - * 根据id查询对象 - * - * @param id - * @return - */ - Picture queryObject(Integer id); - - /** - * 新增图片对象 - * - * @param picture - */ - int save(Picture picture); - - /** - * 修改 - * - * @param picture - */ - int update(Picture picture); - - /** - * 删除 - * - * @param id - */ - int delete(Integer id); - - /** - * 批量删除 - * - * @param ids - */ - int deleteBatch(Integer[] ids); -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/impl/AdminUserServiceImpl.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/impl/AdminUserServiceImpl.java" deleted file mode 100644 index 35484320..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/impl/AdminUserServiceImpl.java" +++ /dev/null @@ -1,92 +0,0 @@ -package cn.lanqiao.springboot3.service.impl; - -import cn.lanqiao.springboot3.dao.AdminUserDao; -import cn.lanqiao.springboot3.entity.AdminUser; -import cn.lanqiao.springboot3.service.AdminUserService; -import cn.lanqiao.springboot3.utils.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -@Service("adminUserService") -public class AdminUserServiceImpl implements AdminUserService { - - @Autowired - private AdminUserDao adminUserDao; - - @Override - public PageResult getAdminUserPage(PageUtil pageUtil) { - //当前页码中的数据列表 - List users = adminUserDao.findAdminUsers(pageUtil); - //数据总条数 用于计算分页数据 - int total = adminUserDao.getTotalAdminUser(pageUtil); - PageResult pageResult = new PageResult(users, total, pageUtil.getLimit(), pageUtil.getPage()); - return pageResult; - } - - @Override - public AdminUser updateTokenAndLogin(String userName, String password) { - AdminUser adminUser = adminUserDao.getAdminUserByUserNameAndPassword(userName, MD5Util.MD5Encode(password, "UTF-8")); - if (adminUser != null) { - //登录后即执行修改token的操作 - String token = getNewToken(System.currentTimeMillis() + "", adminUser.getId()); - if (adminUserDao.updateUserToken(adminUser.getId(), token) > 0) { - //返回数据时带上token - adminUser.setUserToken(token); - return adminUser; - } - } - return null; - } - - /** - * 获取token值 - * - * @param sessionId - * @param userId - * @return - */ - private String getNewToken(String sessionId, Long userId) { - String src = sessionId + userId + NumberUtil.genRandomNum(4); - return SystemUtil.genToken(src); - } - - @Override - public AdminUser selectById(Long id) { - return adminUserDao.getAdminUserById(id); - } - - @Override - public AdminUser selectByUserName(String userName) { - return adminUserDao.getAdminUserByUserName(userName); - } - - @Override - public int save(AdminUser user) { - //密码加密 - user.setPassword(MD5Util.MD5Encode(user.getPassword(), "UTF-8")); - return adminUserDao.addUser(user); - } - - @Override - public int updatePassword(AdminUser user) { - return adminUserDao.updateUserPassword(user.getId(), MD5Util.MD5Encode(user.getPassword(), "UTF-8")); - } - - @Override - public int deleteBatch(Integer[] ids) { - return adminUserDao.deleteBatch(ids); - } - - @Override - public AdminUser getAdminUserByToken(String userToken) { - return adminUserDao.getAdminUserByToken(userToken); - } -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/impl/ArticleServiceImpl.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/impl/ArticleServiceImpl.java" deleted file mode 100644 index 1a8cccaf..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/impl/ArticleServiceImpl.java" +++ /dev/null @@ -1,75 +0,0 @@ -package cn.lanqiao.springboot3.service.impl; - -import cn.lanqiao.springboot3.dao.ArticleDao; -import cn.lanqiao.springboot3.service.ArticleService; -import cn.lanqiao.springboot3.utils.PageResult; -import cn.lanqiao.springboot3.utils.PageUtil; -import cn.lanqiao.springboot3.entity.Article; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Service; - -import java.util.Date; -import java.util.List; -import java.util.Map; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -@Service("articleService") -public class ArticleServiceImpl implements ArticleService { - - @Resource - private ArticleDao articleDao; - - @Override - public PageResult getArticlePage(PageUtil pageUtil) { - List
articleList = articleDao.findArticles(pageUtil); - int total = articleDao.getTotalArticles(pageUtil); - PageResult pageResult = new PageResult(articleList, total, pageUtil.getLimit(), pageUtil.getPage()); - return pageResult; - } - - @Override - public Article queryObject(Integer id) { - Article article = articleDao.getArticleById(id); - if (article != null) { - return article; - } - return null; - } - - @Override - public List
queryList(Map map) { - List
articles = articleDao.findArticles(map); - return articles; - } - - @Override - public int queryTotal(Map map) { - return articleDao.getTotalArticles(map); - } - - @Override - public int save(Article article) { - return articleDao.insertArticle(article); - } - - @Override - public int update(Article article) { - article.setUpdateTime(new Date()); - return articleDao.updArticle(article); - } - - @Override - public int delete(Integer id) { - return articleDao.delArticle(id); - } - - @Override - public int deleteBatch(Integer[] ids) { - return articleDao.deleteBatch(ids); - } -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/impl/PictureServiceImpl.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/impl/PictureServiceImpl.java" deleted file mode 100644 index 6437de15..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/service/impl/PictureServiceImpl.java" +++ /dev/null @@ -1,52 +0,0 @@ -package cn.lanqiao.springboot3.service.impl; - -import cn.lanqiao.springboot3.dao.PictureDao; -import cn.lanqiao.springboot3.entity.Picture; -import cn.lanqiao.springboot3.service.PictureService; -import cn.lanqiao.springboot3.utils.PageResult; -import cn.lanqiao.springboot3.utils.PageUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service("pictureService") -public class PictureServiceImpl implements PictureService { - - @Autowired - private PictureDao pictureDao; - - @Override - public PageResult getPicturePage(PageUtil pageUtil) { - List pictures = pictureDao.findPictures(pageUtil); - int total = pictureDao.getTotalPictures(pageUtil); - PageResult pageResult = new PageResult(pictures, total, pageUtil.getLimit(), pageUtil.getPage()); - return pageResult; - } - - @Override - public Picture queryObject(Integer id) { - return pictureDao.findPictureById(id); - } - - @Override - public int save(Picture picture) { - return pictureDao.insertPicture(picture); - } - - @Override - public int update(Picture picture) { - return pictureDao.updPicture(picture); - } - - @Override - public int delete(Integer id) { - return pictureDao.delPicture(id); - } - - @Override - public int deleteBatch(Integer[] ids) { - return pictureDao.deleteBatch(ids); - } - -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/DateUtil.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/DateUtil.java" deleted file mode 100644 index 35dc3538..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/DateUtil.java" +++ /dev/null @@ -1,24 +0,0 @@ -package cn.lanqiao.springboot3.utils; - -import java.text.SimpleDateFormat; -import java.util.Date; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -public class DateUtil { - - /** - * 格式化date - * - * @param date - * @return - */ - public static String getDateString(Date date) { - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - return formatter.format(date); - } -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/MD5Util.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/MD5Util.java" deleted file mode 100644 index 9926d7cb..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/MD5Util.java" +++ /dev/null @@ -1,51 +0,0 @@ -package cn.lanqiao.springboot3.utils; - -import java.security.MessageDigest; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -public class MD5Util { - - private static String byteArrayToHexString(byte b[]) { - StringBuffer resultSb = new StringBuffer(); - for (int i = 0; i < b.length; i++) { - resultSb.append(byteToHexString(b[i])); - } - - return resultSb.toString(); - } - - private static String byteToHexString(byte b) { - int n = b; - if (n < 0) { - n += 256; - } - int d1 = n / 16; - int d2 = n % 16; - return hexDigits[d1] + hexDigits[d2]; - } - - public static String MD5Encode(String origin, String charsetname) { - String resultString = null; - try { - resultString = new String(origin); - MessageDigest md = MessageDigest.getInstance("MD5"); - if (charsetname == null || "".equals(charsetname)) { - resultString = byteArrayToHexString(md.digest(resultString - .getBytes())); - } else { - resultString = byteArrayToHexString(md.digest(resultString - .getBytes(charsetname))); - } - } catch (Exception exception) { - } - return resultString; - } - - private static final String hexDigits[] = {"0", "1", "2", "3", "4", "5", - "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}; -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/NumberUtil.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/NumberUtil.java" deleted file mode 100644 index 3f0f2efd..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/NumberUtil.java" +++ /dev/null @@ -1,70 +0,0 @@ -package cn.lanqiao.springboot3.utils; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -public class NumberUtil { - - private NumberUtil() { - } - - - /** - * 判断是否为11位电话号码 - * - * @param phone - * @return - */ - public static boolean isPhone(String phone) { - Pattern pattern = Pattern.compile("^((13[0-9])|(14[5,7])|(15[^4,\\D])|(17[0-8])|(18[0-9]))\\d{8}$"); - Matcher matcher = pattern.matcher(phone); - return matcher.matches(); - } - - /** - * 生成指定长度的随机数 - * - * @param length - * @return - */ - public static int genRandomNum(int length) { - int num = 1; - double random = Math.random(); - if (random < 0.1) { - random = random + 0.1; - } - for (int i = 0; i < length; i++) { - num = num * 10; - } - return (int) ((random * num)); - } - - /** - * 生成订单流水号 - * - * @return - */ - public static String genOrderNo() { - StringBuffer buffer = new StringBuffer(String.valueOf(System.currentTimeMillis())); - int num = genRandomNum(4); - buffer.append(num); - return buffer.toString(); - } - - public static String formatMoney2Str(Double money) { - java.text.DecimalFormat df = new java.text.DecimalFormat("0.00"); - return df.format(money); - } - - public static String formatMoney2Str(float money) { - java.text.DecimalFormat df = new java.text.DecimalFormat("0.00"); - return df.format(money); - } - -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/PageResult.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/PageResult.java" deleted file mode 100644 index bb683418..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/PageResult.java" +++ /dev/null @@ -1,80 +0,0 @@ -package cn.lanqiao.springboot3.utils; - -import java.io.Serializable; -import java.util.List; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -public class PageResult implements Serializable { - - //总记录数 - private int totalCount; - //每页记录数 - private int pageSize; - //总页数 - private int totalPage; - //当前页数 - private int currPage; - //列表数据 - private List list; - - /** - * 分页 - * @param list 列表数据 - * @param totalCount 总记录数 - * @param pageSize 每页记录数 - * @param currPage 当前页数 - */ - public PageResult(List list, int totalCount, int pageSize, int currPage) { - this.list = list; - this.totalCount = totalCount; - this.pageSize = pageSize; - this.currPage = currPage; - this.totalPage = (int)Math.ceil((double)totalCount/pageSize); - } - - public int getTotalCount() { - return totalCount; - } - - public void setTotalCount(int totalCount) { - this.totalCount = totalCount; - } - - public int getPageSize() { - return pageSize; - } - - public void setPageSize(int pageSize) { - this.pageSize = pageSize; - } - - public int getTotalPage() { - return totalPage; - } - - public void setTotalPage(int totalPage) { - this.totalPage = totalPage; - } - - public int getCurrPage() { - return currPage; - } - - public void setCurrPage(int currPage) { - this.currPage = currPage; - } - - public List getList() { - return list; - } - - public void setList(List list) { - this.list = list; - } - -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/PageUtil.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/PageUtil.java" deleted file mode 100644 index 46a89e12..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/PageUtil.java" +++ /dev/null @@ -1,53 +0,0 @@ -package cn.lanqiao.springboot3.utils; - -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -public class PageUtil extends LinkedHashMap { - //当前页码 - private int page; - //每页条数 - private int limit; - - public PageUtil(Map params) { - this.putAll(params); - - //分页参数 - this.page = Integer.parseInt(params.get("page").toString()); - this.limit = Integer.parseInt(params.get("limit").toString()); - this.put("start", (page - 1) * limit); - this.put("page", page); - this.put("limit", limit); - } - - - public int getPage() { - return page; - } - - public void setPage(int page) { - this.page = page; - } - - public int getLimit() { - return limit; - } - - public void setLimit(int limit) { - this.limit = limit; - } - - @Override - public String toString() { - return "PageUtil{" + - "page=" + page + - ", limit=" + limit + - '}'; - } -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/SystemUtil.java" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/SystemUtil.java" deleted file mode 100644 index 87eb623c..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/java/cn/lanqiao/springboot3/utils/SystemUtil.java" +++ /dev/null @@ -1,35 +0,0 @@ -package cn.lanqiao.springboot3.utils; - -import java.math.BigInteger; -import java.security.MessageDigest; - -/** - * @author 13 - * @qq交流群 784785001 - * @email 2449207463@qq.com - * @link http://13blog.site - */ -public class SystemUtil { - - private SystemUtil(){} - - - /** - * 登录或注册成功后,生成保持用户登录状态会话token值 - * @param src:为用户最新一次登录时的now()+user.id+random(4) - * @return - */ - public static String genToken(String src){ - if (null == src || "".equals(src)){ - return null; - } - try { - MessageDigest md = MessageDigest.getInstance("MD5"); - md.update(src.getBytes()); - return new BigInteger(1, md.digest()).toString(16); - } catch (Exception e) { - return null; - } - } - -} diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/application.properties" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/application.properties" deleted file mode 100644 index e1afe844..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/application.properties" +++ /dev/null @@ -1,18 +0,0 @@ -server.port=8080 - -# datasource config -spring.datasource.url=jdbc:mysql://localhost:3306/springboot3_db?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.username=root -spring.datasource.password= -spring.datasource.hikari.minimum-idle=5 -spring.datasource.hikari.maximum-pool-size=15 -spring.datasource.hikari.auto-commit=true -spring.datasource.hikari.idle-timeout=30000 -spring.datasource.hikari.pool-name=hikariCP -spring.datasource.hikari.max-lifetime=1800000 -spring.datasource.hikari.connection-timeout=30000 -spring.datasource.hikari.connection-test-query=SELECT 1 - -# mybatis config -mybatis.mapper-locations=classpath:mapper/*Dao.xml \ No newline at end of file diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/mapper/AdminUserDao.xml" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/mapper/AdminUserDao.xml" deleted file mode 100644 index cbc0c137..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/mapper/AdminUserDao.xml" +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - - - - - - insert into tb_admin_user(user_name,password_md5) - values(#{userName},#{password}) - - - - insert into tb_admin_user(user_name,password_md5) VALUES - - (#{adminUser.userName}, #{adminUser.password}) - - - - - - - - - - - - - - - - - update tb_admin_user set user_token = #{newToken} where id =#{userId} and is_deleted = 0 - - - - update tb_admin_user set password_md5 = #{newPassword},user_token ='' where id =#{userId} and is_deleted = 0 - - - - update tb_admin_user - set is_deleted=1 where id in - - #{id} - - - - - \ No newline at end of file diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/mapper/ArticleDao.xml" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/mapper/ArticleDao.xml" deleted file mode 100644 index 2036cdb1..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/mapper/ArticleDao.xml" +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - insert into - tb_ssm_article(article_title,article_content,add_name) - values(#{articleTitle},#{articleContent},#{addName}) - - - - update tb_ssm_article - set - article_title=#{articleTitle},article_content=#{articleContent}, - add_name=#{addName},update_time=#{updateTime} - where id=#{id} - - - - - update tb_ssm_article - set is_deleted=1 - where id=#{id} - - - - - - update tb_ssm_article - set is_deleted=1 where id in - - #{id} - - - - \ No newline at end of file diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/mapper/PictureDao.xml" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/mapper/PictureDao.xml" deleted file mode 100644 index 599fa789..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/mapper/PictureDao.xml" +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - insert into tb_ssm_picture(path,remark) - values(#{path},#{remark}) - - - - update tb_ssm_picture - set - path=#{path},remark=#{remark} - where id=#{id} and is_deleted=0 - - - - update tb_ssm_picture - set is_deleted=1 where id=#{id} - - - - - - update tb_ssm_picture - set is_deleted=1 where id in - - #{id} - - - - \ No newline at end of file diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/article.html" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/article.html" deleted file mode 100644 index 39c2d3ce..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/article.html" +++ /dev/null @@ -1,260 +0,0 @@ - - - - - - 富文本管理页 - - - - - - - - - - - - - - -
- - - - - - - - - -
- -
-
-
-
-

富文本管理页

-
-
- -
-
-
-
- - -
-
-
-
-
-
- - - -
- -
-
-
-
-
-
-
- -
- - -
-
- -
- Copyright © 2019 13blog.site. - All rights reserved. -
- Version 2.0 -
-
- - -
- - - - - - - - - - - - - - - - - - - diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/dist/css/adminlte.css" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/dist/css/adminlte.css" deleted file mode 100644 index 93a1ee60..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/dist/css/adminlte.css" +++ /dev/null @@ -1,13055 +0,0 @@ -/*! - * AdminLTE v3.0.0-alpha - * Author: Abdullah Almsaeed - * Website: AdminLTE.io - * License: Open source - MIT - */ -/*! - * Bootstrap v4.1.0 (https://getbootstrap.com/) - * Copyright 2011-2018 The Bootstrap Authors - * Copyright 2011-2018 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -:root { - --blue: #007bff; - --indigo: #6610f2; - --purple: #6f42c1; - --pink: #e83e8c; - --red: #dc3545; - --orange: #fd7e14; - --yellow: #ffc107; - --green: #28a745; - --teal: #20c997; - --cyan: #17a2b8; - --white: #ffffff; - --gray: #6c757d; - --gray-dark: #343a40; - --primary: #007bff; - --secondary: #6c757d; - --success: #28a745; - --info: #17a2b8; - --warning: #ffc107; - --danger: #dc3545; - --light: #f8f9fa; - --dark: #343a40; - --breakpoint-xs: 0; - --breakpoint-sm: 576px; - --breakpoint-md: 768px; - --breakpoint-lg: 992px; - --breakpoint-xl: 1200px; - --font-family-sans-serif: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - --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%; - -ms-text-size-adjust: 100%; - -ms-overflow-style: scrollbar; - -webkit-tap-highlight-color: transparent; -} - -@-ms-viewport { - width: device-width; -} - -article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section { - display: block; -} - -body { - margin: 0; - font-family: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #212529; - text-align: left; - background-color: #ffffff; -} - -[tabindex="-1"]:focus { - 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; - text-decoration: underline dotted; - cursor: help; - border-bottom: 0; -} - -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; -} - -dfn { - font-style: italic; -} - -b, -strong { - font-weight: bolder; -} - -small { - font-size: 80%; -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sub { - bottom: -.25em; -} - -sup { - top: -.5em; -} - -a { - color: #007bff; - text-decoration: none; - background-color: transparent; - -webkit-text-decoration-skip: objects; -} - -a:hover { - color: #0056b3; - text-decoration: none; -} - -a:not([href]):not([tabindex]) { - color: inherit; - text-decoration: none; -} - -a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { - color: inherit; - text-decoration: none; -} - -a:not([href]):not([tabindex]):focus { - outline: 0; -} - -pre, -code, -kbd, -samp { - font-family: monospace, 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:not(:root) { - overflow: hidden; -} - -table { - border-collapse: collapse; -} - -caption { - padding-top: 0.75rem; - padding-bottom: 0.75rem; - color: #6c757d; - text-align: left; - caption-side: bottom; -} - -th { - text-align: inherit; -} - -label { - display: inline-block; - margin-bottom: 0.5rem; -} - -button { - border-radius: 0; -} - -button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color; -} - -input, -button, -select, -optgroup, -textarea { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -button, -input { - overflow: visible; -} - -button, -select { - text-transform: none; -} - -button, -html [type="button"], -[type="reset"], -[type="submit"] { - -webkit-appearance: button; -} - -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; -} - -input[type="date"], -input[type="time"], -input[type="datetime-local"], -input[type="month"] { - -webkit-appearance: listbox; -} - -textarea { - overflow: auto; - resize: vertical; -} - -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} - -legend { - display: block; - width: 100%; - max-width: 100%; - padding: 0; - margin-bottom: .5rem; - font-size: 1.5rem; - line-height: inherit; - color: inherit; - white-space: normal; -} - -progress { - vertical-align: baseline; -} - -[type="number"]::-webkit-inner-spin-button, -[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -[type="search"] { - outline-offset: -2px; - -webkit-appearance: none; -} - -[type="search"]::-webkit-search-cancel-button, -[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-family: inherit; - font-weight: 500; - line-height: 1.2; - color: inherit; -} - -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, .chart-legend, .contacts-list, .users-list, .mailbox-attachments { - padding-left: 0; - list-style: none; -} - -.list-inline { - padding-left: 0; - list-style: none; -} - -.list-inline-item { - display: inline-block; -} - -.list-inline-item:not(:last-child) { - margin-right: 0.5rem; -} - -.initialism { - font-size: 90%; - text-transform: uppercase; -} - -.blockquote { - margin-bottom: 1rem; - font-size: 1.25rem; -} - -.blockquote-footer { - display: block; - font-size: 80%; - color: #6c757d; -} - -.blockquote-footer::before { - content: "\2014 \00A0"; -} - -.img-fluid { - max-width: 100%; - height: auto; -} - -.img-thumbnail { - padding: 0.25rem; - background-color: #ffffff; - border: 1px solid #dee2e6; - border-radius: 0.25rem; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); - max-width: 100%; - height: auto; -} - -.figure { - display: inline-block; -} - -.figure-img { - margin-bottom: 0.5rem; - line-height: 1; -} - -.figure-caption { - font-size: 90%; - color: #6c757d; -} - -code, -kbd, -pre, -samp { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; -} - -code { - font-size: 87.5%; - color: #e83e8c; - word-break: break-word; -} - -a > code { - color: inherit; -} - -kbd { - padding: 0.2rem 0.4rem; - font-size: 87.5%; - color: #ffffff; - background-color: #212529; - border-radius: 0.2rem; - box-shadow: inset 0 -0.1rem 0 rgba(0, 0, 0, 0.25); -} - -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: 700; - box-shadow: none; -} - -pre { - display: block; - font-size: 87.5%; - color: #212529; -} - -pre code { - font-size: inherit; - color: inherit; - word-break: normal; -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} - -.container { - width: 100%; - padding-right: 7.5px; - padding-left: 7.5px; - margin-right: auto; - margin-left: auto; -} - -@media (min-width: 576px) { - .container { - max-width: 540px; - } -} - -@media (min-width: 768px) { - .container { - max-width: 720px; - } -} - -@media (min-width: 992px) { - .container { - max-width: 960px; - } -} - -@media (min-width: 1200px) { - .container { - max-width: 1140px; - } -} - -.container-fluid { - width: 100%; - padding-right: 7.5px; - padding-left: 7.5px; - margin-right: auto; - margin-left: auto; -} - -.row { - display: flex; - flex-wrap: wrap; - margin-right: -7.5px; - margin-left: -7.5px; -} - -.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%; - min-height: 1px; - padding-right: 7.5px; - padding-left: 7.5px; -} - -.col { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; -} - -.col-auto { - flex: 0 0 auto; - width: auto; - max-width: none; -} - -.col-1 { - flex: 0 0 8.333333%; - max-width: 8.333333%; -} - -.col-2 { - flex: 0 0 16.666667%; - max-width: 16.666667%; -} - -.col-3 { - flex: 0 0 25%; - max-width: 25%; -} - -.col-4 { - flex: 0 0 33.333333%; - max-width: 33.333333%; -} - -.col-5 { - flex: 0 0 41.666667%; - max-width: 41.666667%; -} - -.col-6 { - flex: 0 0 50%; - max-width: 50%; -} - -.col-7 { - flex: 0 0 58.333333%; - max-width: 58.333333%; -} - -.col-8 { - flex: 0 0 66.666667%; - max-width: 66.666667%; -} - -.col-9 { - flex: 0 0 75%; - max-width: 75%; -} - -.col-10 { - flex: 0 0 83.333333%; - max-width: 83.333333%; -} - -.col-11 { - flex: 0 0 91.666667%; - max-width: 91.666667%; -} - -.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.333333%; -} - -.offset-2 { - margin-left: 16.666667%; -} - -.offset-3 { - margin-left: 25%; -} - -.offset-4 { - margin-left: 33.333333%; -} - -.offset-5 { - margin-left: 41.666667%; -} - -.offset-6 { - margin-left: 50%; -} - -.offset-7 { - margin-left: 58.333333%; -} - -.offset-8 { - margin-left: 66.666667%; -} - -.offset-9 { - margin-left: 75%; -} - -.offset-10 { - margin-left: 83.333333%; -} - -.offset-11 { - margin-left: 91.666667%; -} - -@media (min-width: 576px) { - .col-sm { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; - } - .col-sm-auto { - flex: 0 0 auto; - width: auto; - max-width: none; - } - .col-sm-1 { - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-sm-2 { - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-sm-3 { - flex: 0 0 25%; - max-width: 25%; - } - .col-sm-4 { - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-sm-5 { - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-sm-6 { - flex: 0 0 50%; - max-width: 50%; - } - .col-sm-7 { - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-sm-8 { - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-sm-9 { - flex: 0 0 75%; - max-width: 75%; - } - .col-sm-10 { - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-sm-11 { - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .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.333333%; - } - .offset-sm-2 { - margin-left: 16.666667%; - } - .offset-sm-3 { - margin-left: 25%; - } - .offset-sm-4 { - margin-left: 33.333333%; - } - .offset-sm-5 { - margin-left: 41.666667%; - } - .offset-sm-6 { - margin-left: 50%; - } - .offset-sm-7 { - margin-left: 58.333333%; - } - .offset-sm-8 { - margin-left: 66.666667%; - } - .offset-sm-9 { - margin-left: 75%; - } - .offset-sm-10 { - margin-left: 83.333333%; - } - .offset-sm-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 768px) { - .col-md { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; - } - .col-md-auto { - flex: 0 0 auto; - width: auto; - max-width: none; - } - .col-md-1 { - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-md-2 { - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-md-3 { - flex: 0 0 25%; - max-width: 25%; - } - .col-md-4 { - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-md-5 { - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-md-6 { - flex: 0 0 50%; - max-width: 50%; - } - .col-md-7 { - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-md-8 { - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-md-9 { - flex: 0 0 75%; - max-width: 75%; - } - .col-md-10 { - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-md-11 { - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .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.333333%; - } - .offset-md-2 { - margin-left: 16.666667%; - } - .offset-md-3 { - margin-left: 25%; - } - .offset-md-4 { - margin-left: 33.333333%; - } - .offset-md-5 { - margin-left: 41.666667%; - } - .offset-md-6 { - margin-left: 50%; - } - .offset-md-7 { - margin-left: 58.333333%; - } - .offset-md-8 { - margin-left: 66.666667%; - } - .offset-md-9 { - margin-left: 75%; - } - .offset-md-10 { - margin-left: 83.333333%; - } - .offset-md-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 992px) { - .col-lg { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; - } - .col-lg-auto { - flex: 0 0 auto; - width: auto; - max-width: none; - } - .col-lg-1 { - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-lg-2 { - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-lg-3 { - flex: 0 0 25%; - max-width: 25%; - } - .col-lg-4 { - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-lg-5 { - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-lg-6 { - flex: 0 0 50%; - max-width: 50%; - } - .col-lg-7 { - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-lg-8 { - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-lg-9 { - flex: 0 0 75%; - max-width: 75%; - } - .col-lg-10 { - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-lg-11 { - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .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.333333%; - } - .offset-lg-2 { - margin-left: 16.666667%; - } - .offset-lg-3 { - margin-left: 25%; - } - .offset-lg-4 { - margin-left: 33.333333%; - } - .offset-lg-5 { - margin-left: 41.666667%; - } - .offset-lg-6 { - margin-left: 50%; - } - .offset-lg-7 { - margin-left: 58.333333%; - } - .offset-lg-8 { - margin-left: 66.666667%; - } - .offset-lg-9 { - margin-left: 75%; - } - .offset-lg-10 { - margin-left: 83.333333%; - } - .offset-lg-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 1200px) { - .col-xl { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; - } - .col-xl-auto { - flex: 0 0 auto; - width: auto; - max-width: none; - } - .col-xl-1 { - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-xl-2 { - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-xl-3 { - flex: 0 0 25%; - max-width: 25%; - } - .col-xl-4 { - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-xl-5 { - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-xl-6 { - flex: 0 0 50%; - max-width: 50%; - } - .col-xl-7 { - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-xl-8 { - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-xl-9 { - flex: 0 0 75%; - max-width: 75%; - } - .col-xl-10 { - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-xl-11 { - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .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.333333%; - } - .offset-xl-2 { - margin-left: 16.666667%; - } - .offset-xl-3 { - margin-left: 25%; - } - .offset-xl-4 { - margin-left: 33.333333%; - } - .offset-xl-5 { - margin-left: 41.666667%; - } - .offset-xl-6 { - margin-left: 50%; - } - .offset-xl-7 { - margin-left: 58.333333%; - } - .offset-xl-8 { - margin-left: 66.666667%; - } - .offset-xl-9 { - margin-left: 75%; - } - .offset-xl-10 { - margin-left: 83.333333%; - } - .offset-xl-11 { - margin-left: 91.666667%; - } -} - -.table { - width: 100%; - max-width: 100%; - margin-bottom: 1rem; - background-color: transparent; -} - -.table th, -.table td { - padding: 0.75rem; - vertical-align: top; - border-top: 1px solid #dee2e6; -} - -.table thead th { - vertical-align: bottom; - border-bottom: 2px solid #dee2e6; -} - -.table tbody + tbody { - border-top: 2px solid #dee2e6; -} - -.table .table { - background-color: #ffffff; -} - -.table-sm th, -.table-sm td { - padding: 0.3rem; -} - -.table-bordered { - border: 1px solid #dee2e6; -} - -.table-bordered th, -.table-bordered td { - border: 1px solid #dee2e6; -} - -.table-bordered thead th, -.table-bordered thead td { - border-bottom-width: 2px; -} - -.table-borderless th, -.table-borderless td, -.table-borderless thead th, -.table-borderless tbody + tbody { - border: 0; -} - -.table-striped tbody tr:nth-of-type(odd) { - background-color: rgba(0, 0, 0, 0.05); -} - -.table-hover tbody tr:hover { - background-color: rgba(0, 0, 0, 0.075); -} - -.table-primary, -.table-primary > th, -.table-primary > td { - background-color: #b8daff; -} - -.table-hover .table-primary:hover { - background-color: #9fcdff; -} - -.table-hover .table-primary:hover > td, -.table-hover .table-primary:hover > th { - background-color: #9fcdff; -} - -.table-secondary, -.table-secondary > th, -.table-secondary > td { - background-color: #d6d8db; -} - -.table-hover .table-secondary:hover { - background-color: #c8cbcf; -} - -.table-hover .table-secondary:hover > td, -.table-hover .table-secondary:hover > th { - background-color: #c8cbcf; -} - -.table-success, -.table-success > th, -.table-success > td { - background-color: #c3e6cb; -} - -.table-hover .table-success:hover { - background-color: #b1dfbb; -} - -.table-hover .table-success:hover > td, -.table-hover .table-success:hover > th { - background-color: #b1dfbb; -} - -.table-info, -.table-info > th, -.table-info > td { - background-color: #bee5eb; -} - -.table-hover .table-info:hover { - background-color: #abdde5; -} - -.table-hover .table-info:hover > td, -.table-hover .table-info:hover > th { - background-color: #abdde5; -} - -.table-warning, -.table-warning > th, -.table-warning > td { - background-color: #ffeeba; -} - -.table-hover .table-warning:hover { - background-color: #ffe8a1; -} - -.table-hover .table-warning:hover > td, -.table-hover .table-warning:hover > th { - background-color: #ffe8a1; -} - -.table-danger, -.table-danger > th, -.table-danger > td { - background-color: #f5c6cb; -} - -.table-hover .table-danger:hover { - background-color: #f1b0b7; -} - -.table-hover .table-danger:hover > td, -.table-hover .table-danger:hover > th { - background-color: #f1b0b7; -} - -.table-light, -.table-light > th, -.table-light > td { - background-color: #fdfdfe; -} - -.table-hover .table-light:hover { - background-color: #ececf6; -} - -.table-hover .table-light:hover > td, -.table-hover .table-light:hover > th { - background-color: #ececf6; -} - -.table-dark, -.table-dark > th, -.table-dark > td { - background-color: #c6c8ca; -} - -.table-hover .table-dark:hover { - background-color: #b9bbbe; -} - -.table-hover .table-dark:hover > td, -.table-hover .table-dark:hover > th { - background-color: #b9bbbe; -} - -.table-active, -.table-active > th, -.table-active > td { - background-color: rgba(0, 0, 0, 0.075); -} - -.table-hover .table-active:hover { - background-color: rgba(0, 0, 0, 0.075); -} - -.table-hover .table-active:hover > td, -.table-hover .table-active:hover > th { - background-color: rgba(0, 0, 0, 0.075); -} - -.table .thead-dark th { - color: #ffffff; - background-color: #212529; - border-color: #32383e; -} - -.table .thead-light th { - color: #495057; - background-color: #e9ecef; - border-color: #dee2e6; -} - -.table-dark { - color: #ffffff; - background-color: #212529; -} - -.table-dark th, -.table-dark td, -.table-dark thead th { - border-color: #32383e; -} - -.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 { - 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; - -ms-overflow-style: -ms-autohiding-scrollbar; - } - .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; - -ms-overflow-style: -ms-autohiding-scrollbar; - } - .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; - -ms-overflow-style: -ms-autohiding-scrollbar; - } - .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; - -ms-overflow-style: -ms-autohiding-scrollbar; - } - .table-responsive-xl > .table-bordered { - border: 0; - } -} - -.table-responsive { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; -} - -.table-responsive > .table-bordered { - border: 0; -} - -.form-control { - display: block; - width: 100%; - padding: 0.375rem 0.75rem; - font-size: 1rem; - line-height: 1.5; - color: #495057; - background-color: #ffffff; - background-clip: padding-box; - border: 1px solid #ced4da; - border-radius: 0.25rem; - box-shadow: inset 0 0 0 transparent; - transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} - -@media screen and (prefers-reduced-motion: reduce) { - .form-control { - transition: none; - } -} - -.form-control::-ms-expand { - background-color: transparent; - border: 0; -} - -.form-control:focus { - color: #495057; - background-color: #ffffff; - border-color: #80bdff; - outline: 0; - box-shadow: inset 0 0 0 transparent, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.form-control::placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control:disabled, .form-control[readonly] { - background-color: #e9ecef; - opacity: 1; -} - -select.form-control:not([size]):not([multiple]) { - height: calc(2.25rem + 2px); -} - -select.form-control:focus::-ms-value { - color: #495057; - background-color: #ffffff; -} - -.form-control-file, -.form-control-range { - display: block; - width: 100%; -} - -.col-form-label { - padding-top: calc(0.375rem + 1px); - padding-bottom: calc(0.375rem + 1px); - margin-bottom: 0; - font-size: inherit; - line-height: 1.5; -} - -.col-form-label-lg { - padding-top: calc(0.5rem + 1px); - padding-bottom: calc(0.5rem + 1px); - font-size: 1.25rem; - line-height: 1.5; -} - -.col-form-label-sm { - padding-top: calc(0.25rem + 1px); - padding-bottom: calc(0.25rem + 1px); - font-size: 0.875rem; - line-height: 1.5; -} - -.form-control-plaintext { - display: block; - width: 100%; - padding-top: 0.375rem; - padding-bottom: 0.375rem; - margin-bottom: 0; - line-height: 1.5; - color: #212529; - background-color: transparent; - border: solid transparent; - border-width: 1px 0; -} - -.form-control-plaintext.form-control-sm, .input-group-sm > .form-control-plaintext.form-control, -.input-group-sm > .input-group-prepend > .form-control-plaintext.input-group-text, -.input-group-sm > .input-group-append > .form-control-plaintext.input-group-text, -.input-group-sm > .input-group-prepend > .form-control-plaintext.btn, -.input-group-sm > .input-group-append > .form-control-plaintext.btn, .form-control-plaintext.form-control-lg, .input-group-lg > .form-control-plaintext.form-control, -.input-group-lg > .input-group-prepend > .form-control-plaintext.input-group-text, -.input-group-lg > .input-group-append > .form-control-plaintext.input-group-text, -.input-group-lg > .input-group-prepend > .form-control-plaintext.btn, -.input-group-lg > .input-group-append > .form-control-plaintext.btn { - padding-right: 0; - padding-left: 0; -} - -.form-control-sm, .input-group-sm > .form-control, -.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; -} - -select.form-control-sm:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]), -.input-group-sm > .input-group-prepend > select.input-group-text:not([size]):not([multiple]), -.input-group-sm > .input-group-append > select.input-group-text:not([size]):not([multiple]), -.input-group-sm > .input-group-prepend > select.btn:not([size]):not([multiple]), -.input-group-sm > .input-group-append > select.btn:not([size]):not([multiple]) { - height: calc(1.8125rem + 2px); -} - -.form-control-lg, .input-group-lg > .form-control, -.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; -} - -select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]), -.input-group-lg > .input-group-prepend > select.input-group-text:not([size]):not([multiple]), -.input-group-lg > .input-group-append > select.input-group-text:not([size]):not([multiple]), -.input-group-lg > .input-group-prepend > select.btn:not([size]):not([multiple]), -.input-group-lg > .input-group-append > select.btn:not([size]):not([multiple]) { - height: calc(2.875rem + 2px); -} - -.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 { - color: #6c757d; -} - -.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: #28a745; -} - -.valid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: .5rem; - margin-top: .1rem; - font-size: .875rem; - line-height: 1; - color: #ffffff; - background-color: rgba(40, 167, 69, 0.8); - border-radius: .2rem; -} - -.was-validated .form-control:valid, .form-control.is-valid, .was-validated -.custom-select:valid, -.custom-select.is-valid { - border-color: #28a745; -} - -.was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated -.custom-select:valid:focus, -.custom-select.is-valid:focus { - border-color: #28a745; - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); -} - -.was-validated .form-control:valid ~ .valid-feedback, -.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, -.form-control.is-valid ~ .valid-tooltip, .was-validated -.custom-select:valid ~ .valid-feedback, -.was-validated -.custom-select:valid ~ .valid-tooltip, -.custom-select.is-valid ~ .valid-feedback, -.custom-select.is-valid ~ .valid-tooltip { - display: block; -} - -.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { - color: #28a745; -} - -.was-validated .form-check-input:valid ~ .valid-feedback, -.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, -.form-check-input.is-valid ~ .valid-tooltip { - display: block; -} - -.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { - color: #28a745; -} - -.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { - background-color: #71dd8a; -} - -.was-validated .custom-control-input:valid ~ .valid-feedback, -.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback, -.custom-control-input.is-valid ~ .valid-tooltip { - display: block; -} - -.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { - background-color: #34ce57; -} - -.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 1px #ffffff, 0 0 0 0.2rem rgba(40, 167, 69, 0.25); -} - -.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { - border-color: #28a745; -} - -.was-validated .custom-file-input:valid ~ .custom-file-label::before, .custom-file-input.is-valid ~ .custom-file-label::before { - border-color: inherit; -} - -.was-validated .custom-file-input:valid ~ .valid-feedback, -.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback, -.custom-file-input.is-valid ~ .valid-tooltip { - display: block; -} - -.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); -} - -.invalid-feedback { - display: none; - width: 100%; - margin-top: 0.25rem; - font-size: 80%; - color: #dc3545; -} - -.invalid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: .5rem; - margin-top: .1rem; - font-size: .875rem; - line-height: 1; - color: #ffffff; - background-color: rgba(220, 53, 69, 0.8); - border-radius: .2rem; -} - -.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated -.custom-select:invalid, -.custom-select.is-invalid { - border-color: #dc3545; -} - -.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated -.custom-select:invalid:focus, -.custom-select.is-invalid:focus { - border-color: #dc3545; - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); -} - -.was-validated .form-control:invalid ~ .invalid-feedback, -.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, -.form-control.is-invalid ~ .invalid-tooltip, .was-validated -.custom-select:invalid ~ .invalid-feedback, -.was-validated -.custom-select:invalid ~ .invalid-tooltip, -.custom-select.is-invalid ~ .invalid-feedback, -.custom-select.is-invalid ~ .invalid-tooltip { - display: block; -} - -.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { - color: #dc3545; -} - -.was-validated .form-check-input:invalid ~ .invalid-feedback, -.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, -.form-check-input.is-invalid ~ .invalid-tooltip { - display: block; -} - -.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { - color: #dc3545; -} - -.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { - background-color: #efa2a9; -} - -.was-validated .custom-control-input:invalid ~ .invalid-feedback, -.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback, -.custom-control-input.is-invalid ~ .invalid-tooltip { - display: block; -} - -.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { - background-color: #e4606d; -} - -.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 1px #ffffff, 0 0 0 0.2rem rgba(220, 53, 69, 0.25); -} - -.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { - border-color: #dc3545; -} - -.was-validated .custom-file-input:invalid ~ .custom-file-label::before, .custom-file-input.is-invalid ~ .custom-file-label::before { - border-color: inherit; -} - -.was-validated .custom-file-input:invalid ~ .invalid-feedback, -.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback, -.custom-file-input.is-invalid ~ .invalid-tooltip { - display: block; -} - -.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 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; - 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; - text-align: center; - white-space: nowrap; - vertical-align: middle; - user-select: none; - border: 1px solid transparent; - padding: 0.375rem 0.75rem; - font-size: 1rem; - line-height: 1.5; - border-radius: 0.25rem; - 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 screen and (prefers-reduced-motion: reduce) { - .btn { - transition: none; - } -} - -.btn:hover, .btn:focus { - text-decoration: none; -} - -.btn:focus, .btn.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.btn.disabled, .btn:disabled { - opacity: 0.65; - box-shadow: none; -} - -.btn:not(:disabled):not(.disabled) { - cursor: pointer; -} - -.btn:not(:disabled):not(.disabled):active, .btn:not(:disabled):not(.disabled).active { - background-image: none; - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} - -.btn:not(:disabled):not(.disabled):active:focus, .btn:not(:disabled):not(.disabled).active:focus { - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25), inset 0 3px 5px rgba(0, 0, 0, 0.125); -} - -a.btn.disabled, -fieldset:disabled a.btn { - pointer-events: none; -} - -.btn-primary { - color: #ffffff; - background-color: #007bff; - border-color: #007bff; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.btn-primary:hover { - color: #ffffff; - background-color: #0069d9; - border-color: #0062cc; -} - -.btn-primary:focus, .btn-primary.focus { - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(0, 123, 255, 0.5); -} - -.btn-primary.disabled, .btn-primary:disabled { - color: #ffffff; - background-color: #007bff; - border-color: #007bff; -} - -.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, -.show > .btn-primary.dropdown-toggle { - color: #ffffff; - background-color: #0062cc; - border-color: #005cbf; -} - -.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, -.show > .btn-primary.dropdown-toggle:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(0, 123, 255, 0.5); -} - -.btn-secondary { - color: #ffffff; - background-color: #6c757d; - border-color: #6c757d; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.btn-secondary:hover { - color: #ffffff; - background-color: #5a6268; - border-color: #545b62; -} - -.btn-secondary:focus, .btn-secondary.focus { - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(108, 117, 125, 0.5); -} - -.btn-secondary.disabled, .btn-secondary:disabled { - color: #ffffff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, -.show > .btn-secondary.dropdown-toggle { - color: #ffffff; - background-color: #545b62; - border-color: #4e555b; -} - -.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, -.show > .btn-secondary.dropdown-toggle:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(108, 117, 125, 0.5); -} - -.btn-success { - color: #ffffff; - background-color: #28a745; - border-color: #28a745; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.btn-success:hover { - color: #ffffff; - background-color: #218838; - border-color: #1e7e34; -} - -.btn-success:focus, .btn-success.focus { - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} - -.btn-success.disabled, .btn-success:disabled { - color: #ffffff; - background-color: #28a745; - border-color: #28a745; -} - -.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, -.show > .btn-success.dropdown-toggle { - color: #ffffff; - background-color: #1e7e34; - border-color: #1c7430; -} - -.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, -.show > .btn-success.dropdown-toggle:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} - -.btn-info { - color: #ffffff; - background-color: #17a2b8; - border-color: #17a2b8; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.btn-info:hover { - color: #ffffff; - background-color: #138496; - border-color: #117a8b; -} - -.btn-info:focus, .btn-info.focus { - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} - -.btn-info.disabled, .btn-info:disabled { - color: #ffffff; - background-color: #17a2b8; - border-color: #17a2b8; -} - -.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, -.show > .btn-info.dropdown-toggle { - color: #ffffff; - background-color: #117a8b; - border-color: #10707f; -} - -.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, -.show > .btn-info.dropdown-toggle:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} - -.btn-warning { - color: #1F2D3D; - background-color: #ffc107; - border-color: #ffc107; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.btn-warning:hover { - color: #1F2D3D; - background-color: #e0a800; - border-color: #d39e00; -} - -.btn-warning:focus, .btn-warning.focus { - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} - -.btn-warning.disabled, .btn-warning:disabled { - color: #1F2D3D; - background-color: #ffc107; - border-color: #ffc107; -} - -.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, -.show > .btn-warning.dropdown-toggle { - color: #1F2D3D; - background-color: #d39e00; - border-color: #c69500; -} - -.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, -.show > .btn-warning.dropdown-toggle:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} - -.btn-danger { - color: #ffffff; - background-color: #dc3545; - border-color: #dc3545; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.btn-danger:hover { - color: #ffffff; - background-color: #c82333; - border-color: #bd2130; -} - -.btn-danger:focus, .btn-danger.focus { - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} - -.btn-danger.disabled, .btn-danger:disabled { - color: #ffffff; - background-color: #dc3545; - border-color: #dc3545; -} - -.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, -.show > .btn-danger.dropdown-toggle { - color: #ffffff; - background-color: #bd2130; - border-color: #b21f2d; -} - -.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, -.show > .btn-danger.dropdown-toggle:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} - -.btn-light { - color: #1F2D3D; - background-color: #f8f9fa; - border-color: #f8f9fa; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.btn-light:hover { - color: #1F2D3D; - background-color: #e2e6ea; - border-color: #dae0e5; -} - -.btn-light:focus, .btn-light.focus { - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} - -.btn-light.disabled, .btn-light:disabled { - color: #1F2D3D; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, -.show > .btn-light.dropdown-toggle { - color: #1F2D3D; - background-color: #dae0e5; - border-color: #d3d9df; -} - -.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, -.show > .btn-light.dropdown-toggle:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} - -.btn-dark { - color: #ffffff; - background-color: #343a40; - border-color: #343a40; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.btn-dark:hover { - color: #ffffff; - background-color: #23272b; - border-color: #1d2124; -} - -.btn-dark:focus, .btn-dark.focus { - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} - -.btn-dark.disabled, .btn-dark:disabled { - color: #ffffff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, -.show > .btn-dark.dropdown-toggle { - color: #ffffff; - background-color: #1d2124; - border-color: #171a1d; -} - -.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, -.show > .btn-dark.dropdown-toggle:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} - -.btn-outline-primary { - color: #007bff; - background-color: transparent; - background-image: none; - border-color: #007bff; -} - -.btn-outline-primary:hover { - color: #ffffff; - background-color: #007bff; - border-color: #007bff; -} - -.btn-outline-primary:focus, .btn-outline-primary.focus { - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); -} - -.btn-outline-primary.disabled, .btn-outline-primary:disabled { - color: #007bff; - background-color: transparent; -} - -.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, -.show > .btn-outline-primary.dropdown-toggle { - color: #ffffff; - background-color: #007bff; - border-color: #007bff; -} - -.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-primary.dropdown-toggle:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(0, 123, 255, 0.5); -} - -.btn-outline-secondary { - color: #6c757d; - background-color: transparent; - background-image: none; - border-color: #6c757d; -} - -.btn-outline-secondary:hover { - color: #ffffff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-outline-secondary:focus, .btn-outline-secondary.focus { - box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); -} - -.btn-outline-secondary.disabled, .btn-outline-secondary:disabled { - color: #6c757d; - background-color: transparent; -} - -.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, -.show > .btn-outline-secondary.dropdown-toggle { - color: #ffffff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-secondary.dropdown-toggle:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(108, 117, 125, 0.5); -} - -.btn-outline-success { - color: #28a745; - background-color: transparent; - background-image: none; - border-color: #28a745; -} - -.btn-outline-success:hover { - color: #ffffff; - background-color: #28a745; - border-color: #28a745; -} - -.btn-outline-success:focus, .btn-outline-success.focus { - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} - -.btn-outline-success.disabled, .btn-outline-success:disabled { - color: #28a745; - background-color: transparent; -} - -.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, -.show > .btn-outline-success.dropdown-toggle { - color: #ffffff; - background-color: #28a745; - border-color: #28a745; -} - -.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-success.dropdown-toggle:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} - -.btn-outline-info { - color: #17a2b8; - background-color: transparent; - background-image: none; - border-color: #17a2b8; -} - -.btn-outline-info:hover { - color: #ffffff; - background-color: #17a2b8; - border-color: #17a2b8; -} - -.btn-outline-info:focus, .btn-outline-info.focus { - box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} - -.btn-outline-info.disabled, .btn-outline-info:disabled { - color: #17a2b8; - background-color: transparent; -} - -.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, -.show > .btn-outline-info.dropdown-toggle { - color: #ffffff; - background-color: #17a2b8; - border-color: #17a2b8; -} - -.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-info.dropdown-toggle:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} - -.btn-outline-warning { - color: #ffc107; - background-color: transparent; - background-image: none; - border-color: #ffc107; -} - -.btn-outline-warning:hover { - color: #1F2D3D; - background-color: #ffc107; - border-color: #ffc107; -} - -.btn-outline-warning:focus, .btn-outline-warning.focus { - box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} - -.btn-outline-warning.disabled, .btn-outline-warning:disabled { - color: #ffc107; - background-color: transparent; -} - -.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, -.show > .btn-outline-warning.dropdown-toggle { - color: #1F2D3D; - background-color: #ffc107; - border-color: #ffc107; -} - -.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-warning.dropdown-toggle:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} - -.btn-outline-danger { - color: #dc3545; - background-color: transparent; - background-image: none; - border-color: #dc3545; -} - -.btn-outline-danger:hover { - color: #ffffff; - background-color: #dc3545; - border-color: #dc3545; -} - -.btn-outline-danger:focus, .btn-outline-danger.focus { - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} - -.btn-outline-danger.disabled, .btn-outline-danger:disabled { - color: #dc3545; - background-color: transparent; -} - -.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, -.show > .btn-outline-danger.dropdown-toggle { - color: #ffffff; - background-color: #dc3545; - border-color: #dc3545; -} - -.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-danger.dropdown-toggle:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} - -.btn-outline-light { - color: #f8f9fa; - background-color: transparent; - background-image: none; - border-color: #f8f9fa; -} - -.btn-outline-light:hover { - color: #1F2D3D; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-outline-light:focus, .btn-outline-light.focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} - -.btn-outline-light.disabled, .btn-outline-light:disabled { - color: #f8f9fa; - background-color: transparent; -} - -.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, -.show > .btn-outline-light.dropdown-toggle { - color: #1F2D3D; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-light.dropdown-toggle:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} - -.btn-outline-dark { - color: #343a40; - background-color: transparent; - background-image: none; - border-color: #343a40; -} - -.btn-outline-dark:hover { - color: #ffffff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-outline-dark:focus, .btn-outline-dark.focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} - -.btn-outline-dark.disabled, .btn-outline-dark:disabled { - color: #343a40; - background-color: transparent; -} - -.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, -.show > .btn-outline-dark.dropdown-toggle { - color: #ffffff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-dark.dropdown-toggle:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} - -.btn-link { - font-weight: 400; - color: #007bff; - background-color: transparent; -} - -.btn-link:hover { - color: #0056b3; - text-decoration: none; - background-color: transparent; - border-color: transparent; -} - -.btn-link:focus, .btn-link.focus { - text-decoration: none; - border-color: transparent; - box-shadow: none; -} - -.btn-link:disabled, .btn-link.disabled { - color: #6c757d; - pointer-events: none; -} - -.btn-lg, .btn-group-lg > .btn { - padding: 0.5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: 0.3rem; -} - -.btn-sm, .btn-group-sm > .btn { - padding: 0.25rem 0.5rem; - font-size: 0.875rem; - line-height: 1.5; - border-radius: 0.2rem; -} - -.btn-block { - display: block; - width: 100%; -} - -.btn-block + .btn-block { - margin-top: 0.5rem; -} - -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} - -.fade { - transition: opacity 0.15s linear; -} - -@media screen and (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.35s ease; -} - -@media screen and (prefers-reduced-motion: reduce) { - .collapsing { - transition: none; - } -} - -.dropup, -.dropright, -.dropdown, -.dropleft { - position: relative; -} - -.dropdown-toggle::after { - display: inline-block; - width: 0; - height: 0; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid; - border-right: 0.3em solid transparent; - border-bottom: 0; - border-left: 0.3em solid transparent; -} - -.dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 10rem; - padding: 0.5rem 0; - margin: 0.125rem 0 0; - font-size: 1rem; - color: #212529; - text-align: left; - list-style: none; - background-color: #ffffff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 0.25rem; - box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.175); -} - -.dropdown-menu-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; - width: 0; - height: 0; - 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; - width: 0; - height: 0; - 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; - width: 0; - height: 0; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; -} - -.dropleft .dropdown-toggle::after { - display: none; -} - -.dropleft .dropdown-toggle::before { - display: inline-block; - width: 0; - height: 0; - margin-right: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid transparent; - border-right: 0.3em solid; - border-bottom: 0.3em solid transparent; -} - -.dropleft .dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropleft .dropdown-toggle::before { - vertical-align: 0; -} - -.dropdown-menu[x-placement^="top"], .dropdown-menu[x-placement^="right"], .dropdown-menu[x-placement^="bottom"], .dropdown-menu[x-placement^="left"] { - right: auto; - bottom: auto; -} - -.dropdown-divider { - height: 0; - margin: 0.5rem 0; - overflow: hidden; - border-top: 1px solid #e9ecef; -} - -.dropdown-item { - display: block; - width: 100%; - padding: 0.25rem 1rem; - clear: both; - font-weight: 400; - color: #212529; - text-align: inherit; - white-space: nowrap; - background-color: transparent; - border: 0; -} - -.dropdown-item:hover, .dropdown-item:focus { - color: #16181b; - text-decoration: none; - background-color: #f8f9fa; -} - -.dropdown-item.active, .dropdown-item:active { - color: #ffffff; - text-decoration: none; - background-color: #007bff; -} - -.dropdown-item.disabled, .dropdown-item:disabled { - color: #6c757d; - background-color: transparent; -} - -.dropdown-menu.show { - display: block; -} - -.dropdown-header { - display: block; - padding: 0.5rem 1rem; - margin-bottom: 0; - font-size: 0.875rem; - color: #6c757d; - white-space: nowrap; -} - -.dropdown-item-text { - display: block; - padding: 0.25rem 1rem; - color: #212529; -} - -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-flex; - vertical-align: middle; -} - -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - flex: 0 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-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group, -.btn-group-vertical .btn + .btn, -.btn-group-vertical .btn + .btn-group, -.btn-group-vertical .btn-group + .btn, -.btn-group-vertical .btn-group + .btn-group { - margin-left: -1px; -} - -.btn-toolbar { - display: flex; - flex-wrap: wrap; - justify-content: flex-start; -} - -.btn-toolbar .input-group { - width: auto; -} - -.btn-group > .btn:first-child { - margin-left: 0; -} - -.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.show .dropdown-toggle { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} - -.btn-group.show .dropdown-toggle.btn-link { - box-shadow: none; -} - -.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 + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} - -.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 > .custom-select, -.input-group > .custom-file { - position: relative; - flex: 1 1 auto; - width: 1%; - margin-bottom: 0; -} - -.input-group > .form-control:focus, -.input-group > .custom-select:focus, -.input-group > .custom-file:focus { - z-index: 3; -} - -.input-group > .form-control + .form-control, -.input-group > .form-control + .custom-select, -.input-group > .form-control + .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:not(:last-child), -.input-group > .custom-select:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group > .form-control:not(:first-child), -.input-group > .custom-select:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.input-group > .custom-file { - display: flex; - align-items: center; -} - -.input-group > .custom-file:not(:last-child) .custom-file-label, -.input-group > .custom-file:not(:last-child) .custom-file-label::after { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group > .custom-file:not(:first-child) .custom-file-label, -.input-group > .custom-file:not(:first-child) .custom-file-label::after { - border-top-left-radius: 0; - border-bottom-left-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 + .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: #495057; - text-align: center; - white-space: nowrap; - background-color: #e9ecef; - border: 1px solid #ced4da; - border-radius: 0.25rem; -} - -.input-group-text input[type="radio"], -.input-group-text input[type="checkbox"] { - margin-top: 0; -} - -.input-group > .input-group-prepend > .btn, -.input-group > .input-group-prepend > .input-group-text, -.input-group > .input-group-append:not(:last-child) > .btn, -.input-group > .input-group-append:not(:last-child) > .input-group-text, -.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group > .input-group-append > .btn, -.input-group > .input-group-append > .input-group-text, -.input-group > .input-group-prepend:not(:first-child) > .btn, -.input-group > .input-group-prepend:not(:first-child) > .input-group-text, -.input-group > .input-group-prepend:first-child > .btn:not(:first-child), -.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.custom-control { - position: relative; - display: block; - min-height: 1.5rem; - padding-left: 1.5rem; -} - -.custom-control-inline { - display: inline-flex; - margin-right: 1rem; -} - -.custom-control-input { - position: absolute; - z-index: -1; - opacity: 0; -} - -.custom-control-input:checked ~ .custom-control-label::before { - color: #ffffff; - background-color: #007bff; - box-shadow: none; -} - -.custom-control-input:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 1px #ffffff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-control-input:active ~ .custom-control-label::before { - color: #ffffff; - background-color: #b3d7ff; - box-shadow: none; -} - -.custom-control-input:disabled ~ .custom-control-label { - color: #6c757d; -} - -.custom-control-input:disabled ~ .custom-control-label::before { - background-color: #e9ecef; -} - -.custom-control-label { - margin-bottom: 0; -} - -.custom-control-label::before { - position: absolute; - top: 0.25rem; - left: 0; - display: block; - width: 1rem; - height: 1rem; - pointer-events: none; - content: ""; - user-select: none; - background-color: #dee2e6; - box-shadow: inset 0 0.25rem 0.25rem rgba(0, 0, 0, 0.1); -} - -.custom-control-label::after { - position: absolute; - top: 0.25rem; - left: 0; - display: block; - width: 1rem; - height: 1rem; - content: ""; - background-repeat: no-repeat; - background-position: center center; - background-size: 50% 50%; -} - -.custom-checkbox .custom-control-label::before { - border-radius: 0.25rem; -} - -.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before { - background-color: #007bff; -} - -.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23ffffff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"); -} - -.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { - background-color: #007bff; - box-shadow: none; -} - -.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23ffffff' d='M0 2h4'/%3E%3C/svg%3E"); -} - -.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { - background-color: rgba(0, 123, 255, 0.5); -} - -.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { - background-color: rgba(0, 123, 255, 0.5); -} - -.custom-radio .custom-control-label::before { - border-radius: 50%; -} - -.custom-radio .custom-control-input:checked ~ .custom-control-label::before { - background-color: #007bff; -} - -.custom-radio .custom-control-input:checked ~ .custom-control-label::after { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23ffffff'/%3E%3C/svg%3E"); -} - -.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { - background-color: rgba(0, 123, 255, 0.5); -} - -.custom-select { - display: inline-block; - width: 100%; - height: calc(2.25rem + 2px); - padding: 0.375rem 1.75rem 0.375rem 0.75rem; - line-height: 1.5; - color: #495057; - vertical-align: middle; - background: #ffffff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center; - background-size: 8px 10px; - border: 1px solid #ced4da; - border-radius: 0.25rem; - appearance: none; -} - -.custom-select:focus { - border-color: #80bdff; - outline: 0; - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075), 0 0 5px rgba(128, 189, 255, 0.5); -} - -.custom-select:focus::-ms-value { - color: #495057; - background-color: #ffffff; -} - -.custom-select[multiple], .custom-select[size]:not([size="1"]) { - height: auto; - padding-right: 0.75rem; - background-image: none; -} - -.custom-select:disabled { - color: #6c757d; - background-color: #e9ecef; -} - -.custom-select::-ms-expand { - opacity: 0; -} - -.custom-select-sm { - height: calc(1.8125rem + 2px); - padding-top: 0.375rem; - padding-bottom: 0.375rem; - font-size: 75%; -} - -.custom-select-lg { - height: calc(2.875rem + 2px); - padding-top: 0.375rem; - padding-bottom: 0.375rem; - font-size: 125%; -} - -.custom-file { - position: relative; - display: inline-block; - width: 100%; - height: calc(2.25rem + 2px); - margin-bottom: 0; -} - -.custom-file-input { - position: relative; - z-index: 2; - width: 100%; - height: calc(2.25rem + 2px); - margin: 0; - opacity: 0; -} - -.custom-file-input:focus ~ .custom-file-label { - border-color: #80bdff; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-file-input:focus ~ .custom-file-label::after { - border-color: #80bdff; -} - -.custom-file-input:lang(en) ~ .custom-file-label::after { - content: "Browse"; -} - -.custom-file-label { - position: absolute; - top: 0; - right: 0; - left: 0; - z-index: 1; - height: calc(2.25rem + 2px); - padding: 0.375rem 0.75rem; - line-height: 1.5; - color: #495057; - background-color: #ffffff; - border: 1px solid #ced4da; - border-radius: 0.25rem; - box-shadow: inset 0 0 0 transparent; -} - -.custom-file-label::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - z-index: 3; - display: block; - height: calc(calc(2.25rem + 2px) - 1px * 2); - padding: 0.375rem 0.75rem; - line-height: 1.5; - color: #495057; - content: "Browse"; - background-color: #e9ecef; - border-left: 1px solid #ced4da; - border-radius: 0 0.25rem 0.25rem 0; -} - -.custom-range { - width: 100%; - padding-left: 0; - background-color: transparent; - appearance: none; -} - -.custom-range:focus { - outline: none; -} - -.custom-range::-moz-focus-outer { - border: 0; -} - -.custom-range::-webkit-slider-thumb { - width: 1rem; - height: 1rem; - margin-top: -0.25rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - box-shadow: 0 0.1rem 0.25rem rgba(0, 0, 0, 0.1); - appearance: none; -} - -.custom-range::-webkit-slider-thumb:focus { - outline: none; - box-shadow: 0 0 0 1px #ffffff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-range::-webkit-slider-thumb:active { - background-color: #b3d7ff; -} - -.custom-range::-webkit-slider-runnable-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem; - box-shadow: inset 0 0.25rem 0.25rem rgba(0, 0, 0, 0.1); -} - -.custom-range::-moz-range-thumb { - width: 1rem; - height: 1rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - box-shadow: 0 0.1rem 0.25rem rgba(0, 0, 0, 0.1); - appearance: none; -} - -.custom-range::-moz-range-thumb:focus { - outline: none; - box-shadow: 0 0 0 1px #ffffff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-range::-moz-range-thumb:active { - background-color: #b3d7ff; -} - -.custom-range::-moz-range-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem; - box-shadow: inset 0 0.25rem 0.25rem rgba(0, 0, 0, 0.1); -} - -.custom-range::-ms-thumb { - width: 1rem; - height: 1rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - box-shadow: 0 0.1rem 0.25rem rgba(0, 0, 0, 0.1); - appearance: none; -} - -.custom-range::-ms-thumb:focus { - outline: none; - box-shadow: 0 0 0 1px #ffffff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-range::-ms-thumb:active { - background-color: #b3d7ff; -} - -.custom-range::-ms-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: transparent; - border-color: transparent; - border-width: 0.5rem; - box-shadow: inset 0 0.25rem 0.25rem rgba(0, 0, 0, 0.1); -} - -.custom-range::-ms-fill-lower { - background-color: #dee2e6; - border-radius: 1rem; -} - -.custom-range::-ms-fill-upper { - margin-right: 15px; - background-color: #dee2e6; - border-radius: 1rem; -} - -.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: #6c757d; -} - -.nav-tabs { - border-bottom: 1px solid #dee2e6; -} - -.nav-tabs .nav-item { - margin-bottom: -1px; -} - -.nav-tabs .nav-link { - border: 1px solid transparent; - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} - -.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { - border-color: #e9ecef #e9ecef #dee2e6; -} - -.nav-tabs .nav-link.disabled { - color: #6c757d; - background-color: transparent; - border-color: transparent; -} - -.nav-tabs .nav-link.active, -.nav-tabs .nav-item.show .nav-link { - color: #495057; - background-color: #ffffff; - border-color: #dee2e6 #dee2e6 #ffffff; -} - -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.nav-pills .nav-link { - border-radius: 0.25rem; -} - -.nav-pills .nav-link.active, -.nav-pills .show > .nav-link { - color: #ffffff; - background-color: #007bff; -} - -.nav-fill .nav-item { - flex: 1 1 auto; - text-align: center; -} - -.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 0.5rem; -} - -.navbar > .container, -.navbar > .container-fluid { - 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: 0.5rem; - 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.25rem; -} - -.navbar-toggler:hover, .navbar-toggler:focus { - text-decoration: none; -} - -.navbar-toggler:not(:disabled):not(.disabled) { - cursor: pointer; -} - -.navbar-toggler-icon { - display: inline-block; - width: 1.5em; - height: 1.5em; - vertical-align: middle; - content: ""; - background: no-repeat center center; - background-size: 100% 100%; -} - -@media (max-width: 575.98px) { - .navbar-expand-sm > .container, - .navbar-expand-sm > .container-fluid { - padding-right: 0; - padding-left: 0; - } -} - -@media (min-width: 576px) { - .navbar-expand-sm { - 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: 1rem; - padding-left: 1rem; - } - .navbar-expand-sm > .container, - .navbar-expand-sm > .container-fluid { - flex-wrap: nowrap; - } - .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 { - 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: 1rem; - padding-left: 1rem; - } - .navbar-expand-md > .container, - .navbar-expand-md > .container-fluid { - flex-wrap: nowrap; - } - .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 { - 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: 1rem; - padding-left: 1rem; - } - .navbar-expand-lg > .container, - .navbar-expand-lg > .container-fluid { - flex-wrap: nowrap; - } - .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 { - 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: 1rem; - padding-left: 1rem; - } - .navbar-expand-xl > .container, - .navbar-expand-xl > .container-fluid { - flex-wrap: nowrap; - } - .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 { - 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: 1rem; - padding-left: 1rem; -} - -.navbar-expand > .container, -.navbar-expand > .container-fluid { - flex-wrap: nowrap; -} - -.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;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); -} - -.navbar-light .navbar-text { - color: rgba(0, 0, 0, 0.5); -} - -.navbar-light .navbar-text a { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-dark .navbar-brand { - color: #ffffff; -} - -.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { - color: #ffffff; -} - -.navbar-dark .navbar-nav .nav-link { - color: rgba(255, 255, 255, 0.75); -} - -.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { - color: white; -} - -.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: #ffffff; -} - -.navbar-dark .navbar-toggler { - color: rgba(255, 255, 255, 0.75); - border-color: rgba(255, 255, 255, 0.1); -} - -.navbar-dark .navbar-toggler-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.75)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); -} - -.navbar-dark .navbar-text { - color: rgba(255, 255, 255, 0.75); -} - -.navbar-dark .navbar-text a { - color: #ffffff; -} - -.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { - color: #ffffff; -} - -.card { - position: relative; - display: flex; - flex-direction: column; - min-width: 0; - word-wrap: break-word; - background-color: #ffffff; - background-clip: border-box; - border: 0 solid rgba(0, 0, 0, 0.125); - border-radius: 0.25rem; -} - -.card > hr { - margin-right: 0; - margin-left: 0; -} - -.card > .list-group:first-child .list-group-item:first-child { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} - -.card > .list-group:last-child .list-group-item:last-child { - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} - -.card-body { - flex: 1 1 auto; - padding: 1.25rem; -} - -.card-title { - margin-bottom: 0.75rem; -} - -.card-subtitle { - margin-top: -0.375rem; - margin-bottom: 0; -} - -.card-text:last-child { - margin-bottom: 0; -} - -.card-link:hover { - text-decoration: none; -} - -.card-link + .card-link { - margin-left: 1.25rem; -} - -.card-header { - padding: 0.75rem 1.25rem; - margin-bottom: 0; - background-color: rgba(0, 0, 0, 0.03); - border-bottom: 0 solid rgba(0, 0, 0, 0.125); -} - -.card-header:first-child { - border-radius: calc(0.25rem - 0) calc(0.25rem - 0) 0 0; -} - -.card-header + .list-group .list-group-item:first-child { - border-top: 0; -} - -.card-footer { - padding: 0.75rem 1.25rem; - background-color: rgba(0, 0, 0, 0.03); - border-top: 0 solid rgba(0, 0, 0, 0.125); -} - -.card-footer:last-child { - border-radius: 0 0 calc(0.25rem - 0) calc(0.25rem - 0); -} - -.card-header-tabs { - margin-right: -0.625rem; - margin-bottom: -0.75rem; - margin-left: -0.625rem; - border-bottom: 0; -} - -.card-header-pills { - margin-right: -0.625rem; - margin-left: -0.625rem; -} - -.card-img-overlay { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - padding: 1.25rem; -} - -.card-img { - width: 100%; - border-radius: calc(0.25rem - 0); -} - -.card-img-top { - width: 100%; - border-top-left-radius: calc(0.25rem - 0); - border-top-right-radius: calc(0.25rem - 0); -} - -.card-img-bottom { - width: 100%; - border-bottom-right-radius: calc(0.25rem - 0); - border-bottom-left-radius: calc(0.25rem - 0); -} - -.card-deck { - display: flex; - flex-direction: column; -} - -.card-deck .card { - margin-bottom: 7.5px; -} - -@media (min-width: 576px) { - .card-deck { - flex-flow: row wrap; - margin-right: -7.5px; - margin-left: -7.5px; - } - .card-deck .card { - display: flex; - flex: 1 0 0%; - flex-direction: column; - margin-right: 7.5px; - margin-bottom: 0; - margin-left: 7.5px; - } -} - -.card-group { - display: flex; - flex-direction: column; -} - -.card-group > .card { - margin-bottom: 7.5px; -} - -@media (min-width: 576px) { - .card-group { - 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:first-child { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - .card-group > .card:first-child .card-img-top, - .card-group > .card:first-child .card-header { - border-top-right-radius: 0; - } - .card-group > .card:first-child .card-img-bottom, - .card-group > .card:first-child .card-footer { - border-bottom-right-radius: 0; - } - .card-group > .card:last-child { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - .card-group > .card:last-child .card-img-top, - .card-group > .card:last-child .card-header { - border-top-left-radius: 0; - } - .card-group > .card:last-child .card-img-bottom, - .card-group > .card:last-child .card-footer { - border-bottom-left-radius: 0; - } - .card-group > .card:only-child { - border-radius: 0.25rem; - } - .card-group > .card:only-child .card-img-top, - .card-group > .card:only-child .card-header { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; - } - .card-group > .card:only-child .card-img-bottom, - .card-group > .card:only-child .card-footer { - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; - } - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) { - border-radius: 0; - } - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top, - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom, - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header, - .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer { - border-radius: 0; - } -} - -.card-columns .card { - margin-bottom: 0.75rem; -} - -@media (min-width: 576px) { - .card-columns { - column-count: 3; - column-gap: 1.25rem; - orphans: 1; - widows: 1; - } - .card-columns .card { - display: inline-block; - width: 100%; - } -} - -.accordion .card:not(:first-of-type):not(:last-of-type) { - border-bottom: 0; - border-radius: 0; -} - -.accordion .card:not(:first-of-type) .card-header:first-child { - border-radius: 0; -} - -.accordion .card:first-of-type { - border-bottom: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.accordion .card:last-of-type { - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.breadcrumb { - display: flex; - flex-wrap: wrap; - padding: 0.75rem 1rem; - margin-bottom: 1rem; - list-style: none; - background-color: #e9ecef; - border-radius: 0.25rem; -} - -.breadcrumb-item + .breadcrumb-item { - padding-left: 0.5rem; -} - -.breadcrumb-item + .breadcrumb-item::before { - display: inline-block; - padding-right: 0.5rem; - color: #6c757d; - content: "/"; -} - -.breadcrumb-item + .breadcrumb-item:hover::before { - text-decoration: underline; -} - -.breadcrumb-item + .breadcrumb-item:hover::before { - text-decoration: none; -} - -.breadcrumb-item.active { - color: #6c757d; -} - -.pagination { - display: flex; - padding-left: 0; - list-style: none; - border-radius: 0.25rem; -} - -.page-link { - position: relative; - display: block; - padding: 0.5rem 0.75rem; - margin-left: -1px; - line-height: 1.25; - color: #007bff; - background-color: #ffffff; - border: 1px solid #dee2e6; -} - -.page-link:hover { - z-index: 2; - color: #0056b3; - text-decoration: none; - background-color: #e9ecef; - border-color: #dee2e6; -} - -.page-link:focus { - z-index: 2; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.page-link:not(:disabled):not(.disabled) { - cursor: pointer; -} - -.page-item:first-child .page-link { - margin-left: 0; - border-top-left-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} - -.page-item:last-child .page-link { - border-top-right-radius: 0.25rem; - border-bottom-right-radius: 0.25rem; -} - -.page-item.active .page-link { - z-index: 1; - color: #ffffff; - background-color: #007bff; - border-color: #007bff; -} - -.page-item.disabled .page-link { - color: #6c757d; - pointer-events: none; - cursor: auto; - background-color: #ffffff; - border-color: #dee2e6; -} - -.pagination-lg .page-link { - padding: 0.75rem 1.5rem; - font-size: 1.25rem; - line-height: 1.5; -} - -.pagination-lg .page-item:first-child .page-link { - border-top-left-radius: 0.3rem; - border-bottom-left-radius: 0.3rem; -} - -.pagination-lg .page-item:last-child .page-link { - border-top-right-radius: 0.3rem; - border-bottom-right-radius: 0.3rem; -} - -.pagination-sm .page-link { - padding: 0.25rem 0.5rem; - font-size: 0.875rem; - line-height: 1.5; -} - -.pagination-sm .page-item:first-child .page-link { - border-top-left-radius: 0.2rem; - border-bottom-left-radius: 0.2rem; -} - -.pagination-sm .page-item:last-child .page-link { - border-top-right-radius: 0.2rem; - border-bottom-right-radius: 0.2rem; -} - -.badge { - display: inline-block; - padding: 0.25em 0.4em; - font-size: 75%; - font-weight: 700; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: 0.25rem; -} - -.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: #ffffff; - background-color: #007bff; -} - -.badge-primary[href]:hover, .badge-primary[href]:focus { - color: #ffffff; - text-decoration: none; - background-color: #0062cc; -} - -.badge-secondary { - color: #ffffff; - background-color: #6c757d; -} - -.badge-secondary[href]:hover, .badge-secondary[href]:focus { - color: #ffffff; - text-decoration: none; - background-color: #545b62; -} - -.badge-success { - color: #ffffff; - background-color: #28a745; -} - -.badge-success[href]:hover, .badge-success[href]:focus { - color: #ffffff; - text-decoration: none; - background-color: #1e7e34; -} - -.badge-info { - color: #ffffff; - background-color: #17a2b8; -} - -.badge-info[href]:hover, .badge-info[href]:focus { - color: #ffffff; - text-decoration: none; - background-color: #117a8b; -} - -.badge-warning { - color: #1F2D3D; - background-color: #ffc107; -} - -.badge-warning[href]:hover, .badge-warning[href]:focus { - color: #1F2D3D; - text-decoration: none; - background-color: #d39e00; -} - -.badge-danger { - color: #ffffff; - background-color: #dc3545; -} - -.badge-danger[href]:hover, .badge-danger[href]:focus { - color: #ffffff; - text-decoration: none; - background-color: #bd2130; -} - -.badge-light { - color: #1F2D3D; - background-color: #f8f9fa; -} - -.badge-light[href]:hover, .badge-light[href]:focus { - color: #1F2D3D; - text-decoration: none; - background-color: #dae0e5; -} - -.badge-dark { - color: #ffffff; - background-color: #343a40; -} - -.badge-dark[href]:hover, .badge-dark[href]:focus { - color: #ffffff; - text-decoration: none; - background-color: #1d2124; -} - -.jumbotron { - padding: 2rem 1rem; - margin-bottom: 2rem; - background-color: #e9ecef; - border-radius: 0.3rem; -} - -@media (min-width: 576px) { - .jumbotron { - padding: 4rem 2rem; - } -} - -.jumbotron-fluid { - padding-right: 0; - padding-left: 0; - border-radius: 0; -} - -.alert { - position: relative; - padding: 0.75rem 1.25rem; - margin-bottom: 1rem; - border: 1px solid transparent; - border-radius: 0.25rem; -} - -.alert-heading { - color: inherit; -} - -.alert-link { - font-weight: 700; -} - -.alert-dismissible { - padding-right: 4rem; -} - -.alert-dismissible .close, .alert-dismissible .mailbox-attachment-close { - position: absolute; - top: 0; - right: 0; - padding: 0.75rem 1.25rem; - color: inherit; -} - -.alert-primary { - color: #004085; - background-color: #cce5ff; - border-color: #b8daff; -} - -.alert-primary hr { - border-top-color: #9fcdff; -} - -.alert-primary .alert-link { - color: #002752; -} - -.alert-secondary { - color: #383d41; - background-color: #e2e3e5; - border-color: #d6d8db; -} - -.alert-secondary hr { - border-top-color: #c8cbcf; -} - -.alert-secondary .alert-link { - color: #202326; -} - -.alert-success { - color: #155724; - background-color: #d4edda; - border-color: #c3e6cb; -} - -.alert-success hr { - border-top-color: #b1dfbb; -} - -.alert-success .alert-link { - color: #0b2e13; -} - -.alert-info { - color: #0c5460; - background-color: #d1ecf1; - border-color: #bee5eb; -} - -.alert-info hr { - border-top-color: #abdde5; -} - -.alert-info .alert-link { - color: #062c33; -} - -.alert-warning { - color: #856404; - background-color: #fff3cd; - border-color: #ffeeba; -} - -.alert-warning hr { - border-top-color: #ffe8a1; -} - -.alert-warning .alert-link { - color: #533f03; -} - -.alert-danger { - color: #721c24; - background-color: #f8d7da; - border-color: #f5c6cb; -} - -.alert-danger hr { - border-top-color: #f1b0b7; -} - -.alert-danger .alert-link { - color: #491217; -} - -.alert-light { - color: #818182; - background-color: #fefefe; - border-color: #fdfdfe; -} - -.alert-light hr { - border-top-color: #ececf6; -} - -.alert-light .alert-link { - color: #686868; -} - -.alert-dark { - color: #1b1e21; - background-color: #d6d8d9; - border-color: #c6c8ca; -} - -.alert-dark hr { - border-top-color: #b9bbbe; -} - -.alert-dark .alert-link { - color: #040505; -} - -@keyframes progress-bar-stripes { - from { - background-position: 1rem 0; - } - to { - background-position: 0 0; - } -} - -.progress { - display: flex; - height: 1rem; - overflow: hidden; - font-size: 0.75rem; - background-color: #e9ecef; - border-radius: 0.25rem; - box-shadow: inset 0 0.1rem 0.1rem rgba(0, 0, 0, 0.1); -} - -.progress-bar { - display: flex; - flex-direction: column; - justify-content: center; - color: #ffffff; - text-align: center; - white-space: nowrap; - background-color: #007bff; - transition: width 0.6s ease; -} - -@media screen and (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 { - animation: progress-bar-stripes 1s linear infinite; -} - -.media { - display: flex; - align-items: flex-start; -} - -.media-body { - flex: 1; -} - -.list-group { - display: flex; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; -} - -.list-group-item-action { - width: 100%; - color: #495057; - text-align: inherit; -} - -.list-group-item-action:hover, .list-group-item-action:focus { - color: #495057; - text-decoration: none; - background-color: #f8f9fa; -} - -.list-group-item-action:active { - color: #212529; - background-color: #e9ecef; -} - -.list-group-item { - position: relative; - display: block; - padding: 0.75rem 1.25rem; - margin-bottom: -1px; - background-color: #ffffff; - border: 1px solid rgba(0, 0, 0, 0.125); -} - -.list-group-item:first-child { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} - -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} - -.list-group-item:hover, .list-group-item:focus { - z-index: 1; - text-decoration: none; -} - -.list-group-item.disabled, .list-group-item:disabled { - color: #6c757d; - background-color: #ffffff; -} - -.list-group-item.active { - z-index: 2; - color: #ffffff; - background-color: #007bff; - border-color: #007bff; -} - -.list-group-flush .list-group-item { - border-right: 0; - border-left: 0; - border-radius: 0; -} - -.list-group-flush:first-child .list-group-item:first-child { - border-top: 0; -} - -.list-group-flush:last-child .list-group-item:last-child { - border-bottom: 0; -} - -.list-group-item-primary { - color: #004085; - background-color: #b8daff; -} - -.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { - color: #004085; - background-color: #9fcdff; -} - -.list-group-item-primary.list-group-item-action.active { - color: #ffffff; - background-color: #004085; - border-color: #004085; -} - -.list-group-item-secondary { - color: #383d41; - background-color: #d6d8db; -} - -.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { - color: #383d41; - background-color: #c8cbcf; -} - -.list-group-item-secondary.list-group-item-action.active { - color: #ffffff; - background-color: #383d41; - border-color: #383d41; -} - -.list-group-item-success { - color: #155724; - background-color: #c3e6cb; -} - -.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { - color: #155724; - background-color: #b1dfbb; -} - -.list-group-item-success.list-group-item-action.active { - color: #ffffff; - background-color: #155724; - border-color: #155724; -} - -.list-group-item-info { - color: #0c5460; - background-color: #bee5eb; -} - -.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { - color: #0c5460; - background-color: #abdde5; -} - -.list-group-item-info.list-group-item-action.active { - color: #ffffff; - background-color: #0c5460; - border-color: #0c5460; -} - -.list-group-item-warning { - color: #856404; - background-color: #ffeeba; -} - -.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { - color: #856404; - background-color: #ffe8a1; -} - -.list-group-item-warning.list-group-item-action.active { - color: #ffffff; - background-color: #856404; - border-color: #856404; -} - -.list-group-item-danger { - color: #721c24; - background-color: #f5c6cb; -} - -.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { - color: #721c24; - background-color: #f1b0b7; -} - -.list-group-item-danger.list-group-item-action.active { - color: #ffffff; - background-color: #721c24; - border-color: #721c24; -} - -.list-group-item-light { - color: #818182; - background-color: #fdfdfe; -} - -.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { - color: #818182; - background-color: #ececf6; -} - -.list-group-item-light.list-group-item-action.active { - color: #ffffff; - background-color: #818182; - border-color: #818182; -} - -.list-group-item-dark { - color: #1b1e21; - background-color: #c6c8ca; -} - -.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { - color: #1b1e21; - background-color: #b9bbbe; -} - -.list-group-item-dark.list-group-item-action.active { - color: #ffffff; - background-color: #1b1e21; - border-color: #1b1e21; -} - -.close, .mailbox-attachment-close { - float: right; - font-size: 1.5rem; - font-weight: 700; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #ffffff; - opacity: .5; -} - -.close:hover, .mailbox-attachment-close:hover, .close:focus, .mailbox-attachment-close:focus { - color: #000; - text-decoration: none; - opacity: .75; -} - -.close:not(:disabled):not(.disabled), .mailbox-attachment-close:not(:disabled):not(.disabled) { - cursor: pointer; -} - -button.close, button.mailbox-attachment-close { - padding: 0; - background-color: transparent; - border: 0; - -webkit-appearance: none; -} - -.modal-open { - overflow: hidden; -} - -.modal { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - display: none; - overflow: hidden; - outline: 0; -} - -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} - -.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, -25%); -} - -@media screen and (prefers-reduced-motion: reduce) { - .modal.fade .modal-dialog { - transition: none; - } -} - -.modal.show .modal-dialog { - transform: translate(0, 0); -} - -.modal-dialog-centered { - display: flex; - align-items: center; - min-height: calc(100% - (0.5rem * 2)); -} - -.modal-content { - position: relative; - display: flex; - flex-direction: column; - width: 100%; - pointer-events: auto; - background-color: #ffffff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 0.3rem; - box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.5); - outline: 0; -} - -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - 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; - border-bottom: 1px solid #e9ecef; - border-top-left-radius: 0.3rem; - border-top-right-radius: 0.3rem; -} - -.modal-header .close, .modal-header .mailbox-attachment-close { - padding: 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; - align-items: center; - justify-content: flex-end; - padding: 1rem; - border-top: 1px solid #e9ecef; -} - -.modal-footer > :not(:first-child) { - margin-left: .25rem; -} - -.modal-footer > :not(:last-child) { - margin-right: .25rem; -} - -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} - -@media (min-width: 576px) { - .modal-dialog { - max-width: 500px; - margin: 1.75rem auto; - } - .modal-dialog-centered { - min-height: calc(100% - (1.75rem * 2)); - } - .modal-content { - box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.5); - } - .modal-sm { - max-width: 300px; - } -} - -@media (min-width: 992px) { - .modal-lg { - max-width: 800px; - } -} - -.tooltip { - position: absolute; - z-index: 1070; - display: block; - margin: 0; - font-family: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - 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: #ffffff; - text-align: center; - background-color: #000; - border-radius: 0.25rem; -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: block; - max-width: 276px; - font-family: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - 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: #ffffff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 0.3rem; - box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.2); -} - -.popover .arrow { - position: absolute; - display: block; - width: 1rem; - height: 0.5rem; - margin: 0 0.3rem; -} - -.popover .arrow::before, .popover .arrow::after { - position: absolute; - display: block; - content: ""; - border-color: transparent; - border-style: solid; -} - -.bs-popover-top, .bs-popover-auto[x-placement^="top"] { - margin-bottom: 0.5rem; -} - -.bs-popover-top .arrow, .bs-popover-auto[x-placement^="top"] .arrow { - bottom: calc((0.5rem + 1px) * -1); -} - -.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before, -.bs-popover-top .arrow::after, -.bs-popover-auto[x-placement^="top"] .arrow::after { - border-width: 0.5rem 0.5rem 0; -} - -.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before { - bottom: 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-top-color: #ffffff; -} - -.bs-popover-right, .bs-popover-auto[x-placement^="right"] { - margin-left: 0.5rem; -} - -.bs-popover-right .arrow, .bs-popover-auto[x-placement^="right"] .arrow { - left: calc((0.5rem + 1px) * -1); - width: 0.5rem; - height: 1rem; - margin: 0.3rem 0; -} - -.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before, -.bs-popover-right .arrow::after, -.bs-popover-auto[x-placement^="right"] .arrow::after { - border-width: 0.5rem 0.5rem 0.5rem 0; -} - -.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before { - left: 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-right-color: #ffffff; -} - -.bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { - margin-top: 0.5rem; -} - -.bs-popover-bottom .arrow, .bs-popover-auto[x-placement^="bottom"] .arrow { - top: calc((0.5rem + 1px) * -1); -} - -.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before, -.bs-popover-bottom .arrow::after, -.bs-popover-auto[x-placement^="bottom"] .arrow::after { - border-width: 0 0.5rem 0.5rem 0.5rem; -} - -.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before { - top: 0; - 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-bottom-color: #ffffff; -} - -.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { - position: absolute; - top: 0; - left: 50%; - display: block; - width: 1rem; - margin-left: -0.5rem; - content: ""; - border-bottom: 1px solid #f7f7f7; -} - -.bs-popover-left, .bs-popover-auto[x-placement^="left"] { - margin-right: 0.5rem; -} - -.bs-popover-left .arrow, .bs-popover-auto[x-placement^="left"] .arrow { - right: calc((0.5rem + 1px) * -1); - width: 0.5rem; - height: 1rem; - margin: 0.3rem 0; -} - -.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before, -.bs-popover-left .arrow::after, -.bs-popover-auto[x-placement^="left"] .arrow::after { - border-width: 0.5rem 0 0.5rem 0.5rem; -} - -.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before { - right: 0; - 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-left-color: #ffffff; -} - -.popover-header { - padding: 0.5rem 0.75rem; - margin-bottom: 0; - font-size: 1rem; - color: inherit; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-top-left-radius: calc(0.3rem - 1px); - border-top-right-radius: calc(0.3rem - 1px); -} - -.popover-header:empty { - display: none; -} - -.popover-body { - padding: 0.5rem 0.75rem; - color: #212529; -} - -.carousel { - position: relative; -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} - -.carousel-item { - position: relative; - display: none; - align-items: center; - width: 100%; - transition: transform 0.6s ease; - backface-visibility: hidden; - perspective: 1000px; -} - -@media screen and (prefers-reduced-motion: reduce) { - .carousel-item { - transition: none; - } -} - -.carousel-item.active, -.carousel-item-next, -.carousel-item-prev { - display: block; -} - -.carousel-item-next, -.carousel-item-prev { - position: absolute; - top: 0; -} - -.carousel-item-next.carousel-item-left, -.carousel-item-prev.carousel-item-right { - transform: translateX(0); -} - -@supports (transform-style: preserve-3d) { - .carousel-item-next.carousel-item-left, - .carousel-item-prev.carousel-item-right { - transform: translate3d(0, 0, 0); - } -} - -.carousel-item-next, -.active.carousel-item-right { - transform: translateX(100%); -} - -@supports (transform-style: preserve-3d) { - .carousel-item-next, - .active.carousel-item-right { - transform: translate3d(100%, 0, 0); - } -} - -.carousel-item-prev, -.active.carousel-item-left { - transform: translateX(-100%); -} - -@supports (transform-style: preserve-3d) { - .carousel-item-prev, - .active.carousel-item-left { - transform: translate3d(-100%, 0, 0); - } -} - -.carousel-fade .carousel-item { - opacity: 0; - transition-duration: .6s; - transition-property: opacity; -} - -.carousel-fade .carousel-item.active, -.carousel-fade .carousel-item-next.carousel-item-left, -.carousel-fade .carousel-item-prev.carousel-item-right { - opacity: 1; -} - -.carousel-fade .active.carousel-item-left, -.carousel-fade .active.carousel-item-right { - opacity: 0; -} - -.carousel-fade .carousel-item-next, -.carousel-fade .carousel-item-prev, -.carousel-fade .carousel-item.active, -.carousel-fade .active.carousel-item-left, -.carousel-fade .active.carousel-item-prev { - transform: translateX(0); -} - -@supports (transform-style: preserve-3d) { - .carousel-fade .carousel-item-next, - .carousel-fade .carousel-item-prev, - .carousel-fade .carousel-item.active, - .carousel-fade .active.carousel-item-left, - .carousel-fade .active.carousel-item-prev { - transform: translate3d(0, 0, 0); - } -} - -.carousel-control-prev, -.carousel-control-next { - position: absolute; - top: 0; - bottom: 0; - display: flex; - align-items: center; - justify-content: center; - width: 15%; - color: #ffffff; - text-align: center; - opacity: 0.5; -} - -.carousel-control-prev:hover, .carousel-control-prev:focus, -.carousel-control-next:hover, -.carousel-control-next:focus { - color: #ffffff; - text-decoration: none; - outline: 0; - opacity: .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: transparent no-repeat center center; - background-size: 100% 100%; -} - -.carousel-control-prev-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ffffff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); -} - -.carousel-control-next-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ffffff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); -} - -.carousel-indicators { - position: absolute; - right: 0; - bottom: 10px; - 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 { - position: relative; - flex: 0 1 auto; - width: 30px; - height: 3px; - margin-right: 3px; - margin-left: 3px; - text-indent: -999px; - background-color: rgba(255, 255, 255, 0.5); -} - -.carousel-indicators li::before { - position: absolute; - top: -10px; - left: 0; - display: inline-block; - width: 100%; - height: 10px; - content: ""; -} - -.carousel-indicators li::after { - position: absolute; - bottom: -10px; - left: 0; - display: inline-block; - width: 100%; - height: 10px; - content: ""; -} - -.carousel-indicators .active { - background-color: #ffffff; -} - -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #ffffff; - text-align: center; -} - -.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, .label-primary { - background-color: #007bff !important; -} - -a.bg-primary:hover, a.label-primary:hover, a.bg-primary:focus, a.label-primary:focus, -button.bg-primary:hover, -button.label-primary:hover, -button.bg-primary:focus, -button.label-primary:focus { - background-color: #0062cc !important; -} - -.bg-secondary { - background-color: #6c757d !important; -} - -a.bg-secondary:hover, a.bg-secondary:focus, -button.bg-secondary:hover, -button.bg-secondary:focus { - background-color: #545b62 !important; -} - -.bg-success, .alert-success, .label-success { - background-color: #28a745 !important; -} - -a.bg-success:hover, a.alert-success:hover, a.label-success:hover, a.bg-success:focus, a.alert-success:focus, a.label-success:focus, -button.bg-success:hover, -button.alert-success:hover, -button.label-success:hover, -button.bg-success:focus, -button.alert-success:focus, -button.label-success:focus { - background-color: #1e7e34 !important; -} - -.bg-info, .alert-info, .label-info { - background-color: #17a2b8 !important; -} - -a.bg-info:hover, a.alert-info:hover, a.label-info:hover, a.bg-info:focus, a.alert-info:focus, a.label-info:focus, -button.bg-info:hover, -button.alert-info:hover, -button.label-info:hover, -button.bg-info:focus, -button.alert-info:focus, -button.label-info:focus { - background-color: #117a8b !important; -} - -.bg-warning, .alert-warning, .label-warning { - background-color: #ffc107 !important; -} - -a.bg-warning:hover, a.alert-warning:hover, a.label-warning:hover, a.bg-warning:focus, a.alert-warning:focus, a.label-warning:focus, -button.bg-warning:hover, -button.alert-warning:hover, -button.label-warning:hover, -button.bg-warning:focus, -button.alert-warning:focus, -button.label-warning:focus { - background-color: #d39e00 !important; -} - -.bg-danger, .alert-danger, -.alert-error, .label-danger { - background-color: #dc3545 !important; -} - -a.bg-danger:hover, a.alert-danger:hover, -a.alert-error:hover, a.label-danger:hover, a.bg-danger:focus, a.alert-danger:focus, -a.alert-error:focus, a.label-danger:focus, -button.bg-danger:hover, -button.alert-danger:hover, -button.alert-error:hover, -button.label-danger:hover, -button.bg-danger:focus, -button.alert-danger:focus, -button.alert-error:focus, -button.label-danger:focus { - background-color: #bd2130 !important; -} - -.bg-light { - background-color: #f8f9fa !important; -} - -a.bg-light:hover, a.bg-light:focus, -button.bg-light:hover, -button.bg-light:focus { - background-color: #dae0e5 !important; -} - -.bg-dark { - background-color: #343a40 !important; -} - -a.bg-dark:hover, a.bg-dark:focus, -button.bg-dark:hover, -button.bg-dark:focus { - background-color: #1d2124 !important; -} - -.bg-white { - background-color: #ffffff !important; -} - -.bg-transparent { - background-color: transparent !important; -} - -.border { - border: 1px solid #dee2e6 !important; -} - -.border-top { - border-top: 1px solid #dee2e6 !important; -} - -.border-right { - border-right: 1px solid #dee2e6 !important; -} - -.border-bottom { - border-bottom: 1px solid #dee2e6 !important; -} - -.border-left { - border-left: 1px solid #dee2e6 !important; -} - -.border-0 { - border: 0 !important; -} - -.border-top-0 { - border-top: 0 !important; -} - -.border-right-0 { - border-right: 0 !important; -} - -.border-bottom-0 { - border-bottom: 0 !important; -} - -.border-left-0 { - border-left: 0 !important; -} - -.border-primary { - border-color: #007bff !important; -} - -.border-secondary { - border-color: #6c757d !important; -} - -.border-success { - border-color: #28a745 !important; -} - -.border-info { - border-color: #17a2b8 !important; -} - -.border-warning { - border-color: #ffc107 !important; -} - -.border-danger { - border-color: #dc3545 !important; -} - -.border-light { - border-color: #f8f9fa !important; -} - -.border-dark { - border-color: #343a40 !important; -} - -.border-white { - border-color: #ffffff !important; -} - -.rounded { - border-radius: 0.25rem !important; -} - -.rounded-top { - border-top-left-radius: 0.25rem !important; - border-top-right-radius: 0.25rem !important; -} - -.rounded-right { - border-top-right-radius: 0.25rem !important; - border-bottom-right-radius: 0.25rem !important; -} - -.rounded-bottom { - border-bottom-right-radius: 0.25rem !important; - border-bottom-left-radius: 0.25rem !important; -} - -.rounded-left { - border-top-left-radius: 0.25rem !important; - border-bottom-left-radius: 0.25rem !important; -} - -.rounded-circle { - border-radius: 50% !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, .info-box, .info-box-icon { - 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.857143%; -} - -.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, .info-box-icon { - 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, .info-box-icon { - 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; - } -} - -.position-static { - position: static !important; -} - -.position-relative { - position: relative !important; -} - -.position-absolute { - position: absolute !important; -} - -.position-fixed { - position: fixed !important; -} - -.position-sticky { - 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: sticky) { - .sticky-top { - position: sticky; - top: 0; - z-index: 1020; - } -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0; -} - -.sr-only-focusable:active, .sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - overflow: visible; - clip: auto; - white-space: normal; -} - -.shadow-sm { - box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; -} - -.shadow { - box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 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; -} - -.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, .progress-group, -.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, .small-box, .card, .info-box, .callout, -.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, .card-body.p-0 .table thead > tr > th:last-of-type, -.card-body.p-0 .table thead > tr > td:last-of-type, -.card-body.p-0 .table tbody > tr > th:last-of-type, -.card-body.p-0 .table tbody > tr > td:last-of-type, -.px-4 { - padding-right: 1.5rem !important; -} - -.pb-4, -.py-4 { - padding-bottom: 1.5rem !important; -} - -.pl-4, .card-body.p-0 .table thead > tr > th:first-of-type, -.card-body.p-0 .table thead > tr > td:first-of-type, -.card-body.p-0 .table tbody > tr > th:first-of-type, -.card-body.p-0 .table tbody > tr > td:first-of-type, -.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-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-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-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-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-auto { - margin: auto !important; - } - .mt-xl-auto, - .my-xl-auto { - margin-top: auto !important; - } - .mr-xl-auto, - .mx-xl-auto { - margin-right: auto !important; - } - .mb-xl-auto, - .my-xl-auto { - margin-bottom: auto !important; - } - .ml-xl-auto, - .mx-xl-auto { - margin-left: auto !important; - } -} - -.text-monospace { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; -} - -.text-justify { - text-align: justify !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 { - text-transform: uppercase !important; -} - -.text-capitalize { - text-transform: capitalize !important; -} - -.font-weight-light { - font-weight: 300 !important; -} - -.font-weight-normal { - font-weight: 400 !important; -} - -.font-weight-bold { - font-weight: 700 !important; -} - -.font-italic { - font-style: italic !important; -} - -.text-white { - color: #ffffff !important; -} - -.text-primary { - color: #007bff !important; -} - -a.text-primary:hover, a.text-primary:focus { - color: #0062cc !important; -} - -.text-secondary { - color: #6c757d !important; -} - -a.text-secondary:hover, a.text-secondary:focus { - color: #545b62 !important; -} - -.text-success { - color: #28a745 !important; -} - -a.text-success:hover, a.text-success:focus { - color: #1e7e34 !important; -} - -.text-info { - color: #17a2b8 !important; -} - -a.text-info:hover, a.text-info:focus { - color: #117a8b !important; -} - -.text-warning { - color: #ffc107 !important; -} - -a.text-warning:hover, a.text-warning:focus { - color: #d39e00 !important; -} - -.text-danger { - color: #dc3545 !important; -} - -a.text-danger:hover, a.text-danger:focus { - color: #bd2130 !important; -} - -.text-light { - color: #f8f9fa !important; -} - -a.text-light:hover, a.text-light:focus { - color: #dae0e5 !important; -} - -.text-dark { - color: #343a40 !important; -} - -a.text-dark:hover, a.text-dark:focus { - color: #1d2124 !important; -} - -.text-body { - color: #212529 !important; -} - -.text-muted { - color: #6c757d !important; -} - -.text-black-50 { - color: rgba(0, 0, 0, 0.5) !important; -} - -.text-white-50 { - color: rgba(255, 255, 255, 0.5) !important; -} - -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.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 #adb5bd; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - @page { - size: a3; - } - body { - min-width: 992px !important; - } - .container { - min-width: 992px !important; - } - .navbar { - display: none; - } - .badge { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #ffffff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #dee2e6 !important; - } -} - -/* - * Core: General Layout Style - * ------------------------- - */ -html, -body, -.wrapper { - min-height: 100%; - overflow-x: hidden; -} - -.wrapper { - position: relative; -} - -.layout-boxed .wrapper { - box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); -} - -.layout-boxed .wrapper, .layout-boxed .wrapper:before { - margin: 0 auto; - max-width: 1250px; -} - -@media (min-width: 768px) { - .content-wrapper, - .main-footer, - .main-header { - transition: margin-left 0.3s ease-in-out; - margin-left: 250px; - z-index: 3000; - } -} - -@media screen and (min-width: 768px) and (prefers-reduced-motion: reduce) { - .content-wrapper, - .main-footer, - .main-header { - transition: none; - } -} - -@media (min-width: 768px) { - .sidebar-collapse .content-wrapper, .sidebar-collapse - .main-footer, .sidebar-collapse - .main-header { - margin-left: 0; - } -} - -@media (max-width: 991.98px) { - .content-wrapper, .content-wrapper:before, - .main-footer, - .main-footer:before, - .main-header, - .main-header:before { - margin-left: 0; - } -} - -.content-wrapper { - background: #f4f6f9; -} - -.content-wrapper > .content { - padding: 0 0.5rem; -} - -.main-sidebar { - position: fixed; - top: 0; - left: 0; - bottom: 0; -} - -.main-sidebar, .main-sidebar:before { - transition: margin-left 0.3s ease-in-out, width 0.3s ease-in-out; - width: 250px; -} - -@media screen and (prefers-reduced-motion: reduce) { - .main-sidebar, .main-sidebar:before { - transition: none; - } -} - -.sidebar-collapse .main-sidebar, .sidebar-collapse .main-sidebar:before { - margin-left: -250px; -} - -@media (max-width: 991.98px) { - .main-sidebar, .main-sidebar:before { - box-shadow: none !important; - margin-left: -250px; - } - .sidebar-open .main-sidebar, .sidebar-open .main-sidebar:before { - margin-left: 0; - } -} - -.main-footer { - padding: 15px; - color: #555; - border-top: 1px solid #dee2e6; - background: #ffffff; -} - -.content-header { - padding: 15px 0.5rem; -} - -.content-header h1 { - font-size: 1.8rem; - margin: 0; -} - -.content-header .breadcrumb { - margin-bottom: 0; - padding: 0; - background: transparent; - line-height: 1.8rem; -} - -.hold-transition .content-wrapper, -.hold-transition .main-header, -.hold-transition .main-footer { - transition: none !important; -} - -/* - * Component: Main Header - * ---------------------- - */ -.main-header { - z-index: 1000; -} - -.main-header .navbar-nav .nav-item { - margin: 0; -} - -.main-header .nav-link { - position: relative; - height: 2.5rem; -} - -.main-header .navbar-nav[class*="-right"] .dropdown-menu { - margin-top: -3px; - right: 0; - left: auto; -} - -@media (max-width: 575.98px) { - .main-header .navbar-nav[class*="-right"] .dropdown-menu { - left: 0; - right: auto; - } -} - -.navbar-img { - height: 1.25rem; - width: auto; -} - -.navbar-badge { - position: absolute; - top: 9px; - right: 5px; - font-size: .6rem; - font-weight: 300; - padding: 2px 4px; -} - -.btn-navbar { - border-left-width: 0; - background-color: transparent; -} - -.form-control-navbar { - border-right-width: 0; -} - -.form-control-navbar + .input-group-append { - margin-left: 0; -} - -.form-control-navbar, -.btn-navbar { - transition: none; -} - -.navbar-dark .form-control-navbar, -.navbar-dark .btn-navbar { - background-color: rgba(255, 255, 255, 0.2); - border: 0; -} - -.navbar-dark .form-control-navbar::placeholder, -.navbar-dark .form-control-navbar + .input-group-append > .btn-navbar { - color: rgba(255, 255, 255, 0.6); -} - -.navbar-dark .form-control-navbar :-moz-placeholder { - color: rgba(255, 255, 255, 0.6); -} - -.navbar-dark .form-control-navbar ::-moz-placeholder { - color: rgba(255, 255, 255, 0.6); -} - -.navbar-dark .form-control-navbar :-ms-input-placeholder { - color: rgba(255, 255, 255, 0.6); -} - -.navbar-dark .form-control-navbar:focus, -.navbar-dark .form-control-navbar:focus + .input-group-append .btn-navbar { - border: 0 !important; - background-color: rgba(255, 255, 255, 0.6); - color: #343a40; -} - -.navbar-light .form-control-navbar, -.navbar-light .btn-navbar { - background-color: #f2f4f6; - border: 0; -} - -.navbar-light .form-control-navbar::placeholder, -.navbar-light .form-control-navbar + .input-group-append > .btn-navbar { - color: rgba(0, 0, 0, 0.6); -} - -.navbar-light .form-control-navbar :-moz-placeholder { - color: rgba(0, 0, 0, 0.6); -} - -.navbar-light .form-control-navbar ::-moz-placeholder { - color: rgba(0, 0, 0, 0.6); -} - -.navbar-light .form-control-navbar :-ms-input-placeholder { - color: rgba(0, 0, 0, 0.6); -} - -.navbar-light .form-control-navbar:focus, -.navbar-light .form-control-navbar:focus + .input-group-append .btn-navbar { - border: 0 !important; - background-color: #e9ecef; - color: #343a40; -} - -.brand-link { - padding: 0.8125rem 0.5rem; - font-size: 1.25rem; - display: block; - line-height: 1.5; - white-space: nowrap; -} - -.brand-link:hover { - color: #ffffff; - text-decoration: none; -} - -[class*="sidebar-dark"] .brand-link { - color: rgba(255, 255, 255, 0.8); - border-bottom: 1px solid #4b545c; -} - -[class*="sidebar-light"] .brand-link { - color: rgba(0, 0, 0, 0.8); - border-bottom: 1px solid #dee2e6; -} - -.brand-image { - float: left; - line-height: .8; - max-height: 34px; - width: auto; - margin-left: .8rem; - margin-right: .5rem; - margin-top: -3px; -} - -/** - * Component: Sidebar - * ------------------ - */ -.main-sidebar { - z-index: 1100; - height: 100vh; - overflow-y: hidden; -} - -.sidebar { - padding-bottom: 0; - padding-top: 0; - padding-left: 0.5rem; - padding-right: 0.5rem; - overflow-y: auto; - height: calc(100% - 4rem); -} - -.user-panel { - position: relative; -} - -[class*="sidebar-dark"] .user-panel { - border-bottom: 1px solid #4f5962; -} - -[class*="sidebar-light"] .user-panel { - border-bottom: 1px solid #dee2e6; -} - -.user-panel, -.user-panel .info { - overflow: hidden; - white-space: nowrap; -} - -.user-panel .image { - padding-left: 0.8rem; - display: inline-block; -} - -.user-panel img { - width: 2.1rem; - height: auto; -} - -.user-panel .info { - display: inline-block; - padding: 5px 5px 5px 10px; -} - -.user-panel .status, -.user-panel .dropdown-menu { - font-size: 0.875rem; -} - -.nav-sidebar .nav-item > .nav-link { - margin-bottom: 0.2rem; -} - -.nav-sidebar .nav-item > .nav-link .right { - transition: transform ease-in-out 0.3s; -} - -@media screen and (prefers-reduced-motion: reduce) { - .nav-sidebar .nav-item > .nav-link .right { - transition: none; - } -} - -.nav-sidebar .nav-link > p > .right { - position: absolute; - right: 1rem; - top: 12px; -} - -.nav-sidebar .menu-open > .nav-treeview { - display: block; -} - -.nav-sidebar .menu-open > .nav-link .right { - -ms-transform: rotate(-90deg); - transform: rotate(-90deg); -} - -.nav-sidebar > .nav-item { - margin-bottom: 0; -} - -.nav-sidebar > .nav-item .nav-icon { - text-align: center; - width: 1.6rem; - font-size: 1.2rem; - margin-right: .2rem; -} - -.nav-sidebar > .nav-item .float-right { - margin-top: 3px; -} - -.nav-sidebar .nav-treeview { - display: none; - list-style: none; - padding: 0; -} - -.nav-sidebar .nav-treeview > .nav-item > .nav-link > .nav-icon { - width: 1.6rem; -} - -.nav-sidebar .nav-header { - font-size: .9rem; - padding: 0.5rem; -} - -.nav-sidebar .nav-header:not(:first-of-type) { - padding: 1.7rem 1rem .5rem 1rem; -} - -.nav-sidebar .nav-link p { - display: inline-block; - margin: 0; -} - -#sidebar-overlay { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - display: none; - background-color: rgba(0, 0, 0, 0.1); - z-index: 1099; -} - -@media (max-width: 991.98px) { - .sidebar-open #sidebar-overlay { - display: block; - } -} - -.sidebar-dark-primary { - background-color: #343a40; -} - -.sidebar-dark-primary .user-panel a:hover { - color: #ffffff; -} - -.sidebar-dark-primary .user-panel .status { - color: #C2C7D0; - background: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-primary .user-panel .status:hover, .sidebar-dark-primary .user-panel .status:focus, .sidebar-dark-primary .user-panel .status:active { - color: #ffffff; - background: rgba(247, 247, 247, 0.1); -} - -.sidebar-dark-primary .user-panel .dropdown-menu { - border-color: rgba(242, 242, 242, 0.1); - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); -} - -.sidebar-dark-primary .user-panel .dropdown-item { - color: #212529; -} - -.sidebar-dark-primary .nav-sidebar > .nav-item > .nav-link:active, .sidebar-dark-primary .nav-sidebar > .nav-item > .nav-link:focus { - color: #C2C7D0; -} - -.sidebar-dark-primary .nav-sidebar > .nav-item.menu-open > .nav-link, -.sidebar-dark-primary .nav-sidebar > .nav-item:hover > .nav-link { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-primary .nav-sidebar > .nav-item > .nav-link.active { - color: #ffffff; - background-color: #007bff; -} - -.sidebar-dark-primary .nav-sidebar > .nav-item > .nav-treeview { - background: transparent; -} - -.sidebar-dark-primary .nav-header { - color: #d0d4db; - background: inherit; -} - -.sidebar-dark-primary .sidebar a { - color: #C2C7D0; -} - -.sidebar-dark-primary .sidebar a:hover { - text-decoration: none; -} - -.sidebar-dark-primary .nav-treeview > .nav-item > .nav-link { - color: #C2C7D0; -} - -.sidebar-dark-primary .nav-treeview > .nav-item > .nav-link:hover { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-primary .nav-treeview > .nav-item > .nav-link.active, .sidebar-dark-primary .nav-treeview > .nav-item > .nav-link.active:hover { - color: #343a40; - background-color: rgba(255, 255, 255, 0.9); -} - -.sidebar-light-primary { - background-color: #ffffff; -} - -.sidebar-light-primary .user-panel a:hover { - color: #212529; -} - -.sidebar-light-primary .user-panel .status { - color: #343a40; - background: #f4f4f5; -} - -.sidebar-light-primary .user-panel .status:hover, .sidebar-light-primary .user-panel .status:focus, .sidebar-light-primary .user-panel .status:active { - color: #212529; - background: #ececed; -} - -.sidebar-light-primary .user-panel .dropdown-menu { - border-color: #e7e7e8; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); -} - -.sidebar-light-primary .user-panel .dropdown-item { - color: #212529; -} - -.sidebar-light-primary .nav-sidebar > .nav-item > .nav-link:active, .sidebar-light-primary .nav-sidebar > .nav-item > .nav-link:focus { - color: #343a40; -} - -.sidebar-light-primary .nav-sidebar > .nav-item.menu-open > .nav-link, -.sidebar-light-primary .nav-sidebar > .nav-item:hover > .nav-link { - color: #212529; - background-color: #f4f4f5; -} - -.sidebar-light-primary .nav-sidebar > .nav-item > .nav-link.active { - color: #ffffff; - background-color: #007bff; -} - -.sidebar-light-primary .nav-sidebar > .nav-item > .nav-treeview { - background: transparent; -} - -.sidebar-light-primary .nav-header { - color: #292d32; - background: inherit; -} - -.sidebar-light-primary .sidebar a { - color: #343a40; -} - -.sidebar-light-primary .sidebar a:hover { - text-decoration: none; -} - -.sidebar-light-primary .nav-treeview > .nav-item > .nav-link { - color: #777; -} - -.sidebar-light-primary .nav-treeview > .nav-item > .nav-link.active, .sidebar-light-primary .nav-treeview > .nav-item > .nav-link.active:hover { - color: #212529; - background-color: #f4f4f5; -} - -.sidebar-light-primary .nav-treeview > .nav-item > .nav-link:hover { - background-color: #f4f4f5; -} - -.sidebar-dark-secondary { - background-color: #343a40; -} - -.sidebar-dark-secondary .user-panel a:hover { - color: #ffffff; -} - -.sidebar-dark-secondary .user-panel .status { - color: #C2C7D0; - background: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-secondary .user-panel .status:hover, .sidebar-dark-secondary .user-panel .status:focus, .sidebar-dark-secondary .user-panel .status:active { - color: #ffffff; - background: rgba(247, 247, 247, 0.1); -} - -.sidebar-dark-secondary .user-panel .dropdown-menu { - border-color: rgba(242, 242, 242, 0.1); - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); -} - -.sidebar-dark-secondary .user-panel .dropdown-item { - color: #212529; -} - -.sidebar-dark-secondary .nav-sidebar > .nav-item > .nav-link:active, .sidebar-dark-secondary .nav-sidebar > .nav-item > .nav-link:focus { - color: #C2C7D0; -} - -.sidebar-dark-secondary .nav-sidebar > .nav-item.menu-open > .nav-link, -.sidebar-dark-secondary .nav-sidebar > .nav-item:hover > .nav-link { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-secondary .nav-sidebar > .nav-item > .nav-link.active { - color: #ffffff; - background-color: #6c757d; -} - -.sidebar-dark-secondary .nav-sidebar > .nav-item > .nav-treeview { - background: transparent; -} - -.sidebar-dark-secondary .nav-header { - color: #d0d4db; - background: inherit; -} - -.sidebar-dark-secondary .sidebar a { - color: #C2C7D0; -} - -.sidebar-dark-secondary .sidebar a:hover { - text-decoration: none; -} - -.sidebar-dark-secondary .nav-treeview > .nav-item > .nav-link { - color: #C2C7D0; -} - -.sidebar-dark-secondary .nav-treeview > .nav-item > .nav-link:hover { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-secondary .nav-treeview > .nav-item > .nav-link.active, .sidebar-dark-secondary .nav-treeview > .nav-item > .nav-link.active:hover { - color: #343a40; - background-color: rgba(255, 255, 255, 0.9); -} - -.sidebar-light-secondary { - background-color: #ffffff; -} - -.sidebar-light-secondary .user-panel a:hover { - color: #212529; -} - -.sidebar-light-secondary .user-panel .status { - color: #343a40; - background: #f4f4f5; -} - -.sidebar-light-secondary .user-panel .status:hover, .sidebar-light-secondary .user-panel .status:focus, .sidebar-light-secondary .user-panel .status:active { - color: #212529; - background: #ececed; -} - -.sidebar-light-secondary .user-panel .dropdown-menu { - border-color: #e7e7e8; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); -} - -.sidebar-light-secondary .user-panel .dropdown-item { - color: #212529; -} - -.sidebar-light-secondary .nav-sidebar > .nav-item > .nav-link:active, .sidebar-light-secondary .nav-sidebar > .nav-item > .nav-link:focus { - color: #343a40; -} - -.sidebar-light-secondary .nav-sidebar > .nav-item.menu-open > .nav-link, -.sidebar-light-secondary .nav-sidebar > .nav-item:hover > .nav-link { - color: #212529; - background-color: #f4f4f5; -} - -.sidebar-light-secondary .nav-sidebar > .nav-item > .nav-link.active { - color: #ffffff; - background-color: #6c757d; -} - -.sidebar-light-secondary .nav-sidebar > .nav-item > .nav-treeview { - background: transparent; -} - -.sidebar-light-secondary .nav-header { - color: #292d32; - background: inherit; -} - -.sidebar-light-secondary .sidebar a { - color: #343a40; -} - -.sidebar-light-secondary .sidebar a:hover { - text-decoration: none; -} - -.sidebar-light-secondary .nav-treeview > .nav-item > .nav-link { - color: #777; -} - -.sidebar-light-secondary .nav-treeview > .nav-item > .nav-link.active, .sidebar-light-secondary .nav-treeview > .nav-item > .nav-link.active:hover { - color: #212529; - background-color: #f4f4f5; -} - -.sidebar-light-secondary .nav-treeview > .nav-item > .nav-link:hover { - background-color: #f4f4f5; -} - -.sidebar-dark-success { - background-color: #343a40; -} - -.sidebar-dark-success .user-panel a:hover { - color: #ffffff; -} - -.sidebar-dark-success .user-panel .status { - color: #C2C7D0; - background: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-success .user-panel .status:hover, .sidebar-dark-success .user-panel .status:focus, .sidebar-dark-success .user-panel .status:active { - color: #ffffff; - background: rgba(247, 247, 247, 0.1); -} - -.sidebar-dark-success .user-panel .dropdown-menu { - border-color: rgba(242, 242, 242, 0.1); - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); -} - -.sidebar-dark-success .user-panel .dropdown-item { - color: #212529; -} - -.sidebar-dark-success .nav-sidebar > .nav-item > .nav-link:active, .sidebar-dark-success .nav-sidebar > .nav-item > .nav-link:focus { - color: #C2C7D0; -} - -.sidebar-dark-success .nav-sidebar > .nav-item.menu-open > .nav-link, -.sidebar-dark-success .nav-sidebar > .nav-item:hover > .nav-link { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-success .nav-sidebar > .nav-item > .nav-link.active { - color: #ffffff; - background-color: #28a745; -} - -.sidebar-dark-success .nav-sidebar > .nav-item > .nav-treeview { - background: transparent; -} - -.sidebar-dark-success .nav-header { - color: #d0d4db; - background: inherit; -} - -.sidebar-dark-success .sidebar a { - color: #C2C7D0; -} - -.sidebar-dark-success .sidebar a:hover { - text-decoration: none; -} - -.sidebar-dark-success .nav-treeview > .nav-item > .nav-link { - color: #C2C7D0; -} - -.sidebar-dark-success .nav-treeview > .nav-item > .nav-link:hover { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-success .nav-treeview > .nav-item > .nav-link.active, .sidebar-dark-success .nav-treeview > .nav-item > .nav-link.active:hover { - color: #343a40; - background-color: rgba(255, 255, 255, 0.9); -} - -.sidebar-light-success { - background-color: #ffffff; -} - -.sidebar-light-success .user-panel a:hover { - color: #212529; -} - -.sidebar-light-success .user-panel .status { - color: #343a40; - background: #f4f4f5; -} - -.sidebar-light-success .user-panel .status:hover, .sidebar-light-success .user-panel .status:focus, .sidebar-light-success .user-panel .status:active { - color: #212529; - background: #ececed; -} - -.sidebar-light-success .user-panel .dropdown-menu { - border-color: #e7e7e8; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); -} - -.sidebar-light-success .user-panel .dropdown-item { - color: #212529; -} - -.sidebar-light-success .nav-sidebar > .nav-item > .nav-link:active, .sidebar-light-success .nav-sidebar > .nav-item > .nav-link:focus { - color: #343a40; -} - -.sidebar-light-success .nav-sidebar > .nav-item.menu-open > .nav-link, -.sidebar-light-success .nav-sidebar > .nav-item:hover > .nav-link { - color: #212529; - background-color: #f4f4f5; -} - -.sidebar-light-success .nav-sidebar > .nav-item > .nav-link.active { - color: #ffffff; - background-color: #28a745; -} - -.sidebar-light-success .nav-sidebar > .nav-item > .nav-treeview { - background: transparent; -} - -.sidebar-light-success .nav-header { - color: #292d32; - background: inherit; -} - -.sidebar-light-success .sidebar a { - color: #343a40; -} - -.sidebar-light-success .sidebar a:hover { - text-decoration: none; -} - -.sidebar-light-success .nav-treeview > .nav-item > .nav-link { - color: #777; -} - -.sidebar-light-success .nav-treeview > .nav-item > .nav-link.active, .sidebar-light-success .nav-treeview > .nav-item > .nav-link.active:hover { - color: #212529; - background-color: #f4f4f5; -} - -.sidebar-light-success .nav-treeview > .nav-item > .nav-link:hover { - background-color: #f4f4f5; -} - -.sidebar-dark-info { - background-color: #343a40; -} - -.sidebar-dark-info .user-panel a:hover { - color: #ffffff; -} - -.sidebar-dark-info .user-panel .status { - color: #C2C7D0; - background: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-info .user-panel .status:hover, .sidebar-dark-info .user-panel .status:focus, .sidebar-dark-info .user-panel .status:active { - color: #ffffff; - background: rgba(247, 247, 247, 0.1); -} - -.sidebar-dark-info .user-panel .dropdown-menu { - border-color: rgba(242, 242, 242, 0.1); - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); -} - -.sidebar-dark-info .user-panel .dropdown-item { - color: #212529; -} - -.sidebar-dark-info .nav-sidebar > .nav-item > .nav-link:active, .sidebar-dark-info .nav-sidebar > .nav-item > .nav-link:focus { - color: #C2C7D0; -} - -.sidebar-dark-info .nav-sidebar > .nav-item.menu-open > .nav-link, -.sidebar-dark-info .nav-sidebar > .nav-item:hover > .nav-link { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-info .nav-sidebar > .nav-item > .nav-link.active { - color: #ffffff; - background-color: #17a2b8; -} - -.sidebar-dark-info .nav-sidebar > .nav-item > .nav-treeview { - background: transparent; -} - -.sidebar-dark-info .nav-header { - color: #d0d4db; - background: inherit; -} - -.sidebar-dark-info .sidebar a { - color: #C2C7D0; -} - -.sidebar-dark-info .sidebar a:hover { - text-decoration: none; -} - -.sidebar-dark-info .nav-treeview > .nav-item > .nav-link { - color: #C2C7D0; -} - -.sidebar-dark-info .nav-treeview > .nav-item > .nav-link:hover { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-info .nav-treeview > .nav-item > .nav-link.active, .sidebar-dark-info .nav-treeview > .nav-item > .nav-link.active:hover { - color: #343a40; - background-color: rgba(255, 255, 255, 0.9); -} - -.sidebar-light-info { - background-color: #ffffff; -} - -.sidebar-light-info .user-panel a:hover { - color: #212529; -} - -.sidebar-light-info .user-panel .status { - color: #343a40; - background: #f4f4f5; -} - -.sidebar-light-info .user-panel .status:hover, .sidebar-light-info .user-panel .status:focus, .sidebar-light-info .user-panel .status:active { - color: #212529; - background: #ececed; -} - -.sidebar-light-info .user-panel .dropdown-menu { - border-color: #e7e7e8; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); -} - -.sidebar-light-info .user-panel .dropdown-item { - color: #212529; -} - -.sidebar-light-info .nav-sidebar > .nav-item > .nav-link:active, .sidebar-light-info .nav-sidebar > .nav-item > .nav-link:focus { - color: #343a40; -} - -.sidebar-light-info .nav-sidebar > .nav-item.menu-open > .nav-link, -.sidebar-light-info .nav-sidebar > .nav-item:hover > .nav-link { - color: #212529; - background-color: #f4f4f5; -} - -.sidebar-light-info .nav-sidebar > .nav-item > .nav-link.active { - color: #ffffff; - background-color: #17a2b8; -} - -.sidebar-light-info .nav-sidebar > .nav-item > .nav-treeview { - background: transparent; -} - -.sidebar-light-info .nav-header { - color: #292d32; - background: inherit; -} - -.sidebar-light-info .sidebar a { - color: #343a40; -} - -.sidebar-light-info .sidebar a:hover { - text-decoration: none; -} - -.sidebar-light-info .nav-treeview > .nav-item > .nav-link { - color: #777; -} - -.sidebar-light-info .nav-treeview > .nav-item > .nav-link.active, .sidebar-light-info .nav-treeview > .nav-item > .nav-link.active:hover { - color: #212529; - background-color: #f4f4f5; -} - -.sidebar-light-info .nav-treeview > .nav-item > .nav-link:hover { - background-color: #f4f4f5; -} - -.sidebar-dark-warning { - background-color: #343a40; -} - -.sidebar-dark-warning .user-panel a:hover { - color: #ffffff; -} - -.sidebar-dark-warning .user-panel .status { - color: #C2C7D0; - background: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-warning .user-panel .status:hover, .sidebar-dark-warning .user-panel .status:focus, .sidebar-dark-warning .user-panel .status:active { - color: #ffffff; - background: rgba(247, 247, 247, 0.1); -} - -.sidebar-dark-warning .user-panel .dropdown-menu { - border-color: rgba(242, 242, 242, 0.1); - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); -} - -.sidebar-dark-warning .user-panel .dropdown-item { - color: #212529; -} - -.sidebar-dark-warning .nav-sidebar > .nav-item > .nav-link:active, .sidebar-dark-warning .nav-sidebar > .nav-item > .nav-link:focus { - color: #C2C7D0; -} - -.sidebar-dark-warning .nav-sidebar > .nav-item.menu-open > .nav-link, -.sidebar-dark-warning .nav-sidebar > .nav-item:hover > .nav-link { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-warning .nav-sidebar > .nav-item > .nav-link.active { - color: #ffffff; - background-color: #ffc107; -} - -.sidebar-dark-warning .nav-sidebar > .nav-item > .nav-treeview { - background: transparent; -} - -.sidebar-dark-warning .nav-header { - color: #d0d4db; - background: inherit; -} - -.sidebar-dark-warning .sidebar a { - color: #C2C7D0; -} - -.sidebar-dark-warning .sidebar a:hover { - text-decoration: none; -} - -.sidebar-dark-warning .nav-treeview > .nav-item > .nav-link { - color: #C2C7D0; -} - -.sidebar-dark-warning .nav-treeview > .nav-item > .nav-link:hover { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-warning .nav-treeview > .nav-item > .nav-link.active, .sidebar-dark-warning .nav-treeview > .nav-item > .nav-link.active:hover { - color: #343a40; - background-color: rgba(255, 255, 255, 0.9); -} - -.sidebar-light-warning { - background-color: #ffffff; -} - -.sidebar-light-warning .user-panel a:hover { - color: #212529; -} - -.sidebar-light-warning .user-panel .status { - color: #343a40; - background: #f4f4f5; -} - -.sidebar-light-warning .user-panel .status:hover, .sidebar-light-warning .user-panel .status:focus, .sidebar-light-warning .user-panel .status:active { - color: #212529; - background: #ececed; -} - -.sidebar-light-warning .user-panel .dropdown-menu { - border-color: #e7e7e8; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); -} - -.sidebar-light-warning .user-panel .dropdown-item { - color: #212529; -} - -.sidebar-light-warning .nav-sidebar > .nav-item > .nav-link:active, .sidebar-light-warning .nav-sidebar > .nav-item > .nav-link:focus { - color: #343a40; -} - -.sidebar-light-warning .nav-sidebar > .nav-item.menu-open > .nav-link, -.sidebar-light-warning .nav-sidebar > .nav-item:hover > .nav-link { - color: #212529; - background-color: #f4f4f5; -} - -.sidebar-light-warning .nav-sidebar > .nav-item > .nav-link.active { - color: #ffffff; - background-color: #ffc107; -} - -.sidebar-light-warning .nav-sidebar > .nav-item > .nav-treeview { - background: transparent; -} - -.sidebar-light-warning .nav-header { - color: #292d32; - background: inherit; -} - -.sidebar-light-warning .sidebar a { - color: #343a40; -} - -.sidebar-light-warning .sidebar a:hover { - text-decoration: none; -} - -.sidebar-light-warning .nav-treeview > .nav-item > .nav-link { - color: #777; -} - -.sidebar-light-warning .nav-treeview > .nav-item > .nav-link.active, .sidebar-light-warning .nav-treeview > .nav-item > .nav-link.active:hover { - color: #212529; - background-color: #f4f4f5; -} - -.sidebar-light-warning .nav-treeview > .nav-item > .nav-link:hover { - background-color: #f4f4f5; -} - -.sidebar-dark-danger { - background-color: #343a40; -} - -.sidebar-dark-danger .user-panel a:hover { - color: #ffffff; -} - -.sidebar-dark-danger .user-panel .status { - color: #C2C7D0; - background: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-danger .user-panel .status:hover, .sidebar-dark-danger .user-panel .status:focus, .sidebar-dark-danger .user-panel .status:active { - color: #ffffff; - background: rgba(247, 247, 247, 0.1); -} - -.sidebar-dark-danger .user-panel .dropdown-menu { - border-color: rgba(242, 242, 242, 0.1); - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); -} - -.sidebar-dark-danger .user-panel .dropdown-item { - color: #212529; -} - -.sidebar-dark-danger .nav-sidebar > .nav-item > .nav-link:active, .sidebar-dark-danger .nav-sidebar > .nav-item > .nav-link:focus { - color: #C2C7D0; -} - -.sidebar-dark-danger .nav-sidebar > .nav-item.menu-open > .nav-link, -.sidebar-dark-danger .nav-sidebar > .nav-item:hover > .nav-link { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-danger .nav-sidebar > .nav-item > .nav-link.active { - color: #ffffff; - background-color: #dc3545; -} - -.sidebar-dark-danger .nav-sidebar > .nav-item > .nav-treeview { - background: transparent; -} - -.sidebar-dark-danger .nav-header { - color: #d0d4db; - background: inherit; -} - -.sidebar-dark-danger .sidebar a { - color: #C2C7D0; -} - -.sidebar-dark-danger .sidebar a:hover { - text-decoration: none; -} - -.sidebar-dark-danger .nav-treeview > .nav-item > .nav-link { - color: #C2C7D0; -} - -.sidebar-dark-danger .nav-treeview > .nav-item > .nav-link:hover { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-danger .nav-treeview > .nav-item > .nav-link.active, .sidebar-dark-danger .nav-treeview > .nav-item > .nav-link.active:hover { - color: #343a40; - background-color: rgba(255, 255, 255, 0.9); -} - -.sidebar-light-danger { - background-color: #ffffff; -} - -.sidebar-light-danger .user-panel a:hover { - color: #212529; -} - -.sidebar-light-danger .user-panel .status { - color: #343a40; - background: #f4f4f5; -} - -.sidebar-light-danger .user-panel .status:hover, .sidebar-light-danger .user-panel .status:focus, .sidebar-light-danger .user-panel .status:active { - color: #212529; - background: #ececed; -} - -.sidebar-light-danger .user-panel .dropdown-menu { - border-color: #e7e7e8; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); -} - -.sidebar-light-danger .user-panel .dropdown-item { - color: #212529; -} - -.sidebar-light-danger .nav-sidebar > .nav-item > .nav-link:active, .sidebar-light-danger .nav-sidebar > .nav-item > .nav-link:focus { - color: #343a40; -} - -.sidebar-light-danger .nav-sidebar > .nav-item.menu-open > .nav-link, -.sidebar-light-danger .nav-sidebar > .nav-item:hover > .nav-link { - color: #212529; - background-color: #f4f4f5; -} - -.sidebar-light-danger .nav-sidebar > .nav-item > .nav-link.active { - color: #ffffff; - background-color: #dc3545; -} - -.sidebar-light-danger .nav-sidebar > .nav-item > .nav-treeview { - background: transparent; -} - -.sidebar-light-danger .nav-header { - color: #292d32; - background: inherit; -} - -.sidebar-light-danger .sidebar a { - color: #343a40; -} - -.sidebar-light-danger .sidebar a:hover { - text-decoration: none; -} - -.sidebar-light-danger .nav-treeview > .nav-item > .nav-link { - color: #777; -} - -.sidebar-light-danger .nav-treeview > .nav-item > .nav-link.active, .sidebar-light-danger .nav-treeview > .nav-item > .nav-link.active:hover { - color: #212529; - background-color: #f4f4f5; -} - -.sidebar-light-danger .nav-treeview > .nav-item > .nav-link:hover { - background-color: #f4f4f5; -} - -.sidebar-dark-light { - background-color: #343a40; -} - -.sidebar-dark-light .user-panel a:hover { - color: #ffffff; -} - -.sidebar-dark-light .user-panel .status { - color: #C2C7D0; - background: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-light .user-panel .status:hover, .sidebar-dark-light .user-panel .status:focus, .sidebar-dark-light .user-panel .status:active { - color: #ffffff; - background: rgba(247, 247, 247, 0.1); -} - -.sidebar-dark-light .user-panel .dropdown-menu { - border-color: rgba(242, 242, 242, 0.1); - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); -} - -.sidebar-dark-light .user-panel .dropdown-item { - color: #212529; -} - -.sidebar-dark-light .nav-sidebar > .nav-item > .nav-link:active, .sidebar-dark-light .nav-sidebar > .nav-item > .nav-link:focus { - color: #C2C7D0; -} - -.sidebar-dark-light .nav-sidebar > .nav-item.menu-open > .nav-link, -.sidebar-dark-light .nav-sidebar > .nav-item:hover > .nav-link { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-light .nav-sidebar > .nav-item > .nav-link.active { - color: #ffffff; - background-color: #f8f9fa; -} - -.sidebar-dark-light .nav-sidebar > .nav-item > .nav-treeview { - background: transparent; -} - -.sidebar-dark-light .nav-header { - color: #d0d4db; - background: inherit; -} - -.sidebar-dark-light .sidebar a { - color: #C2C7D0; -} - -.sidebar-dark-light .sidebar a:hover { - text-decoration: none; -} - -.sidebar-dark-light .nav-treeview > .nav-item > .nav-link { - color: #C2C7D0; -} - -.sidebar-dark-light .nav-treeview > .nav-item > .nav-link:hover { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-light .nav-treeview > .nav-item > .nav-link.active, .sidebar-dark-light .nav-treeview > .nav-item > .nav-link.active:hover { - color: #343a40; - background-color: rgba(255, 255, 255, 0.9); -} - -.sidebar-light-light { - background-color: #ffffff; -} - -.sidebar-light-light .user-panel a:hover { - color: #212529; -} - -.sidebar-light-light .user-panel .status { - color: #343a40; - background: #f4f4f5; -} - -.sidebar-light-light .user-panel .status:hover, .sidebar-light-light .user-panel .status:focus, .sidebar-light-light .user-panel .status:active { - color: #212529; - background: #ececed; -} - -.sidebar-light-light .user-panel .dropdown-menu { - border-color: #e7e7e8; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); -} - -.sidebar-light-light .user-panel .dropdown-item { - color: #212529; -} - -.sidebar-light-light .nav-sidebar > .nav-item > .nav-link:active, .sidebar-light-light .nav-sidebar > .nav-item > .nav-link:focus { - color: #343a40; -} - -.sidebar-light-light .nav-sidebar > .nav-item.menu-open > .nav-link, -.sidebar-light-light .nav-sidebar > .nav-item:hover > .nav-link { - color: #212529; - background-color: #f4f4f5; -} - -.sidebar-light-light .nav-sidebar > .nav-item > .nav-link.active { - color: #ffffff; - background-color: #f8f9fa; -} - -.sidebar-light-light .nav-sidebar > .nav-item > .nav-treeview { - background: transparent; -} - -.sidebar-light-light .nav-header { - color: #292d32; - background: inherit; -} - -.sidebar-light-light .sidebar a { - color: #343a40; -} - -.sidebar-light-light .sidebar a:hover { - text-decoration: none; -} - -.sidebar-light-light .nav-treeview > .nav-item > .nav-link { - color: #777; -} - -.sidebar-light-light .nav-treeview > .nav-item > .nav-link.active, .sidebar-light-light .nav-treeview > .nav-item > .nav-link.active:hover { - color: #212529; - background-color: #f4f4f5; -} - -.sidebar-light-light .nav-treeview > .nav-item > .nav-link:hover { - background-color: #f4f4f5; -} - -.sidebar-dark-dark { - background-color: #343a40; -} - -.sidebar-dark-dark .user-panel a:hover { - color: #ffffff; -} - -.sidebar-dark-dark .user-panel .status { - color: #C2C7D0; - background: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-dark .user-panel .status:hover, .sidebar-dark-dark .user-panel .status:focus, .sidebar-dark-dark .user-panel .status:active { - color: #ffffff; - background: rgba(247, 247, 247, 0.1); -} - -.sidebar-dark-dark .user-panel .dropdown-menu { - border-color: rgba(242, 242, 242, 0.1); - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); -} - -.sidebar-dark-dark .user-panel .dropdown-item { - color: #212529; -} - -.sidebar-dark-dark .nav-sidebar > .nav-item > .nav-link:active, .sidebar-dark-dark .nav-sidebar > .nav-item > .nav-link:focus { - color: #C2C7D0; -} - -.sidebar-dark-dark .nav-sidebar > .nav-item.menu-open > .nav-link, -.sidebar-dark-dark .nav-sidebar > .nav-item:hover > .nav-link { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-dark .nav-sidebar > .nav-item > .nav-link.active { - color: #ffffff; - background-color: #343a40; -} - -.sidebar-dark-dark .nav-sidebar > .nav-item > .nav-treeview { - background: transparent; -} - -.sidebar-dark-dark .nav-header { - color: #d0d4db; - background: inherit; -} - -.sidebar-dark-dark .sidebar a { - color: #C2C7D0; -} - -.sidebar-dark-dark .sidebar a:hover { - text-decoration: none; -} - -.sidebar-dark-dark .nav-treeview > .nav-item > .nav-link { - color: #C2C7D0; -} - -.sidebar-dark-dark .nav-treeview > .nav-item > .nav-link:hover { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.1); -} - -.sidebar-dark-dark .nav-treeview > .nav-item > .nav-link.active, .sidebar-dark-dark .nav-treeview > .nav-item > .nav-link.active:hover { - color: #343a40; - background-color: rgba(255, 255, 255, 0.9); -} - -.sidebar-light-dark { - background-color: #ffffff; -} - -.sidebar-light-dark .user-panel a:hover { - color: #212529; -} - -.sidebar-light-dark .user-panel .status { - color: #343a40; - background: #f4f4f5; -} - -.sidebar-light-dark .user-panel .status:hover, .sidebar-light-dark .user-panel .status:focus, .sidebar-light-dark .user-panel .status:active { - color: #212529; - background: #ececed; -} - -.sidebar-light-dark .user-panel .dropdown-menu { - border-color: #e7e7e8; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); -} - -.sidebar-light-dark .user-panel .dropdown-item { - color: #212529; -} - -.sidebar-light-dark .nav-sidebar > .nav-item > .nav-link:active, .sidebar-light-dark .nav-sidebar > .nav-item > .nav-link:focus { - color: #343a40; -} - -.sidebar-light-dark .nav-sidebar > .nav-item.menu-open > .nav-link, -.sidebar-light-dark .nav-sidebar > .nav-item:hover > .nav-link { - color: #212529; - background-color: #f4f4f5; -} - -.sidebar-light-dark .nav-sidebar > .nav-item > .nav-link.active { - color: #ffffff; - background-color: #343a40; -} - -.sidebar-light-dark .nav-sidebar > .nav-item > .nav-treeview { - background: transparent; -} - -.sidebar-light-dark .nav-header { - color: #292d32; - background: inherit; -} - -.sidebar-light-dark .sidebar a { - color: #343a40; -} - -.sidebar-light-dark .sidebar a:hover { - text-decoration: none; -} - -.sidebar-light-dark .nav-treeview > .nav-item > .nav-link { - color: #777; -} - -.sidebar-light-dark .nav-treeview > .nav-item > .nav-link.active, .sidebar-light-dark .nav-treeview > .nav-item > .nav-link.active:hover { - color: #212529; - background-color: #f4f4f5; -} - -.sidebar-light-dark .nav-treeview > .nav-item > .nav-link:hover { - background-color: #f4f4f5; -} - -/* - * Component: Sidebar Mini - */ -@media (min-width: 992px) { - .sidebar-mini .nav-sidebar, - .sidebar-mini .nav-sidebar > .nav-header, - .sidebar-mini .nav-sidebar .nav-link { - white-space: nowrap; - overflow: hidden; - } - .sidebar-mini.sidebar-collapse .d-hidden-mini { - display: none; - } - .sidebar-mini.sidebar-collapse .content-wrapper, - .sidebar-mini.sidebar-collapse .main-footer, - .sidebar-mini.sidebar-collapse .main-header { - margin-left: 4.6rem !important; - } - .sidebar-mini.sidebar-collapse .nav-sidebar .nav-header { - display: none; - } - .sidebar-mini.sidebar-collapse .sidebar .user-panel > .info, - .sidebar-mini.sidebar-collapse .nav-sidebar .nav-link p, - .sidebar-mini.sidebar-collapse .brand-text { - opacity: 0; - margin-left: -10px; - } - .sidebar-mini.sidebar-collapse .main-sidebar, .sidebar-mini.sidebar-collapse .main-sidebar:before { - margin-left: 0; - width: 4.6rem; - } - .sidebar-mini.sidebar-collapse .main-sidebar .user-panel .image { - float: none; - } - .sidebar-mini.sidebar-collapse .main-sidebar:hover { - width: 250px; - } - .sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel { - text-align: left; - } - .sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel .image { - float: left; - } - .sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel > .info, - .sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-sidebar .nav-link p, - .sidebar-mini.sidebar-collapse .main-sidebar:hover .brand-text { - opacity: 1; - margin-left: 0; - display: inline-block; - } - .sidebar-mini.sidebar-collapse .main-sidebar:hover .brand-image { - margin-right: .5rem; - } - .sidebar-mini.sidebar-collapse .main-sidebar:hover .sidebar-form, - .sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel > .info { - display: block !important; - -webkit-transform: translateZ(0); - } - .sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-sidebar > .nav-item > .nav-link > span { - display: inline-block !important; - } - .sidebar-mini.sidebar-collapse .visible-sidebar-mini { - display: block !important; - } -} - -.nav-sidebar { - position: relative; -} - -.nav-sidebar:hover { - overflow: visible; -} - -.sidebar-form, -.nav-sidebar > .nav-header { - overflow: hidden; - text-overflow: clip; -} - -.nav-sidebar .nav-item > .nav-link { - position: relative; -} - -.nav-sidebar .nav-item > .nav-link > .float-right { - position: absolute; - right: 10px; - top: 50%; - margin-top: -7px; -} - -.sidebar .nav-link p, -.main-sidebar .brand-text, -.sidebar .user-panel .info { - transition: margin-left 0.3s linear, opacity 0.5s ease; -} - -@media screen and (prefers-reduced-motion: reduce) { - .sidebar .nav-link p, - .main-sidebar .brand-text, - .sidebar .user-panel .info { - transition: none; - } -} - -/* - * Component: Control sidebar. By default, this is the right sidebar. - */ -.control-sidebar { - position: absolute; - top: 2.5rem; - z-index: 830; -} - -.control-sidebar, .control-sidebar:before { - width: 250px; - right: -250px; - bottom: 0; - transition: right 0.3s ease-in-out; -} - -@media screen and (prefers-reduced-motion: reduce) { - .control-sidebar, .control-sidebar:before { - transition: none; - } -} - -.control-sidebar:before { - top: 0; - display: block; - position: fixed; - content: " "; - z-index: -1; -} - -@media (min-width: 768px) { - .control-sidebar-open .control-sidebar, .control-sidebar-open .control-sidebar:before { - right: 0; - } - .control-sidebar-open .content-wrapper, - .control-sidebar-open .main-footer { - margin-right: 250px; - } -} - -@media (max-width: 991.98px) { - .control-sidebar-open .control-sidebar, .control-sidebar-open .control-sidebar:before { - right: 0; - } -} - -.control-sidebar-slide-open .control-sidebar, .control-sidebar-slide-open .control-sidebar:before { - right: 0; -} - -.control-sidebar-dark, -.control-sidebar-dark a, -.control-sidebar-dark .nav-link { - color: #C2C7D0; -} - -.control-sidebar-dark, .control-sidebar-dark:before { - background: #343a40; -} - -.control-sidebar-dark a:hover { - color: #ffffff; -} - -.control-sidebar-dark h1, -.control-sidebar-dark h2, -.control-sidebar-dark h3, -.control-sidebar-dark h4, -.control-sidebar-dark h5, -.control-sidebar-dark h6, -.control-sidebar-dark label { - color: #ffffff; -} - -.control-sidebar-dark .nav-tabs { - border-bottom: 0; - background-color: rgba(255, 255, 255, 0.1); - margin-bottom: 5px; -} - -.control-sidebar-dark .nav-tabs .nav-item { - margin: 0; -} - -.control-sidebar-dark .nav-tabs .nav-link { - position: relative; - border-radius: 0; - text-align: center; - padding: 10px 20px; -} - -.control-sidebar-dark .nav-tabs .nav-link, .control-sidebar-dark .nav-tabs .nav-link:hover, .control-sidebar-dark .nav-tabs .nav-link:active, .control-sidebar-dark .nav-tabs .nav-link:focus, .control-sidebar-dark .nav-tabs .nav-link.active { - border: 0; -} - -.control-sidebar-dark .nav-tabs .nav-link:hover, .control-sidebar-dark .nav-tabs .nav-link:active, .control-sidebar-dark .nav-tabs .nav-link:focus, .control-sidebar-dark .nav-tabs .nav-link.active { - border-left-color: transparent; - border-bottom-color: transparent; - border-top-color: transparent; - color: #ffffff; -} - -.control-sidebar-dark .nav-tabs .nav-link.active { - background-color: #343a40; -} - -.control-sidebar-dark .tab-pane { - padding: 10px 15px; -} - -.control-sidebar-light { - color: #4b545c; -} - -.control-sidebar-light, .control-sidebar-light:before { - background: #ffffff; - border-left: 1px solid #adb5bd; -} - -/* - * Component: Dropdown menus - * ------------------------- - */ -.dropdown-item-title { - font-size: 1rem; - margin: 0; -} - -.dropdown-menu-lg { - min-width: 280px; - max-width: 300px; - padding: 0; -} - -.dropdown-menu-lg .dropdown-divider { - margin: 0; -} - -.dropdown-menu-lg .dropdown-item { - padding: 0.5rem 1rem; -} - -.dropdown-menu-lg p { - white-space: normal; - margin: 0; -} - -.dropdown-footer, -.dropdown-header { - text-align: center; - display: block; - padding: 0.5rem 1rem; - font-size: 0.875rem; -} - -/* Add fade animation to dropdown menus by appending - the class .animated-dropdown-menu to the .dropdown-menu ul (or ol)*/ -.open:not(.dropup) > .animated-dropdown-menu { - backface-visibility: visible !important; - animation: flipInX 0.7s both; -} - -@keyframes flipInX { - 0% { - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transition-timing-function: ease-in; - opacity: 0; - } - 40% { - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transition-timing-function: ease-in; - } - 60% { - transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - opacity: 1; - } - 80% { - transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - } - 100% { - transform: perspective(400px); - } -} - -@-webkit-keyframes flipInX { - 0% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - -webkit-transition-timing-function: ease-in; - opacity: 0; - } - 40% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - -webkit-transition-timing-function: ease-in; - } - 60% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - opacity: 1; - } - 80% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - } - 100% { - -webkit-transform: perspective(400px); - } -} - -/* Fix dropdown menu in navbars */ -.navbar-custom-menu > .navbar-nav > li { - position: relative; -} - -.navbar-custom-menu > .navbar-nav > li > .dropdown-menu { - position: absolute; - right: 0; - left: auto; -} - -@media (max-width: 767.98px) { - .navbar-custom-menu > .navbar-nav { - float: right; - } - .navbar-custom-menu > .navbar-nav > li { - position: static; - } - .navbar-custom-menu > .navbar-nav > li > .dropdown-menu { - position: absolute; - right: 5%; - left: auto; - border: 1px solid #ddd; - background: #ffffff; - } -} - -/* - * Component: Form - * --------------- - */ -.form-group.has-icon { - position: relative; -} - -.form-group.has-icon .form-control { - padding-right: 35px; -} - -.form-group.has-icon .form-icon { - cursor: pointer; - position: absolute; - right: 3px; - top: 0; - padding: 0.375rem 0.75rem; - border: 0; - background-color: transparent; - font-size: 1rem; -} - -/* button groups */ -.btn-group-vertical .btn.btn-flat:first-of-type, .btn-group-vertical .btn.btn-flat:last-of-type { - border-radius: 0; -} - -/* Support Font Awesome icons in form-control */ -.form-control-feedback.fa { - line-height: calc(2.25rem + 2px); -} - -.input-lg + .form-control-feedback.fa, -.input-group-lg + .form-control-feedback.fa, -.form-group-lg .form-control + .form-control-feedback.fa { - line-height: calc(2.875rem + 2px); -} - -.input-sm + .form-control-feedback.fa, -.input-group-sm + .form-control-feedback.fa, -.form-group-sm .form-control + .form-control-feedback.fa { - line-height: calc(1.8125rem + 2px); -} - -label:not(.form-check-label):not(.custom-file-label) { - font-weight: 700; -} - -/* - * Component: Progress Bar - * ----------------------- - */ -.progress { - box-shadow: none; - border-radius: 1px; -} - -.progress-sm { - height: 10px; -} - -.progress-xs { - height: 7px; -} - -.progress-xxs { - height: 3px; -} - -.progress.vertical { - position: relative; - width: 30px; - height: 200px; - display: inline-block; - margin-right: 10px; -} - -.progress.vertical > .progress-bar { - width: 100%; - position: absolute; - bottom: 0; -} - -.progress.vertical.sm, .progress.vertical.progress-sm { - width: 20px; -} - -.progress.vertical.xs, .progress.vertical.progress-xs { - width: 10px; -} - -.progress.vertical.xxs, .progress.vertical.progress-xxs { - width: 3px; -} - -.table tr > td .progress { - margin: 0; -} - -/* - * Component: Small Box - * -------------------- - */ -.small-box { - border-radius: 0.25rem; - box-shadow: 0 0 1px rgba(0, 0, 0, 0.125), 0 1px 3px rgba(0, 0, 0, 0.2); - position: relative; - display: block; - margin-bottom: 20px; -} - -.small-box > .inner { - padding: 10px; -} - -.small-box > .small-box-footer { - position: relative; - text-align: center; - padding: 3px 0; - color: #ffffff; - color: rgba(255, 255, 255, 0.8); - display: block; - z-index: 10; - background: rgba(0, 0, 0, 0.1); - text-decoration: none; -} - -.small-box > .small-box-footer:hover { - color: #ffffff; - background: rgba(0, 0, 0, 0.15); -} - -.small-box h3 { - font-size: 38px; - font-weight: bold; - margin: 0 0 10px 0; - white-space: nowrap; - padding: 0; -} - -.small-box p { - font-size: 15px; -} - -.small-box p > small { - display: block; - color: #f9f9f9; - font-size: 13px; - margin-top: 5px; -} - -.small-box h3, .small-box p { - z-index: 5; -} - -.small-box .icon { - transition: all 0.3s linear; - position: absolute; - top: -10px; - right: 10px; - z-index: 0; - font-size: 90px; - color: rgba(0, 0, 0, 0.15); -} - -.small-box:hover { - text-decoration: none; -} - -.small-box:hover .icon { - font-size: 95px; -} - -@media (max-width: 767.98px) { - .small-box { - text-align: center; - } - .small-box .icon { - display: none; - } - .small-box p { - font-size: 12px; - } -} - -/* - * Component: Box - * -------------- - */ -.card { - box-shadow: 0 0 1px rgba(0, 0, 0, 0.125), 0 1px 3px rgba(0, 0, 0, 0.2); -} - -.card.bg-dark, -.card.bg-dark .card-body { - color: #ffffff; -} - -.card.collapsed-card .card-body, -.card.collapsed-card .card-footer { - display: none; -} - -.card .nav.flex-column > li { - border-bottom: 1px solid rgba(0, 0, 0, 0.125); - margin: 0; -} - -.card .nav.flex-column > li:last-of-type { - border-bottom: none; -} - -.card.height-control .card-body { - max-height: 300px; - overflow: auto; -} - -.card .border-right { - border-right: 1px solid rgba(0, 0, 0, 0.125); -} - -.card .border-left { - border-left: 1px solid rgba(0, 0, 0, 0.125); -} - -.card > .overlay, -.card > .loading-img, -.overlay-wrapper > .overlay, -.overlay-wrapper > .loading-img { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; -} - -.card .overlay, -.overlay-wrapper .overlay { - z-index: 50; - background: rgba(255, 255, 255, 0.7); - border-radius: 0.25rem; -} - -.card .overlay > .fa, -.overlay-wrapper .overlay > .fa { - position: absolute; - top: 50%; - left: 50%; - margin-left: -15px; - margin-top: -15px; - color: #000; - font-size: 30px; -} - -.card .overlay.dark, -.overlay-wrapper .overlay.dark { - background: rgba(0, 0, 0, 0.5); -} - -.card-header::after, -.card-body::after, -.card-footer::after { - display: block; - clear: both; - content: ""; -} - -.card-header { - position: relative; - background-color: transparent; - border-bottom: 1px solid rgba(0, 0, 0, 0.125); - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} - -.collapsed-card .card-header { - border-bottom: none; -} - -.card-header > .card-tools { - position: absolute; - right: 1rem; - top: .5rem; -} - -.card-header > .card-tools [data-toggle="tooltip"] { - position: relative; -} - -.card-title { - font-size: 1.25rem; - font-weight: 400; - margin: 0; -} - -.btn-tool { - padding: .25rem .5rem; - font-size: 0.875rem; - background: transparent; - color: #adb5bd; -} - -.btn-group.show .btn-tool, .btn-tool:hover { - color: #495057; -} - -.show .btn-tool, .btn-tool:focus { - box-shadow: none !important; -} - -.card-body > .table { - margin-bottom: 0; -} - -.card-body > .table > thead > tr > th, -.card-body > .table > thead > tr > td { - border-top-width: 0; -} - -.card-body .fc { - margin-top: 5px; -} - -.card-body .full-width-chart { - margin: -19px; -} - -.card-body.p-0 .full-width-chart { - margin: -9px; -} - -.chart-legend { - margin: 10px 0; -} - -@media (max-width: 576px) { - .chart-legend > li { - float: left; - margin-right: 10px; - } -} - -.card-comments { - background: #f7f7f7; -} - -.card-comments .card-comment { - padding: 8px 0; - border-bottom: 1px solid #eee; -} - -.card-comments .card-comment::after { - display: block; - clear: both; - content: ""; -} - -.card-comments .card-comment:last-of-type { - border-bottom: 0; -} - -.card-comments .card-comment:first-of-type { - padding-top: 0; -} - -.card-comments .card-comment img { - float: left; -} - -.card-comments .comment-text { - margin-left: 40px; - color: #555; -} - -.card-comments .username { - color: #444; - display: block; - font-weight: 600; -} - -.card-comments .text-muted { - font-weight: 400; - font-size: 12px; -} - -.todo-list { - margin: 0; - padding: 0; - list-style: none; - overflow: auto; -} - -.todo-list > li { - border-radius: 2px; - padding: 10px; - background: #f4f4f4; - margin-bottom: 2px; - border-left: 2px solid #e6e7e8; - color: #444; -} - -.todo-list > li:last-of-type { - margin-bottom: 0; -} - -.todo-list > li > input[type='checkbox'] { - margin: 0 10px 0 5px; -} - -.todo-list > li .text { - display: inline-block; - margin-left: 5px; - font-weight: 600; -} - -.todo-list > li .label { - margin-left: 10px; - font-size: 9px; -} - -.todo-list > li .tools { - display: none; - float: right; - color: #dc3545; -} - -.todo-list > li .tools > .fa, .todo-list > li .tools > .glyphicon, .todo-list > li .tools > .ion { - margin-right: 5px; - cursor: pointer; -} - -.todo-list > li:hover .tools { - display: inline-block; -} - -.todo-list > li.done { - color: #999; -} - -.todo-list > li.done .text { - text-decoration: line-through; - font-weight: 500; -} - -.todo-list > li.done .label { - background: #adb5bd !important; -} - -.todo-list .danger { - border-left-color: #dc3545; -} - -.todo-list .warning { - border-left-color: #ffc107; -} - -.todo-list .info { - border-left-color: #17a2b8; -} - -.todo-list .success { - border-left-color: #28a745; -} - -.todo-list .primary { - border-left-color: #007bff; -} - -.todo-list .handle { - display: inline-block; - cursor: move; - margin: 0 5px; -} - -.card-input { - max-width: 200px; -} - -.card-primary:not(.card-outline) .card-header { - background-color: #007bff; - border-bottom: 0; -} - -.card-primary:not(.card-outline) .card-header, -.card-primary:not(.card-outline) .card-header a { - color: #ffffff; -} - -.card-primary.card-outline { - border-top: 3px solid #007bff; -} - -.bg-primary .btn-tool, .label-primary .btn-tool, -.bg-primary-gradient .btn-tool, -.card-primary:not(.card-outline) .btn-tool { - color: rgba(255, 255, 255, 0.8); -} - -.bg-primary .btn-tool:hover, .label-primary .btn-tool:hover, -.bg-primary-gradient .btn-tool:hover, -.card-primary:not(.card-outline) .btn-tool:hover { - color: #ffffff; -} - -.card-secondary:not(.card-outline) .card-header { - background-color: #6c757d; - border-bottom: 0; -} - -.card-secondary:not(.card-outline) .card-header, -.card-secondary:not(.card-outline) .card-header a { - color: #ffffff; -} - -.card-secondary.card-outline { - border-top: 3px solid #6c757d; -} - -.bg-secondary .btn-tool, -.bg-secondary-gradient .btn-tool, -.card-secondary:not(.card-outline) .btn-tool { - color: rgba(255, 255, 255, 0.8); -} - -.bg-secondary .btn-tool:hover, -.bg-secondary-gradient .btn-tool:hover, -.card-secondary:not(.card-outline) .btn-tool:hover { - color: #ffffff; -} - -.card-success:not(.card-outline) .card-header { - background-color: #28a745; - border-bottom: 0; -} - -.card-success:not(.card-outline) .card-header, -.card-success:not(.card-outline) .card-header a { - color: #ffffff; -} - -.card-success.card-outline { - border-top: 3px solid #28a745; -} - -.bg-success .btn-tool, .alert-success .btn-tool, .label-success .btn-tool, -.bg-success-gradient .btn-tool, -.card-success:not(.card-outline) .btn-tool { - color: rgba(255, 255, 255, 0.8); -} - -.bg-success .btn-tool:hover, .alert-success .btn-tool:hover, .label-success .btn-tool:hover, -.bg-success-gradient .btn-tool:hover, -.card-success:not(.card-outline) .btn-tool:hover { - color: #ffffff; -} - -.card-info:not(.card-outline) .card-header { - background-color: #17a2b8; - border-bottom: 0; -} - -.card-info:not(.card-outline) .card-header, -.card-info:not(.card-outline) .card-header a { - color: #ffffff; -} - -.card-info.card-outline { - border-top: 3px solid #17a2b8; -} - -.bg-info .btn-tool, .alert-info .btn-tool, .label-info .btn-tool, -.bg-info-gradient .btn-tool, -.card-info:not(.card-outline) .btn-tool { - color: rgba(255, 255, 255, 0.8); -} - -.bg-info .btn-tool:hover, .alert-info .btn-tool:hover, .label-info .btn-tool:hover, -.bg-info-gradient .btn-tool:hover, -.card-info:not(.card-outline) .btn-tool:hover { - color: #ffffff; -} - -.card-warning:not(.card-outline) .card-header { - background-color: #ffc107; - border-bottom: 0; -} - -.card-warning:not(.card-outline) .card-header, -.card-warning:not(.card-outline) .card-header a { - color: #1F2D3D; -} - -.card-warning.card-outline { - border-top: 3px solid #ffc107; -} - -.bg-warning .btn-tool, .alert-warning .btn-tool, .label-warning .btn-tool, -.bg-warning-gradient .btn-tool, -.card-warning:not(.card-outline) .btn-tool { - color: rgba(31, 45, 61, 0.8); -} - -.bg-warning .btn-tool:hover, .alert-warning .btn-tool:hover, .label-warning .btn-tool:hover, -.bg-warning-gradient .btn-tool:hover, -.card-warning:not(.card-outline) .btn-tool:hover { - color: #1F2D3D; -} - -.card-danger:not(.card-outline) .card-header { - background-color: #dc3545; - border-bottom: 0; -} - -.card-danger:not(.card-outline) .card-header, -.card-danger:not(.card-outline) .card-header a { - color: #ffffff; -} - -.card-danger.card-outline { - border-top: 3px solid #dc3545; -} - -.bg-danger .btn-tool, .alert-danger .btn-tool, .alert-error .btn-tool, .label-danger .btn-tool, -.bg-danger-gradient .btn-tool, -.card-danger:not(.card-outline) .btn-tool { - color: rgba(255, 255, 255, 0.8); -} - -.bg-danger .btn-tool:hover, .alert-danger .btn-tool:hover, .alert-error .btn-tool:hover, .label-danger .btn-tool:hover, -.bg-danger-gradient .btn-tool:hover, -.card-danger:not(.card-outline) .btn-tool:hover { - color: #ffffff; -} - -.card-light:not(.card-outline) .card-header { - background-color: #f8f9fa; - border-bottom: 0; -} - -.card-light:not(.card-outline) .card-header, -.card-light:not(.card-outline) .card-header a { - color: #1F2D3D; -} - -.card-light.card-outline { - border-top: 3px solid #f8f9fa; -} - -.bg-light .btn-tool, -.bg-light-gradient .btn-tool, -.card-light:not(.card-outline) .btn-tool { - color: rgba(31, 45, 61, 0.8); -} - -.bg-light .btn-tool:hover, -.bg-light-gradient .btn-tool:hover, -.card-light:not(.card-outline) .btn-tool:hover { - color: #1F2D3D; -} - -.card-dark:not(.card-outline) .card-header { - background-color: #343a40; - border-bottom: 0; -} - -.card-dark:not(.card-outline) .card-header, -.card-dark:not(.card-outline) .card-header a { - color: #ffffff; -} - -.card-dark.card-outline { - border-top: 3px solid #343a40; -} - -.bg-dark .btn-tool, -.bg-dark-gradient .btn-tool, -.card-dark:not(.card-outline) .btn-tool { - color: rgba(255, 255, 255, 0.8); -} - -.bg-dark .btn-tool:hover, -.bg-dark-gradient .btn-tool:hover, -.card-dark:not(.card-outline) .btn-tool:hover { - color: #ffffff; -} - -/* - * Component: Info Box - * ------------------- - */ -.info-box { - box-shadow: 0 0 1px rgba(0, 0, 0, 0.125), 0 1px 3px rgba(0, 0, 0, 0.2); - border-radius: 0.25rem; - padding: .5rem; - min-height: 80px; - background: #ffffff; -} - -.info-box .progress { - background-color: rgba(0, 0, 0, 0.125); - margin: 5px 0; - height: 2px; -} - -.info-box .progress .progress-bar { - background-color: #ffffff; -} - -.info-box-icon { - border-radius: 0.25rem; - display: block; - width: 70px; - text-align: center; - font-size: 30px; -} - -.info-box-icon > img { - max-width: 100%; -} - -.info-box-content { - padding: 5px 10px; - flex: 1; -} - -.info-box-number { - display: block; - font-weight: 700; -} - -.progress-description, -.info-box-text { - display: block; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.info-box.bg-primary, .info-box.label-primary, -.info-box.bg-primary-gradient { - color: #ffffff; -} - -.info-box.bg-primary .progress-bar, .info-box.label-primary .progress-bar, -.info-box.bg-primary-gradient .progress-bar { - background-color: #ffffff; -} - -.info-box.bg-secondary, -.info-box.bg-secondary-gradient { - color: #ffffff; -} - -.info-box.bg-secondary .progress-bar, -.info-box.bg-secondary-gradient .progress-bar { - background-color: #ffffff; -} - -.info-box.bg-success, .info-box.alert-success, .info-box.label-success, -.info-box.bg-success-gradient { - color: #ffffff; -} - -.info-box.bg-success .progress-bar, .info-box.alert-success .progress-bar, .info-box.label-success .progress-bar, -.info-box.bg-success-gradient .progress-bar { - background-color: #ffffff; -} - -.info-box.bg-info, .info-box.alert-info, .info-box.label-info, -.info-box.bg-info-gradient { - color: #ffffff; -} - -.info-box.bg-info .progress-bar, .info-box.alert-info .progress-bar, .info-box.label-info .progress-bar, -.info-box.bg-info-gradient .progress-bar { - background-color: #ffffff; -} - -.info-box.bg-warning, .info-box.alert-warning, .info-box.label-warning, -.info-box.bg-warning-gradient { - color: #1F2D3D; -} - -.info-box.bg-warning .progress-bar, .info-box.alert-warning .progress-bar, .info-box.label-warning .progress-bar, -.info-box.bg-warning-gradient .progress-bar { - background-color: #1F2D3D; -} - -.info-box.bg-danger, .info-box.alert-danger, -.info-box.alert-error, .info-box.label-danger, -.info-box.bg-danger-gradient { - color: #ffffff; -} - -.info-box.bg-danger .progress-bar, .info-box.alert-danger .progress-bar, .info-box.alert-error .progress-bar, .info-box.label-danger .progress-bar, -.info-box.bg-danger-gradient .progress-bar { - background-color: #ffffff; -} - -.info-box.bg-light, -.info-box.bg-light-gradient { - color: #1F2D3D; -} - -.info-box.bg-light .progress-bar, -.info-box.bg-light-gradient .progress-bar { - background-color: #1F2D3D; -} - -.info-box.bg-dark, -.info-box.bg-dark-gradient { - color: #ffffff; -} - -.info-box.bg-dark .progress-bar, -.info-box.bg-dark-gradient .progress-bar { - background-color: #ffffff; -} - -.info-box-more { - display: block; -} - -.progress-description { - margin: 0; -} - -/* - * Component: Timeline - * ------------------- - */ -.timeline { - position: relative; - margin: 0 0 30px 0; - padding: 0; - list-style: none; -} - -.timeline:before { - content: ''; - position: absolute; - top: 0; - bottom: 0; - width: 4px; - background: #ddd; - left: 31px; - margin: 0; - border-radius: 0.25rem; -} - -.timeline > li { - position: relative; - margin-right: 10px; - margin-bottom: 15px; -} - -.timeline > li::after { - display: block; - clear: both; - content: ""; -} - -.timeline > li > .timeline-item { - box-shadow: 0 0 1px rgba(0, 0, 0, 0.125), 0 1px 3px rgba(0, 0, 0, 0.2); - border-radius: 0.25rem; - margin-top: 0; - background: #ffffff; - color: #444; - margin-left: 60px; - margin-right: 15px; - padding: 0; - position: relative; -} - -.timeline > li > .timeline-item > .time { - color: #999; - float: right; - padding: 10px; - font-size: 12px; -} - -.timeline > li > .timeline-item > .timeline-header { - margin: 0; - color: #555; - border-bottom: 1px solid rgba(0, 0, 0, 0.125); - padding: 10px; - font-size: 16px; - line-height: 1.1; -} - -.timeline > li > .timeline-item > .timeline-header > a { - font-weight: 600; -} - -.timeline > li > .timeline-item > .timeline-body, .timeline > li > .timeline-item > .timeline-footer { - padding: 10px; -} - -.timeline > li > .fa, -.timeline > li > .glyphicon, -.timeline > li > .ion { - width: 30px; - height: 30px; - font-size: 15px; - line-height: 30px; - position: absolute; - background: #adb5bd; - border-radius: 50%; - text-align: center; - left: 18px; - top: 0; -} - -.timeline > .time-label > span { - font-weight: 600; - padding: 5px; - display: inline-block; - background-color: #ffffff; - border-radius: 4px; -} - -.timeline-inverse > li > .timeline-item { - background: #f8f9fa; - border: 1px solid #ddd; - box-shadow: none; -} - -.timeline-inverse > li > .timeline-item > .timeline-header { - border-bottom-color: #ddd; -} - -/* - * Component: Button - * ----------------- - */ -.btn.btn-flat { - border-radius: 0; - box-shadow: none; - border-width: 1px; -} - -.btn.btn-file { - position: relative; - overflow: hidden; -} - -.btn.btn-file > input[type='file'] { - position: absolute; - top: 0; - right: 0; - min-width: 100%; - min-height: 100%; - font-size: 100px; - text-align: right; - opacity: 0; - outline: none; - background: white; - cursor: inherit; - display: block; -} - -.btn-default { - background-color: #f4f4f4; - color: #444; - border-color: #ddd; -} - -.btn-default:hover, .btn-default:active, .btn-default.hover { - background-color: #e7e7e7; -} - -.btn-app { - border-radius: 3px; - position: relative; - padding: 15px 5px; - margin: 0 0 10px 10px; - min-width: 80px; - height: 60px; - text-align: center; - color: #666; - border: 1px solid #ddd; - background-color: #f4f4f4; - font-size: 12px; -} - -.btn-app > .fa, -.btn-app > .glyphicon, -.btn-app > .ion { - font-size: 20px; - display: block; -} - -.btn-app:hover { - background: #f4f4f4; - color: #444; - border-color: #aaa; -} - -.btn-app:active, .btn-app:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} - -.btn-app > .badge { - position: absolute; - top: -3px; - right: -10px; - font-size: 10px; - font-weight: 400; -} - -/* - * Component: Callout - * ------------------ - */ -.callout { - border-radius: 0.25rem; - background-color: #ffffff; - padding: .5rem 1rem .5rem .5rem; - border-left: 5px solid #eee; -} - -.callout a { - color: #ffffff; - text-decoration: underline; -} - -.callout a:hover { - color: #eee; -} - -.callout p:last-child { - margin-bottom: 0; -} - -.callout.callout-danger { - border-left-color: #bd2130; -} - -.callout.callout-warning { - border-left-color: #d39e00; -} - -.callout.callout-info { - border-left-color: #117a8b; -} - -.callout.callout-success { - border-left-color: #1e7e34; -} - -/* - * Component: alert - * ---------------- - */ -.alert .icon { - margin-right: 10px; -} - -.alert .close, .alert .mailbox-attachment-close { - color: #000; - opacity: .2; -} - -.alert .close:hover, .alert .mailbox-attachment-close:hover { - opacity: .5; -} - -.alert a { - color: #ffffff; - text-decoration: underline; -} - -.alert-success { - border-color: #23923d; -} - -.alert-danger, -.alert-error { - border-color: #d32535; -} - -.alert-warning { - border-color: #edb100; -} - -.alert-info { - border-color: #148ea1; -} - -/* - * Component: Nav - * -------------- - */ -.nav-pills .nav-link { - color: #6c757d; -} - -.nav-pills .nav-link:not(.active):hover { - color: #007bff; -} - -/* - * Component: Products List - * ------------------------ - */ -.products-list { - list-style: none; - margin: 0; - padding: 0; -} - -.products-list > .item { - border-radius: 0.25rem; - padding: 10px 0; - background: #ffffff; -} - -.products-list > .item::after { - display: block; - clear: both; - content: ""; -} - -.products-list .product-img { - float: left; -} - -.products-list .product-img img { - width: 50px; - height: 50px; -} - -.products-list .product-info { - margin-left: 60px; -} - -.products-list .product-title { - font-weight: 600; -} - -.products-list .product-description { - display: block; - color: #6c757d; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.product-list-in-card > .item { - border-radius: 0; - border-bottom: 1px solid rgba(0, 0, 0, 0.125); -} - -.product-list-in-card > .item:last-of-type { - border-bottom-width: 0; -} - -/* - * Component: Table - * ---------------- - */ -.table.no-border, -.table.no-border td, -.table.no-border th { - border: 0; -} - -.table.text-center, .table.text-center td, .table.text-center th { - text-align: center; -} - -.table-valign-middle thead > tr > th, -.table-valign-middle thead > tr > td, -.table-valign-middle tbody > tr > th, -.table-valign-middle tbody > tr > td { - vertical-align: middle; -} - -/* - * Component: Label - * ---------------- - */ -.label-default { - background-color: #adb5bd; - color: #444; -} - -/* - * Component: Direct Chat - * ---------------------- - */ -.direct-chat .card-body { - position: relative; - overflow-x: hidden; - padding: 0; -} - -.direct-chat.chat-pane-open .direct-chat-contacts { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - transform: translate(0, 0); -} - -.direct-chat-messages { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - transform: translate(0, 0); - padding: 10px; - height: 250px; - overflow: auto; -} - -.direct-chat-msg, -.direct-chat-text { - display: block; -} - -.direct-chat-msg { - margin-bottom: 10px; -} - -.direct-chat-msg::after { - display: block; - clear: both; - content: ""; -} - -.direct-chat-messages, -.direct-chat-contacts { - transition: transform .5s ease-in-out; -} - -.direct-chat-text { - border-radius: 0.3rem; - position: relative; - padding: 5px 10px; - background: #d2d6de; - border: 1px solid #d2d6de; - margin: 5px 0 0 50px; - color: #444; -} - -.direct-chat-text:after, .direct-chat-text:before { - position: absolute; - right: 100%; - top: 15px; - border: solid transparent; - border-right-color: #d2d6de; - content: ' '; - height: 0; - width: 0; - pointer-events: none; -} - -.direct-chat-text:after { - border-width: 5px; - margin-top: -5px; -} - -.direct-chat-text:before { - border-width: 6px; - margin-top: -6px; -} - -.right .direct-chat-text { - margin-right: 50px; - margin-left: 0; -} - -.right .direct-chat-text:after, .right .direct-chat-text:before { - right: auto; - left: 100%; - border-right-color: transparent; - border-left-color: #d2d6de; -} - -.direct-chat-img { - border-radius: 50%; - float: left; - width: 40px; - height: 40px; -} - -.right .direct-chat-img { - float: right; -} - -.direct-chat-info { - display: block; - margin-bottom: 2px; - font-size: 0.875rem; -} - -.direct-chat-name { - font-weight: 600; -} - -.direct-chat-timestamp { - color: #999; -} - -.direct-chat-contacts-open .direct-chat-contacts { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - transform: translate(0, 0); -} - -.direct-chat-contacts { - -webkit-transform: translate(101%, 0); - -ms-transform: translate(101%, 0); - transform: translate(101%, 0); - position: absolute; - top: 0; - bottom: 0; - height: 250px; - width: 100%; - background: #222d32; - color: #ffffff; - overflow: auto; -} - -.contacts-list > li { - border-bottom: 1px solid rgba(0, 0, 0, 0.2); - padding: 10px; - margin: 0; -} - -.contacts-list > li::after { - display: block; - clear: both; - content: ""; -} - -.contacts-list > li:last-of-type { - border-bottom: none; -} - -.contacts-list-img { - border-radius: 50%; - width: 40px; - float: left; -} - -.contacts-list-info { - margin-left: 45px; - color: #ffffff; -} - -.contacts-list-name, -.contacts-list-status { - display: block; -} - -.contacts-list-name { - font-weight: 600; -} - -.contacts-list-status { - font-size: 0.875rem; -} - -.contacts-list-date { - color: #aaa; - font-weight: normal; -} - -.contacts-list-msg { - color: #999; -} - -.direct-chat-danger .right > .direct-chat-text { - background: #dc3545; - border-color: #dc3545; - color: #ffffff; -} - -.direct-chat-danger .right > .direct-chat-text:after, .direct-chat-danger .right > .direct-chat-text:before { - border-left-color: #dc3545; -} - -.direct-chat-primary .right > .direct-chat-text { - background: #007bff; - border-color: #007bff; - color: #ffffff; -} - -.direct-chat-primary .right > .direct-chat-text:after, .direct-chat-primary .right > .direct-chat-text:before { - border-left-color: #007bff; -} - -.direct-chat-warning .right > .direct-chat-text { - background: #ffc107; - border-color: #ffc107; - color: #1F2D3D; -} - -.direct-chat-warning .right > .direct-chat-text:after, .direct-chat-warning .right > .direct-chat-text:before { - border-left-color: #ffc107; -} - -.direct-chat-info .right > .direct-chat-text { - background: #17a2b8; - border-color: #17a2b8; - color: #ffffff; -} - -.direct-chat-info .right > .direct-chat-text:after, .direct-chat-info .right > .direct-chat-text:before { - border-left-color: #17a2b8; -} - -.direct-chat-success .right > .direct-chat-text { - background: #28a745; - border-color: #28a745; - color: #ffffff; -} - -.direct-chat-success .right > .direct-chat-text:after, .direct-chat-success .right > .direct-chat-text:before { - border-left-color: #28a745; -} - -/* - * Component: Users List - * --------------------- - */ -.users-list > li { - width: 25%; - float: left; - padding: 10px; - text-align: center; -} - -.users-list > li img { - border-radius: 50%; - max-width: 100%; - height: auto; -} - -.users-list > li > a:hover, -.users-list > li > a:hover .users-list-name { - color: #999; -} - -.users-list-name, -.users-list-date { - display: block; -} - -.users-list-name { - font-size: 0.875rem; - color: #444; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.users-list-date { - color: #999; - font-size: 12px; -} - -/* - * Component: Carousel - * ------------------- - */ -.carousel-control.left, .carousel-control.right { - background-image: none; -} - -.carousel-control > .fa { - font-size: 40px; - position: absolute; - top: 50%; - z-index: 5; - display: inline-block; - margin-top: -20px; -} - -/* - * Component: Social Widgets - * ------------------------- - */ -.card-widget { - border: none; - position: relative; -} - -.widget-user .widget-user-header { - padding: 1rem; - height: 120px; - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} - -.widget-user .widget-user-username { - margin-top: 0; - margin-bottom: 5px; - font-size: 25px; - font-weight: 300; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); -} - -.widget-user .widget-user-desc { - margin-top: 0; -} - -.widget-user .widget-user-image { - position: absolute; - top: 65px; - left: 50%; - margin-left: -45px; -} - -.widget-user .widget-user-image > img { - width: 90px; - height: auto; - border: 3px solid #ffffff; -} - -.widget-user .card-footer { - padding-top: 40px; -} - -.widget-user-2 .widget-user-header { - padding: 1rem; - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} - -.widget-user-2 .widget-user-username { - margin-top: 5px; - margin-bottom: 5px; - font-size: 25px; - font-weight: 300; -} - -.widget-user-2 .widget-user-desc { - margin-top: 0; -} - -.widget-user-2 .widget-user-username, -.widget-user-2 .widget-user-desc { - margin-left: 75px; -} - -.widget-user-2 .widget-user-image > img { - width: 65px; - height: auto; - float: left; -} - -/* - * Page: Mailbox - * ------------- - */ -.mailbox-messages > .table { - margin: 0; -} - -.mailbox-controls { - padding: 5px; -} - -.mailbox-controls.with-border { - border-bottom: 1px solid rgba(0, 0, 0, 0.125); -} - -.mailbox-read-info { - border-bottom: 1px solid rgba(0, 0, 0, 0.125); - padding: 10px; -} - -.mailbox-read-info h3 { - font-size: 20px; - margin: 0; -} - -.mailbox-read-info h5 { - margin: 0; - padding: 5px 0 0 0; -} - -.mailbox-read-time { - color: #999; - font-size: 13px; -} - -.mailbox-read-message { - padding: 10px; -} - -.mailbox-attachments li { - float: left; - width: 200px; - border: 1px solid #eee; - margin-bottom: 10px; - margin-right: 10px; -} - -.mailbox-attachment-name { - font-weight: bold; - color: #666; -} - -.mailbox-attachment-icon, -.mailbox-attachment-info, -.mailbox-attachment-size { - display: block; -} - -.mailbox-attachment-info { - padding: 10px; - background: #f4f4f4; -} - -.mailbox-attachment-size { - color: #999; - font-size: 12px; -} - -.mailbox-attachment-icon { - text-align: center; - font-size: 65px; - color: #666; - padding: 20px 10px; -} - -.mailbox-attachment-icon.has-img { - padding: 0; -} - -.mailbox-attachment-icon.has-img > img { - max-width: 100%; - height: auto; -} - -/* - * Page: Lock Screen - * ----------------- - */ -/* ADD THIS CLASS TO THE TAG */ -.lockscreen { - background: #e9ecef; -} - -.lockscreen-logo { - font-size: 35px; - text-align: center; - margin-bottom: 25px; - font-weight: 300; -} - -.lockscreen-logo a { - color: #444; -} - -.lockscreen-wrapper { - max-width: 400px; - margin: 0 auto; - margin-top: 10%; -} - -/* User name [optional] */ -.lockscreen .lockscreen-name { - text-align: center; - font-weight: 600; -} - -/* Will contain the image and the sign in form */ -.lockscreen-item { - border-radius: 4px; - padding: 0; - background: #ffffff; - position: relative; - margin: 10px auto 30px auto; - width: 290px; -} - -/* User image */ -.lockscreen-image { - border-radius: 50%; - position: absolute; - left: -10px; - top: -25px; - background: #ffffff; - padding: 5px; - z-index: 10; -} - -.lockscreen-image > img { - border-radius: 50%; - width: 70px; - height: 70px; -} - -/* Contains the password input and the login button */ -.lockscreen-credentials { - margin-left: 70px; -} - -.lockscreen-credentials .form-control { - border: 0; -} - -.lockscreen-credentials .btn { - background-color: #ffffff; - border: 0; - padding: 0 10px; -} - -.lockscreen-footer { - margin-top: 10px; -} - -/* - * Page: Login & Register - * ---------------------- - */ -.login-logo, -.register-logo { - font-size: 35px; - text-align: center; - margin-bottom: 25px; - font-weight: 300; -} - -.login-logo a, -.register-logo a { - color: #444; -} - -.login-page, -.register-page { - background: #e9ecef; -} - -.login-box, -.register-box { - width: 360px; - margin: 7% auto; -} - -@media (max-width: 576px) { - .login-box, - .register-box { - width: 90%; - margin-top: 20px; - } -} - -.login-box-body, -.register-box-body { - background: #ffffff; - padding: 20px; - border-top: 0; - color: #666; -} - -.login-box-body .form-control-feedback, -.register-box-body .form-control-feedback { - color: #777; -} - -.login-box-msg, -.register-box-msg { - margin: 0; - text-align: center; - padding: 0 20px 20px 20px; -} - -.social-auth-links { - margin: 10px 0; -} - -/* - * Page: 400 and 500 error pages - * ------------------------------ - */ -.error-page { - width: 600px; - margin: 20px auto 0 auto; -} - -@media (max-width: 767.98px) { - .error-page { - width: 100%; - } -} - -.error-page > .headline { - float: left; - font-size: 100px; - font-weight: 300; -} - -@media (max-width: 767.98px) { - .error-page > .headline { - float: none; - text-align: center; - } -} - -.error-page > .error-content { - margin-left: 190px; - display: block; -} - -@media (max-width: 767.98px) { - .error-page > .error-content { - margin-left: 0; - } -} - -.error-page > .error-content > h3 { - font-weight: 300; - font-size: 25px; -} - -@media (max-width: 767.98px) { - .error-page > .error-content > h3 { - text-align: center; - } -} - -/* - * Page: Invoice - * ------------- - */ -.invoice { - position: relative; - background: #ffffff; - border: 1px solid rgba(0, 0, 0, 0.125); -} - -.invoice-title { - margin-top: 0; -} - -/* - * Page: Profile - * ------------- - */ -.profile-user-img { - margin: 0 auto; - width: 100px; - padding: 3px; - border: 3px solid #adb5bd; -} - -.profile-username { - font-size: 21px; - margin-top: 5px; -} - -.post { - border-bottom: 1px solid #adb5bd; - margin-bottom: 15px; - padding-bottom: 15px; - color: #666; -} - -.post:last-of-type { - border-bottom: 0; - margin-bottom: 0; - padding-bottom: 0; -} - -.post .user-block { - margin-bottom: 15px; -} - -/* - * Plugin: Full Calendar - * --------------------- - */ -.fc-button { - background: #f4f4f4; - background-image: none; - color: #444; - border-color: #ddd; - border-bottom-color: #ddd; -} - -.fc-button:hover, .fc-button:active, .fc-button.hover { - background-color: #e9e9e9; -} - -.fc-header-title h2 { - font-size: 15px; - line-height: 1.6em; - color: #666; - margin-left: 10px; -} - -.fc-header-right { - padding-right: 10px; -} - -.fc-header-left { - padding-left: 10px; -} - -.fc-widget-header { - background: #fafafa; -} - -.fc-grid { - width: 100%; - border: 0; -} - -.fc-widget-header:first-of-type, -.fc-widget-content:first-of-type { - border-left: 0; - border-right: 0; -} - -.fc-widget-header:last-of-type, -.fc-widget-content:last-of-type { - border-right: 0; -} - -.fc-toolbar { - padding: 1rem; - margin: 0; -} - -.fc-day-number { - font-size: 20px; - font-weight: 300; - padding-right: 10px; -} - -.fc-color-picker { - list-style: none; - margin: 0; - padding: 0; -} - -.fc-color-picker > li { - float: left; - font-size: 30px; - margin-right: 5px; - line-height: 30px; -} - -.fc-color-picker > li .fa { - transition: transform linear .3s; -} - -.fc-color-picker > li .fa:hover { - -ms-transform: rotate(30deg); - transform: rotate(30deg); -} - -#add-new-event { - transition: all linear .3s; -} - -.external-event { - box-shadow: 0 0 1px rgba(0, 0, 0, 0.125), 0 1px 3px rgba(0, 0, 0, 0.2); - padding: 5px 10px; - font-weight: bold; - margin-bottom: 4px; - border-radius: 0.25rem; - cursor: move; -} - -.external-event:hover { - box-shadow: inset 0 0 90px rgba(0, 0, 0, 0.2); -} - -/* - * Plugin: Select2 - * --------------- - */ -.select2-container--default.select2-container--focus, .select2-container--default:focus, .select2-container--default:active, -.select2-selection.select2-container--focus, -.select2-selection:focus, -.select2-selection:active { - outline: none; -} - -.select2-container--default .select2-selection--single, -.select2-selection .select2-selection--single { - border: 1px solid #d2d6de; - padding: 6px 12px; - height: 34px; -} - -.select2-container--default.select2-container--open { - border-color: #007bff; -} - -.select2-dropdown { - border: 1px solid #d2d6de; -} - -.select2-container--default .select2-results__option--highlighted[aria-selected] { - background-color: #007bff; - color: white; -} - -.select2-results__option { - padding: 6px 12px; - user-select: none; - -webkit-user-select: none; -} - -.select2-container .select2-selection--single .select2-selection__rendered { - padding-left: 0; - padding-right: 0; - height: auto; - margin-top: -4px; -} - -.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { - padding-right: 6px; - padding-left: 20px; -} - -.select2-container--default .select2-selection--single .select2-selection__arrow { - height: 28px; - right: 3px; -} - -.select2-container--default .select2-selection--single .select2-selection__arrow b { - margin-top: 0; -} - -.select2-dropdown .select2-search__field, -.select2-search--inline .select2-search__field { - border: 1px solid #d2d6de; -} - -.select2-dropdown .select2-search__field:focus, -.select2-search--inline .select2-search__field:focus { - outline: none; - border: 1px solid #007bff; -} - -.select2-container--default .select2-results__option[aria-disabled=true] { - color: #999; -} - -.select2-container--default .select2-results__option[aria-selected=true] { - background-color: #ddd; -} - -.select2-container--default .select2-results__option[aria-selected=true], .select2-container--default .select2-results__option[aria-selected=true]:hover { - color: #444; -} - -.select2-container--default .select2-selection--multiple { - border: 1px solid #d2d6de; -} - -.select2-container--default .select2-selection--multiple:focus { - border-color: #007bff; -} - -.select2-container--default.select2-container--focus .select2-selection--multiple { - border-color: #d2d6de; -} - -.select2-container--default .select2-selection--multiple .select2-selection__choice { - background-color: #007bff; - border-color: #006fe6; - padding: 1px 10px; - color: #ffffff; -} - -.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { - margin-right: 5px; - color: rgba(255, 255, 255, 0.7); -} - -.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { - color: #ffffff; -} - -.select2-container .select2-selection--single .select2-selection__rendered { - padding-right: 10px; -} - -/* - * General: Miscellaneous - * ---------------------- - */ -a.text-muted:hover { - color: #007bff !important; -} - -.border-transparent { - border-color: transparent !important; -} - -.description-block { - display: block; - margin: 10px 0; - text-align: center; -} - -.description-block.margin-bottom { - margin-bottom: 25px; -} - -.description-block > .description-header { - margin: 0; - padding: 0; - font-weight: 600; - font-size: 16px; -} - -.description-block > .description-text { - text-transform: uppercase; -} - -.bg-primary, .label-primary, -.bg-primary a, -.label-primary a { - color: #ffffff !important; -} - -.bg-secondary, -.bg-secondary a { - color: #ffffff !important; -} - -.bg-success, .alert-success, .label-success, -.bg-success a, -.alert-success a, -.label-success a { - color: #ffffff !important; -} - -.bg-info, .alert-info, .label-info, -.bg-info a, -.alert-info a, -.label-info a { - color: #ffffff !important; -} - -.bg-warning, .alert-warning, .label-warning, -.bg-warning a, -.alert-warning a, -.label-warning a { - color: #1F2D3D !important; -} - -.bg-danger, .alert-danger, -.alert-error, .label-danger, -.bg-danger a, -.alert-danger a, -.alert-error a, -.label-danger a { - color: #ffffff !important; -} - -.bg-light, -.bg-light a { - color: #1F2D3D !important; -} - -.bg-dark, -.bg-dark a { - color: #ffffff !important; -} - -.bg-gray { - color: #000; - background-color: #adb5bd; -} - -.bg-gray-light { - background-color: #f2f4f5; - color: #1F2D3D !important; -} - -.bg-black { - background-color: #000; - color: #ffffff !important; -} - -.bg-white { - background-color: #ffffff; - color: #1F2D3D !important; -} - -[class^="bg-"].disabled { - opacity: .65; -} - -.link-muted { - color: #5d6974; -} - -.link-muted:hover, .link-muted:focus { - color: #464f58; -} - -.link-black { - color: #666; -} - -.link-black:hover, .link-black:focus { - color: #999; -} - -.hide { - display: none !important; -} - -.no-border { - border: 0 !important; -} - -.no-shadow { - box-shadow: none !important; -} - -.list-unstyled, .chart-legend, .contacts-list, .users-list, .mailbox-attachments { - list-style: none; - margin: 0; - padding: 0; -} - -.list-group-unbordered > .list-group-item { - border-left: 0; - border-right: 0; - border-radius: 0; - padding-left: 0; - padding-right: 0; -} - -.flat { - border-radius: 0 !important; -} - -.jqstooltip { - padding: 5px !important; - width: auto !important; - height: auto !important; -} - -.bg-primary-gradient { - background: #007bff; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #007bff), color-stop(1, #3395ff)); - background: -ms-linear-gradient(bottom, #007bff, #3395ff); - background: -moz-linear-gradient(center bottom, #007bff 0%, #3395ff 100%); - background: -o-linear-gradient(#3395ff, #007bff); - color: #ffffff; -} - -.bg-secondary-gradient { - background: #6c757d; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #6c757d), color-stop(1, #868e96)); - background: -ms-linear-gradient(bottom, #6c757d, #868e96); - background: -moz-linear-gradient(center bottom, #6c757d 0%, #868e96 100%); - background: -o-linear-gradient(#868e96, #6c757d); - color: #ffffff; -} - -.bg-success-gradient { - background: #28a745; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #28a745), color-stop(1, #34ce57)); - background: -ms-linear-gradient(bottom, #28a745, #34ce57); - background: -moz-linear-gradient(center bottom, #28a745 0%, #34ce57 100%); - background: -o-linear-gradient(#34ce57, #28a745); - color: #ffffff; -} - -.bg-info-gradient { - background: #17a2b8; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #17a2b8), color-stop(1, #1fc8e3)); - background: -ms-linear-gradient(bottom, #17a2b8, #1fc8e3); - background: -moz-linear-gradient(center bottom, #17a2b8 0%, #1fc8e3 100%); - background: -o-linear-gradient(#1fc8e3, #17a2b8); - color: #ffffff; -} - -.bg-warning-gradient { - background: #ffc107; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ffc107), color-stop(1, #ffce3a)); - background: -ms-linear-gradient(bottom, #ffc107, #ffce3a); - background: -moz-linear-gradient(center bottom, #ffc107 0%, #ffce3a 100%); - background: -o-linear-gradient(#ffce3a, #ffc107); - color: #1F2D3D; -} - -.bg-danger-gradient { - background: #dc3545; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #dc3545), color-stop(1, #e4606d)); - background: -ms-linear-gradient(bottom, #dc3545, #e4606d); - background: -moz-linear-gradient(center bottom, #dc3545 0%, #e4606d 100%); - background: -o-linear-gradient(#e4606d, #dc3545); - color: #ffffff; -} - -.bg-light-gradient { - background: #f8f9fa; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #f8f9fa), color-stop(1, white)); - background: -ms-linear-gradient(bottom, #f8f9fa, white); - background: -moz-linear-gradient(center bottom, #f8f9fa 0%, white 100%); - background: -o-linear-gradient(white, #f8f9fa); - color: #1F2D3D; -} - -.bg-dark-gradient { - background: #343a40; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #343a40), color-stop(1, #4b545c)); - background: -ms-linear-gradient(bottom, #343a40, #4b545c); - background: -moz-linear-gradient(center bottom, #343a40 0%, #4b545c 100%); - background: -o-linear-gradient(#4b545c, #343a40); - color: #ffffff; -} - -.description-block .description-icon { - font-size: 16px; -} - -.list-header { - font-size: 15px; - padding: 10px 4px; - font-weight: bold; - color: #666; -} - -.list-seperator { - height: 1px; - background: rgba(0, 0, 0, 0.125); - margin: 15px 0 9px 0; -} - -.list-link > a { - padding: 4px; - color: #777; -} - -.list-link > a:hover { - color: #222; -} - -.user-block::after { - display: block; - clear: both; - content: ""; -} - -.user-block img { - width: 40px; - height: 40px; - float: left; -} - -.user-block .username, -.user-block .description, -.user-block .comment { - display: block; - margin-left: 50px; -} - -.user-block .username { - font-size: 16px; - font-weight: 600; -} - -.user-block .description { - color: #999; - font-size: 13px; -} - -.user-block.user-block-sm .username, -.user-block.user-block-sm .description, -.user-block.user-block-sm .comment { - margin-left: 40px; -} - -.user-block.user-block-sm .username { - font-size: 14px; -} - -.img-sm, .card-comments .card-comment img, .user-block.user-block-sm img, -.img-md, -.img-lg { - float: left; -} - -.img-sm, .card-comments .card-comment img, .user-block.user-block-sm img { - width: 30px !important; - height: 30px !important; -} - -.img-sm + .img-push, .card-comments .card-comment img + .img-push, .user-block.user-block-sm img + .img-push { - margin-left: 40px; -} - -.img-md { - width: 60px; - height: 60px; -} - -.img-md + .img-push { - margin-left: 70px; -} - -.img-lg { - width: 100px; - height: 100px; -} - -.img-lg + .img-push { - margin-left: 110px; -} - -.img-bordered { - border: 3px solid #adb5bd; - padding: 3px; -} - -.img-bordered-sm { - border: 2px solid #adb5bd; - padding: 2px; -} - -.img-rounded { - border-radius: 0.25rem; -} - -.img-circle { - border-radius: 50%; -} - -.img-size-64, -.img-size-50, -.img-size-32 { - height: auto; -} - -.img-size-64 { - width: 64px; -} - -.img-size-50 { - width: 50px; -} - -.img-size-32 { - width: 32px; -} - -.size-32, -.size-40, -.size-50 { - display: block; - text-align: center; -} - -.size-32 { - width: 32px; - height: 32px; - line-height: 32px; -} - -.size-40 { - width: 40px; - height: 40px; - line-height: 40px; -} - -.size-50 { - width: 50px; - height: 50px; - line-height: 50px; -} - -.attachment-block { - border: 1px solid rgba(0, 0, 0, 0.125); - padding: 5px; - margin-bottom: 10px; - background: #f7f7f7; -} - -.attachment-block .attachment-img { - max-width: 100px; - max-height: 100px; - height: auto; - float: left; -} - -.attachment-block .attachment-pushed { - margin-left: 110px; -} - -.attachment-block .attachment-heading { - margin: 0; -} - -.attachment-block .attachment-text { - color: #555; -} - -.connectedSortable { - min-height: 100px; -} - -.ui-helper-hidden-accessible { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} - -.sort-highlight { - background: #f4f4f4; - border: 1px dashed #ddd; - margin-bottom: 10px; -} - -.chart { - position: relative; - overflow: hidden; -} - -.flex-1 { - flex: 1; -} - -/* - * Misc: print - * ----------- - */ -@media print { - .no-print, .main-sidebar, - .main-header, - .content-header { - display: none !important; - } - .content-wrapper, - .main-footer { - margin-left: 0 !important; - min-height: 0 !important; - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - transform: translate(0, 0); - } - .layout-fixed .content-wrapper { - padding-top: 0 !important; - } - .invoice { - width: 100%; - border: 0; - margin: 0; - padding: 0; - } - .invoice-col { - float: left; - width: 33.3333333%; - } - .table-responsive { - overflow: auto; - } - .table-responsive > .table tr th, - .table-responsive > .table tr td { - white-space: normal !important; - } -} - -.text-bold, .text-bold.table td, .text-bold.table th { - font-weight: 700; -} - -.text-sm { - font-size: 0.875rem; -} - -.text-xs { - font-size: 1rem; -} - -.text-lg { - font-size: 1.25rem; -} - -.text-xl { - font-size: 2rem; -} - -.elevation-0 { - box-shadow: none; -} - -.elevation-1, .sidebar-dark-primary .nav-sidebar > .nav-item > .nav-link.active, .sidebar-light-primary .nav-sidebar > .nav-item > .nav-link.active, .sidebar-dark-secondary .nav-sidebar > .nav-item > .nav-link.active, .sidebar-light-secondary .nav-sidebar > .nav-item > .nav-link.active, .sidebar-dark-success .nav-sidebar > .nav-item > .nav-link.active, .sidebar-light-success .nav-sidebar > .nav-item > .nav-link.active, .sidebar-dark-info .nav-sidebar > .nav-item > .nav-link.active, .sidebar-light-info .nav-sidebar > .nav-item > .nav-link.active, .sidebar-dark-warning .nav-sidebar > .nav-item > .nav-link.active, .sidebar-light-warning .nav-sidebar > .nav-item > .nav-link.active, .sidebar-dark-danger .nav-sidebar > .nav-item > .nav-link.active, .sidebar-light-danger .nav-sidebar > .nav-item > .nav-link.active, .sidebar-dark-light .nav-sidebar > .nav-item > .nav-link.active, .sidebar-light-light .nav-sidebar > .nav-item > .nav-link.active, .sidebar-dark-dark .nav-sidebar > .nav-item > .nav-link.active, .sidebar-light-dark .nav-sidebar > .nav-item > .nav-link.active, .callout { - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); -} - -.elevation-2 { - box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); -} - -.elevation-3 { - box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); -} - -.elevation-4 { - box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22); -} - -.elevation-5 { - box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22); -} - -/*# sourceMappingURL=adminlte.css.map */ \ No newline at end of file diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/dist/css/adminlte.css.map" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/dist/css/adminlte.css.map" deleted file mode 100644 index cdbd244f..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/dist/css/adminlte.css.map" +++ /dev/null @@ -1,252 +0,0 @@ -{ - "version": 3, - "file": "adminlte.css", - "sources": [ - "../../build/scss/AdminLTE.scss", - "../../node_modules/bootstrap/scss/_functions.scss", - "../../build/scss/_bootstrap-variables.scss", - "../../node_modules/bootstrap/scss/bootstrap.scss", - "../../node_modules/bootstrap/scss/_variables.scss", - "../../node_modules/bootstrap/scss/_mixins.scss", - "../../node_modules/bootstrap/scss/mixins/_breakpoints.scss", - "../../node_modules/bootstrap/scss/mixins/_hover.scss", - "../../node_modules/bootstrap/scss/mixins/_image.scss", - "../../node_modules/bootstrap/scss/mixins/_badge.scss", - "../../node_modules/bootstrap/scss/mixins/_resize.scss", - "../../node_modules/bootstrap/scss/mixins/_screen-reader.scss", - "../../node_modules/bootstrap/scss/mixins/_size.scss", - "../../node_modules/bootstrap/scss/mixins/_reset-text.scss", - "../../node_modules/bootstrap/scss/mixins/_text-emphasis.scss", - "../../node_modules/bootstrap/scss/mixins/_text-hide.scss", - "../../node_modules/bootstrap/scss/mixins/_text-truncate.scss", - "../../node_modules/bootstrap/scss/mixins/_visibility.scss", - "../../node_modules/bootstrap/scss/mixins/_alert.scss", - "../../node_modules/bootstrap/scss/mixins/_buttons.scss", - "../../node_modules/bootstrap/scss/mixins/_caret.scss", - "../../node_modules/bootstrap/scss/mixins/_pagination.scss", - "../../node_modules/bootstrap/scss/mixins/_lists.scss", - "../../node_modules/bootstrap/scss/mixins/_list-group.scss", - "../../node_modules/bootstrap/scss/mixins/_nav-divider.scss", - "../../node_modules/bootstrap/scss/mixins/_forms.scss", - "../../node_modules/bootstrap/scss/mixins/_table-row.scss", - "../../node_modules/bootstrap/scss/mixins/_background-variant.scss", - "../../node_modules/bootstrap/scss/mixins/_border-radius.scss", - "../../node_modules/bootstrap/scss/mixins/_box-shadow.scss", - "../../node_modules/bootstrap/scss/mixins/_gradients.scss", - "../../node_modules/bootstrap/scss/mixins/_transition.scss", - "../../node_modules/bootstrap/scss/mixins/_clearfix.scss", - "../../node_modules/bootstrap/scss/mixins/_grid-framework.scss", - "../../node_modules/bootstrap/scss/mixins/_grid.scss", - "../../node_modules/bootstrap/scss/mixins/_float.scss", - "../../node_modules/bootstrap/scss/_root.scss", - "../../node_modules/bootstrap/scss/_reboot.scss", - "../../node_modules/bootstrap/scss/_type.scss", - "../../node_modules/bootstrap/scss/_images.scss", - "../../node_modules/bootstrap/scss/_code.scss", - "../../node_modules/bootstrap/scss/_grid.scss", - "../../node_modules/bootstrap/scss/_tables.scss", - "../../node_modules/bootstrap/scss/_forms.scss", - "../../node_modules/bootstrap/scss/_buttons.scss", - "../../node_modules/bootstrap/scss/_transitions.scss", - "../../node_modules/bootstrap/scss/_dropdown.scss", - "../../node_modules/bootstrap/scss/_button-group.scss", - "../../node_modules/bootstrap/scss/_input-group.scss", - "../../node_modules/bootstrap/scss/_custom-forms.scss", - "../../node_modules/bootstrap/scss/_nav.scss", - "../../node_modules/bootstrap/scss/_navbar.scss", - "../../node_modules/bootstrap/scss/_card.scss", - "../../node_modules/bootstrap/scss/_breadcrumb.scss", - "../../node_modules/bootstrap/scss/_pagination.scss", - "../../node_modules/bootstrap/scss/_badge.scss", - "../../node_modules/bootstrap/scss/_jumbotron.scss", - "../../node_modules/bootstrap/scss/_alert.scss", - "../../node_modules/bootstrap/scss/_progress.scss", - "../../node_modules/bootstrap/scss/_media.scss", - "../../node_modules/bootstrap/scss/_list-group.scss", - "../../node_modules/bootstrap/scss/_close.scss", - "../../node_modules/bootstrap/scss/_modal.scss", - "../../node_modules/bootstrap/scss/_tooltip.scss", - "../../node_modules/bootstrap/scss/_popover.scss", - "../../node_modules/bootstrap/scss/_carousel.scss", - "../../node_modules/bootstrap/scss/_utilities.scss", - "../../node_modules/bootstrap/scss/utilities/_align.scss", - "../../node_modules/bootstrap/scss/utilities/_background.scss", - "../../node_modules/bootstrap/scss/utilities/_borders.scss", - "../../node_modules/bootstrap/scss/utilities/_clearfix.scss", - "../../node_modules/bootstrap/scss/utilities/_display.scss", - "../../node_modules/bootstrap/scss/utilities/_embed.scss", - "../../node_modules/bootstrap/scss/utilities/_flex.scss", - "../../node_modules/bootstrap/scss/utilities/_float.scss", - "../../node_modules/bootstrap/scss/utilities/_position.scss", - "../../node_modules/bootstrap/scss/utilities/_screenreaders.scss", - "../../node_modules/bootstrap/scss/utilities/_shadows.scss", - "../../node_modules/bootstrap/scss/utilities/_sizing.scss", - "../../node_modules/bootstrap/scss/utilities/_spacing.scss", - "../../node_modules/bootstrap/scss/utilities/_text.scss", - "../../node_modules/bootstrap/scss/utilities/_visibility.scss", - "../../node_modules/bootstrap/scss/_print.scss", - "../../build/scss/_variables.scss", - "../../build/scss/_mixins.scss", - "../../build/scss/_layout.scss", - "../../build/scss/_main-header.scss", - "../../build/scss/_brand.scss", - "../../build/scss/_main-sidebar.scss", - "../../build/scss/_sidebar-mini.scss", - "../../build/scss/_control-sidebar.scss", - "../../build/scss/_dropdown.scss", - "../../build/scss/_forms.scss", - "../../build/scss/_progress-bars.scss", - "../../build/scss/_small-box.scss", - "../../build/scss/_cards.scss", - "../../build/scss/_info-box.scss", - "../../build/scss/_timeline.scss", - "../../build/scss/_buttons.scss", - "../../build/scss/_callout.scss", - "../../build/scss/_alerts.scss", - "../../build/scss/_navs.scss", - "../../build/scss/_products.scss", - "../../build/scss/_table.scss", - "../../build/scss/_labels.scss", - "../../build/scss/_direct-chat.scss", - "../../build/scss/_users-list.scss", - "../../build/scss/_carousel.scss", - "../../build/scss/_social-widgets.scss", - "../../build/scss/_mailbox.scss", - "../../build/scss/_lockscreen.scss", - "../../build/scss/_login_and_register.scss", - "../../build/scss/_404_500_errors.scss", - "../../build/scss/_invoice.scss", - "../../build/scss/_profile.scss", - "../../build/scss/_fullcalendar.scss", - "../../build/scss/_select2.scss", - "../../build/scss/_miscellaneous.scss", - "../../build/scss/_print.scss", - "../../build/scss/_text.scss", - "../../build/scss/_elevation.scss" - ], - "sourcesContent": [ - "/*!\n * AdminLTE v3.0.0-alpha\n * Author: Abdullah Almsaeed\n *\t Website: AdminLTE.io \n * License: Open source - MIT \n */\n// Bootstrap\n// ---------------------------------------------------\n@import \"../../node_modules/bootstrap/scss/functions\";\n@import \"bootstrap-variables\";\n@import \"../../node_modules/bootstrap/scss/bootstrap\";\n// VARIABLES AND MIXINS\n// ---------------------------------------------------\n@import \"variables\";\n@import \"mixins\";\n// Core\n// ---------------------------------------------------\n@import \"layout\";\n// COMPONENTS\n// ---------------------------------------------------\n@import \"main-header\";\n@import \"brand\";\n@import \"main-sidebar\";\n@import \"sidebar-mini\";\n@import \"control-sidebar\";\n@import \"dropdown\";\n@import \"forms\";\n@import \"progress-bars\";\n@import \"small-box\";\n@import \"cards\";\n@import \"info-box\";\n@import \"timeline\";\n@import \"buttons\";\n@import \"callout\";\n@import \"alerts\";\n@import \"navs\";\n@import \"products\";\n@import \"table\";\n@import \"labels\";\n@import \"direct-chat\";\n@import \"users-list\";\n@import \"carousel\";\n@import \"social-widgets\";\n// PAGES\n// ---------------------------------------------------\n@import \"mailbox\";\n@import \"lockscreen\";\n@import \"login_and_register\";\n@import \"404_500_errors\";\n@import \"invoice\";\n@import \"profile\";\n// Plugins\n// ---------------------------------------------------\n@import \"fullcalendar\";\n@import \"select2\";\n// Miscellaneous\n// ---------------------------------------------------\n@import \"miscellaneous\";\n@import \"print\";\n@import \"text\";\n@import \"elevation\";\n", - "// Bootstrap functions\n//\n// Utility mixins and functions for evalutating source code across our variables, maps, and mixins.\n\n// Ascending\n// Used to evaluate Sass maps like our grid breakpoints.\n@mixin _assert-ascending($map, $map-name) {\n $prev-key: null;\n $prev-num: null;\n @each $key, $num in $map {\n @if $prev-num == null {\n // Do nothing\n } @else if not comparable($prev-num, $num) {\n @warn \"Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n } @else if $prev-num >= $num {\n @warn \"Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n }\n $prev-key: $key;\n $prev-num: $num;\n }\n}\n\n// Starts at zero\n// Another grid mixin that ensures the min-width of the lowest breakpoint starts at 0.\n@mixin _assert-starts-at-zero($map) {\n $values: map-values($map);\n $first-value: nth($values, 1);\n @if $first-value != 0 {\n @warn \"First breakpoint in `$grid-breakpoints` must start at 0, but starts at #{$first-value}.\";\n }\n}\n\n// Replace `$search` with `$replace` in `$string`\n// Used on our SVG icon backgrounds for custom forms.\n//\n// @author Hugo Giraudel\n// @param {String} $string - Initial string\n// @param {String} $search - Substring to replace\n// @param {String} $replace ('') - New value\n// @return {String} - Updated string\n@function str-replace($string, $search, $replace: \"\") {\n $index: str-index($string, $search);\n\n @if $index {\n @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n }\n\n @return $string;\n}\n\n// Color contrast\n@function color-yiq($color) {\n $r: red($color);\n $g: green($color);\n $b: blue($color);\n\n $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;\n\n @if ($yiq >= $yiq-contrasted-threshold) {\n @return $yiq-text-dark;\n } @else {\n @return $yiq-text-light;\n }\n}\n\n// Retrieve color Sass maps\n@function color($key: \"blue\") {\n @return map-get($colors, $key);\n}\n\n@function theme-color($key: \"primary\") {\n @return map-get($theme-colors, $key);\n}\n\n@function gray($key: \"100\") {\n @return map-get($grays, $key);\n}\n\n// Request a theme color level\n@function theme-color-level($color-name: \"primary\", $level: 0) {\n $color: theme-color($color-name);\n $color-base: if($level > 0, $black, $white);\n $level: abs($level);\n\n @return mix($color-base, $color, $level * $theme-color-interval);\n}\n", - "// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n\n//\n// Color system\n//\n\n// stylelint-disable\n$white: #ffffff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge((\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n), $grays);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge((\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n), $colors);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge((\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n), $theme-colors);\n// stylelint-enable\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: #1F2D3D !default;\n$yiq-text-light: $white !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: true !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// stylelint-disable\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map-merge((\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n), $spacers);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n$sizes: map-merge((\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%\n), $sizes);\n// stylelint-enable\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: none !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 15px !default;\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n\n// Fonts\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: \"Source Sans Pro\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: ($font-size-base * 1.25) !default;\n$font-size-sm: ($font-size-base * .875) !default;\n\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: inherit !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: ($font-size-base * 1.25) !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-bg: transparent !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $gray-300 !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-bg: $gray-900 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($gray-900, 7.5%) !default;\n$table-dark-color: $body-bg !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-line-height: $input-btn-line-height !default;\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 0 0 rgba($black, 0) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default;\n\n$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-control-gutter: 1.5rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $gray-300 !default;\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-control-indicator-disabled-bg: $gray-200 !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n\n$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-select-padding-y: .375rem !default;\n$custom-select-padding-x: .75rem !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-line-height: $input-btn-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $white !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-select-border-width: $input-btn-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-box-shadow: inset 0 1px 2px rgba($black, .075), 0 0 5px rgba($custom-select-focus-border-color, .5) !default;\n\n$custom-select-font-size-sm: 75% !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-font-size-lg: 125% !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$custom-file-padding-y: $input-btn-padding-y !default;\n$custom-file-padding-x: $input-btn-padding-x !default;\n$custom-file-line-height: $input-btn-line-height !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-btn-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n// Navbar\n\n$navbar-padding-y: ($spacer / 2) !default;\n$navbar-padding-x: ($spacer / 2) !default;\n\n$navbar-nav-link-padding-x: 1rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .75) !default;\n$navbar-dark-hover-color: rgba($white, 1) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: 0 !default; //$border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: ($grid-gutter-width / 2) !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $gray-200 !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: 1rem !default;\n\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: ($font-size-base * .75) !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n// List group\n\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: \"/\" !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$carousel-control-next-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$carousel-transition: transform .6s ease !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Printing\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n", - "/*!\n * Bootstrap v4.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"utilities\";\n@import \"print\";\n", - "// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n\n//\n// Color system\n//\n\n// stylelint-disable\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge((\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n), $grays);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge((\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n), $colors);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge((\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n), $theme-colors);\n// stylelint-enable\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// stylelint-disable\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map-merge((\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n), $spacers);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n$sizes: map-merge((\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n), $sizes);\n// stylelint-enable\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n\n// Fonts\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: ($font-size-base * 1.25) !default;\n$font-size-sm: ($font-size-base * .875) !default;\n\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: inherit !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: ($font-size-base * 1.25) !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-bg: transparent !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $gray-300 !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-bg: $gray-900 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($gray-900, 7.5%) !default;\n$table-dark-color: $body-bg !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-line-height: $input-btn-line-height !default;\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default;\n\n$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-control-gutter: 1.5rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $gray-300 !default;\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-control-indicator-disabled-bg: $gray-200 !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n\n$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-select-padding-y: .375rem !default;\n$custom-select-padding-x: .75rem !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-line-height: $input-btn-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-select-border-width: $input-btn-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-box-shadow: inset 0 1px 2px rgba($black, .075), 0 0 5px rgba($custom-select-focus-border-color, .5) !default;\n\n$custom-select-font-size-sm: 75% !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-font-size-lg: 125% !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$custom-file-padding-y: $input-btn-padding-y !default;\n$custom-file-padding-x: $input-btn-padding-x !default;\n$custom-file-line-height: $input-btn-line-height !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-btn-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: ($spacer / 2) !default;\n\n// Navbar\n\n$navbar-padding-y: ($spacer / 2) !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: ($grid-gutter-width / 2) !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $gray-200 !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: 1rem !default;\n\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: ($font-size-base * .75) !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n// List group\n\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$carousel-control-next-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$carousel-transition: transform .6s ease !default; // Define transform transition first if using multiple transitons (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Printing\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n", - "// Toggles\n//\n// Used in conjunction with global variables to enable certain theme features.\n\n// Utilities\n@import \"mixins/breakpoints\";\n@import \"mixins/hover\";\n@import \"mixins/image\";\n@import \"mixins/badge\";\n@import \"mixins/resize\";\n@import \"mixins/screen-reader\";\n@import \"mixins/size\";\n@import \"mixins/reset-text\";\n@import \"mixins/text-emphasis\";\n@import \"mixins/text-hide\";\n@import \"mixins/text-truncate\";\n@import \"mixins/visibility\";\n\n// // Components\n@import \"mixins/alert\";\n@import \"mixins/buttons\";\n@import \"mixins/caret\";\n@import \"mixins/pagination\";\n@import \"mixins/lists\";\n@import \"mixins/list-group\";\n@import \"mixins/nav-divider\";\n@import \"mixins/forms\";\n@import \"mixins/table-row\";\n\n// // Skins\n@import \"mixins/background-variant\";\n@import \"mixins/border-radius\";\n@import \"mixins/box-shadow\";\n@import \"mixins/gradients\";\n@import \"mixins/transition\";\n\n// // Layout\n@import \"mixins/clearfix\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n@import \"mixins/float\";\n", - "// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02px, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash infront.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n", - "// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Origally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular psuedo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover {\n &:hover { @content; }\n}\n\n@mixin hover-focus {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n", - "// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n// stylelint-disable indentation, media-query-list-comma-newline-after\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/#feat=css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n}\n", - "@mixin badge-variant($bg) {\n color: color-yiq($bg);\n background-color: $bg;\n\n &[href] {\n @include hover-focus {\n color: color-yiq($bg);\n text-decoration: none;\n background-color: darken($bg, 10%);\n }\n }\n}\n", - "// Resize anything\n\n@mixin resizable($direction) {\n overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`\n resize: $direction; // Options: horizontal, vertical, both\n}\n", - "// Only display content to screen readers\n//\n// See: https://a11yproject.com/posts/how-to-hide-content/\n// See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n@mixin sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n }\n}\n", - "// Sizing shortcuts\n\n@mixin size($width, $height: $width) {\n width: $width;\n height: $height;\n}\n", - "@mixin reset-text {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start; // stylelint-disable-line declaration-block-no-duplicate-properties\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n}\n", - "// stylelint-disable declaration-no-important\n\n// Typography\n\n@mixin text-emphasis-variant($parent, $color) {\n #{$parent} {\n color: $color !important;\n }\n a#{$parent} {\n @include hover-focus {\n color: darken($color, 10%) !important;\n }\n }\n}\n", - "// CSS image replacement\n@mixin text-hide() {\n // stylelint-disable-next-line font-family-no-missing-generic-family-keyword\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n\n @warn \"The `text-hide()` mixin has been deprecated as of v4.1.0. It will be removed entirely in v5.\";\n}\n", - "// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n", - "// stylelint-disable declaration-no-important\n\n// Visibility\n\n@mixin invisible($visibility) {\n visibility: $visibility !important;\n}\n", - "@mixin alert-variant($background, $border, $color) {\n color: $color;\n @include gradient-bg($background);\n border-color: $border;\n\n hr {\n border-top-color: darken($border, 5%);\n }\n\n .alert-link {\n color: darken($color, 10%);\n }\n}\n", - "// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n@mixin button-variant($background, $border, $hover-background: darken($background, 7.5%), $hover-border: darken($border, 10%), $active-background: darken($background, 10%), $active-border: darken($border, 12.5%)) {\n color: color-yiq($background);\n @include gradient-bg($background);\n border-color: $border;\n @include box-shadow($btn-box-shadow);\n\n @include hover {\n color: color-yiq($hover-background);\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n }\n\n &:focus,\n &.focus {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: $btn-box-shadow, 0 0 0 $btn-focus-width rgba($border, .5);\n } @else {\n box-shadow: 0 0 0 $btn-focus-width rgba($border, .5);\n }\n }\n\n // Disabled comes first so active can properly restyle\n &.disabled,\n &:disabled {\n color: color-yiq($background);\n background-color: $background;\n border-color: $border;\n }\n\n &:not(:disabled):not(.disabled):active,\n &:not(:disabled):not(.disabled).active,\n .show > &.dropdown-toggle {\n color: color-yiq($active-background);\n background-color: $active-background;\n @if $enable-gradients {\n background-image: none; // Remove the gradient for the pressed/active state\n }\n border-color: $active-border;\n\n &:focus {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($border, .5);\n } @else {\n box-shadow: 0 0 0 $btn-focus-width rgba($border, .5);\n }\n }\n }\n}\n\n@mixin button-outline-variant($color, $color-hover: color-yiq($color), $active-background: $color, $active-border: $color) {\n color: $color;\n background-color: transparent;\n background-image: none;\n border-color: $color;\n\n &:hover {\n color: $color-hover;\n background-color: $active-background;\n border-color: $active-border;\n }\n\n &:focus,\n &.focus {\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n\n &.disabled,\n &:disabled {\n color: $color;\n background-color: transparent;\n }\n\n &:not(:disabled):not(.disabled):active,\n &:not(:disabled):not(.disabled).active,\n .show > &.dropdown-toggle {\n color: color-yiq($active-background);\n background-color: $active-background;\n border-color: $active-border;\n\n &:focus {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows and $btn-active-box-shadow != none {\n box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5);\n } @else {\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n }\n }\n}\n\n// Button sizes\n@mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {\n padding: $padding-y $padding-x;\n font-size: $font-size;\n line-height: $line-height;\n // Manually declare to provide an override to the browser default\n @if $enable-rounded {\n border-radius: $border-radius;\n } @else {\n border-radius: 0;\n }\n}\n", - "@mixin caret-down {\n border-top: $caret-width solid;\n border-right: $caret-width solid transparent;\n border-bottom: 0;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-up {\n border-top: 0;\n border-right: $caret-width solid transparent;\n border-bottom: $caret-width solid;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-right {\n border-top: $caret-width solid transparent;\n border-right: 0;\n border-bottom: $caret-width solid transparent;\n border-left: $caret-width solid;\n}\n\n@mixin caret-left {\n border-top: $caret-width solid transparent;\n border-right: $caret-width solid;\n border-bottom: $caret-width solid transparent;\n}\n\n@mixin caret($direction: down) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: $caret-width * .85;\n vertical-align: $caret-width * .85;\n content: \"\";\n @if $direction == down {\n @include caret-down;\n } @else if $direction == up {\n @include caret-up;\n } @else if $direction == right {\n @include caret-right;\n }\n }\n\n @if $direction == left {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: $caret-width * .85;\n vertical-align: $caret-width * .85;\n content: \"\";\n @include caret-left;\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n", - "// Pagination\n\n@mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {\n .page-link {\n padding: $padding-y $padding-x;\n font-size: $font-size;\n line-height: $line-height;\n }\n\n .page-item {\n &:first-child {\n .page-link {\n @include border-left-radius($border-radius);\n }\n }\n &:last-child {\n .page-link {\n @include border-right-radius($border-radius);\n }\n }\n }\n}\n", - "// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n", - "// List Groups\n\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: $color;\n background-color: $background;\n\n &.list-group-item-action {\n @include hover-focus {\n color: $color;\n background-color: darken($background, 5%);\n }\n\n &.active {\n color: $white;\n background-color: $color;\n border-color: $color;\n }\n }\n }\n}\n", - "// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n@mixin nav-divider($color: $nav-divider-color, $margin-y: $nav-divider-margin-y) {\n height: 0;\n margin: $margin-y 0;\n overflow: hidden;\n border-top: 1px solid $color;\n}\n", - "// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `$input-focus-border-color` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n@mixin form-control-focus() {\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: $input-box-shadow, $input-focus-box-shadow;\n } @else {\n box-shadow: $input-focus-box-shadow;\n }\n }\n}\n\n\n@mixin form-validation-state($state, $color) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n font-size: $form-feedback-font-size;\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: .5rem;\n margin-top: .1rem;\n font-size: .875rem;\n line-height: 1;\n color: $white;\n background-color: rgba($color, .8);\n border-radius: .2rem;\n }\n\n .form-control,\n .custom-select {\n .was-validated &:#{$state},\n &.is-#{$state} {\n border-color: $color;\n\n &:focus {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n }\n\n .form-check-input {\n .was-validated &:#{$state},\n &.is-#{$state} {\n ~ .form-check-label {\n color: $color;\n }\n\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n }\n\n .custom-control-input {\n .was-validated &:#{$state},\n &.is-#{$state} {\n ~ .custom-control-label {\n color: $color;\n\n &::before {\n background-color: lighten($color, 25%);\n }\n }\n\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n\n &:checked {\n ~ .custom-control-label::before {\n @include gradient-bg(lighten($color, 10%));\n }\n }\n\n &:focus {\n ~ .custom-control-label::before {\n box-shadow: 0 0 0 1px $body-bg, 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n }\n\n // custom file\n .custom-file-input {\n .was-validated &:#{$state},\n &.is-#{$state} {\n ~ .custom-file-label {\n border-color: $color;\n\n &::before { border-color: inherit; }\n }\n\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n\n &:focus {\n ~ .custom-file-label {\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n }\n}\n", - "// Tables\n\n@mixin table-row-variant($state, $background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n", - "// stylelint-disable declaration-no-important\n\n// Contextual backgrounds\n\n@mixin bg-variant($parent, $color) {\n #{$parent} {\n background-color: $color !important;\n }\n a#{$parent},\n button#{$parent} {\n @include hover-focus {\n background-color: darken($color, 10%) !important;\n }\n }\n}\n\n@mixin bg-gradient-variant($parent, $color) {\n #{$parent} {\n background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;\n }\n}\n", - "// Single side border-radius\n\n@mixin border-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-radius: $radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n", - "@mixin box-shadow($shadow...) {\n @if $enable-shadows {\n box-shadow: $shadow;\n }\n}\n", - "// Gradients\n\n@mixin gradient-bg($color) {\n @if $enable-gradients {\n background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x;\n } @else {\n background-color: $color;\n }\n}\n\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n background-repeat: repeat-x;\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n background-repeat: repeat-x;\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n background-repeat: repeat-x;\n}\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n", - "@mixin transition($transition...) {\n @if $enable-transitions {\n @if length($transition) == 0 {\n transition: $transition-base;\n } @else {\n transition: $transition;\n }\n }\n\n @media screen and (prefers-reduced-motion: reduce) {\n transition: none;\n }\n}\n", - "@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n", - "// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n min-height: 1px; // Prevent columns from collapsing when empty\n padding-right: ($gutter / 2);\n padding-left: ($gutter / 2);\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col#{$infix}-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none; // Reset earlier grid tiers\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n", - "/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container() {\n width: 100%;\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row() {\n display: flex;\n flex-wrap: wrap;\n margin-right: ($grid-gutter-width / -2);\n margin-left: ($grid-gutter-width / -2);\n}\n\n@mixin make-col-ready() {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n min-height: 1px; // Prevent collapsing\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n", - "// stylelint-disable declaration-no-important\n\n@mixin float-left {\n float: left !important;\n}\n@mixin float-right {\n float: right !important;\n}\n@mixin float-none {\n float: none !important;\n}\n", - ":root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n", - "// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Setting @viewport causes scrollbars to overlap content in IE11 and Edge, so\n// we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n// 6. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -ms-text-size-adjust: 100%; // 4\n -ms-overflow-style: scrollbar; // 5\n -webkit-tap-highlight-color: rgba($black, 0); // 6\n}\n\n// IE10+ doesn't honor `` in some cases.\n@at-root {\n @-ms-viewport {\n width: device-width;\n }\n}\n\n// stylelint-disable selector-list-comma-newline-after\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use the\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n font-size: $font-size-base;\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Remove the bottom border in Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Duplicate behavior to the data-* attribute for our tooltip plugin\n\nabbr[title],\nabbr[data-original-title] { // 4\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 1\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic; // Add the correct font style in Android 4.3-\n}\n\n// stylelint-disable font-weight-notation\nb,\nstrong {\n font-weight: bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n// stylelint-enable font-weight-notation\n\nsmall {\n font-size: 80%; // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n -webkit-text-decoration-skip: objects; // Remove gaps in links underline in iOS 8+ and Safari 8+.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\n// stylelint-disable font-family-no-duplicate-names\npre,\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; // Correct the inheritance and scaling of font size in all browsers.\n font-size: 1em; // Correct the odd `em` font sizing in all browsers.\n}\n// stylelint-enable font-family-no-duplicate-names\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // We have @viewport set which causes scrollbars to overlap content in IE11 and Edge, so\n // we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg:not(:root) {\n overflow: hidden; // Hide the overflow in IE\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\nhtml [type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n", - "// stylelint-disable declaration-no-important, selector-list-comma-newline-after\n\n//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1, .h1 { font-size: $h1-font-size; }\nh2, .h2 { font-size: $h2-font-size; }\nh3, .h3 { font-size: $h3-font-size; }\nh4, .h4 { font-size: $h4-font-size; }\nh5, .h5 { font-size: $h5-font-size; }\nh6, .h6 { font-size: $h6-font-size; }\n\n.lead {\n font-size: $lead-font-size;\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n font-size: $display1-size;\n font-weight: $display1-weight;\n line-height: $display-line-height;\n}\n.display-2 {\n font-size: $display2-size;\n font-weight: $display2-weight;\n line-height: $display-line-height;\n}\n.display-3 {\n font-size: $display3-size;\n font-weight: $display3-weight;\n line-height: $display-line-height;\n}\n.display-4 {\n font-size: $display4-size;\n font-weight: $display4-weight;\n line-height: $display-line-height;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n margin-top: $hr-margin-y;\n margin-bottom: $hr-margin-y;\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n font-size: $small-font-size;\n font-weight: $font-weight-normal;\n}\n\nmark,\n.mark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled;\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $spacer;\n font-size: $blockquote-font-size;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%; // back to default font-size\n color: $blockquote-small-color;\n\n &::before {\n content: \"\\2014 \\00A0\"; // em dash, nbsp\n }\n}\n", - "// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all ``s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid;\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid;\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: ($spacer / 2);\n line-height: 1;\n}\n\n.figure-caption {\n font-size: $figure-caption-font-size;\n color: $figure-caption-color;\n}\n", - "// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: $font-family-monospace;\n}\n\n// Inline code\ncode {\n font-size: $code-font-size;\n color: $code-color;\n word-break: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n font-size: $kbd-font-size;\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n @include box-shadow($kbd-box-shadow);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: $nested-kbd-font-weight;\n @include box-shadow(none);\n }\n}\n\n// Blocks of code\npre {\n display: block;\n font-size: $code-font-size;\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n", - "// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but with 100% width for\n// fluid, full width layouts.\n\n@if $enable-grid-classes {\n .container-fluid {\n @include make-container();\n }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n", - "//\n// Basic Bootstrap table\n//\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: $spacer;\n background-color: $table-bg; // Reset for nesting within parents with `background-color`.\n\n th,\n td {\n padding: $table-cell-padding;\n vertical-align: top;\n border-top: $table-border-width solid $table-border-color;\n }\n\n thead th {\n vertical-align: bottom;\n border-bottom: (2 * $table-border-width) solid $table-border-color;\n }\n\n tbody + tbody {\n border-top: (2 * $table-border-width) solid $table-border-color;\n }\n\n .table {\n background-color: $body-bg;\n }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n th,\n td {\n padding: $table-cell-padding-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n\n.table-bordered {\n border: $table-border-width solid $table-border-color;\n\n th,\n td {\n border: $table-border-width solid $table-border-color;\n }\n\n thead {\n th,\n td {\n border-bottom-width: (2 * $table-border-width);\n }\n }\n}\n\n.table-borderless {\n th,\n td,\n thead th,\n tbody + tbody {\n border: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-accent-bg;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n tbody tr {\n @include hover {\n background-color: $table-hover-bg;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n@each $color, $value in $theme-colors {\n @include table-row-variant($color, theme-color-level($color, -9));\n}\n\n@include table-row-variant(active, $table-active-bg);\n\n\n// Dark styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.table {\n .thead-dark {\n th {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n border-color: $table-dark-border-color;\n }\n }\n\n .thead-light {\n th {\n color: $table-head-color;\n background-color: $table-head-bg;\n border-color: $table-border-color;\n }\n }\n}\n\n.table-dark {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n\n th,\n td,\n thead th {\n border-color: $table-dark-border-color;\n }\n\n &.table-bordered {\n border: 0;\n }\n\n &.table-striped {\n tbody tr:nth-of-type(odd) {\n background-color: $table-dark-accent-bg;\n }\n }\n\n &.table-hover {\n tbody tr {\n @include hover {\n background-color: $table-dark-hover-bg;\n }\n }\n }\n}\n\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n.table-responsive {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar; // See https://github.com/twbs/bootstrap/pull/10057\n\n // Prevent double border on horizontal scroll due to use of `display: block;`\n > .table-bordered {\n border: 0;\n }\n }\n }\n }\n}\n", - "// stylelint-disable selector-no-qualifying-type\n\n//\n// Textual form controls\n//\n\n.form-control {\n display: block;\n width: 100%;\n padding: $input-padding-y $input-padding-x;\n font-size: $font-size-base;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on `s in CSS.\n @if $enable-rounded {\n // Manually use the if/else instead of the mixin to account for iOS override\n border-radius: $input-border-radius;\n } @else {\n // Otherwise undo the iOS default\n border-radius: 0;\n }\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n // Unstyle the caret on ` receives focus\n // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n // match the appearance of the native widget.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: calc(#{$input-padding-y} + #{$input-border-width});\n padding-bottom: calc(#{$input-padding-y} + #{$input-border-width});\n margin-bottom: 0; // Override the `
- - - - - - - - - - - - - - - - - diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/modal-test.html" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/modal-test.html" deleted file mode 100644 index 2005ce47..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/modal-test.html" +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - Modal Test - - - - - - - - - - - -
-
- -
-
- -
-
- - - - -
-
- - - - - - - diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/picture.html" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/picture.html" deleted file mode 100644 index c059dea8..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/picture.html" +++ /dev/null @@ -1,273 +0,0 @@ - - - - - - 图片管理页 - - - - - - - - - - - - - - - - - -
- - - - - - - - - -
- -
-
-
-
-

图片管理页

-
-
- -
-
-
-
- - -
-
-
-
-
-
- - - -
- -
-
-
-
-
-
-
- -
- - - -
-
- -
- Copyright © 2019 13blog.site. - All rights reserved. -
- Version 2.0 -
-
- - - - -
- - - - - - - - - - - - - - - - - - - - diff --git "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/plugins/ajaxupload/ajaxupload.js" "b/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/plugins/ajaxupload/ajaxupload.js" deleted file mode 100644 index c2e910bc..00000000 --- "a/SpringBoot\345\211\215\345\220\216\347\253\257\345\210\206\347\246\273\345\256\236\346\210\230\351\241\271\347\233\256\346\272\220\347\240\201/spring-boot-project-front-end&back-end/src/main/resources/static/plugins/ajaxupload/ajaxupload.js" +++ /dev/null @@ -1,674 +0,0 @@ -/** - * AJAX Upload ( http://valums.com/ajax-upload/ ) - * Copyright (c) Andris Valums - * Licensed under the MIT license ( http://valums.com/mit-license/ ) - * Thanks to Gary Haran, David Mark, Corey Burns and others for contributions - */ -(function () { - /* global window */ - /* jslint browser: true, devel: true, undef: true, nomen: true, bitwise: true, regexp: true, newcap: true, immed: true */ - - /** - * Wrapper for FireBug's console.log - */ - function log(){ - if (typeof(console) != 'undefined' && typeof(console.log) == 'function'){ - Array.prototype.unshift.call(arguments, '[Ajax Upload]'); - console.log( Array.prototype.join.call(arguments, ' ')); - } - } - - /** - * Attaches event to a dom element. - * @param {Element} el - * @param type event name - * @param fn callback This refers to the passed element - */ - function addEvent(el, type, fn){ - if (el.addEventListener) { - el.addEventListener(type, fn, false); - } else if (el.attachEvent) { - el.attachEvent('on' + type, function(){ - fn.call(el); - }); - } else { - throw new Error('not supported or DOM not loaded'); - } - } - - /** - * Attaches resize event to a window, limiting - * number of event fired. Fires only when encounteres - * delay of 100 after series of events. - * - * Some browsers fire event multiple times when resizing - * http://www.quirksmode.org/dom/events/resize.html - * - * @param fn callback This refers to the passed element - */ - function addResizeEvent(fn){ - var timeout; - - addEvent(window, 'resize', function(){ - if (timeout){ - clearTimeout(timeout); - } - timeout = setTimeout(fn, 100); - }); - } - - // Needs more testing, will be rewriten for next version - // getOffset function copied from jQuery lib (http://jquery.com/) - if (document.documentElement.getBoundingClientRect){ - // Get Offset using getBoundingClientRect - // http://ejohn.org/blog/getboundingclientrect-is-awesome/ - var getOffset = function(el){ - var box = el.getBoundingClientRect(); - var doc = el.ownerDocument; - var body = doc.body; - var docElem = doc.documentElement; // for ie - var clientTop = docElem.clientTop || body.clientTop || 0; - var clientLeft = docElem.clientLeft || body.clientLeft || 0; - - // In Internet Explorer 7 getBoundingClientRect property is treated as physical, - // while others are logical. Make all logical, like in IE8. - var zoom = 1; - if (body.getBoundingClientRect) { - var bound = body.getBoundingClientRect(); - zoom = (bound.right - bound.left) / body.clientWidth; - } - - if (zoom > 1) { - clientTop = 0; - clientLeft = 0; - } - - var top = box.top / zoom + (window.pageYOffset || docElem && docElem.scrollTop / zoom || body.scrollTop / zoom) - clientTop, left = box.left / zoom + (window.pageXOffset || docElem && docElem.scrollLeft / zoom || body.scrollLeft / zoom) - clientLeft; - - return { - top: top, - left: left - }; - }; - } else { - // Get offset adding all offsets - var getOffset = function(el){ - var top = 0, left = 0; - do { - top += el.offsetTop || 0; - left += el.offsetLeft || 0; - el = el.offsetParent; - } while (el); - - return { - left: left, - top: top - }; - }; - } - - /** - * Returns left, top, right and bottom properties describing the border-box, - * in pixels, with the top-left relative to the body - * @param {Element} el - * @return {Object} Contains left, top, right,bottom - */ - function getBox(el){ - var left, right, top, bottom; - var offset = getOffset(el); - left = offset.left; - top = offset.top; - - right = left + el.offsetWidth; - bottom = top + el.offsetHeight; - - return { - left: left, - right: right, - top: top, - bottom: bottom - }; - } - - /** - * Helper that takes object literal - * and add all properties to element.style - * @param {Element} el - * @param {Object} styles - */ - function addStyles(el, styles){ - for (var name in styles) { - if (styles.hasOwnProperty(name)) { - el.style[name] = styles[name]; - } - } - } - - /** - * Function places an absolutely positioned - * element on top of the specified element - * copying position and dimentions. - * @param {Element} from - * @param {Element} to - */ - function copyLayout(from, to){ - var box = getBox(from); - - addStyles(to, { - position: 'absolute', - left : box.left + 'px', - top : box.top + 'px', - width : from.offsetWidth + 'px', - height : from.offsetHeight + 'px' - }); - } - - /** - * Creates and returns element from html chunk - * Uses innerHTML to create an element - */ - var toElement = (function(){ - var div = document.createElement('div'); - return function(html){ - div.innerHTML = html; - var el = div.firstChild; - return div.removeChild(el); - }; - })(); - - /** - * Function generates unique id - * @return unique id - */ - var getUID = (function(){ - var id = 0; - return function(){ - return 'ValumsAjaxUpload' + id++; - }; - })(); - - /** - * Get file name from path - * @param {String} file path to file - * @return filename - */ - function fileFromPath(file){ - return file.replace(/.*(\/|\\)/, ""); - } - - /** - * Get file extension lowercase - * @param {String} file name - * @return file extenstion - */ - function getExt(file){ - return (-1 !== file.indexOf('.')) ? file.replace(/.*[.]/, '') : ''; - } - - function hasClass(el, name){ - var re = new RegExp('\\b' + name + '\\b'); - return re.test(el.className); - } - function addClass(el, name){ - if ( ! hasClass(el, name)){ - el.className += ' ' + name; - } - } - function removeClass(el, name){ - var re = new RegExp('\\b' + name + '\\b'); - el.className = el.className.replace(re, ''); - } - - function removeNode(el){ - el.parentNode.removeChild(el); - } - - /** - * Easy styling and uploading - * @constructor - * @param button An element you want convert to - * upload button. Tested dimentions up to 500x500px - * @param {Object} options See defaults below. - */ - - window.AjaxUpload = function(button, options){ - this._settings = { - // Location of the server-side upload script - action: 'upload.php', - // File upload name - name: 'userfile', - // Additional data to send - data: {}, - // Submit file as soon as it's selected - autoSubmit: true, - // The type of data that you're expecting back from the server. - // html and xml are detected automatically. - // Only useful when you are using json data as a response. - // Set to "json" in that case. - responseType: false, - // Class applied to button when mouse is hovered - hoverClass: 'hover', - // Class applied to button when AU is disabled - disabledClass: 'disabled', - // When user selects a file, useful with autoSubmit disabled - // You can return false to cancel upload - onChange: function(file, extension){ - }, - // Callback to fire before file is uploaded - // You can return false to cancel upload - onSubmit: function(file, extension){ - }, - // Fired when file upload is completed - // WARNING! DO NOT USE "FALSE" STRING AS A RESPONSE! - onComplete: function(file, response){ - } - }; - - // Merge the users options with our defaults - for (var i in options) { - if (options.hasOwnProperty(i)){ - this._settings[i] = options[i]; - } - } - - // button isn't necessary a dom element - if (button.jquery){ - // jQuery object was passed - button = button[0]; - } else if (typeof button == "string") { - if (/^#.*/.test(button)){ - // If jQuery user passes #elementId don't break it - button = button.slice(1); - } - - button = document.getElementById(button); - } - - if ( ! button || button.nodeType !== 1){ - throw new Error("Please make sure that you're passing a valid element"); - } - - if ( button.nodeName.toUpperCase() == 'A'){ - // disable link - addEvent(button, 'click', function(e){ - if (e && e.preventDefault){ - e.preventDefault(); - } else if (window.event){ - window.event.returnValue = false; - } - }); - } - - // DOM element - this._button = button; - // DOM element - this._input = null; - // If disabled clicking on button won't do anything - this._disabled = false; - - // if the button was disabled before refresh if will remain - // disabled in FireFox, let's fix it - this.enable(); - - this._rerouteClicks(); - }; - - // assigning methods to our class - AjaxUpload.prototype = { - setData: function(data){ - this._settings.data = data; - }, - disable: function(){ - addClass(this._button, this._settings.disabledClass); - this._disabled = true; - - var nodeName = this._button.nodeName.toUpperCase(); - if (nodeName == 'INPUT' || nodeName == 'BUTTON'){ - this._button.setAttribute('disabled', 'disabled'); - } - - // hide input - if (this._input){ - // We use visibility instead of display to fix problem with Safari 4 - // The problem is that the value of input doesn't change if it - // has display none when user selects a file - this._input.parentNode.style.visibility = 'hidden'; - } - }, - enable: function(){ - removeClass(this._button, this._settings.disabledClass); - this._button.removeAttribute('disabled'); - this._disabled = false; - - }, - /** - * Creates invisible file input - * that will hover above the button - *
- */ - _createInput: function(){ - var self = this; - - var input = document.createElement("input"); - input.setAttribute('type', 'file'); - input.setAttribute('name', this._settings.name); - - addStyles(input, { - 'position' : 'absolute', - // in Opera only 'browse' button - // is clickable and it is located at - // the right side of the input - 'right' : 0, - 'margin' : 0, - 'padding' : 0, - 'fontSize' : '480px', - 'cursor' : 'pointer' - }); - - var div = document.createElement("div"); - addStyles(div, { - 'display' : 'block', - 'position' : 'absolute', - 'overflow' : 'hidden', - 'margin' : 0, - 'padding' : 0, - 'opacity' : 0, - // Make sure browse button is in the right side - // in Internet Explorer - 'direction' : 'ltr', - //Max zIndex supported by Opera 9.0-9.2 - 'zIndex': 2147483583 - }); - - // Make sure that element opacity exists. - // Otherwise use IE filter - if ( div.style.opacity !== "0") { - if (typeof(div.filters) == 'undefined'){ - throw new Error('Opacity not supported by the browser'); - } - div.style.filter = "alpha(opacity=0)"; - } - - addEvent(input, 'change', function(){ - - if ( ! input || input.value === ''){ - return; - } - - // Get filename from input, required - // as some browsers have path instead of it - var file = fileFromPath(input.value); - - if (false === self._settings.onChange.call(self, file, getExt(file))){ - self._clearInput(); - return; - } - - // Submit form when value is changed - if (self._settings.autoSubmit) { - self.submit(); - } - }); - - addEvent(input, 'mouseover', function(){ - addClass(self._button, self._settings.hoverClass); - }); - - addEvent(input, 'mouseout', function(){ - removeClass(self._button, self._settings.hoverClass); - - // We use visibility instead of display to fix problem with Safari 4 - // The problem is that the value of input doesn't change if it - // has display none when user selects a file - input.parentNode.style.visibility = 'hidden'; - - }); - - div.appendChild(input); - document.body.appendChild(div); - - this._input = input; - }, - _clearInput : function(){ - if (!this._input){ - return; - } - - // this._input.value = ''; Doesn't work in IE6 - removeNode(this._input.parentNode); - this._input = null; - this._createInput(); - - removeClass(this._button, this._settings.hoverClass); - }, - /** - * Function makes sure that when user clicks upload button, - * the this._input is clicked instead - */ - _rerouteClicks: function(){ - var self = this; - - // IE will later display 'access denied' error - // if you use using self._input.click() - // other browsers just ignore click() - - addEvent(self._button, 'mouseover', function(){ - if (self._disabled){ - return; - } - - if ( ! self._input){ - self._createInput(); - } - - var div = self._input.parentNode; - copyLayout(self._button, div); - div.style.visibility = 'visible'; - - }); - - - // commented because we now hide input on mouseleave - /** - * When the window is resized the elements - * can be misaligned if button position depends - * on window size - */ - //addResizeEvent(function(){ - // if (self._input){ - // copyLayout(self._button, self._input.parentNode); - // } - //}); - - }, - /** - * Creates iframe with unique name - * @return {Element} iframe - */ - _createIframe: function(){ - // We can't use getTime, because it sometimes return - // same value in safari :( - var id = getUID(); - - // We can't use following code as the name attribute - // won't be properly registered in IE6, and new window - // on form submit will open - // var iframe = document.createElement('iframe'); - // iframe.setAttribute('name', id); - - var iframe = toElement('