├── .gitignore
├── CODE_OF_CONDUCT.md
├── DATABASE.sql
├── LICENSE
├── README.md
├── actions
└── friendsadd.php
├── autofriends.php
├── autoupdate.php
├── autoupdatenews.php
├── classes.php
├── composer.json
├── composer.lock
├── config.sample.php
├── css
├── bootstrap-theme.css
├── bootstrap-theme.css.map
├── bootstrap-theme.min.css
├── bootstrap.css
├── bootstrap.css.map
└── bootstrap.min.css
├── fonts
├── glyphicons-halflings-regular.eot
├── glyphicons-halflings-regular.svg
├── glyphicons-halflings-regular.ttf
├── glyphicons-halflings-regular.woff
└── glyphicons-halflings-regular.woff2
├── index.php
├── models
├── API.php
├── Iii.php
├── Mail.php
└── antigate.php
├── preloader.gif
├── update.php
└── vk.api.php
/.gitignore:
--------------------------------------------------------------------------------
1 | config.php
2 | vendor
3 | composer.phar
4 | .idea
5 | config.php
6 | .DS_Store
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
6 |
7 | ## Our Standards
8 |
9 | Examples of behavior that contributes to creating a positive environment include:
10 |
11 | * Using welcoming and inclusive language
12 | * Being respectful of differing viewpoints and experiences
13 | * Gracefully accepting constructive criticism
14 | * Focusing on what is best for the community
15 | * Showing empathy towards other community members
16 |
17 | Examples of unacceptable behavior by participants include:
18 |
19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances
20 | * Trolling, insulting/derogatory comments, and personal or political attacks
21 | * Public or private harassment
22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission
23 | * Other conduct which could reasonably be considered inappropriate in a professional setting
24 |
25 | ## Our Responsibilities
26 |
27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
28 |
29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
30 |
31 | ## Scope
32 |
33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
34 |
35 | ## Enforcement
36 |
37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at x@2ch.hk. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
38 |
39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
40 |
41 | ## Attribution
42 |
43 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
44 |
45 | [homepage]: http://contributor-covenant.org
46 | [version]: http://contributor-covenant.org/version/1/4/
47 |
--------------------------------------------------------------------------------
/DATABASE.sql:
--------------------------------------------------------------------------------
1 | SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
2 | SET time_zone = "+00:00";
3 |
4 |
5 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
6 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
7 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
8 | /*!40101 SET NAMES utf8 */;
9 |
10 |
11 | CREATE TABLE IF NOT EXISTS `clients` (
12 | `id` int(11) NOT NULL AUTO_INCREMENT,
13 | `firstname` longtext NOT NULL,
14 | `secondname` longtext NOT NULL,
15 | `city` text NOT NULL,
16 | `birthdate` text NOT NULL,
17 | `country` text NOT NULL,
18 | `sex` int(5) NOT NULL,
19 | `chatid` text NOT NULL,
20 | `vkid` int(50) NOT NULL,
21 | PRIMARY KEY (`id`)
22 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
23 |
24 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
25 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
26 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
27 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 z00k
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Разговорный бот на PHP для Вконтакте
2 | ##Установка:
3 | 
4 | * 1. Зарегистрируйтесь на сайте iii.ru и создайте себе "инфа". Используйте его номер в скрипте.
5 | * 2. Импортируйте `dump.sql` в свою базу данных
6 | * 3. Переименуйте `config.sample.php` в `config.php` предварительно изменив данные для коннекта к базе данных
7 | * 4. Создайте приложение для ВК
8 | * 5. Вставте свой `APP_ID` и `APP_SECRET` в `config.php`
9 | * 6. Получите "долгоиграющий" access token для работы с `VK API` с помощью ссылки - [получить token](https://oauth.vk.com/authorize?client_id=4798482&redirect_uri=http://api.vk.com/blank.html&scope=offline,messages,friends,status,wall&display=page&response_type=token). Естественно вы можете отредактировать ссылку и использовать свои данные изменив токен на временный.
10 | * 7. Установить зависимости через Composer `composer.phar install`
11 | * 8. Пользуйтесь запустив` `index.php`
12 |
13 | Если добавить `update.php` в Крон, то бот будет постоянно онлайн
14 |
--------------------------------------------------------------------------------
/actions/friendsadd.php:
--------------------------------------------------------------------------------
1 | '4798482',
10 | 'api_secret' => 'yat6sCVTs6g4D8nCgWSJ',
11 | 'access_token' => $config['token']
12 | );
13 |
14 | try {
15 | $vk = new VK\VK($vk_config['app_id'], $vk_config['api_secret'], $vk_config['access_token']);
16 |
17 |
18 | $addfriend = $vk->api('friends.add', array(
19 | 'user_id' => $_GET['id'],
20 | ));
21 | ?>
22 |
23 |
24 |
25 |
26 |
27 |
28 | } catch (VK\VKException $error) {
29 | echo $error->getMessage();
30 | }
--------------------------------------------------------------------------------
/autofriends.php:
--------------------------------------------------------------------------------
1 | $config['app_id'],
11 | 'api_secret' => $config['app_secret'],
12 | 'access_token' => $config['token']
13 |
14 | );
15 |
16 | try {
17 | $vk = new \models\API($vk_config);
18 |
19 |
20 | $friendsget = $vk->getFriendsRequest();
21 |
22 | for ($i = 0; $i < count($friendsget); $i++) {
23 |
24 | $vk->addFriend($friendsget[$i]);
25 |
26 | }
27 |
28 | } catch (Exception $error) {
29 |
30 |
31 | echo $error->getMessage();
32 | }
33 |
--------------------------------------------------------------------------------
/autoupdate.php:
--------------------------------------------------------------------------------
1 | $config['app_id'],
14 | 'api_secret' => $config['app_secret'],
15 | 'access_token' => $config['token']
16 |
17 | );
18 |
19 | try {
20 |
21 | $vk = new \models\API($vk_config);
22 | $iii = new \models\Iii();
23 |
24 | // Получаем список последних 20 сообщений //
25 | $messages = $vk->getMessage();
26 |
27 | // Получаем сообщения, на которые мы еще не отвечали //
28 |
29 | // Ставим статус Online //
30 | $vk->setOnline();
31 |
32 | // Выводим сообщения //
33 | // Отвечаем на 10 сообщений //
34 | echo 'Последние чаты ';
35 | $i = 0;
36 | foreach ((array)$messages as $key => $value) {
37 | $i++;
38 |
39 | if (isset($value['uid'])) {
40 | ?>
41 |
42 |
43 |
Отправил = $value['uid'] ?>
44 | в = gmdate("Y-m-d H:i:s", $value['date']) ?> if ($value['read_state'] == '0') {
45 | echo 'Не прочитано ';
46 | } else {
47 | echo 'Прочитано ';
48 | } ?> if ($value['out'] == '1') {
49 | echo 'Ответ отправлен ';
50 | } ?>
51 |
52 | = $value['body'] ?>
53 |
54 |
55 |
56 | }
57 |
58 | $uid = $value['uid'];
59 | $message = $value['body'];
60 |
61 |
62 | if ($message[0] == '/') {
63 | $vk->markAsRead($uid);
64 |
65 | $vk->setActivity($uid);
66 |
67 | sleep(1);
68 |
69 | // Не знаю зачем это нужно посылать, но пусть будет
70 | $send = $vk->sendMessages($value['uid'], cmd(substr($message, 1)));
71 |
72 | } elseif ($value['out'] == '0' AND !in_array($uid, $debug)) {
73 | // Сделаем выборку из базы //
74 | $result = $link->query("SELECT * FROM clients WHERE vkid=" . $uid);
75 | if ($result != false) {
76 | $row = mysqli_fetch_array($result);
77 | }
78 |
79 | if ($row['vkid'] == $uid AND $result != false) {
80 |
81 | // Если есть в базе отсылаем сообщение //
82 |
83 | $vk->markAsRead($uid);
84 | $vk->setActivity($uid);
85 | sleep(1);
86 |
87 | $repquotes = array ("\"", "\'" );
88 | $filtered = addslashes(str_replace( $repquotes , '', $value['body'] ));
89 |
90 | $mes = $iii->sendMsg($row['chatid'], urlencode($filtered));
91 |
92 | $send = $vk->sendMessages($value['uid'], strip_tags($mes));
93 |
94 |
95 | if ($send['error']['error_code'] == '14' AND $config['antigate'] !== null) {
96 | // Загружаем капчу на сервер //
97 | file_put_contents("captcha/captcha.jpg", file_get_contents($send['error']['captcha_img']));
98 | // Уникальный ID капчи //
99 | $captcha['id'] = $send['error']['captcha_sid'];
100 | $captcha['key'] = recognize("captcha/captcha.jpg", $config['antigate'], false, "antigate.com");
101 |
102 |
103 | $captcha_array = [
104 | 'captcha_sid' => $captcha['id'],
105 | 'captcha_key' => $captcha['key'],
106 | ];
107 | // Повторяем отправку вместе с разгаданной капчей //
108 | $send = $vk->sendMessages($value['uid'], strip_tags($mes), $captcha_array);
109 |
110 |
111 |
112 | }
113 |
114 | if ($send['error']['error_code'] == '14' AND $config['antigate'] == null) {
115 |
116 | file_put_contents("captcha/captcha.jpg", file_get_contents($send['error']['captcha_img']));
117 |
118 | $captcha['id'] = $send['error']['captcha_sid'];
119 |
120 | (new \models\Mail())->send($config['email'], 'Капча', 'Капча чувак', "captcha/captcha.jpg");
121 |
122 | }
123 |
124 |
125 | // Если нет в базе - добавляем его //
126 | } else {
127 |
128 | $vkprofileinfo = $vk->getUserInfo($uid);
129 |
130 | $firstname = addslashes($vkprofileinfo['first_name']);
131 | $secondname = addslashes($vkprofileinfo['last_name']);
132 | $sex = $vkprofileinfo['sex'];
133 |
134 |
135 | $chatid = $iii->initMe($uid, $config['botid']);
136 |
137 | $insert = $link->query("INSERT INTO clients VALUES (null, '$firstname', '$secondname', '$sex', '$chatid', '$uid')") or die("Возникла проблемка..." . mysqli_error($link));
138 |
139 | // Находим новосозданное имя и ID сессии //
140 | $result2 = $link->query("SELECT firstname, chatid, sex FROM clients WHERE vkid=" . $uid);
141 | $row2 = mysqli_fetch_array($result2);
142 |
143 |
144 | $iii->sendMsg($row2['chatid'], urlencode('!botsetname ' . $row2['firstname']));
145 |
146 | // Устанавливаем пол //
147 | if ($row2['sex'] == '2') {
148 | $iii->sendMsg($row2['chatid'], urlencode('я мальчик'));
149 | } elseif ($row2['sex'] == '1') {
150 | $iii->sendMsg($row2['chatid'], urlencode('я девочка'));
151 | }
152 |
153 | }
154 |
155 | }
156 |
157 |
158 | }
159 | } catch (VK\VKException $error) {
160 | echo $error->getMessage();
161 | }
--------------------------------------------------------------------------------
/autoupdatenews.php:
--------------------------------------------------------------------------------
1 | $config['app_id'],
8 | 'api_secret' => $config['app_secret'],
9 | 'access_token' => $config['token']
10 |
11 | );
12 |
13 | try {
14 | $vk = new VK\VK($vk_config['app_id'], $vk_config['api_secret'], $vk_config['access_token']);
15 |
16 |
17 | // Получаем список последних 20 новостей //
18 | $wall = $vk->api('newsfeed.get', array(
19 | 'count' => '30',
20 | 'return_banned' => '0',
21 | ));
22 |
23 | $repost = $vk->api('wall.repost', array(
24 | 'object' => 'wall' . $wall['response']['items'][0]['source_id'] .'_'. $wall['response']['items'][0]['post_id'],
25 | ));
26 |
27 | // Выводим ленту //
28 | echo 'Новости ';
29 | foreach ((array)$wall['response']['items'] as $key => $value) {
30 |
31 | if ($value['post_id'] != null ){
32 | ?>
33 |
34 |
40 |
41 | }
42 | }
43 | } catch (VK\VKException $error) {
44 | echo $error->getMessage();
45 | }
--------------------------------------------------------------------------------
/classes.php:
--------------------------------------------------------------------------------
1 | ccy . ' ' . $curr[0]->buy . ', ' . $curr[1]->ccy . ' ' . $curr[1]->buy . ', ' . $curr[2]->ccy . ' ' . $curr[2]->buy . ', ';
56 | }
57 |
58 | return $resp;
59 | }
60 |
61 | function initme($vkid, $key, $botid)
62 | {
63 | $getuid = file_get_contents('http://iii.ru/api/2.0/json/Chat.init/' . $botid . '/' . $vkid);
64 | $jsonparam = json_decode(base64_decode(XORFUNC::XOR_decrypt($getuid, $key)));
65 |
66 | return $jsonparam;
67 | }
68 |
69 | function curl($url)
70 | {
71 | $ch = curl_init($url);
72 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
73 | curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
74 | curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
75 | $response = curl_exec($ch);
76 | curl_close($ch);
77 | return json_decode($response, true);
78 | }
79 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "exileed/vkbot",
3 | "description": "Разговорный бот для Соц. сетей на основе сервиса iii.ru",
4 | "minimum-stability": "dev",
5 | "license": "mit",
6 | "authors": [
7 | {
8 | "name": "Dmitriy Kuts",
9 | "email": "me@exileed.com"
10 | },
11 | {
12 | "name": "z00k",
13 | "email": "x@2ch.hk"
14 | }
15 | ],
16 | "require": {
17 | "php": ">=5.4",
18 | "vladkens/vk": "0.1.*"
19 | },
20 | "autoload": {
21 | "classmap": [
22 | "models/"
23 | ]
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/composer.lock:
--------------------------------------------------------------------------------
1 | {
2 | "_readme": [
3 | "This file locks the dependencies of your project to a known state",
4 | "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
5 | "This file is @generated automatically"
6 | ],
7 | "hash": "b41d9970e5ca9f2a70c519e47812b739",
8 | "packages": [
9 | {
10 | "name": "vladkens/vk",
11 | "version": "v0.1.7",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/vladkens/VK.git",
15 | "reference": "4f1faed7cc040e0814cc585a25cf56378f449b82"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/vladkens/VK/zipball/4f1faed7cc040e0814cc585a25cf56378f449b82",
20 | "reference": "4f1faed7cc040e0814cc585a25cf56378f449b82",
21 | "shasum": ""
22 | },
23 | "require": {
24 | "php": ">=5.3.0"
25 | },
26 | "type": "library",
27 | "autoload": {
28 | "psr-0": {
29 | "VK": "src"
30 | }
31 | },
32 | "notification-url": "https://packagist.org/downloads/",
33 | "license": [
34 | "MIT"
35 | ],
36 | "authors": [
37 | {
38 | "name": "Vlad Pronsky",
39 | "email": "vladkens@yandex.ru"
40 | }
41 | ],
42 | "description": "The PHP class for vk.com API with support OAuth.",
43 | "keywords": [
44 | "api",
45 | "oauth",
46 | "vk",
47 | "vk.com"
48 | ],
49 | "time": "2014-01-19 16:19:30"
50 | }
51 | ],
52 | "packages-dev": [],
53 | "aliases": [],
54 | "minimum-stability": "stable",
55 | "stability-flags": [],
56 | "prefer-stable": false,
57 | "prefer-lowest": false,
58 | "platform": [],
59 | "platform-dev": []
60 | }
61 |
--------------------------------------------------------------------------------
/config.sample.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | $link = mysqli_connect("HOST", "USER", "PASSWORD", "DATABASENAME") or die("Error " . mysqli_error($link));
4 | mysqli_set_charset($link,"utf8");
5 |
6 | // // Variables // //
7 | // ANTIGATE.COM КЛЮЧ //
8 | $config['antigate'] = ""; // не обязательное поле. если оставите пустым - капчу решать не будет
9 |
10 |
11 |
12 | // Ключ для декриптования ответов с iii.ru //
13 | $config['key'] = "some very-very long string without any non-latin characters due to different string representations inside of variable programming languages"; // здесь ничего никогда не нужно менять. просто не трогайте
14 |
15 | // ID БОТА НА САЙТЕ iii.ru //
16 | $config['botid'] = ""; // ID бота.
17 |
18 | // URL ХОСТА //
19 | $config['url'] = 'http://' . $_SERVER['HTTP_HOST'];
20 |
21 | // ID пользователей, которым бот не будет отвечать //
22 | $debug = array("5269222", "1");
23 |
24 | // Номер приложения
25 | $config['app_id'] = "VK_API_ID";
26 | // Секретный ключ
27 | $config['app_secret'] = "VK_API_SECRET";
28 | // Уникальный token профиля вконтакте //
29 | $config['token'] = "VK_API_TOKEN";
30 |
31 |
32 | // Почта для отправки каптчи
33 | $config['email'] = "";
--------------------------------------------------------------------------------
/css/bootstrap-theme.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.2 (http://getbootstrap.com)
3 | * Copyright 2011-2015 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */
6 |
7 | .btn-default,
8 | .btn-primary,
9 | .btn-success,
10 | .btn-info,
11 | .btn-warning,
12 | .btn-danger {
13 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
14 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
15 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
16 | }
17 |
18 | .btn-default:active,
19 | .btn-primary:active,
20 | .btn-success:active,
21 | .btn-info:active,
22 | .btn-warning:active,
23 | .btn-danger:active,
24 | .btn-default.active,
25 | .btn-primary.active,
26 | .btn-success.active,
27 | .btn-info.active,
28 | .btn-warning.active,
29 | .btn-danger.active {
30 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
31 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
32 | }
33 |
34 | .btn-default .badge,
35 | .btn-primary .badge,
36 | .btn-success .badge,
37 | .btn-info .badge,
38 | .btn-warning .badge,
39 | .btn-danger .badge {
40 | text-shadow: none;
41 | }
42 |
43 | .btn:active,
44 | .btn.active {
45 | background-image: none;
46 | }
47 |
48 | .btn-default {
49 | text-shadow: 0 1px 0 #fff;
50 | background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
51 | background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
52 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
53 | background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
54 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
55 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
56 | background-repeat: repeat-x;
57 | border-color: #dbdbdb;
58 | border-color: #ccc;
59 | }
60 |
61 | .btn-default:hover,
62 | .btn-default:focus {
63 | background-color: #e0e0e0;
64 | background-position: 0 -15px;
65 | }
66 |
67 | .btn-default:active,
68 | .btn-default.active {
69 | background-color: #e0e0e0;
70 | border-color: #dbdbdb;
71 | }
72 |
73 | .btn-default.disabled,
74 | .btn-default:disabled,
75 | .btn-default[disabled] {
76 | background-color: #e0e0e0;
77 | background-image: none;
78 | }
79 |
80 | .btn-primary {
81 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
82 | background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
83 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
84 | background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
85 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
86 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
87 | background-repeat: repeat-x;
88 | border-color: #245580;
89 | }
90 |
91 | .btn-primary:hover,
92 | .btn-primary:focus {
93 | background-color: #265a88;
94 | background-position: 0 -15px;
95 | }
96 |
97 | .btn-primary:active,
98 | .btn-primary.active {
99 | background-color: #265a88;
100 | border-color: #245580;
101 | }
102 |
103 | .btn-primary.disabled,
104 | .btn-primary:disabled,
105 | .btn-primary[disabled] {
106 | background-color: #265a88;
107 | background-image: none;
108 | }
109 |
110 | .btn-success {
111 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
112 | background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
113 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
114 | background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
115 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
116 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
117 | background-repeat: repeat-x;
118 | border-color: #3e8f3e;
119 | }
120 |
121 | .btn-success:hover,
122 | .btn-success:focus {
123 | background-color: #419641;
124 | background-position: 0 -15px;
125 | }
126 |
127 | .btn-success:active,
128 | .btn-success.active {
129 | background-color: #419641;
130 | border-color: #3e8f3e;
131 | }
132 |
133 | .btn-success.disabled,
134 | .btn-success:disabled,
135 | .btn-success[disabled] {
136 | background-color: #419641;
137 | background-image: none;
138 | }
139 |
140 | .btn-info {
141 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
142 | background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
143 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
144 | background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
145 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
146 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
147 | background-repeat: repeat-x;
148 | border-color: #28a4c9;
149 | }
150 |
151 | .btn-info:hover,
152 | .btn-info:focus {
153 | background-color: #2aabd2;
154 | background-position: 0 -15px;
155 | }
156 |
157 | .btn-info:active,
158 | .btn-info.active {
159 | background-color: #2aabd2;
160 | border-color: #28a4c9;
161 | }
162 |
163 | .btn-info.disabled,
164 | .btn-info:disabled,
165 | .btn-info[disabled] {
166 | background-color: #2aabd2;
167 | background-image: none;
168 | }
169 |
170 | .btn-warning {
171 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
172 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
173 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
174 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
175 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
176 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
177 | background-repeat: repeat-x;
178 | border-color: #e38d13;
179 | }
180 |
181 | .btn-warning:hover,
182 | .btn-warning:focus {
183 | background-color: #eb9316;
184 | background-position: 0 -15px;
185 | }
186 |
187 | .btn-warning:active,
188 | .btn-warning.active {
189 | background-color: #eb9316;
190 | border-color: #e38d13;
191 | }
192 |
193 | .btn-warning.disabled,
194 | .btn-warning:disabled,
195 | .btn-warning[disabled] {
196 | background-color: #eb9316;
197 | background-image: none;
198 | }
199 |
200 | .btn-danger {
201 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
202 | background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
203 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
204 | background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
205 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
206 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
207 | background-repeat: repeat-x;
208 | border-color: #b92c28;
209 | }
210 |
211 | .btn-danger:hover,
212 | .btn-danger:focus {
213 | background-color: #c12e2a;
214 | background-position: 0 -15px;
215 | }
216 |
217 | .btn-danger:active,
218 | .btn-danger.active {
219 | background-color: #c12e2a;
220 | border-color: #b92c28;
221 | }
222 |
223 | .btn-danger.disabled,
224 | .btn-danger:disabled,
225 | .btn-danger[disabled] {
226 | background-color: #c12e2a;
227 | background-image: none;
228 | }
229 |
230 | .thumbnail,
231 | .img-thumbnail {
232 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
233 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
234 | }
235 |
236 | .dropdown-menu > li > a:hover,
237 | .dropdown-menu > li > a:focus {
238 | background-color: #e8e8e8;
239 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
240 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
241 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
242 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
243 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
244 | background-repeat: repeat-x;
245 | }
246 |
247 | .dropdown-menu > .active > a,
248 | .dropdown-menu > .active > a:hover,
249 | .dropdown-menu > .active > a:focus {
250 | background-color: #2e6da4;
251 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
252 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
253 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
254 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
255 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
256 | background-repeat: repeat-x;
257 | }
258 |
259 | .navbar-default {
260 | background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
261 | background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
262 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
263 | background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
264 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
265 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
266 | background-repeat: repeat-x;
267 | border-radius: 4px;
268 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
269 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
270 | }
271 |
272 | .navbar-default .navbar-nav > .open > a,
273 | .navbar-default .navbar-nav > .active > a {
274 | background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
275 | background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
276 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
277 | background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
278 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
279 | background-repeat: repeat-x;
280 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
281 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
282 | }
283 |
284 | .navbar-brand,
285 | .navbar-nav > li > a {
286 | text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
287 | }
288 |
289 | .navbar-inverse {
290 | background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
291 | background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
292 | background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
293 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
294 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
295 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
296 | background-repeat: repeat-x;
297 | }
298 |
299 | .navbar-inverse .navbar-nav > .open > a,
300 | .navbar-inverse .navbar-nav > .active > a {
301 | background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
302 | background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
303 | background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
304 | background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
305 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
306 | background-repeat: repeat-x;
307 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
308 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
309 | }
310 |
311 | .navbar-inverse .navbar-brand,
312 | .navbar-inverse .navbar-nav > li > a {
313 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
314 | }
315 |
316 | .navbar-static-top,
317 | .navbar-fixed-top,
318 | .navbar-fixed-bottom {
319 | border-radius: 0;
320 | }
321 |
322 | @media (max-width: 767px) {
323 | .navbar .navbar-nav .open .dropdown-menu > .active > a,
324 | .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
325 | .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
326 | color: #fff;
327 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
328 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
329 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
330 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
331 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
332 | background-repeat: repeat-x;
333 | }
334 | }
335 |
336 | .alert {
337 | text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
338 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
339 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
340 | }
341 |
342 | .alert-success {
343 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
344 | background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
345 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
346 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
347 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
348 | background-repeat: repeat-x;
349 | border-color: #b2dba1;
350 | }
351 |
352 | .alert-info {
353 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
354 | background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
355 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
356 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
357 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
358 | background-repeat: repeat-x;
359 | border-color: #9acfea;
360 | }
361 |
362 | .alert-warning {
363 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
364 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
365 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
366 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
367 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
368 | background-repeat: repeat-x;
369 | border-color: #f5e79e;
370 | }
371 |
372 | .alert-danger {
373 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
374 | background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
375 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
376 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
377 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
378 | background-repeat: repeat-x;
379 | border-color: #dca7a7;
380 | }
381 |
382 | .progress {
383 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
384 | background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
385 | background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
386 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
387 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
388 | background-repeat: repeat-x;
389 | }
390 |
391 | .progress-bar {
392 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
393 | background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
394 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
395 | background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
396 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
397 | background-repeat: repeat-x;
398 | }
399 |
400 | .progress-bar-success {
401 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
402 | background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
403 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
404 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
405 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
406 | background-repeat: repeat-x;
407 | }
408 |
409 | .progress-bar-info {
410 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
411 | background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
412 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
413 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
414 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
415 | background-repeat: repeat-x;
416 | }
417 |
418 | .progress-bar-warning {
419 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
420 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
421 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
422 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
423 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
424 | background-repeat: repeat-x;
425 | }
426 |
427 | .progress-bar-danger {
428 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
429 | background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
430 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
431 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
432 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
433 | background-repeat: repeat-x;
434 | }
435 |
436 | .progress-bar-striped {
437 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
438 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
439 | background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
440 | }
441 |
442 | .list-group {
443 | border-radius: 4px;
444 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
445 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
446 | }
447 |
448 | .list-group-item.active,
449 | .list-group-item.active:hover,
450 | .list-group-item.active:focus {
451 | text-shadow: 0 -1px 0 #286090;
452 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
453 | background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
454 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
455 | background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
456 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
457 | background-repeat: repeat-x;
458 | border-color: #2b669a;
459 | }
460 |
461 | .list-group-item.active .badge,
462 | .list-group-item.active:hover .badge,
463 | .list-group-item.active:focus .badge {
464 | text-shadow: none;
465 | }
466 |
467 | .panel {
468 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
469 | box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
470 | }
471 |
472 | .panel-default > .panel-heading {
473 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
474 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
475 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
476 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
477 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
478 | background-repeat: repeat-x;
479 | }
480 |
481 | .panel-primary > .panel-heading {
482 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
483 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
484 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
485 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
486 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
487 | background-repeat: repeat-x;
488 | }
489 |
490 | .panel-success > .panel-heading {
491 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
492 | background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
493 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
494 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
495 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
496 | background-repeat: repeat-x;
497 | }
498 |
499 | .panel-info > .panel-heading {
500 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
501 | background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
502 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
503 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
504 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
505 | background-repeat: repeat-x;
506 | }
507 |
508 | .panel-warning > .panel-heading {
509 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
510 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
511 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
512 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
513 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
514 | background-repeat: repeat-x;
515 | }
516 |
517 | .panel-danger > .panel-heading {
518 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
519 | background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
520 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
521 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
522 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
523 | background-repeat: repeat-x;
524 | }
525 |
526 | .well {
527 | background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
528 | background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
529 | background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
530 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
531 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
532 | background-repeat: repeat-x;
533 | border-color: #dcdcdc;
534 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
535 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
536 | }
537 |
538 | /*# sourceMappingURL=bootstrap-theme.css.map */
539 |
--------------------------------------------------------------------------------
/css/bootstrap-theme.css.map:
--------------------------------------------------------------------------------
1 | {
2 | "version": 3,
3 | "sources": [
4 | "less/theme.less",
5 | "less/mixins/vendor-prefixes.less",
6 | "bootstrap-theme.css",
7 | "less/mixins/gradients.less",
8 | "less/mixins/reset-filter.less"
9 | ],
10 | "names": [],
11 | "mappings": "AAcA;;;;;;EAME,0CAAA;ECgDA,6FAAA;EACQ,qFAAA;EC5DT;AFgBC;;;;;;;;;;;;EC2CA,0DAAA;EACQ,kDAAA;EC7CT;AFVD;;;;;;EAiBI,mBAAA;EECH;AFiCC;;EAEE,wBAAA;EE/BH;AFoCD;EGnDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EAgC2C,2BAAA;EAA2B,oBAAA;EEzBvE;AFLC;;EAEE,2BAAA;EACA,8BAAA;EEOH;AFJC;;EAEE,2BAAA;EACA,uBAAA;EEMH;AFHC;;;EAGE,2BAAA;EACA,wBAAA;EEKH;AFUD;EGpDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEgCD;AF9BC;;EAEE,2BAAA;EACA,8BAAA;EEgCH;AF7BC;;EAEE,2BAAA;EACA,uBAAA;EE+BH;AF5BC;;;EAGE,2BAAA;EACA,wBAAA;EE8BH;AFdD;EGrDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEyDD;AFvDC;;EAEE,2BAAA;EACA,8BAAA;EEyDH;AFtDC;;EAEE,2BAAA;EACA,uBAAA;EEwDH;AFrDC;;;EAGE,2BAAA;EACA,wBAAA;EEuDH;AFtCD;EGtDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEkFD;AFhFC;;EAEE,2BAAA;EACA,8BAAA;EEkFH;AF/EC;;EAEE,2BAAA;EACA,uBAAA;EEiFH;AF9EC;;;EAGE,2BAAA;EACA,wBAAA;EEgFH;AF9DD;EGvDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EE2GD;AFzGC;;EAEE,2BAAA;EACA,8BAAA;EE2GH;AFxGC;;EAEE,2BAAA;EACA,uBAAA;EE0GH;AFvGC;;;EAGE,2BAAA;EACA,wBAAA;EEyGH;AFtFD;EGxDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEoID;AFlIC;;EAEE,2BAAA;EACA,8BAAA;EEoIH;AFjIC;;EAEE,2BAAA;EACA,uBAAA;EEmIH;AFhIC;;;EAGE,2BAAA;EACA,wBAAA;EEkIH;AFxGD;;EChBE,oDAAA;EACQ,4CAAA;EC4HT;AFnGD;;EGzEI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHwEF,2BAAA;EEyGD;AFvGD;;;EG9EI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8EF,2BAAA;EE6GD;AFpGD;EG3FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EJ6GA,oBAAA;EC/CA,6FAAA;EACQ,qFAAA;EC0JT;AF/GD;;EG3FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,0DAAA;EACQ,kDAAA;ECoKT;AF5GD;;EAEE,gDAAA;EE8GD;AF1GD;EG9GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EF+OD;AFlHD;;EG9GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,yDAAA;EACQ,iDAAA;EC0LT;AF5HD;;EAYI,2CAAA;EEoHH;AF/GD;;;EAGE,kBAAA;EEiHD;AF5FD;EAfI;;;IAGE,aAAA;IG3IF,0EAAA;IACA,qEAAA;IACA,+FAAA;IAAA,wEAAA;IACA,6BAAA;IACA,wHAAA;ID0PD;EACF;AFxGD;EACE,+CAAA;ECzGA,4FAAA;EACQ,oFAAA;ECoNT;AFhGD;EGpKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EE4GD;AFvGD;EGrKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EEoHD;AF9GD;EGtKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EE4HD;AFrHD;EGvKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EEoID;AFrHD;EG/KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDuSH;AFlHD;EGzLI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED8SH;AFxHD;EG1LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDqTH;AF9HD;EG3LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED4TH;AFpID;EG5LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDmUH;AF1ID;EG7LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED0UH;AF7ID;EGhKI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDgTH;AFzID;EACE,oBAAA;EC5JA,oDAAA;EACQ,4CAAA;ECwST;AF1ID;;;EAGE,+BAAA;EGjNE,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH+MF,uBAAA;EEgJD;AFrJD;;;EAQI,mBAAA;EEkJH;AFxID;ECjLE,mDAAA;EACQ,2CAAA;EC4TT;AFlID;EG1OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED+WH;AFxID;EG3OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDsXH;AF9ID;EG5OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED6XH;AFpJD;EG7OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDoYH;AF1JD;EG9OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED2YH;AFhKD;EG/OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDkZH;AFhKD;EGtPI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHoPF,uBAAA;ECzMA,2FAAA;EACQ,mFAAA;ECgXT",
12 | "file": "bootstrap-theme.css",
13 | "sourcesContent": [
14 | "\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &:disabled,\n &[disabled] {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n",
15 | "// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n",
16 | ".btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default:disabled,\n.btn-default[disabled] {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary:disabled,\n.btn-primary[disabled] {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success:disabled,\n.btn-success[disabled] {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info:disabled,\n.btn-info[disabled] {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning:disabled,\n.btn-warning[disabled] {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger:disabled,\n.btn-danger[disabled] {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n 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);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */",
17 | "// Gradients\n\n#gradient {\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 // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\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 // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n",
18 | "// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"
19 | ]
20 | }
--------------------------------------------------------------------------------
/css/bootstrap-theme.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.2 (http://getbootstrap.com)
3 | * Copyright 2011-2015 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */
6 | .btn-danger, .btn-default, .btn-info, .btn-primary, .btn-success, .btn-warning {
7 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
8 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
9 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075)
10 | }
11 |
12 | .btn-danger.active, .btn-danger:active, .btn-default.active, .btn-default:active, .btn-info.active, .btn-info:active, .btn-primary.active, .btn-primary:active, .btn-success.active, .btn-success:active, .btn-warning.active, .btn-warning:active {
13 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
14 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125)
15 | }
16 |
17 | .btn-danger .badge, .btn-default .badge, .btn-info .badge, .btn-primary .badge, .btn-success .badge, .btn-warning .badge {
18 | text-shadow: none
19 | }
20 |
21 | .btn.active, .btn:active {
22 | background-image: none
23 | }
24 |
25 | .btn-default {
26 | text-shadow: 0 1px 0 #fff;
27 | background-image: -webkit-linear-gradient(top, #fff 0, #e0e0e0 100%);
28 | background-image: -o-linear-gradient(top, #fff 0, #e0e0e0 100%);
29 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
30 | background-image: linear-gradient(to bottom, #fff 0, #e0e0e0 100%);
31 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
32 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
33 | background-repeat: repeat-x;
34 | border-color: #dbdbdb;
35 | border-color: #ccc
36 | }
37 |
38 | .btn-default:focus, .btn-default:hover {
39 | background-color: #e0e0e0;
40 | background-position: 0 -15px
41 | }
42 |
43 | .btn-default.active, .btn-default:active {
44 | background-color: #e0e0e0;
45 | border-color: #dbdbdb
46 | }
47 |
48 | .btn-default.disabled, .btn-default:disabled, .btn-default[disabled] {
49 | background-color: #e0e0e0;
50 | background-image: none
51 | }
52 |
53 | .btn-primary {
54 | background-image: -webkit-linear-gradient(top, #337ab7 0, #265a88 100%);
55 | background-image: -o-linear-gradient(top, #337ab7 0, #265a88 100%);
56 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
57 | background-image: linear-gradient(to bottom, #337ab7 0, #265a88 100%);
58 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
59 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
60 | background-repeat: repeat-x;
61 | border-color: #245580
62 | }
63 |
64 | .btn-primary:focus, .btn-primary:hover {
65 | background-color: #265a88;
66 | background-position: 0 -15px
67 | }
68 |
69 | .btn-primary.active, .btn-primary:active {
70 | background-color: #265a88;
71 | border-color: #245580
72 | }
73 |
74 | .btn-primary.disabled, .btn-primary:disabled, .btn-primary[disabled] {
75 | background-color: #265a88;
76 | background-image: none
77 | }
78 |
79 | .btn-success {
80 | background-image: -webkit-linear-gradient(top, #5cb85c 0, #419641 100%);
81 | background-image: -o-linear-gradient(top, #5cb85c 0, #419641 100%);
82 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
83 | background-image: linear-gradient(to bottom, #5cb85c 0, #419641 100%);
84 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
85 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
86 | background-repeat: repeat-x;
87 | border-color: #3e8f3e
88 | }
89 |
90 | .btn-success:focus, .btn-success:hover {
91 | background-color: #419641;
92 | background-position: 0 -15px
93 | }
94 |
95 | .btn-success.active, .btn-success:active {
96 | background-color: #419641;
97 | border-color: #3e8f3e
98 | }
99 |
100 | .btn-success.disabled, .btn-success:disabled, .btn-success[disabled] {
101 | background-color: #419641;
102 | background-image: none
103 | }
104 |
105 | .btn-info {
106 | background-image: -webkit-linear-gradient(top, #5bc0de 0, #2aabd2 100%);
107 | background-image: -o-linear-gradient(top, #5bc0de 0, #2aabd2 100%);
108 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
109 | background-image: linear-gradient(to bottom, #5bc0de 0, #2aabd2 100%);
110 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
111 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
112 | background-repeat: repeat-x;
113 | border-color: #28a4c9
114 | }
115 |
116 | .btn-info:focus, .btn-info:hover {
117 | background-color: #2aabd2;
118 | background-position: 0 -15px
119 | }
120 |
121 | .btn-info.active, .btn-info:active {
122 | background-color: #2aabd2;
123 | border-color: #28a4c9
124 | }
125 |
126 | .btn-info.disabled, .btn-info:disabled, .btn-info[disabled] {
127 | background-color: #2aabd2;
128 | background-image: none
129 | }
130 |
131 | .btn-warning {
132 | background-image: -webkit-linear-gradient(top, #f0ad4e 0, #eb9316 100%);
133 | background-image: -o-linear-gradient(top, #f0ad4e 0, #eb9316 100%);
134 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
135 | background-image: linear-gradient(to bottom, #f0ad4e 0, #eb9316 100%);
136 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
137 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
138 | background-repeat: repeat-x;
139 | border-color: #e38d13
140 | }
141 |
142 | .btn-warning:focus, .btn-warning:hover {
143 | background-color: #eb9316;
144 | background-position: 0 -15px
145 | }
146 |
147 | .btn-warning.active, .btn-warning:active {
148 | background-color: #eb9316;
149 | border-color: #e38d13
150 | }
151 |
152 | .btn-warning.disabled, .btn-warning:disabled, .btn-warning[disabled] {
153 | background-color: #eb9316;
154 | background-image: none
155 | }
156 |
157 | .btn-danger {
158 | background-image: -webkit-linear-gradient(top, #d9534f 0, #c12e2a 100%);
159 | background-image: -o-linear-gradient(top, #d9534f 0, #c12e2a 100%);
160 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
161 | background-image: linear-gradient(to bottom, #d9534f 0, #c12e2a 100%);
162 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
163 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
164 | background-repeat: repeat-x;
165 | border-color: #b92c28
166 | }
167 |
168 | .btn-danger:focus, .btn-danger:hover {
169 | background-color: #c12e2a;
170 | background-position: 0 -15px
171 | }
172 |
173 | .btn-danger.active, .btn-danger:active {
174 | background-color: #c12e2a;
175 | border-color: #b92c28
176 | }
177 |
178 | .btn-danger.disabled, .btn-danger:disabled, .btn-danger[disabled] {
179 | background-color: #c12e2a;
180 | background-image: none
181 | }
182 |
183 | .img-thumbnail, .thumbnail {
184 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
185 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075)
186 | }
187 |
188 | .dropdown-menu > li > a:focus, .dropdown-menu > li > a:hover {
189 | background-color: #e8e8e8;
190 | background-image: -webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);
191 | background-image: -o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);
192 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
193 | background-image: linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);
194 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
195 | background-repeat: repeat-x
196 | }
197 |
198 | .dropdown-menu > .active > a, .dropdown-menu > .active > a:focus, .dropdown-menu > .active > a:hover {
199 | background-color: #2e6da4;
200 | background-image: -webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);
201 | background-image: -o-linear-gradient(top, #337ab7 0, #2e6da4 100%);
202 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
203 | background-image: linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);
204 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
205 | background-repeat: repeat-x
206 | }
207 |
208 | .navbar-default {
209 | background-image: -webkit-linear-gradient(top, #fff 0, #f8f8f8 100%);
210 | background-image: -o-linear-gradient(top, #fff 0, #f8f8f8 100%);
211 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
212 | background-image: linear-gradient(to bottom, #fff 0, #f8f8f8 100%);
213 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
214 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
215 | background-repeat: repeat-x;
216 | border-radius: 4px;
217 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
218 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075)
219 | }
220 |
221 | .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .open > a {
222 | background-image: -webkit-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);
223 | background-image: -o-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);
224 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
225 | background-image: linear-gradient(to bottom, #dbdbdb 0, #e2e2e2 100%);
226 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
227 | background-repeat: repeat-x;
228 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
229 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075)
230 | }
231 |
232 | .navbar-brand, .navbar-nav > li > a {
233 | text-shadow: 0 1px 0 rgba(255, 255, 255, .25)
234 | }
235 |
236 | .navbar-inverse {
237 | background-image: -webkit-linear-gradient(top, #3c3c3c 0, #222 100%);
238 | background-image: -o-linear-gradient(top, #3c3c3c 0, #222 100%);
239 | background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
240 | background-image: linear-gradient(to bottom, #3c3c3c 0, #222 100%);
241 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
242 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
243 | background-repeat: repeat-x
244 | }
245 |
246 | .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .open > a {
247 | background-image: -webkit-linear-gradient(top, #080808 0, #0f0f0f 100%);
248 | background-image: -o-linear-gradient(top, #080808 0, #0f0f0f 100%);
249 | background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
250 | background-image: linear-gradient(to bottom, #080808 0, #0f0f0f 100%);
251 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
252 | background-repeat: repeat-x;
253 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
254 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25)
255 | }
256 |
257 | .navbar-inverse .navbar-brand, .navbar-inverse .navbar-nav > li > a {
258 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .25)
259 | }
260 |
261 | .navbar-fixed-bottom, .navbar-fixed-top, .navbar-static-top {
262 | border-radius: 0
263 | }
264 |
265 | @media (max-width: 767px) {
266 | .navbar .navbar-nav .open .dropdown-menu > .active > a, .navbar .navbar-nav .open .dropdown-menu > .active > a:focus, .navbar .navbar-nav .open .dropdown-menu > .active > a:hover {
267 | color: #fff;
268 | background-image: -webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);
269 | background-image: -o-linear-gradient(top, #337ab7 0, #2e6da4 100%);
270 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
271 | background-image: linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);
272 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
273 | background-repeat: repeat-x
274 | }
275 | }
276 |
277 | .alert {
278 | text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
279 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
280 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05)
281 | }
282 |
283 | .alert-success {
284 | background-image: -webkit-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);
285 | background-image: -o-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);
286 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
287 | background-image: linear-gradient(to bottom, #dff0d8 0, #c8e5bc 100%);
288 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
289 | background-repeat: repeat-x;
290 | border-color: #b2dba1
291 | }
292 |
293 | .alert-info {
294 | background-image: -webkit-linear-gradient(top, #d9edf7 0, #b9def0 100%);
295 | background-image: -o-linear-gradient(top, #d9edf7 0, #b9def0 100%);
296 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
297 | background-image: linear-gradient(to bottom, #d9edf7 0, #b9def0 100%);
298 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
299 | background-repeat: repeat-x;
300 | border-color: #9acfea
301 | }
302 |
303 | .alert-warning {
304 | background-image: -webkit-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);
305 | background-image: -o-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);
306 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
307 | background-image: linear-gradient(to bottom, #fcf8e3 0, #f8efc0 100%);
308 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
309 | background-repeat: repeat-x;
310 | border-color: #f5e79e
311 | }
312 |
313 | .alert-danger {
314 | background-image: -webkit-linear-gradient(top, #f2dede 0, #e7c3c3 100%);
315 | background-image: -o-linear-gradient(top, #f2dede 0, #e7c3c3 100%);
316 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
317 | background-image: linear-gradient(to bottom, #f2dede 0, #e7c3c3 100%);
318 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
319 | background-repeat: repeat-x;
320 | border-color: #dca7a7
321 | }
322 |
323 | .progress {
324 | background-image: -webkit-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);
325 | background-image: -o-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);
326 | background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
327 | background-image: linear-gradient(to bottom, #ebebeb 0, #f5f5f5 100%);
328 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
329 | background-repeat: repeat-x
330 | }
331 |
332 | .progress-bar {
333 | background-image: -webkit-linear-gradient(top, #337ab7 0, #286090 100%);
334 | background-image: -o-linear-gradient(top, #337ab7 0, #286090 100%);
335 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
336 | background-image: linear-gradient(to bottom, #337ab7 0, #286090 100%);
337 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
338 | background-repeat: repeat-x
339 | }
340 |
341 | .progress-bar-success {
342 | background-image: -webkit-linear-gradient(top, #5cb85c 0, #449d44 100%);
343 | background-image: -o-linear-gradient(top, #5cb85c 0, #449d44 100%);
344 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
345 | background-image: linear-gradient(to bottom, #5cb85c 0, #449d44 100%);
346 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
347 | background-repeat: repeat-x
348 | }
349 |
350 | .progress-bar-info {
351 | background-image: -webkit-linear-gradient(top, #5bc0de 0, #31b0d5 100%);
352 | background-image: -o-linear-gradient(top, #5bc0de 0, #31b0d5 100%);
353 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
354 | background-image: linear-gradient(to bottom, #5bc0de 0, #31b0d5 100%);
355 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
356 | background-repeat: repeat-x
357 | }
358 |
359 | .progress-bar-warning {
360 | background-image: -webkit-linear-gradient(top, #f0ad4e 0, #ec971f 100%);
361 | background-image: -o-linear-gradient(top, #f0ad4e 0, #ec971f 100%);
362 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
363 | background-image: linear-gradient(to bottom, #f0ad4e 0, #ec971f 100%);
364 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
365 | background-repeat: repeat-x
366 | }
367 |
368 | .progress-bar-danger {
369 | background-image: -webkit-linear-gradient(top, #d9534f 0, #c9302c 100%);
370 | background-image: -o-linear-gradient(top, #d9534f 0, #c9302c 100%);
371 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
372 | background-image: linear-gradient(to bottom, #d9534f 0, #c9302c 100%);
373 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
374 | background-repeat: repeat-x
375 | }
376 |
377 | .progress-bar-striped {
378 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
379 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
380 | background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent)
381 | }
382 |
383 | .list-group {
384 | border-radius: 4px;
385 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
386 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075)
387 | }
388 |
389 | .list-group-item.active, .list-group-item.active:focus, .list-group-item.active:hover {
390 | text-shadow: 0 -1px 0 #286090;
391 | background-image: -webkit-linear-gradient(top, #337ab7 0, #2b669a 100%);
392 | background-image: -o-linear-gradient(top, #337ab7 0, #2b669a 100%);
393 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
394 | background-image: linear-gradient(to bottom, #337ab7 0, #2b669a 100%);
395 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
396 | background-repeat: repeat-x;
397 | border-color: #2b669a
398 | }
399 |
400 | .list-group-item.active .badge, .list-group-item.active:focus .badge, .list-group-item.active:hover .badge {
401 | text-shadow: none
402 | }
403 |
404 | .panel {
405 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
406 | box-shadow: 0 1px 2px rgba(0, 0, 0, .05)
407 | }
408 |
409 | .panel-default > .panel-heading {
410 | background-image: -webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);
411 | background-image: -o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);
412 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
413 | background-image: linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);
414 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
415 | background-repeat: repeat-x
416 | }
417 |
418 | .panel-primary > .panel-heading {
419 | background-image: -webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);
420 | background-image: -o-linear-gradient(top, #337ab7 0, #2e6da4 100%);
421 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
422 | background-image: linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);
423 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
424 | background-repeat: repeat-x
425 | }
426 |
427 | .panel-success > .panel-heading {
428 | background-image: -webkit-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);
429 | background-image: -o-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);
430 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
431 | background-image: linear-gradient(to bottom, #dff0d8 0, #d0e9c6 100%);
432 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
433 | background-repeat: repeat-x
434 | }
435 |
436 | .panel-info > .panel-heading {
437 | background-image: -webkit-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);
438 | background-image: -o-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);
439 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
440 | background-image: linear-gradient(to bottom, #d9edf7 0, #c4e3f3 100%);
441 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
442 | background-repeat: repeat-x
443 | }
444 |
445 | .panel-warning > .panel-heading {
446 | background-image: -webkit-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);
447 | background-image: -o-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);
448 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
449 | background-image: linear-gradient(to bottom, #fcf8e3 0, #faf2cc 100%);
450 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
451 | background-repeat: repeat-x
452 | }
453 |
454 | .panel-danger > .panel-heading {
455 | background-image: -webkit-linear-gradient(top, #f2dede 0, #ebcccc 100%);
456 | background-image: -o-linear-gradient(top, #f2dede 0, #ebcccc 100%);
457 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
458 | background-image: linear-gradient(to bottom, #f2dede 0, #ebcccc 100%);
459 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
460 | background-repeat: repeat-x
461 | }
462 |
463 | .well {
464 | background-image: -webkit-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);
465 | background-image: -o-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);
466 | background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
467 | background-image: linear-gradient(to bottom, #e8e8e8 0, #f5f5f5 100%);
468 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
469 | background-repeat: repeat-x;
470 | border-color: #dcdcdc;
471 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
472 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1)
473 | }
--------------------------------------------------------------------------------
/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hi5z/vkbot/56b7e9a09f657161c0c08f9268e61994030fee98/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hi5z/vkbot/56b7e9a09f657161c0c08f9268e61994030fee98/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hi5z/vkbot/56b7e9a09f657161c0c08f9268e61994030fee98/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hi5z/vkbot/56b7e9a09f657161c0c08f9268e61994030fee98/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/index.php:
--------------------------------------------------------------------------------
1 | $config['app_id'],
9 | 'api_secret' => $config['app_secret'],
10 | 'access_token' => $config['token']
11 |
12 | );
13 |
14 | try {
15 |
16 |
17 | $vk = new models\API($vk_config);
18 | $accountinfo = $vk->getUserInfo();
19 | $friendsget = $vk->getFriendsRequest();
20 | $vk->setOnline();
21 |
22 |
23 | } catch (VK\VKException $error) {
24 | echo $error->getMessage();
25 | exit;
26 | }
27 | ?>
28 |
29 |
30 |
31 | Бот - = $accountinfo['first_name'] ?> = $accountinfo['last_name'] ?>
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
Информация
97 |
Автоматический чат?
98 |
Рандомные репосты?
99 |
Автоподтверждение друзей?
100 |
101 |
102 |
103 |
= $accountinfo['first_name'] ?> = $accountinfo['last_name'] ?>
104 |
Статистика :
105 | Статус: if ($accountinfo['online'] == '1') {
106 | echo '
Online ';
107 | } else {
108 | echo '
Offline ';
109 | } ?>
110 | Друзей: = $accountinfo['counters']['friends'] ?>
111 | Друзей онлайн: = $accountinfo['counters']['online_friends'] ?>
112 | Подписчиков: = $accountinfo['counters']['followers'] ?>
113 | Авточат сейчас:
Выключен
114 |
115 |
Заявки в друзья
116 |
117 | for ($i = 0; $i < count($friendsget); $i++) {
118 |
119 | $friendinfo = curl("https://api.vk.com/method/users.get?fields=photo_max&user_ids=" . $friendsget[$i]);
120 | ?>
121 |
133 |
134 | } ?>
135 |
136 |
137 |
143 |
144 |
145 |
Лента
146 |
Для того, чтобы включить автоматический репостинг - воспользуйтесь кнопкой слева.
147 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
--------------------------------------------------------------------------------
/models/API.php:
--------------------------------------------------------------------------------
1 |
5 | * @date 3/20/2015
6 | * @time 2:29 PM
7 | * @link http://exileed.com
8 | */
9 |
10 | namespace models;
11 |
12 | use VK\VK;
13 |
14 | class API
15 | {
16 |
17 | private $vk;
18 |
19 | public function __construct($config)
20 | {
21 |
22 | $this->vk = new VK($config['app_id'], $config['api_secret'], $config['access_token']);
23 |
24 |
25 | }
26 |
27 | /**
28 | * @return array
29 | */
30 | public function getUserInfo($user_id = null)
31 | {
32 | $params = [
33 | 'name_case' => 'nom',
34 | 'fields' => 'photo_max,online,counters,sex',
35 | ];
36 | if ($user_id != null)
37 | $params['user_ids'] = $user_id;
38 |
39 | $result = $this->vk->api('users.get', $params);
40 |
41 | return $result['response'][0];
42 |
43 |
44 | }
45 |
46 | /**
47 | * @return array
48 | */
49 | public function getFriendsRequest()
50 | {
51 |
52 | $result = $this->vk->api('friends.getRequests');
53 |
54 | return $result['response'];
55 | }
56 |
57 | /**
58 | * @return bool
59 | */
60 | public function setOnline()
61 | {
62 |
63 | $result = $this->vk->api('stats.trackVisitor');
64 |
65 | return $result;
66 | }
67 |
68 |
69 | /**
70 | * @return array
71 | */
72 | public function getMessage($count = 20)
73 | {
74 |
75 | $result = $this->vk->api('messages.getDialogs', array(
76 | 'count' => $count,
77 | 'out' => '0',
78 | ));
79 |
80 | return $result['response'];
81 |
82 | }
83 |
84 | public function addFriend($user_id)
85 | {
86 |
87 | $result = $this->vk->api('friends.add', [
88 | 'user_id' => $user_id,
89 | ]);
90 |
91 | return $result;
92 |
93 |
94 | }
95 |
96 | public function markAsRead($user_id)
97 | {
98 |
99 | $result = $this->vk->api('messages.markAsRead', array(
100 | 'peer_id' => $user_id,
101 | ));
102 |
103 | return $result;
104 |
105 | }
106 |
107 | public function setActivity($user_id, $type = 'typing')
108 | {
109 |
110 | $request = $this->vk->api('messages.setActivity', [
111 | 'type' => $type,
112 | 'user_id' => $user_id,
113 | ]);
114 |
115 | return $request;
116 |
117 | }
118 |
119 | public function sendMessages($user_id, $message, $params = null)
120 | {
121 |
122 | $options = [
123 | 'message' => $message,
124 | 'uid' => $user_id
125 | ];
126 |
127 | if ($params != null)
128 | $options .= $params;
129 |
130 | $request = $this->vk->api('messages.send', $options);
131 |
132 | return $request;
133 |
134 |
135 | }
136 |
137 |
138 | }
--------------------------------------------------------------------------------
/models/Iii.php:
--------------------------------------------------------------------------------
1 |
5 | * @date 3/20/2015
6 | * @time 5:05 PM
7 | * @link http://exileed.com
8 | */
9 |
10 |
11 | namespace models;
12 |
13 |
14 | class Iii
15 | {
16 |
17 |
18 | private $key = "some very-very long string without any non-latin characters due to different string representations inside of variable programming languages"; // здесь ничего никогда не нужно менять. просто не трогайте
19 |
20 |
21 | public function __construct($key = null)
22 | {
23 |
24 |
25 | if (!is_null($key))
26 | $this->key = $key;
27 |
28 |
29 | }
30 |
31 | public function sendMsg($chat_id = 'f3e4de9e-261a-4833-97e6-1827b63c1099', $text)
32 | {
33 |
34 | $whattosend = '["' . $chat_id . '","' . urldecode($text) . '"]';
35 | $hashed = $this->encrypt(base64_encode($whattosend));
36 |
37 |
38 | $myCurl = curl_init();
39 | curl_setopt_array($myCurl, array(
40 | CURLOPT_URL => 'http://iii.ru/api/2.0/json/Chat.request',
41 | CURLOPT_RETURNTRANSFER => true,
42 | CURLOPT_POST => true,
43 | CURLOPT_POSTFIELDS => $hashed,
44 | ));
45 | $response = curl_exec($myCurl);
46 | curl_close($myCurl);
47 |
48 |
49 | $answer = json_decode(base64_decode($this->decrypt($response)));
50 |
51 | return $answer->result->text->value;
52 |
53 |
54 | }
55 |
56 | function initMe($vkid, $botid)
57 | {
58 | $getuid = file_get_contents('http://iii.ru/api/2.0/json/Chat.init/' . $botid . '/' . $vkid);
59 | $data = json_decode(base64_decode($this->decrypt($getuid)));
60 |
61 | return $data->result->cuid;
62 | }
63 |
64 | private function decrypt($encrypted_message)
65 | {
66 | $msg = base64_decode($encrypted_message);
67 | $ml = strlen($msg);
68 | $kl = strlen($this->key);
69 | $newmsg = "";
70 |
71 | for ($i = 0; $i < $ml; $i++) {
72 | $newmsg = $newmsg . ($msg[$i] ^ $this->key[$i % $kl]);
73 | }
74 |
75 | return $newmsg;
76 | }
77 |
78 | private function encrypt($message)
79 | {
80 | $ml = strlen($message);
81 | $kl = strlen($this->key);
82 | $newmsg = "";
83 |
84 | for ($i = 0; $i < $ml; $i++) {
85 | $newmsg = $newmsg . ($message[$i] ^ $this->key[$i % $kl]);
86 | }
87 |
88 | return base64_encode($newmsg);
89 | }
90 |
91 |
92 | }
--------------------------------------------------------------------------------
/models/Mail.php:
--------------------------------------------------------------------------------
1 |
5 | * @date 3/20/2015
6 | * @time 2:23 PM
7 | * @link http://exileed.com
8 | */
9 |
10 | namespace models;
11 |
12 |
13 | class Mail
14 | {
15 |
16 |
17 | public function send($to, $subject, $message, $filename = null)
18 | {
19 |
20 |
21 | $boundary = "---";
22 | $headers = "Content-Type: multipart/mixed; boundary=\"$boundary\"";
23 | $body = "--$boundary\n";
24 | $body .= "Content-type: text/html; charset='utf-8'\n";
25 | $body .= "Content-Transfer-Encoding: quoted-printablenn";
26 |
27 | if ($filename != null)
28 | $body .= "Content-Disposition: attachment; filename==?utf-8?B?" . base64_encode($filename) . "?=\n\n";
29 |
30 | $body .= $message . "\n";
31 | $body .= "--$boundary\n";
32 |
33 | if ($filename != null) {
34 | $file = fopen($filename, "r");
35 | $text = fread($file, filesize($filename));
36 | fclose($file);
37 | $body .= "Content-Type: application/octet-stream; name==?utf-8?B?" . base64_encode($filename) . "?=\n";
38 | $body .= "Content-Transfer-Encoding: base64\n";
39 | $body .= "Content-Disposition: attachment; filename==?utf-8?B?" . base64_encode($filename) . "?=\n\n";
40 | }
41 | $body .= chunk_split(base64_encode($message)) . "\n";
42 | $body .= "--" . $boundary . "--\n";
43 | mail($to, $subject, $body, $headers);
44 |
45 |
46 | }
47 |
48 |
49 | }
--------------------------------------------------------------------------------
/models/antigate.php:
--------------------------------------------------------------------------------
1 | ") !== false) {
133 | if ($is_verbose) echo "server returned error: $result\n";
134 | return false;
135 | } else {
136 | $ex = explode("|", $result);
137 | $captcha_id = $ex[1];
138 | if ($is_verbose) echo "captcha sent, got captcha ID $captcha_id\n";
139 | $waittime = 0;
140 | if ($is_verbose) echo "waiting for $rtimeout seconds\n";
141 | sleep($rtimeout);
142 | while (true) {
143 | $result = file_get_contents('http://antigate.com/res.php?key=' . $apikey . '&action=get&id=' . $captcha_id);
144 | if (strpos($result, 'ERROR') !== false) {
145 | if ($is_verbose) echo "server returned error: $result\n";
146 | return false;
147 | }
148 | if ($result == "CAPCHA_NOT_READY") {
149 | if ($is_verbose) echo "captcha is not ready yet\n";
150 | $waittime += $rtimeout;
151 | if ($waittime > $mtimeout) {
152 | if ($is_verbose) echo "timelimit ($mtimeout) hit\n";
153 | break;
154 | }
155 | if ($is_verbose) echo "waiting for $rtimeout seconds\n";
156 | sleep($rtimeout);
157 | } else {
158 | $ex = explode('|', $result);
159 | if (trim($ex[0]) == 'OK') return trim($ex[1]);
160 | }
161 | }
162 |
163 | return false;
164 | }
165 | }
166 |
167 | ?>
--------------------------------------------------------------------------------
/preloader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hi5z/vkbot/56b7e9a09f657161c0c08f9268e61994030fee98/preloader.gif
--------------------------------------------------------------------------------
/update.php:
--------------------------------------------------------------------------------
1 |
5 | * @date 3/20/2015
6 | * @time 3:55 PM
7 | * @link http://exileed.com
8 | */
9 |
10 | require_once "config.php";
11 | require_once "vendor/autoload.php";
12 |
13 | sleep(6);
14 |
15 |
16 | $vk_config = array(
17 | 'app_id' => $config['app_id'],
18 | 'api_secret' => $config['app_secret'],
19 | 'access_token' => $config['token']
20 |
21 | );
22 |
23 | try {
24 |
25 | $vk = new \models\API($vk_config);
26 | $iii = new \models\Iii();
27 |
28 |
29 | // Получаем список последних 20 сообщений //
30 | $messages = $vk->getMessage();
31 |
32 | // Получаем сообщения, на которые мы еще не отвечали //
33 |
34 | // Ставим статус Online //
35 | $vk->setOnline();
36 |
37 | // Выводим сообщения //
38 | // Отвечаем на 10 сообщений //
39 | $i = 0;
40 | foreach ((array)$messages as $key => $value) {
41 | $i++;
42 |
43 | $uid = $value['uid'];
44 | $message = $value['body'];
45 |
46 |
47 | if ($message[0] == '/') {
48 | $vk->markAsRead($uid);
49 |
50 | $vk->setActivity($uid);
51 |
52 | sleep(1);
53 |
54 | // Не знаю зачем это нужно посылать, но пусть будет
55 | $send = $vk->sendMessages($value['uid'], cmd(substr($message, 1)));
56 |
57 | } elseif ($value['out'] == '0' AND !in_array($uid, $debug)) {
58 | // Сделаем выборку из базы //
59 | $result = $link->query("SELECT * FROM clients WHERE vkid=" . $uid);
60 | if ($result != false) {
61 | $row = mysqli_fetch_array($result);
62 | }
63 |
64 | if ($row['vkid'] == $uid AND $result != false) {
65 |
66 | // Если есть в базе отсылаем сообщение //
67 |
68 | $vk->markAsRead($uid);
69 | $vk->setActivity($uid);
70 | sleep(1);
71 |
72 | $repquotes = array("\"", "\'");
73 | $filtered = addslashes(str_replace($repquotes, '', $value['body']));
74 |
75 | $mes = $iii->sendMsg($row['chatid'], urlencode($filtered));
76 |
77 | $send = $vk->sendMessages($value['uid'], strip_tags($mes));
78 |
79 |
80 | if ($send['error']['error_code'] == '14' AND $config['antigate'] !== null) {
81 | // Загружаем капчу на сервер //
82 | file_put_contents("captcha/captcha.jpg", file_get_contents($send['error']['captcha_img']));
83 | // Уникальный ID капчи //
84 | $captcha['id'] = $send['error']['captcha_sid'];
85 | $captcha['key'] = recognize("captcha/captcha.jpg", $config['antigate'], false, "antigate.com");
86 |
87 |
88 | $captcha_array = [
89 | 'captcha_sid' => $captcha['id'],
90 | 'captcha_key' => $captcha['key'],
91 | ];
92 | // Повторяем отправку вместе с разгаданной капчей //
93 | $send = $vk->sendMessages($value['uid'], strip_tags($mes), $captcha_array);
94 |
95 |
96 | }
97 |
98 | if ($send['error']['error_code'] == '14' AND $config['antigate'] == null) {
99 |
100 | file_put_contents("captcha/captcha.jpg", file_get_contents($send['error']['captcha_img']));
101 |
102 | $captcha['id'] = $send['error']['captcha_sid'];
103 |
104 | (new \models\Mail())->send($config['email'], 'Капча', 'Капча чувак', "captcha/captcha.jpg");
105 |
106 | }
107 |
108 |
109 | // Если нет в базе - добавляем его //
110 | } else {
111 |
112 | $vkprofileinfo = $vk->getUserInfo($uid);
113 |
114 | $firstname = addslashes($vkprofileinfo['first_name']);
115 | $secondname = addslashes($vkprofileinfo['last_name']);
116 | $sex = $vkprofileinfo['sex'];
117 |
118 |
119 | $chatid = $iii->initMe($uid, $config['botid']);
120 |
121 | $insert = $link->query("INSERT INTO clients VALUES (null, '$firstname', '$secondname', '$sex', '$chatid', '$uid')") or die("Возникла проблемка..." . mysqli_error($link));
122 |
123 | // Находим новосозданное имя и ID сессии //
124 | $result2 = $link->query("SELECT firstname, chatid, sex FROM clients WHERE vkid=" . $uid);
125 | $row2 = mysqli_fetch_array($result2);
126 |
127 |
128 | $iii->sendMsg($row2['chatid'], urlencode('!botsetname ' . $row2['firstname']));
129 |
130 | // Устанавливаем пол //
131 | if ($row2['sex'] == '2') {
132 | $iii->sendMsg($row2['chatid'], urlencode('я мальчик'));
133 | } elseif ($row2['sex'] == '1') {
134 | $iii->sendMsg($row2['chatid'], urlencode('я девочка'));
135 | }
136 |
137 | }
138 |
139 | }
140 |
141 |
142 | }
143 | } catch (VK\VKException $error) {
144 | echo $error->getMessage();
145 | }
--------------------------------------------------------------------------------
/vk.api.php:
--------------------------------------------------------------------------------
1 | token = $token;
16 | }
17 |
18 | /**
19 | * Уведомить об онлайне
20 | */
21 | public function ping(){
22 | $this->request('account.setOnline');
23 | }
24 |
25 | /**
26 | * Получить список диалогов
27 | * @return mixed|null
28 | */
29 | public function dialogs(){
30 | return $this->request('messages.getDialogs',['count'=>10]);
31 | }
32 |
33 | /**
34 | * Получить список не прочитаных диалогов
35 | * @return array
36 | */
37 | public function unread(){
38 | $response = $this->request('messages.getDialogs',['count'=>10,'unread'=>1]);
39 | if(!property_exists($response,'response')){
40 | return array();
41 | }else{
42 | return $response->response->items;
43 | }
44 | }
45 |
46 | /**
47 | * Отметить как прочитаное
48 | * @param int $userID Идентификатор пользователя
49 | * @return mixed|null
50 | */
51 | public function markAsRead($userID){
52 | return $this->request('messages.markAsRead',['peer_id'=>$userID]);
53 | }
54 |
55 | /**
56 | * Показать активность
57 | * @param int $userID Идентификатор пользователя
58 | * @param string $type Тип уведомления
59 | * @return mixed|null
60 | */
61 | public function setActivity($userID,$type='typing'){
62 | return $this->request('messages.setActivity',['user_id'=>$userID,'type'=>$type]);
63 | }
64 |
65 | /**
66 | * Отправить сообщение пользователю
67 | * @param int $userID Идентификатор пользователя
68 | * @param string $message Сообщение
69 | * @return mixed|null
70 | */
71 | public function sendMessage($userID,$message){
72 | return $this->request('messages.send',['message'=>$message,'user_id'=>$userID]);
73 | }
74 |
75 | /**
76 | * Запрос к VK
77 | * @param string $method Метод
78 | * @param array $params Параметры
79 | * @return mixed|null
80 | */
81 | public function request($method,$params=array()){
82 | $url = 'https://api.vk.com/method/'.$method;
83 | $params['access_token']=$this->token;
84 | //$params['v']='5.14';
85 | return json_decode(file_get_contents($url.'?'.http_build_query($params)), true);
86 | }
87 | }
88 |
89 |
--------------------------------------------------------------------------------