[
  {
    "path": ".gitattributes",
    "content": "*.js linguist-language=PHP\n*.css linguist-language=PHP\n*.html linguist-language=PHP\n"
  },
  {
    "path": ".gitignore",
    "content": "/vendor/\ncomposer.lock\n"
  },
  {
    "path": "Func.php",
    "content": "<?php\nif (!function_exists('full_uri')) {\n\tfunction full_uri($uri, $param = []) {\n\t\treturn url(strtolower($uri), $param);\n\t}\n}\n\nif (!function_exists('extend')) {\n\t/**\n\t * 扩展数组\n\t *\n\t * @param $config\n\t * @param $default\n\t *\n\t * @return mixed\n\t */\n\tfunction extend($default, $config) {\n\t\tforeach ($default as $key => $val) {\n\t\t\tif (!isset($config[$key]) || $config[$key] === '') {\n\t\t\t\t$config[$key] = $val;\n\t\t\t} else if (is_array($config[$key])) {\n\t\t\t\t$config[$key] = extend($val, $config[$key]);\n\t\t\t}\n\t\t}\n\n\t\treturn $config;\n\t}\n}\n\nif (!function_exists('form_radios')) {\n\t/**\n\t * 水平radio   改良\n\t *\n\t * @param $name\n\t * @param $data\n\t * @param int $checked_value\n\t *\n\t * @return mixed|string\n\t */\n\tfunction form_radios($name, $data, $checked_value = 0) {\n\t\t$html = [];\n\t\t$i = 0;\n\t\tforeach ($data as $key => $val) {\n\n\t\t\tif($val == (string)$checked_value || ($checked_value==0 && $i++ == 0)){\n\t\t\t\t$html[] = '<label class=\"radio-inline\"><input name=\"' . $name . '\" type=\"radio\" value=\"' . $key . '\"  checked>' . $val . '</label>';\n\t\t\t}else{\n\t\t\t\t$html[] = '<label class=\"radio-inline\"><input name=\"' . $name . '\" type=\"radio\" value=\"' . $key . '\" >' . $val . '</label>';\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t\n\n\t\treturn join('',$html);\n\t}\n}\n\nif (!function_exists('form_radio_rows')) {\n\t/**\n\t * 水平radio   改良\n\t *\n\t * @param $name\n\t * @param $data\n\t * @param int $checked_value\n\t *\n\t * @return mixed|string\n\t */\n\tfunction form_radio_rows($name, $data, $key = 'id', $val = 'name', $checked_value = 0) {\n\t\t$html = [];\n\t\tforeach ($data as  $item) {\n\n\t\t\tif($val == (string)$checked_value  ){\n\t\t\t\t$html[] = '<label class=\"radio-inline\"><input name=\"' . $name . '\" type=\"radio\" value=\"' . $item[$key] . '\"  checked>' . $item[$val] . '</label>';\n\t\t\t}else{\n\t\t\t\t$html[] = '<label class=\"radio-inline\"><input name=\"' . $name . '\" type=\"radio\" value=\"' . $item[$key] . '\" >' . $item[$val] . '</label>';\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t\n\n\t\treturn join('',$html);\n\t}\n}\n\nif (!function_exists('form_radio')) {\n\tfunction form_radio($name, $data, $checked_value = 0, $title) {\n\t\t$data = [\n\t\t\t'type' => 'radio',\n\t\t\t'title' => $title,\n\t\t\t'name' => $name,\n\t\t\t'data' => $data,\n\t\t\t'value' => $checked_value,\n\t\t];\n\n\t\treturn form_field($data);\n\t}\n}\n\nif (!function_exists('form_text2')) {\n\tfunction form_text2($name, $value = 0, $title, $help = '', $placeholder = '') {\n\t\t$data = [\n\t\t\t'type' => 'text',\n\t\t\t'title' => $title,\n\t\t\t'name' => $name,\n\t\t\t'data' => $data,\n\t\t\t'value' => $value,\n\t\t\t'help' => $help,\n\t\t\t'placeholder' => $placeholder,\n\t\t];\n\n\t\treturn form_field($data);\n\t}\n}\n\n//use Facades\\Smart\\Service\\WidgetService;\nfunction form_field($param) {\n\n\t$widgetService = Facades\\Smart\\Service\\WidgetService::make($param);\n\treturn $widgetService;\n}\n\nif (!function_exists(\"ajax_arr\")) {\n\t/**\n\t * 生成需要返回 ajax 数组\n\t *\n\t * @param $msg        //消息\n\t * @param int $code   //0 正常 , > 0 错误\n\t * @param array $data //需要传递的参数\n\t *\n\t * @return array\n\t */\n\tfunction ajax_arr($msg, $code = 500, $data = []) {\n\t\t$arr = [\n\t\t\t'msg' => $msg,\n\t\t\t'code' => $code,\n\t\t];\n\n\t\tif ($data !== '') {\n\t\t\t$arr['data'] = $data;\n\t\t}\n\n\t\treturn $arr;\n\t}\n}\n\nif (!function_exists('form_options')) {\n\t/**\n\t * 生成下拉选项\n\t *\n\t * @param $data\n\t * @param int $selected_value\n\t *\n\t * @return mixed|string\n\t */\n\tfunction form_options($data, $selected_value = -1) {\n\t\t$html = '';\n\t\tforeach ($data as $key => $val) {\n\t\t\t$html .= \"<option value='$key'>$val</option>\";\n\t\t}\n\n\t\tif ($selected_value >= 0) {\n\t\t\t$html = str_replace(\"value='$selected_value'\", \"value='$selected_value' selected\", $html);\n\t\t}\n\n\t\treturn $html;\n\t}\n\n}\n\nif (!function_exists('form_checkbox_rows')) {\n\t/**\n\t * checkbox\n\t *\n\t * @param $name\n\t * @param $data\n\t * @param string $key\n\t * @param string $val\n\t * @param int $checked_value\n\t *\n\t * @return mixed|string\n\t */\n\tfunction form_checkbox_rows($name, $data, $key = 'id', $val = 'name', $checked_value = 0) {\n\t\t$html = '';\n\t\tforeach ($data as $item) {\n\t\t\t$html .= '<label class=\"checkbox-inline\"><input name=\"' . $name . '[]\" type=\"checkbox\" value=\"' . $item[$key] . '\" >' .\n\t\t\t\t$item[$val] . '</label>';\n\t\t}\n\n\t\tif ($checked_value >= 0) {\n\t\t\t$html = str_replace('value=\"' . $checked_value . '\"', \"value='$checked_value' checked\", $html);\n\t\t}\n\n\t\treturn $html;\n\t}\n}\n\nif (!function_exists('str2pwd')) {\n\t/**\n\t * 字符串加密\n\t *\n\t * @param $str\n\t *\n\t * @return bool|string\n\t */\n\tfunction str2pwd($str) {\n\t\treturn password_hash($str, PASSWORD_BCRYPT, [\"cost\" => 10]);\n\t}\n}\n\nif (!function_exists('json')) {\n\n\tfunction json(Array $array) {\n\t\treturn response()->json($array);\n\t}\n\n}\nif (!function_exists('api_result')) {\n\n\tfunction api_result($msg, $code_or_data = 500, $data = []) {\n\t\t$result = [\n\t\t\t'msg' => $msg,\n\t\t];\n\n\t\tif (is_array($code_or_data)) {\n\t\t\t$result['code'] = 0;\n\t\t\t$data = array_merge($code_or_data, $data);\n\t\t} else {\n\t\t\t$result['code'] = $code_or_data;\n\t\t}\n\n\t\tif (!empty($data)) {\n\t\t\t$result['data'] = $data;\n\t\t}\n\n\t\treturn $result;\n\t}\n}\n\nif (!function_exists('rand_string')) {\n\t/**\n\t * 生成随机字符串\n\t *\n\t * @param $length\n\t *\n\t * @return string\n\t */\n\tfunction rand_string($length = 6) {\n\t\t$str = NULL;\n\t\t$strPol = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz\";\n\t\t$max = strlen($strPol) - 1;\n\n\t\tfor ($i = 0; $i < $length; $i++) {\n\t\t\t$str .= $strPol[rand(0, $max)]; // rand($min,$max)生成介于min和max两个数之间的一个随机整数\n\t\t}\n\n\t\treturn $str;\n\t}\n}\n\nif (!function_exists('form_options_rows')) {\n\t/**\n\t * 生成下拉选项 from rows\n\t *\n\t * @param $data\n\t * @param string $id\n\t * @param string $text\n\t * @param string $node_field\n\t * @param int $selected_value\n\t * @param array $dat\n\t *\n\t * @return mixed|string\n\t */\n\tfunction form_options_rows($data, $id = 'id', $text = \"name\", $node_field = \"children\", $selected_value = 0, $dat = []) {\n\t\t$html = '';\n\t\tforeach ($data as $row) {\n\t\t\t$value = $row->$id;\n\t\t\t$prefix = '';\n\t\t\tif (isset($row->level)) {\n\t\t\t\t$prefix = $row->level - 1 > 0 ? str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', $row->level - 1) . '└─ ' : ''; // ┗\n\t\t\t}\n\t\t\t$title = $prefix . $row->$text;\n\t\t\t$d = '';\n\t\t\tforeach ($dat as $p) {\n\t\t\t\t$d .= sprintf(' data-%s=\"%s\"', $p, $row[$p]);\n\t\t\t}\n\t\t\t$html .= sprintf('<option value=\"%s\" %s>%s</option>', $value, $d, $title);\n\n\t\t\tif (isset($row->$node_field)) {\n\t\t\t\t$html .= form_options_rows($row[$node_field], $id, $text, 0, $row->level + 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!empty($selected_value)) {\n\t\t\t$html = str_replace('value=\"' . $selected_value . '\"', 'value=\"' . $selected_value . '\" selected', $html);\n\t\t}\n\n\t\treturn $html;\n\t}\n\n}\n\nif (!function_exists('form_options_rows_group')) {\n\t/**\n\t * optgroup 显示 options\n\t *\n\t * @param $data\n\t * @param $valueField\n\t * @param $textField\n\t * @param $groupField\n\t *\n\t * @return string\n\t */\n\tfunction form_options_rows_group($data, $valueField = 'id', $textField = 'text', $groupField = 'type_text') {\n\t\t$newData = [];\n\t\tforeach ($data as $item) {\n\t\t\tif (array_key_exists($groupField, $item)) {\n\t\t\t\t$newData[$item[$groupField]][] = $item;\n\t\t\t}\n\t\t}\n\n\t\t$html = '';\n\t\tforeach ($newData as $key => $row) {\n\t\t\t$html .= '<optgroup label=\"' . $key . '\">';\n\t\t\tforeach ($row as $r) {\n\t\t\t\t$html .= '<option value=\"' . $r[$valueField] . '\">' . $r[$textField] . '</option> ';\n\t\t\t}\n\t\t\t$html .= '</optgroup> ';\n\t\t}\n\n\t\treturn $html;\n\t}\n}\n\nif (!function_exists('file_size')) {\n\tfunction file_size($size) {\n\t\t$unit = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\t\t$index = 0;\n\t\tdo {\n\t\t\t$size = $size / 1024;\n\t\t\t$index++;\n\t\t} while ($size >= 1024);\n\n\t\treturn round($size, 1) . $unit[$index];\n\t}\n}\n\nif (!function_exists('full_img_uri')) {\n\t/**\n\t * 返回图片绝对路径\n\t *\n\t * @param $imgUri\n\t *\n\t * @return string\n\t */\n\tfunction full_img_uri($imgUri) {\n\t\tif (config('backend.image.uploadType') == 'local') {\n\t\t\treturn route($imgUri, '', '', TRUE);\n\t\t}\n\n\t\treturn config('backend.image.imgUri') . $imgUri;\n\t}\n}\n\nif (!function_exists('css')) {\n\t/**\n\t * 返回图片绝对路径\n\t *\n\t * @param $imgUri\n\t *\n\t * @return string\n\t */\n\tfunction css() {\n\t\tif(class_exists(Mp\\Service\\Common\\Asset::class)){\n\t\t\treturn  Mp\\Service\\Common\\Asset::css();\n\t\t}\n\t\t\n\t}\n}\n\nif (!function_exists('js')) {\n\t/**\n\t * 返回图片绝对路径\n\t *\n\t * @param $imgUri\n\t *\n\t * @return string\n\t */\n\tfunction js() {\n\t\tif(class_exists(Mp\\Service\\Common\\Asset::class)){\n\t\t\treturn  Mp\\Service\\Common\\Asset::js();\n\t\t}\n\t}\n}\n\nif (!function_exists('script')) {\n\t/**\n\t * 返回图片绝对路径\n\t *\n\t * @param $imgUri\n\t *\n\t * @return string\n\t */\n\tfunction script() {\n\t\tif(class_exists(Mp\\Service\\Common\\Asset::class)){\n\t\t\treturn  Mp\\Service\\Common\\Asset::script();\n\t\t}\n\t}\n}\n\n\nif(!function_exists('human_filesize')){\n\t/**\n\t * 返回可读性更好的文件尺寸\n\t */\n\tfunction human_filesize($bytes, $decimals = 2)\n\t{\n\t    $size = ['B', 'kB', 'MB', 'GB', 'TB', 'PB'];\n\t    $factor = floor((strlen($bytes) - 1) / 3);\n\n\t    return sprintf(\"%.{$decimals}f\", $bytes / pow(1024, $factor)) .@$size[$factor];\n\t}\n}\n\nif(!function_exists('is_image')){\n\t/**\n\t * 判断文件的MIME类型是否为图片\n\t */\n\tfunction is_image($mimeType)\n\t{\n\t    return starts_with($mimeType, 'image/');\n\t}\n}"
  },
  {
    "path": "README.MD",
    "content": " laravel-smart\n---------\n\n- 项目的路由,视图文件均在扩展包内,默认的后台请不要作改动啦,项目主要的优势在于API接口的开发,自动生成标准的API文件格式\n- 普通web应用也能做,如果需要添加额外的路由,请直接在根目录下的 `routes/web.php`  `routes/api.php` 里进行添加.\n- 本项目的初衷是制作一个纯粹的扩展包,能安装即用,卸载即清.\n- 演示站点正在搭建中, 手册什么的也在计划编写,请关注本项目,以便了解项目的最新动态.\n大家可以积极提交 ISSUE \n- 为方便大家交流,以及项目代码bug反馈,大家可以添加QQ群 : _195857398_\n\n-  [演示地址](http://112.124.44.7/backend/index/index)\n     > 帐户 admin@admin.com 密码 123123\n     \n**简介**\n--------\n- 基于 laravel 5.5 \n- 系统管理平台\n- 商户管理平台\n- RBAC 用户权限管理\n- RESTful 接口\n- 微信接口\n\n\n安装步骤\n--------\n\n- 设置composer.json,找到config元素配置地方更改为如下\n\n      \"config\": {\n              \"preferred-install\": \"dist\",\n              \"sort-packages\": true,\n              \"optimize-autoloader\": true\n       },\"minimum-stability\": \"dev\",\n          \"repositories\": {\n              \"packagist\": {\n                  \"type\": \"composer\",\n                  \"url\": \"https://packagist.phpcomposer.com\"\n           }\n       }\n\n- 首先安装好laravel,并且设置好数据库连接\n\n    `composer require dominator88/laravel-smart:dev-master`\n    \n- 运行下面命令来发布资源,以及安装数据库\n    \n    `php artisan vendor:publish --provider=\"Smart\\SmartServiceProvider\"`\n\n    `php artisan vendor:publish --provider=\"Spatie\\Permission\\PermissionServiceProvider\" --tag=\"migrations\"`\n        \n    `php artisan make:auth`\n    \n    配置 config/backend.php,这里可以设置初始化超级管理员帐户,也可使用默认默认(不作 修改),在后面会提到默认配置的帐户名密码\n    \n    `php artisan smart:install`\n\n为权限认证添加 模块,并设置为当前认证模型,  更改 confit/auth.php 文件\n\n    <?php\n\n    return [\n    'defaults' => [\n        'guard' => 'admin',\n        'passwords' => 'users',\n    ],\n    'guards' => [\n            'web' => [\n                'driver' => 'session',\n                'provider' => 'users',\n            ],\n            'admin' => [\n                'driver' => 'session',\n                'provider' => 'admin',\n            ],\n    \n            'api' => [\n                'driver' => 'token',\n                'provider' => 'users',\n            ],\n        ],\n        'providers' => [\n                'users' => [\n                    'driver' => 'eloquent',\n                    'model' => App\\Models\\User::class,\n                ],\n                'admin' => [\n                    'driver' => 'eloquent',\n                    'model' => Smart\\Models\\SysUser::class,\n                ],\n        \n                // 'users' => [\n                //     'driver' => 'database',\n                //     'table' => 'users',\n                // ],\n            ],\n            'passwords' => [\n                    'users' => [\n                        'provider' => 'users',\n                        'table' => 'password_resets',\n                        'expire' => 60,\n                    ],\n                ],\n            \n            ];\n            \n### 图片上传设置            \n 图片上传设置,需要运行如下命令,为图片的路径建立软链接,如果安装环境为docker,需要自行进入项目目录bash,将软链接设置正确\n \n            php artisan storage:link\n\n### 如此便可以进行访问：\n\n>后台地址: http:// sitename /backend/index/index\n\n>帐户名: sys_admin\n\n>密码: 123123\n\n>邮箱：admin@admin.com\n\n\n\n从项目根目录进入 public 目录，执行命令：\n\n  `npm update`\n  \n在此请注意 需要将 config/backend.php 里 baseUri 更改为当前域名 , 否则页面会出现样式错乱 \n  \n不知道 npm 如何安装的可以在搜索引擎上查找。\n\n创建模块\n\n   `php artisan smart:install 模块名`\n  \n>  创建模块后,需要在 **.env** 文件中将模块加入到 *MODULE_EXT* 配置中,以逗号分隔\n\n执行上面命令后,会在app目录下生成对应模块\n\n### 接口说明\n--------\n\n> 接口uri \n> <https:// sitename /api>\n\n> 接口密钥\n> smart2_api_secret\n\n#### header\n\n| 名称                | 说明             |  描述                         |\n| ------------------ |:----------------:| ----------------------------:|\n| device              | 客户端系统类型    | Apple iphone 7               |\n| device-os-version  | 客户端系统版本号   | 如: 10.0.2                    |\n| timestamp          | 时间戳           | 如: 1476340001                |\n| signature          | 签名             | 如: 103ed1d081... 详见签名规则  |\n\n\n#### body\n\n所有键和值全部为字符串\n\n    {\n      key1 : val1 ,\n      key2 : val2,\n      key2 : \"[{k1 : v1} , { k2 : v2 }]\" //用json字符串传输 数组\n      ...\n    }\n\n#### 返回结果\n\n- 单行数据\n\n        {\n          code : 0       // 0 表示成功 , 403 表示需要登录 , 其余为其他错误\n          msg : \"文字信息\" ,\n          data : {\n            key1 : val1,\n            key2 : val2,\n            ...\n          }\n        }\n    \n- 多行数据\n\n        {\n          code : 0 \n          msg : \"文字信息\" ,\n          data : {\n            rows : [\n              {\n                key01 : val01,\n                key02 : val02,\n                ...\n              },\n              {\n                key11 : val11,\n                key12 : val12,\n                ...\n              },\n              ...\n            ]\n          },\n          key : value \n        }\n\n\n#### 签名规则\n\n- 假设 要发送的数据 meta 为: \n\n      var meta = {\n        token : \"103ed1d0811212312\" ,\n        merId : \"1\",\n      }\n      签名密钥为 : smart_api_secret \n\n- 将 timestamp 加入meta数据中 , 如\n\n      var signatureMeta = {\n        token : \"103ed1d0811212312\" ,\n        merId : \"1\",\n        timestamp : 1476340001\n      }\n\n- signatureMeta 按key的字符正序排列 ,并转为 key1=val1&key2=val2... 类型的字符串,如:\n\n      var signatureString = merId=1&timestamp=1476340001&token=103ed1d0811212312\n\n- 在字符串后加上签名密钥 ,如: \"&secret=签名密钥\"\n\n      var signatureString = merId=1&timestamp=1476340001&token=103ed1d0811212312&secret=smart2_api_secret\n\n- md5 signatureString 得到签名\n\n\n\n\n\n"
  },
  {
    "path": "composer.json",
    "content": "{\n    \"name\": \"dominator88/laravel-smart\",\n    \"description\": \"后台管理系统.能快速度进行移动端开发.集成多个常见工具包.\",\n    \"keywords\": [\"admin\", \"laravel\", \"grid\", \"api\"],\n    \"homepage\": \"https://github.com/dominator88/laravel-smart\",\n    \"license\": \"MIT\",\n    \"authors\": [{\n        \"name\": \"mr.z\",\n        \"email\": \"zsh2088@gmail.com\"\n    }],\n    \"type\": \"library\",\n    \"require\": {\n        \"php\": \">=7.0.0\",\n        \"laravel/framework\": \"5.5.*\",\n        \"cebe/markdown\": \"^1.1\",\n        \"jpush/jpush\": \"^3.5\",\n        \"laravel/tinker\": \"~1.0\",\n        \"guzzlehttp/guzzle\": \"^6.2@dev\",\n        \"toplan/laravel-sms\": \"~2.6\",\n        \"intervention/image\": \"^2.3@dev\",\n        \"laravel/dusk\": \"^2.0@dev\",\n        \"overtrue/easy-sms\": \"1.1.*\",\n        \"prettus/l5-repository\": \"^2.6\",\n        \"spatie/laravel-permission\": \"^2.36\"\n\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"~6.0\"\n    },\n    \"minimum-stability\": \"dev\",\n    \"autoload\": {\n        \"classmap\": [\n            \"tests/factories\"\n\n        ],\n        \"psr-4\": {\n            \"Smart\\\\\": \"src/\"\n\n        },\n        \"files\": [\n            \"Func.php\"\n        ]\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n\n\n        },\n        \"classmap\": [\n            \"tests/TestCase.php\"\n\n        ]\n    },\n    \"extra\": {\n        \"laravel\": {\n            \"providers\": [\n                \"Smart\\\\SmartServiceProvider\",\n                \"Intervention\\\\Image\\\\ImageServiceProvider\"\n            ],\n            \"aliases\": {\n                \"Image\": \"Intervention\\\\Image\\\\Facades\\\\Image\"\n            }\n\n        }\n\n    }\n\n}"
  },
  {
    "path": "config/backend.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: sl\n * Date: 2017/9/14\n * Time: 11:07\n */\nreturn [\n    'version' => '2.0',\n\n    'baseUri' => '/',\n    \n    /*\n    |--------------------------------------------------------------------------\n    | Access via `https`\n    |--------------------------------------------------------------------------\n    |\n    | 后台是否使用https\n    |\n    */\n\n    'https' => env('BACKEND_HTTPS',false),\n\n    'projectName' => 'laravel-smart',\n\n    'sessionName' => 'backend_session',\n\n    'directory' => ['Api' , 'backend' , 'mp' , 'Service' , 'Models'],\n\n    'superAdminId' => 1,\n\n    'defaultAdmin' => 'sys_admin',\n\n    'defaultPwd' => '123123',\n\n    'defaultEmail' => 'admin@admin.com',\n\n    'areaCachePrefix' => 'backend_area',\n\n    'secret'        => 'laravel-smart-secret',\n\n    'timeGap'   => 300,\n\n    'JPush'      => [\n        'appKey' => 'xxx' ,\n        'secret' => 'xxx' ,\n    ] ,\n\n    'image' => [\n        'imgUri' => '',\n        'uploadType' => 'local',\n    ],\n\n    'sms' => [\n        'name' => 'alidayu',\n    ],\n\n    'api' => [\n        'apiVersion' => 'v1',\n    ],\n\n    //自定义扩展模块  默认模块为backend  mp为自定义需要自行在app目录下创建mp文件夹  执行安装时自动生成目录及路由文件\n    'module_ext' => env('MODULE_EXT' , 'mp'),\n];"
  },
  {
    "path": "database/migrations/2014_10_12_000000_create_users_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateUsersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('users', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->string('email')->unique();\n            $table->string('password');\n            $table->rememberToken();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('users');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2014_10_12_100000_create_password_resets_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreatePasswordResetsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('password_resets', function (Blueprint $table) {\n            $table->string('email')->index();\n            $table->string('token');\n            $table->timestamp('created_at')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('password_resets');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_20_100811_create_sys_api_log_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateSysApiLogTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('sys_api_log', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('device')->nullable();\n            $table->string('device_os_version')->nullable();\n            $table->string('app_version')->nullable();\n            $table->string('api_version')->nullable();\n            $table->string('uri')->nullable();\n            $table->string('ip')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('sys_api_log');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_20_100853_create_sys_func_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateSysFuncTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('sys_func', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('pid')->default(0);\n            $table->tinyInteger('sort')->default(1);\n            $table->string('module',40);\n            $table->tinyInteger('is_menu')->default(0);\n            $table->tinyInteger('is_func')->default(0);\n            $table->string('color')->nullable();\n            $table->string('name');\n            $table->string('icon')->nullable();\n            $table->string('uri')->nullable();\n            $table->string('desc')->nullable();\n            $table->tinyInteger('status')->default(1);\n            $table->integer('level')->default(1);\n\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('sys_func');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_20_100900_create_sys_func_privilege_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateSysFuncPrivilegeTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('sys_func_privilege', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('func_id');\n            $table->enum('name' , ['read' , 'create' , 'update' , 'delete']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('sys_func_privilege');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_20_100908_create_sys_mail_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateSysMailTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('sys_mail', function (Blueprint $table) {\n            $table->increments('id');\n            $table->enum('type' , ['captcha' , 'reset_pwd']);\n            $table->string('name');\n            $table->string('address');\n            $table->string('subject');\n            $table->text('content');\n            $table->string('captcha' , 10);\n            $table->tinyInteger('status' )->default(1);\n            $table->dateTime('sent_at')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('sys_mail');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_20_100917_create_sys_merchant_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateSysMerchantTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('sys_merchant', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('sort');\n            $table->string('name');\n            $table->string('icon')->nullable();\n            $table->string('phone' , 20);\n            $table->string('contact',30)->nullable();\n            $table->string('email',200)->nullable();\n            $table->string('id_card')->nullable();\n            $table->tinyInteger('status')->default(1);\n            $table->integer('area')->nullable();\n            $table->string('address',200)->nullable();\n            $table->decimal('settled_amount' , 10,2)->nullable();\n            $table->decimal('balance' , 10 ,2)->nullable();\n            $table->decimal('withdraw_amount' , 10,2)->nullable();\n            $table->integer('apply_user_id'  )->nullable();\n            $table->tinyInteger('for_test')->default(0);\n\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('sys_merchant');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_20_100923_create_sys_push_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateSysPushTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('sys_push', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('mer_id');\n            $table->enum('catalog' , ['alert' , 'order' , 'event']);\n            $table->string('title');\n            $table->string('alert');\n            $table->enum('platform' , ['all' , 'ios' , 'android']);\n            $table->string('alias');\n            $table->string('tags');\n            $table->string('registration_id', 40);\n            $table->string('extras');\n            $table->tinyInteger('status');\n            $table->dateTime('sent_at');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('sys_push');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_20_100929_create_sys_role_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateSysRoleTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('sys_role', function (Blueprint $table) {\n            $table->increments('id');\n            $table->tinyInteger('sort')->default(0);\n            $table->string('module' )->default('backend')->comment('模块');\n            $table->integer('mer_id')->default(0);\n            $table->string('name');\n            $table->tinyInteger('status');\n            $table->string('desc')->nullable();\n            $table->tinyInteger('rank')->default(0);\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('sys_role');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_20_100940_create_sys_role_permission_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateSysRolePermissionTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('sys_role_permission', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('role_id');\n            $table->integer('privilege_id');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('sys_role_permission');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_20_100949_create_sys_sms_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateSysSmsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('sys_sms', function (Blueprint $table) {\n            $table->increments('id');\n            $table->enum('type' , ['captcha']);\n            $table->string('phone');\n            $table->string('content');\n            $table->integer('temp_id');\n            $table->dateTime('sent_at')->nullable();\n            $table->dateTime('verified_at')->nullable();\n            $table->string('message_id' , 32)->nullable();\n            $table->tinyInteger('status' )->default(1);\n\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('sys_sms');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_20_101005_create_sys_statistics_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateSysStatisticsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('sys_statistics', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('users_total' );\n            $table->integer('users_today' );\n            $table->integer('api' );\n            $table->integer('articles_total' );\n            $table->integer('articles_today' );\n            $table->integer('videos_total' );\n            $table->integer('videos_today' );\n            $table->date('created_at');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('sys_statistics');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_20_101023_create_sys_user_group_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateSysUserGroupTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('sys_user_group', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('user_id');\n            $table->integer('group_id');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('sys_user_group');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_20_101030_create_sys_user_role_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateSysUserRoleTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('sys_user_role', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('user_id');\n            $table->integer('role_id');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('sys_user_role');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_20_101753_create_sys_app_version_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateSysAppVersionTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('sys_app_version', function (Blueprint $table) {\n            $table->increments('id');\n            $table->enum('device' ,['ios' , 'android']);\n            $table->string('version' ,30);\n            $table->string('uri' , 200);\n            $table->string('description' , 2000);\n            $table->tinyInteger('is_force'  );\n            $table->enum('environment' , ['production' , 'test' , 'debug']);\n            $table->tinyInteger('status' );\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('sys_app_version');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_20_102342_create_sys_area_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateSysAreaTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('sys_area', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('level');\n            $table->integer('pid'  );\n            $table->string('text');\n            $table->string('tip');\n            $table->tinyInteger('status');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('sys_area');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_21_024032_create_mer_album_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerAlbumTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_album', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('mer_id')->default(0);\n            $table->integer('sort')->default(1);\n            $table->string('uri',200)->nullable();\n            $table->integer('size')->default(0);\n            $table->string('mimes', 50)->nullable();\n            $table->string('img_size', 200)->default(0);\n            $table->string('desc')->nullable();\n            $table->tinyInteger('status')->default(1);\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_album');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_21_024040_create_mer_album_catalog_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerAlbumCatalogTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_album_catalog', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('mer_id');\n            $table->integer('sort');\n            $table->string('tag' , 200);\n            $table->string('icon' , 200);\n            $table->integer('totals' );\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_album_catalog');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_21_024048_create_mer_album_tag_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerAlbumTagTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_album_tag', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('catalog_id');\n            $table->integer('album_id');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_album_tag');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_21_024128_create_mer_goods_catalog_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerGoodsCatalogTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_goods_catalog', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('mer_id')->default(0);\n            $table->integer('pid')->default(0);\n            $table->string('text')->nullable();\n            $table->string('icon')->nullable();\n            $table->string('desc')->nullable();\n            $table->tinyInteger('sort')->default(1);\n            $table->tinyInteger('level')->default(1);\n            $table->tinyInteger('status')->default(1);\n            $table->enum('type' ,  ['goods' , 'virtual' , 'service'])->default('goods');\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_goods_catalog');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_21_024140_create_mer_sys_user_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerSysUserTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_sys_user', function (Blueprint $table) {\n           /* $table->increments('id');*/\n            $table->integer('id');\n            $table->integer('mer_id');\n            $table->integer('sys_user_id');\n            $table->index('mer_id' ,'mer_id' );\n            $table->index('sys_user_id' , 'sys_user_id');\n            $table->primary(['id','mer_id', 'sys_user_id'] , 'id');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_sys_user');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_10_25_071323_create_sys_user_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateSysUserTable extends Migration {\n\t/**\n\t * Run the migrations.\n\t *\n\t * @return void\n\t */\n\tpublic function up() {\n\t\tSchema::create('sys_user', function (Blueprint $table) {\n\t\t\t$table->increments('id');\n\t\t\t$table->string('module')->default('backend');\n\t\t\t$table->string('username');\n\t\t\t$table->string('password');\n\t\t\t$table->string('icon')->nullable();\n\t\t\t$table->string('email')->nullable();\n\t\t\t$table->string('phone')->nullable();\n\t\t\t$table->tinyInteger('status')->default(1);\n\t\t\t$table->string('api_token', 64)->nullable();\n\t\t\t$table->timestamps();\n\t\t\t$table->dateTime('signed_at')->nullable();\n\t\t\t$table->ipAddress('signed_ip')->nullable();\n\t\t\t$table->rememberToken()->nullable();\n\t\t\t$table->string('name')->nullable();\n\t\t\t$table->unique('email')->nullable();\n\t\t\t$table->unique('username')->nullable();\n\t\t});\n\t}\n\n\t/**\n\t * Reverse the migrations.\n\t *\n\t * @return void\n\t */\n\tpublic function down() {\n\t\tSchema::dropIfExists('sys_user');\n\t}\n}\n"
  },
  {
    "path": "database/migrations/2017_10_25_075251_create_mer_user_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerUserTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_user', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('mer_id')->default(0);\n            $table->integer('referee_id')->default(0);\n            $table->tinyInteger('sex');\n            $table->string('username');\n            $table->string('nickname');\n            $table->string('password');\n            $table->string('icon')->nullable();\n            $table->string('email')->nullable();\n            $table->string('truename')->nullable();\n            $table->string('phone');\n            $table->decimal('bucks')->default(0);\n            $table->integer('points')->default(0);\n            $table->tinyInteger('status')->default(1);\n            $table->string('industries')->nullable();\n            $table->enum('reg_from' , ['phone', 'qq', 'wx', 'wb', 'email', 'unknown']);\n            $table->string('reg_ip')->nullable();\n            $table->dateTime('reg_at')->nullable();\n            $table->string('login_ip')->nullable();\n            $table->dateTime('login_at')->nullable();\n            $table->tinyInteger('for_test')->default(0);\n            $table->timestamps();\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_user');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_17_034153_create_mer_user_device_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerUserDeviceTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_user_device', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('user_id');\n            $table->string('token', 64)->nullable();\n            $table->enum('device' ,  ['iphone' , 'ipad' , 'android' , 'pc' , 'mac' , 'unknow'])->nullable();\n            $table->string('device_os_version' , 20)->nullable();\n            $table->string('app_version' , 20)->nullable();\n            $table->string('api_version' , 20)->nullable();\n            $table->string('registration_id' , 50)->nullable();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_user_device');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_17_034153_create_sys_user_device_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateSysUserDeviceTable extends Migration {\n\t/**\n\t * Run the migrations.\n\t *\n\t * @return void\n\t */\n\tpublic function up() {\n\t\tSchema::create('sys_user_device', function (Blueprint $table) {\n\t\t\t$table->increments('id');\n\t\t\t$table->integer('user_id');\n\n\t\t\t$table->enum('device', ['iphone', 'ipad', 'android', 'pc', 'mac', 'unknow'])->nullable();\n\t\t\t$table->string('device_os_version', 20)->nullable();\n\t\t\t$table->string('app_version', 20)->nullable();\n\t\t\t$table->string('api_version', 20)->nullable();\n\t\t\t$table->string('registration_id', 50)->nullable();\n\t\t\t$table->tinyInteger('for_test')->default(0)->comment('是否测试账户');\n\t\t\t$table->timestamps();\n\t\t});\n\t}\n\n\t/**\n\t * Reverse the migrations.\n\t *\n\t * @return void\n\t */\n\tpublic function down() {\n\t\tSchema::dropIfExists('sys_user_device');\n\t}\n}\n"
  },
  {
    "path": "database/migrations/2017_11_20_074023_create_mer_user_address_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerUserAddressTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_user_address', function (Blueprint $table) {\n\n            $table->increments('uid');\n            $table->integer('user_id');\n            $table->string('name' , 200)->nullable();\n            $table->string('phone' , 20)->nullable();\n            $table->integer('area_id');\n            $table->string('address' , 500)->nullable();\n            $table->string('postcode' , 10)->nullable();\n            $table->tinyInteger('status' )->default(1);\n            $table->tinyInteger('is_default' )->default(0);\n            $table->timestamps();\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_user_address');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_21_070513_create_mer_goods_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerGoodsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_goods', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('sys_goods_id')->nullable();\n            $table->integer('sys_goods_pid')->nullable();\n            $table->integer('mer_id')->nullable();\n            $table->integer('pid')->default(0);\n            $table->integer('sort')->default(999);\n            $table->string('sku' , 50)->nullable()->unique();\n            $table->string('name' , 200)->unique();\n            $table->integer('catalog_id')->default(0);\n            $table->text('highlight' ,400)->nullable();\n            $table->string('icon' ,200)->nullable();\n            $table->string('desc' , 200)->nullable();\n            $table->string('tags' , 300)->nullable();\n            $table->dateTime('start_time')->nullable();\n            $table->dateTime('end_time')->nullable();\n            $table->enum('currency' , ['cny' , 'points'])->default('cny');\n            $table->decimal('price_market',8,2)->default('0.00');\n            $table->decimal('price',8,2)->default('0.00');\n            $table->integer('points')->default(0);\n            $table->tinyInteger('status')->default(1);\n            $table->string('meta_title' , 100)->nullable();\n            $table->string('meta_keywords' , 1000)->nullable();\n            $table->string('meta_description' , 1000)->nullable();\n            $table->tinyInteger('recommend' )->default(0);\n            $table->tinyInteger('hot')->default(0);\n            $table->tinyInteger('cheap')->default(0);\n            $table->integer('sales')->default(0);\n            $table->integer('comments')->default(0);\n            $table->integer('pv')->default(0);\n\n\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_goods');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_21_075633_create_mer_user_comments_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerUserCommentsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_user_comments', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('user_id')->nullable();\n            $table->enum('type' , ['article' , 'goods' , 'event'])->default('article');\n            $table->integer('type_id')->comment('对象ID')->default(0);\n            $table->text('content')->comment('内容');\n            $table->text('reply')->comment('回复内容');\n            $table->dateTime('replied_at');\n            $table->tinyInteger('status')->default(1);\n\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_user_comments');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_22_023637_create_mer_order_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerOrderTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_order', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('user_id');\n            $table->integer('mer_id');\n            $table->enum('type' ,  ['goods' , 'virtual' , 'service'])->default('goods');\n            $table->string('order_no' , 16);\n            $table->integer('address_id');\n            $table->string('address_name' , 200);\n            $table->string('address_phone' , 20 );\n            $table->string('address' , 500);\n            $table->string('address_post' , 6)->nullable();\n            $table->integer('event_id' )->nullable();\n            $table->integer('event_amount' )->default(0);\n            $table->integer( 'coupon_id')->nullable();\n            $table->decimal('coupon_amount' , 8, 2)->default(0.00);\n            $table->decimal('bucks' , 8, 2)->default(0.00);\n            $table->enum('currency' , ['cny' , 'points'])->default('cny');\n            $table->decimal('amount' , 8,2)->default(0.00);\n            $table->enum('pay_channel',['alipay' , 'wx' , 'points'])->default('alipay');\n            $table->decimal('pay_amount' , 11,2)->default(0.00);\n            $table->tinyInteger('status' )->default(1);\n            $table->integer('get_points' )->default(0);\n            $table->integer('pay_id' )->nullable();\n            $table->string('user_mark' )->nullable();\n            $table->string('sys_mark' )->nullable();\n            $table->dateTime('pay_time');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_order');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_22_031423_create_mer_articles_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerArticlesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_articles', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('mer_id')->nullable();\n            $table->integer('catalog_id');\n            $table->integer('sort')->default(999);\n            $table->string('title' , 200);\n            $table->string('icon' , 200)->nullable();\n            $table->string('tags' , 200)->nullable();\n            $table->string('desc' , 200)->nullable();\n            $table->text('content')->nullable();\n            $table->tinyInteger('status')->default(1);\n            $table->dateTime('start_at');\n            $table->dateTime('end_at');\n            $table->integer('comments')->default(0);\n            $table->integer('likes')->default(0);\n            $table->integer('pv')->default(0);\n            $table->integer('favorites')->default(0);\n            $table->integer('userId')->default(1);\n\n\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_articles');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_22_031451_create_mer_articles_catalog_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerArticlesCatalogTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_articles_catalog', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('pid')->default(0);\n            $table->integer('mer_id');\n            $table->tinyInteger('sort')->default(99);\n            $table->string('text' , 200);\n            $table->string('icon' , 200)->nullable();\n            $table->string('desc' , 200)->nullable();\n            $table->tinyInteger('level' )->default(1);\n            $table->tinyInteger('status' )->default(1);\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_articles_catalog');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_22_031539_create_mer_ad_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerAdTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_ad', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('mer_id')->nullable();\n            $table->string('name');\n            $table->tinyInteger('sort')->default(99);\n            $table->integer('catalog_id')->unsigned();\n            $table->foreign('catalog_id')->references('id')->on('sys_merchant');\n            $table->string('icon')->default('');\n            $table->string('uri')->nullable();\n            $table->integer('pv')->default(0);\n            $table->tinyInteger('status')->default(1);\n\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_ad');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_22_031555_create_mer_ad_catalog_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerAdCatalogTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_ad_catalog', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('mer_id')->nullable();\n            $table->string('text' , 200)->nullable();\n            $table->integer('width')->default(0);\n            $table->integer('height')->default(0);\n            $table->tinyInteger('status')->default(1);\n\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_ad_catalog');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_23_015844_create_mer_goods_profile_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerGoodsProfileTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_goods_profile', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('goods_id')->unsigned();\n            $table->string('package')->nullable();\n            $table->text('content')->nullable();\n            $table->foreign('goods_id')->references('id')->on('mer_goods');\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_goods_profile');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_23_024951_create_mer_goods_icon_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerGoodsIconTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_goods_icon', function (Blueprint $table) {\n            $table->increments('id');\n            $table->tinyInteger('sort')->default(99);\n            $table->integer('goods_id')->unsigned();\n            $table->string('uri' , 200)->nullable();\n            $table->tinyInteger('is_cover')->default(0);\n            $table->foreign('goods_id')->references('id')->on('mer_goods');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_goods_icon');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_11_23_051615_create_mer_order_items_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateMerOrderItemsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('mer_order_items', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('order_id');\n            $table->integer('goods_id');\n            $table->string('goods_name' , 200)->nullable();\n            $table->string('icon' , 200)->nullable();\n            $table->enum('currency' , ['cny' , 'points' , ])->nullable();\n            $table->decimal('amount' , 11,2)->default(0.00);\n            $table->integer('qty');\n            $table->integer('event_id')->nullable();\n            $table->integer('event_amount')->default(0);\n            $table->integer('coupon_id')->nullable();\n            $table->integer('coupon_amount')->default(0);\n            $table->integer('get_points')->default(0);\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('mer_order_items');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_06_13_070749_create_sys_modules_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateSysModulesTable extends Migration {\n\t/**\n\t * Run the migrations.\n\t *\n\t * @return void\n\t */\n\tpublic function up() {\n\t\tSchema::create('sys_modules', function (Blueprint $table) {\n\t\t\t$table->increments('id');\n\t\t\t$table->string('name')->comment('模块名称');\n\t\t\t$table->string('symbol')->comment('标识');\n\t\t\t$table->tinyInteger('displayorder')->default(0)->comment('排序序号');\n\t\t\t$table->string('version')->default('1.0')->comment('版本号');\n\n\t\t\t$table->string('author')->nullable()->comment('作者');\n\t\t\t$table->tinyInteger('status')->default(1)->comment('状态');\n\t\t\t$table->string('thumb')->nullable()->comment('缩略图');\n\t\t\t$table->string('desc')->nullable()->comment('描述');\n\n\t\t\t$table->timestamps();\n\t\t});\n\t}\n\n\t/**\n\t * Reverse the migrations.\n\t *\n\t * @return void\n\t */\n\tpublic function down() {\n\t\tSchema::dropIfExists('sys_modules');\n\t}\n}\n"
  },
  {
    "path": "database/migrations/2018_06_23_095013_create_sys_settings_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateSysSettingsTable extends Migration {\n\t/**\n\t * Run the migrations.\n\t *\n\t * @return void\n\t */\n\tpublic function up() {\n\t\tSchema::create('sys_settings', function (Blueprint $table) {\n\t\t\t$table->increments('id');\n\t\t\t$table->string('key')->default('')->comment('名称');\n\t\t\t$table->string('value')->default('')->comment('配置值');\n\t\t\t$table->string('group')->default('default')->comment('配置分组');\n\t\t\t$table->string('type')->default('text')->comment('配置类型 text radio');\n\t\t\t$table->integer('desc')->default(99)->comment('排序');\n\t\t\t$table->timestamps();\n\t\t});\n\t}\n\n\t/**\n\t * Reverse the migrations.\n\t *\n\t * @return void\n\t */\n\tpublic function down() {\n\t\tSchema::dropIfExists('sys_settings');\n\t}\n}\n"
  },
  {
    "path": "phpunit.xml.dist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit backupGlobals=\"false\"\n         backupStaticAttributes=\"false\"\n         bootstrap=\"vendor/autoload.php\"\n         colors=\"true\"\n         convertErrorsToExceptions=\"true\"\n         convertNoticesToExceptions=\"true\"\n         convertWarningsToExceptions=\"true\"\n         processIsolation=\"false\"\n         stopOnFailure=\"false\">\n    <testsuites>\n        <testsuite name=\"Smart\">\n            <directory suffix=\"Test.php\">./packages/laravel-smart/tests</directory>\n        </testsuite>\n    </testsuites>\n    <filter>\n        <whitelist processUncoveredFilesFromWhitelist=\"true\">\n            <directory suffix=\".php\">./app</directory>\n        </whitelist>\n    </filter>\n    <php>\n        <env name=\"APP_ENV\" value=\"testing\"/>\n        <env name=\"CACHE_DRIVER\" value=\"array\"/>\n        <env name=\"SESSION_DRIVER\" value=\"array\"/>\n        <env name=\"QUEUE_DRIVER\" value=\"sync\"/>\n    </php>\n</phpunit>\n"
  },
  {
    "path": "resources/Api/Index.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/18\n * Time: 21:07\n */\nnamespace App\\Api;\n\n\nuse App\\Api\\Service\\v1\\ApiService;\nuse Illuminate\\Http\\Request;\n\n\nclass Index {\n\n    public $api = NULL;\n\n    public function __construct() {\n        $this->api        = ApiService::instance();\n        $this->api->debug = FALSE;\n    }\n\n    public function index(Request $request , $version , $directory , $action = 'index' ) {\n\n        $header = [\n            'timestamp'       => $request->header( 'timestamp' ) ,\n            'signature'       => $request->header( 'signature' ) ,\n            'device'          => $request->header( 'device' ) ,\n            'deviceOsVersion' => $request->header( 'device-os-version' ) ,\n            'appVersion'      => $request->header( 'app-version' ) ,\n            'apiVersion'      => $request->input('version') ,\n        ];\n        //取api\n        $api = $this->api;\n\n        $params = $request->all();\n        //取时间戳\n        $params['timestamp'] = $request->header( 'timestamp' ) ;\n\n        $params = array_merge( $params , $header );\n        $result = $this->response( $version , $directory , $action , $params );\n        $api->log( '请求结束' );\n\n        return json( $result );\n    }\n\n    /**\n     * 响应辅助函数\n     *\n     * @param $version\n     * @param $directory\n     * @param $action\n     * @param $params\n     *\n     * @return array\n     */\n    private function response( $version , $directory , $action , $params ) {\n\n        $action  = ucfirst( $action );\n        $version = strtolower( $version );\n        $class   = '\\\\App\\\\Api\\\\Service\\\\' . $version . '\\\\' . $directory . '\\\\' . $action . 'Service';\n        $this->api->log( 'service file' , $class );\n\n        //检查是否存在响应文件\n        if ( ! class_exists( $class ) ) {\n            return $this->api->getError( 404 );\n        }\n\n        //初始化响应类\n        $instance = $class::instance( $params );\n        //检查请求方式\n        if ( ! $this->checkRequestMethod( $instance->allowRequestMethod ) ) {\n            return $this->api->getError( 408 );\n        }\n\n        return $instance->response();\n    }\n\n    /**\n     * 检查 请求方式是否允许\n     *\n     * @param array $allowRequestMethod\n     *\n     * @return bool\n     */\n    private function checkRequestMethod( $allowRequestMethod = [] ) {\n        $requestMethod = strtolower( request()->method() );\n        if ( empty( $allowRequestMethod ) ) {\n            return FALSE;\n        }\n\n        return isset( $allowRequestMethod[ $requestMethod ] );\n    }\n}\n"
  },
  {
    "path": "resources/Api/Service/ApiService.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/18\n * Time: 21:13\n */\nnamespace App\\Api\\Service\\v1;\n\nuse App\\Service\\SysTokenService;\nuse Illuminate\\Auth\\AuthManager;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Smart\\Interfaces\\TokenService;\nuse Smart\\Service\\AuthUcService;\n\nuse Smart\\Service\\MerUserDeviceService;\nuse Illuminate\\Support\\Facades\\DB;\n\ndefine( 'PARAM_REQUIRED' , 'required' );\ndefine( 'PARAM_DIGIT' , 'digit' );\ndefine( 'PARAM_POSITIVE' , 'positive' );\n\nclass ApiService {\n\n    use \\Smart\\Traits\\Service\\Instance;\n\n    public $debug           = TRUE;\n    public $params          = [];\n    public $defaultParams   = [];\n    public $defaultResponse = [];\n    public $userId          = '';\n    public $behalf          = '';\n    public $merId           = '';\n    public $error           = '';\n    public $errCode         = 500;\n\n    public $token = '';\n\n    //出错代码表\n    public $code = [\n        0   => 'success' ,\n\n        //客户端问题\n        400 => 'param error' ,\n        401 => 'not login' ,\n        403 => 'please login' ,\n        404 => 'operator not found' ,\n        405 => 'error timestamp' ,\n        406 => 'error signature' ,\n        407 => 'unknown error' ,\n        408 => 'no allow request method' ,\n\n        //服务端问题\n        500 => 'runtime error' ,\n        503 => 'server not found' ,\n        504 => 'data not found' ,\n        505 => 'data exist'\n    ];\n\n\n    public function params($params = []){\n        $this->params = $params;\n    }\n\n    public function getError( $code ) {\n        return api_result( $this->code[ $code ] , $code );\n    }\n\n    /**\n     * 数据签名\n     *\n     * @param $inputArr\n     *\n     * @return string\n     */\n    public function signature( $inputArr ) {\n        ksort( $inputArr );\n\n        $new_arr = [];\n        foreach ( $inputArr as $key => $val ) {\n            $val = htmlspecialchars_decode( $val );\n            if ( is_array( $val ) ) {\n                $val = json_encode( $val , JSON_UNESCAPED_UNICODE );\n            }\n            $new_arr[] = \"$key=$val\";\n            //  echo \"$key=$val <br/>\";\n        }\n\n        $signature = implode( '&' , $new_arr ) . '&secret=' . config( 'backend.secret' );\n\n        $this->log( '签名:' , $inputArr );\n\n        return md5( $signature );\n    }\n\n    /**\n     * 校验签名\n     *\n     * @param $metaData\n     * @param $signature\n     *\n     * @return bool\n     */\n    public function validSignature( $metaData , $signature ) {\n\n        if ( empty( $signature ) ) {\n            return FALSE;\n        }\n\n        if ( isset( $metaData['file_data'] ) ) {\n            unset( $metaData['file_data'] );\n        }\n\n        $newSignature = $this->signature( $metaData );\n        $this->log( 'server signature' , $newSignature );\n\n        return $signature == $newSignature;\n    }\n\n    /**\n     * 验证时间戳\n     *\n     * @param $timestamp\n     *\n     * @return bool\n     */\n    public function validTimestamp( $timestamp ) {\n        $this->log( 'server time' , time() );\n        $this->log( 'client time' , $timestamp );\n        $this->log( 'time_diff' , abs( time() - $timestamp ) );\n        if ( empty( $timestamp ) ) {\n            return FALSE;\n        }\n\n        return abs( time() - $timestamp ) < config( 'backend.timeGap' );\n    }\n\n    /**\n     * 验证用户\n     *\n     * @return mixed\n     */\n    public function validToken( ) {\n\n    //    $this->token = resolve( TokenService::class );\n        $this->userId = '';\n        $this->error  = 500;\n\n        if ( ! isset( $this->params['api_token'] ) || empty( $this->params['api_token'] ) ) {\n            //参数错误\n            $this->error = '请填写token';\n\n            return FALSE;\n        } else {\n\n         //   $MemberData = $this->token->getByToken($this->params['token']);\n            $MemberData = Auth::guard('api')->user();\n           // AuthManager::\n\n\n\n            if ( empty( $MemberData ) ) {\n                //数据未找到\n                $this->error   = '认证失败';\n                $this->errCode = 403;\n\n                return FALSE;\n            }\n\n            $this->userId = $MemberData->id;\n\n            return TRUE;\n        }\n    }\n\n    /**\n     * 验证单个参数\n     *\n     * @param $paramName\n     * @param string $rule\n     *\n     * @return bool\n     */\n//\tpublic function validParam( $paramName, $rule = PARAM_REQUIRED ) {\n//\t\t$this->error   = '';\n//\t\t$this->errCode = 500;\n//\t\tswitch ( $rule ) {\n//\t\t\tcase  PARAM_REQUIRED :\n//\t\t\t\tif ( empty( trim( $this->requestParams[ $paramName ] ) ) ) {\n//\t\t\t\t\t$this->error = \"$paramName 不能为空\";\n//\n//\t\t\t\t\treturn FALSE;\n//\t\t\t\t}\n//\t\t}\n//\n//\t\treturn TRUE;\n//\t}\n\n    /**\n     * 验证全部参数\n     *\n     * @return bool\n     */\n    public function validParams() {\n        $method = strtolower( request()->method() );\n        foreach ( $this->defaultParams[ $method ] as $key => $defined ) {\n            //如果是非必填参数 则赋值为 默认值,以避免程序错误\n            if ( ! isset( $defined[2] ) ) {\n                //检查是否填写必填参数\n                if ( ! isset( $this->params[ $key ] ) ) {\n                    if ( isset( $defined[1] ) ) {\n                        $this->params[ $key ] = $defined[1];\n                    } else {\n                        $this->error = \"请填写 $key \";\n\n                        return FALSE;\n                    }\n                }\n                continue;\n            }\n\n            //如果未定义验证规则 继续下一个变量\n            if ( $defined[2] == 'file' ) {\n                continue;\n            }\n\n            //检查是否填写必填参数\n            if ( ! isset( $this->params[ $key ] ) ) {\n                if ( isset( $defined[1] ) ) {\n                    $this->params[ $key ] = $defined[1];\n                } else {\n                    $this->error = \"请填写 $key \";\n\n                    return FALSE;\n                }\n            }\n            $value = trim( $this->params[ $key ] );\n            $rule  = $defined[2];\n\n            if ( is_array( $rule ) ) {\n                if ( ! isset( $rule[ $value ] ) ) {\n                    $this->error = \"请填写正确的 $key \";\n\n                    return FALSE;\n                }\n            } else {\n                switch ( $rule ) {\n                    case PARAM_REQUIRED :\n                        //判断必填\n                        if ( $value === '' && empty( $value ) ) {\n                            $this->error = \"请填写 $key \";\n\n                            return FALSE;\n                        }\n                        if ( $key == 'merId' ) {\n                            $this->merId = $value;\n                        }\n                        break;\n                    case PARAM_DIGIT:\n                        //判断是数字\n                        if ( ! is_numeric( $value ) ) {\n                            $this->error = \" $key 不是是数字\";\n\n                            return FALSE;\n                        }\n                        break;\n                    case PARAM_POSITIVE :\n                        //判断是否是正数\n                        if ( ! is_numeric( $value ) || $value <= 0 ) {\n                            $this->error = \" $key 必须大于0\";\n\n                            return FALSE;\n                        }\n                        break;\n                }\n            }\n        }\n\n        return TRUE;\n    }\n\n    /**\n     * 格式化数据\n     *\n     * @param $data\n     * @param $defaultResponse\n     *\n     * @return array\n     */\n    public function formatData( $data , $defaultResponse = [] ) {\n        if ( empty( $data ) ) {\n            return [];\n        }\n\n        if ( empty( $defaultResponse ) ) {\n            $method          = strtolower( request()->method() );\n            $defaultResponse = $this->defaultResponse[ $method ];\n        }\n\n        if ( empty( $defaultResponse ) ) {\n            return $data;\n        }\n\n        $newData = [];\n        if ( isset( $data[0] ) ) {\n            foreach ( $data as $item ) {\n                $newData[] = $this->formatDataForRow( $defaultResponse , $item );\n            }\n        } else {\n            $newData = $this->formatDataForRow( $defaultResponse , $data );\n        }\n\n        return $newData;\n    }\n\n    /**\n     * 格式化一行数据\n     *\n     * @param $defaultResponse\n     * @param $data\n     *\n     * @return array\n     */\n    private function formatDataForRow( $defaultResponse , $data ) {\n        $newData = [];\n        foreach ( $defaultResponse as $key => $defined ) {\n            if ( isset( $data[ $key ] ) && is_array( $data[ $key ] ) ) {\n                foreach ( $data[ $key ] as $k => $row ) {\n                    $newData[ $key ][ $k ] = $this->formatDataForRow( $defined , $row );\n                }\n            } else {\n                if ( is_array( $defined ) && isset( $defined[1] ) && method_exists( $this , $defined[1] ) ) {\n                    $formatter       = $defined[1];\n                    $value           = isset( $data[ $key ] ) ? $data[ $key ] : '';\n                    $newData[ $key ] = $this->$formatter( $value , $data );\n                } else {\n                    $newData[ $key ] = isset( $data[ $key ] ) ? $data[ $key ] : '';\n                }\n            }\n        }\n\n        return $newData;\n    }\n\n    //格式化 图标\n    public function formatIcon( $value , $row = [] ) {\n        if ( filter_var( $value , FILTER_VALIDATE_URL , FILTER_FLAG_SCHEME_REQUIRED ) ) {\n            return $value;\n        }\n\n        return full_img_uri( $value );\n    }\n\n    //格式化 手机号\n    public function formatPhone( $value , $row = [] ) {\n        return substr_replace( $value , '****' , 3 , 4 );\n    }\n\n    /**\n     * 记录日志\n     *\n     * @param $key\n     * @param $value\n     */\n    public function log( $key , $value = '' ) {$this->debug = true;\n        if ( ! $this->debug ) {\n            return;\n        }\n\n        $filename = './logs/api_log_' . date( 'Y_m_d' ) . '.txt';\n        \n        if(! is_dir('./logs')){\n            mkdir('./logs');\n        }\n        if ( ! file_exists( $filename ) ) {\n            file_put_contents( $filename , '' );\n            chmod( $filename , 0777 );\n        }\n\n        $value = is_array( $value ) ? print_r( $value , TRUE ) : $value;\n\n        $text = \"----------\" . date( 'Y-m-d H:i:s' ) . \" 开始----------\\r\\n\";\n        $text .= \" $key = $value  \\r\\n\";\n        // $text .= \"----------结束----------\\r\\n\" ;\n\n        file_put_contents( $filename , $text , FILE_APPEND );\n    }\n\n    public function logStat( $param ) {\n        $data = [\n            'device'            => $param['device'] ,\n            'device_os_version' => $param['deviceOsVersion'] ,\n            'app_version'       => $param['appVersion'] ,\n            'api_version'       => $param['apiVersion'] ,\n            'uri'               => request()->url( TRUE ) ,\n            'ip'                => request()->ip( 0 , TRUE )\n        ];\n\n        DB::table( 'sys_api_log' )->insert( $data );\n    }\n\n    protected  function statistics($data){\n        $data_r['num'] = array_sum(array_column($data,'num'));\n        $data_r['num1'] = array_sum(array_column($data,'num1'));\n        $data_r['amount'] = array_sum(array_column($data,'pay_amount'));\n        $data_r['payment'] = array_sum(array_column($data,'goods_amount'));\n        return $data_r;\n    }\n\n}"
  },
  {
    "path": "resources/Api/Service/v1/system/AreaService.php",
    "content": "<?php namespace App\\Api\\Service\\v1\\system;\n/**\n * 区域\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/18\n * Time: 21:28\n */\n\n\nuse App\\Api\\Service\\v1\\ApiService;\n\nuse Smart\\Service\\SysAreaService;\n\n\nclass AreaService extends ApiService {\n\n    //允许的请求方式\n    public $allowRequestMethod = [\n        'get' => 'GET - 取区域' ,\n    ];\n\n    /**\n     * 传参 如:\n     * 'title' => ['标题' , '默认值' , '验证方式'] //验证方式可选\n     * 'status' => ['状态' , 1 , [\"0\" => '禁用' , 1 => '启用'] ]\n     */\n    public $defaultParams = [\n        'get' => [\n            'pid' => [ '上级ID' , '0' , PARAM_REQUIRED ] ,\n        ] ,\n    ];\n\n    /**\n     * 返回结果示例 如:\n     *\n     * 'user_id'     => '用户ID',\n     * 'icon' => ['头像' , 'formatIcon'] , //第二个值为格式化方法\n     */\n    public $defaultResponse = [\n        'get' => [\n            \"id\"   => \"区域ID\" ,\n            \"pid\"  => \"上级ID\" ,\n            \"text\" => \"区域名称\" ,\n        ] ,\n    ];\n\n    private static $instance;\n\n    public static function instance( $params = [] ) {\n        if ( self::$instance == NULL ) {\n            self::$instance         = new AreaService();\n            self::$instance->params = $params;\n        }\n\n        return self::$instance;\n    }\n\n    /**\n     * 接口响应方法\n     *\n     * @return array\n     */\n    public function response() {\n\n\n        if ( ! $this->validParams() ) {\n            return api_result( $this->error , 500 );\n        }\n\n        //处理业务\n        switch ( request()->method() ) {\n            case 'GET' :\n                $data = $this->get();\n                $data = $this->formatData( $data );\n\n                return api_result( '查询成功' , 0 , [ 'rows' => $data ] );\n            default :\n                return api_result( '未知请求类型' , 500 );\n        }\n    }\n\n    /**\n     * get 的响应方法\n     *\n     * @return array|number\n     */\n    public function get() {\n        $cacheName = config( 'custom.areaCachePrefix' ) . $this->params['pid'];\n        $data      = cache( $cacheName );\n        if ( empty( $data ) ) {\n            $SysArea = SysAreaService::instance();\n            $data    = $SysArea->getByCond( [\n                'pid'    => $this->params['pid'] ,\n                'status' => 1 ,\n                'getAll' => TRUE\n            ] );\n            cache( $cacheName , $data , 86400 );\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "resources/Api/Service/v1/test/LoginService.php",
    "content": "<?php\nnamespace App\\Api\\Service\\v1\\test;\n\n/**\n * 测试\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2017-11-14\n */\n\nuse App\\Api\\Service\\v1\\ApiService;\n\nclass LoginService extends ApiService {\n\n  //允许的请求方式\n\tpublic $allowRequestMethod = [\n\t  'get'  => 'GET - 取测试',\n\t  'post' => 'POST - 设置测试',\n\t  'put' => 'PUT - 设置测试',\n\t  'delete' => 'DELETE - 设置测试'\n\t];\n\n\t/**\n\t * 传参 如:\n\t * 'title' => ['标题' , '默认值' , '验证方式'] //验证方式可选\n\t * 'status' => ['状态' , 1 , [\"0\" => '禁用' , 1 => '启用'] ]\n\t */\n\tpublic $defaultParams = [\n\t  'get' => [\n      \n\t//    'api_token' => [ 'token' , '0' , PARAM_REQUIRED ] ,\n\t  ],\n\t  'post' => [\n\t    \n\t  ],\n\t  'put' => [\n\t    \n\t  ],\n\t  'delete' => [\n\t    \n\t  ]\n\t];\n\n\t/**\n\t * 返回结果示例 如:\n\t *\n\t * 'user_id'     => '用户ID',\n\t * 'icon' => ['头像' , 'formatIcon'] , //第二个值为格式化方法\n\t */\n\tpublic $defaultResponse = [\n     'get'  => [],\n     'post' => [],\n     'put' => [],\n     'delete' => []\n\t];\n\n  private static $instance;\n\tpublic static function instance( $params = [] ) {\n\t\tif ( self::$instance == NULL ) {\n\t\t\tself::$instance = new LoginService();\n\t\t\tself::$instance->params = $params ;\n\t\t}\n\n\t\treturn self::$instance;\n\t}\n\n  /**\n   * 接口响应方法\n   *\n   * @return array\n   */\n\tpublic function response() {\n    //验证用户\nif ( ! $this->validToken() ) {\n  return api_result( $this->error, $this->errCode );\n}\n\n\t\tif ( ! $this->validParams() ) {\n\t\t\treturn api_result( $this->error, 500 );\n\t\t}\n\n    //处理业务\n    switch ( request()->method() ) {\n      case 'GET' :\n        $data = $this->get();\n        $data = $this->formatData( $data );\n\n        return api_result( '查询成功' , 0 , [ 'rows' => $data ] );\n      case 'POST' :\n        return $this->post();\n      case 'PUT' :\n        return $this->put();\n      case 'DELETE' :\n        return $this->delete();\n      default :\n        return api_result( '未知请求类型' , 500 );\n    }\n\t}\n\n  /**\n   * get 的响应方法\n   *\n   * @return array|number\n   */\n  public function get() {\n    return [\n      ['id' => 1 , 'text' => '测试数据']\n    ];\n  }\n\n  /**\n   * post 的响应方法\n   *\n   * @return array\n   */\n  public function post() {\n    $data = [];\n    return api_result( 'post 成功', 0 , $data );\n  }\n\n\n  /**\n   * post 的响应方法\n   *\n   * @return array\n   */\n  public function put() {\n    $data = [];\n    return api_result( 'put 成功', 0 , $data );\n  }\n\n  /**\n   * post 的响应方法\n   *\n   * @return array\n   */\n  public function delete() {\n    $data = [];\n    return api_result( 'delete 成功', 0 , $data );\n  }\n}\n"
  },
  {
    "path": "resources/Api/routes.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/11/14\n * Time: 16:12\n */\n//接口路由\nRoute::group(['prefix'=>'api/{version}','namespace'=>'App\\Api' , 'middleware'=> ['api','auth.token','auth.cors']],function(){\n\n    Route::any('{direction}/{action}' , 'Index@index');\n\n\n\n});"
  },
  {
    "path": "resources/Models/MerAlbum.php",
    "content": "<?php namespace App\\Models;\n/**\n * MerAlbum Model\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2017-09-30\n */\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass MerAlbum extends Model {\n    public $table =  'mer_album';\n\n    public $primaryKey = 'id';\n\n    public $timestamps = FALSE;\n\n    use \\Smart\\Traits\\Service\\Scope;\n}\n"
  },
  {
    "path": "resources/Models/MerAlbumTag.php",
    "content": "<?php namespace App\\Models;\n/**\n * MerAlbumTag Model\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2017-10-02\n */\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass MerAlbumTag extends Model {\n    public $table =  'mer_album_tag';\n\n    public $primaryKey = 'id';\n\n    public $timestamps = FALSE;\n\n    use \\Smart\\Traits\\Service\\Scope;\n}\n"
  },
  {
    "path": "resources/Models/MerArticles.php",
    "content": "<?php namespace App\\Models;\n/**\n * MerArticles Model\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2017-09-30\n */\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass MerArticles extends Model {\n    public $table =  'mer_articles';\n\n    public $primaryKey = 'id';\n\n    public $timestamps = FALSE;\n\n    use \\Smart\\Traits\\Service\\Scope;\n}\n"
  },
  {
    "path": "resources/Models/MerGoodsCatalog.php",
    "content": "<?php namespace App\\Models;\n/**\n * MerGoodsCatalog Model\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2017-09-30\n */\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass MerGoodsCatalog extends Model {\n    public $table =  'mer_goods_catalog';\n\n    public $primaryKey = 'id';\n\n    public $timestamps = FALSE;\n\n    use \\Smart\\Traits\\Service\\Scope;\n}\n"
  },
  {
    "path": "resources/Models/SysUser.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Illuminate\\Notifications\\Notifiable;\nuse Spatie\\Permission\\Traits\\HasRoles;\n\nclass SysUser extends Authenticatable {\n\tuse Notifiable;\n\tuse HasRoles;\n\tprotected $table = 'sys_user';\n\n\tpublic $primaryKey = 'id';\n\n\tpublic $timestamps = FALSE;\n\n\tuse \\Smart\\Traits\\Service\\Scope;\n\n\tpublic function sysMerchants() {\n\t\treturn $this->belongsToMany('App\\Models\\SysMerchant', 'mer_sys_user', 'sys_user_id', 'mer_id');\n\t}\n\n\tpublic function scopeKeyword($query, $param) {\n\t\tif ($param) {\n\t\t\treturn $query->where(function ($query) use ($param) {\n\t\t\t\t$query->orWhere('username', 'like', \"%{$param}%\")->orWhere('phone', 'like', \"%{$param}%\");\n\n\t\t\t});\n\t\t}\n\n\t}\n\n\tpublic function username() {\n\t\treturn 'name';\n\t}\n}\n"
  },
  {
    "path": "resources/Models/User.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Notifications\\Notifiable;\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\n\nclass User extends Authenticatable\n{\n    protected $table = 'sys_user';\n    use Notifiable;\n\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'name', 'email', 'password',\n    ];\n\n    /**\n     * The attributes that should be hidden for arrays.\n     *\n     * @var array\n     */\n    protected $hidden = [\n        'password', 'remember_token',\n    ];\n}\n"
  },
  {
    "path": "resources/Service/MerTokenService.php",
    "content": "<?php namespace App\\Service;\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/30\n * Time: 15:33\n */\nuse Illuminate\\Support\\Facades\\DB;\nuse Smart\\Interfaces\\TokenService;\nuse Smart\\Service\\BaseService;\n\nclass MerTokenService extends BaseService implements TokenService{\n\n\n    public function getByToken($token){\n        $data = DB::table('sys_user as su')\n            ->join('mer_sys_user as msu' , 'su.id' , '=' , 'msu.sys_user_id')\n            ->join('mer_user as mu' , 'mu.id','=' , 'msu.id')\n            ->where('su.token' , $token)\n            ->first();\n        return $data;\n    }\n\n\n}"
  },
  {
    "path": "resources/assets/static/.gitignore",
    "content": ""
  },
  {
    "path": "resources/assets/static/js/backend/Generate.js",
    "content": "/**\n * 自动生成代码 JS\n *\n * @author Zix\n * @version 2.0 ,  2016-09-11\n */\n\nvar Generate = {\n\ttoken : $('input[name=_token]').val(),\n\tconfig : {\n\t\tfileExists : null\n\t} ,\n\tinit : function () {\n\t\t//初始化ajax 提示框\n\t\tloading.initAjax();\n\n\t\t//初始化查询form\n\t\tthis.initBtn();\n\n\t\t$('#systemForm').reloadForm(Param.systemDefault);\n\t\t$('#systemComponentsForm').reloadForm(Param.systemComponentsDefault);\n\t\t$('#apiForm').reloadForm(Param.apiDefault);\n\n\t\tthis.getSystemInfo();\n\n\t\t$(\".select2\").select2({\n\t\t\ttags : true ,\n\t\t\ttokenSeparators : [',' , ' ']\n\t\t});\n\t} ,\n\n\n\t//初始化各种按钮\n\tinitBtn : function () {\n\t\tvar self = this;\n\n\t\t$('input[name=\"module\"]').change(function () {\n\t\t\tself.getSystemInfo();\n\t\t});\n\n\t\t$('select[name=\"tableName\"]').change(function () {\n\t\t\tself.getSystemInfo();\n\t\t});\n\n\t\t$('#getSystemInfoBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.getSystemInfo();\n\t\t});\n\n\t\t//创建系统页面\n\t\t$('.createSystemBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $thisBtn = $(this);\n\t\t\tvar temp = $(this).data('temp');\n\t\t\tvar systemData = $('#systemForm').serializeObject();\n\t\t\tvar componentsData = $('#systemComponentsForm').serializeObject();\n\t\t\tvar data = {\n\t\t\t\ttemp : temp ,\n\t\t\t\tmodule : systemData.module ,\n\t\t\t\ttableName : systemData.tableName ,\n\t\t\t\tcomponents : componentsData ,\n\t\t\t\t_token : self.token\n\t\t\t};\n\n\t\t\t$.post(Param.uri.createSystem , data)\n\t\t\t .fail(function (res) {\n\t\t\t \ttips.error(res.responseText);\n\t\t\t })\n\t\t\t .done(function (res) {\n\t\t\t\t if ( res.code == 401 ) {\n\t\t\t\t\t //需要登录\n\t\t\t\t\t tips.error('请先登录');\n\t\t\t\t } else if ( res.code != 0 ) {\n\t\t\t\t \t tips.error(res.msg);\n\t\t\t\t } else {\n\t\t\t\t \t tips.success(res.msg);\n\t\t\t\t\t if ( data.temp == 'all' ) {\n\t\t\t\t\t \t for( var key in self.config.fileExists ) {\n\t\t\t\t\t \t   if ( !self.config.fileExists.hasOwnProperty( key ) ) {\n\t\t\t\t\t\t\t\t continue;\n\t\t\t\t\t     }\n\t\t\t\t\t\t   self.config.fileExists[key] = true ;\n\t\t\t\t\t   }\n\t\t\t\t\t \t $('.createSystemBtn').prop('disabled' , true);\n\t\t\t\t\t\t $('.deleteSystemBtn').prop('disabled' , false);\n\t\t\t\t\t } else {\n\t\t\t\t\t\t $('.deleteSystemBtn[data-temp=\"' + temp + '\"]').prop('disabled' , false);\n\t\t\t\t\t\t self.config.fileExists[data.temp] = true ;\n\t\t\t\t\t\t $thisBtn.prop('disabled' , true);\n\t\t\t\t\t }\n\t\t\t\t }\n\t\t\t });\n\t\t});\n\n\t\t//创建接口\n\t\t$('#createApiBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar data = $('#apiForm').serializeObject();\n\t\t\tdata._token = self.token;\n\t\t\tif ( empty(data.desc) ) {\n\t\t\t\ttips.error('描述不能为空');\n\t\t\t}\n\t\t\tif ( empty(data.directory) ) {\n\t\t\t\ttips.error('目录不能为空');\n\t\t\t}\n\t\t\tif ( empty(data.name) ) {\n\t\t\t\ttips.error('名称不能为空');\n\t\t\t}\n\n\t\t\t$.post(Param.uri.createApi , data)\n\t\t\t .fail(function (res) {\n\n\t\t\t })\n\t\t\t .done(function (res) {\n\t\t\t\t if ( res.code == 0 ) {\n\t\t\t\t\t tips.success(res.msg);\n\t\t\t\t } else {\n\t\t\t\t\t tips.error(res.msg);\n\t\t\t\t }\n\t\t\t });\n\t\t});\n\n\n\t\t$('.deleteSystemBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $thisBtn = $(this);\n\t\t\tvar temp = $(this).data('temp');\n\n\t\t\tif ( ! self.config.fileExists[temp] ) {\n\t\t\t\ttips.error(temp + '文件不存在');\n\t\t\t\treturn false ;\n\t\t\t}\n\n\t\t\tvar data = $('#systemForm').serializeObject();\n\t\t\tdata['temp'] = temp;\n\n\t\t\tsure.init('确认删除' + temp + '文件吗?' , function () {\n\n\t\t\t\t$.get(Param.uri.destroySystemFile , data)\n\t\t\t\t .fail(function (res) {\n\t\t\t\t\t tips.error(res.responseText);\n\t\t\t\t })\n\t\t\t\t .done(function (res) {\n\t\t\t\t\t if ( res.code != 0 ) {\n\t\t\t\t\t\t tips.error(res.msg);\n\t\t\t\t\t } else {\n\t\t\t\t\t\t $('.createSystemBtn[data-temp=\"' + temp + '\"]').prop('disabled' , false);\n\t\t\t\t\t\t $thisBtn.prop('disabled' , true);\n\n\t\t\t\t\t\t self.config.fileExists[temp] = false;\n\t\t\t\t\t\t $('.createSystemBtn[data-temp=\"all\"]').prop('disabled' , false);\n\t\t\t\t\t\t tips.success(res.msg);\n\t\t\t\t\t }\n\t\t\t\t });\n\t\t\t});\n\t\t});\n\t} ,\n\n\tgetSystemInfo : function () {\n\t\tvar self = this;\n\n\t\tvar $form = $('#systemForm');\n\t\tvar data = $form.serializeObject();\n\t\tdata['type'] = $(\"#type_tabs\").find(\"li.active > a\").data('type');\n\n\t\t$.get(Param.uri.getSystemInfo , data)\n\t\t .fail(function (res) {\n\t\t\t tips.error(res.responseText);\n\t\t })\n\t\t .done(function (res) {\n\t\t\t if ( res.code == 401 ) {\n\t\t\t\t //需要登录\n\t\t\t\t tips.error('请先登录');\n\t\t\t } else if ( res.code != 0 ) {\n\t\t\t\t tips.error(res.msg);\n\t\t\t } else {\n\t\t\t\t tips.success(res.msg);\n\t\t\t\t var allFileExists = true;\n\t\t\t\t self.config.fileExists = res.data.fileExists;\n\t\t\t\t $.each( res.data.fileExists , function (key , val) {\n\t\t\t\t\t $('.createSystemBtn[data-temp=\"' + key + '\"]').prop('disabled' , val);\n\t\t\t\t\t $('.deleteSystemBtn[data-temp=\"' + key + '\"]').prop('disabled' , ! val);\n\t\t\t\t\t if ( allFileExists && ! val ) {\n\t\t\t\t\t\t allFileExists = false;\n\t\t\t\t\t }\n\t\t\t\t });\n\t\t\t\t $('.createSystemBtn[data-temp=\"all\"]').prop('disabled' , allFileExists);\n\t\t\t\t self.setSelect(res.data);\n\t\t\t }\n\t\t });\n\t} ,\n\n\tsetSelect : function (data) {\n\t\tvar html = [];\n\t\thtml.push('<option value=\"\">请选择</option>');\n\n\t\tfor ( var i = 0 ; i < data.fieldInfo.length ; i ++ ) {\n\t\t\tvar field = data.fieldInfo[i]['fieldName'];\n\t\t\tvar common = data.fieldInfo[i]['fieldComment'];\n\t\t\thtml.push('<option value=\"' + field + '\">' + field + ' (' + common + ')' + '</option>');\n\t\t}\n\n\t\t$('select[name=\"upload\"]').html(html.join('')).val(data.components.upload).trigger('change');\n\t\t$('select[name=\"editor\"]').html(html.join('')).val(data.components.editor).trigger('change');\n\t\t$('select[name=\"select2\"]').html(html.join(''));\n\t}\n};"
  },
  {
    "path": "resources/assets/static/js/backend/Index.js",
    "content": "var Index = {\n\tinit : function(){\n\t\t// 指定图表的配置项和数据\n\t\tvar usersOption = {\n\t\t\ttooltip : {\n\t\t\t\ttrigger : 'axis'\n\t\t\t} ,\n\t\t\tlegend : {\n\t\t\t\tdata : ['用户注册']\n\t\t\t} ,\n\t\t\tgrid : {\n\t\t\t\tleft : '3%' ,\n\t\t\t\tright : '4%' ,\n\t\t\t\tbottom : '3%' ,\n\t\t\t\tcontainLabel : true\n\t\t\t} ,\n\t\t\txAxis : [\n\t\t\t\t{\n\t\t\t\t\ttype : 'category' ,\n\t\t\t\t\tboundaryGap : true ,\n\t\t\t\t\tdata : Param.charts.users.period\n\t\t\t\t}\n\t\t\t] ,\n\t\t\tyAxis : [\n\t\t\t\t{\n\t\t\t\t\ttype : 'value'\n\t\t\t\t}\n\t\t\t] ,\n\t\t\tseries : [\n\t\t\t\t{\n\t\t\t\t\tname : '注册人数' ,\n\t\t\t\t\ttype : 'line' ,\n\t\t\t\t\tdata : Param.charts.users.data\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\tvar apiOption = {\n\t\t\tcolor: ['#3398DB'],\n\t\t\ttooltip : {\n\t\t\t\ttrigger: 'axis',\n\t\t\t\taxisPointer : {            // 坐标轴指示器，坐标轴触发有效\n\t\t\t\t\ttype : 'shadow'        // 默认为直线，可选为：'line' | 'shadow'\n\t\t\t\t}\n\t\t\t},\n\t\t\tgrid : {\n\t\t\t\tleft : '3%' ,\n\t\t\t\tright : '4%' ,\n\t\t\t\tbottom : '3%' ,\n\t\t\t\tcontainLabel : true\n\t\t\t} ,\n\t\t\txAxis : [\n\t\t\t\t{\n\t\t\t\t\ttype : 'category' ,\n\t\t\t\t\tdata : Param.charts.api.period,\n\t\t\t\t\taxisTick: {\n\t\t\t\t\t\talignWithLabel: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t] ,\n\t\t\tyAxis : [\n\t\t\t\t{\n\t\t\t\t\ttype : 'value'\n\t\t\t\t}\n\t\t\t] ,\n\t\t\tseries : [\n\t\t\t\t{\n\t\t\t\t\tname : '访问量' ,\n\t\t\t\t\ttype : 'bar' ,\n\t\t\t\t\tbarWidth: '60%',\n\t\t\t\t\tlabel: {\n\t\t\t\t\t\tnormal: {\n\t\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\t\tposition: 'top'\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tdata : Param.charts.api.data\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\tvar userChart = echarts.init(document.getElementById('userChart'));\n\t\tuserChart.setOption(usersOption);\n\n\t\tvar apiChart = echarts.init(document.getElementById('apiChart'));\n\t\tapiChart.setOption(apiOption);\n\t}\n};"
  },
  {
    "path": "resources/assets/static/js/backend/MerAd.js",
    "content": "/**\n * MerAd JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-14\n */\n\nvar MerAd = {\n\tinit : function () {\n\t\t//重新设置菜单\n\t\tif ( !empty( Param.uri.menu ) ) {\n\t\t\tLayout.setSidebarMenuActiveLink('set' , 'a[data-uri=\"'+ Param.uri.menu +'\"]');\n\t\t}\n\n    //初始化ajax 提示框\n    loading.initAjax();\n\n    //初始化页面按钮\n\t\tthis.initBtn();\n\n\t\t//初始化查询form\n\t\tthis.initSearchForm();\n\n\t\t//初始化数据表\n\t\tthis.initGrid();\n\n\t\t\n\t\t\n\t} ,\n\n\t//初始化查询form\n\tinitSearchForm : function () {\n\t\tvar $searchForm = $('#searchForm');\n\t\t$searchForm.reloadForm(Param.query);\n\n\t\t//查询按钮\n\t\t$('#searchBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $dataGrid = $('#dataGrid');\n\t\t\tvar param = $dataGrid.TableGrid('getParam');\n\n\t\t\tparam = $.extend({} , param , $('#searchForm').serializeObject()  );\n\t\t\tparam.page = 1;\n\n\t\t\t$dataGrid.TableGrid('setParam' , param);\n\t\t\t$dataGrid.TableGrid('reload');\n\t\t});\n\t} ,\n\n  //显示 portlet\nsetPortletShow : function ( type ) {\n  var $tablePortlet = $('#tablePortlet') ;\n  var $addEditPortlet = $('#addEditPortlet');\n\n  $tablePortlet.slideUp('fast');\n  if ( type == 'add' ) {\n    if ( !$addEditPortlet.hasClass('blue') ) {\n      $addEditPortlet.removeClass('green-meadow').addClass('blue');\n    }\n\n    $addEditPortlet.find('.caption-subject').html('新建' + Param.pageTitle );\n  } else if ( type == 'edit' ) {\n    if ( !$addEditPortlet.hasClass('green-meadow') ) {\n      $addEditPortlet.removeClass('blue').addClass('green-meadow');\n    }\n    $addEditPortlet.find('.caption-subject').html('编辑' + Param.pageTitle );\n  }\n\n  //$('#data-table-portlet').slideUp('fast');\n  $addEditPortlet.show();\n},\n\n//关闭 portlet\nsetPortletHide : function () {\n  $('#tablePortlet').slideDown('fast') ;\n  $('#addEditPortlet').slideUp('fast');\n},\n  \n\n\t//初始化各种按钮\n\tinitBtn : function () {\n\t\tvar self = this;\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm( Param.defaultRow );\n\t\t\tsetImgPreview.clear('icon');\nsetImgPreview.clear('icon');\n      \n      \n\n\t\t\t$form.attr('action' , Param.uri.insert );\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click' , '.editBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#dataGrid').TableGrid('getRow' , id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm( row );\n\t\t\tsetImgPreview.set('icon' , row.icon);\nsetImgPreview.set('icon' , row.icon);\nsetImgPreview.set('icon' , row.icon);\n\t\t\t\n      \n\n\t\t\t$form.attr('action' , Param.uri.update + row.id );\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click' , '.destroyBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData( id );\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif ( empty( ids ) ) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tself.delData( ids );\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif( $form.validForm() ) {\n\t\t\t\tvar data = $form.serializeObject();\n\n\t\t\t\t$.post( $form.attr('action') , data )\n\t\t\t\t .fail( function(res){\n            tips.error( res.responseText );\n\t\t\t\t })\n\t\t\t\t .done( function( res ){\n\t\t\t\t    if ( res.code == 1001 ) {\n              //需要登录\n              tips.error('请先登录');\n            } else if( res.code != 0 ){\n              tips.error( res.msg );\n            } else {\n              tips.success( res.msg );\n              $('#dataGrid').TableGrid('reload');\n              self.setPortletHide();\n            }\n\t\t\t\t });\n\t\t\t}\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n    //上传按钮\n$('#iconUploadBtn').Uploader({\n  uri : Param.uri.upload , //上传文件\n  param : Param.uploadParam ,\n  album : true ,\n  albumUri : Param.uri.album ,\n  albumCatalogUri : Param.uri.albumCatalog ,\n  albumParam : Param.albumParam ,\n  onSuccess : function ( ret ) {\n    tips.success(ret.msg);\n    if ( ret.code == 0 ) {\n      setImgPreview.set('icon' , ret.data.savePath);\n    }\n  },\n  onChooseAlbum : function( uri ){\n    setImgPreview.set('icon' , uri );\n  }\n});\n\n    \n\t} ,\n\n\tdelData : function ( ids ) {\n\t\tvar self = this ;\n\t\tvar data = {\n\t\t\tids : ids\n\t\t};\n\n\t\tsure.init('是否删除?' , function () {\n\n\t\t  $.post( Param.uri.destroy , data )\n\t\t   .fail( function(res){\n         tips.error( res.responseText );\n       })\n\t\t   .done(function (res) {\n          if ( res.code == 1001 ) {\n            //需要登录\n            tips.error('请先登录');\n          } else if( res.code != 0 ){\n            tips.error( res.msg );\n          } else {\n            tips.success( res.msg );\n            $('#dataGrid').TableGrid('reload');\n          }\n        });\n\t\t});\n\t},\n\n\t\t//初始化grid\n\tinitGrid : function () {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query , '' , uri);\n\n\t\t$('#dataGrid').TableGrid({\n\t\t\turi : Param.uri.read ,\n\t\t\tselectAll : true ,\n\t\t\tparam : Param.query ,\n\t\t\trowStyle : function (row) {\n\t\t\t\tif ( row.status == 0 ) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tloadSuccess : function ( rows , settings ) {\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif ( oldUri == uri) {\n\t\t\t\t\treturn false ;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params , '' , oldUri);\n\t\t\t\thistory.replaceState(settings.param , '' , uri);\n\t\t\t}\n\t\t});\n\t}\n\t\n};\n\n//pop state 事件\nwindow.onpopstate = function (event) {\n\tif ( event && event.state ) {\n\t\t$('#searchForm').reloadForm( event.state );\n\t\tvar $dataGrid = $('#dataGrid');\n\t\t$dataGrid.TableGrid('setParam' , event.state);\n\t\t$dataGrid.TableGrid('reload');\n\t}\n};"
  },
  {
    "path": "resources/assets/static/js/backend/MerEvent.js",
    "content": "/**\n * MerEvent JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2017-07-17\n */\n\nvar MerEvent = {\n  config : {} ,\n\tinit : function () {\n\t\t//重新设置菜单\n\t\tif ( !empty( Param.uri.menu ) ) {\n\t\t\tLayout.setSidebarMenuActiveLink('set' , 'a[data-uri=\"'+ Param.uri.menu +'\"]');\n\t\t}\n\n    //初始化ajax 提示框\n    loading.initAjax();\n\n    //初始化页面按钮\n\t\tthis.initBtn();\n\n\t\t//初始化查询form\n\t\tthis.initSearchForm();\n\n\t\t//初始化数据表\n\t\tthis.initGrid();\n\n\t\tKE_OPTIONS.uploadJson = Param.uri.uploadKE ;\n\t\tthis.config['content'] = KindEditor.create('textarea[name=\"content\"]' , KE_OPTIONS );\n\n\t} ,\n\n\t//初始化查询form\n\tinitSearchForm : function () {\n\t\tvar $searchForm = $('#searchForm');\n\t\t$searchForm.reloadForm(Param.query);\n\n\t\t//查询按钮\n\t\t$('#searchBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $dataGrid = $('#dataGrid');\n\t\t\tvar param = $dataGrid.TableGrid('getParam');\n\n\t\t\tparam = $.extend({} , param , $('#searchForm').serializeObject()  );\n\t\t\tparam.page = 1;\n\n\t\t\t$dataGrid.TableGrid('setParam' , param);\n\t\t\t$dataGrid.TableGrid('reload');\n\t\t});\n\t} ,\n\n  //显示 portlet\nsetPortletShow : function ( type ) {\n  var $tablePortlet = $('#tablePortlet') ;\n  var $addEditPortlet = $('#addEditPortlet');\n\n  $tablePortlet.slideUp('fast');\n  if ( type == 'add' ) {\n    if ( !$addEditPortlet.hasClass('blue') ) {\n      $addEditPortlet.removeClass('green-meadow').addClass('blue');\n    }\n\n    $addEditPortlet.find('.caption-subject').html('新增 ' + Param.pageTitle );\n  } else if ( type == 'edit' ) {\n    if ( !$addEditPortlet.hasClass('green-meadow') ) {\n      $addEditPortlet.removeClass('blue').addClass('green-meadow');\n    }\n    $addEditPortlet.find('.caption-subject').html('编辑 ' + Param.pageTitle );\n  }\n\n  //$('#data-table-portlet').slideUp('fast');\n  $addEditPortlet.show();\n},\n\n//关闭 portlet\nsetPortletHide : function () {\n  $('#tablePortlet').slideDown('fast') ;\n  $('#addEditPortlet').slideUp('fast');\n},\n  \n\n\t//初始化各种按钮\n\tinitBtn : function () {\n\t\tvar self = this;\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm( Param.defaultRow );\n\t\t\tsetImgPreview.clear('icon');\nsetImgPreview.clear('icon');\n\n      self.config['content'].html('');\n\n      \n\n\t\t\t$form.attr('action' , Param.uri.insert );\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click' , '.editBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#dataGrid').TableGrid('getRow' , id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm( row );\n\t\t\tsetImgPreview.set('icon' , row.icon);\nsetImgPreview.set('icon' , row.icon);\nsetImgPreview.set('icon' , row.icon);\n\n\t\t\tself.config['content'].html( row.content );\n\n      \n\n\t\t\t$form.attr('action' , Param.uri.update + row.id );\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click' , '.destroyBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData( id );\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif ( empty( ids ) ) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tself.delData( ids );\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif( $form.validForm() ) {\n\t\t\t\tvar data = $form.serializeObject();\n\n\t\t\t\t$.post( $form.attr('action') , data )\n\t\t\t\t .fail( function(res){\n            tips.error( res.responseText );\n\t\t\t\t })\n\t\t\t\t .done( function( res ){\n\t\t\t\t    if ( res.code == 1001 ) {\n              //需要登录\n              tips.error('请先登录');\n            } else if( res.code != 0 ){\n              tips.error( res.msg );\n            } else {\n              tips.success( res.msg );\n              $('#dataGrid').TableGrid('reload');\n              self.setPortletHide();\n            }\n\t\t\t\t });\n\t\t\t}\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n    //上传按钮\n$('#iconUploadBtn').Uploader({\n  uri : Param.uri.upload , //上传文件\n  param : Param.uploadParam ,\n  album : true ,\n  albumUri : Param.uri.album ,\n  albumCatalogUri : Param.uri.albumCatalog ,\n  albumParam : Param.albumParam ,\n  onSuccess : function ( ret ) {\n    tips.success(ret.msg);\n    if ( ret.code == 0 ) {\n      setImgPreview.set('icon' , ret.data.savePath);\n    }\n  },\n  onChooseAlbum : function( uri ){\n    setImgPreview.set('icon' , uri );\n  }\n});\n\n\n    \n\t} ,\n\n\tdelData : function ( ids ) {\n\t\tvar self = this ;\n\t\tvar data = {\n\t\t\tids : ids\n\t\t};\n\n\t\tsure.init('是否删除?' , function () {\n\n\t\t  $.post( Param.uri.destroy , data )\n\t\t   .fail( function(res){\n         tips.error( res.responseText );\n       })\n\t\t   .done(function (res) {\n          if ( res.code == 1001 ) {\n            //需要登录\n            tips.error('请先登录');\n          } else if( res.code != 0 ){\n            tips.error( res.msg );\n          } else {\n            tips.success( res.msg );\n            $('#dataGrid').TableGrid('reload');\n          }\n        });\n\t\t});\n\t},\n\n\t\t//初始化grid\n\tinitGrid : function () {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query , '' , uri);\n\n\t\t$('#dataGrid').TableGrid({\n\t\t\turi : Param.uri.read ,\n\t\t\tselectAll : true ,\n\t\t\tparam : Param.query ,\n\t\t\trowStyle : function (row) {\n\t\t\t\tif ( row.status == 0 ) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tloadSuccess : function ( rows , settings ) {\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif ( oldUri == uri) {\n\t\t\t\t\treturn false ;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params , '' , oldUri);\n\t\t\t\thistory.replaceState(settings.param , '' , uri);\n\t\t\t}\n\t\t});\n\t}\n\t\n};\n\n//pop state 事件\nwindow.onpopstate = function (event) {\n\tif ( event && event.state ) {\n\t\t$('#searchForm').reloadForm( event.state );\n\t\tvar $dataGrid = $('#dataGrid');\n\t\t$dataGrid.TableGrid('setParam' , event.state);\n\t\t$dataGrid.TableGrid('reload');\n\t}\n};"
  },
  {
    "path": "resources/assets/static/js/backend/MerFunc.js",
    "content": "/**\n * MerFunc JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-12\n */\n\nvar MerFunc = {\n\ttoken: $('input[name=_token]').val(),\n\tinit: function() {\n\t\t//重新设置菜单\n\t\tif (!empty(Param.uri.menu)) {\n\t\t\tLayout.setSidebarMenuActiveLink('set', 'a[data-uri=\"' + Param.uri.menu + '\"]');\n\t\t}\n\n\t\t//初始化ajax 提示框\n\t\tloading.initAjax();\n\n\t\t//初始化页面按钮\n\t\tthis.initBtn();\n\n\t\t//初始化查询form\n\t\tthis.initSearchForm();\n\n\t\t//初始化数据表\n\t\tthis.initGrid();\n\n\t},\n\t//初始化查询form\n\tinitSearchForm: function() {\n\t\tvar $searchForm = $('#searchForm');\n\t\t$searchForm.reloadForm(Param.query);\n\n\t\t//查询按钮\n\t\t$('#searchBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $treeGrid = $('#treeGrid');\n\t\t\tvar param = $treeGrid.TreeGrid('getParam');\n\n\t\t\tparam = $.extend({}, param, $('#searchForm').serializeObject());\n\t\t\tparam.page = 1;\n\t\t\t$treeGrid.TreeGrid('setParam', param);\n\t\t\t$treeGrid.TreeGrid('reload');\n\t\t\tParam.defaultRow.module = param.module\n\t\t});\n\t},\n\n\t//显示 modal\n\tsetPortletShow: function(type) {\n\t\tvar $addEditModal = $('#addEditModal');\n\n\t\t$addEditModal.modal('show');\n\t\tif (type == 'add') {\n\t\t\t$addEditModal.find('.caption-subject').html('新建' + Param.pageTitle);\n\t\t} else if (type == 'edit') {\n\t\t\t$addEditModal.find('.caption-subject').html('编辑' + Param.pageTitle);\n\t\t}\n\t},\n\n\t//关闭 modal\n\tsetPortletHide: function() {\n\t\t$('#addEditModal').modal('hide');\n\t},\n\n\t//初始化各种按钮\n\tinitBtn: function() {\n\t\tvar self = this;\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\t\t\t$form.reloadForm(Param.defaultRow);\n\n\n\t\t\t$form.attr('action', Param.uri.insert);\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click', '.editBtn', function(e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#treeGrid').TreeGrid('getRow', id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(row);\n\n\n\t\t\t$form.attr('action', Param.uri.update + '/' + row.id);\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click', '.destroyBtn', function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData(id);\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif (empty(ids)) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.delData(ids);\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif ($form.validForm()) {\n\t\t\t\tvar data = $form.serializeObject();\n\n\t\t\t\tdata._token = self.token;\n\t\t\t\t$.post($form.attr('action'), data)\n\t\t\t\t\t.fail(function(res) {\n\t\t\t\t\t\ttips.error(res.responseText);\n\t\t\t\t\t})\n\t\t\t\t\t.done(function(res) {\n\t\t\t\t\t\tif (res.code == 1001) {\n\t\t\t\t\t\t\t//需要登录\n\t\t\t\t\t\t\ttips.error('请先登录');\n\t\t\t\t\t\t} else if (res.code != 0) {\n\t\t\t\t\t\t\ttips.error(res.msg);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttips.success(res.msg);\n\t\t\t\t\t\t\t$('#treeGrid').TreeGrid('reload');\n\t\t\t\t\t\t\tself.setPortletHide();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n\t\t//打开权限窗口\n\t\t$(document).on('click', '.privilegeBtn', function(e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar data = $('#treeGrid').TreeGrid('getRow', id);\n\t\t\tvar privilege = data.privilege;\n\t\t\tvar $form = $('#privilegeForm');\n\t\t\t$form[0].reset();\n\n\t\t\tif (!empty(privilege)) {\n\t\t\t\t$.each(privilege, function(index, item) {\n\t\t\t\t\t$form.find('input[value=\"' + item.name + '\"]').prop('checked', true);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t$form.attr('action', Param.uri.updatePrivilege + '/' + id);\n\t\t\t$('#privilegeModal').modal('show');\n\t\t});\n\n\t\t//更新权限\n\t\t$('#submitPrivilegeFormBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $form = $('#privilegeForm');\n\t\t\tvar uri = $form.attr('action');\n\t\t\tvar data = $form.serializeObject();\n\n\t\t\t$.post(uri, data)\n\t\t\t\t.fail(function(res) {\n\t\t\t\t\ttips.error(res.responseText);\n\t\t\t\t})\n\t\t\t\t.done(function(res) {\n\t\t\t\t\tif (res.code == 403) {\n\t\t\t\t\t\t//需要登录\n\t\t\t\t\t\ttips.error('请先登录');\n\t\t\t\t\t} else if (res.code != 0) {\n\t\t\t\t\t\ttips.error(res.msg);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttips.success(res.msg);\n\t\t\t\t\t\t$('#treeGrid').TreeGrid('reload');\n\t\t\t\t\t\t$('#privilegeModal').modal('hide');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t})\n\t},\n\n\tdelData: function(ids) {\n\t\tvar data = {\n\t\t\tids: ids,\n\t\t\t_token: this.token\n\t\t};\n\n\t\tsure.init('是否删除?', function() {\n\t\t\t$.post(Param.uri.destroy, data)\n\t\t\t\t.fail(function(res) {\n\t\t\t\t\ttips.error(res.responseText);\n\t\t\t\t})\n\t\t\t\t.done(function(res) {\n\t\t\t\t\tif (res.code == 1001) {\n\t\t\t\t\t\t//需要登录\n\t\t\t\t\t\ttips.error('请先登录');\n\t\t\t\t\t} else if (res.code != 0) {\n\t\t\t\t\t\ttips.error(res.msg);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttips.success(res.msg);\n\t\t\t\t\t\t$('#treeGrid').TreeGrid('reload');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t});\n\t},\n\n\n\t//初始化tree grid\n\tinitGrid: function() {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query, '', uri);\n\n\t\t$('#treeGrid').TreeGrid({\n\t\t\turi: Param.uri.read,\n\t\t\tfield: 'name', //显示箭头的字段\n\t\t\tparam: Param.query, //查询参数\n\t\t\texpandAll: true,\n\t\t\trowStyle: function(row) {\n\t\t\t\tif (row.status == 0) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t},\n\t\t\tloadSuccess: function(rows, settings) {\n\t\t\t\tvar options = '<option value=\"0\" selected>根目录</option>';\n\t\t\t\toptions += form_options_rows(rows, settings);\n\t\t\t\t$('select[name=\"pid\"]').html(options);\n\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif (oldUri == uri) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params, '', oldUri);\n\t\t\t\thistory.replaceState(settings.param, '', uri);\n\t\t\t}\n\t\t});\n\t}\n\n\n};\n\n//pop state 事件\nwindow.onpopstate = function(event) {\n\tif (event && event.state) {\n\t\t$('#searchForm').reloadForm(event.state);\n\t\tvar $treeGrid = $('#treeGrid');\n\t\t$treeGrid.TreeGrid('setParam', event.state);\n\t\t$treeGrid.TreeGrid('reload');\n\t}\n};\n\nvar formatName = function(value, row) {\n\tvar html = value;\n\tif (!empty(row.icon)) {\n\t\thtml = '<i class=\"' + row.icon + '\"></i> ' + html;\n\t}\n\treturn html;\n};\n\nvar formatIsFunc = function(value) {\n\treturn Param.isFunc[value];\n};\n\nvar formatIsMenu = function(value) {\n\treturn Param.isMenu[value];\n};\n\nvar optPrivilege = function(value, row) {\n\treturn '<a href=\"#\" data-id=\"' + row.id + '\" class=\"btn btn-sm blue privilegeBtn\"><i class=\"fa fa-key\"></i> 权限</a>';\n};"
  },
  {
    "path": "resources/assets/static/js/backend/MerGoodsCatalog.js",
    "content": "/**\n * MerGoodsCatalog JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-10-11\n */\n\nvar MerGoodsCatalog = {\n\ttoken : $('input[name=_token]').val(),\n  config : {} ,\n\tinit : function () {\n\t\t//重新设置菜单\n\t\tif ( !empty( Param.uri.menu ) ) {\n\t\t\tLayout.setSidebarMenuActiveLink('set' , 'a[data-uri=\"'+ Param.uri.menu +'\"]');\n\t\t}\n\n    //初始化ajax 提示框\n    loading.initAjax();\n\n    //初始化页面按钮\n\t\tthis.initBtn();\n\n\t\t//初始化查询form\n\t\tthis.initSearchForm();\n\n\t\t//初始化数据表\n\t\tthis.initGrid();\n\n\t\t\n\t\t\n\t} ,\n\n\t//初始化查询form\n\tinitSearchForm : function () {\n\t\tvar $searchForm = $('#searchForm');\n\t\t$searchForm.reloadForm(Param.query);\n\n\t\t//查询按钮\n\t\t$('#searchBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $treeGrid = $('#treeGrid');\n\t\t\tvar param = $treeGrid.TreeGrid('getParam');\n\n\t\t\tparam = $.extend({} , param , $('#searchForm').serializeObject()  );\n\t\t\tparam.page = 1;\n\n\t\t\t$treeGrid.TreeGrid('setParam' , param);\n\t\t\t$treeGrid.TreeGrid('reload');\n\t\t});\n\t} ,\n\n  //显示 portlet\nsetPortletShow : function ( type ) {\n  var $tablePortlet = $('#tablePortlet') ;\n  var $addEditPortlet = $('#addEditPortlet');\n\n  $tablePortlet.slideUp('fast');\n  if ( type == 'add' ) {\n    if ( !$addEditPortlet.hasClass('blue') ) {\n      $addEditPortlet.removeClass('green-meadow').addClass('blue');\n    }\n\n    $addEditPortlet.find('.caption-subject').html('新增 ' + Param.pageTitle );\n  } else if ( type == 'edit' ) {\n    if ( !$addEditPortlet.hasClass('green-meadow') ) {\n      $addEditPortlet.removeClass('blue').addClass('green-meadow');\n    }\n    $addEditPortlet.find('.caption-subject').html('编辑 ' + Param.pageTitle );\n  }\n\n  //$('#data-table-portlet').slideUp('fast');\n  $addEditPortlet.show();\n},\n\n//关闭 portlet\nsetPortletHide : function () {\n  $('#tablePortlet').slideDown('fast') ;\n  $('#addEditPortlet').slideUp('fast');\n},\n  \n\n\t//初始化各种按钮\n\tinitBtn : function () {\n\t\tvar self = this;\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm( Param.defaultRow );\n\t\t\tsetImgPreview.clear('icon');\nsetImgPreview.clear('icon');\n      \n      \n\n\t\t\t$form.attr('action' , Param.uri.insert );\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click' , '.editBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#treeGrid').TreeGrid('getRow' , id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm( row );\n\t\t\tsetImgPreview.set('icon' , row.icon);\nsetImgPreview.set('icon' , row.icon);\nsetImgPreview.set('icon' , row.icon);\n\t\t\t\n      \n\n\t\t\t$form.attr('action' , Param.uri.update+'/' + row.id );\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click' , '.destroyBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData( id );\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif ( empty( ids ) ) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tself.delData( ids );\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif( $form.validForm() ) {\n\t\t\t\tvar data = $form.serializeObject();\n\t\t\t\tdata._token = self.token;\n\t\t\t\t$.post( $form.attr('action') , data )\n\t\t\t\t .fail( function(res){\n            tips.error( res.responseText );\n\t\t\t\t })\n\t\t\t\t .done( function( res ){\n\t\t\t\t    if ( res.code == 1001 ) {\n              //需要登录\n              tips.error('请先登录');\n            } else if( res.code != 0 ){\n              tips.error( res.msg );\n            } else {\n              tips.success( res.msg );\n              $('#treeGrid').TreeGrid('reload');\n              self.setPortletHide();\n            }\n\t\t\t\t });\n\t\t\t}\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n    //上传按钮\n$('#iconUploadBtn').Uploader({\n  uri : Param.uri.upload , //上传文件\n  param : Param.uploadParam ,\n  album : true ,\n  albumUri : Param.uri.album ,\n  albumCatalogUri : Param.uri.albumCatalog ,\n  albumParam : Param.albumParam ,\n  onSuccess : function ( ret ) {\n    tips.success(ret.msg);\n    if ( ret.code == 0 ) {\n      setImgPreview.set('icon' , ret.data.savePath);\n    }\n  },\n  onChooseAlbum : function( uri ){\n    setImgPreview.set('icon' , uri );\n  }\n});\n\n    \n\t} ,\n\n\tdelData : function ( ids ) {\n\t\tvar self = this ;\n\t\tvar data = {\n\t\t\tids : ids,\n\t\t\t_token : self.token\n\t\t};\n\n\t\tsure.init('是否删除?' , function () {\n\n\t\t  $.post( Param.uri.destroy , data )\n\t\t   .fail( function(res){\n         tips.error( res.responseText );\n       })\n\t\t   .done(function (res) {\n          if ( res.code == 1001 ) {\n            //需要登录\n            tips.error('请先登录');\n          } else if( res.code != 0 ){\n            tips.error( res.msg );\n          } else {\n            tips.success( res.msg );\n            $('#treeGrid').TreeGrid('reload');\n          }\n        });\n\t\t});\n\t},\n\n\t\n\t  //初始化tree grid\n\tinitGrid : function () {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query , '' , uri);\n\n\t\t$('#treeGrid').TreeGrid({\n\t\t\turi : Param.uri.read ,\n\t\t\tfield : 'text', //显示箭头的字段\n\t\t\tparam : Param.query ,  //查询参数\n\t\t\trowStyle : function (row) {\n\t\t\t\tif ( row.status == 0 ) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tloadSuccess : function ( rows , settings ) {\n\t\t\t\tvar options = '<option value=\"0\" selected>根目录</option>';\n\t\t\t\toptions += form_options_rows( rows , settings );\n\t\t\t\t$('select[name=\"pid\"]').html(options);\n\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif ( oldUri == uri) {\n\t\t\t\t\treturn false ;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params , '' , oldUri);\n\t\t\t\thistory.replaceState(settings.param , '' , uri);\n\t\t\t}\n\t\t});\n\t}\n\n\n\n\n\n};\n\n//pop state 事件\nwindow.onpopstate = function (event) {\n\tif ( event && event.state ) {\n\t\t$('#searchForm').reloadForm( event.state );\n\t\tvar $treeGrid = $('#treeGrid');\n\t\t$treeGrid.TreeGrid('setParam' , event.state);\n\t\t$treeGrid.TreeGrid('reload');\n\t}\n};"
  },
  {
    "path": "resources/assets/static/js/backend/MerRole.js",
    "content": "/**\n * MerRole JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-12\n */\n\nvar MerRole = {\n\ttoken: $('input[name=_token]').val(),\n\tconfig: {},\n\tinit: function() {\n\t\t//重新设置菜单\n\t\tif (!empty(Param.uri.menu)) {\n\t\t\tLayout.setSidebarMenuActiveLink('set', 'a[data-uri=\"' + Param.uri.menu + '\"]');\n\t\t}\n\n\t\t//初始化ajax 提示框\n\t\tloading.initAjax();\n\n\t\t//初始化页面按钮\n\t\tthis.initBtn();\n\n\t\t//初始化查询form\n\t\tthis.initSearchForm();\n\n\t\t//初始化数据表\n\t\tthis.initGrid();\n\n\n\t},\n\t//初始化查询form\n\tinitSearchForm: function() {\n\t\tvar $searchForm = $('#searchForm');\n\t\t$searchForm.reloadForm(Param.query);\n\n\t\t//查询按钮\n\t\t$('#searchBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $dataGrid = $('#dataGrid');\n\t\t\tvar param = $dataGrid.TableGrid('getParam');\n\n\t\t\tparam = $.extend({}, param, $('#searchForm').serializeObject());\n\t\t\tparam.page = 1;\n\t\t\t$dataGrid.TableGrid('setParam', param);\n\t\t\t$dataGrid.TableGrid('reload');\n\t\t\tParam.defaultRow.module = param.module\n\t\t});\n\t},\n\n\t//显示 modal\n\tsetPortletShow: function(type) {\n\t\tvar $addEditModal = $('#addEditModal');\n\n\t\t$addEditModal.modal('show');\n\t\tif (type == 'add') {\n\t\t\t$addEditModal.find('.caption-subject').html('新增 ' + Param.pageTitle);\n\t\t} else if (type == 'edit') {\n\t\t\t$addEditModal.find('.caption-subject').html('编辑 ' + Param.pageTitle);\n\t\t}\n\t},\n\n\t//关闭 modal\n\tsetPortletHide: function() {\n\t\t$('#addEditModal').modal('hide');\n\t},\n\n\t//初始化各种按钮\n\tinitBtn: function() {\n\t\tvar self = this;\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(Param.defaultRow);\n\n\n\t\t\t$form.attr('action', Param.uri.insert);\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click', '.editBtn', function(e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#dataGrid').TableGrid('getRow', id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(row);\n\n\n\t\t\t$form.attr('action', Param.uri.update + '/' + row.id);\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click', '.destroyBtn', function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData(id);\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif (empty(ids)) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.delData(ids);\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif ($form.validForm()) {\n\t\t\t\tvar data = $form.serializeObject();\n\n\t\t\t\t$.post($form.attr('action'), data)\n\t\t\t\t\t.fail(function(res) {\n\t\t\t\t\t\ttips.error(res.responseText);\n\t\t\t\t\t})\n\t\t\t\t\t.done(function(res) {\n\t\t\t\t\t\tif (res.code == 403) {\n\t\t\t\t\t\t\t//需要登录\n\t\t\t\t\t\t\ttips.error('请先登录');\n\t\t\t\t\t\t} else if (res.code != 0) {\n\t\t\t\t\t\t\ttips.error(res.msg);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttips.success(res.msg);\n\t\t\t\t\t\t\t$('#dataGrid').TableGrid('reload');\n\t\t\t\t\t\t\tself.setPortletHide();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t//打开权限窗口\n\t\t$(document).on('click', '.permissionBtn', function(e) {\n\t\t\te.preventDefault();\n\n\t\t\t$('#permissionBody').empty();\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar roleData = $('#dataGrid').TableGrid('getRow', id);\n\t\t\tself.config.roleId = id;\n\n\t\t\tvar url = Param.uri.getPermission;\n\t\t\tvar data = {\n\t\t\t\troleId: id,\n\t\t\t\t_token: self.token\n\t\t\t};\n\t\t\t$.post(url, data, function(res) {\n\t\t\t\t$('#permissionLabel').html('[' + roleData.name + ']的权限');\n\t\t\t\t$('#permissionModal').modal('show');\n\t\t\t\t$('#permissionBody').html(res);\n\t\t\t\tvar url = Param.uri.getPrivilegeData;\n\n\t\t\t\t$.post(url, data, function(res) {\n\t\t\t\t\tself.initPermission(res);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n\t\t//功能权限全选或取消\n\t\t$(document).on('click', '.func', function(e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar this_node = $(this).parent('.func-node');\n\t\t\tvar opt = this_node.find('.func-opt');\n\t\t\tvar opt_i = this_node.find('.func-opt > i');\n\n\t\t\tif ($(this).hasClass('disabled') || $(this).hasClass('notall')) {\n\t\t\t\t//全选\n\t\t\t\t$(this).removeClass('active notall disabled').addClass('active');\n\t\t\t\topt.removeClass('active notall disabled').addClass('active');\n\t\t\t\topt_i.removeClass('fa-square-o').addClass('fa-check-square-o');\n\n\t\t\t\t//将下级权限置为可查看\n\t\t\t\tself.setSubOptCheck(this_node);\n\t\t\t} else {\n\t\t\t\t//全不选\n\t\t\t\t$(this).removeClass('active notall disabled').addClass('disabled');\n\t\t\t\topt.removeClass('active notall disabled').addClass('disabled');\n\t\t\t\topt_i.removeClass('fa-check-square-o').addClass('fa-square-o');\n\n\t\t\t\t//将下级权限置为全不选\n\t\t\t\tself.setSubOptDisabled(this_node);\n\t\t\t}\n\t\t});\n\n\t\t//功能权限单选或取消\n\t\t$(document).on('click', '.func-opt', function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar this_i = $(this).find('i');\n\t\t\tvar this_node = $(this).parents('.func-node');\n\n\t\t\tif ($(this).hasClass('disabled')) {\n\t\t\t\t$(this).removeClass('disabled').addClass('active');\n\t\t\t\tthis_i.removeClass('fa-square-o').addClass('fa-check-square-o');\n\t\t\t} else if ($(this).hasClass('active')) {\n\t\t\t\t$(this).removeClass('active').addClass('disabled');\n\t\t\t\tthis_i.removeClass('fa-check-square-o').addClass('fa-square-o');\n\t\t\t}\n\n\t\t\tif ($(this).html().indexOf('查看') > 0) {\n\t\t\t\tif ($(this).hasClass('disabled')) {\n\t\t\t\t\tself.setSubOptDisabled(this_node);\n\t\t\t\t} else {\n\t\t\t\t\tself.setSubOptCheck(this_node);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis_node.find('.func').removeClass('active notall disabled');\n\n\t\t\tif (this_node.find('.func-opt-row > .active').length == 0) {\n\t\t\t\tthis_node.find('.func').addClass('disabled'); //未选择\n\t\t\t} else if (this_node.find('.func-opt').length == this_node.find('.func-opt-row > .active').length) {\n\t\t\t\tthis_node.find('.func').addClass('active'); //全选\n\t\t\t} else {\n\t\t\t\tthis_node.find('.func').addClass('notall'); //部分选择\n\t\t\t}\n\t\t});\n\n\t\t//提交权限\n\t\t$(document).on('click', '#permissionSubmitBtn', function(e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar data = {\n\t\t\t\troleId: self.config.roleId,\n\t\t\t\tprivilegeArr: [],\n\t\t\t\t_token: self.token\n\t\t\t};\n\n\t\t\tvar $active = $('.func-opt-row .active');\n\t\t\tvar len = $active.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\tdata.privilegeArr.push($active.eq(i).data('id'));\n\t\t\t}\n\t\t\tvar url = Param.uri.updatePermission;\n\n\t\t\t$.post(url, data, function(ret) {\n\t\t\t\tif (ret.code != 0) {\n\t\t\t\t\ttips.error(ret.msg);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttips.success(ret.msg);\n\t\t\t\t$('#permissionBody').empty();\n\t\t\t\t$('#permissionModal').modal('hide');\n\t\t\t});\n\t\t});\n\n\n\t},\n\n\tdelData: function(ids) {\n\t\tvar self = this;\n\t\tvar data = {\n\t\t\tids: ids,\n\t\t\t_token: this.token\n\t\t};\n\n\t\tsure.init('是否删除?', function() {\n\n\t\t\t$.post(Param.uri.destroy, data)\n\t\t\t\t.fail(function(res) {\n\t\t\t\t\ttips.error(res.responseText);\n\t\t\t\t})\n\t\t\t\t.done(function(res) {\n\t\t\t\t\tif (res.code == 1001) {\n\t\t\t\t\t\t//需要登录\n\t\t\t\t\t\ttips.error('请先登录');\n\t\t\t\t\t} else if (res.code != 0) {\n\t\t\t\t\t\ttips.error(res.msg);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttips.success(res.msg);\n\t\t\t\t\t\t$('#dataGrid').TableGrid('reload');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t});\n\t},\n\n\t//初始化grid\n\tinitGrid: function() {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query, '', uri);\n\n\t\t$('#dataGrid').TableGrid({\n\t\t\turi: Param.uri.read,\n\t\t\tselectAll: true,\n\t\t\tparam: Param.query,\n\t\t\trowStyle: function(row) {\n\t\t\t\tif (row.status == 0) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t},\n\t\t\tloadSuccess: function(rows, settings) {\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif (oldUri == uri) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params, '', oldUri);\n\t\t\t\thistory.replaceState(settings.param, '', uri);\n\t\t\t}\n\t\t});\n\t},\n\n\t//将下级权限置为可查看\n\tsetSubOptCheck: function(this_node) {\n\t\tvar self_tree = this_node.parent('.func-tree');\n\t\tvar _sub_func_node = self_tree.find('.sub-permission .func-node');\n\t\t_sub_func_node.each(function() {\n\t\t\tvar self_sub_func_node = $(this);\n\t\t\t$(this).find('.func-opt').each(function() {\n\t\t\t\tif ($(this).html().indexOf('查看') > 0) {\n\t\t\t\t\tself_sub_func_node.find('.func').removeClass('active notall disabled').addClass('notall');\n\t\t\t\t\t$(this).removeClass('active notall disabled').addClass('active');\n\t\t\t\t\tvar self_sub_func_opt_i = $(this).find('i');\n\t\t\t\t\tself_sub_func_opt_i.removeClass('fa-square-o').addClass('fa-check-square-o');\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\n\t//将下级权限置为全不选\n\tsetSubOptDisabled: function(this_node) {\n\t\tvar self_tree = this_node.parent('.func-tree');\n\t\tvar _sub_func_node = self_tree.find('.sub-permission .func-node');\n\t\t_sub_func_node.each(function() {\n\t\t\t$(this).find('.func').removeClass('active notall disabled').addClass('disabled');\n\t\t\t$(this).find('.func-opt').removeClass('active notall disabled').addClass('disabled');\n\t\t\t$(this).find('.func-opt > i').removeClass('fa-check-square-o').addClass('fa-square-o');\n\t\t});\n\t},\n\n\t//初始化\n\tinitPermission: function(privilegeData) {\n\t\t$('.func').addClass('disabled');\n\t\t$('.func-opt').addClass('disabled');\n\n\t\tfor (var i = 0; i < privilegeData.length; i++) {\n\t\t\t$obj = $('.func-opt[data-id=\"' + privilegeData[i].privilege_id + '\"]');\n\t\t\t$obj.removeClass('disabled').addClass('active');\n\t\t\t$obj.find('i').removeClass('fa-square-o').addClass('fa-check-square-o');\n\t\t}\n\n\t\t$('.func-node').each(function(index) {\n\t\t\tvar func_id = $(this).data('id');\n\n\t\t\tvar total_len = $(this).find('.func-opt').length;\n\t\t\tvar active_len = $(this).find('.active').length;\n\t\t\tif (total_len == active_len) {\n\t\t\t\t$(this).find('.func').removeClass('disabled').addClass('active');\n\t\t\t} else if (total_len > active_len && active_len > 0) {\n\t\t\t\t$(this).find('.func').removeClass('disabled').addClass('notall');\n\t\t\t}\n\t\t});\n\t},\n\n};\n\n//pop state 事件\nwindow.onpopstate = function(event) {\n\tif (event && event.state) {\n\t\t$('#searchForm').reloadForm(event.state);\n\t\tvar $dataGrid = $('#dataGrid');\n\t\t$dataGrid.TableGrid('setParam', event.state);\n\t\t$dataGrid.TableGrid('reload');\n\t}\n};\n\nvar optPermission = function(value, row) {\n\treturn '<a class=\"btn btn-sm btn-primary permissionBtn\" data-id=\"' + row.id + '\" href=\"javascript:;\" >' +\n\t\t'<i class=\"fa fa-check-square-o\"></i> 授权</a>';\n};"
  },
  {
    "path": "resources/assets/static/js/backend/MerSysUser.js",
    "content": "/**\n * SysMerUser JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-27\n */\n\nvar MerSysUser = {\n  token : $('input[name=_token]').val(),\n  init : function () {\n    //重新设置菜单\n    if ( ! empty( Param.uri.menu ) ) {\n      Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri=\"' + Param.uri.menu + '\"]' );\n    }\n\n    //初始化ajax 提示框\n    loading.initAjax();\n\n    this.initBtn();\n    this.initSearchForm();\n    this.initGrid();\n  } ,\n\n  //初始化查询form\n  initSearchForm : function () {\n    var $searchForm = $( '#searchForm' );\n    $searchForm.reloadForm( Param.query );\n\n    //点击查询按钮\n    $( '#searchBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n\n      var $dataGrid = $( '#dataGrid' );\n      var param = $dataGrid.TableGrid( 'getParam' );\n\n      param.keyword = $.trim( $( '#keyword' ).val() );\n      param.status = $( '#status' ).val();\n      param.page = 1;\n\n      //console.log( param );\n      $dataGrid.TableGrid( 'setParam' , param );\n      $dataGrid.TableGrid( 'reload' );\n    } );\n  } ,\n\n  //显示 portlet\n  setPortletShow : function ( type ) {\n    var $tablePortlet = $( '#tablePortlet' );\n    var $addEditPortlet = $( '#addEditPortlet' );\n\n    $tablePortlet.slideUp( 'fast' );\n    if ( type == 'add' ) {\n      if ( ! $addEditPortlet.hasClass( 'red' ) ) {\n        $addEditPortlet.removeClass( 'green-meadow' ).addClass( 'red' );\n      }\n      $addEditPortlet.find( '.caption-title' ).html( '新建' + Param.pageTitle );\n    } else if ( type == 'edit' ) {\n      if ( ! $addEditPortlet.hasClass( 'green-meadow' ) ) {\n        $addEditPortlet.removeClass( 'red' ).addClass( 'green-meadow' );\n      }\n      $addEditPortlet.find( '.caption-title' ).html( '编辑' + Param.pageTitle );\n    }\n\n    //$('#data-table-portlet').slideUp('fast');\n    $addEditPortlet.show();\n  } ,\n\n  //关闭 portlet\n  setPortletHide : function () {\n    $( '#tablePortlet' ).slideDown( 'fast' );\n    $( '#addEditPortlet' ).slideUp( 'fast' );\n  } ,\n\n  //初始化各种按钮\n  initBtn : function () {\n    var self = this;\n\n    //打开添加框\n    $( '#addNewBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      self.setPortletShow( 'add' );\n\n      var $form = $( '#addEditForm' );\n\n      $form.reloadForm( Param.defaultRow );\n      setImgPreview.clear( 'icon' );\n\n      $form.attr( 'action' , Param.uri.insert );\n    } );\n\n    //编辑按钮\n    $( document ).on( 'click' , '.editBtn' , function ( e ) {\n      e.preventDefault();\n      self.setPortletShow( 'edit' );\n\n      var id = $( this ).data( 'id' );\n      var row = $( '#dataGrid' ).TableGrid( 'getRow' , id );\n      var $form = $( '#addEditForm' );\n\n      $form.reloadForm( row );\n      setImgPreview.set( 'icon' , row.icon );\n\n      //console.log( row.roles );\n      $.each( row.roles , function ( index , item ) {\n        $( 'input[name=\"roles[]\"][value=\"' + item.role_id + '\"]' ).prop( 'checked' , true );\n      } );\n\n      $form.attr( 'action' , Param.uri.update +'/' + row.id );\n    } );\n\n    //删除一行\n    $( document ).on( 'click' , '.destroyBtn' , function ( e ) {\n      e.preventDefault();\n      var id = $( this ).data( 'id' );\n      self.delData( id );\n    } );\n\n    $( '#destroySelectBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var ids = $( '.checker:checked' ).serializeJSON().selectChecker;\n      if ( empty( ids ) ) {\n        tips.error( '请选择要删除的记录' );\n        return;\n      }\n      self.delData( ids );\n    } );\n\n    //提交添加编辑窗\n    $( '#submitFormBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var $form = $( '#addEditForm' );\n      var uri = $form.attr( 'action' );\n\n      if ( $form.validForm() ) {\n        var data = $form.serializeObject();\n        $.post( $form.attr( 'action' ) , data )\n         .fail( function ( res ) {\n           tips.error( res.responseText );\n         } )\n         .done( function ( res ) {\n           if ( res.code == 401 ) {\n             //需要登录\n             tips.error( '请先登录' );\n           } else if ( res.code != 0 ) {\n             tips.error( res.msg );\n           } else {\n             tips.success( res.msg );\n             $( '#dataGrid' ).TableGrid( 'reload' );\n             self.setPortletHide();\n           }\n         } );\n      }\n    } );\n\n    //关闭添加编辑窗\n    $( '#closePortletBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      self.setPortletHide();\n    } );\n\n    //上传按钮\n    $( '#iconUploadBtn' ).Uploader( {\n      uri : Param.uri.upload , //上传文件\n      param : Param.uploadParam ,\n      album : true ,\n      albumUri : Param.uri.album ,\n      albumCatalogUri : Param.uri.albumCatalog ,\n      albumParam : Param.albumParam ,\n      onSuccess : function ( ret ) {\n        tips.success( ret.msg );\n        if ( ret.code == 0 ) {\n          setImgPreview.set( 'icon' , ret.data.savePath );\n        }\n      } ,\n      onChooseAlbum : function ( uri ) {\n        setImgPreview.set( 'icon' , uri );\n      }\n    } );\n\n    //密码重置\n    $( document ).on( 'click' , '.reset-pwd-btn' , function ( e ) {\n      e.preventDefault();\n      var id = $( this ).data( 'id' );\n      sure.init( '将密码重置为 ' + Param.defaultPwd + \" ?\" , function () {\n        $.get( Param.uri.resetPwd + '/'+id , function ( ret ) {\n          if ( ret.code != 0 ) {\n            tips.error( ret.msg );\n            return;\n          }\n          tips.success( '重置成功' );\n        } );\n      } );\n    } );\n  } ,\n\n  delData : function ( ids ) {\n    var data = {\n      ids : ids,\n      _token : this.token\n    };\n\n    sure.init( '是否删除?' , function () {\n\n      $.post( Param.uri.destroy , data )\n       .fail( function ( res ) {\n         tips( res.responseText );\n       } )\n       .done( function ( res ) {\n         if ( res.code == 401 ) {\n           //需要登录\n           tips.error( '请先登录' );\n         } else if ( res.code != 0 ) {\n           tips.error( res.msg );\n         } else {\n           tips.success( res.msg );\n           $( '#dataGrid' ).TableGrid( 'reload' );\n         }\n       } );\n    } );\n  } ,\n\n  //初始化grid\n  initGrid : function () {\n    var self = this;\n    var uri = Param.uri.this + '?' + $.param( Param.query );\n    history.replaceState( Param.query , '' , uri );\n\n    //console.log( uri );\n\n    $( '#dataGrid' ).TableGrid( {\n      uri : Param.uri.read ,\n      selectAll : false ,\n      param : Param.query ,\n      rowStyle : function ( row ) {\n        if ( row.status == 0 ) {\n          return 'warning';\n        }\n      } ,\n      loadSuccess : function ( rows , settings ) {\n        var old_uri = window.location.href;\n        var uri = Param.uri.this + '?' + $.param( settings.param );\n        if ( old_uri == uri ) {\n          return false;\n        }\n\n        var params = $.getUrlParams( window.location.href );\n        history.pushState( params , '' , old_uri );\n        history.replaceState( settings.param , '' , uri );\n      }\n    } );\n  }\n\n};\n\n//pop state 事件\nwindow.onpopstate = function ( event ) {\n  if ( event && event.state ) {\n    $( '#searchForm' ).reloadForm( event.state );\n    var $dataGrid = $( '#data_grid' );\n    $dataGrid.TableGrid( 'setParam' , event.state );\n    $dataGrid.TableGrid( 'reload' );\n  }\n};\n\nvar formatUsername = function ( value , row ) {\n  var html = value + '<br>';\n  $.each( row.roles , function ( index , role ) {\n    html += '<span class=\"label label-default label-sm\">' + role.role_name + '</span>';\n  } );\n  return html;\n};\n\nvar optResetPwd = function ( value , row ) {\n  return '<a href=\"#\" data-id=\"' + row.id + '\" class=\"btn default btn-sm reset-pwd-btn\">' +\n         '<i class=\"fa fa-key\"></i> 重置密码</a>';\n};"
  },
  {
    "path": "resources/assets/static/js/backend/MerUser.js",
    "content": "/**\n * MerUser JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-27\n */\n\nvar MerUser = {\n\ttoken: $('input[name=_token]').val(),\n\tinit: function() {\n\t\t//重新设置菜单\n\t\tif (!empty(Param.uri.menu)) {\n\t\t\tLayout.setSidebarMenuActiveLink('set', 'a[data-uri=\"' + Param.uri.menu + '\"]');\n\t\t}\n\n\t\t//初始化ajax 提示框\n\t\tloading.initAjax();\n\n\t\tthis.initBtn();\n\t\tthis.initSearchForm();\n\t\tthis.initGrid();\n\t},\n\n\t//初始化查询form\n\tinitSearchForm: function() {\n\t\tvar $searchForm = $('#searchForm');\n\t\t$searchForm.reloadForm(Param.query);\n\n\t\t//点击查询按钮\n\t\t$('#searchBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $dataGrid = $('#dataGrid');\n\t\t\tvar param = $dataGrid.TableGrid('getParam');\n\n\t\t\tparam.keyword = $.trim($('#keyword').val());\n\t\t\tparam.status = $('#status').val();\n\t\t\tparam.module = $('#module').val();\n\t\t\tparam.page = 1;\n\n\t\t\t//console.log( param );\n\t\t\t$dataGrid.TableGrid('setParam', param);\n\t\t\t$dataGrid.TableGrid('reload');\n\t\t});\n\t},\n\n\t//显示 portlet\n\tsetPortletShow: function(type) {\n\t\tvar $tablePortlet = $('#tablePortlet');\n\t\tvar $addEditPortlet = $('#addEditPortlet');\n\n\t\t$tablePortlet.slideUp('fast');\n\t\tif (type == 'add') {\n\t\t\tif (!$addEditPortlet.hasClass('red')) {\n\t\t\t\t$addEditPortlet.removeClass('green-meadow').addClass('red');\n\t\t\t}\n\t\t\t$addEditPortlet.find('.caption-title').html('新建' + Param.pageTitle);\n\t\t} else if (type == 'edit') {\n\t\t\tif (!$addEditPortlet.hasClass('green-meadow')) {\n\t\t\t\t$addEditPortlet.removeClass('red').addClass('green-meadow');\n\t\t\t}\n\t\t\t$addEditPortlet.find('.caption-title').html('编辑' + Param.pageTitle);\n\t\t}\n\n\t\t//$('#data-table-portlet').slideUp('fast');\n\t\t$addEditPortlet.show();\n\t},\n\n\t//关闭 portlet\n\tsetPortletHide: function() {\n\t\t$('#tablePortlet').slideDown('fast');\n\t\t$('#addEditPortlet').slideUp('fast');\n\t},\n\n\t//初始化各种按钮\n\tinitBtn: function() {\n\t\tvar self = this;\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(Param.defaultRow);\n\t\t\tsetImgPreview.clear('icon');\n\n\t\t\t$form.attr('action', Param.uri.insert);\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click', '.editBtn', function(e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#dataGrid').TableGrid('getRow', id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tdata = {\n\t\t\t\tmodule: row.module\n\t\t\t}\n\t\t\t$('#roleForm').empty()\n\t\t\t//设置角色组\n\t\t\t$.get(Param.uri.merRoleRead, data)\n\t\t\t\t.fail(function(res) {\n\t\t\t\t\ttips.error(res.responseText);\n\t\t\t\t})\n\t\t\t\t.done(function(res) {\n\t\t\t\t\tif (res.code != 0) {\n\t\t\t\t\t\ttips.error(res.msg);\n\t\t\t\t\t}\n\t\t\t\t\tdata = res.data.rows\n\t\t\t\t\t$.each(data, function(index, value) {\n\t\t\t\t\t\tlabel = '<label class=\"checkbox-inline\"><input name=\"roles[]\" type=\"checkbox\" value=\"' + value.id + '\">' + value.name + '</label>';\n\t\t\t\t\t\t$('#roleForm').append(label)\n\t\t\t\t\t})\n\n\t\t\t\t});\n\n\t\t\t$form.reloadForm(row);\n\t\t\tsetImgPreview.set('icon', row.icon);\n\n\t\t\t//console.log(row.roles);\n\t\t\t$.each(row.roles, function(index, item) {\n\t\t\t\t$('input[name=\"roles[]\"][value=\"' + item.role_id + '\"]').prop('checked', true);\n\t\t\t});\n\n\t\t\t$form.attr('action', Param.uri.update + '/' + row.id);\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click', '.destroyBtn', function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData(id);\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif (empty(ids)) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.delData(ids);\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif ($form.validForm()) {\n\t\t\t\tvar data = $form.serializeObject();\n\t\t\t\tdata._token = self.token;\n\t\t\t\t$.post($form.attr('action'), data)\n\t\t\t\t\t.fail(function(res) {\n\t\t\t\t\t\ttips.error(res.responseText);\n\t\t\t\t\t})\n\t\t\t\t\t.done(function(res) {\n\t\t\t\t\t\tif (res.code == 401) {\n\t\t\t\t\t\t\t//需要登录\n\t\t\t\t\t\t\ttips.error('请先登录');\n\t\t\t\t\t\t} else if (res.code != 0) {\n\t\t\t\t\t\t\ttips.error(res.msg);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttips.success(res.msg);\n\t\t\t\t\t\t\t$('#dataGrid').TableGrid('reload');\n\t\t\t\t\t\t\tself.setPortletHide();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n\t\t//上传按钮\n\t\t$('#iconUploadBtn').Uploader({\n\t\t\turi: Param.uri.upload, //上传文件\n\t\t\tparam: Param.uploadParam,\n\t\t\talbum: true,\n\t\t\talbumUri: Param.uri.album,\n\t\t\talbumCatalogUri: Param.uri.albumCatalog,\n\t\t\talbumParam: Param.albumParam,\n\t\t\tonSuccess: function(ret) {\n\t\t\t\ttips.success(ret.msg);\n\t\t\t\tif (ret.code == 0) {\n\t\t\t\t\tsetImgPreview.set('icon', ret.data.uri);\n\t\t\t\t}\n\t\t\t},\n\t\t\tonChooseAlbum: function(uri) {\n\t\t\t\tsetImgPreview.set('icon', uri);\n\t\t\t}\n\t\t});\n\n\t\t//密码重置\n\t\t$(document).on('click', '.reset-pwd-btn', function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tsure.init('将密码重置为 ' + Param.defaultPwd + \" ?\", function() {\n\t\t\t\t$.get(Param.uri.resetPwd + '/' + id, function(ret) {\n\t\t\t\t\tif (ret.code != 0) {\n\t\t\t\t\t\ttips.error(ret.msg);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\ttips.success('重置成功');\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t},\n\n\tdelData: function(ids) {\n\t\tvar data = {\n\t\t\tids: ids,\n\t\t\t_token: this.token\n\t\t};\n\n\t\tsure.init('是否删除?', function() {\n\n\t\t\t$.post(Param.uri.destroy, data)\n\t\t\t\t.fail(function(res) {\n\t\t\t\t\ttips(res.responseText);\n\t\t\t\t})\n\t\t\t\t.done(function(res) {\n\t\t\t\t\tif (res.code == 401) {\n\t\t\t\t\t\t//需要登录\n\t\t\t\t\t\ttips.error('请先登录');\n\t\t\t\t\t} else if (res.code != 0) {\n\t\t\t\t\t\ttips.error(res.msg);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttips.success(res.msg);\n\t\t\t\t\t\t$('#dataGrid').TableGrid('reload');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t});\n\t},\n\n\t//初始化grid\n\tinitGrid: function() {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query, '', uri);\n\n\t\t//console.log( uri );\n\n\t\t$('#dataGrid').TableGrid({\n\t\t\turi: Param.uri.read,\n\t\t\tselectAll: false,\n\t\t\tparam: Param.query,\n\t\t\trowStyle: function(row) {\n\t\t\t\tif (row.status == 0) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t},\n\t\t\tloadSuccess: function(rows, settings) {\n\t\t\t\tvar old_uri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif (old_uri == uri) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params, '', old_uri);\n\t\t\t\thistory.replaceState(settings.param, '', uri);\n\t\t\t}\n\t\t});\n\t}\n\n};\n\n//pop state 事件\nwindow.onpopstate = function(event) {\n\tif (event && event.state) {\n\t\t$('#searchForm').reloadForm(event.state);\n\t\tvar $dataGrid = $('#data_grid');\n\t\t$dataGrid.TableGrid('setParam', event.state);\n\t\t$dataGrid.TableGrid('reload');\n\t}\n};\n\nvar formatUsername = function(value, row) {\n\tvar html = value + '<br>';\n\t$.each(row.roles, function(index, role) {\n\t\thtml += '<span class=\"badge badge-default \">' + role.role_name + '</span>';\n\t});\n\treturn html;\n};\n\nvar optResetPwd = function(value, row) {\n\treturn '<a href=\"#\" data-id=\"' + row.id + '\" class=\"btn default btn-sm reset-pwd-btn\">' +\n\t\t'<i class=\"fa fa-key\"></i> 重置密码</a>';\n};\nvar formatTest = function(value) {\n\tvar data = ['否', '是'];\n\treturn '<span class=\"label label-sm label-' + yesColor[value] + '\">' + data[value] + '</span>';\n};"
  },
  {
    "path": "resources/assets/static/js/backend/MerUserFavorites.js",
    "content": "/**\n * MerUserFavorites JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-21\n */\n\nvar MerUserFavorites = {\n  config : {} ,\n\tinit : function () {\n\t\t//重新设置菜单\n\t\tif ( !empty( Param.uri.menu ) ) {\n\t\t\tLayout.setSidebarMenuActiveLink('set' , 'a[data-uri=\"'+ Param.uri.menu +'\"]');\n\t\t}\n\n    //初始化ajax 提示框\n    loading.initAjax();\n\n    //初始化页面按钮\n\t\tthis.initBtn();\n\n\t\t//初始化查询form\n\t\tthis.initSearchForm();\n\n\t\t//初始化数据表\n\t\tthis.initGrid();\n\n\t\t\n\t\t\n\t} ,\n\n\t//初始化查询form\n\tinitSearchForm : function () {\n\t\tvar $searchForm = $('#searchForm');\n\t\t$searchForm.reloadForm(Param.query);\n\n\t\t//查询按钮\n\t\t$('#searchBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $dataGrid = $('#dataGrid');\n\t\t\tvar param = $dataGrid.TableGrid('getParam');\n\n\t\t\tparam = $.extend({} , param , $('#searchForm').serializeObject()  );\n\t\t\tparam.page = 1;\n\n\t\t\t$dataGrid.TableGrid('setParam' , param);\n\t\t\t$dataGrid.TableGrid('reload');\n\t\t});\n\t} ,\n\n  //显示 portlet\nsetPortletShow : function ( type ) {\n  var $tablePortlet = $('#tablePortlet') ;\n  var $addEditPortlet = $('#addEditPortlet');\n\n  $tablePortlet.slideUp('fast');\n  if ( type == 'add' ) {\n    if ( !$addEditPortlet.hasClass('blue') ) {\n      $addEditPortlet.removeClass('green-meadow').addClass('blue');\n    }\n\n    $addEditPortlet.find('.caption-subject').html('新增 ' + Param.pageTitle );\n  } else if ( type == 'edit' ) {\n    if ( !$addEditPortlet.hasClass('green-meadow') ) {\n      $addEditPortlet.removeClass('blue').addClass('green-meadow');\n    }\n    $addEditPortlet.find('.caption-subject').html('编辑 ' + Param.pageTitle );\n  }\n\n  //$('#data-table-portlet').slideUp('fast');\n  $addEditPortlet.show();\n},\n\n//关闭 portlet\nsetPortletHide : function () {\n  $('#tablePortlet').slideDown('fast') ;\n  $('#addEditPortlet').slideUp('fast');\n},\n  \n\n\t//初始化各种按钮\n\tinitBtn : function () {\n\t\tvar self = this;\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm( Param.defaultRow );\n\t\t\t\n      \n      \n\n\t\t\t$form.attr('action' , Param.uri.insert );\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click' , '.editBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#dataGrid').TableGrid('getRow' , id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm( row );\n\t\t\t\n\t\t\t\n      \n\n\t\t\t$form.attr('action' , Param.uri.update + row.id );\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click' , '.destroyBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData( id );\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif ( empty( ids ) ) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tself.delData( ids );\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif( $form.validForm() ) {\n\t\t\t\tvar data = $form.serializeObject();\n\n\t\t\t\t$.post( $form.attr('action') , data )\n\t\t\t\t .fail( function(res){\n            tips.error( res.responseText );\n\t\t\t\t })\n\t\t\t\t .done( function( res ){\n\t\t\t\t    if ( res.code == 1001 ) {\n              //需要登录\n              tips.error('请先登录');\n            } else if( res.code != 0 ){\n              tips.error( res.msg );\n            } else {\n              tips.success( res.msg );\n              $('#dataGrid').TableGrid('reload');\n              self.setPortletHide();\n            }\n\t\t\t\t });\n\t\t\t}\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n    \n\n    \n\t} ,\n\n\tdelData : function ( ids ) {\n\t\tvar self = this ;\n\t\tvar data = {\n\t\t\tids : ids\n\t\t};\n\n\t\tsure.init('是否删除?' , function () {\n\n\t\t  $.post( Param.uri.destroy , data )\n\t\t   .fail( function(res){\n         tips.error( res.responseText );\n       })\n\t\t   .done(function (res) {\n          if ( res.code == 1001 ) {\n            //需要登录\n            tips.error('请先登录');\n          } else if( res.code != 0 ){\n            tips.error( res.msg );\n          } else {\n            tips.success( res.msg );\n            $('#dataGrid').TableGrid('reload');\n          }\n        });\n\t\t});\n\t},\n\n\t\t//初始化grid\n\tinitGrid : function () {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query , '' , uri);\n\n\t\t$('#dataGrid').TableGrid({\n\t\t\turi : Param.uri.read ,\n\t\t\tselectAll : true ,\n\t\t\tparam : Param.query ,\n\t\t\trowStyle : function (row) {\n\t\t\t\tif ( row.status == 0 ) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tloadSuccess : function ( rows , settings ) {\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif ( oldUri == uri) {\n\t\t\t\t\treturn false ;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params , '' , oldUri);\n\t\t\t\thistory.replaceState(settings.param , '' , uri);\n\t\t\t}\n\t\t});\n\t}\n\t\n};\n\n//pop state 事件\nwindow.onpopstate = function (event) {\n\tif ( event && event.state ) {\n\t\t$('#searchForm').reloadForm( event.state );\n\t\tvar $dataGrid = $('#dataGrid');\n\t\t$dataGrid.TableGrid('setParam' , event.state);\n\t\t$dataGrid.TableGrid('reload');\n\t}\n};"
  },
  {
    "path": "resources/assets/static/js/backend/Simulator.js",
    "content": "/**\n * 接口调试 JS\n *\n * @author Zix\n * @version 2.0 ,  2016-09-13\n */\n\nvar Simulator = {\n  config : {\n    arrayCount : 0 ,\n    method : ''\n  } ,\n\n  init : function ( config ) {\n    var self = this;\n    $.extend( this.config , config );\n    self.initApiUri();\n    self.initBtn();\n    self.initVersion();\n  } ,\n  initVersion: function(){\n      \n      var ret = {\"v1\":[{\"version\":\"v1\",\"text\":\"v1\"}],\"v2\":[{\"version\":\"v2\",\"text\":\"v2\"}]}\n\n      var options = [];\n      for(var version in ret){\n\n        if(! ret.hasOwnProperty(version)){\n          continue;\n        }\n        var item = ret[ version ];\n        console.log(item)\n        options.push( '<optgroup label=\"' + version + '\">' );\n          if ( ret[ version ].length > 0 ) {\n            for ( var i in item ) {\n              if ( ! item.hasOwnProperty( i ) ) {\n                continue;\n              }\n              var row = item[ i ];\n              options.push( '<option value=\"' + row.version + '\" data-directory=\"' + row.text + '\">' + row.version + '/'  + ' (' + row.text + ')' + '</option>' );\n            }\n          }\n          options.push( '</optgroup>' );\n      }\n\n      $( '#version' ).html( options.join( '' ) ).eq( 0 ).prop( 'selected' , true );\n\n    },\n  //初始化action\n  initApiUri : function (version='') {\n    self=this;\n    $.get( Param.uri.readApi+\"?version=\"+version , function ( ret ) {\n      //console.log( ret ) ;\n      var options = [];\n      for ( var name in ret ) {\n        if ( ! ret.hasOwnProperty( name ) ) {\n          continue;\n        }\n        var item = ret[ name ];\n        options.push( '<optgroup label=\"' + name + '\">' );\n        if ( ret[ name ].length > 0 ) {\n          for ( var i in item ) {\n            if ( ! item.hasOwnProperty( i ) ) {\n              continue;\n            }\n            var row = item[ i ];\n            options.push( '<option value=\"' + row.action + '\" data-directory=\"' + row.directory + '\">' +\n                          row.directory + '/' + row.action + ' (' + row.text + ')' + '</option>' );\n          }\n        }\n        options.push( '</optgroup>' );\n      }\n\n      $( '#actions' ).html( options.join( '' ) ).eq( 0 ).prop( 'selected' , true );\n      self.loadParams();\n    } );\n   \n  } ,\n\n  //初始化按钮\n  initBtn : function () {\n    var self = this;\n    var $actions = $( '#actions' );\n    var $headerForm = $( '#headerForm' );\n    var $signatureStr = $( '#signatureStr' );\n    var $apiResponse = $( '#apiResponse' );\n    var $version = $('#version');\n\n    //显示隐藏header\n    $( '#showOrHideHeader' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      console.log( $headerForm.is( ':hidden' ) );\n      if ( $headerForm.is( ':hidden' ) ) {\n        $headerForm.show();\n        $( this ).removeClass( 'green' ).addClass( 'grey' ).text( '隐藏' );\n      } else {\n        $headerForm.hide();\n        $( this ).removeClass( 'grey' ).addClass( 'green' ).text( '显示' );\n      }\n    } );\n    $version.on('change' , function(){\n      var $version = $('#version');\n\n      //version\n     $ver = $version.find('option:selected').data( 'directory' )\n      self.initApiUri($ver)\n\n    });\n    //action变化\n    $actions.on( 'change' , function () {\n      self.config.method = '';\n      $( '#selectActionBtn' ).trigger( 'click' );\n    } );\n\n    //选择action\n    $( '#selectActionBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      self.config.method = '';\n      self.loadParams();\n    } );\n\n\n    //选择method\n    $( document ).on( 'click' , 'input[name=\"requestMethod\"]' , function () {\n      var method = $( this ).val();\n      if ( self.config.method == method ) {\n        return false;\n      }\n      console.log( method );\n      self.config.method = method;\n      self.loadParams();\n    } );\n\n    //发送请求\n    $( document ).on( 'click' , '#submitBtn' , function ( e ) {\n      e.preventDefault();\n      loading.start();\n\n      var apiUri = Param.uri.api+self.config.version+'/' + self.config.directory + '/' + self.config.action;\n\n      //时间戳\n      var timestamp = Date.parse( new Date() ) / 1000;\n\n      //头部固定参数\n      var header = $( '#headerForm' ).serializeObject();\n      header[ 'timestamp' ] = timestamp;\n      $( '#timestamp' ).val( timestamp );\n\n      //要传的参数\n      var params = self.fixFormData( $( '#paramsForm' ).serializeJSON() );\n\n      //请求方式\n      var requestMethod = $( 'input[name=\"requestMethod\"]:checked' ).val();\n\n      //计算签名\n      header[ 'signature' ] = signature( params , timestamp , Param.secret );\n      $( '#signatureInp' ).val( header[ 'signature' ] );\n\n      if ( self.config.directory == 'system' && self.config.action == 'upload' ) {\n        //上传文件\n        FileUpload.send( Param.uri.api + 'system/upload' , header , params , function ( ret ) {\n          $apiResponse.show().html( jsonFormat( ret ) );\n        } );\n      } else {\n        //普通请求\n        $.ajax( {\n          type : requestMethod ,\n          dataType : 'json' ,\n          url : apiUri ,\n          data : params ,\n          headers : header\n        } )\n         .fail( function ( res ) {\n           loading.end();\n           $apiResponse.show().html( '发生错误了' + res.responseText );\n         } )\n         .done( function ( res ) {\n           loading.end();\n           $apiResponse.show().html( jsonFormat( res ) );\n         } );\n      }\n    } );\n\n    //显示返回示例\n    $( document ).on( 'click' , '#responseBtn' , function ( e ) {\n      e.preventDefault();\n      var $responseExample = $( '#responseExample' );\n\n      if ( $responseExample.is( ':hidden' ) ) {\n        var result = $responseExample.data( 'json' );\n        $responseExample.show().find( 'pre' ).html( JSON.stringify( result , null , 2 ) );\n\n      } else {\n        $responseExample.hide();\n      }\n    } );\n\n    //添加 array item 按钮\n    $( document ).on( 'click' , '.addMoreBtn' , function ( e ) {\n      e.preventDefault();\n      var $row = $( this ).parent().parent();\n      self.config.arrayCount ++;\n      var rowHtml = $row.find( '.for_copy' ).html().replace( /0/g , self.config.arrayCount );\n      var html = '<div class=\"row\">' + rowHtml +\n                 '<div class=\"col-sm-4\"><button class=\"btn btn-default removeRowBtn\"><i class=\"fa fa-minus\"></i></button>' +\n                 '</div></div>';\n      $row.after( html );\n    } );\n\n    //删除 array item 按钮\n    $( document ).on( 'click' , '.removeRowBtn' , function ( e ) {\n      e.preventDefault();\n      $( this ).parent().parent().remove();\n    } )\n  } ,\n\n  //加载参数\n  loadParams : function () {\n    var self = this;\n    var $actions = $( '#actions' );\n    var $signatureStr = $( '#signatureStr' );\n    var $apiResponse = $( '#apiResponse' );\n     var $version = $('#version');\n\n      //version\n     $ver = $version.find('option:selected').data( 'directory' )\n    \n\n    self.config.arrayCount = 0;\n    self.config.directory = $actions.find( 'option:selected' ).data( 'directory' );\n    self.config.action = $actions.val();\n    self.config.version = $ver\n\n    var data = {\n      directory : self.config.directory ,\n      action : self.config.action ,\n      method : self.config.method,\n      version :  self.config.version\n    };\n\n    loading.start();\n    $signatureStr.html( '' );\n    $apiResponse.html( '' );\n\n    $.get( Param.uri.readParams , data , function ( res ) {\n      loading.end();\n      $( '#params' ).html( res );\n      //$('input[name=\"requestMethod\"]:first').prop('checked' , true);\n      self.addTestData();\n    } );\n  } ,\n\n  addTestData : function () {\n    var $form = $( '#paramsForm' );\n    var $token = $form.find( 'input[name=\"api_token\"]' );\n    var $merId = $form.find( 'input[name=\"merId\"]' );\n    var html = '';\n    console.log($token);\n    if ( $token.length > 0 ) {\n      html = '<select name=\"api_token\" class=\"form-control\">';\n\n      for ( var i = 0 ; i < Param.testToken.length ; i ++ ) {\n        var user = Param.testToken[ i ];\n        html += '<option value=\"' + user.api_token + '\">' + user.api_token + ' (' + user.username + ' - ' + user.phone + ' )' + '</option>';\n      }\n      html += '</select>';\n\n      $token.after( html );\n      $token.remove();\n    }\n\n    if ( $merId.length > 0 ) {\n      html = '<select name=\"merId\" class=\"form-control\">';\n\n      for ( var i = 0 ; i < Param.testMer.length ; i ++ ) {\n        var mer = Param.testMer[ i ];\n        html += '<option value=\"' + mer.id + '\">' + mer.id + ' (' + mer.name + ')' + '</option>';\n      }\n      html += '</select>';\n\n      $merId.after( html );\n      $merId.remove();\n    }\n  } ,\n\n  fixFormData : function ( data ) {\n    //console.log( data )  ;\n    for ( var key in data ) {\n      if ( ! data.hasOwnProperty( key ) ) {\n        continue;\n      }\n      if ( $.isArray( data[ key ] ) || $.isPlainObject( data[ key ] ) ) {\n        var newArr = [];\n        for ( var k in  data[ key ] ) {\n          if ( ! data[ key ].hasOwnProperty( k ) ) {\n            continue;\n          }\n          if ( ! empty( data[ key ][ k ] ) ) {\n            newArr.push( data[ key ][ k ] )\n          }\n        }\n        data[ key ] = JSON.stringify( newArr );\n      }\n    }\n    return data;\n  }\n\n\n};\n\n//签名\nfunction signature( data , timestamp , secret ) {\n  //data['timestamp'] = timestamp ;\n\n  var metadata = [];\n  for ( var name in data ) {\n    if ( ! data.hasOwnProperty( name ) ) {\n      continue;\n    }\n    var value = data[ name ];\n    if ( $.isFunction( value ) ) {\n      continue;\n    }\n\n    metadata.push( {\n      name : name ,\n      value : value\n    } )\n  }\n  metadata.push( {\n    name : 'timestamp' ,\n    value : timestamp\n  } );\n\n  metadata.sort( function ( a , b ) {\n    return a.name < b.name ? - 1 : 1;\n  } );\n\n  var url = [];\n  for ( var i in metadata ) {\n    if ( typeof (metadata[ i ][ 'value' ]) === 'undefined' ) {\n      continue;\n    }\n    url.push( metadata[ i ][ 'name' ] + '=' + metadata[ i ][ 'value' ] );\n  }\n  url = url.join( '&' , url ) + '&secret=' + secret;\n  $( '#signatureStr' ).html( htmlEncode( url ) );\n  return $.md5( url );\n}\n\nvar htmlEncode = function ( str ) {\n  var s = \"\";\n  s = str.replace( /&/g , \"&amp;\" );\n  return s;\n};\n\nvar FileUpload = {\n  config : {\n    callback : function () {\n    }\n  } ,\n  send : function ( url , header , params , callback ) {\n    var self = this;\n    self.config.callback = callback;\n    var file = $( 'input[name=\"fileData\"]' )[ 0 ].files[ 0 ];\n    var fd = new FormData();\n    fd.append( \"fileData\" , file );\n\n    var xhr = new XMLHttpRequest();\n\n    for ( var key in params ) {\n      if ( ! params.hasOwnProperty( key ) ) {\n        continue;\n      }\n      if ( ! params[ key ] ) {\n        continue;\n      }\n      fd.append( key , params[ key ] );\n    }\n\n    xhr.upload.addEventListener( \"progress\" , self.onProgress , false );\n    xhr.addEventListener( \"load\" , self.onComplete , false );\n    xhr.addEventListener( \"error\" , self.onFailed , false );\n    xhr.addEventListener( \"abort\" , self.onCanceled , false );\n\n    xhr.open( \"POST\" , url );\n    for ( var k in header ) {\n      if ( ! header.hasOwnProperty( k ) ) {\n        continue;\n      }\n      xhr.setRequestHeader( k , header[ k ] );\n    }\n    xhr.send( fd );\n  } ,\n\n  onComplete : function ( e ) {\n    loading.end();\n    try {\n      var jsonData = $.parseJSON( e.target.responseText );\n      FileUpload.config.callback( jsonData );\n    } catch ( e ) {\n      FileUpload.config.callback( e.message );\n    }\n  } ,\n\n  onProgress : function ( e ) {\n    if ( e.lengthComputable ) {\n      //console.log( e.loaded + ' - ' + e.total );\n    } else {\n      FileUpload.config.callback( e.message );\n    }\n  } ,\n\n  onFailed : function ( e ) {\n    loading.end();\n    FileUpload.config.callback( e.message );\n  } ,\n\n  onCanceled : function ( e ) {\n    loading.end();\n    FileUpload.config.callback( e.message );\n  }\n};\n\n/**\n * json 格式化\n */\nfunction jsonFormat( txt , compress ) {\n  if ( ! txt ) {\n    return txt;\n  }\n  var indentChar = '  ';\n  if ( /^\\s*$/.test( txt ) ) {\n    //alert('数据为空,无法格式化! ');\n    return txt;\n  }\n  var data = txt;\n  if ( ! $.isPlainObject( data ) ) {\n    try {\n      data = eval( '(' + txt + ')' );\n    } catch ( e ) {\n      //alert('数据源语法错误,格式化失败! 错误信息: ' + e.description, 'err');\n      return txt;\n    }\n  }\n  var draw      = [] ,\n      last      = false ,\n      This      = this ,\n      line      = compress ? '' : '\\n' ,\n      nodeCount = 0 ,\n      maxDepth  = 0;\n  var notify = function ( name , value , isLast , indent /* 缩进 */ , formObj ) {\n    nodeCount ++;\n    /* 节点计数 */\n    for ( var i = 0 , tab = '' ; i < indent ; i ++ ) {\n      tab += indentChar;\n    }\n    /* 缩进HTML */\n    tab = compress ? '' : tab;\n    /* 压缩模式忽略缩进 */\n    maxDepth = ++ indent;\n    /* 缩进递增并记录 */\n    if ( value && value.constructor == Array ) { /* 处理数组 */\n      draw.push( tab + (\n          formObj ? (\n                 '\"' + name + '\":'\n          ) : ''\n        ) + '[' + line );\n      /*\n       * 缩进'['\n       * 然后换行\n       */\n      for ( var i = 0 ; i < value.length ; i ++ ) {\n        notify( i , value[ i ] , i == value.length - 1 , indent , false );\n      }\n      draw.push( tab + ']' + (\n          isLast ? line : (\n                 ',' + line\n          )\n        ) );\n      /* 缩进']'换行,若非尾元素则添加逗号 */\n    } else if ( value && typeof value == 'object' ) { /* 处理对象 */\n      draw.push( tab + (\n          formObj ? (\n                 '\"' + name + '\":'\n          ) : ''\n        ) + '{' + line );\n      /*\n       * 缩进'{'\n       * 然后换行\n       */\n      var len = 0 ,\n          i   = 0;\n      for ( var key in value ) {\n        len ++;\n      }\n      for ( var key in value ) {\n        notify( key , value[ key ] , ++ i == len , indent , true );\n      }\n      draw.push( tab + '}' + (\n          isLast ? line : (\n                 ',' + line\n          )\n        ) );\n      /* 缩进'}'换行,若非尾元素则添加逗号 */\n    } else {\n      if ( typeof value == 'string' ) {\n        value = '\"' + value + '\"';\n      }\n      draw.push( tab + (\n          formObj ? (\n                 '\"' + name + '\":'\n          ) : ''\n        ) + value + (\n                   isLast ? '' : ','\n                 ) + line );\n    }\n    ;\n  };\n  var isLast = true ,\n      indent = 0;\n  notify( '' , data , isLast , indent , false );\n  return draw.join( '' );\n}"
  },
  {
    "path": "resources/assets/static/js/backend/SimulatorReadme.js",
    "content": "/**\n * 模拟器文档 JS\n *\n * @author Zix\n * @version 2.0 ,  2016-05-06\n */\n\nvar SimulatorReadme = {\n  init : function () {\n    var self = this;\n\n    //重新设置菜单\n    if ( ! empty( Param.uri.menu ) ) {\n      Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri=\"' + Param.uri.menu + '\"]' );\n    }\n\n  }\n};"
  },
  {
    "path": "resources/assets/static/js/backend/SysApiLog.js",
    "content": "/**\n * SysApiLog JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2017-09-25\n */\n\nvar {funcLower} = {\n    token : $('input[name=_token]').val(),\n    config : {} ,\n\tinit : function () {\n\t\t//重新设置菜单\n\t\tif ( !empty( Param.uri.menu ) ) {\n\t\t\tLayout.setSidebarMenuActiveLink('set' , 'a[data-uri=\"'+ Param.uri.menu +'\"]');\n\t\t}\n\n    //初始化ajax 提示框\n    loading.initAjax();\n\n    //初始化页面按钮\n\t\tthis.initBtn();\n\n\t\t//初始化查询form\n\t\tthis.initSearchForm();\n\n\t\t//初始化数据表\n\t\tthis.initGrid();\n\n\t\t\n\t\t\n\t} ,\n\n\t//初始化查询form\n\tinitSearchForm : function () {\n\t\tvar $searchForm = $('#searchForm');\n\t\t$searchForm.reloadForm(Param.query);\n\n\t\t//查询按钮\n\t\t$('#searchBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $dataGrid = $('#dataGrid');\n\t\t\tvar param = $dataGrid.TableGrid('getParam');\n\n\t\t\tparam = $.extend({} , param , $('#searchForm').serializeObject()  );\n\t\t\tparam.page = 1;\n\n\t\t\t$dataGrid.TableGrid('setParam' , param);\n\t\t\t$dataGrid.TableGrid('reload');\n\t\t});\n\t} ,\n\n  //显示 portlet\nsetPortletShow : function ( type ) {\n  var $tablePortlet = $('#tablePortlet') ;\n  var $addEditPortlet = $('#addEditPortlet');\n\n  $tablePortlet.slideUp('fast');\n  if ( type == 'add' ) {\n    if ( !$addEditPortlet.hasClass('blue') ) {\n      $addEditPortlet.removeClass('green-meadow').addClass('blue');\n    }\n\n    $addEditPortlet.find('.caption-subject').html('新增 ' + Param.pageTitle );\n  } else if ( type == 'edit' ) {\n    if ( !$addEditPortlet.hasClass('green-meadow') ) {\n      $addEditPortlet.removeClass('blue').addClass('green-meadow');\n    }\n    $addEditPortlet.find('.caption-subject').html('编辑 ' + Param.pageTitle );\n  }\n\n  //$('#data-table-portlet').slideUp('fast');\n  $addEditPortlet.show();\n},\n\n//关闭 portlet\nsetPortletHide : function () {\n  $('#tablePortlet').slideDown('fast') ;\n  $('#addEditPortlet').slideUp('fast');\n},\n  \n\n\t//初始化各种按钮\n\tinitBtn : function () {\n\t\tvar self = this;\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm( Param.defaultRow );\n\t\t\t\n      \n      \n\n\t\t\t$form.attr('action' , Param.uri.insert );\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click' , '.editBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#dataGrid').TableGrid('getRow' , id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm( row );\n\t\t\t\n\t\t\t\n      \n\n\t\t\t$form.attr('action' , Param.uri.update + '/' +row.id );\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click' , '.destroyBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData( id );\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif ( empty( ids ) ) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tself.delData( ids );\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif( $form.validForm() ) {\n\t\t\t\tvar data = $form.serializeObject();\n\n\t\t\t\t$.post( $form.attr('action') , data )\n\t\t\t\t .fail( function(res){\n            tips.error( res.responseText );\n\t\t\t\t })\n\t\t\t\t .done( function( res ){\n\t\t\t\t    if ( res.code == 1001 ) {\n              //需要登录\n              tips.error('请先登录');\n            } else if( res.code != 0 ){\n              tips.error( res.msg );\n            } else {\n              tips.success( res.msg );\n              $('#dataGrid').TableGrid('reload');\n              self.setPortletHide();\n            }\n\t\t\t\t });\n\t\t\t}\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n    \n\n    \n\t} ,\n\n\tdelData : function ( ids ) {\n\t\tvar self = this ;\n\t\tvar data = {\n\t\t\tids : ids,\n\t\t\t_token : this.token\n\t\t};\n\n\t\tsure.init('是否删除?' , function () {\n\n\t\t  $.post( Param.uri.destroy , data )\n\t\t   .fail( function(res){\n         tips.error( res.responseText );\n       })\n\t\t   .done(function (res) {\n          if ( res.code == 1001 ) {\n            //需要登录\n            tips.error('请先登录');\n          } else if( res.code != 0 ){\n            tips.error( res.msg );\n          } else {\n            tips.success( res.msg );\n            $('#dataGrid').TableGrid('reload');\n          }\n        });\n\t\t});\n\t},\n\n\t\t//初始化grid\n\tinitGrid : function () {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query , '' , uri);\n\n\t\t$('#dataGrid').TableGrid({\n\t\t\turi : Param.uri.read ,\n\t\t\tselectAll : true ,\n\t\t\tparam : Param.query ,\n\t\t\trowStyle : function (row) {\n\t\t\t\tif ( row.status == 0 ) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tloadSuccess : function ( rows , settings ) {\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif ( oldUri == uri) {\n\t\t\t\t\treturn false ;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params , '' , oldUri);\n\t\t\t\thistory.replaceState(settings.param , '' , uri);\n\t\t\t}\n\t\t});\n\t}\n\t\n};\n\n//pop state 事件\nwindow.onpopstate = function (event) {\n\tif ( event && event.state ) {\n\t\t$('#searchForm').reloadForm( event.state );\n\t\tvar $dataGrid = $('#dataGrid');\n\t\t$dataGrid.TableGrid('setParam' , event.state);\n\t\t$dataGrid.TableGrid('reload');\n\t}\n};"
  },
  {
    "path": "resources/assets/static/js/backend/SysAppVersion.js",
    "content": "/**\n * SysAppVersion JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-27\n */\n\nvar SysAppVersion = {\n  token : $('input[name=_token]').val(),\n  config : {} ,\n  init : function () {\n    //重新设置菜单\n    if ( ! empty( Param.uri.menu ) ) {\n      Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri=\"' + Param.uri.menu + '\"]' );\n    }\n\n    //初始化ajax 提示框\n    loading.initAjax();\n\n    //初始化页面按钮\n    this.initBtn();\n\n    //初始化查询form\n    this.initSearchForm();\n\n    //初始化数据表\n    this.initGrid();\n\n\n  } ,\n\n  //初始化查询form\n  initSearchForm : function () {\n    var $searchForm = $( '#searchForm' );\n    $searchForm.reloadForm( Param.query );\n\n    //查询按钮\n    $( '#searchBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n\n      var $dataGrid = $( '#dataGrid' );\n      var param = $dataGrid.TableGrid( 'getParam' );\n\n      param = $.extend( {} , param , $( '#searchForm' ).serializeObject() );\n      param.page = 1;\n\n      $dataGrid.TableGrid( 'setParam' , param );\n      $dataGrid.TableGrid( 'reload' );\n    } );\n  } ,\n\n  //显示 portlet\n  setPortletShow : function ( type ) {\n    var $tablePortlet = $( '#tablePortlet' );\n    var $addEditPortlet = $( '#addEditPortlet' );\n\n    $tablePortlet.slideUp( 'fast' );\n    if ( type == 'add' ) {\n      if ( ! $addEditPortlet.hasClass( 'blue' ) ) {\n        $addEditPortlet.removeClass( 'green-meadow' ).addClass( 'blue' );\n      }\n\n      $addEditPortlet.find( '.caption-subject' ).html( '新增 ' + Param.pageTitle );\n    } else if ( type == 'edit' ) {\n      if ( ! $addEditPortlet.hasClass( 'green-meadow' ) ) {\n        $addEditPortlet.removeClass( 'blue' ).addClass( 'green-meadow' );\n      }\n      $addEditPortlet.find( '.caption-subject' ).html( '编辑 ' + Param.pageTitle );\n    }\n\n    //$('#data-table-portlet').slideUp('fast');\n    $addEditPortlet.show();\n  } ,\n\n  //关闭 portlet\n  setPortletHide : function () {\n    $( '#tablePortlet' ).slideDown( 'fast' );\n    $( '#addEditPortlet' ).slideUp( 'fast' );\n  } ,\n\n\n  //初始化各种按钮\n  initBtn : function () {\n    var self = this;\n\n    //打开添加框\n    $( '#addNewBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      self.setPortletShow( 'add' );\n\n      var $form = $( '#addEditForm' );\n\n      $form.reloadForm( Param.defaultRow );\n\n\n      $form.attr( 'action' , Param.uri.insert );\n    } );\n\n    //编辑按钮\n    $( document ).on( 'click' , '.editBtn' , function ( e ) {\n      e.preventDefault();\n      self.setPortletShow( 'edit' );\n\n      var id = $( this ).data( 'id' );\n      var row = $( '#dataGrid' ).TableGrid( 'getRow' , id );\n      var $form = $( '#addEditForm' );\n\n      $form.reloadForm( row );\n\n\n      $form.attr( 'action' , Param.uri.update + '/'+ row.id );\n    } );\n\n    //删除一行\n    $( document ).on( 'click' , '.destroyBtn' , function ( e ) {\n      e.preventDefault();\n      var id = $( this ).data( 'id' );\n      self.delData( id );\n    } );\n\n    $( '#destroySelectBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var ids = $( '.checker:checked' ).serializeJSON().selectChecker;\n      if ( empty( ids ) ) {\n        tips.error( '请选择要删除的记录' );\n        return;\n      }\n      self.delData( ids );\n    } );\n\n    //提交添加编辑窗\n    $( '#submitFormBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var $form = $( '#addEditForm' );\n\n      if ( $form.validForm() ) {\n        var data = $form.serializeObject();\n        data._token = self.token;\n        $.post( $form.attr( 'action' ) , data )\n         .fail( function ( res ) {\n           tips.error( res.responseText );\n         } )\n         .done( function ( res ) {\n           if ( res.code == 1001 ) {\n             //需要登录\n             tips.error( '请先登录' );\n           } else if ( res.code != 0 ) {\n             tips.error( res.msg );\n           } else {\n             tips.success( res.msg );\n             $( '#dataGrid' ).TableGrid( 'reload' );\n             self.setPortletHide();\n           }\n         } );\n      }\n    } );\n\n    //关闭添加编辑窗\n    $( '#closePortletBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      self.setPortletHide();\n    } );\n\n\n  } ,\n\n  delData : function ( ids ) {\n    var self = this;\n    var data = {\n      ids : ids,\n      _token : this.token\n    };\n\n    sure.init( '是否删除?' , function () {\n\n      $.post( Param.uri.destroy , data )\n       .fail( function ( res ) {\n         tips.error( res.responseText );\n       } )\n       .done( function ( res ) {\n         if ( res.code == 1001 ) {\n           //需要登录\n           tips.error( '请先登录' );\n         } else if ( res.code != 0 ) {\n           tips.error( res.msg );\n         } else {\n           tips.success( res.msg );\n           $( '#dataGrid' ).TableGrid( 'reload' );\n         }\n       } );\n    } );\n  } ,\n\n  //初始化grid\n  initGrid : function () {\n    var self = this;\n    var uri = Param.uri.this + '?' + $.param( Param.query );\n    history.replaceState( Param.query , '' , uri );\n\n    $( '#dataGrid' ).TableGrid( {\n      uri : Param.uri.read ,\n      selectAll : true ,\n      param : Param.query ,\n      rowStyle : function ( row ) {\n        if ( row.status == 0 ) {\n          return 'warning';\n        }\n      } ,\n      loadSuccess : function ( rows , settings ) {\n        var oldUri = window.location.href;\n        var uri = Param.uri.this + '?' + $.param( settings.param );\n        //console.log( uri );\n        if ( oldUri == uri ) {\n          return false;\n        }\n\n        var params = $.getUrlParams( window.location.href );\n        history.pushState( params , '' , oldUri );\n        history.replaceState( settings.param , '' , uri );\n      }\n    } );\n  }\n\n};\n\n//pop state 事件\nwindow.onpopstate = function ( event ) {\n  if ( event && event.state ) {\n    $( '#searchForm' ).reloadForm( event.state );\n    var $dataGrid = $( '#dataGrid' );\n    $dataGrid.TableGrid( 'setParam' , event.state );\n    $dataGrid.TableGrid( 'reload' );\n  }\n};\n\nvar formatDevice = function ( value ) {\n  if ( value == 'ios' ) {\n    return '<i class=\"fa fa-apple\"></i>'\n  } else {\n    return '<i class=\"fa fa-android\"></i>';\n  }\n};\n\nvar formatUri = function ( value ) {\n  if ( empty( value ) ) {\n    return '';\n  }\n\n  return '<a href=\"' + value + '\">下载</a>';\n};"
  },
  {
    "path": "resources/assets/static/js/backend/SysArea.js",
    "content": "/**\n * SysArea JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-20\n */\n\nvar SysArea = {\n\ttoken : $('input[name=_token]').val(),\n\tconfig : {} ,\n\tinit : function () {\n\t\t//重新设置菜单\n\t\tif ( ! empty(Param.uri.menu) ) {\n\t\t\tLayout.setSidebarMenuActiveLink('set' , 'a[data-uri=\"' + Param.uri.menu + '\"]');\n\t\t}\n\n\t\t//初始化ajax 提示框\n\t\tloading.initAjax();\n\n\t\t//初始化页面按钮\n\t\tthis.initBtn();\n\n\t\t//初始化查询form\n\t\tthis.initSearchForm();\n\n\t\t//初始化数据表\n\t\tthis.initGrid();\n\t} ,\n\n\t//初始化查询form\n\tinitSearchForm : function () {\n\t\tvar $searchForm = $('#searchForm');\n\t\t$searchForm.reloadForm(Param.query);\n\n\t\t//查询按钮\n\t\t$('#searchBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $dataGrid = $('#dataGrid');\n\t\t\tvar param = $dataGrid.TableGrid('getParam');\n\n\t\t\tparam = $.extend({} , param , $('#searchForm').serializeObject());\n\t\t\tparam.page = 1;\n\n\t\t\t$dataGrid.TableGrid('setParam' , param);\n\t\t\t$dataGrid.TableGrid('reload');\n\t\t});\n\t} ,\n\n\n\t//显示 modal\n\tsetPortletShow : function (type) {\n\t\tvar $addEditModal = $('#addEditModal');\n\n\t\t$addEditModal.modal('show');\n\t\tif ( type == 'add' ) {\n\t\t\t$addEditModal.find('.caption-subject').html('新增 ' + Param.pageTitle);\n\t\t} else if ( type == 'edit' ) {\n\t\t\t$addEditModal.find('.caption-subject').html('编辑 ' + Param.pageTitle);\n\t\t}\n\t} ,\n\n//关闭 modal\n\tsetPortletHide : function () {\n\t\t$('#addEditModal').modal('hide');\n\t} ,\n\n\t//初始化各种按钮\n\tinitBtn : function () {\n\t\tvar self = this;\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(Param.defaultRow);\n\n\n\t\t\t$form.attr('action' , Param.uri.insert);\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click' , '.editBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#dataGrid').TableGrid('getRow' , id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(row);\n\n\n\t\t\t$form.attr('action' , Param.uri.update+ '/' + row.id);\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click' , '.destroyBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData(id);\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif ( empty(ids) ) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.delData(ids);\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif ( $form.validForm() ) {\n\t\t\t\tvar data = $form.serializeObject();\n\t\t\t\tdata['pid'] = Param.query.pid;\n\t\t\t\t$.post($form.attr('action') , data)\n\t\t\t\t .fail(function (res) {\n\t\t\t\t\t tips.error(res.responseText);\n\t\t\t\t })\n\t\t\t\t .done(function (res) {\n\t\t\t\t\t if ( res.code == 1001 ) {\n\t\t\t\t\t\t //需要登录\n\t\t\t\t\t\t tips.error('请先登录');\n\t\t\t\t\t } else if ( res.code != 0 ) {\n\t\t\t\t\t\t tips.error(res.msg);\n\t\t\t\t\t } else {\n\t\t\t\t\t\t tips.success(res.msg);\n\t\t\t\t\t\t $('#dataGrid').TableGrid('reload');\n\t\t\t\t\t\t self.setPortletHide();\n\t\t\t\t\t }\n\t\t\t\t });\n\t\t\t}\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n\n\t} ,\n\n\tdelData : function (ids) {\n\t\tvar self = this;\n\t\tvar data = {\n\t\t\tids : ids ,\n\t\t\t_token : self.token\n\t\t};\n\n\t\tsure.init('是否删除?' , function () {\n\n\t\t\t$.post(Param.uri.destroy , data)\n\t\t\t .fail(function (res) {\n\t\t\t\t tips.error(res.responseText);\n\t\t\t })\n\t\t\t .done(function (res) {\n\t\t\t\t if ( res.code == 1001 ) {\n\t\t\t\t\t //需要登录\n\t\t\t\t\t tips.error('请先登录');\n\t\t\t\t } else if ( res.code != 0 ) {\n\t\t\t\t\t tips.error(res.msg);\n\t\t\t\t } else {\n\t\t\t\t\t tips.success(res.msg);\n\t\t\t\t\t $('#dataGrid').TableGrid('reload');\n\t\t\t\t }\n\t\t\t });\n\t\t});\n\t} ,\n\n\t//初始化grid\n\tinitGrid : function () {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query , '' , uri);\n\n\t\t$('#dataGrid').TableGrid({\n\t\t\turi : Param.uri.read ,\n\t\t\tselectAll : true ,\n\t\t\tparam : Param.query ,\n\t\t\trowStyle : function (row) {\n\t\t\t\tif ( row.status == 0 ) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tloadSuccess : function (rows , settings) {\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif ( oldUri == uri ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params , '' , oldUri);\n\t\t\t\thistory.replaceState(settings.param , '' , uri);\n\t\t\t}\n\t\t});\n\t}\n\n};\n\n//pop state 事件\nwindow.onpopstate = function (event) {\n\tif ( event && event.state ) {\n\t\t$('#searchForm').reloadForm(event.state);\n\t\tvar $dataGrid = $('#dataGrid');\n\t\t$dataGrid.TableGrid('setParam' , event.state);\n\t\t$dataGrid.TableGrid('reload');\n\t}\n};\n\nvar optChildren = function (value , row) {\n\treturn '<a href=\"backend/sysarea/index?pid=' + row.id + '\" class=\"btn btn-sm grey\">' +\n\t       '<i class=\"fa fa-arrow-down\"></i> 查看下级</a>';\n};"
  },
  {
    "path": "resources/assets/static/js/backend/SysFunc.js",
    "content": "/**\n * SysFunc JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-12\n */\n\nvar SysFunc = {\n\n\t'token': $('input[name=_token]').val(),\n\n\tinit: function() {\n\t\t//重新设置菜单\n\t\tif (!empty(Param.uri.menu)) {\n\t\t\tLayout.setSidebarMenuActiveLink('set', 'a[data-uri=\"' + Param.uri.menu + '\"]');\n\t\t}\n\n\t\t//初始化ajax 提示框\n\t\tloading.initAjax();\n\n\t\t//初始化页面按钮\n\t\tthis.initBtn();\n\n\n\t\t//初始化数据表\n\t\tthis.initGrid();\n\n\t},\n\n\t//显示 modal\n\tsetPortletShow: function(type) {\n\t\tvar $addEditModal = $('#addEditModal');\n\n\t\t$addEditModal.modal('show');\n\t\tif (type == 'add') {\n\t\t\t$addEditModal.find('.caption-subject').html('新建' + Param.pageTitle);\n\t\t} else if (type == 'edit') {\n\t\t\t$addEditModal.find('.caption-subject').html('编辑' + Param.pageTitle);\n\t\t}\n\t},\n\n\t//关闭 modal\n\tsetPortletHide: function() {\n\t\t$('#addEditModal').modal('hide');\n\t},\n\n\t//初始化各种按钮\n\tinitBtn: function() {\n\t\tvar self = this;\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(Param.defaultRow);\n\n\n\t\t\t$form.attr('action', Param.uri.insert);\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click', '.editBtn', function(e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#treeGrid').TreeGrid('getRow', id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(row);\n\n\n\t\t\t$form.attr('action', Param.uri.update + '/' + row.id);\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click', '.destroyBtn', function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData(id);\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif (empty(ids)) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.delData(ids);\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif ($form.validForm()) {\n\t\t\t\tvar data = $form.serializeObject();\n\n\t\t\t\t$.post($form.attr('action'), data)\n\t\t\t\t\t.fail(function(res) {\n\t\t\t\t\t\ttips.error(res.responseText);\n\t\t\t\t\t})\n\t\t\t\t\t.done(function(res) {\n\t\t\t\t\t\tif (res.code == 1001) {\n\t\t\t\t\t\t\t//需要登录\n\t\t\t\t\t\t\ttips.error('请先登录');\n\t\t\t\t\t\t} else if (res.code != 0) {\n\t\t\t\t\t\t\ttips.error(res.msg);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttips.success(res.msg);\n\t\t\t\t\t\t\t$('#treeGrid').TreeGrid('reload');\n\t\t\t\t\t\t\tself.setPortletHide();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n\t\t//打开权限窗口\n\t\t$(document).on('click', '.privilegeBtn', function(e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar data = $('#treeGrid').TreeGrid('getRow', id);\n\t\t\tvar privilege = data.privilege;\n\t\t\tvar $form = $('#privilegeForm');\n\t\t\t$form[0].reset();\n\n\t\t\tif (!empty(privilege)) {\n\t\t\t\t$.each(privilege, function(index, item) {\n\t\t\t\t\t$form.find('input[value=\"' + item.name + '\"]').prop('checked', true);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t$form.attr('action', Param.uri.updatePrivilege + '/' + id);\n\t\t\t$('#privilegeModal').modal('show');\n\t\t});\n\n\t\t//更新权限\n\t\t$('#submitPrivilegeFormBtn').on('click', function(e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $form = $('#privilegeForm');\n\t\t\tvar uri = $form.attr('action');\n\t\t\tvar data = $form.serializeObject();\n\n\t\t\t$.post(uri, data)\n\t\t\t\t.fail(function(res) {\n\t\t\t\t\ttips.error(res.responseText);\n\t\t\t\t})\n\t\t\t\t.done(function(res) {\n\t\t\t\t\tif (res.code == 403) {\n\t\t\t\t\t\t//需要登录\n\t\t\t\t\t\ttips.error('请先登录');\n\t\t\t\t\t} else if (res.code != 0) {\n\t\t\t\t\t\ttips.error(res.msg);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttips.success(res.msg);\n\t\t\t\t\t\t$('#treeGrid').TreeGrid('reload');\n\t\t\t\t\t\t$('#privilegeModal').modal('hide');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t})\n\t},\n\n\tdelData: function(ids) {\n\t\tvar data = {\n\t\t\tids: ids,\n\t\t\t_token: this.token\n\t\t};\n\n\n\t\tsure.init('是否删除?', function() {\n\t\t\t$.post(Param.uri.destroy, data)\n\t\t\t\t.fail(function(res) {\n\t\t\t\t\ttips.error(res.responseText);\n\t\t\t\t})\n\t\t\t\t.done(function(res) {\n\t\t\t\t\tif (res.code == 1001) {\n\t\t\t\t\t\t//需要登录\n\t\t\t\t\t\ttips.error('请先登录');\n\t\t\t\t\t} else if (res.code != 0) {\n\t\t\t\t\t\ttips.error(res.msg);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttips.success(res.msg);\n\t\t\t\t\t\t$('#treeGrid').TreeGrid('reload');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t});\n\t},\n\n\n\t//初始化tree grid\n\tinitGrid: function() {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query, '', uri);\n\n\t\t$('#treeGrid').TreeGrid({\n\t\t\turi: Param.uri.read,\n\t\t\tfield: 'name', //显示箭头的字段\n\t\t\tparam: Param.query, //查询参数\n\t\t\texpandAll: true,\n\t\t\trowStyle: function(row) {\n\t\t\t\tif (row.status == 0) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t},\n\t\t\tloadSuccess: function(rows, settings) {\n\t\t\t\tvar options = '<option value=\"0\" selected>根目录</option>';\n\t\t\t\toptions += form_options_rows(rows, settings);\n\t\t\t\t$('select[name=\"pid\"]').html(options);\n\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif (oldUri == uri) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params, '', oldUri);\n\t\t\t\thistory.replaceState(settings.param, '', uri);\n\t\t\t}\n\t\t});\n\t}\n\n\n};\n\n//pop state 事件\nwindow.onpopstate = function(event) {\n\tif (event && event.state) {\n\t\t$('#searchForm').reloadForm(event.state);\n\t\tvar $treeGrid = $('#treeGrid');\n\t\t$treeGrid.TreeGrid('setParam', event.state);\n\t\t$treeGrid.TreeGrid('reload');\n\t}\n};\n\nvar formatName = function(value, row) {\n\tvar html = value;\n\tif (!empty(row.icon)) {\n\t\thtml = '<i class=\"' + row.icon + '\"></i> ' + html;\n\t}\n\treturn html;\n};\n\nvar formatIsFunc = function(value) {\n\treturn Param.isFunc[value];\n};\n\nvar formatIsMenu = function(value) {\n\treturn Param.isMenu[value];\n};\n\nvar optPrivilege = function(value, row) {\n\treturn '<a href=\"#\" data-id=\"' + row.id + '\" class=\"btn btn-sm blue privilegeBtn\"><i class=\"fa fa-key\"></i> 权限</a>';\n};"
  },
  {
    "path": "resources/assets/static/js/backend/SysMail.js",
    "content": "/**\n * SysMail JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-10-10\n */\n\nvar SysMail = {\n  token : $('input[name=_token]').val(),\n  config : {} ,\n  init : function () {\n    //重新设置菜单\n    if ( ! empty( Param.uri.menu ) ) {\n      Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri=\"' + Param.uri.menu + '\"]' );\n    }\n\n    //初始化ajax 提示框\n    loading.initAjax();\n\n    //初始化页面按钮\n    this.initBtn();\n\n    //初始化查询form\n    this.initSearchForm();\n\n    //初始化数据表\n    this.initGrid();\n\n\n  } ,\n\n  //初始化查询form\n  initSearchForm : function () {\n    var $searchForm = $( '#searchForm' );\n    $searchForm.reloadForm( Param.query );\n\n    //查询按钮\n    $( '#searchBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n\n      var $dataGrid = $( '#dataGrid' );\n      var param = $dataGrid.TableGrid( 'getParam' );\n\n      param = $.extend( {} , param , $( '#searchForm' ).serializeObject() );\n      param.page = 1;\n\n      $dataGrid.TableGrid( 'setParam' , param );\n      $dataGrid.TableGrid( 'reload' );\n    } );\n  } ,\n\n  //显示 portlet\n  setPortletShow : function ( type ) {\n    var $tablePortlet = $( '#tablePortlet' );\n    var $addEditPortlet = $( '#addEditPortlet' );\n\n    $tablePortlet.slideUp( 'fast' );\n    if ( type == 'add' ) {\n      if ( ! $addEditPortlet.hasClass( 'blue' ) ) {\n        $addEditPortlet.removeClass( 'green-meadow' ).addClass( 'blue' );\n      }\n\n      $addEditPortlet.find( '.caption-subject' ).html( '新增 ' + Param.pageTitle );\n    } else if ( type == 'edit' ) {\n      if ( ! $addEditPortlet.hasClass( 'green-meadow' ) ) {\n        $addEditPortlet.removeClass( 'blue' ).addClass( 'green-meadow' );\n      }\n      $addEditPortlet.find( '.caption-subject' ).html( '编辑 ' + Param.pageTitle );\n    }\n\n    //$('#data-table-portlet').slideUp('fast');\n    $addEditPortlet.show();\n  } ,\n\n  //关闭 portlet\n  setPortletHide : function () {\n    $( '#tablePortlet' ).slideDown( 'fast' );\n    $( '#addEditPortlet' ).slideUp( 'fast' );\n  } ,\n\n\n  //初始化各种按钮\n  initBtn : function () {\n    var self = this;\n\n    //打开添加框\n    $( '#addNewBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      self.setPortletShow( 'add' );\n\n      var $form = $( '#addEditForm' );\n\n      $form.reloadForm( Param.defaultRow );\n\n\n      $form.attr( 'action' , Param.uri.insert );\n    } );\n\n    //编辑按钮\n    $( document ).on( 'click' , '.editBtn' , function ( e ) {\n      e.preventDefault();\n      self.setPortletShow( 'edit' );\n\n      var id = $( this ).data( 'id' );\n      var row = $( '#dataGrid' ).TableGrid( 'getRow' , id );\n      var $form = $( '#addEditForm' );\n\n      $form.reloadForm( row );\n\n\n      $form.attr( 'action' , Param.uri.update + '/' +row.id );\n    } );\n\n    //删除一行\n    $( document ).on( 'click' , '.destroyBtn' , function ( e ) {\n      e.preventDefault();\n      var id = $( this ).data( 'id' );\n      self.delData( id );\n    } );\n\n    $( '#destroySelectBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var ids = $( '.checker:checked' ).serializeJSON().selectChecker;\n      if ( empty( ids ) ) {\n        tips.error( '请选择要删除的记录' );\n        return;\n      }\n      self.delData( ids );\n    } );\n\n    //提交添加编辑窗\n    $( '#submitFormBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var $form = $( '#addEditForm' );\n\n      if ( $form.validForm() ) {\n        var data = $form.serializeObject();\n        data._token = self.token;\n        $.post( $form.attr( 'action' ) , data )\n         .fail( function ( res ) {\n           tips.error( res.responseText );\n         } )\n         .done( function ( res ) {\n           if ( res.code == 1001 ) {\n             //需要登录\n             tips.error( '请先登录' );\n           } else if ( res.code != 0 ) {\n             tips.error( res.msg );\n           } else {\n             tips.success( res.msg );\n             $( '#dataGrid' ).TableGrid( 'reload' );\n             self.setPortletHide();\n           }\n         } );\n      }\n    } );\n\n    //关闭添加编辑窗\n    $( '#closePortletBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      self.setPortletHide();\n    } );\n\n    //发送按钮\n    $( document ).on( 'click' , '.sendMailBtn' , function ( e ) {\n      e.preventDefault();\n      var data = {\n        id : $( this ).data( 'id' ) ,\n        _token : self.token\n      };\n\n      sure.init( '确定发送吗?' , function () {\n        $.post( Param.uri.send , data )\n         .fail( function ( res ) {\n           tips.error( res.responseText );\n         } )\n         .done( function ( res ) {\n           if ( res.code != 0 ) {\n             tips.error( res.msg );\n             return false;\n           }\n           tips.success( res.msg );\n         } );\n      } );\n    } );\n\n  } ,\n\n  delData : function ( ids ) {\n    var self = this;\n    var data = {\n      ids : ids ,\n      _token : this.token\n    };\n\n    sure.init( '是否删除?' , function () {\n\n      $.post( Param.uri.destroy , data )\n       .fail( function ( res ) {\n         tips.error( res.responseText );\n       } )\n       .done( function ( res ) {\n         if ( res.code == 1001 ) {\n           //需要登录\n           tips.error( '请先登录' );\n         } else if ( res.code != 0 ) {\n           tips.error( res.msg );\n         } else {\n           tips.success( res.msg );\n           $( '#dataGrid' ).TableGrid( 'reload' );\n         }\n       } );\n    } );\n  } ,\n\n  //初始化grid\n  initGrid : function () {\n    var self = this;\n    var uri = Param.uri.this + '?' + $.param( Param.query );\n    history.replaceState( Param.query , '' , uri );\n\n    $( '#dataGrid' ).TableGrid( {\n      uri : Param.uri.read ,\n      selectAll : true ,\n      param : Param.query ,\n      rowStyle : function ( row ) {\n        if ( row.status == 0 ) {\n          return 'warning';\n        }\n      } ,\n      loadSuccess : function ( rows , settings ) {\n        var oldUri = window.location.href;\n        var uri = Param.uri.this + '?' + $.param( settings.param );\n        if ( oldUri == uri ) {\n          return false;\n        }\n\n        var params = $.getUrlParams( window.location.href );\n        history.pushState( params , '' , oldUri );\n        history.replaceState( settings.param , '' , uri );\n      }\n    } );\n  }\n\n};\n\n//pop state 事件\nwindow.onpopstate = function ( event ) {\n  if ( event && event.state ) {\n    $( '#searchForm' ).reloadForm( event.state );\n    var $dataGrid = $( '#dataGrid' );\n    $dataGrid.TableGrid( 'setParam' , event.state );\n    $dataGrid.TableGrid( 'reload' );\n  }\n};\n\nvar typeColor = { captcha : 'default' };\nvar formatType = function ( value ) {\n  return '<span class=\"label label-' + typeColor[ value ] + '\">' + Param.type[ value ] + '</span>';\n};\n\nvar optSend = function ( value , row ) {\n  var html = '';\n  if ( row.status == 0 ) {\n    html = '<a class=\"btn btn-sm blue sendMailBtn\" data-id=\"' + row.id + '\">' +\n           '<i class=\"fa fa-paper-plane\"></i> 发送</a>';\n  }\n\n  return html;\n};"
  },
  {
    "path": "resources/assets/static/js/backend/SysMerchant.js",
    "content": "/**\n * SysMerchant JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-13\n */\n\nvar SysMerchant = {\n  token : $('input[name=_token]').val(),\n  init : function () {\n    //重新设置菜单\n    if ( ! empty( Param.uri.menu ) ) {\n      Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri=\"' + Param.uri.menu + '\"]' );\n    }\n\n    //初始化ajax 提示框\n    loading.initAjax();\n\n    //初始化页面按钮\n    this.initBtn();\n\n    //初始化查询form\n    this.initSearchForm();\n\n    //初始化数据表\n    this.initGrid();\n\n  } ,\n\n  //初始化查询form\n  initSearchForm : function () {\n    var $searchForm = $( '#searchForm' );\n    $searchForm.reloadForm( Param.query );\n\n    //查询按钮\n    $( '#searchBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n\n      var $dataGrid = $( '#dataGrid' );\n      var param = $dataGrid.TableGrid( 'getParam' );\n\n      param = $.extend( {} , param , $( '#searchForm' ).serializeObject() );\n      param.page = 1;\n\n      $dataGrid.TableGrid( 'setParam' , param );\n      $dataGrid.TableGrid( 'reload' );\n    } );\n  } ,\n\n  //显示 portlet\n  setPortletShow : function ( type ) {\n    var $tablePortlet = $( '#tablePortlet' );\n    var $addEditPortlet = $( '#addEditPortlet' );\n\n    $tablePortlet.slideUp( 'fast' );\n    if ( type == 'add' ) {\n      if ( ! $addEditPortlet.hasClass( 'blue' ) ) {\n        $addEditPortlet.removeClass( 'green-meadow' ).addClass( 'blue' );\n      }\n\n      $addEditPortlet.find( '.caption-subject' ).html( '新建' + Param.pageTitle );\n    } else if ( type == 'edit' ) {\n      if ( ! $addEditPortlet.hasClass( 'green-meadow' ) ) {\n        $addEditPortlet.removeClass( 'blue' ).addClass( 'green-meadow' );\n      }\n      $addEditPortlet.find( '.caption-subject' ).html( '编辑' + Param.pageTitle );\n    }\n\n    //$('#data-table-portlet').slideUp('fast');\n    $addEditPortlet.show();\n  } ,\n\n  //关闭 portlet\n  setPortletHide : function () {\n    $( '#tablePortlet' ).slideDown( 'fast' );\n    $( '#addEditPortlet' ).slideUp( 'fast' );\n  } ,\n\n\n  //初始化各种按钮\n  initBtn : function () {\n    var self = this;\n\n    //打开添加框\n    $( '#addNewBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      self.setPortletShow( 'add' );\n\n      var $form = $( '#addEditForm' );\n\n      $form.reloadForm( Param.defaultRow );\n      setImgPreview.clear( 'icon' );\n\n      $form.attr( 'action' , Param.uri.insert );\n    } );\n\n    //编辑按钮\n    $( document ).on( 'click' , '.editBtn' , function ( e ) {\n      e.preventDefault();\n      self.setPortletShow( 'edit' );\n\n      var id = $( this ).data( 'id' );\n      var row = $( '#dataGrid' ).TableGrid( 'getRow' , id );\n      var $form = $( '#addEditForm' );\n\n      $form.reloadForm( row );\n      setImgPreview.set( 'icon' , row.icon );\n      $( 'input[name=\"area\"]' ).AreaSelection( 'setAreaName' , row.full_area_name );\n\n      $form.attr( 'action' , Param.uri.update + '/'+ row.id );\n    } );\n\n    //删除一行\n    $( document ).on( 'click' , '.destroyBtn' , function ( e ) {\n      e.preventDefault();\n      var id = $( this ).data( 'id' );\n      self.delData( id );\n    } );\n\n    $( '#destroySelectBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var ids = $( '.checker:checked' ).serializeJSON().selectChecker;\n      if ( empty( ids ) ) {\n        tips.error( '请选择要删除的记录' );\n        return;\n      }\n      self.delData( ids );\n    } );\n\n    //提交添加编辑窗\n    $( '#submitFormBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var $form = $( '#addEditForm' );\n\n      if ( $form.validForm() ) {\n        var data = $form.serializeObject();\n        data._token = self.token;\n        $.post( $form.attr( 'action' ) , data )\n         .fail( function ( res ) {\n           tips.error( res.responseText );\n         } )\n         .done( function ( res ) {\n           if ( res.code == 1001 ) {\n             //需要登录\n             tips.error( '请先登录' );\n           } else if ( res.code != 0 ) {\n             tips.error( res.msg );\n           } else {\n             tips.success( res.msg );\n             $( '#dataGrid' ).TableGrid( 'reload' );\n             self.setPortletHide();\n           }\n         } );\n      }\n    } );\n\n    //关闭添加编辑窗\n    $( '#closePortletBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      self.setPortletHide();\n    } );\n\n    //上传按钮\n    $( '#iconUploadBtn' ).Uploader( {\n      uri : Param.uri.upload , //上传文件\n      param : Param.uploadParam ,\n      album : true ,\n      albumUri : Param.uri.album ,\n      albumCatalogUri : Param.uri.albumCatalog ,\n      albumParam : Param.albumParam ,\n      onSuccess : function ( ret ) {\n        tips.success( ret.msg );\n        if ( ret.code == 0 ) {\n          setImgPreview.set( 'icon' , ret.data.savePath );\n        }\n      } ,\n      onChooseAlbum : function ( uri ) {\n        setImgPreview.set( 'icon' , uri );\n      }\n    } );\n\n    //创建系统用户\n    $( document ).on( 'click' , '.createSysUserBtn' , function ( e ) {\n      e.preventDefault();\n\n      var id = $( this ).data( 'id' );\n      var phone = $( this ).data( 'phone' );\n\n      if ( empty( phone ) ) {\n        tips.error( '请先添加电话' );\n        return;\n      }\n\n      sure.init( '用户名:' + phone + ', 密码:' + Param.resetPwd + ' , 确定吗?' , function () {\n        $.get( Param.uri.createSysUser + id )\n         .fail( function ( res ) {\n           tips.error( res.responseText );\n         } )\n         .done( function ( res ) {\n           if ( res.code > 0 ) {\n             tips.error( res.msg );\n           } else {\n             tips.success( res.msg );\n             $( '#dataGrid' ).TableGrid( 'reload' );\n           }\n         } );\n      } );\n    } );\n\n    //区域选择\n    $( 'input[name=\"area\"]' ).AreaSelection( {\n      uri : Param.uri.area + '/'\n    } );\n  } ,\n\n  delData : function ( ids ) {\n    var self = this;\n    var data = {\n      ids : ids,\n      _token : self.token\n    };\n\n    sure.init( '是否删除?' , function () {\n\n      $.post( Param.uri.destroy , data )\n       .fail( function ( res ) {\n         tips.error( res.responseText );\n       } )\n       .done( function ( res ) {\n         if ( res.code == 1001 ) {\n           //需要登录\n           tips.error( '请先登录' );\n         } else if ( res.code != 0 ) {\n           tips.error( res.msg );\n         } else {\n           tips.success( res.msg );\n           $( '#dataGrid' ).TableGrid( 'reload' );\n         }\n       } );\n    } );\n  } ,\n\n  //初始化grid\n  initGrid : function () {\n    var self = this;\n    var uri = Param.uri.this + '?' + $.param( Param.query );\n    history.replaceState( Param.query , '' , uri );\n\n    $( '#dataGrid' ).TableGrid( {\n      uri : Param.uri.read ,\n      selectAll : true ,\n      param : Param.query ,\n      rowStyle : function ( row ) {\n        if ( row.status == 0 ) {\n          return 'warning';\n        }\n      } ,\n      loadSuccess : function ( rows , settings ) {\n        var oldUri = window.location.href;\n        var uri = Param.uri.this + '?' + $.param( settings.param );\n        if ( oldUri == uri ) {\n          return false;\n        }\n\n        var params = $.getUrlParams( window.location.href );\n        history.pushState( params , '' , oldUri );\n        history.replaceState( settings.param , '' , uri );\n      }\n    } );\n  }\n\n};\n\n//pop state 事件\nwindow.onpopstate = function ( event ) {\n  if ( event && event.state ) {\n    $( '#searchForm' ).reloadForm( event.state );\n    var $dataGrid = $( '#dataGrid' );\n    $dataGrid.TableGrid( 'setParam' , event.state );\n    $dataGrid.TableGrid( 'reload' );\n  }\n};\n\nvar optUserOrDetail = function ( value , row ) {\n  //if ( ! empty( row.sys_user ) ) {\n    return '<a href=\"' + Param.uri.detail + '/'+row.id + '\" class=\"btn btn-sm red\"><i class=\"fa fa-cog\"></i> 管理</a>';\n  //}\n/*  return '<a href=\"#\" data-id=\"' + row.id + '\" data-phone=\"' + row.phone + '\" ' +\n         'class=\"btn btn-sm blue createSysUserBtn\">' +\n         '<i class=\"fa fa-user\"></i> 创建系统用户</a>';*/\n};"
  },
  {
    "path": "resources/assets/static/js/backend/SysMerchantDetail.js",
    "content": "/**\n * SysMerchant JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-28\n */\n\nvar SysMerchantDetail = {\n  init : function () {\n    //重新设置菜单\n    if ( ! empty( Param.uri.menu ) ) {\n      Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri=\"' + Param.uri.menu + '\"]' );\n    }\n  }\n};"
  },
  {
    "path": "resources/assets/static/js/backend/SysPush.js",
    "content": "/**\n * SysPush JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-19\n */\n\nvar SysPush = {\n\ttoken : $('input[name=_token]').val(),\n\tconfig : {} ,\n\tinit : function () {\n\t\t//重新设置菜单\n\t\tif ( ! empty(Param.uri.menu) ) {\n\t\t\tLayout.setSidebarMenuActiveLink('set' , 'a[data-uri=\"' + Param.uri.menu + '\"]');\n\t\t}\n\n\t\t//初始化ajax 提示框\n\t\tloading.initAjax();\n\n\t\t//初始化页面按钮\n\t\tthis.initBtn();\n\n\t\t//初始化查询form\n\t\tthis.initSearchForm();\n\n\t\t//初始化数据表\n\t\tthis.initGrid();\n\n\n\t} ,\n\n\t//初始化查询form\n\tinitSearchForm : function () {\n\t\tvar $searchForm = $('#searchForm');\n\t\t$searchForm.reloadForm(Param.query);\n\n\t\t//查询按钮\n\t\t$('#searchBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $dataGrid = $('#dataGrid');\n\t\t\tvar param = $dataGrid.TableGrid('getParam');\n\n\t\t\tparam = $.extend({} , param , $('#searchForm').serializeObject());\n\t\t\tparam.page = 1;\n\n\t\t\t$dataGrid.TableGrid('setParam' , param);\n\t\t\t$dataGrid.TableGrid('reload');\n\t\t});\n\t} ,\n\n\t//显示 portlet\n\tsetPortletShow : function (type) {\n\t\tvar $tablePortlet = $('#tablePortlet');\n\t\tvar $addEditPortlet = $('#addEditPortlet');\n\n\t\t$tablePortlet.slideUp('fast');\n\t\tif ( type == 'add' ) {\n\t\t\tif ( ! $addEditPortlet.hasClass('blue') ) {\n\t\t\t\t$addEditPortlet.removeClass('green-meadow').addClass('blue');\n\t\t\t}\n\n\t\t\t$addEditPortlet.find('.caption-subject').html('新增 ' + Param.pageTitle);\n\t\t} else if ( type == 'edit' ) {\n\t\t\tif ( ! $addEditPortlet.hasClass('green-meadow') ) {\n\t\t\t\t$addEditPortlet.removeClass('blue').addClass('green-meadow');\n\t\t\t}\n\t\t\t$addEditPortlet.find('.caption-subject').html('编辑 ' + Param.pageTitle);\n\t\t}\n\n\t\t//$('#data-table-portlet').slideUp('fast');\n\t\t$addEditPortlet.show();\n\t} ,\n\n//关闭 portlet\n\tsetPortletHide : function () {\n\t\t$('#tablePortlet').slideDown('fast');\n\t\t$('#addEditPortlet').slideUp('fast');\n\t} ,\n\n\n\t//初始化各种按钮\n\tinitBtn : function () {\n\t\tvar self = this;\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(Param.defaultRow);\n\n\n\t\t\t$form.attr('action' , Param.uri.insert);\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click' , '.editBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#dataGrid').TableGrid('getRow' , id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(row);\n\n\n\t\t\t$form.attr('action' , Param.uri.update +'/' + row.id);\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click' , '.destroyBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData(id);\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif ( empty(ids) ) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.delData(ids);\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif ( $form.validForm() ) {\n\t\t\t\tvar data = $form.serializeObject();\n\n\t\t\t\t$.post($form.attr('action') , data)\n\t\t\t\t .fail(function (res) {\n\t\t\t\t\t tips.error(res.responseText);\n\t\t\t\t })\n\t\t\t\t .done(function (res) {\n\t\t\t\t\t if ( res.code == 1001 ) {\n\t\t\t\t\t\t //需要登录\n\t\t\t\t\t\t tips.error('请先登录');\n\t\t\t\t\t } else if ( res.code != 0 ) {\n\t\t\t\t\t\t tips.error(res.msg);\n\t\t\t\t\t } else {\n\t\t\t\t\t\t tips.success(res.msg);\n\t\t\t\t\t\t $('#dataGrid').TableGrid('reload');\n\t\t\t\t\t\t self.setPortletHide();\n\t\t\t\t\t }\n\t\t\t\t });\n\t\t\t}\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n\n\t\t//发送按钮\n\t\t$(document).on('click' , '.sendBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar data = {\n\t\t\t\tid : $(this).data('id')\n\t\t\t};\n\n\t\t\tsure.init('确定发送吗' , function () {\n\t\t\t\t$.get(Param.uri.send , data)\n\t\t\t\t .fail(function (res) {\n\t\t\t\t\t  tips.error(res.responseText);\n\t\t\t\t })\n\t\t\t\t .done(function (res) {\n\t\t\t\t\t\tif ( res.code != 0 ) {\n\t\t\t\t\t\t\ttips.error( res.msg );\n\t\t\t\t\t\t\treturn false ;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttips.success( res.msg );\n\t\t\t\t\t  $('#dataGrid').TableGrid('reload');\n\t\t\t\t });\n\n\t\t\t});\n\n\t\t})\n\t} ,\n\n\tdelData : function (ids) {\n\t\tvar self = this;\n\t\tvar data = {\n\t\t\tids : ids,\n\t\t\t_token : this.token\n\t\t};\n\n\t\tsure.init('是否删除?' , function () {\n\n\t\t\t$.post(Param.uri.destroy , data)\n\t\t\t .fail(function (res) {\n\t\t\t\t tips.error(res.responseText);\n\t\t\t })\n\t\t\t .done(function (res) {\n\t\t\t\t if ( res.code == 1001 ) {\n\t\t\t\t\t //需要登录\n\t\t\t\t\t tips.error('请先登录');\n\t\t\t\t } else if ( res.code != 0 ) {\n\t\t\t\t\t tips.error(res.msg);\n\t\t\t\t } else {\n\t\t\t\t\t tips.success(res.msg);\n\t\t\t\t\t $('#dataGrid').TableGrid('reload');\n\t\t\t\t }\n\t\t\t });\n\t\t});\n\t} ,\n\n\t//初始化grid\n\tinitGrid : function () {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query , '' , uri);\n\n\t\t$('#dataGrid').TableGrid({\n\t\t\turi : Param.uri.read ,\n\t\t\tselectAll : true ,\n\t\t\tparam : Param.query ,\n\t\t\trowStyle : function (row) {\n\t\t\t\tif ( row.status == 0 ) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tloadSuccess : function (rows , settings) {\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif ( oldUri == uri ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params , '' , oldUri);\n\t\t\t\thistory.replaceState(settings.param , '' , uri);\n\t\t\t}\n\t\t});\n\t}\n\n};\n\n//pop state 事件\nwindow.onpopstate = function (event) {\n\tif ( event && event.state ) {\n\t\t$('#searchForm').reloadForm(event.state);\n\t\tvar $dataGrid = $('#dataGrid');\n\t\t$dataGrid.TableGrid('setParam' , event.state);\n\t\t$dataGrid.TableGrid('reload');\n\t}\n};\n\nvar optSend = function (value , row) {\n\tif ( row.status == 0 ) {\n\t\treturn '<a data-id=\"' + row.id + '\" href=\"#\" class=\"btn btn-sm btn-info sendBtn\" ><i class=\"fa fa-send\"></i> 发送</a>';\n\t}\n\treturn '';\n};\n\n//catalog\nvar formatCatalog = function (value) {\n\tvar color = {alert : 'default' , order : 'primary' , event : 'success'};\n\treturn '<span class=\"label label-' + color[value] + '\">' + Param.catalog[value] + '</span>';\n};\n\n//format platform\nvar ios = '<i class=\"fa fa-apple\"></i>';\nvar android = '<i class=\"fa fa-android\"></i>';\nvar formatPlatform = function (value) {\n\tvar html = '';\n\tif ( value == 'all' ) {\n\t\thtml += ios + android;\n\t} else if ( value == 'ios' ) {\n\t\thtml += ios;\n\t} else {\n\t\thtml += android;\n\t}\n\treturn html;\n};\n\nvar formatTitle = function (value , row) {\n\tvar html = '';\n\tif ( ! empty(value) ) {\n\t\thtml += value + '<br>';\n\t}\n\tif ( ! empty(row.alert) ) {\n\t\thtml += row.alert;\n\t}\n\treturn html;\n};"
  },
  {
    "path": "resources/assets/static/js/backend/SysRole.js",
    "content": "/**\n * SysRole JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-12\n */\n\nvar SysRole = {\n\ttoken : $('input[name=_token]').val(),\n\tconfig : {} ,\n\tinit : function () {\n\t\t//重新设置菜单\n\t\tif ( ! empty(Param.uri.menu) ) {\n\t\t\tLayout.setSidebarMenuActiveLink('set' , 'a[data-uri=\"' + Param.uri.menu + '\"]');\n\t\t}\n\n\t\t//初始化ajax 提示框\n\t\tloading.initAjax();\n\n\t\t//初始化页面按钮\n\t\tthis.initBtn();\n\n\t\t//初始化数据表\n\t\tthis.initGrid();\n\n\n\t} ,\n\n\t//显示 modal\n\tsetPortletShow : function (type) {\n\t\tvar $addEditModal = $('#addEditModal');\n\n\t\t$addEditModal.modal('show');\n\t\tif ( type == 'add' ) {\n\t\t\t$addEditModal.find('.caption-subject').html('新建' + Param.pageTitle);\n\t\t} else if ( type == 'edit' ) {\n\t\t\t$addEditModal.find('.caption-subject').html('编辑' + Param.pageTitle);\n\t\t}\n\t} ,\n\n\t//关闭 modal\n\tsetPortletHide : function () {\n\t\t$('#addEditModal').modal('hide');\n\t} ,\n\n\t//初始化各种按钮\n\tinitBtn : function () {\n\t\tvar self = this;\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(Param.defaultRow);\n\n\n\t\t\t$form.attr('action' , Param.uri.insert);\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click' , '.editBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#dataGrid').TableGrid('getRow' , id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(row);\n\n\n\t\t\t$form.attr('action' , Param.uri.update + '/'+ row.id);\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click' , '.destroyBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData(id);\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif ( empty(ids) ) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.delData(ids);\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif ( $form.validForm() ) {\n\t\t\t\tvar data = $form.serializeObject();\n\n\t\t\t\t$.post($form.attr('action') , data)\n\t\t\t\t .fail(function (res) {\n\t\t\t\t\t tips.error(res.responseText);\n\t\t\t\t })\n\t\t\t\t .done(function (res) {\n\t\t\t\t\t if ( res.code == 403 ) {\n\t\t\t\t\t\t //需要登录\n\t\t\t\t\t\t tips.error('请先登录');\n\t\t\t\t\t } else if ( res.code != 0 ) {\n\t\t\t\t\t\t tips.error(res.msg);\n\t\t\t\t\t } else {\n\t\t\t\t\t\t tips.success(res.msg);\n\t\t\t\t\t\t $('#dataGrid').TableGrid('reload');\n\t\t\t\t\t\t self.setPortletHide();\n\t\t\t\t\t }\n\t\t\t\t });\n\t\t\t}\n\t\t});\n\n\t\t//打开权限窗口\n\t\t$(document).on('click' , '.permissionBtn' , function (e) {\n\t\t\te.preventDefault();\n\n\t\t\t$('#permissionBody').empty();\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar roleData = $('#dataGrid').TableGrid('getRow' , id);\n\t\t\tself.config.roleId = id;\n\n\t\t\tvar url = Param.uri.getPermission;\n\t\t\tvar data = {\n\t\t\t\troleId : id,\n\t\t\t\t_token : self.token\n\t\t\t};\n\t\t\t$.post(url , data , function (res) {\n\t\t\t\t$('#permissionLabel').html('[' + roleData.name + ']的权限');\n\t\t\t\t$('#permissionModal').modal('show');\n\t\t\t\t$('#permissionBody').html(res);\n\n\t\t\t\tvar url = Param.uri.getPrivilegeData;\n\n\t\t\t\t$.post(url , data , function (res) {\n\t\t\t\t\tself.initPermission(res);\n\t\t\t\t});\n\n\t\t\t});\n\n\n\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n\t\t//功能权限全选或取消\n\t\t$(document).on('click' , '.func' , function (e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar this_node = $(this).parent('.func-node');\n\t\t\tvar opt = this_node.find('.func-opt');\n\t\t\tvar opt_i = this_node.find('.func-opt > i');\n\n\t\t\tif ( $(this).hasClass('disabled') || $(this).hasClass('notall') ) {\n\t\t\t\t//全选\n\t\t\t\t$(this).removeClass('active notall disabled').addClass('active');\n\t\t\t\topt.removeClass('active notall disabled').addClass('active');\n\t\t\t\topt_i.removeClass('fa-square-o').addClass('fa-check-square-o');\n\n\t\t\t\t//将下级权限置为可查看\n\t\t\t\tself.setSubOptCheck(this_node);\n\t\t\t} else {\n\t\t\t\t//全不选\n\t\t\t\t$(this).removeClass('active notall disabled').addClass('disabled');\n\t\t\t\topt.removeClass('active notall disabled').addClass('disabled');\n\t\t\t\topt_i.removeClass('fa-check-square-o').addClass('fa-square-o');\n\n\t\t\t\t//将下级权限置为全不选\n\t\t\t\tself.setSubOptDisabled(this_node);\n\t\t\t}\n\t\t});\n\n\t\t//功能权限单选或取消\n\t\t$(document).on('click' , '.func-opt' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar this_i = $(this).find('i');\n\t\t\tvar this_node = $(this).parents('.func-node');\n\n\t\t\tif ( $(this).hasClass('disabled') ) {\n\t\t\t\t$(this).removeClass('disabled').addClass('active');\n\t\t\t\tthis_i.removeClass('fa-square-o').addClass('fa-check-square-o');\n\t\t\t} else if ( $(this).hasClass('active') ) {\n\t\t\t\t$(this).removeClass('active').addClass('disabled');\n\t\t\t\tthis_i.removeClass('fa-check-square-o').addClass('fa-square-o');\n\t\t\t}\n\n\t\t\tif ( $(this).html().indexOf('查看') > 0 ) {\n\t\t\t\tif ( $(this).hasClass('disabled') ) {\n\t\t\t\t\tself.setSubOptDisabled(this_node);\n\t\t\t\t} else {\n\t\t\t\t\tself.setSubOptCheck(this_node);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis_node.find('.func').removeClass('active notall disabled');\n\n\t\t\tif ( this_node.find('.func-opt-row > .active').length == 0 ) {\n\t\t\t\tthis_node.find('.func').addClass('disabled'); //未选择\n\t\t\t} else if ( this_node.find('.func-opt').length == this_node.find('.func-opt-row > .active').length ) {\n\t\t\t\tthis_node.find('.func').addClass('active'); //全选\n\t\t\t} else {\n\t\t\t\tthis_node.find('.func').addClass('notall'); //部分选择\n\t\t\t}\n\t\t});\n\n\t\t//提交权限\n\t\t$(document).on('click' , '#permissionSubmitBtn' , function (e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar data = {\n\t\t\t\troleId : self.config.roleId ,\n\t\t\t\tprivilegeArr : [],\n\t\t\t\t_token : self.token\n\t\t\t};\n\n\t\t\tvar $active = $('.func-opt-row .active');\n\t\t\tvar len = $active.length;\n\t\t\tfor ( var i = 0 ; i < len ; i ++ ) {\n\t\t\t\tdata.privilegeArr.push($active.eq(i).data('id'));\n\t\t\t}\n\t\t\tvar url = Param.uri.updatePermission;\n\n\t\t\t$.post(url , data , function (ret) {\n\t\t\t\tif ( ret.code != 0 ) {\n\t\t\t\t\ttips.error(ret.msg);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttips.success(ret.msg);\n\t\t\t\t$('#permissionBody').empty();\n\t\t\t\t$('#permissionModal').modal('hide');\n\t\t\t});\n\t\t});\n\n\n\t} ,\n\n\tdelData : function (ids) {\n\t\tvar self = this;\n\t\tvar data = {\n\t\t\tids : ids,\n\t\t\t_token : self.token\n\t\t};\n\n\t\tsure.init('是否删除?' , function () {\n\n\t\t\t$.post(Param.uri.destroy , data)\n\t\t\t .fail(function (res) {\n\t\t\t\t tips.error(res.responseText);\n\t\t\t })\n\t\t\t .done(function (res) {\n\t\t\t\t if ( res.code == 1001 ) {\n\t\t\t\t\t //需要登录\n\t\t\t\t\t tips.error('请先登录');\n\t\t\t\t } else if ( res.code != 0 ) {\n\t\t\t\t\t tips.error(res.msg);\n\t\t\t\t } else {\n\t\t\t\t\t tips.success(res.msg);\n\t\t\t\t\t $('#dataGrid').TableGrid('reload');\n\t\t\t\t }\n\t\t\t });\n\t\t});\n\t} ,\n\n\t//初始化grid\n\tinitGrid : function () {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query , '' , uri);\n\n\t\t$('#dataGrid').TableGrid({\n\t\t\turi : Param.uri.read ,\n\t\t\tselectAll : true ,\n\t\t\tparam : Param.query ,\n\t\t\trowStyle : function (row) {\n\t\t\t\tif ( row.status == 0 ) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tloadSuccess : function (rows , settings) {\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif ( oldUri == uri ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params , '' , oldUri);\n\t\t\t\thistory.replaceState(settings.param , '' , uri);\n\t\t\t}\n\t\t});\n\t} ,\n\n\t//将下级权限置为可查看\n\tsetSubOptCheck : function (this_node) {\n\t\tvar self_tree = this_node.parent('.func-tree');\n\t\tvar _sub_func_node = self_tree.find('.sub-permission .func-node');\n\t\t_sub_func_node.each(function () {\n\t\t\tvar self_sub_func_node = $(this);\n\t\t\t$(this).find('.func-opt').each(function () {\n\t\t\t\tif ( $(this).html().indexOf('查看') > 0 ) {\n\t\t\t\t\tself_sub_func_node.find('.func').removeClass('active notall disabled').addClass('notall');\n\t\t\t\t\t$(this).removeClass('active notall disabled').addClass('active');\n\t\t\t\t\tvar self_sub_func_opt_i = $(this).find('i');\n\t\t\t\t\tself_sub_func_opt_i.removeClass('fa-square-o').addClass('fa-check-square-o');\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t} ,\n\n\t//将下级权限置为全不选\n\tsetSubOptDisabled : function (this_node) {\n\t\tvar self_tree = this_node.parent('.func-tree');\n\t\tvar _sub_func_node = self_tree.find('.sub-permission .func-node');\n\t\t_sub_func_node.each(function () {\n\t\t\t$(this).find('.func').removeClass('active notall disabled').addClass('disabled');\n\t\t\t$(this).find('.func-opt').removeClass('active notall disabled').addClass('disabled');\n\t\t\t$(this).find('.func-opt > i').removeClass('fa-check-square-o').addClass('fa-square-o');\n\t\t});\n\t} ,\n\n\t//初始化\n\tinitPermission : function (privilegeData) {\n\t\t$('.func').addClass('disabled');\n\t\t$('.func-opt').addClass('disabled');\n\n\t\tfor ( var i = 0 ; i < privilegeData.length ; i ++ ) {\n\t\t\t$obj = $('.func-opt[data-id=\"' + privilegeData[i].privilege_id + '\"]');\n\t\t\t$obj.removeClass('disabled').addClass('active');\n\t\t\t$obj.find('i').removeClass('fa-square-o').addClass('fa-check-square-o');\n\t\t}\n\n\t\t$('.func-node').each(function (index) {\n\t\t\tvar func_id = $(this).data('id');\n\n\t\t\tvar total_len = $(this).find('.func-opt').length;\n\t\t\tvar active_len = $(this).find('.active').length;\n\t\t\tif ( total_len == active_len ) {\n\t\t\t\t$(this).find('.func').removeClass('disabled').addClass('active');\n\t\t\t} else if ( total_len > active_len && active_len > 0 ) {\n\t\t\t\t$(this).find('.func').removeClass('disabled').addClass('notall');\n\t\t\t}\n\t\t});\n\t} ,\n\n};\n\n//pop state 事件\nwindow.onpopstate = function (event) {\n\tif ( event && event.state ) {\n\t\t$('#searchForm').reloadForm(event.state);\n\t\tvar $dataGrid = $('#dataGrid');\n\t\t$dataGrid.TableGrid('setParam' , event.state);\n\t\t$dataGrid.TableGrid('reload');\n\t}\n};\n\nvar optPermission = function (value , row) {\n\treturn '<a class=\"btn btn-sm btn-primary permissionBtn\" data-id=\"' + row.id + '\" href=\"javascript:;\" >' +\n\t       '<i class=\"fa fa-check-square-o\"></i> 授权</a>';\n};"
  },
  {
    "path": "resources/assets/static/js/backend/SysSms.js",
    "content": "/**\n * SysSms JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-18\n */\n\nvar SysSms = {\n\ttoken : $('input[name=_token]').val(),\n\tconfig : {} ,\n\tinit : function () {\n\t\t//重新设置菜单\n\t\tif ( ! empty(Param.uri.menu) ) {\n\t\t\tLayout.setSidebarMenuActiveLink('set' , 'a[data-uri=\"' + Param.uri.menu + '\"]');\n\t\t}\n\n\t\t//初始化ajax 提示框\n\t\tloading.initAjax();\n\n\t\t//初始化页面按钮\n\t\tthis.initBtn();\n\n\t\t//初始化查询form\n\t\tthis.initSearchForm();\n\n\t\t//初始化数据表\n\t\tthis.initGrid();\n\t} ,\n\n\t//初始化查询form\n\tinitSearchForm : function () {\n\t\tvar $searchForm = $('#searchForm');\n\t\t$searchForm.reloadForm(Param.query);\n\n\t\t//查询按钮\n\t\t$('#searchBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $dataGrid = $('#dataGrid');\n\t\t\tvar param = $dataGrid.TableGrid('getParam');\n\n\t\t\tparam = $.extend({} , param , $('#searchForm').serializeObject());\n\t\t\tparam.page = 1;\n\n\t\t\t$dataGrid.TableGrid('setParam' , param);\n\t\t\t$dataGrid.TableGrid('reload');\n\t\t});\n\t} ,\n\n\n\t//显示 modal\n\tsetPortletShow : function (type) {\n\t\tvar $addEditModal = $('#addEditModal');\n\n\t\t$addEditModal.modal('show');\n\t\tif ( type == 'add' ) {\n\t\t\t$addEditModal.find('.caption-subject').html('新增 ' + Param.pageTitle);\n\t\t} else if ( type == 'edit' ) {\n\t\t\t$addEditModal.find('.caption-subject').html('编辑 ' + Param.pageTitle);\n\t\t}\n\t} ,\n\n//关闭 modal\n\tsetPortletHide : function () {\n\t\t$('#addEditModal').modal('hide');\n\t} ,\n\n\t//初始化各种按钮\n\tinitBtn : function () {\n\t\tvar self = this;\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(Param.defaultRow);\n\n\n\t\t\t$form.attr('action' , Param.uri.insert);\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click' , '.editBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#dataGrid').TableGrid('getRow' , id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(row);\n\n\n\t\t\t$form.attr('action' , Param.uri.update +'/' + row.id);\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click' , '.destroyBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData(id);\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif ( empty(ids) ) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.delData(ids);\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif ( $form.validForm() ) {\n\t\t\t\tvar data = $form.serializeObject();\n\t\t\t\tdata._token = self.token;\n\t\t\t\t$.post($form.attr('action') , data)\n\t\t\t\t .fail(function (res) {\n\t\t\t\t\t tips.error(res.responseText);\n\t\t\t\t })\n\t\t\t\t .done(function (res) {\n\t\t\t\t\t if ( res.code == 1001 ) {\n\t\t\t\t\t\t //需要登录\n\t\t\t\t\t\t tips.error('请先登录');\n\t\t\t\t\t } else if ( res.code != 0 ) {\n\t\t\t\t\t\t tips.error(res.msg);\n\t\t\t\t\t } else {\n\t\t\t\t\t\t tips.success(res.msg);\n\t\t\t\t\t\t $('#dataGrid').TableGrid('reload');\n\t\t\t\t\t\t self.setPortletHide();\n\t\t\t\t\t }\n\t\t\t\t });\n\t\t\t}\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n\n\t} ,\n\n\tdelData : function (ids) {\n\t\tvar self = this;\n\t\tvar data = {\n\t\t\tids : ids ,\n\t\t\t_token : this.token,\n\t\t};\n\n\t\tsure.init('是否删除?' , function () {\n\n\t\t\t$.post(Param.uri.destroy , data)\n\t\t\t .fail(function (res) {\n\t\t\t\t tips.error(res.responseText);\n\t\t\t })\n\t\t\t .done(function (res) {\n\t\t\t\t if ( res.code == 1001 ) {\n\t\t\t\t\t //需要登录\n\t\t\t\t\t tips.error('请先登录');\n\t\t\t\t } else if ( res.code != 0 ) {\n\t\t\t\t\t tips.error(res.msg);\n\t\t\t\t } else {\n\t\t\t\t\t tips.success(res.msg);\n\t\t\t\t\t $('#dataGrid').TableGrid('reload');\n\t\t\t\t }\n\t\t\t });\n\t\t});\n\t} ,\n\n\t//初始化grid\n\tinitGrid : function () {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query , '' , uri);\n\n\t\t$('#dataGrid').TableGrid({\n\t\t\turi : Param.uri.read ,\n\t\t\tselectAll : true ,\n\t\t\tparam : Param.query ,\n\t\t\trowStyle : function (row) {\n\t\t\t\tif ( row.status == -1 ) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t\tif ( row.status == 0 ) {\n\t\t\t\t\treturn 'info';\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tloadSuccess : function (rows , settings) {\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif ( oldUri == uri ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params , '' , oldUri);\n\t\t\t\thistory.replaceState(settings.param , '' , uri);\n\t\t\t}\n\t\t});\n\t}\n\n};\n\n//pop state 事件\nwindow.onpopstate = function (event) {\n\tif ( event && event.state ) {\n\t\t$('#searchForm').reloadForm(event.state);\n\t\tvar $dataGrid = $('#dataGrid');\n\t\t$dataGrid.TableGrid('setParam' , event.state);\n\t\t$dataGrid.TableGrid('reload');\n\t}\n};\n\nvar statusColor = {\"-1\" : 'default' , \"0\" : 'primary' , \"1\" : 'danger'};\nvar formatStatus = function (value) {\n\treturn '<span class=\"label label-sm label-' + statusColor[value] + '\">' + Param.status[value] + '</span>';\n};\n\nvar typeColor = {captcha : 'default'};\nvar formatType = function (value , row) {\n\treturn '<span class=\"label label-' + typeColor[value] + '\">' + Param.type[value] + '</span>';\n};"
  },
  {
    "path": "resources/assets/static/js/backend/SysUser.js",
    "content": "/**\n * SysUser JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-27\n */\n\nvar SysUser = {\n  token: $('input[name=_token]').val(),\n  init: function() {\n    //重新设置菜单\n    if (!empty(Param.uri.menu)) {\n      Layout.setSidebarMenuActiveLink('set', 'a[data-uri=\"' + Param.uri.menu + '\"]');\n    }\n\n    //初始化ajax 提示框\n    loading.initAjax();\n\n    this.initBtn();\n    this.initSearchForm();\n    this.initGrid();\n  },\n\n  //初始化查询form\n  initSearchForm: function() {\n    var $searchForm = $('#searchForm');\n    $searchForm.reloadForm(Param.query);\n\n    //点击查询按钮\n    $('#searchBtn').on('click', function(e) {\n      e.preventDefault();\n\n      var $dataGrid = $('#dataGrid');\n      var param = $dataGrid.TableGrid('getParam');\n\n      param.keyword = $.trim($('#keyword').val());\n      param.status = $('#status').val();\n      param.page = 1;\n\n      //console.log( param );\n      $dataGrid.TableGrid('setParam', param);\n      $dataGrid.TableGrid('reload');\n    });\n  },\n\n  //显示 portlet\n  setPortletShow: function(type) {\n    var $tablePortlet = $('#tablePortlet');\n    var $addEditPortlet = $('#addEditPortlet');\n\n    $tablePortlet.slideUp('fast');\n    if (type == 'add') {\n      if (!$addEditPortlet.hasClass('red')) {\n        $addEditPortlet.removeClass('green-meadow').addClass('red');\n      }\n      $addEditPortlet.find('.caption-title').html('新建' + Param.pageTitle);\n    } else if (type == 'edit') {\n      if (!$addEditPortlet.hasClass('green-meadow')) {\n        $addEditPortlet.removeClass('red').addClass('green-meadow');\n      }\n      $addEditPortlet.find('.caption-title').html('编辑' + Param.pageTitle);\n    }\n\n    //$('#data-table-portlet').slideUp('fast');\n    $addEditPortlet.show();\n  },\n\n  //关闭 portlet\n  setPortletHide: function() {\n    $('#tablePortlet').slideDown('fast');\n    $('#addEditPortlet').slideUp('fast');\n  },\n\n  //初始化各种按钮\n  initBtn: function() {\n    var self = this;\n\n    //打开添加框\n    $('#addNewBtn').on('click', function(e) {\n      e.preventDefault();\n      self.setPortletShow('add');\n\n      var $form = $('#addEditForm');\n\n      $form.reloadForm(Param.defaultRow);\n      setImgPreview.clear('icon');\n\n      $form.attr('action', Param.uri.insert);\n    });\n\n    //编辑按钮\n    $(document).on('click', '.editBtn', function(e) {\n      e.preventDefault();\n      self.setPortletShow('edit');\n\n      var id = $(this).data('id');\n      var row = $('#dataGrid').TableGrid('getRow', id);\n      var $form = $('#addEditForm');\n\n      $form.reloadForm(row);\n      setImgPreview.set('icon', row.icon);\n\n      //console.log( row.roles );\n      $.each(row.roles, function(index, item) {\n        $('input[name=\"roles[]\"][value=\"' + item.role_id + '\"]').prop('checked', true);\n      });\n\n      $form.attr('action', Param.uri.update + '/' + row.id);\n    });\n\n    //删除一行\n    $(document).on('click', '.destroyBtn', function(e) {\n      e.preventDefault();\n      var id = $(this).data('id');\n      self.delData(id);\n    });\n\n    $('#destroySelectBtn').on('click', function(e) {\n      e.preventDefault();\n      var ids = $('.checker:checked').serializeJSON().selectChecker;\n      if (empty(ids)) {\n        tips.error('请选择要删除的记录');\n        return;\n      }\n      self.delData(ids);\n    });\n\n    //提交添加编辑窗\n    $('#submitFormBtn').on('click', function(e) {\n      e.preventDefault();\n      var $form = $('#addEditForm');\n\n      if ($form.validForm()) {\n        var data = $form.serializeObject();\n        data._token = self.token;\n        $.post($form.attr('action'), data)\n          .fail(function(res) {\n            tips.error(res.responseText);\n          })\n          .done(function(res) {\n            if (res.code == 401) {\n              //需要登录\n              tips.error('请先登录');\n            } else if (res.code != 0) {\n              tips.error(res.msg);\n            } else {\n              tips.success(res.msg);\n              $('#dataGrid').TableGrid('reload');\n              self.setPortletHide();\n            }\n          });\n      }\n    });\n\n    //关闭添加编辑窗\n    $('#closePortletBtn').on('click', function(e) {\n      e.preventDefault();\n      self.setPortletHide();\n    });\n\n    //上传按钮\n    $('#iconUploadBtn').Uploader({\n      uri: Param.uri.upload, //上传文件\n      param: Param.uploadParam,\n      album: true,\n      albumUri: Param.uri.album,\n      albumCatalogUri: Param.uri.albumCatalog,\n      albumParam: Param.albumParam,\n      onSuccess: function(ret) {\n        tips.success(ret.msg);\n        if (ret.code == 0) {\n          setImgPreview.set('icon', ret.data.uri);\n        }\n      },\n      onChooseAlbum: function(uri) {\n        setImgPreview.set('icon', uri);\n      }\n    });\n\n    //密码重置\n    $(document).on('click', '.reset-pwd-btn', function(e) {\n      e.preventDefault();\n      var id = $(this).data('id');\n      sure.init('将密码重置为 ' + Param.defaultPwd + \" ?\", function() {\n        $.get(Param.uri.resetPwd + '/' + id, function(ret) {\n          if (ret.code != 0) {\n            tips.error(ret.msg);\n            return;\n          }\n          tips.success('重置成功');\n        });\n      });\n    });\n  },\n\n  delData: function(ids) {\n    var data = {\n      ids: ids,\n      _token: this.token\n    };\n\n    sure.init('是否删除?', function() {\n\n      $.post(Param.uri.destroy, data)\n        .fail(function(res) {\n          tips(res.responseText);\n        })\n        .done(function(res) {\n          if (res.code == 401) {\n            //需要登录\n            tips.error('请先登录');\n          } else if (res.code != 0) {\n            tips.error(res.msg);\n          } else {\n            tips.success(res.msg);\n            $('#dataGrid').TableGrid('reload');\n          }\n        });\n    });\n  },\n\n  //初始化grid\n  initGrid: function() {\n    var self = this;\n    var uri = Param.uri.this + '?' + $.param(Param.query);\n    history.replaceState(Param.query, '', uri);\n\n    //console.log( uri );\n\n    $('#dataGrid').TableGrid({\n      uri: Param.uri.read,\n      selectAll: false,\n      param: Param.query,\n      rowStyle: function(row) {\n        if (row.status == 0) {\n          return 'warning';\n        }\n      },\n      loadSuccess: function(rows, settings) {\n        var old_uri = window.location.href;\n        var uri = Param.uri.this + '?' + $.param(settings.param);\n        if (old_uri == uri) {\n          return false;\n        }\n\n        var params = $.getUrlParams(window.location.href);\n        history.pushState(params, '', old_uri);\n        history.replaceState(settings.param, '', uri);\n      }\n    });\n  }\n\n};\n\n//pop state 事件\nwindow.onpopstate = function(event) {\n  if (event && event.state) {\n    $('#searchForm').reloadForm(event.state);\n    var $dataGrid = $('#data_grid');\n    $dataGrid.TableGrid('setParam', event.state);\n    $dataGrid.TableGrid('reload');\n  }\n};\n\nvar formatUsername = function(value, row) {\n  var html = value + '<br>';\n  $.each(row.roles, function(index, role) {\n    html += '<span class=\"badge badge-default \">' + role.role_name + '</span>';\n  });\n  return html;\n};\n\nvar optResetPwd = function(value, row) {\n  return '<a href=\"#\" data-id=\"' + row.id + '\" class=\"btn default btn-sm reset-pwd-btn\">' +\n    '<i class=\"fa fa-key\"></i> 重置密码</a>';\n};\nvar formatTest = function(value) {\n  var data = ['否', '是'];\n  return '<span class=\"label label-sm label-' + yesColor[value] + '\">' + data[value] + '</span>';\n};"
  },
  {
    "path": "resources/assets/static/js/global/app.js",
    "content": "/**\n Core script to handle the entire theme and core functions\n **/\nvar App = function () {\n\n\t// IE mode\n\tvar isRTL = false;\n\tvar isIE8 = false;\n\tvar isIE9 = false;\n\tvar isIE10 = false;\n\n\tvar resizeHandlers = [];\n\n\tvar assetsPath = '../assets/';\n\n\tvar globalImgPath = 'static/themes/global/img/';\n\n\tvar globalPluginsPath = 'global/plugins/';\n\n\tvar globalCssPath = 'global/css/';\n\n\t// theme layout color set\n\n\tvar brandColors = {\n\t\t'blue' : '#89C4F4' ,\n\t\t'red' : '#F3565D' ,\n\t\t'green' : '#1bbc9b' ,\n\t\t'purple' : '#9b59b6' ,\n\t\t'grey' : '#95a5a6' ,\n\t\t'yellow' : '#F8CB00'\n\t};\n\n\t// initializes main settings\n\tvar handleInit = function () {\n\n\t\tif ( $('body').css('direction') === 'rtl' ) {\n\t\t\tisRTL = true;\n\t\t}\n\n\t\tisIE8 = ! ! navigator.userAgent.match(/MSIE 8.0/);\n\t\tisIE9 = ! ! navigator.userAgent.match(/MSIE 9.0/);\n\t\tisIE10 = ! ! navigator.userAgent.match(/MSIE 10.0/);\n\n\t\tif ( isIE10 ) {\n\t\t\t$('html').addClass('ie10'); // detect IE10 version\n\t\t}\n\n\t\tif ( isIE10 || isIE9 || isIE8 ) {\n\t\t\t$('html').addClass('ie'); // detect IE10 version\n\t\t}\n\t};\n\n\t// runs callback functions set by App.addResponsiveHandler().\n\tvar _runResizeHandlers = function () {\n\t\t// reinitialize other subscribed elements\n\t\tfor ( var i = 0 ; i < resizeHandlers.length ; i ++ ) {\n\t\t\tvar each = resizeHandlers[i];\n\t\t\teach.call();\n\t\t}\n\t};\n\n\t// handle the layout reinitialization on window resize\n\tvar handleOnResize = function () {\n\t\tvar resize;\n\t\tif ( isIE8 ) {\n\t\t\tvar currheight;\n\t\t\t$(window).resize(function () {\n\t\t\t\tif ( currheight == document.documentElement.clientHeight ) {\n\t\t\t\t\treturn; //quite event since only body resized not window.\n\t\t\t\t}\n\t\t\t\tif ( resize ) {\n\t\t\t\t\tclearTimeout(resize);\n\t\t\t\t}\n\t\t\t\tresize = setTimeout(function () {\n\t\t\t\t\t_runResizeHandlers();\n\t\t\t\t} , 50); // wait 50ms until window resize finishes.\n\t\t\t\tcurrheight = document.documentElement.clientHeight; // store last body client height\n\t\t\t});\n\t\t} else {\n\t\t\t$(window).resize(function () {\n\t\t\t\tif ( resize ) {\n\t\t\t\t\tclearTimeout(resize);\n\t\t\t\t}\n\t\t\t\tresize = setTimeout(function () {\n\t\t\t\t\t_runResizeHandlers();\n\t\t\t\t} , 50); // wait 50ms until window resize finishes.\n\t\t\t});\n\t\t}\n\t};\n\n\t// Handles portlet tools & actions\n\tvar handlePortletTools = function () {\n\t\t// handle portlet remove\n\t\t$('body').on('click' , '.portlet > .portlet-title > .tools > a.remove' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar portlet = $(this).closest(\".portlet\");\n\n\t\t\tif ( $('body').hasClass('page-portlet-fullscreen') ) {\n\t\t\t\t$('body').removeClass('page-portlet-fullscreen');\n\t\t\t}\n\n\t\t\tportlet.find('.portlet-title .fullscreen').tooltip('destroy');\n\t\t\tportlet.find('.portlet-title > .tools > .reload').tooltip('destroy');\n\t\t\tportlet.find('.portlet-title > .tools > .remove').tooltip('destroy');\n\t\t\tportlet.find('.portlet-title > .tools > .config').tooltip('destroy');\n\t\t\tportlet.find('.portlet-title > .tools > .collapse, .portlet > .portlet-title > .tools > .expand').tooltip('destroy');\n\n\t\t\tportlet.remove();\n\t\t});\n\n\t\t// handle portlet fullscreen\n\t\t$('body').on('click' , '.portlet > .portlet-title .fullscreen' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar portlet = $(this).closest(\".portlet\");\n\t\t\tif ( portlet.hasClass('portlet-fullscreen') ) {\n\t\t\t\t$(this).removeClass('on');\n\t\t\t\tportlet.removeClass('portlet-fullscreen');\n\t\t\t\t$('body').removeClass('page-portlet-fullscreen');\n\t\t\t\tportlet.children('.portlet-body').css('height' , 'auto');\n\t\t\t} else {\n\t\t\t\tvar height = App.getViewPort().height -\n\t\t\t\t             portlet.children('.portlet-title').outerHeight() -\n\t\t\t\t             parseInt(portlet.children('.portlet-body').css('padding-top')) -\n\t\t\t\t             parseInt(portlet.children('.portlet-body').css('padding-bottom'));\n\n\t\t\t\t$(this).addClass('on');\n\t\t\t\tportlet.addClass('portlet-fullscreen');\n\t\t\t\t$('body').addClass('page-portlet-fullscreen');\n\t\t\t\tportlet.children('.portlet-body').css('height' , height);\n\t\t\t}\n\t\t});\n\n\t\t$('body').on('click' , '.portlet > .portlet-title > .tools > a.reload' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar el = $(this).closest(\".portlet\").children(\".portlet-body\");\n\t\t\tvar url = $(this).attr(\"data-url\");\n\t\t\tvar error = $(this).attr(\"data-error-display\");\n\t\t\tif ( url ) {\n\t\t\t\tApp.blockUI({\n\t\t\t\t\ttarget : el ,\n\t\t\t\t\tanimate : true ,\n\t\t\t\t\toverlayColor : 'none'\n\t\t\t\t});\n\t\t\t\t$.ajax({\n\t\t\t\t\ttype : \"GET\" ,\n\t\t\t\t\tcache : false ,\n\t\t\t\t\turl : url ,\n\t\t\t\t\tdataType : \"html\" ,\n\t\t\t\t\tsuccess : function (res) {\n\t\t\t\t\t\tApp.unblockUI(el);\n\t\t\t\t\t\tel.html(res);\n\t\t\t\t\t\tApp.initAjax() // reinitialize elements & plugins for newly loaded content\n\t\t\t\t\t} ,\n\t\t\t\t\terror : function (xhr , ajaxOptions , thrownError) {\n\t\t\t\t\t\tApp.unblockUI(el);\n\t\t\t\t\t\tvar msg = 'Error on reloading the content. Please check your connection and try again.';\n\t\t\t\t\t\tif ( error == \"toastr\" && toastr ) {\n\t\t\t\t\t\t\ttoastr.error(msg);\n\t\t\t\t\t\t} else if ( error == \"notific8\" && $.notific8 ) {\n\t\t\t\t\t\t\t$.notific8('zindex' , 11500);\n\t\t\t\t\t\t\t$.notific8(msg , {\n\t\t\t\t\t\t\t\ttheme : 'ruby' ,\n\t\t\t\t\t\t\t\tlife : 3000\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\talert(msg);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// for demo purpose\n\t\t\t\tApp.blockUI({\n\t\t\t\t\ttarget : el ,\n\t\t\t\t\tanimate : true ,\n\t\t\t\t\toverlayColor : 'none'\n\t\t\t\t});\n\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\tApp.unblockUI(el);\n\t\t\t\t} , 1000);\n\t\t\t}\n\t\t});\n\n\t\t// load ajax data on page init\n\t\t$('.portlet .portlet-title a.reload[data-load=\"true\"]').click();\n\n\t\t$('body').on('click' , '.portlet > .portlet-title > .tools > .collapse, .portlet .portlet-title > .tools > .expand' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar el = $(this).closest(\".portlet\").children(\".portlet-body\");\n\t\t\tif ( $(this).hasClass(\"collapse\") ) {\n\t\t\t\t$(this).removeClass(\"collapse\").addClass(\"expand\");\n\t\t\t\tel.slideUp(200);\n\t\t\t} else {\n\t\t\t\t$(this).removeClass(\"expand\").addClass(\"collapse\");\n\t\t\t\tel.slideDown(200);\n\t\t\t}\n\t\t});\n\t};\n\n\t// Handlesmaterial design checkboxes\n\tvar handleMaterialDesign = function () {\n\n\t\t// Material design ckeckbox and radio effects\n\t\t$('body').on('click' , '.md-checkbox > label, .md-radio > label' , function () {\n\t\t\tvar the = $(this);\n\t\t\t// find the first span which is our circle/bubble\n\t\t\tvar el = $(this).children('span:first-child');\n\n\t\t\t// add the bubble class (we do this so it doesnt show on page load)\n\t\t\tel.addClass('inc');\n\n\t\t\t// clone it\n\t\t\tvar newone = el.clone(true);\n\n\t\t\t// add the cloned version before our original\n\t\t\tel.before(newone);\n\n\t\t\t// remove the original so that it is ready to run on next click\n\t\t\t$(\".\" + el.attr(\"class\") + \":last\" , the).remove();\n\t\t});\n\n\t\tif ( $('body').hasClass('page-md') ) {\n\t\t\t// Material design click effect\n\t\t\t// credit where credit's due; http://thecodeplayer.com/walkthrough/ripple-click-effect-google-material-design\n\t\t\t//\n\t\t\tvar element , circle , d , x , y;\n\t\t\t$('body').on('click' , 'a.btn, button.btn, input.btn, label.btn' , function (e) {\n\t\t\t\telement = $(this);\n\n\t\t\t\tif ( element.find(\".md-click-circle\").length == 0 ) {\n\t\t\t\t\telement.prepend(\"<span class='md-click-circle'></span>\");\n\t\t\t\t}\n\n\t\t\t\tcircle = element.find(\".md-click-circle\");\n\t\t\t\tcircle.removeClass(\"md-click-animate\");\n\n\t\t\t\tif ( ! circle.height() && ! circle.width() ) {\n\t\t\t\t\td = Math.max(element.outerWidth() , element.outerHeight());\n\t\t\t\t\tcircle.css({height : d , width : d});\n\t\t\t\t}\n\n\t\t\t\tx = e.pageX - element.offset().left - circle.width() / 2;\n\t\t\t\ty = e.pageY - element.offset().top - circle.height() / 2;\n\n\t\t\t\tcircle.css({top : y + 'px' , left : x + 'px'}).addClass(\"md-click-animate\");\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tcircle.remove();\n\t\t\t\t} , 1000);\n\t\t\t});\n\t\t}\n\n\t\t// Floating labels\n\t\tvar handleInput = function (el) {\n\t\t\tif ( el.val() != \"\" ) {\n\t\t\t\tel.addClass('edited');\n\t\t\t} else {\n\t\t\t\tel.removeClass('edited');\n\t\t\t}\n\t\t}\n\n\t\t$('body').on('keydown' , '.form-md-floating-label .form-control' , function (e) {\n\t\t\thandleInput($(this));\n\t\t});\n\t\t$('body').on('blur' , '.form-md-floating-label .form-control' , function (e) {\n\t\t\thandleInput($(this));\n\t\t});\n\n\t\t$('.form-md-floating-label .form-control').each(function () {\n\t\t\tif ( $(this).val().length > 0 ) {\n\t\t\t\t$(this).addClass('edited');\n\t\t\t}\n\t\t});\n\t}\n\n\t// Handles custom checkboxes & radios using jQuery iCheck plugin\n\tvar handleiCheck = function () {\n\t\tif ( ! $().iCheck ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$('.icheck').each(function () {\n\t\t\tvar checkboxClass = $(this).attr('data-checkbox') ? $(this).attr('data-checkbox') : 'icheckbox_minimal-grey';\n\t\t\tvar radioClass = $(this).attr('data-radio') ? $(this).attr('data-radio') : 'iradio_minimal-grey';\n\n\t\t\tif ( checkboxClass.indexOf('_line') > - 1 || radioClass.indexOf('_line') > - 1 ) {\n\t\t\t\t$(this).iCheck({\n\t\t\t\t\tcheckboxClass : checkboxClass ,\n\t\t\t\t\tradioClass : radioClass ,\n\t\t\t\t\tinsert : '<div class=\"icheck_line-icon\"></div>' + $(this).attr(\"data-label\")\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t$(this).iCheck({\n\t\t\t\t\tcheckboxClass : checkboxClass ,\n\t\t\t\t\tradioClass : radioClass\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n\n\t// Handles Bootstrap switches\n\tvar handleBootstrapSwitch = function () {\n\t\tif ( ! $().bootstrapSwitch ) {\n\t\t\treturn;\n\t\t}\n\t\t$('.make-switch').bootstrapSwitch();\n\t};\n\n\t// Handles Bootstrap confirmations\n\tvar handleBootstrapConfirmation = function () {\n\t\tif ( ! $().confirmation ) {\n\t\t\treturn;\n\t\t}\n\t\t$('[data-toggle=confirmation]').confirmation({\n\t\t\tbtnOkClass : 'btn btn-sm btn-success' ,\n\t\t\tbtnCancelClass : 'btn btn-sm btn-danger'\n\t\t});\n\t}\n\n\t// Handles Bootstrap Accordions.\n\tvar handleAccordions = function () {\n\t\t$('body').on('shown.bs.collapse' , '.accordion.scrollable' , function (e) {\n\t\t\tApp.scrollTo($(e.target));\n\t\t});\n\t};\n\n\t// Handles Bootstrap Tabs.\n\tvar handleTabs = function () {\n\t\t//activate tab if tab id provided in the URL\n\t\tif ( location.hash ) {\n\t\t\tvar tabid = encodeURI(location.hash.substr(1));\n\t\t\t$('a[href=\"#' + tabid + '\"]').parents('.tab-pane:hidden').each(function () {\n\t\t\t\tvar tabid = $(this).attr(\"id\");\n\t\t\t\t$('a[href=\"#' + tabid + '\"]').click();\n\t\t\t});\n\t\t\t$('a[href=\"#' + tabid + '\"]').click();\n\t\t}\n\n\t\tif ( $().tabdrop ) {\n\t\t\t$('.tabbable-tabdrop .nav-pills, .tabbable-tabdrop .nav-tabs').tabdrop({\n\t\t\t\ttext : '<i class=\"fa fa-ellipsis-v\"></i>&nbsp;<i class=\"fa fa-angle-down\"></i>'\n\t\t\t});\n\t\t}\n\t};\n\n\t// Handles Bootstrap Modals.\n\tvar handleModals = function () {\n\t\t// fix stackable modal issue: when 2 or more modals opened, closing one of modal will remove .modal-open class.\n\t\t$('body').on('hide.bs.modal' , function () {\n\t\t\tif ( $('.modal:visible').length > 1 && $('html').hasClass('modal-open') === false ) {\n\t\t\t\t$('html').addClass('modal-open');\n\t\t\t} else if ( $('.modal:visible').length <= 1 ) {\n\t\t\t\t$('html').removeClass('modal-open');\n\t\t\t}\n\t\t});\n\n\t\t// fix page scrollbars issue\n\t\t$('body').on('show.bs.modal' , '.modal' , function () {\n\t\t\tif ( $(this).hasClass(\"modal-scroll\") ) {\n\t\t\t\t$('body').addClass(\"modal-open-noscroll\");\n\t\t\t}\n\t\t});\n\n\t\t// fix page scrollbars issue\n\t\t$('body').on('hidden.bs.modal' , '.modal' , function () {\n\t\t\t$('body').removeClass(\"modal-open-noscroll\");\n\t\t});\n\n\t\t// remove ajax content and remove cache on modal closed\n\t\t$('body').on('hidden.bs.modal' , '.modal:not(.modal-cached)' , function () {\n\t\t\t$(this).removeData('bs.modal');\n\t\t});\n\t};\n\n\t// Handles Bootstrap Tooltips.\n\tvar handleTooltips = function () {\n\t\t// global tooltips\n\t\t$('.tooltips').tooltip();\n\n\t\t// portlet tooltips\n\t\t$('.portlet > .portlet-title .fullscreen').tooltip({\n\t\t\ttrigger : 'hover' ,\n\t\t\tcontainer : 'body' ,\n\t\t\ttitle : 'Fullscreen'\n\t\t});\n\t\t$('.portlet > .portlet-title > .tools > .reload').tooltip({\n\t\t\ttrigger : 'hover' ,\n\t\t\tcontainer : 'body' ,\n\t\t\ttitle : 'Reload'\n\t\t});\n\t\t$('.portlet > .portlet-title > .tools > .remove').tooltip({\n\t\t\ttrigger : 'hover' ,\n\t\t\tcontainer : 'body' ,\n\t\t\ttitle : 'Remove'\n\t\t});\n\t\t$('.portlet > .portlet-title > .tools > .config').tooltip({\n\t\t\ttrigger : 'hover' ,\n\t\t\tcontainer : 'body' ,\n\t\t\ttitle : 'Settings'\n\t\t});\n\t\t$('.portlet > .portlet-title > .tools > .collapse, .portlet > .portlet-title > .tools > .expand').tooltip({\n\t\t\ttrigger : 'hover' ,\n\t\t\tcontainer : 'body' ,\n\t\t\ttitle : 'Collapse/Expand'\n\t\t});\n\t};\n\n\t// Handles Bootstrap Dropdowns\n\tvar handleDropdowns = function () {\n\t\t/*\n\t\t Hold dropdown on click\n\t\t */\n\t\t$('body').on('click' , '.dropdown-menu.hold-on-click' , function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\t};\n\n\tvar handleAlerts = function () {\n\t\t$('body').on('click' , '[data-close=\"alert\"]' , function (e) {\n\t\t\t$(this).parent('.alert').hide();\n\t\t\t$(this).closest('.note').hide();\n\t\t\te.preventDefault();\n\t\t});\n\n\t\t$('body').on('click' , '[data-close=\"note\"]' , function (e) {\n\t\t\t$(this).closest('.note').hide();\n\t\t\te.preventDefault();\n\t\t});\n\n\t\t$('body').on('click' , '[data-remove=\"note\"]' , function (e) {\n\t\t\t$(this).closest('.note').remove();\n\t\t\te.preventDefault();\n\t\t});\n\t};\n\n\t// Handle Hower Dropdowns\n\tvar handleDropdownHover = function () {\n\t\t$('[data-hover=\"dropdown\"]').not('.hover-initialized').each(function () {\n\t\t\t$(this).dropdownHover();\n\t\t\t$(this).addClass('hover-initialized');\n\t\t});\n\t};\n\n\t// Handle textarea autosize\n\tvar handleTextareaAutosize = function () {\n\t\tif ( typeof(autosize) == \"function\" ) {\n\t\t\tautosize(document.querySelector('textarea.autosizeme'));\n\t\t}\n\t}\n\n\t// Handles Bootstrap Popovers\n\n\t// last popep popover\n\tvar lastPopedPopover;\n\n\tvar handlePopovers = function () {\n\t\t$('.popovers').popover();\n\n\t\t// close last displayed popover\n\n\t\t$(document).on('click.bs.popover.data-api' , function (e) {\n\t\t\tif ( lastPopedPopover ) {\n\t\t\t\tlastPopedPopover.popover('hide');\n\t\t\t}\n\t\t});\n\t};\n\n\t// Handles scrollable contents using jQuery SlimScroll plugin.\n\tvar handleScrollers = function () {\n\t\tApp.initSlimScroll('.scroller');\n\t};\n\n\t// Handles Image Preview using jQuery Fancybox plugin\n\tvar handleFancybox = function () {\n\t\tif ( ! jQuery.fancybox ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( $(\".fancybox-button\").length > 0 ) {\n\t\t\t$(\".fancybox-button\").fancybox({\n\t\t\t\tgroupAttr : 'data-rel' ,\n\t\t\t\tprevEffect : 'none' ,\n\t\t\t\tnextEffect : 'none' ,\n\t\t\t\tcloseBtn : true ,\n\t\t\t\thelpers : {\n\t\t\t\t\ttitle : {\n\t\t\t\t\t\ttype : 'inside'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t// Handles counterup plugin wrapper\n\tvar handleCounterup = function () {\n\t\tif ( ! $().counterUp ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$(\"[data-counter='counterup']\").counterUp({\n\t\t\tdelay : 10 ,\n\t\t\ttime : 1000\n\t\t});\n\t};\n\n\t// Fix input placeholder issue for IE8 and IE9\n\tvar handleFixInputPlaceholderForIE = function () {\n\t\t//fix html5 placeholder attribute for ie7 & ie8\n\t\tif ( isIE8 || isIE9 ) { // ie8 & ie9\n\t\t\t// this is html5 placeholder fix for inputs, inputs with placeholder-no-fix class will be skipped(e.g: we need\n\t\t\t// this for password fields)\n\t\t\t$('input[placeholder]:not(.placeholder-no-fix), textarea[placeholder]:not(.placeholder-no-fix)').each(function () {\n\t\t\t\tvar input = $(this);\n\n\t\t\t\tif ( input.val() === '' && input.attr(\"placeholder\") !== '' ) {\n\t\t\t\t\tinput.addClass(\"placeholder\").val(input.attr('placeholder'));\n\t\t\t\t}\n\n\t\t\t\tinput.focus(function () {\n\t\t\t\t\tif ( input.val() == input.attr('placeholder') ) {\n\t\t\t\t\t\tinput.val('');\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tinput.blur(function () {\n\t\t\t\t\tif ( input.val() === '' || input.val() == input.attr('placeholder') ) {\n\t\t\t\t\t\tinput.val(input.attr('placeholder'));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t};\n\n\t// Handle Select2 Dropdowns\n\tvar handleSelect2 = function () {\n\t\tif ( $().select2 ) {\n\t\t\t$.fn.select2.defaults.set(\"theme\" , \"bootstrap\");\n\t\t\t$('.select2me').select2({\n\t\t\t\tplaceholder : \"Select\" ,\n\t\t\t\twidth : 'auto' ,\n\t\t\t\tallowClear : true\n\t\t\t});\n\t\t}\n\t};\n\n\t// handle group element heights\n\tvar handleHeight = function () {\n\t\t$('[data-auto-height]').each(function () {\n\t\t\tvar parent = $(this);\n\t\t\tvar items = $('[data-height]' , parent);\n\t\t\tvar height = 0;\n\t\t\tvar mode = parent.attr('data-mode');\n\t\t\tvar offset = parseInt(parent.attr('data-offset') ? parent.attr('data-offset') : 0);\n\n\t\t\titems.each(function () {\n\t\t\t\tif ( $(this).attr('data-height') == \"height\" ) {\n\t\t\t\t\t$(this).css('height' , '');\n\t\t\t\t} else {\n\t\t\t\t\t$(this).css('min-height' , '');\n\t\t\t\t}\n\n\t\t\t\tvar height_ = (mode == 'base-height' ? $(this).outerHeight() : $(this).outerHeight(true));\n\t\t\t\tif ( height_ > height ) {\n\t\t\t\t\theight = height_;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\theight = height + offset;\n\n\t\t\titems.each(function () {\n\t\t\t\tif ( $(this).attr('data-height') == \"height\" ) {\n\t\t\t\t\t$(this).css('height' , height);\n\t\t\t\t} else {\n\t\t\t\t\t$(this).css('min-height' , height);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif ( parent.attr('data-related') ) {\n\t\t\t\t$(parent.attr('data-related')).css('height' , parent.height());\n\t\t\t}\n\t\t});\n\t}\n\n\t//* END:CORE HANDLERS *//\n\n\treturn {\n\n\t\t//main function to initiate the theme\n\t\tinit : function () {\n\t\t\t//IMPORTANT!!!: Do not modify the core handlers call order.\n\n\t\t\t//Core handlers\n\t\t\thandleInit(); // initialize core variables\n\t\t\thandleOnResize(); // set and handle responsive\n\n\t\t\t//UI Component handlers\n\t\t\thandleMaterialDesign(); // handle material design\n\t\t\thandleiCheck(); // handles custom icheck radio and checkboxes\n\t\t\thandleBootstrapSwitch(); // handle bootstrap switch plugin\n\t\t\thandleScrollers(); // handles slim scrolling contents\n\t\t\thandleFancybox(); // handle fancy box\n\t\t\thandleSelect2(); // handle custom Select2 dropdowns\n\t\t\thandlePortletTools(); // handles portlet action bar functionality(refresh, configure, toggle, remove)\n\t\t\thandleAlerts(); //handle closabled alerts\n\t\t\thandleDropdowns(); // handle dropdowns\n\t\t\thandleTabs(); // handle tabs\n\t\t\thandleTooltips(); // handle bootstrap tooltips\n\t\t\thandlePopovers(); // handles bootstrap popovers\n\t\t\thandleAccordions(); //handles accordions\n\t\t\thandleModals(); // handle modals\n\t\t\thandleBootstrapConfirmation(); // handle bootstrap confirmations\n\t\t\thandleTextareaAutosize(); // handle autosize textareas\n\t\t\thandleCounterup(); // handle counterup instances\n\n\t\t\t//Handle group element heights\n\t\t\tthis.addResizeHandler(handleHeight); // handle auto calculating height on window resize\n\n\t\t\t// Hacks\n\t\t\thandleFixInputPlaceholderForIE(); //IE8 & IE9 input placeholder issue fix\n\t\t} ,\n\n\t\t//main function to initiate core javascript after ajax complete\n\t\tinitAjax : function () {\n\t\t\t//handleUniform(); // handles custom radio & checkboxes\n\t\t\thandleiCheck(); // handles custom icheck radio and checkboxes\n\t\t\thandleBootstrapSwitch(); // handle bootstrap switch plugin\n\t\t\thandleDropdownHover(); // handles dropdown hover\n\t\t\thandleScrollers(); // handles slim scrolling contents\n\t\t\thandleSelect2(); // handle custom Select2 dropdowns\n\t\t\thandleFancybox(); // handle fancy box\n\t\t\thandleDropdowns(); // handle dropdowns\n\t\t\thandleTooltips(); // handle bootstrap tooltips\n\t\t\thandlePopovers(); // handles bootstrap popovers\n\t\t\thandleAccordions(); //handles accordions\n\t\t\thandleBootstrapConfirmation(); // handle bootstrap confirmations\n\t\t} ,\n\n\t\t//init main components\n\t\tinitComponents : function () {\n\t\t\tthis.initAjax();\n\t\t} ,\n\n\t\t//public function to remember last opened popover that needs to be closed on click\n\t\tsetLastPopedPopover : function (el) {\n\t\t\tlastPopedPopover = el;\n\t\t} ,\n\n\t\t//public function to add callback a function which will be called on window resize\n\t\taddResizeHandler : function (func) {\n\t\t\tresizeHandlers.push(func);\n\t\t} ,\n\n\t\t//public functon to call _runresizeHandlers\n\t\trunResizeHandlers : function () {\n\t\t\t_runResizeHandlers();\n\t\t} ,\n\n\t\t// wrApper function to scroll(focus) to an element\n\t\tscrollTo : function (el , offeset) {\n\t\t\tvar pos = (el && el.length > 0) ? el.offset().top : 0;\n\n\t\t\tif ( el ) {\n\t\t\t\tif ( $('body').hasClass('page-header-fixed') ) {\n\t\t\t\t\tpos = pos - $('.page-header').height();\n\t\t\t\t} else if ( $('body').hasClass('page-header-top-fixed') ) {\n\t\t\t\t\tpos = pos - $('.page-header-top').height();\n\t\t\t\t} else if ( $('body').hasClass('page-header-menu-fixed') ) {\n\t\t\t\t\tpos = pos - $('.page-header-menu').height();\n\t\t\t\t}\n\t\t\t\tpos = pos + (offeset ? offeset : - 1 * el.height());\n\t\t\t}\n\n\t\t\t$('html,body').animate({\n\t\t\t\tscrollTop : pos\n\t\t\t} , 'slow');\n\t\t} ,\n\n\t\tinitSlimScroll : function (el) {\n\t\t\tif ( ! $().slimScroll ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$(el).each(function () {\n\t\t\t\tif ( $(this).attr(\"data-initialized\") ) {\n\t\t\t\t\treturn; // exit\n\t\t\t\t}\n\n\t\t\t\tvar height;\n\n\t\t\t\tif ( $(this).attr(\"data-height\") ) {\n\t\t\t\t\theight = $(this).attr(\"data-height\");\n\t\t\t\t} else {\n\t\t\t\t\theight = $(this).css('height');\n\t\t\t\t}\n\n\t\t\t\t$(this).slimScroll({\n\t\t\t\t\tallowPageScroll : true , // allow page scroll when the element scroll is ended\n\t\t\t\t\tsize : '7px' ,\n\t\t\t\t\tcolor : ($(this).attr(\"data-handle-color\") ? $(this).attr(\"data-handle-color\") : '#bbb') ,\n\t\t\t\t\twrapperClass : ($(this).attr(\"data-wrapper-class\") ? $(this).attr(\"data-wrapper-class\") : 'slimScrollDiv') ,\n\t\t\t\t\trailColor : ($(this).attr(\"data-rail-color\") ? $(this).attr(\"data-rail-color\") : '#eaeaea') ,\n\t\t\t\t\tposition : isRTL ? 'left' : 'right' ,\n\t\t\t\t\theight : height ,\n\t\t\t\t\talwaysVisible : ($(this).attr(\"data-always-visible\") == \"1\" ? true : false) ,\n\t\t\t\t\trailVisible : ($(this).attr(\"data-rail-visible\") == \"1\" ? true : false) ,\n\t\t\t\t\tdisableFadeOut : true\n\t\t\t\t});\n\n\t\t\t\t$(this).attr(\"data-initialized\" , \"1\");\n\t\t\t});\n\t\t} ,\n\n\t\tdestroySlimScroll : function (el) {\n\t\t\tif ( ! $().slimScroll ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$(el).each(function () {\n\t\t\t\tif ( $(this).attr(\"data-initialized\") === \"1\" ) { // destroy existing instance before updating the height\n\t\t\t\t\t$(this).removeAttr(\"data-initialized\");\n\t\t\t\t\t$(this).removeAttr(\"style\");\n\n\t\t\t\t\tvar attrList = {};\n\n\t\t\t\t\t// store the custom attribures so later we will reassign.\n\t\t\t\t\tif ( $(this).attr(\"data-handle-color\") ) {\n\t\t\t\t\t\tattrList[\"data-handle-color\"] = $(this).attr(\"data-handle-color\");\n\t\t\t\t\t}\n\t\t\t\t\tif ( $(this).attr(\"data-wrapper-class\") ) {\n\t\t\t\t\t\tattrList[\"data-wrapper-class\"] = $(this).attr(\"data-wrapper-class\");\n\t\t\t\t\t}\n\t\t\t\t\tif ( $(this).attr(\"data-rail-color\") ) {\n\t\t\t\t\t\tattrList[\"data-rail-color\"] = $(this).attr(\"data-rail-color\");\n\t\t\t\t\t}\n\t\t\t\t\tif ( $(this).attr(\"data-always-visible\") ) {\n\t\t\t\t\t\tattrList[\"data-always-visible\"] = $(this).attr(\"data-always-visible\");\n\t\t\t\t\t}\n\t\t\t\t\tif ( $(this).attr(\"data-rail-visible\") ) {\n\t\t\t\t\t\tattrList[\"data-rail-visible\"] = $(this).attr(\"data-rail-visible\");\n\t\t\t\t\t}\n\n\t\t\t\t\t$(this).slimScroll({\n\t\t\t\t\t\twrapperClass : ($(this).attr(\"data-wrapper-class\") ? $(this).attr(\"data-wrapper-class\") : 'slimScrollDiv') ,\n\t\t\t\t\t\tdestroy : true\n\t\t\t\t\t});\n\n\t\t\t\t\tvar the = $(this);\n\n\t\t\t\t\t// reassign custom attributes\n\t\t\t\t\t$.each(attrList , function (key , value) {\n\t\t\t\t\t\tthe.attr(key , value);\n\t\t\t\t\t});\n\n\t\t\t\t}\n\t\t\t});\n\t\t} ,\n\n\t\t// function to scroll to the top\n\t\tscrollTop : function () {\n\t\t\tApp.scrollTo();\n\t\t} ,\n\n\t\t// wrApper function to  block element(indicate loading)\n\t\tblockUI : function (options) {\n\t\t\toptions = $.extend(true , {} , options);\n\t\t\tvar html = '';\n\t\t\tif ( options.animate ) {\n\t\t\t\thtml = '<div class=\"loading-message ' + (options.boxed ? 'loading-message-boxed' : '') + '\">' + '<div class=\"block-spinner-bar\"><div class=\"bounce1\"></div><div class=\"bounce2\"></div><div class=\"bounce3\"></div></div>' + '</div>';\n\t\t\t} else if ( options.iconOnly ) {\n\t\t\t\thtml = '<div class=\"loading-message ' + (options.boxed ? 'loading-message-boxed' : '') + '\"><img src=\"' + this.getGlobalImgPath() + 'loading-spinner-grey.gif\" align=\"\"></div>';\n\t\t\t} else if ( options.textOnly ) {\n\t\t\t\thtml = '<div class=\"loading-message ' + (options.boxed ? 'loading-message-boxed' : '') + '\"><span>&nbsp;&nbsp;' + (options.message ? options.message : 'LOADING...') + '</span></div>';\n\t\t\t} else {\n\t\t\t\thtml = '<div class=\"loading-message ' + (options.boxed ? 'loading-message-boxed' : '') + '\"><img src=\"' + this.getGlobalImgPath() + 'loading-spinner-grey.gif\" align=\"\"><span>&nbsp;&nbsp;' + (options.message ? options.message : 'LOADING...') + '</span></div>';\n\t\t\t}\n\n\t\t\tif ( options.target ) { // element blocking\n\t\t\t\tvar el = $(options.target);\n\t\t\t\tif ( el.height() <= ($(window).height()) ) {\n\t\t\t\t\toptions.cenrerY = true;\n\t\t\t\t}\n\t\t\t\tel.block({\n\t\t\t\t\tmessage : html ,\n\t\t\t\t\tbaseZ : options.zIndex ? options.zIndex : 1000 ,\n\t\t\t\t\tcenterY : options.cenrerY !== undefined ? options.cenrerY : false ,\n\t\t\t\t\tcss : {\n\t\t\t\t\t\ttop : '10%' ,\n\t\t\t\t\t\tborder : '0' ,\n\t\t\t\t\t\tpadding : '0' ,\n\t\t\t\t\t\tbackgroundColor : 'none'\n\t\t\t\t\t} ,\n\t\t\t\t\toverlayCSS : {\n\t\t\t\t\t\tbackgroundColor : options.overlayColor ? options.overlayColor : '#555' ,\n\t\t\t\t\t\topacity : options.boxed ? 0.05 : 0.1 ,\n\t\t\t\t\t\tcursor : 'wait'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else { // page blocking\n\t\t\t\t$.blockUI({\n\t\t\t\t\tmessage : html ,\n\t\t\t\t\tbaseZ : options.zIndex ? options.zIndex : 1000 ,\n\t\t\t\t\tcss : {\n\t\t\t\t\t\tborder : '0' ,\n\t\t\t\t\t\tpadding : '0' ,\n\t\t\t\t\t\tbackgroundColor : 'none'\n\t\t\t\t\t} ,\n\t\t\t\t\toverlayCSS : {\n\t\t\t\t\t\tbackgroundColor : options.overlayColor ? options.overlayColor : '#555' ,\n\t\t\t\t\t\topacity : options.boxed ? 0.05 : 0.1 ,\n\t\t\t\t\t\tcursor : 'wait'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t} ,\n\n\t\t// wrApper function to  un-block element(finish loading)\n\t\tunblockUI : function (target) {\n\t\t\tif ( target ) {\n\t\t\t\t$(target).unblock({\n\t\t\t\t\tonUnblock : function () {\n\t\t\t\t\t\t$(target).css('position' , '');\n\t\t\t\t\t\t$(target).css('zoom' , '');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t$.unblockUI();\n\t\t\t}\n\t\t} ,\n\n\t\tstartPageLoading : function (options) {\n\t\t\tif ( options && options.animate ) {\n\t\t\t\t$('.page-spinner-bar').remove();\n\t\t\t\t$('body').append('<div class=\"page-spinner-bar\"><div class=\"bounce1\"></div><div class=\"bounce2\"></div><div class=\"bounce3\"></div></div>');\n\t\t\t} else {\n\t\t\t\t$('.page-loading').remove();\n\t\t\t\t$('body').append('<div class=\"page-loading\"><img src=\"' + this.getGlobalImgPath() + 'loading-spinner-grey.gif\"/>&nbsp;&nbsp;<span>' + (options && options.message ? options.message : 'Loading...') + '</span></div>');\n\t\t\t}\n\t\t} ,\n\n\t\tstopPageLoading : function () {\n\t\t\t$('.page-loading, .page-spinner-bar').remove();\n\t\t} ,\n\n\t\talert : function (options) {\n\n\t\t\toptions = $.extend(true , {\n\t\t\t\tcontainer : \"\" , // alerts parent container(by default placed after the page breadcrumbs)\n\t\t\t\tplace : \"append\" , // \"append\" or \"prepend\" in container\n\t\t\t\ttype : 'success' , // alert's type\n\t\t\t\tmessage : \"\" , // alert's message\n\t\t\t\tclose : true , // make alert closable\n\t\t\t\treset : true , // close all previouse alerts first\n\t\t\t\tfocus : true , // auto scroll to the alert after shown\n\t\t\t\tcloseInSeconds : 0 , // auto close after defined seconds\n\t\t\t\ticon : \"\" // put icon before the message\n\t\t\t} , options);\n\n\t\t\tvar id = App.getUniqueID(\"App_alert\");\n\n\t\t\tvar html = '<div id=\"' + id + '\" class=\"custom-alerts alert alert-' + options.type + ' fade in\">' + (options.close ? '<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\"></button>' : '') + (options.icon !== \"\" ? '<i class=\"fa-lg fa fa-' + options.icon + '\"></i>  ' : '') + options.message + '</div>';\n\n\t\t\tif ( options.reset ) {\n\t\t\t\t$('.custom-alerts').remove();\n\t\t\t}\n\n\t\t\tif ( ! options.container ) {\n\t\t\t\tif ( $('.page-fixed-main-content').length === 1 ) {\n\t\t\t\t\t$('.page-fixed-main-content').prepend(html);\n\t\t\t\t} else if ( ($('body').hasClass(\"page-container-bg-solid\") || $('body').hasClass(\"page-content-white\")) && $('.page-head').length === 0 ) {\n\t\t\t\t\t$('.page-title').after(html);\n\t\t\t\t} else {\n\t\t\t\t\tif ( $('.page-bar').length > 0 ) {\n\t\t\t\t\t\t$('.page-bar').after(html);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$('.page-breadcrumb, .breadcrumbs').after(html);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( options.place == \"append\" ) {\n\t\t\t\t\t$(options.container).append(html);\n\t\t\t\t} else {\n\t\t\t\t\t$(options.container).prepend(html);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( options.focus ) {\n\t\t\t\tApp.scrollTo($('#' + id));\n\t\t\t}\n\n\t\t\tif ( options.closeInSeconds > 0 ) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t$('#' + id).remove();\n\t\t\t\t} , options.closeInSeconds * 1000);\n\t\t\t}\n\n\t\t\treturn id;\n\t\t} ,\n\n\t\t//public function to initialize the fancybox plugin\n\t\tinitFancybox : function () {\n\t\t\thandleFancybox();\n\t\t} ,\n\n\t\t//public helper function to get actual input value(used in IE9 and IE8 due to placeholder attribute not supported)\n\t\tgetActualVal : function (el) {\n\t\t\tel = $(el);\n\t\t\tif ( el.val() === el.attr(\"placeholder\") ) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\treturn el.val();\n\t\t} ,\n\n\t\t//public function to get a paremeter by name from URL\n\t\tgetURLParameter : function (paramName) {\n\t\t\tvar searchString = window.location.search.substring(1) ,\n\t\t\t\ti , val , params = searchString.split(\"&\");\n\n\t\t\tfor ( i = 0 ; i < params.length ; i ++ ) {\n\t\t\t\tval = params[i].split(\"=\");\n\t\t\t\tif ( val[0] == paramName ) {\n\t\t\t\t\treturn unescape(val[1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t} ,\n\n\t\t// check for device touch support\n\t\tisTouchDevice : function () {\n\t\t\ttry {\n\t\t\t\tdocument.createEvent(\"TouchEvent\");\n\t\t\t\treturn true;\n\t\t\t} catch ( e ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} ,\n\n\t\t// To get the correct viewport width based on\n\t\t// http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/\n\t\tgetViewPort : function () {\n\t\t\tvar e = window ,\n\t\t\t\ta = 'inner';\n\t\t\tif ( ! ('innerWidth' in window) ) {\n\t\t\t\ta = 'client';\n\t\t\t\te = document.documentElement || document.body;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\twidth : e[a + 'Width'] ,\n\t\t\t\theight : e[a + 'Height']\n\t\t\t};\n\t\t} ,\n\n\t\tgetUniqueID : function (prefix) {\n\t\t\treturn 'prefix_' + Math.floor(Math.random() * (new Date()).getTime());\n\t\t} ,\n\n\t\t// check IE8 mode\n\t\tisIE8 : function () {\n\t\t\treturn isIE8;\n\t\t} ,\n\n\t\t// check IE9 mode\n\t\tisIE9 : function () {\n\t\t\treturn isIE9;\n\t\t} ,\n\n\t\t//check RTL mode\n\t\tisRTL : function () {\n\t\t\treturn isRTL;\n\t\t} ,\n\n\t\t// check IE8 mode\n\t\tisAngularJsApp : function () {\n\t\t\treturn (typeof angular == 'undefined') ? false : true;\n\t\t} ,\n\n\t\tgetAssetsPath : function () {\n\t\t\treturn assetsPath;\n\t\t} ,\n\n\t\tsetAssetsPath : function (path) {\n\t\t\tassetsPath = path;\n\t\t} ,\n\n\t\tsetGlobalImgPath : function (path) {\n\t\t\tglobalImgPath = path;\n\t\t} ,\n\n\t\tgetGlobalImgPath : function () {\n\t\t\treturn assetsPath + globalImgPath;\n\t\t} ,\n\n\t\tsetGlobalPluginsPath : function (path) {\n\t\t\tglobalPluginsPath = path;\n\t\t} ,\n\n\t\tgetGlobalPluginsPath : function () {\n\t\t\treturn assetsPath + globalPluginsPath;\n\t\t} ,\n\n\t\tgetGlobalCssPath : function () {\n\t\t\treturn assetsPath + globalCssPath;\n\t\t} ,\n\n\t\t// get layout color code by color name\n\t\tgetBrandColor : function (name) {\n\t\t\tif ( brandColors[name] ) {\n\t\t\t\treturn brandColors[name];\n\t\t\t} else {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t} ,\n\n\t\tgetResponsiveBreakpoint : function (size) {\n\t\t\t// bootstrap responsive breakpoints\n\t\t\tvar sizes = {\n\t\t\t\t'xs' : 480 ,     // extra small\n\t\t\t\t'sm' : 768 ,     // small\n\t\t\t\t'md' : 992 ,     // medium\n\t\t\t\t'lg' : 1200     // large\n\t\t\t};\n\n\t\t\treturn sizes[size] ? sizes[size] : 0;\n\t\t}\n\t};\n\n}();\n\njQuery(document).ready(function () {\n\tApp.init(); // init metronic core componets\n});"
  },
  {
    "path": "resources/assets/static/js/global/auth.js",
    "content": "/**\n * Auth 页面 JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 2016-09-11\n */\n\nvar Auth = {\n\tinitLogin : function () {\n\t\tloading.initAjax();\n\n\t\t//背景幻灯片\n\t\t$.backstretch( Param.bg , {\n\t\t\t\tfade : 1000 ,\n\t\t\t\tduration : 8000\n\t\t\t}\n\t\t);\n\t\tvar $loginBtn = $('#loginBtn');\n\t\t$loginBtn.prop('disabled' , false);\n\n\t\tvar $loginForm = $('.login-form');\n\t\t$loginForm.reloadForm(Param.defaultData);\n\n\t\tvar $forgetForm = $('.forget-form');\n\n\t\t$loginForm.on('submit' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar loginData = $(this).serializeObject();\n\t\t\t//检查用户信息\n\t\t\tif ( $.trim(loginData.userInfo) == '' ) {\n\t\t\t\ttips.error('请填写用户名或手机号');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t//检查密码\n\t\t\tif ( $.trim(loginData.password) == '' ) {\n\t\t\t\ttips.error('请填写密码');\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t$loginBtn.prop('disabled' , true); //禁用登录按钮\n\n\t\t\t// Send the data using post\n\t\t\t$.post(Param.uri.doLogin , loginData)\n\t\t\t .fail(function (error) {\n\t\t\t\t //ajax出现错误\n\t\t\t\t $loginBtn.prop('disabled' , false);\n\t\t\t\t tips.error('发送错误了');\n\t\t\t\t console.log(error);\n\t\t\t })\n\t\t\t .done(function (res) {\n\t\t\t\t //ajax返回\n\t\t\t\t if ( res.code === 0 ) {\n\t\t\t\t\t //返回成功\n\t\t\t\t\t tips.success(res.msg , function () {\n\t\t\t\t\t\t window.location.href = Param.uri.redirect;\n\t\t\t\t\t });\n\n\t\t\t\t\t return true;\n\t\t\t\t }\n\t\t\t\t $loginBtn.prop('disabled' , false);\n\t\t\t\t tips.error(res.msg);\n\t\t\t });\n\t\t});\n\n\t\t//点击忘记密码\n\t\t$('#forget-password').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\t$loginForm.hide();\n\t\t\t$forgetForm.show();\n\t\t});\n\n\t\t//返回登录页面\n\t\t$('#back-btn').on('click' , function(e){\n\t\t\te.preventDefault();\n\t\t\t$loginForm.show();\n\t\t\t$forgetForm.hide();\n\t\t});\n\n\t\t$forgetForm.on('submit' , function(e){\n\t\t\te.preventDefault();\n\n\t\t\ttips.success('邮件已经发送,请根据提示进行下一步操作' , function () {\n\t\t\t\t$loginForm.show();\n\t\t\t\t$forgetForm.hide();\n\t\t\t});\n\t\t});\n\n\t}\n\n};"
  },
  {
    "path": "resources/assets/static/js/global/layout.js",
    "content": "/**\n Core script to handle the entire theme and core functions\n **/\nvar Layout = function () {\n\n\tvar layoutImgPath = 'layouts/layout/img/';\n\n\tvar layoutCssPath = 'layouts/layout/css/';\n\n\tvar resBreakpointMd = App.getResponsiveBreakpoint('md');\n\n\t//* BEGIN:CORE HANDLERS *//\n\t// this function handles responsive layout on screen size resize or mobile device rotate.\n\n\t// Set proper height for sidebar and content. The content and sidebar height must be synced always.\n\tvar handleSidebarAndContentHeight = function () {\n\t\tvar content = $('.page-content');\n\t\tvar sidebar = $('.page-sidebar');\n\t\tvar body = $('body');\n\t\tvar height;\n\n\t\tif ( body.hasClass(\"page-footer-fixed\") === true && body.hasClass(\"page-sidebar-fixed\") === false ) {\n\t\t\tvar available_height = App.getViewPort().height - $('.page-footer').outerHeight() - $('.page-header').outerHeight();\n\t\t\tif ( content.height() < available_height ) {\n\t\t\t\tcontent.attr('style' , 'min-height:' + available_height + 'px');\n\t\t\t}\n\t\t} else {\n\t\t\tif ( body.hasClass('page-sidebar-fixed') ) {\n\t\t\t\theight = _calculateFixedSidebarViewportHeight();\n\t\t\t\tif ( body.hasClass('page-footer-fixed') === false ) {\n\t\t\t\t\theight = height - $('.page-footer').outerHeight();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar headerHeight = $('.page-header').outerHeight();\n\t\t\t\tvar footerHeight = $('.page-footer').outerHeight();\n\n\t\t\t\tif ( App.getViewPort().width < resBreakpointMd ) {\n\t\t\t\t\theight = App.getViewPort().height - headerHeight - footerHeight;\n\t\t\t\t} else {\n\t\t\t\t\theight = sidebar.height() + 20;\n\t\t\t\t}\n\n\t\t\t\tif ( (height + headerHeight + footerHeight) <= App.getViewPort().height ) {\n\t\t\t\t\theight = App.getViewPort().height - headerHeight - footerHeight;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontent.attr('style' , 'min-height:' + height + 'px');\n\t\t}\n\t};\n\n\t// Handle sidebar menu links\n\tvar handleSidebarMenuActiveLink = function (mode , el) {\n\t\tvar url = location.hash.toLowerCase();\n\n\t\tvar menu = $('.page-sidebar-menu');\n\n\t\tif ( mode === 'click' || mode === 'set' ) {\n\t\t\tel = $(el);\n\t\t} else if ( mode === 'match' ) {\n\t\t\tmenu.find(\"li > a\").each(function () {\n\t\t\t\tvar path = $(this).attr(\"href\").toLowerCase();\n\t\t\t\t// url match condition\n\t\t\t\tif ( path.length > 1 && url.substr(1 , path.length - 1) == path.substr(1) ) {\n\t\t\t\t\tel = $(this);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif ( ! el || el.length == 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( el.attr('href').toLowerCase() === 'javascript:;' || el.attr('href').toLowerCase() === '#' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar slideSpeed = parseInt(menu.data(\"slide-speed\"));\n\t\tvar keepExpand = menu.data(\"keep-expanded\");\n\n\t\t// begin: handle active state\n\t\tif ( menu.hasClass('page-sidebar-menu-hover-submenu') === false ) {\n\t\t\tmenu.find('li.nav-item.open').each(function () {\n\t\t\t\tvar match = false;\n\t\t\t\t$(this).find('li').each(function () {\n\t\t\t\t\tif ( $(this).find(' > a').attr('href') === el.attr('href') ) {\n\t\t\t\t\t\tmatch = true;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif ( match === true ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t$(this).removeClass('open');\n\t\t\t\t$(this).find('> a > .arrow.open').removeClass('open');\n\t\t\t\t$(this).find('> .sub-menu').slideUp();\n\t\t\t});\n\t\t} else {\n\t\t\tmenu.find('li.open').removeClass('open');\n\t\t}\n\n\t\tmenu.find('li.active').removeClass('active');\n\t\tmenu.find('li > a > .selected').remove();\n\t\t// end: handle active state\n\n\t\tel.parents('li').each(function () {\n\t\t\t$(this).addClass('active');\n\t\t\t$(this).find('> a > span.arrow').addClass('open');\n\n\t\t\tif ( $(this).parent('ul.page-sidebar-menu').length === 1 ) {\n\t\t\t\t$(this).find('> a').append('<span class=\"selected\"></span>');\n\t\t\t}\n\n\t\t\tif ( $(this).children('ul.sub-menu').length === 1 ) {\n\t\t\t\t$(this).addClass('open');\n\t\t\t}\n\t\t});\n\n\t\tif ( mode === 'click' ) {\n\t\t\tif ( App.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass(\"in\") ) { // close the menu on mobile view while laoding a page\n\t\t\t\t$('.page-header .responsive-toggler').click();\n\t\t\t}\n\t\t}\n\t};\n\n\t// Handle sidebar menu\n\tvar handleSidebarMenu = function () {\n\t\t// handle sidebar link click\n\t\t$('.page-sidebar-menu').on('click' , 'li > a.nav-toggle, li > a > span.nav-toggle' , function (e) {\n\t\t\tvar that = $(this).closest('.nav-item').children('.nav-link');\n\n\t\t\tif ( App.getViewPort().width >= resBreakpointMd && ! $('.page-sidebar-menu').attr(\"data-initialized\") && $('body').hasClass('page-sidebar-closed') && that.parent('li').parent('.page-sidebar-menu').length === 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar hasSubMenu = that.next().hasClass('sub-menu');\n\n\t\t\tif ( App.getViewPort().width >= resBreakpointMd && that.parents('.page-sidebar-menu-hover-submenu').length === 1 ) { // exit of hover sidebar menu\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hasSubMenu === false ) {\n\t\t\t\tif ( App.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass(\"in\") ) { // close the menu on mobile view while laoding a page\n\t\t\t\t\t$('.page-header .responsive-toggler').click();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar parent = that.parent().parent();\n\t\t\tvar the = that;\n\t\t\tvar menu = $('.page-sidebar-menu');\n\t\t\tvar sub = that.next();\n\n\t\t\tvar autoScroll = menu.data(\"auto-scroll\");\n\t\t\tvar slideSpeed = parseInt(menu.data(\"slide-speed\"));\n\t\t\tvar keepExpand = menu.data(\"keep-expanded\");\n\n\t\t\tif ( ! keepExpand ) {\n\t\t\t\tparent.children('li.open').children('a').children('.arrow').removeClass('open');\n\t\t\t\tparent.children('li.open').children('.sub-menu:not(.always-open)').slideUp(slideSpeed);\n\t\t\t\tparent.children('li.open').removeClass('open');\n\t\t\t}\n\n\t\t\tvar slideOffeset = - 200;\n\n\t\t\tif ( sub.is(\":visible\") ) {\n\t\t\t\t$('.arrow' , the).removeClass(\"open\");\n\t\t\t\tthe.parent().removeClass(\"open\");\n\t\t\t\tsub.slideUp(slideSpeed , function () {\n\t\t\t\t\tif ( autoScroll === true && $('body').hasClass('page-sidebar-closed') === false ) {\n\t\t\t\t\t\tif ( $('body').hasClass('page-sidebar-fixed') ) {\n\t\t\t\t\t\t\tmenu.slimScroll({\n\t\t\t\t\t\t\t\t'scrollTo' : (the.position()).top\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tApp.scrollTo(the , slideOffeset);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\thandleSidebarAndContentHeight();\n\t\t\t\t});\n\t\t\t} else if ( hasSubMenu ) {\n\t\t\t\t$('.arrow' , the).addClass(\"open\");\n\t\t\t\tthe.parent().addClass(\"open\");\n\t\t\t\tsub.slideDown(slideSpeed , function () {\n\t\t\t\t\tif ( autoScroll === true && $('body').hasClass('page-sidebar-closed') === false ) {\n\t\t\t\t\t\tif ( $('body').hasClass('page-sidebar-fixed') ) {\n\t\t\t\t\t\t\tmenu.slimScroll({\n\t\t\t\t\t\t\t\t'scrollTo' : (the.position()).top\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tApp.scrollTo(the , slideOffeset);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\thandleSidebarAndContentHeight();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t});\n\n\t\t// handle menu close for angularjs version\n\t\tif ( App.isAngularJsApp() ) {\n\t\t\t$(\".page-sidebar-menu li > a\").on(\"click\" , function (e) {\n\t\t\t\tif ( App.getViewPort().width < resBreakpointMd && $(this).next().hasClass('sub-menu') === false ) {\n\t\t\t\t\t$('.page-header .responsive-toggler').click();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// handle ajax links within sidebar menu\n\t\t$('.page-sidebar').on('click' , ' li > a.ajaxify' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tApp.scrollTop();\n\n\t\t\tvar url = $(this).attr(\"href\");\n\t\t\tvar menuContainer = $('.page-sidebar ul');\n\t\t\tvar pageContent = $('.page-content');\n\t\t\tvar pageContentBody = $('.page-content .page-content-body');\n\n\t\t\tmenuContainer.children('li.active').removeClass('active');\n\t\t\tmenuContainer.children('arrow.open').removeClass('open');\n\n\t\t\t$(this).parents('li').each(function () {\n\t\t\t\t$(this).addClass('active');\n\t\t\t\t$(this).children('a > span.arrow').addClass('open');\n\t\t\t});\n\t\t\t$(this).parents('li').addClass('active');\n\n\t\t\tif ( App.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass(\"in\") ) { // close the menu on mobile view while laoding a page\n\t\t\t\t$('.page-header .responsive-toggler').click();\n\t\t\t}\n\n\t\t\tApp.startPageLoading();\n\n\t\t\tvar the = $(this);\n\n\t\t\t$.ajax({\n\t\t\t\ttype : \"GET\" ,\n\t\t\t\tcache : false ,\n\t\t\t\turl : url ,\n\t\t\t\tdataType : \"html\" ,\n\t\t\t\tsuccess : function (res) {\n\t\t\t\t\tif ( the.parents('li.open').length === 0 ) {\n\t\t\t\t\t\t$('.page-sidebar-menu > li.open > a').click();\n\t\t\t\t\t}\n\n\t\t\t\t\tApp.stopPageLoading();\n\t\t\t\t\tpageContentBody.html(res);\n\t\t\t\t\tLayout.fixContentHeight(); // fix content height\n\t\t\t\t\tApp.initAjax(); // initialize core stuff\n\t\t\t\t} ,\n\t\t\t\terror : function (xhr , ajaxOptions , thrownError) {\n\t\t\t\t\tApp.stopPageLoading();\n\t\t\t\t\tpageContentBody.html('<h4>Could not load the requested content.</h4>');\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// handle ajax link within main content\n\t\t$('.page-content').on('click' , '.ajaxify' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tApp.scrollTop();\n\n\t\t\tvar url = $(this).attr(\"href\");\n\t\t\tvar pageContent = $('.page-content');\n\t\t\tvar pageContentBody = $('.page-content .page-content-body');\n\n\t\t\tApp.startPageLoading();\n\n\t\t\tif ( App.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass(\"in\") ) { // close the menu on mobile view while laoding a page\n\t\t\t\t$('.page-header .responsive-toggler').click();\n\t\t\t}\n\n\t\t\t$.ajax({\n\t\t\t\ttype : \"GET\" ,\n\t\t\t\tcache : false ,\n\t\t\t\turl : url ,\n\t\t\t\tdataType : \"html\" ,\n\t\t\t\tsuccess : function (res) {\n\t\t\t\t\tApp.stopPageLoading();\n\t\t\t\t\tpageContentBody.html(res);\n\t\t\t\t\tLayout.fixContentHeight(); // fix content height\n\t\t\t\t\tApp.initAjax(); // initialize core stuff\n\t\t\t\t} ,\n\t\t\t\terror : function (xhr , ajaxOptions , thrownError) {\n\t\t\t\t\tpageContentBody.html('<h4>Could not load the requested content.</h4>');\n\t\t\t\t\tApp.stopPageLoading();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// handle scrolling to top on responsive menu toggler click when header is fixed for mobile view\n\t\t$(document).on('click' , '.page-header-fixed-mobile .page-header .responsive-toggler' , function () {\n\t\t\tApp.scrollTop();\n\t\t});\n\n\t\t// handle sidebar hover effect\n\t\thandleFixedSidebarHoverEffect();\n\n\t\t// handle the search bar close\n\t\t$('.page-sidebar').on('click' , '.sidebar-search .remove' , function (e) {\n\t\t\te.preventDefault();\n\t\t\t$('.sidebar-search').removeClass(\"open\");\n\t\t});\n\n\t\t// handle the search query submit on enter press\n\t\t$('.page-sidebar .sidebar-search').on('keypress' , 'input.form-control' , function (e) {\n\t\t\tif ( e.which == 13 ) {\n\t\t\t\t$('.sidebar-search').submit();\n\t\t\t\treturn false; //<---- Add this line\n\t\t\t}\n\t\t});\n\n\t\t// handle the search submit(for sidebar search and responsive mode of the header search)\n\t\t$('.sidebar-search .submit').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tif ( $('body').hasClass(\"page-sidebar-closed\") ) {\n\t\t\t\tif ( $('.sidebar-search').hasClass('open') === false ) {\n\t\t\t\t\tif ( $('.page-sidebar-fixed').length === 1 ) {\n\t\t\t\t\t\t$('.page-sidebar .sidebar-toggler').click(); //trigger sidebar toggle button\n\t\t\t\t\t}\n\t\t\t\t\t$('.sidebar-search').addClass(\"open\");\n\t\t\t\t} else {\n\t\t\t\t\t$('.sidebar-search').submit();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$('.sidebar-search').submit();\n\t\t\t}\n\t\t});\n\n\t\t// handle close on body click\n\t\tif ( $('.sidebar-search').length !== 0 ) {\n\t\t\t$('.sidebar-search .input-group').on('click' , function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\t$('body').on('click' , function () {\n\t\t\t\tif ( $('.sidebar-search').hasClass('open') ) {\n\t\t\t\t\t$('.sidebar-search').removeClass(\"open\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t// Helper function to calculate sidebar height for fixed sidebar layout.\n\tvar _calculateFixedSidebarViewportHeight = function () {\n\t\tvar sidebarHeight = App.getViewPort().height - $('.page-header').outerHeight(true);\n\t\tif ( $('body').hasClass(\"page-footer-fixed\") ) {\n\t\t\tsidebarHeight = sidebarHeight - $('.page-footer').outerHeight();\n\t\t}\n\n\t\treturn sidebarHeight;\n\t};\n\n\t// Handles fixed sidebar\n\tvar handleFixedSidebar = function () {\n\t\tvar menu = $('.page-sidebar-menu');\n\n\t\tApp.destroySlimScroll(menu);\n\n\t\tif ( $('.page-sidebar-fixed').length === 0 ) {\n\t\t\thandleSidebarAndContentHeight();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( App.getViewPort().width >= resBreakpointMd ) {\n\t\t\tmenu.attr(\"data-height\" , _calculateFixedSidebarViewportHeight());\n\t\t\tApp.initSlimScroll(menu);\n\t\t\thandleSidebarAndContentHeight();\n\t\t}\n\t};\n\n\t// Handles sidebar toggler to close/hide the sidebar.\n\tvar handleFixedSidebarHoverEffect = function () {\n\t\tvar body = $('body');\n\t\tif ( body.hasClass('page-sidebar-fixed') ) {\n\t\t\t$('.page-sidebar').on('mouseenter' , function () {\n\t\t\t\tif ( body.hasClass('page-sidebar-closed') ) {\n\t\t\t\t\t$(this).find('.page-sidebar-menu').removeClass('page-sidebar-menu-closed');\n\t\t\t\t}\n\t\t\t}).on('mouseleave' , function () {\n\t\t\t\tif ( body.hasClass('page-sidebar-closed') ) {\n\t\t\t\t\t$(this).find('.page-sidebar-menu').addClass('page-sidebar-menu-closed');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t// Hanles sidebar toggler\n\tvar handleSidebarToggler = function () {\n\t\tvar body = $('body');\n\t\tif ( $.cookie && $.cookie('sidebar_closed') === '1' && App.getViewPort().width >= resBreakpointMd ) {\n\t\t\t$('body').addClass('page-sidebar-closed');\n\t\t\t$('.page-sidebar-menu').addClass('page-sidebar-menu-closed');\n\t\t}\n\n\t\t// handle sidebar show/hide\n\t\t$('body').on('click' , '.sidebar-toggler' , function (e) {\n\t\t\tvar sidebar = $('.page-sidebar');\n\t\t\tvar sidebarMenu = $('.page-sidebar-menu');\n\t\t\t$(\".sidebar-search\" , sidebar).removeClass(\"open\");\n\n\t\t\tif ( body.hasClass(\"page-sidebar-closed\") ) {\n\t\t\t\tbody.removeClass(\"page-sidebar-closed\");\n\t\t\t\tsidebarMenu.removeClass(\"page-sidebar-menu-closed\");\n\t\t\t\tif ( $.cookie ) {\n\t\t\t\t\t$.cookie('sidebar_closed' , '0');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbody.addClass(\"page-sidebar-closed\");\n\t\t\t\tsidebarMenu.addClass(\"page-sidebar-menu-closed\");\n\t\t\t\tif ( body.hasClass(\"page-sidebar-fixed\") ) {\n\t\t\t\t\tsidebarMenu.trigger(\"mouseleave\");\n\t\t\t\t}\n\t\t\t\tif ( $.cookie ) {\n\t\t\t\t\t$.cookie('sidebar_closed' , '1');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$(window).trigger('resize');\n\t\t});\n\t};\n\n\t// Handles the horizontal menu\n\tvar handleHorizontalMenu = function () {\n\t\t//handle tab click\n\t\t$('.page-header').on('click' , '.hor-menu a[data-toggle=\"tab\"]' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar nav = $(\".hor-menu .nav\");\n\t\t\tvar active_link = nav.find('li.current');\n\t\t\t$('li.active' , active_link).removeClass(\"active\");\n\t\t\t$('.selected' , active_link).remove();\n\t\t\tvar new_link = $(this).parents('li').last();\n\t\t\tnew_link.addClass(\"current\");\n\t\t\tnew_link.find(\"a:first\").append('<span class=\"selected\"></span>');\n\t\t});\n\n\t\t// handle search box expand/collapse\n\t\t$('.page-header').on('click' , '.search-form' , function (e) {\n\t\t\t$(this).addClass(\"open\");\n\t\t\t$(this).find('.form-control').focus();\n\n\t\t\t$('.page-header .search-form .form-control').on('blur' , function (e) {\n\t\t\t\t$(this).closest('.search-form').removeClass(\"open\");\n\t\t\t\t$(this).unbind(\"blur\");\n\t\t\t});\n\t\t});\n\n\t\t// handle hor menu search form on enter press\n\t\t$('.page-header').on('keypress' , '.hor-menu .search-form .form-control' , function (e) {\n\t\t\tif ( e.which == 13 ) {\n\t\t\t\t$(this).closest('.search-form').submit();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\t// handle header search button click\n\t\t$('.page-header').on('mousedown' , '.search-form.open .submit' , function (e) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\t$(this).closest('.search-form').submit();\n\t\t});\n\n\t\t// handle hover dropdown menu for desktop devices only\n\t\t$('[data-hover=\"megamenu-dropdown\"]').not('.hover-initialized').each(function () {\n\t\t\t$(this).dropdownHover();\n\t\t\t$(this).addClass('hover-initialized');\n\t\t});\n\n\t\t$(document).on('click' , '.mega-menu-dropdown .dropdown-menu' , function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\t};\n\n\t// Handles Bootstrap Tabs.\n\tvar handleTabs = function () {\n\t\t// fix content height on tab click\n\t\t$('body').on('shown.bs.tab' , 'a[data-toggle=\"tab\"]' , function () {\n\t\t\thandleSidebarAndContentHeight();\n\t\t});\n\t};\n\n\t// Handles the go to top button at the footer\n\tvar handleGoTop = function () {\n\t\tvar offset = 300;\n\t\tvar duration = 500;\n\n\t\tif ( navigator.userAgent.match(/iPhone|iPad|iPod/i) ) {  // ios supported\n\t\t\t$(window).bind(\"touchend touchcancel touchleave\" , function (e) {\n\t\t\t\tif ( $(this).scrollTop() > offset ) {\n\t\t\t\t\t$('.scroll-to-top').fadeIn(duration);\n\t\t\t\t} else {\n\t\t\t\t\t$('.scroll-to-top').fadeOut(duration);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {  // general\n\t\t\t$(window).scroll(function () {\n\t\t\t\tif ( $(this).scrollTop() > offset ) {\n\t\t\t\t\t$('.scroll-to-top').fadeIn(duration);\n\t\t\t\t} else {\n\t\t\t\t\t$('.scroll-to-top').fadeOut(duration);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t$('.scroll-to-top').click(function (e) {\n\t\t\te.preventDefault();\n\t\t\t$('html, body').animate({scrollTop : 0} , duration);\n\t\t\treturn false;\n\t\t});\n\t};\n\n\t// Hanlde 100% height elements(block, portlet, etc)\n\tvar handle100HeightContent = function () {\n\n\t\t$('.full-height-content').each(function () {\n\t\t\tvar target = $(this);\n\t\t\tvar height;\n\n\t\t\theight = App.getViewPort().height -\n\t\t\t         $('.page-header').outerHeight(true) -\n\t\t\t         $('.page-footer').outerHeight(true) -\n\t\t\t         $('.page-title').outerHeight(true) -\n\t\t\t         $('.page-bar').outerHeight(true);\n\n\t\t\tif ( target.hasClass('portlet') ) {\n\t\t\t\tvar portletBody = target.find('.portlet-body');\n\n\t\t\t\tApp.destroySlimScroll(portletBody.find('.full-height-content-body')); // destroy slimscroll\n\n\t\t\t\theight = height -\n\t\t\t\t         target.find('.portlet-title').outerHeight(true) -\n\t\t\t\t         parseInt(target.find('.portlet-body').css('padding-top')) -\n\t\t\t\t         parseInt(target.find('.portlet-body').css('padding-bottom')) - 5;\n\n\t\t\t\tif ( App.getViewPort().width >= resBreakpointMd && target.hasClass(\"full-height-content-scrollable\") ) {\n\t\t\t\t\theight = height - 35;\n\t\t\t\t\tportletBody.find('.full-height-content-body').css('height' , height);\n\t\t\t\t\tApp.initSlimScroll(portletBody.find('.full-height-content-body'));\n\t\t\t\t} else {\n\t\t\t\t\tportletBody.css('min-height' , height);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tApp.destroySlimScroll(target.find('.full-height-content-body')); // destroy slimscroll\n\n\t\t\t\tif ( App.getViewPort().width >= resBreakpointMd && target.hasClass(\"full-height-content-scrollable\") ) {\n\t\t\t\t\theight = height - 35;\n\t\t\t\t\ttarget.find('.full-height-content-body').css('height' , height);\n\t\t\t\t\tApp.initSlimScroll(target.find('.full-height-content-body'));\n\t\t\t\t} else {\n\t\t\t\t\ttarget.css('min-height' , height);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\t//* END:CORE HANDLERS *//\n\n\treturn {\n\t\t// Main init methods to initialize the layout\n\t\t//IMPORTANT!!!: Do not modify the core handlers call order.\n\n\t\tinitHeader : function () {\n\t\t\thandleHorizontalMenu(); // handles horizontal menu\n\t\t} ,\n\n\t\tsetSidebarMenuActiveLink : function (mode , el) {\n\t\t\thandleSidebarMenuActiveLink(mode , el);\n\t\t} ,\n\n\t\tinitSidebar : function () {\n\t\t\t//layout handlers\n\t\t\thandleFixedSidebar(); // handles fixed sidebar menu\n\t\t\thandleSidebarMenu(); // handles main menu\n\t\t\thandleSidebarToggler(); // handles sidebar hide/show\n\n\t\t\tif ( App.isAngularJsApp() ) {\n\t\t\t\thandleSidebarMenuActiveLink('match'); // init sidebar active links\n\t\t\t}\n\n\t\t\tApp.addResizeHandler(handleFixedSidebar); // reinitialize fixed sidebar on window resize\n\t\t} ,\n\n\t\tinitContent : function () {\n\t\t\thandle100HeightContent(); // handles 100% height elements(block, portlet, etc)\n\t\t\thandleTabs(); // handle bootstrah tabs\n\n\t\t\tApp.addResizeHandler(handleSidebarAndContentHeight); // recalculate sidebar & content height on window resize\n\t\t\tApp.addResizeHandler(handle100HeightContent); // reinitialize content height on window resize\n\t\t} ,\n\n\t\tinitFooter : function () {\n\t\t\thandleGoTop(); //handles scroll to top functionality in the footer\n\t\t} ,\n\n\t\tinit : function () {\n\t\t\tthis.initHeader();\n\t\t\tthis.initSidebar();\n\t\t\tthis.initContent();\n\t\t\tthis.initFooter();\n\t\t} ,\n\n\t\t//public function to fix the sidebar and content height accordingly\n\t\tfixContentHeight : function () {\n\t\t\thandleSidebarAndContentHeight();\n\t\t} ,\n\n\t\tinitFixedSidebarHoverEffect : function () {\n\t\t\thandleFixedSidebarHoverEffect();\n\t\t} ,\n\n\t\tinitFixedSidebar : function () {\n\t\t\thandleFixedSidebar();\n\t\t} ,\n\n\t\tgetLayoutImgPath : function () {\n\t\t\treturn App.getAssetsPath() + layoutImgPath;\n\t\t} ,\n\n\t\tgetLayoutCssPath : function () {\n\t\t\treturn App.getAssetsPath() + layoutCssPath;\n\t\t}\n\t};\n\n}();\n\nif ( App.isAngularJsApp() === false ) {\n\tjQuery(document).ready(function () {\n\t\tLayout.init(); // init metronic core componets\n\t});\n}"
  },
  {
    "path": "resources/assets/static/js/index/Articles.js",
    "content": "var Articles = {\n  config : {\n    maxCommentLength : 250 ,\n    curCommentLength : 0 ,\n    tipTemplate : '可写 {len} 个字' ,\n    commentItemTemp : '<li class=\"comment-item\"><div class=\"user-info\">' +\n                      '<a href=\"/user/{authorId}\">{author}</a> @ <small class=\"text-muted\">{timestamp}</small></div>' +\n                      '<div class=\"content\">{content}</div>' +\n                      '<p class=\"text-right\">' +\n                      '{replyBtn}' +\n                      '{reply}</li>' ,\n    commentReplyBtnTemp : '<button class=\"btn btn-link replyBtn\" data-id=\"{articleId}\">回复</button></p>' ,\n    commentItemReplyTemp : '<div class=\"reply\"><blockquote>{replyContent}<footer>{timestamp}</footer></blockquote></div>' ,\n    curComment : ''\n  } ,\n  init : function () {\n    this.initImg();\n    this.initLikes();\n    this.initComments();\n    this.initSendComment();\n    this.initMenu();\n  } ,\n\n  //初始化图片\n  initImg : function () {\n    $( '.article-content img' ).addClass( 'img-responsive' );\n  } ,\n\n  initLikes : function () {\n    var $likeBtn = $( '#likeBtn' );\n    $likeBtn.on( 'click' , function ( e ) {\n      e.preventDefault();\n\n      $.post( Param.uri.likes )\n       .fail( function ( res ) {\n         tips.error( res.responseText );\n       } )\n       .done( function ( res ) {\n         if ( res.code != 0 ) {\n           tips.error( res.msg );\n           return false;\n         }\n\n         tips.success( res.msg );\n         var $likesCount = $( '#likesCount' );\n         var count = parseInt( $likesCount.html() ) + 1;\n         $likesCount.html( count );\n         $likeBtn.animateCss( 'bounceIn' );\n       } );\n    } );\n  } ,\n\n  //初始化评论列表\n  initComments : function () {\n    var self = this;\n    var data = {};\n\n    $.get( Param.uri.comments , data )\n     .fail( function ( res ) {\n       tips.error( res.responseText );\n     } )\n     .done( function ( res ) {\n       if ( res.code != 0 ) {\n         tips.error( res.msg );\n         return false;\n       }\n\n       var rows = res.data.rows;\n\n       var html = '';\n       for ( var i = 0 ; i < rows.length ; i ++ ) {\n         var row = rows[ i ];\n         var reply = '';\n         var replyBtn = '';\n         if ( ! empty( row[ 'reply' ] ) ) {\n           reply = self.config.commentItemReplyTemp\n                       .replace( /\\{replyContent}/g , row[ 'reply' ] )\n                       .replace( /\\{timestamp}/g , row[ 'replied_at' ].substr( 2 , 14 ) );\n         } else {\n           replyBtn = self.config.commentReplyBtnTemp\n                          .replace( /\\{articleId}/g , row[ 'id' ] );\n         }\n\n         html += self.config.commentItemTemp\n                     .replace( /\\{author}/g , row[ 'nickname' ] )\n                     .replace( /\\{authorId}/g , row[ 'user_id' ] )\n                     .replace( /\\{timestamp}/g , row[ 'created_at' ].substr( 2 , 14 ) )\n                     .replace( /\\{replyBtn}/g , replyBtn )\n                     .replace( /\\{content}/g , row[ 'content' ] )\n                     .replace( /\\{reply}/g , reply );\n       }\n\n       $( '.comments-list' ).append( html );\n\n     } );\n  } ,\n\n  //初始化发送评论\n  initSendComment : function () {\n    var self = this;\n    $( '#sendCommentForm' )[ 0 ].reset();\n    self.config.curComment = '';\n\n    //控制字数\n    self.initCommentLength();\n    $( '.send-comment-content' ).on( 'keyup' , function ( e ) {\n\n      var curComment = $.trim( $( this ).val() );\n      var curCommentLength = curComment.length;\n\n      if ( self.config.maxCommentLength - curCommentLength < 0 ) {\n        e.preventDefault();\n        $( this ).val( self.config.curComment );\n        return false;\n      }\n\n      self.config.curCommentLength = curCommentLength;\n      self.config.curComment = curComment;\n      self.initCommentLength();\n    } );\n\n    //发表评论按钮\n    $( '#sendCommentBtn' ).on( 'click' , function ( e ) {\n      var data = {\n        content : self.config.curComment\n      };\n      $.post( Param.uri.comments , data )\n       .fail( function ( res ) {\n         tips.error( res.responseText );\n       } )\n       .done( function ( res ) {\n         if ( res.code != 0 ) {\n           tips.error( res.msg );\n           return false;\n         }\n         tips.success( res.msg );\n       } );\n    } );\n\n  } ,\n\n  initCommentLength : function () {\n    var self = this;\n    var strLen = self.config.maxCommentLength - self.config.curCommentLength;\n    var $sendCommentLength = $( '.send-comment-length' );\n    $sendCommentLength.html( this.config.tipTemplate.replace( /\\{len}/g , strLen ) );\n  },\n  initMenu : function(){\n    $('.navbar-collapse li:eq(0)').addClass('active');\n  }\n};"
  },
  {
    "path": "resources/assets/static/js/index/Auth.js",
    "content": "var Auth = {\n  config : {\n    bg : [\n      'static/themes/index/img/auth_1.jpg' ,\n      'static/themes/index/img/auth_2.jpg' ,\n      'static/themes/index/img/auth_3.jpg' ,\n      'static/themes/index/img/auth_4.jpg' ,\n      'static/themes/index/img/auth_5.jpg'\n    ] ,\n    coolDownTime : null\n  } ,\n  init : function () {\n\n    loading.initAjax();\n\n    var self = this;\n    //背景幻灯片\n    this.config.bg.sort( function () {return Math.random() > 0.5 ? - 1 : 1;} );\n    $( '.auth-left' ).backstretch( this.config.bg , {\n        fade : 1000 ,\n        duration : 8000\n      }\n    );\n\n    self.setHeight();\n    $( window ).resize( function () {\n      self.setHeight();\n    } );\n\n    self.initBtn();\n  } ,\n\n  setHeight : function () {\n    var $authLeft = $( '.auth-left' );\n    var $authRight = $( '.auth-right' );\n\n    var winWidth = $( window ).width();\n    if ( winWidth < 992 ) {\n      $authLeft.height( $( window ).height() / 2 );\n      $authRight.height( $( window ).height() / 2 );\n    } else {\n      $authLeft.height( $( window ).height() );\n      $authRight.height( $( window ).height() );\n    }\n  } ,\n\n  initBtn : function () {\n    var self = this;\n\n    $( '#signInBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var data = $( '#signInForm' ).serializeObject();\n\n      $.post( Param.uri.doSignIn , data )\n       .fail( function ( res ) {\n         tips.error( res.responseText );\n       } )\n       .done( function ( res ) {\n         if ( res.code != 0 ) {\n           tips.error( res.msg );\n           return false;\n         }\n         console.log( res.data );\n         tips.success( res.msg , function () {\n           if ( ! empty( res.data.redirect ) ) {\n             window.location.href = res.data.redirect;\n           }\n         } );\n       } );\n    } );\n\n    if ( typeof ( Param.coolDownTime ) != 'undefined' ) {\n      this.initCaptcha();\n      $( '#sendCaptchaBtn' ).on( 'click' , function ( e ) {\n        e.preventDefault();\n\n        var data = {\n          email : $.trim( $( 'input[name=\"email\"]' ).val() )\n        };\n\n        if ( empty( data.email ) ) {\n          tips.error( '请填写email' );\n          return false;\n        }\n\n        $.post( Param.uri.sendCaptcha , data )\n         .fail( function ( res ) {\n           tips.error( res.responseText );\n         } )\n         .done( function ( res ) {\n           if ( res.code != 0 ) {\n             tips.error( res.msg );\n             return false;\n           }\n           tips.success( res.msg );\n           self.config.coolDownTime = moment().format( 'X' );\n           self.coolDown();\n         } );\n      } );\n    }\n\n    //注册按钮\n    $( '#signUpBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      $( this ).prop( 'disabled' , true );\n      var data = $( '#signUpForm' ).serializeObject();\n      if ( empty( data.email ) ) {\n        tips.error( '请填写email' );\n        $( this ).prop( 'disabled' , false );\n        return false;\n      }\n\n      if ( empty( data.pwd ) ) {\n        tips.error( '请设置密码' );\n        $( this ).prop( 'disabled' , false );\n        return false;\n      }\n\n      if ( empty( data.captcha ) ) {\n        tips.error( '请填写验证码' );\n        $( this ).prop( 'disabled' , false );\n        return false;\n      }\n\n      $.post( Param.uri.doSignUp , data )\n       .fail( function ( res ) {\n         $( this ).prop( 'disabled' , false );\n         tips.error( res.responseText );\n       } )\n       .done( function ( res ) {\n\n         if ( res.code != 0 ) {\n           tips.error( res.msg );\n           $( this ).prop( 'disabled' , false );\n           return false;\n         }\n         tips.success( res.msg , function () {\n           window.location.href = Param.uri.base;\n         } );\n       } );\n    } )\n  } ,\n\n  //初始化验证码\n  initCaptcha : function () {\n    var self = this;\n\n    if ( empty( Param.coolDownTime ) ) {\n      $( '#sendCaptchaBtn' ).html( '获取' ).prop( 'disabled' , false );\n      return true;\n    }\n\n    //禁止发送验证码 并倒数\n    self.config.coolDownTime = Param.coolDownTime;\n    self.coolDown();\n  } ,\n\n  //设置倒数\n  coolDown : function () {\n    var self = this;\n    var currentTime = moment().format( 'X' );\n\n    var leftTime = parseInt( self.config.coolDownTime ) + parseInt( Param.coolDownGap ) - currentTime;\n    if ( leftTime <= 0 ) {\n      $( '#sendCaptchaBtn' ).html( '获取' ).prop( 'disabled' , false );\n      self.config.coolDownTime = 0;\n      return true;\n    } else {\n      $( '#sendCaptchaBtn' ).html( leftTime + '秒' ).prop( 'disabled' , true );\n      setTimeout( function () {\n        self.coolDown()\n      } , 1000 );\n    }\n  }\n};"
  },
  {
    "path": "resources/assets/static/js/index/Index.js",
    "content": "//渲染类型\nvar RenderType = {\n  APPEND : 'append' , //添加\n  REPLACE : 'replace' //替换\n};\n\nvar Index = {\n  //页面配置文件\n  config : {\n    bg : [\n      'static/themes/index/img/home_1.jpg' ,\n      'static/themes/index/img/home_2.jpg' ,\n      'static/themes/index/img/home_3.jpg' ,\n      'static/themes/index/img/home_4.jpg' ,\n      'static/themes/index/img/home_5.jpg'\n    ] ,\n    keyword : '' , //关键字\n    catalog : '' , //分类\n    tag : '' , //标签\n    page : 1 , //页码\n    total : 1 , //总页数\n    loadingTemp : '<div class=\"text-center loading\">' +\n                  '<img src=\"static/themes/global/img/loading.gif\" width=\"16\">' +\n                  '<p>正在加载中...</p></div>' ,\n    //文章列表模板\n    articleTemp : '<div class=\"list-item\">' +\n                  '<div class=\"list-item-row list-sub\">' +\n                  '<a href=\"user/1\">DMG</a> - {timestamp}' +\n                  '</div>' +\n                  '<div class=\"list-item-row\">' +\n                  '<a href=\"article/{id}\" class=\"list-title\">{title}</a>' +\n                  '</div>' +\n                  '<div class=\"list-item-row list-sub\">' +\n                  '阅读 {pv} - <a class=\"link\" href=\"article/{id}#comments\">评论 {comments}</a> - 喜欢 {likes}' +\n                  '</div></div>'\n\n  } ,\n\n  //初始化页面\n  init : function () {\n    var self = this;\n\n    self.initHeight();\n    self.initBtn();\n    self.loadList( RenderType.REPLACE );\n\n    //背景幻灯片\n    this.config.bg.sort( function () {return Math.random() > 0.5 ? - 1 : 1;} );\n    $( '.page-cover' ).backstretch( this.config.bg , {\n        fade : 1000 ,\n        duration : 8000\n      }\n    );\n  } ,\n\n  //初始化页面高度\n  initHeight : function () {\n    var self = this;\n\n    self._setHeight();\n    $( window ).on( 'resize' , function () {\n      self._setHeight();\n    } );\n  } ,\n\n  //设置页面高度\n  _setHeight : function () {\n    var $pageCover = $( '.page-cover' );\n    var $pageContent = $( '.page-content' );\n\n    $pageContent.height( $( window ).height() );\n    $pageCover.height( $( window ).height() );\n  } ,\n\n  initBtn : function () {\n    var self = this;\n    //分类点击\n    $( '.catalog' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var catalog = $( this ).data( 'catalog' );\n      var text = $( this ).text();\n      if ( catalog == self.config.catalog ) {\n        return false;\n      }\n\n      if ( catalog == '' ) {\n        console.log( 'here' );\n        $( this ).parent().addClass( 'active' ).next().removeClass( 'active' );\n      } else {\n        $( this ).parents( 'li.dropdown' ).find( '.dropdown-toggle' ).text( text );\n        $( this ).parents( 'li.dropdown' ).addClass( 'active' ).prev().removeClass( 'active' );\n      }\n\n      self.config.catalog = catalog;\n      self.config.page = 1;\n      self.config.total = 1;\n      self.setKeyword( '' );\n      self.loadList( RenderType.REPLACE );\n    } );\n\n    //标签点击\n    $( '.tags > a' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var tag = $( this ).data( 'tag' );\n      if ( tag == self.config.tag ) {\n        return false;\n      }\n\n      $( '.tags > a' ).removeClass( 'active' );\n      $( this ).addClass( 'active' );\n      self.config.tag = tag;\n      self.config.page = 1;\n      self.config.total = 1;\n      self.setKeyword( '' );\n      self.loadList( RenderType.REPLACE );\n    } );\n\n    //加载更多\n    $( '.getMoreBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      if ( self.config.total >= self.config.page ) {\n        return false;\n      }\n      self.config.page ++;\n      self.loadList( RenderType.APPEND );\n    } )\n  } ,\n\n  //设置关键字\n  setKeyword : function ( keyword ) {\n    this.config.keyword = $.trim( keyword );\n    $( 'input[name=\"keyword\"]' ).val( keyword );\n\n  } ,\n\n  //加载列表\n  loadList : function ( renderType ) {\n    var self = this;\n    var data = {\n      catalog : self.config.catalog ,\n      tag : self.config.tag ,\n      page : self.config.page ,\n      keyword : self.config.keyword\n    };\n\n    if ( renderType == RenderType.APPEND ) {\n      $( '.content-list' ).append( self.config.loadingTemp );\n    } else if ( renderType == RenderType.REPLACE ) {\n      $( '.content-list' ).html( self.config.loadingTemp );\n    }\n\n    $.get( Param.uri.articles , data )\n     .fail( function ( res ) {\n       //tips.error(res.responseText);\n       console.log( 'error' , res );\n     } )\n     .done( function ( res ) {\n       console.log( res );\n       if ( res.code != 0 ) {\n         console.log( res.msg );\n         return false;\n       }\n       self.config.total = res.data.total;\n       self.renderList( res.data.rows , renderType );\n     } );\n  } ,\n\n  //渲染列表\n  renderList : function ( data , type ) {\n    var temp = this.config.articleTemp;\n    var html = [];\n    for ( var i = 0 ; i < data.length ; i ++ ) {\n      var item = data[ i ];\n      var timestamp = getTimestamp( item.created_at );\n      html.push( temp.replace( /\\{id}/g , item.id )\n                     .replace( /\\{title}/g , item.title )\n                     .replace( /\\{pv}/g , item.pv )\n                     .replace( /\\{comments}/g , item.comments )\n                     .replace( /\\{likes}/g , item.likes )\n                     .replace( /\\{timestamp}/g , timestamp ) );\n    }\n\n\n    if ( type == RenderType.REPLACE ) {\n      $( '.content-list' ).html( html.join( \"\\n\" ) );\n    } else if ( type == RenderType.APPEND ) {\n      $( '.loading' ).remove();\n      $( '.content-list' ).append( html.join( \"\\n\" ) );\n    }\n  }\n};\n\nvar getTimestamp = function ( timeString ) {\n  var unit = [ 31104000 , 2592000 , 86400 , 3600 , 60 , 3600 ];\n  var unitText = [ '年前' , '个月前' , '天前' , '小时之前' , '分钟之前' , '秒之前' ];\n  var diff = moment().unix() - moment( timeString ).unix();\n\n  for ( var i = 0 ; i < unit.length ; i ++ ) {\n    if ( diff > unit[ i ] ) {\n      diff = Math.round( diff / unit[ i ] );\n      break;\n    }\n  }\n\n  return diff + unitText[ i ];\n};"
  },
  {
    "path": "resources/assets/static/js/index/Questions.js",
    "content": "var Questions = {\n  config : {\n    mde : null,\n    maxCommentLength : 250 ,\n    curCommentLength : 0 ,\n    tipTemplate : '可写 {len} 个字' ,\n    commentItemTemp : '<li class=\"comment-item\"><div class=\"user-info\">' +\n                      '<a href=\"/user/{authorId}\">{author}</a> @ <small class=\"text-muted\">{timestamp}</small></div>' +\n                      '<div class=\"content\">{content}</div>' +\n                      '<p class=\"text-right\">' +\n                      '{replyBtn}' +\n                      '{reply}</li>' ,\n    commentReplyBtnTemp : '<button class=\"btn btn-link replyBtn\" data-id=\"{articleId}\">回复</button></p>' ,\n    commentItemReplyTemp : '<div class=\"reply\"><blockquote>{replyContent}<footer>{timestamp}</footer></blockquote></div>' ,\n    commentReplyTemp : '<div class=\"reply\" style=\"display: none\"><blockquote><textarea class=\"form-control\"></textarea><footer><button  type=\"button\" class=\"btn btn-primary send-comment-reply\" >提交</button></footer></blockquote></div>' ,\n    curComment : '',\n\n\n    answerItemTemp : '<li class=\"answer-item\"><div class=\"user-info\">' +\n    '<a href=\"/user/{authorId}\">{author}</a> @ <small class=\"text-muted\">{timestamp}</small></div>' +\n    '<div class=\"content\">{content}</div>' +\n    '<p class=\"text-right\">' +\n    '{adoptBtn}' +\n    '{replyBtn}' +\n    '{reply}</li>' ,\n    answerAdoptBtnTemp : '<button class=\"btn btn-link adoptBtn\" data-id=\"{articleId}\">采纳为最佳答案</button>',\n    answerReplyBtnTemp :'<button class=\"btn btn-link replyBtn\" data-id=\"{articleId}\">回复</button></p>' ,\n    answerItemReplyTemp : '<div class=\"reply\"><blockquote>{replyContent}<footer>{timestamp}</footer></blockquote></div>' ,\n  } ,\n  init : function () {\n    this.initQuestion();\n    this.initImg();\n    this.initLikes();\n  //  this.initAnswers();\n    this.initBtn();\n    this.initSendAnswer();\n    this.initReplyComment();\n    this.initSendCommentReply();\n    this.initPriceModal();\n  //  this.initSendComment();\n    this.initMenu();\n\n    this.config.mde = new SimpleMDE( {\n      element : $( \".editor\" )[ 0 ] ,\n      toolbar : [\n        'link' ,\n\n        'table' ,\n        '|' ,\n        'preview' ,\n        'side-by-side' ,\n        'fullscreen'\n      ] ,\n      spellChecker : false\n    } );\n  } ,\n\n  //初始化图片\n  initImg : function () {\n    $( '.article-content img' ).addClass( 'img-responsive' );\n  } ,\n\n  initLikes : function () {\n    var $likeBtn = $( '#likeBtn' );\n    $likeBtn.on( 'click' , function ( e ) {\n      e.preventDefault();\n\n      $.post( Param.uri.likes )\n       .fail( function ( res ) {\n         tips.error( res.responseText );\n       } )\n       .done( function ( res ) {\n         if ( res.code != 0 ) {\n           tips.error( res.msg );\n           return false;\n         }\n\n         tips.success( res.msg );\n         var $likesCount = $( '#likesCount' );\n         var count = parseInt( $likesCount.html() ) + 1;\n         $likesCount.html( count );\n         $likeBtn.animateCss( 'bounceIn' );\n       } );\n    } );\n  } ,\n\n  //初始化评论列表\n  initComments : function () {\n    var self = this;\n    var data = {};\n\n    $.get( Param.uri.comments , data )\n     .fail( function ( res ) {\n       tips.error( res.responseText );\n     } )\n     .done( function ( res ) {\n       if ( res.code != 0 ) {\n         tips.error( res.msg );\n         return false;\n       }\n\n       var rows = res.data.rows;\n\n       var html = '';\n       for ( var i = 0 ; i < rows.length ; i ++ ) {\n         var row = rows[ i ];\n         var reply = '';\n         var replyBtn = '';\n         if ( ! empty( row[ 'reply' ] ) ) {\n           reply = self.config.commentItemReplyTemp\n                       .replace( /\\{replyContent}/g , row[ 'reply' ] )\n                       .replace( /\\{timestamp}/g , row[ 'replied_at' ].substr( 2 , 14 ) );\n         } else {\n           replyBtn = self.config.commentReplyBtnTemp\n                          .replace( /\\{articleId}/g , row[ 'id' ] );\n         }\n\n         html += self.config.commentItemTemp\n                     .replace( /\\{author}/g , row[ 'nickname' ] )\n                     .replace( /\\{authorId}/g , row[ 'user_id' ] )\n                     .replace( /\\{timestamp}/g , row[ 'created_at' ].substr( 2 , 14 ) )\n                     .replace( /\\{replyBtn}/g , replyBtn )\n                     .replace( /\\{content}/g , row[ 'content' ] )\n                     .replace( /\\{reply}/g , reply );\n       }\n\n       $( '.comments-list' ).append( html );\n\n     } );\n  } ,\n  initAnswers : function(){\n    var self = this;\n  //  var data = {question_status:self.config.question.status};\n\n    $.get( Param.uri.answers ).fail( function(res){\n      tips.error( res.msg );\n    }).done(function( res ){\n      if( res.code != 0 ){\n        tips.error( res.msg );\n        return false;\n      }\n\n      var rows = res.data.rows;\n      var html = '';\n\n      for( var i= 0; i<rows.length ; i++){\n        var row = rows[ i ];\n        var reply = '';\n        var replyBtn = '';\n        if ( ! empty( row[ 'reply' ] ) ) {\n          reply = self.config.answerItemReplyTemp\n              .replace( /\\{replyContent}/g , row[ 'reply' ] )\n              .replace( /\\{timestamp}/g , row[ 'replied_at' ].substr( 2 , 14 ) );\n        } else {\n          if(self.config.question.status != 2){\n            adoptBtn = self.config.answerAdoptBtnTemp\n              .replace( /\\{articleId}/g , row[ 'id' ] );\n          }else{\n            adoptBtn = '';\n          }\n\n          replyBtn = self.config.answerReplyBtnTemp\n              .replace( /\\{articleId}/g , row[ 'id' ] );\n        }\n\n        html += self.config.answerItemTemp\n            .replace( /\\{author}/g , row[ 'nickname' ] )\n            .replace( /\\{authorId}/g , row[ 'user_id' ] )\n            .replace( /\\{timestamp}/g , row[ 'created_at' ].substr( 2 , 14 ) )\n            .replace( /\\{replyBtn}/g , replyBtn )\n            .replace( /\\{adoptBtn}/g , adoptBtn )\n            .replace( /\\{content}/g , row[ 'content' ] )\n            .replace( /\\{reply}/g , reply );\n      }\n      $( '.answers-list' ).append( html );\n    });\n  },\n\n\n  //初始化发送评论\n  initSendComment : function () {\n    var self = this;\n    $( '#sendCommentForm' )[ 0 ].reset();\n    self.config.curComment = '';\n\n    //控制字数\n    self.initCommentLength();\n    $( '.send-comment-content' ).on( 'keyup' , function ( e ) {\n\n      var curComment = $.trim( $( this ).val() );\n      var curCommentLength = curComment.length;\n\n      if ( self.config.maxCommentLength - curCommentLength < 0 ) {\n        e.preventDefault();\n        $( this ).val( self.config.curComment );\n        return false;\n      }\n\n      self.config.curCommentLength = curCommentLength;\n      self.config.curComment = curComment;\n      self.initCommentLength();\n    } );\n\n    //发表评论按钮\n    $( '#sendCommentBtn' ).on( 'click' , function ( e ) {\n\n      var data = {\n\n        content : self.config.curComment\n      };\n      $.post( Param.uri.comments , data )\n       .fail( function ( res ) {\n         tips.error( res.responseText );\n       } )\n       .done( function ( res ) {\n         if ( res.code != 0 ) {\n           tips.error( res.msg );\n           return false;\n         }\n         tips.success( res.msg );\n       } );\n    } );\n\n\n\n  } ,\n  initSendCommentReply : function(){\n    var self = this;\n    $('body').on( 'click' ,'.send-comment-reply', function(e){\n\n      var data = {\n        content : $(this).closest('div').find('textarea').val(),\n        rec_id : $(this).data('id'),\n      };\n\n      $.post( Param.uri.answercomments , data).fail(function(res){\n        tips.error(res.msg);\n      }).done( function( res ){\n        if( res.code != 0){\n          tips.error(res.msg);\n          return false;\n        }\n        tips.success( res.msg );\n      });\n    });\n  },\n\n  initReplyComment : function(){\n    var self = this;\n\n    $('body').on('click' , '.replyBtn' , function(e){\n      var id = $(this).data('id');\n      self.initReplyCommentList(this , id);\n      e.preventDefault();\n        if($(this).hasClass('show-comment')){\n          $(this).removeClass('show-comment');\n          $(this).html('回复');\n\n          $(this).next('.reply').slideToggle('fast' , function(){\n            $(this).remove();\n          });\n\n        }else{\n\n          $(this).html('关闭');\n         $(this).addClass('show-comment' );\n\n         $(this).parent().append(self.config.commentReplyTemp);\n          $(this).closest('div').find('.send-comment-reply').data('id' , id );\n\n          $(this).next('.reply').slideToggle(\"fast\");\n\n        }\n    });\n\n  },\n\n  initReplyCommentList : function(node , id){\n    var self = this;\n    var data = {rec_id : id ,  module : 'answers'};\n\n    $.get( Param.uri.answercomments ,data ).fail( function(res){\n      tips.error( res.msg );\n    }).done(function( res ){\n      if( res.code != 0 ){\n        tips.error( res.msg );\n        return false;\n      }\n\n      var rows = res.data.rows;\n      var html = '';\n\n      for( var i= 0; i<rows.length ; i++){\n        var row = rows[ i ];\n        var reply = '';\n        var replyBtn = '';\n        /*if ( ! empty( row[ 'reply' ] ) ) {\n          reply = self.config.commentItemReplyTemp\n              .replace( /\\{replyContent}/g , row[ 'reply' ] )\n              .replace( /\\{timestamp}/g , row[ 'replied_at' ].substr( 2 , 14 ) );\n        } else {\n          replyBtn = self.config.answerReplyBtnTemp\n              .replace( /\\{articleId}/g , row[ 'id' ] );\n        }*/\n\n        html += self.config.commentItemTemp\n            .replace( /\\{author}/g , row[ 'nickname' ] )\n            .replace( /\\{authorId}/g , row[ 'user_id' ] )\n            .replace( /\\{timestamp}/g , row[ 'created_at' ].substr( 2 , 14 ) )\n            .replace( /\\{replyBtn}/g , replyBtn )\n            .replace( /\\{content}/g , row[ 'content' ] )\n            .replace( /\\{reply}/g , reply );\n      }\n\n      $( node ).closest('li').find('.reply').append( html );\n    });\n\n  },\n\n  initSendAnswer : function(){\n    var self = this;\n\n    $('#sendAnswerBtn').on( 'click' , function( e ){\n      e.preventDefault();\n      var data = {\n        content : self.config.mde.value(),\n      }\n      $.post(Param.uri.answers ,data)\n          .fail(function (res) {\n            tips.error(res.responseText);\n          }).done( function (res){\n        if( res.code != 0){\n          tips.error( res.msg );\n          return false;\n        }\n        tips.success( res.msg);\n      });\n    });\n  },\n\n  initCommentLength : function () {\n    var self = this;\n    var strLen = self.config.maxCommentLength - self.config.curCommentLength;\n    var $sendCommentLength = $( '.send-comment-length' );\n    $sendCommentLength.html( this.config.tipTemplate.replace( /\\{len}/g , strLen ) );\n  },\n  initMenu : function(){\n    $('.navbar-collapse li:eq(0)').addClass('active');\n  },\n\n  initQuestion : function () {\n    var self  = this;\n    var data = {from:'api'};\n    $.get(Param.uri.this , data)\n        .done(function(res){\n          if(res.code == 0 ){\n            self.config.question = res.data;\n            if(self.config.question.status == 2){\n              $('#sendAnswer').hide();\n\n            }\n            self.initAnswers();\n          }else{\n            tips.error(res.msg);\n          }\n        })\n        .fail(function(res){\n          tips.error(res.msg);\n        });\n  },\n  initBtn : function(){\n    var self = this;\n    $('body').on('click' ,'.adoptBtn' , function(e){\n        e.preventDefault();\n      var id = $(this).data('id');\n        var data = {\n          rec_id : id\n        };\n        $.post(Param.uri.adopt , data )\n            .done(function(res){\n              if(res.code == 0){\n                tips.success(res.msg);\n              }else{\n                tips.error(res.msg);\n              }\n\n        }).fail(function(res){\n              tips.error(res.msg);\n            });\n    });\n\n    $('.editBtn').on('click' , function(e){\n      e.preventDefault();\n      id = $(this).data('id');\n      var url = '/question/create/' + id;\n      window.location.href = url;\n    });\n\n    $('.addPriceBtn').on( 'click' , function(e){\n      e.preventDefault();\n      var id = $(this).data('id');\n\n    });\n\n    $('#sendPriceBtn').on( 'click' , function(e){\n      e.preventDefault();\n      var id = $(this).data('id');\n      var price = $('#addprice').find('option:selected').text();\n\n      data = {price : price , id : id};\n      $.post( Param.uri.addPrice , data).done(function (res) {\n        if( res.code == 0){\n          tips.success(res.msg);\n          $('#addPriceModal').modal('hide')\n        }else{\n          tips.error(res.msg);\n        }\n\n      }).fail(function (res){\n        tips.error(res.msg);\n      });\n    });\n\n\n  },\n\n  initPriceModal : function(){\n    var data = {};\n    $.get(Param.uri.pricearr , data ).done(function(res){\n      var html = '<select>';\n  //    var data = JSON.parse(res.data);\n      for(var i=0;i < res.data.length ; i++){\n        html += '<option>'+res.data[i]+'</option>';\n      }\n      html += '</select>';\n    //  tips.success(res.msg);\n\n      $('#addPriceModal .modal-body #addprice').html(html);\n    }).fail(function(res){\n      tips.error(res.msg);\n    });\n\n  }\n};"
  },
  {
    "path": "resources/assets/static/js/index/QuestionsCreate.js",
    "content": "var QuestionsCreate = {\n  config : {\n    mde : null,\n  } ,\n  init : function () {\n\n    this.initSendQuestion();\n    this.initCategory();\n    this.initPrice();\n    this.initMenu();\n\n    this.config.mde = new SimpleMDE( {\n      element : $( \".editor\" )[ 0 ] ,\n      toolbar : [\n        'link' ,\n\n        'table' ,\n        '|' ,\n        'preview' ,\n        'side-by-side' ,\n        'fullscreen'\n      ] ,\n      spellChecker : false\n    } );\n  } ,\n\n  initCategory : function(){\n    $.get(Param.uri.questioncategory , {} , function(res){\n      var options = '<option value=\"0\" selected>请选择分类</option>';\n\n      for(var i=0 ; i < res.data.length ; i++){\n        options += '<option value=\"'+res.data[i].id+'\">'+res.data[i].text+'</option>';\n      }\n    //  options = form_options_rows(res);\n      $('#category').html(options);\n     // console.log(res);\n    });\n  },\n\n  initPrice : function(){\n    var options = '<option value=\"0\" selected>0</option>';\n    for(var i=0 ; i < Param.prices.length ; i++){\n      options += '<option value=\"'+Param.prices[i]+'\">'+Param.prices[i]+'</option>';\n    }\n    $('#price').html(options);\n  },\n\n  initSendQuestion: function(){\n    var self = this;\n\n    $('#sendQuestionBtn').on( 'click' , function(e){\n      e.preventDefault();\n      console.log($('#content').text());\n      var data = {\n        title : $('#title').val(),\n        content : self.config.mde.value(),\n        category : $('#category').val(),\n        price : $('#price').val(),\n        hide : $('#hide').is(':checked') ? 1 : 0 ,\n      };\n      $.post(Param.uri.questioncreate , data )\n          .done(function( res ){\n            tips.success(res.msg);\n      }).fail(function( res ){\n            tips.error(res.msg);\n          });\n\n    });\n  },\n\n  initMenu : function(){\n    $('.navbar-collapse li:eq(0)').addClass('active');\n  }\n};"
  },
  {
    "path": "resources/assets/static/js/index/Users.js",
    "content": "var Users = {\n  init : function () {\n\n  }\n};"
  },
  {
    "path": "resources/assets/static/js/mp/Index.js",
    "content": "var Index = {\n\tinit : function(){\n\t\t// 指定图表的配置项和数据\n\t\tvar usersOption = {\n\t\t\ttooltip : {\n\t\t\t\ttrigger : 'axis'\n\t\t\t} ,\n\t\t\tlegend : {\n\t\t\t\tdata : ['用户注册']\n\t\t\t} ,\n\t\t\tgrid : {\n\t\t\t\tleft : '3%' ,\n\t\t\t\tright : '4%' ,\n\t\t\t\tbottom : '3%' ,\n\t\t\t\tcontainLabel : true\n\t\t\t} ,\n\t\t\txAxis : [\n\t\t\t\t{\n\t\t\t\t\ttype : 'category' ,\n\t\t\t\t\tboundaryGap : true ,\n\t\t\t\t\tdata : Param.charts.users.period\n\t\t\t\t}\n\t\t\t] ,\n\t\t\tyAxis : [\n\t\t\t\t{\n\t\t\t\t\ttype : 'value'\n\t\t\t\t}\n\t\t\t] ,\n\t\t\tseries : [\n\t\t\t\t{\n\t\t\t\t\tname : '注册人数' ,\n\t\t\t\t\ttype : 'line' ,\n\t\t\t\t\tdata : Param.charts.users.data\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\tvar apiOption = {\n\t\t\tcolor: ['#3398DB'],\n\t\t\ttooltip : {\n\t\t\t\ttrigger: 'axis',\n\t\t\t\taxisPointer : {            // 坐标轴指示器，坐标轴触发有效\n\t\t\t\t\ttype : 'shadow'        // 默认为直线，可选为：'line' | 'shadow'\n\t\t\t\t}\n\t\t\t},\n\t\t\tgrid : {\n\t\t\t\tleft : '3%' ,\n\t\t\t\tright : '4%' ,\n\t\t\t\tbottom : '3%' ,\n\t\t\t\tcontainLabel : true\n\t\t\t} ,\n\t\t\txAxis : [\n\t\t\t\t{\n\t\t\t\t\ttype : 'category' ,\n\t\t\t\t\tdata : Param.charts.api.period,\n\t\t\t\t\taxisTick: {\n\t\t\t\t\t\talignWithLabel: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t] ,\n\t\t\tyAxis : [\n\t\t\t\t{\n\t\t\t\t\ttype : 'value'\n\t\t\t\t}\n\t\t\t] ,\n\t\t\tseries : [\n\t\t\t\t{\n\t\t\t\t\tname : '访问量' ,\n\t\t\t\t\ttype : 'bar' ,\n\t\t\t\t\tbarWidth: '60%',\n\t\t\t\t\tlabel: {\n\t\t\t\t\t\tnormal: {\n\t\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\t\tposition: 'top'\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tdata : Param.charts.api.data\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\tvar userChart = echarts.init(document.getElementById('userChart'));\n\t\tuserChart.setOption(usersOption);\n\n\t\tvar apiChart = echarts.init(document.getElementById('apiChart'));\n\t\tapiChart.setOption(apiOption);\n\t}\n};"
  },
  {
    "path": "resources/assets/static/js/mp/MerAd.js",
    "content": "/**\n * MerAd JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-16\n */\n\nvar MerAd = {\n\tconfig : {} ,\n\tinit : function () {\n\t\t//重新设置菜单\n\t\tif ( ! empty(Param.uri.menu) ) {\n\t\t\tLayout.setSidebarMenuActiveLink('set' , 'a[data-uri=\"' + Param.uri.menu + '\"]');\n\t\t}\n\n\t\t//初始化ajax 提示框\n\t\tloading.initAjax();\n\n\t\t//初始化页面按钮\n\t\tthis.initBtn();\n\n\t\t//初始化查询form\n\t\tthis.initSearchForm();\n\n\t\t//初始化数据表\n\t\tthis.initGrid();\n\n\n\t} ,\n\n\t//初始化查询form\n\tinitSearchForm : function () {\n\t\tvar $searchForm = $('#searchForm');\n\t\t$searchForm.reloadForm(Param.query);\n\n\t\t//查询按钮\n\t\t$('#searchBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $dataGrid = $('#dataGrid');\n\t\t\tvar param = $dataGrid.TableGrid('getParam');\n\n\t\t\tparam = $.extend({} , param , $('#searchForm').serializeObject());\n\t\t\tparam.page = 1;\n\n\t\t\t$dataGrid.TableGrid('setParam' , param);\n\t\t\t$dataGrid.TableGrid('reload');\n\t\t});\n\t} ,\n\n\t//显示 portlet\n\tsetPortletShow : function (type) {\n\t\tvar $tablePortlet = $('#tablePortlet');\n\t\tvar $addEditPortlet = $('#addEditPortlet');\n\n\t\t$tablePortlet.slideUp('fast');\n\t\tif ( type == 'add' ) {\n\t\t\tif ( ! $addEditPortlet.hasClass('blue') ) {\n\t\t\t\t$addEditPortlet.removeClass('green-meadow').addClass('blue');\n\t\t\t}\n\n\t\t\t$addEditPortlet.find('.caption-subject').html('新增 ' + Param.pageTitle);\n\t\t} else if ( type == 'edit' ) {\n\t\t\tif ( ! $addEditPortlet.hasClass('green-meadow') ) {\n\t\t\t\t$addEditPortlet.removeClass('blue').addClass('green-meadow');\n\t\t\t}\n\t\t\t$addEditPortlet.find('.caption-subject').html('编辑 ' + Param.pageTitle);\n\t\t}\n\n\t\t//$('#data-table-portlet').slideUp('fast');\n\t\t$addEditPortlet.show();\n\t} ,\n\n//关闭 portlet\n\tsetPortletHide : function () {\n\t\t$('#tablePortlet').slideDown('fast');\n\t\t$('#addEditPortlet').slideUp('fast');\n\t} ,\n\n\tsetUploadCropByCatalog : function (catalogId) {\n\t\tfor ( var i = 0 ; i < Param.catalog.length ; i ++ ) {\n\t\t\tvar row = Param.catalog[i];\n\t\t\tif ( row['id'] == catalogId ) {\n\t\t\t\tvar $iconUploadBtn = $('#iconUploadBtn');\n\t\t\t\tvar uploadParam = $iconUploadBtn.Uploader('getParam');\n\t\t\t\tuploadParam['width'] = row.width;\n\t\t\t\tuploadParam['height'] = row.height;\n\t\t\t\t$iconUploadBtn.Uploader('set_param' , uploadParam);\n\t\t\t}\n\t\t}\n\t} ,\n\n\t//初始化各种按钮\n\tinitBtn : function () {\n\t\tvar self = this;\n\n\t\t$('input[name=\"catalog_id\"]').on('change' , function () {\n\t\t\tself.setUploadCropByCatalog($(this).val());\n\t\t});\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(Param.defaultRow);\n\t\t\tsetImgPreview.clear('icon');\n\t\t\tself.setUploadCropByCatalog(Param.defaultRow.catalog_id);\n\n\t\t\t$form.attr('action' , Param.uri.insert);\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click' , '.editBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#dataGrid').TableGrid('getRow' , id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(row);\n\t\t\tsetImgPreview.set('icon' , row.icon);\n\t\t\tself.setUploadCropByCatalog(row.catalog_id);\n\n\t\t\t$form.attr('action' , Param.uri.update + row.id);\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click' , '.destroyBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData(id);\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif ( empty(ids) ) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.delData(ids);\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif ( $form.validForm() ) {\n\t\t\t\tvar data = $form.serializeObject();\n\n\t\t\t\t$.post($form.attr('action') , data)\n\t\t\t\t .fail(function (res) {\n\t\t\t\t\t tips.error(res.responseText);\n\t\t\t\t })\n\t\t\t\t .done(function (res) {\n\t\t\t\t\t if ( res.code == 1001 ) {\n\t\t\t\t\t\t //需要登录\n\t\t\t\t\t\t tips.error('请先登录');\n\t\t\t\t\t } else if ( res.code != 0 ) {\n\t\t\t\t\t\t tips.error(res.msg);\n\t\t\t\t\t } else {\n\t\t\t\t\t\t tips.success(res.msg);\n\t\t\t\t\t\t $('#dataGrid').TableGrid('reload');\n\t\t\t\t\t\t self.setPortletHide();\n\t\t\t\t\t }\n\t\t\t\t });\n\t\t\t}\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n\t\t//上传按钮\n\t\t$('#iconUploadBtn').Uploader({\n\t\t\turi : Param.uri.upload , //上传文件\n\t\t\tparam : Param.uploadParam ,\n\t\t\talbum : true ,\n\t\t\talbumUri : Param.uri.album ,\n\t\t\talbumCatalogUri : Param.uri.albumCatalog ,\n\t\t\talbumParam : Param.albumParam ,\n\t\t\tonSuccess : function (ret) {\n\t\t\t\ttips.success(ret.msg);\n\t\t\t\tif ( ret.code == 0 ) {\n\t\t\t\t\tsetImgPreview.set('icon' , ret.data.savePath);\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tonChooseAlbum : function (uri) {\n\t\t\t\tsetImgPreview.set('icon' , uri);\n\t\t\t}\n\t\t});\n\n\n\t} ,\n\n\tdelData : function (ids) {\n\t\tvar self = this;\n\t\tvar data = {\n\t\t\tids : ids\n\t\t};\n\n\t\tsure.init('是否删除?' , function () {\n\n\t\t\t$.post(Param.uri.destroy , data)\n\t\t\t .fail(function (res) {\n\t\t\t\t tips.error(res.responseText);\n\t\t\t })\n\t\t\t .done(function (res) {\n\t\t\t\t if ( res.code == 1001 ) {\n\t\t\t\t\t //需要登录\n\t\t\t\t\t tips.error('请先登录');\n\t\t\t\t } else if ( res.code != 0 ) {\n\t\t\t\t\t tips.error(res.msg);\n\t\t\t\t } else {\n\t\t\t\t\t tips.success(res.msg);\n\t\t\t\t\t $('#dataGrid').TableGrid('reload');\n\t\t\t\t }\n\t\t\t });\n\t\t});\n\t} ,\n\n\t//初始化grid\n\tinitGrid : function () {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query , '' , uri);\n\n\t\t$('#dataGrid').TableGrid({\n\t\t\turi : Param.uri.read ,\n\t\t\tselectAll : true ,\n\t\t\tparam : Param.query ,\n\t\t\trowStyle : function (row) {\n\t\t\t\tif ( row.status == 0 ) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tloadSuccess : function (rows , settings) {\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif ( oldUri == uri ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params , '' , oldUri);\n\t\t\t\thistory.replaceState(settings.param , '' , uri);\n\t\t\t}\n\t\t});\n\t}\n\n};\n\n//pop state 事件\nwindow.onpopstate = function (event) {\n\tif ( event && event.state ) {\n\t\t$('#searchForm').reloadForm(event.state);\n\t\tvar $dataGrid = $('#dataGrid');\n\t\t$dataGrid.TableGrid('setParam' , event.state);\n\t\t$dataGrid.TableGrid('reload');\n\t}\n};\n\nvar formatName = function (value , row) {\n\treturn value + '<br>' +\n\t           '<small class=\"text-muted\">'+ row['catalog_text'] +'</small>';\n};"
  },
  {
    "path": "resources/assets/static/js/mp/MerAdCatalog.js",
    "content": "/**\n * MerAdCatalog JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-16\n */\n\nvar MerAdCatalog = {\n  config : {} ,\n\tinit : function () {\n\t\t//重新设置菜单\n\t\tif ( !empty( Param.uri.menu ) ) {\n\t\t\tLayout.setSidebarMenuActiveLink('set' , 'a[data-uri=\"'+ Param.uri.menu +'\"]');\n\t\t}\n\n    //初始化ajax 提示框\n    loading.initAjax();\n\n    //初始化页面按钮\n\t\tthis.initBtn();\n\n\t\t//初始化查询form\n\t\tthis.initSearchForm();\n\n\t\t//初始化数据表\n\t\tthis.initGrid();\n\n\t\t\n\t\t\n\t} ,\n\n\t//初始化查询form\n\tinitSearchForm : function () {\n\t\tvar $searchForm = $('#searchForm');\n\t\t$searchForm.reloadForm(Param.query);\n\n\t\t//查询按钮\n\t\t$('#searchBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $dataGrid = $('#dataGrid');\n\t\t\tvar param = $dataGrid.TableGrid('getParam');\n\n\t\t\tparam = $.extend({} , param , $('#searchForm').serializeObject()  );\n\t\t\tparam.page = 1;\n\n\t\t\t$dataGrid.TableGrid('setParam' , param);\n\t\t\t$dataGrid.TableGrid('reload');\n\t\t});\n\t} ,\n\n  \n  //显示 modal\nsetPortletShow : function ( type ) {\n  var $addEditModal = $('#addEditModal') ;\n\n  $addEditModal.modal('show');\n  if ( type == 'add' ) {\n    $addEditModal.find('.caption-subject').html('新增 ' + Param.pageTitle );\n  } else if ( type == 'edit' ) {\n    $addEditModal.find('.caption-subject').html('编辑 ' + Param.pageTitle );\n  }\n},\n\n//关闭 modal\nsetPortletHide : function () {\n  $('#addEditModal').modal('hide') ;\n},\n\n\t//初始化各种按钮\n\tinitBtn : function () {\n\t\tvar self = this;\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm( Param.defaultRow );\n\t\t\t\n      \n      \n\n\t\t\t$form.attr('action' , Param.uri.insert );\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click' , '.editBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#dataGrid').TableGrid('getRow' , id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm( row );\n\t\t\t\n\t\t\t\n      \n\n\t\t\t$form.attr('action' , Param.uri.update + row.id );\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click' , '.destroyBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData( id );\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif ( empty( ids ) ) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tself.delData( ids );\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif( $form.validForm() ) {\n\t\t\t\tvar data = $form.serializeObject();\n\n\t\t\t\t$.post( $form.attr('action') , data )\n\t\t\t\t .fail( function(res){\n            tips.error( res.responseText );\n\t\t\t\t })\n\t\t\t\t .done( function( res ){\n\t\t\t\t    if ( res.code == 1001 ) {\n              //需要登录\n              tips.error('请先登录');\n            } else if( res.code != 0 ){\n              tips.error( res.msg );\n            } else {\n              tips.success( res.msg );\n              $('#dataGrid').TableGrid('reload');\n              self.setPortletHide();\n            }\n\t\t\t\t });\n\t\t\t}\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n    \n\n    \n\t} ,\n\n\tdelData : function ( ids ) {\n\t\tvar self = this ;\n\t\tvar data = {\n\t\t\tids : ids\n\t\t};\n\n\t\tsure.init('是否删除?' , function () {\n\n\t\t  $.post( Param.uri.destroy , data )\n\t\t   .fail( function(res){\n         tips.error( res.responseText );\n       })\n\t\t   .done(function (res) {\n          if ( res.code == 1001 ) {\n            //需要登录\n            tips.error('请先登录');\n          } else if( res.code != 0 ){\n            tips.error( res.msg );\n          } else {\n            tips.success( res.msg );\n            $('#dataGrid').TableGrid('reload');\n          }\n        });\n\t\t});\n\t},\n\n\t\t//初始化grid\n\tinitGrid : function () {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query , '' , uri);\n\n\t\t$('#dataGrid').TableGrid({\n\t\t\turi : Param.uri.read ,\n\t\t\tselectAll : true ,\n\t\t\tparam : Param.query ,\n\t\t\trowStyle : function (row) {\n\t\t\t\tif ( row.status == 0 ) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tloadSuccess : function ( rows , settings ) {\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif ( oldUri == uri) {\n\t\t\t\t\treturn false ;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params , '' , oldUri);\n\t\t\t\thistory.replaceState(settings.param , '' , uri);\n\t\t\t}\n\t\t});\n\t}\n\t\n};\n\n//pop state 事件\nwindow.onpopstate = function (event) {\n\tif ( event && event.state ) {\n\t\t$('#searchForm').reloadForm( event.state );\n\t\tvar $dataGrid = $('#dataGrid');\n\t\t$dataGrid.TableGrid('setParam' , event.state);\n\t\t$dataGrid.TableGrid('reload');\n\t}\n};"
  },
  {
    "path": "resources/assets/static/js/mp/MerArticles.js",
    "content": "/**\n * MerArticles JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-14\n */\n\nvar MerArticles = {\n  config : {\n    mde : null\n  } ,\n  init : function () {\n    var self = this;\n    //重新设置菜单\n    if ( ! empty( Param.uri.menu ) ) {\n      Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri=\"' + Param.uri.menu + '\"]' );\n    }\n\n    //初始化ajax 提示框\n    loading.initAjax();\n\n    //初始化页面按钮\n    this.initBtn();\n\n    //初始化查询form\n    this.initSearchForm();\n\n    //初始化数据表\n    this.initGrid();\n\n    $( '.dtp' ).datetimepicker( DTP_DATE_OPTION );\n    this.config.mde = new SimpleMDE( {\n      element : $( \".editor\" )[ 0 ] ,\n      toolbar : [\n        'link' ,\n        {\n          name : \"image\" ,\n          action : function uploadImage() {\n            //editor.value( editor.value() + 'http://www.baidu.com' );\n            $('#mdeUploadBtn').trigger('click');\n          } ,\n          className : \"fa fa-image\" ,\n          title : \"Upload Image Button\"\n        } ,\n        'table' ,\n        '|' ,\n        'preview' ,\n        'side-by-side' ,\n        'fullscreen'\n      ] ,\n      spellChecker : false\n    } );\n    //KE_OPTIONS.uploadJson = Param.uri.uploadKE;\n    //this.config['content'] = KindEditor.create('textarea[name=\"content\"]' , KE_OPTIONS);\n  } ,\n\n  //初始化查询form\n  initSearchForm : function () {\n    var $searchForm = $( '#searchForm' );\n    $searchForm.reloadForm( Param.query );\n\n    //查询按钮\n    $( '#searchBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n\n      var $dataGrid = $( '#dataGrid' );\n      var param = $dataGrid.TableGrid( 'getParam' );\n\n      param = $.extend( {} , param , $searchForm.serializeObject() );\n      param.page = 1;\n\n      $dataGrid.TableGrid( 'setParam' , param );\n      $dataGrid.TableGrid( 'reload' );\n    } );\n  } ,\n\n  //显示 portlet\n  setPortletShow : function ( type ) {\n    var $tablePortlet = $( '#tablePortlet' );\n    var $addEditPortlet = $( '#addEditPortlet' );\n\n    $tablePortlet.slideUp( 'fast' );\n    if ( type == 'add' ) {\n      if ( ! $addEditPortlet.hasClass( 'blue' ) ) {\n        $addEditPortlet.removeClass( 'green-meadow' ).addClass( 'blue' );\n      }\n\n      $addEditPortlet.find( '.caption-subject' ).html( '新建' + Param.pageTitle );\n    } else if ( type == 'edit' ) {\n      if ( ! $addEditPortlet.hasClass( 'green-meadow' ) ) {\n        $addEditPortlet.removeClass( 'blue' ).addClass( 'green-meadow' );\n      }\n      $addEditPortlet.find( '.caption-subject' ).html( '编辑' + Param.pageTitle );\n    }\n\n    //$('#data-table-portlet').slideUp('fast');\n    $addEditPortlet.show();\n  } ,\n\n  //关闭 portlet\n  setPortletHide : function () {\n    $( '#tablePortlet' ).slideDown( 'fast' );\n    $( '#addEditPortlet' ).slideUp( 'fast' );\n  } ,\n\n\n  //初始化各种按钮\n  initBtn : function () {\n    var self = this;\n\n    //打开添加框\n    $( '#addNewBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      self.setPortletShow( 'add' );\n\n      var $form = $( '#addEditForm' );\n\n      $form.reloadForm( Param.defaultRow );\n      setImgPreview.clear( 'icon' );\n      //self.config['content'].html('');\n      self.config.mde.value( '' );\n\n      $form.attr( 'action' , Param.uri.insert );\n    } );\n\n    //编辑按钮\n    $( document ).on( 'click' , '.editBtn' , function ( e ) {\n      e.preventDefault();\n      self.setPortletShow( 'edit' );\n\n      var id = $( this ).data( 'id' );\n      var row = $( '#dataGrid' ).TableGrid( 'getRow' , id );\n      var $form = $( '#addEditForm' );\n\n      $form.reloadForm( row );\n      setImgPreview.set( 'icon' , row.icon );\n      //self.config['content'].html(row.content);\n      self.config.mde.value( row.content );\n\n      $form.attr( 'action' , Param.uri.update + row.id );\n    } );\n\n    //删除一行\n    $( document ).on( 'click' , '.destroyBtn' , function ( e ) {\n      e.preventDefault();\n      var id = $( this ).data( 'id' );\n      self.delData( id );\n    } );\n\n    $( '#destroySelectBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var ids = $( '.checker:checked' ).serializeJSON().selectChecker;\n      if ( empty( ids ) ) {\n        tips.error( '请选择要删除的记录' );\n        return;\n      }\n      self.delData( ids );\n    } );\n\n    //提交添加编辑窗\n    $( '#submitFormBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var $form = $( '#addEditForm' );\n\n      if ( $form.validForm() ) {\n        var data = $form.serializeObject();\n        data.content = self.config.mde.value();\n\n        $.post( $form.attr( 'action' ) , data )\n         .fail( function ( res ) {\n           tips.error( res.responseText );\n         } )\n         .done( function ( res ) {\n           if ( res.code == 1001 ) {\n             //需要登录\n             tips.error( '请先登录' );\n           } else if ( res.code != 0 ) {\n             tips.error( res.msg );\n           } else {\n             tips.success( res.msg );\n             $( '#dataGrid' ).TableGrid( 'reload' );\n             self.setPortletHide();\n           }\n         } );\n      }\n    } );\n\n    //关闭添加编辑窗\n    $( '#closePortletBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      self.setPortletHide();\n    } );\n\n    //上传按钮\n    $( '#iconUploadBtn' ).Uploader( {\n      uri : Param.uri.upload , //上传文件\n      param : Param.uploadParam ,\n      album : true ,\n      albumUri : Param.uri.album ,\n      albumCatalogUri : Param.uri.albumCatalog ,\n      albumParam : Param.albumParam ,\n      onSuccess : function ( ret ) {\n        tips.success( ret.msg );\n        if ( ret.code == 0 ) {\n          setImgPreview.set( 'icon' , ret.data.savePath );\n        }\n      } ,\n      onChooseAlbum : function ( uri ) {\n        setImgPreview.set( 'icon' , uri );\n      }\n    } );\n\n    $( '#mdeUploadBtn' ).Uploader( {\n      uri : Param.uri.upload , //上传文件\n      param : Param.contentParam ,\n      album : false ,\n      onSuccess : function ( ret ) {\n        tips.success( ret.msg );\n        if ( ret.code == 0 ) {\n          var editor = self.config.mde;\n          editor.value( editor.value() + '![](' + ret.data.uri + ')' );\n          //setImgPreview.set( 'icon' , ret.data.uri );\n        }\n      }\n    } );\n  } ,\n\n  delData : function ( ids ) {\n    var self = this;\n    var data = {\n      ids : ids\n    };\n\n    sure.init( '是否删除?' , function () {\n\n      $.post( Param.uri.destroy , data )\n       .fail( function ( res ) {\n         tips.error( res.responseText );\n       } )\n       .done( function ( res ) {\n         if ( res.code == 1001 ) {\n           //需要登录\n           tips.error( '请先登录' );\n         } else if ( res.code != 0 ) {\n           tips.error( res.msg );\n         } else {\n           tips.success( res.msg );\n           $( '#dataGrid' ).TableGrid( 'reload' );\n         }\n       } );\n    } );\n  } ,\n\n  //初始化grid\n  initGrid : function () {\n    var self = this;\n    var uri = Param.uri.this + '?' + $.param( Param.query );\n    history.replaceState( Param.query , '' , uri );\n\n    $( '#dataGrid' ).TableGrid( {\n      uri : Param.uri.read ,\n      selectAll : true ,\n      param : Param.query ,\n      rowStyle : function ( row ) {\n        if ( row.status == 0 ) {\n          return 'warning';\n        }\n      } ,\n      loadSuccess : function ( rows , settings ) {\n        var oldUri = window.location.href;\n        var uri = Param.uri.this + '?' + $.param( settings.param );\n        if ( oldUri == uri ) {\n          return false;\n        }\n\n        var params = $.getUrlParams( window.location.href );\n        history.pushState( params , '' , oldUri );\n        history.replaceState( settings.param , '' , uri );\n      }\n    } );\n  }\n\n};\n\n//pop state 事件\nwindow.onpopstate = function ( event ) {\n  if ( event && event.state ) {\n    $( '#searchForm' ).reloadForm( event.state );\n    var $dataGrid = $( '#dataGrid' );\n    $dataGrid.TableGrid( 'setParam' , event.state );\n    $dataGrid.TableGrid( 'reload' );\n  }\n};\n\nvar formatPreview = function ( value , row ) {\n  return '[' + row.catalog_text + '] ' +\n         '<a href=\"' + Param.uri.preview + row.id + '\" target=\"_blank\">' + value + '</a>';\n};\n\nvar formatTags = function ( value ) {\n  var tags = value.split( ' ' );\n  var html = '';\n  for ( var i = 0 ; i < tags.length ; i ++ ) {\n    html += '<span class=\"badge badge-default\">' + tags[ i ] + '</span> ';\n  }\n  return html;\n};"
  },
  {
    "path": "resources/assets/static/js/mp/MerArticlesCatalog.js",
    "content": "/**\n * MerArticlesCatalog JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-15\n */\n\nvar MerArticlesCatalog = {\n\tinit : function () {\n\t\t//重新设置菜单\n\t\tif ( ! empty(Param.uri.menu) ) {\n\t\t\tLayout.setSidebarMenuActiveLink('set' , 'a[data-uri=\"' + Param.uri.menu + '\"]');\n\t\t}\n\n\t\t//初始化ajax 提示框\n\t\tloading.initAjax();\n\n\t\t//初始化页面按钮\n\t\tthis.initBtn();\n\n\t\t//初始化数据表\n\t\tthis.initGrid();\n\n\n\t} ,\n\n\n\t//显示 modal\n\tsetPortletShow : function (type) {\n\t\tvar $addEditModal = $('#addEditModal');\n\n\t\t$addEditModal.modal('show');\n\t\tif ( type == 'add' ) {\n\t\t\t$addEditModal.find('.caption-subject').html('新增 ' + Param.pageTitle);\n\t\t} else if ( type == 'edit' ) {\n\t\t\t$addEditModal.find('.caption-subject').html('编辑 ' + Param.pageTitle);\n\t\t}\n\t} ,\n\n//关闭 modal\n\tsetPortletHide : function () {\n\t\t$('#addEditModal').modal('hide');\n\t} ,\n\n\t//初始化各种按钮\n\tinitBtn : function () {\n\t\tvar self = this;\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(Param.defaultRow);\n\t\t\tsetImgPreview.clear('icon');\n\t\t\tsetImgPreview.clear('icon');\n\n\n\t\t\t$form.attr('action' , Param.uri.insert);\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click' , '.editBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#treeGrid').TreeGrid('getRow' , id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(row);\n\t\t\tsetImgPreview.set('icon' , row.icon);\n\t\t\tsetImgPreview.set('icon' , row.icon);\n\t\t\tsetImgPreview.set('icon' , row.icon);\n\n\n\t\t\t$form.attr('action' , Param.uri.update + row.id);\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click' , '.destroyBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData(id);\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif ( empty(ids) ) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.delData(ids);\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif ( $form.validForm() ) {\n\t\t\t\tvar data = $form.serializeObject();\n\n\t\t\t\t$.post($form.attr('action') , data)\n\t\t\t\t .fail(function (res) {\n\t\t\t\t\t tips.error(res.responseText);\n\t\t\t\t })\n\t\t\t\t .done(function (res) {\n\t\t\t\t\t if ( res.code == 1001 ) {\n\t\t\t\t\t\t //需要登录\n\t\t\t\t\t\t tips.error('请先登录');\n\t\t\t\t\t } else if ( res.code != 0 ) {\n\t\t\t\t\t\t tips.error(res.msg);\n\t\t\t\t\t } else {\n\t\t\t\t\t\t tips.success(res.msg);\n\t\t\t\t\t\t $('#treeGrid').TreeGrid('reload');\n\t\t\t\t\t\t self.setPortletHide();\n\t\t\t\t\t }\n\t\t\t\t });\n\t\t\t}\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n\t\t//上传按钮\n\t\t$('#iconUploadBtn').Uploader({\n\t\t\turi : Param.uri.upload , //上传文件\n\t\t\tparam : Param.uploadParam ,\n\t\t\talbum : true ,\n\t\t\talbumUri : Param.uri.album ,\n\t\t\talbumCatalogUri : Param.uri.albumCatalog ,\n\t\t\talbumParam : Param.albumParam ,\n\t\t\tonSuccess : function (ret) {\n\t\t\t\ttips.success(ret.msg);\n\t\t\t\tif ( ret.code == 0 ) {\n\t\t\t\t\tsetImgPreview.set('icon' , ret.data.savePath);\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tonChooseAlbum : function (uri) {\n\t\t\t\tsetImgPreview.set('icon' , uri);\n\t\t\t}\n\t\t});\n\n\n\t} ,\n\n\tdelData : function (ids) {\n\t\tvar self = this;\n\t\tvar data = {\n\t\t\tids : ids\n\t\t};\n\n\t\tsure.init('是否删除?' , function () {\n\n\t\t\t$.post(Param.uri.destroy , data)\n\t\t\t .fail(function (res) {\n\t\t\t\t tips.error(res.responseText);\n\t\t\t })\n\t\t\t .done(function (res) {\n\t\t\t\t if ( res.code == 1001 ) {\n\t\t\t\t\t //需要登录\n\t\t\t\t\t tips.error('请先登录');\n\t\t\t\t } else if ( res.code != 0 ) {\n\t\t\t\t\t tips.error(res.msg);\n\t\t\t\t } else {\n\t\t\t\t\t tips.success(res.msg);\n\t\t\t\t\t $('#treeGrid').TreeGrid('reload');\n\t\t\t\t }\n\t\t\t });\n\t\t});\n\t} ,\n\n\n\t//初始化tree grid\n\tinitGrid : function () {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query , '' , uri);\n\n\t\t$('#treeGrid').TreeGrid({\n\t\t\turi : Param.uri.read ,\n\t\t\tfield : 'text' , //显示箭头的字段\n\t\t\tparam : Param.query ,  //查询参数\n\t\t\trowStyle : function (row) {\n\t\t\t\tif ( row.status == 0 ) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tloadSuccess : function (rows , settings) {\n\t\t\t\tvar options = '<option value=\"0\" selected>根目录</option>';\n\t\t\t\toptions += form_options_rows(rows , settings);\n\t\t\t\t$('select[name=\"pid\"]').html(options);\n\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif ( oldUri == uri ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params , '' , oldUri);\n\t\t\t\thistory.replaceState(settings.param , '' , uri);\n\t\t\t}\n\t\t});\n\t}\n\n\n};\n\n//pop state 事件\nwindow.onpopstate = function (event) {\n\tif ( event && event.state ) {\n\t\t$('#searchForm').reloadForm(event.state);\n\t\tvar $treeGrid = $('#treeGrid');\n\t\t$treeGrid.TreeGrid('setParam' , event.state);\n\t\t$treeGrid.TreeGrid('reload');\n\t}\n};"
  },
  {
    "path": "resources/assets/static/js/mp/MerGoods.js",
    "content": "/**\n * MerGoods JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-10-11\n */\n\nvar MerGoods = {\n  config : {\n    id : 0 ,\n    content : null\n  } ,\n  init : function () {\n    //重新设置菜单\n    if ( ! empty( Param.uri.menu ) ) {\n      Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri=\"' + Param.uri.menu + '\"]' );\n    }\n\n    //初始化ajax 提示框\n    loading.initAjax();\n\n    //初始化页面按钮\n    this.initBtn();\n\n    //初始化查询form\n    this.initSearchForm();\n\n    //初始化数据表\n    this.initGrid();\n    this.initIconGrid();\n    this.initOrderGrid();\n    this.initCommentsGrid();\n\n    $( '.dtp' ).datetimepicker( DTP_DATETIME_OPTION );\n    KE_OPTIONS.uploadJson = Param.uri.uploadKE;\n    this.config.content = KindEditor.create( 'textarea[name=\"content\"]' , KE_OPTIONS );\n  } ,\n\n  //初始化查询form\n  initSearchForm : function () {\n    var $searchForm = $( '#searchForm' );\n    $searchForm.reloadForm( Param.query );\n\n    //查询按钮\n    $( '#searchBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n\n      var $dataGrid = $( '#dataGrid' );\n      var param = $dataGrid.TableGrid( 'getParam' );\n\n      param = $.extend( {} , param , $( '#searchForm' ).serializeObject() );\n      param.page = 1;\n\n      $dataGrid.TableGrid( 'setParam' , param );\n      $dataGrid.TableGrid( 'reload' );\n    } );\n  } ,\n\n  //显示 portlet\n  setPortletShow : function ( type ) {\n    var $tablePortlet = $( '#tablePortlet' );\n    var $addEditPortlet = $( '#addEditPortlet' );\n\n    $tablePortlet.slideUp( 'fast' );\n    if ( type == 'add' ) {\n      if ( ! $addEditPortlet.hasClass( 'blue' ) ) {\n        $addEditPortlet.removeClass( 'green-meadow' ).addClass( 'blue' );\n      }\n\n      $addEditPortlet.find( '.caption-subject' ).html( '新增 ' + Param.pageTitle );\n    } else if ( type == 'edit' ) {\n      if ( ! $addEditPortlet.hasClass( 'green-meadow' ) ) {\n        $addEditPortlet.removeClass( 'blue' ).addClass( 'green-meadow' );\n      }\n      $addEditPortlet.find( '.caption-subject' ).html( '编辑 ' + Param.pageTitle );\n    }\n\n    //$('#data-table-portlet').slideUp('fast');\n    $addEditPortlet.show();\n  } ,\n\n  //关闭 portlet\n  setPortletHide : function () {\n    $( '#tablePortlet' ).slideDown( 'fast' );\n    $( '#addEditPortlet' ).slideUp( 'fast' );\n  } ,\n\n\n  //初始化各种按钮\n  initBtn : function () {\n    var self = this;\n\n    //打开添加框\n    $( '#addNewBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      self.setPortletShow( 'add' );\n\n      var $form = $( '#addEditForm' );\n\n      $form.reloadForm( Param.defaultRow );\n      setImgPreview.clear( 'icon' );\n\n      var $goodsTabs = $( '#goodsTabs' );\n      $goodsTabs.find( 'a:eq(0)' ).tab( 'show' );\n      $goodsTabs.find( '#goodsTabs li:gt(0)' ).hide();\n\n      self.config[ 'content' ].html( '' );\n\n      $form.attr( 'action' , Param.uri.insert );\n    } );\n\n    //编辑按钮\n    $( document ).on( 'click' , '.editBtn' , function ( e ) {\n      e.preventDefault();\n      self.setPortletShow( 'edit' );\n\n      //处理tab\n      var $goodsTabs = $( '#goodsTabs' );\n      $goodsTabs.find( 'a:eq(0)' ).tab( 'show' );\n      $goodsTabs.find( '#goodsTabs li' ).show();\n\n      var id = $( this ).data( 'id' );\n      self.config[ 'id' ] = id;\n\n      var row = $( '#dataGrid' ).TableGrid( 'getRow' , id );\n      var $basicForm = $( '#addEditForm' );\n      $basicForm.reloadForm( row );\n      $basicForm.attr( 'action' , Param.uri.update + row.id );\n\n      //处理seo form\n      $( '#seoForm' ).reloadForm( row );\n\n      //处理profile form\n      $( '#profileForm' ).reloadForm( row );\n      self.config[ 'content' ].html( row.content );\n\n      //加载图片\n      Param.queryIcon[ 'goodsId' ] = id;\n      var $iconGrid = $( '#iconGrid' );\n      $iconGrid.TableGrid( 'setParam' , Param.queryIcon );\n      $iconGrid.TableGrid( 'reload' );\n\n      //加载订单\n      Param.queryOrder[ 'goodsId' ] = id;\n      var $orderGrid = $( '#orderGrid' );\n      $orderGrid.TableGrid( 'setParam' , Param.queryOrder );\n      $orderGrid.TableGrid( 'reload' );\n\n      //加载评论\n      Param.queryComments[ 'typeId' ] = id;\n      var $commentsGrid = $( '#commentsGrid' );\n      $commentsGrid.TableGrid( 'setParam' , Param.queryComments );\n      $commentsGrid.TableGrid( 'reload' );\n\n    } );\n\n    //提交seo信息\n    $( '#submitSeoBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var data = $( '#seoForm' ).serializeObject();\n      $.post( Param.uri.update + self.config.id , data )\n       .fail( function ( res ) {\n         tips.error( res.responseText );\n       } )\n       .done( function ( res ) {\n         if ( res.code == 1001 ) {\n           //需要登录\n           tips.error( '请先登录' );\n         } else if ( res.code != 0 ) {\n           tips.error( res.msg );\n         } else {\n           tips.success( res.msg );\n           $( '#dataGrid' ).TableGrid( 'reload' );\n         }\n       } );\n\n    } );\n\n    //提交 profile 信息\n    $( '#submitProfileBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var data = $( '#profileForm' ).serializeObject();\n\n      $.post( Param.uri.updateProfile + self.config.id , data )\n       .fail( function ( res ) {\n         tips.error( res.responseText );\n       } )\n       .done( function ( res ) {\n         if ( res.code == 1001 ) {\n           //需要登录\n           tips.error( '请先登录' );\n         } else if ( res.code != 0 ) {\n           tips.error( res.msg );\n         } else {\n           tips.success( res.msg );\n           $( '#dataGrid' ).TableGrid( 'reload' );\n         }\n       } );\n    } );\n\n\n    $( '#destroySelectBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var ids = $( '.checker:checked' ).serializeJSON().selectChecker;\n      if ( empty( ids ) ) {\n        tips.error( '请选择要删除的记录' );\n        return;\n      }\n      self.delData( ids );\n    } );\n\n    //提交添加编辑窗\n    $( '#submitFormBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var $form = $( '#addEditForm' );\n\n      if ( $form.validForm() ) {\n        var data = $form.serializeObject();\n\n        $.post( $form.attr( 'action' ) , data )\n         .fail( function ( res ) {\n           tips.error( res.responseText );\n         } )\n         .done( function ( res ) {\n           if ( res.code == 1001 ) {\n             //需要登录\n             tips.error( '请先登录' );\n           } else if ( res.code != 0 ) {\n             tips.error( res.msg );\n           } else {\n             tips.success( res.msg );\n             $( '#dataGrid' ).TableGrid( 'reload' );\n             self.setPortletHide();\n           }\n         } );\n      }\n    } );\n\n    //关闭添加编辑窗\n    $( '.closePortletBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      self.setPortletHide();\n    } );\n\n    //上传按钮\n    $( '#iconUploadBtn' ).Uploader( {\n      uri : Param.uri.upload , //上传文件\n      param : Param.uploadParam ,\n      album : true ,\n      albumUri : Param.uri.album ,\n      albumCatalogUri : Param.uri.albumCatalog ,\n      albumParam : Param.albumParam ,\n      onSuccess : function ( ret ) {\n        tips.success( ret.msg );\n        if ( ret.code == 0 ) {\n          self.insertIcon( ret.data.savePath );\n          //setImgPreview.set( 'icon' , ret.data.savePath );\n        }\n      } ,\n      onChooseAlbum : function ( uri ) {\n        self.insertIcon( uri );\n        //setImgPreview.set( 'icon' , uri );\n      }\n    } );\n\n    //设置 商品状态\n    $( document ).on( 'click' , '.setStatusBtn' , function ( e ) {\n      e.preventDefault();\n\n      var id = $( this ).data( 'id' );\n      var data = {\n        status : $( this ).data( 'status' )\n      };\n\n      sure.init( '确定更新状态吗?' , function () {\n        $.post( Param.uri.update + id , data )\n         .fail( function ( res ) {\n           tips.error( res.responseText );\n         } )\n         .done( function ( res ) {\n           if ( res.code != 0 ) {\n             tips.error( res.msg );\n             return false;\n           }\n           tips.success( res.msg );\n           $( '#dataGrid' ).TableGrid( 'reload' );\n         } );\n      } );\n    } );\n\n    $( document ).on( 'click' , '.setSelectStatusBtn' , function ( e ) {\n      e.preventDefault();\n      console.log( $( '.checker:checked' ).serializeJSON() );\n      var ids = $( '.checker:checked' ).serializeJSON().selectChecker;\n      if ( empty( ids ) ) {\n        tips.error( '请选择要操作的商品' );\n        return false;\n      }\n\n      var data = {\n        ids : ids ,\n        status : $( this ).data( 'status' )\n      };\n\n      $.post( Param.uri.updateByIds , data )\n       .fail( function ( res ) {\n         tips.error( res.responseText );\n       } )\n       .done( function ( res ) {\n         if ( res.code != 0 ) {\n           tips.error( res.msg );\n           return false;\n         }\n         tips.success( res.msg );\n         $( '#dataGrid' ).TableGrid( 'reload' );\n       } );\n\n    } );\n\n    //设置为封面\n    $( document ).on( 'click' , '.setCoverBtn' , function ( e ) {\n      e.preventDefault();\n\n      var data = {\n        id : $( this ).data( 'id' )\n      };\n      $.get( Param.uri.setIconCover , data )\n       .fail( function ( res ) {\n         tips.error( res.responseText );\n       } )\n       .done( function ( res ) {\n         if ( res.code != 0 ) {\n           tips.error( res.msg );\n           return false;\n         }\n         tips.success( res.msg );\n         $( '#iconGrid' ).TableGrid( 'reload' );\n       } );\n\n    } );\n\n    //删除图片\n    $( document ).on( 'click' , '.destroyIconBtn' , function ( e ) {\n      e.preventDefault();\n      var data = {\n        ids : $( this ).data( 'id' )\n      };\n\n      sure.init( '确认删除图片吗?' , function () {\n        $.post( Param.uri.destroyIcon , data )\n         .fail( function ( res ) {\n           tips.error( res.responseText );\n         } )\n         .done( function ( res ) {\n           if ( res.code != 0 ) {\n             tips.error( res.msg );\n             return false;\n           }\n           tips.success( res.msg );\n           $( '#iconGrid' ).TableGrid( 'reload' );\n         } );\n      } );\n\n    } );\n\n    $( document ).on( 'click' , '.setCommentStatusBtn' , function ( e ) {\n      e.preventDefault();\n\n      var data = {\n        status : $( this ).data( 'status' )\n      };\n\n      $.post( Param.uri.updateComments + $( this ).data( 'id' ) , data )\n       .fail( function ( res ) {\n         tips.error( res.responseText );\n       } )\n       .done( function ( res ) {\n         if ( res.code != 0 ) {\n           tips.error( res.msg );\n           return false;\n         }\n         tips.success( res.msg );\n         $( '#commentsGrid' ).TableGrid( 'reload' );\n       } );\n\n    } );\n\n  } ,\n\n  //添加图片\n  insertIcon : function ( uri ) {\n    var data = {\n      goods_id : this.config.id ,\n      uri : uri\n    };\n    $.post( Param.uri.insertIcon , data )\n     .fail( function ( res ) {\n       tips.error( res.responseText );\n     } )\n     .done( function ( res ) {\n       if ( res.code != 0 ) {\n         tips.error( res.msg );\n         return false;\n       }\n       tips.success( res.msg );\n       $( '#iconGrid' ).TableGrid( 'reload' );\n     } );\n  } ,\n\n  //初始化grid\n  initGrid : function () {\n    var uri = Param.uri.this + '?' + $.param( Param.query );\n    history.replaceState( Param.query , '' , uri );\n\n    $( '#dataGrid' ).TableGrid( {\n      uri : Param.uri.read ,\n      selectAll : true ,\n      param : Param.query ,\n      rowStyle : function ( row ) {\n        if ( row.status != 1 ) {\n          return 'warning';\n        }\n      } ,\n      loadSuccess : function ( rows , settings ) {\n        var oldUri = window.location.href;\n        var uri = Param.uri.this + '?' + $.param( settings.param );\n        if ( oldUri == uri ) {\n          return false;\n        }\n\n        var params = $.getUrlParams( window.location.href );\n        history.pushState( params , '' , oldUri );\n        history.replaceState( settings.param , '' , uri );\n      }\n    } );\n  } ,\n\n  initIconGrid : function () {\n    var self = this;\n\n    $( '#iconGrid' ).TableGrid( {\n      uri : Param.uri.readIcon ,\n      param : Param.queryIcon ,\n      loadAfterInit : false ,\n      pagination : false\n    } );\n  } ,\n\n  initOrderGrid : function () {\n    $( '#orderGrid' ).TableGrid( {\n      uri : Param.uri.readOrder ,\n      param : Param.queryOrder ,\n      loadAfterInit : false\n    } );\n  } ,\n\n  initCommentsGrid : function () {\n    $( '#commentsGrid' ).TableGrid( {\n      uri : Param.uri.readComments ,\n      param : Param.queryComments ,\n      loadAfterInit : false\n    } );\n  } ,\n};\n\n//pop state 事件\nwindow.onpopstate = function ( event ) {\n  if ( event && event.state ) {\n    $( '#searchForm' ).reloadForm( event.state );\n    var $dataGrid = $( '#dataGrid' );\n    $dataGrid.TableGrid( 'setParam' , event.state );\n    $dataGrid.TableGrid( 'reload' );\n  }\n};\nvar statusColor = { \"-1\" : 'bg-red' , \"0\" : 'label-primary' , \"1\" : 'label-default' };\nvar formatStatus = function ( value ) {\n  return '<span class=\"label label-sm ' + statusColor[ value ] + '\">' + Param.status[ value ] + '</span>';\n};\n\nvar formatGoodsIcon = function ( value ) {\n  if ( empty( value ) ) {\n    return '';\n  }\n\n  var uri = Param.uri.img + get_thumb( value , 160 );\n  return '<a href=\"' + uri + '\" target=\"_blank\"><img src=\"' + uri + '\" width=\"60\"></a>';\n};\n\nvar formatName = function ( value , row ) {\n  var html = '[' + row.catalog_text + ']';\n\n  html += '<a href=\"#' + row.id + '\">' + row.name + '</a> ';\n\n  if ( ! empty( row.pid ) ) {\n    html += '<span class=\"badge badge-default\"><a href=\"#\">#' + row.pid + '</a></span>';\n  }\n\n  if ( row.recommend == 1 ) {\n    html += '<span class=\"badge badge-primary\">荐</span> ';\n  }\n\n  if ( row.hot == 1 ) {\n    html += '<span class=\"badge badge-danger\">热</span> ';\n  }\n\n  if ( row.cheap == 1 ) {\n    html += '<span class=\"badge badge-warning\">惠</span> ';\n  }\n\n  return html;\n};\n\nvar optSetStatus = function ( _ , row ) {\n  if ( row.status != 1 ) {\n    return '<a href=\"\" data-id=\"' + row.id + '\" data-status=\"1\" class=\"btn btn-sm default setStatusBtn\">' +\n           '<i class=\"fa fa-arrow-up\"></i> 上架</a>';\n  }\n\n  return '<a href=\"\" data-id=\"' + row.id + '\" data-status=\"-1\" class=\"btn btn-sm red setStatusBtn\">' +\n         '<i class=\"fa fa-arrow-down\"></i> 下架</a>';\n};\n\nvar formatCover = function ( value ) {\n  if ( value == 1 ) {\n    return '<i class=\"fa fa-check\"></i>';\n  }\n  return '';\n};\n\nvar optIconDefault = function ( _ , row ) {\n  if ( row.is_cover == 0 ) {\n    return '<a href=\"#\" class=\"btn btn-sm default setCoverBtn\" data-id=\"' + row.id + '\">' +\n           '<i class=\"fa fa-check\"></i> 设为封面</a> ';\n  }\n  return '';\n};\n\nvar optDestroy = function ( _ , row ) {\n  return '<a href=\"#\" class=\"btn btn-sm red destroyIconBtn\" data-id=\"' + row.id + '\">' +\n         '<i class=\"fa fa-trash\"></i> 删除</a> ';\n};\n\n\nvar formatCommentStatus = function ( value ) {\n  return '<span class=\"label label-sm ' + statusColor[ value ] + '\">' +\n         Param.commentStatus[ value ] + '</span>';\n};\n\nvar optCommentStatus = function ( _ , row ) {\n  if ( row.status == 0 ) {\n    return '<a href=\"#\" data-id=\"' + row.id + '\" data-status=\"1\" class=\"btn btn-sm red setCommentStatusBtn\">' +\n           '<i class=\"fa fa-check\"></i> 审核通过</a>';\n  } else {\n    return '<a href=\"#\" data-id=\"' + row.id + '\" data-status=\"0\" class=\"btn btn-sm default setCommentStatusBtn\">' +\n           '<i class=\"fa fa-check\"></i> 取消审核</a>';\n  }\n\n};"
  },
  {
    "path": "resources/assets/static/js/mp/MerGoodsCatalog.js",
    "content": "/**\n * MerGoodsCatalog JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-10-11\n */\n\nvar MerGoodsCatalog = {\n  config : {} ,\n  init : function () {\n    //重新设置菜单\n    if ( ! empty( Param.uri.menu ) ) {\n      Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri=\"' + Param.uri.menu + '\"]' );\n    }\n\n    //初始化ajax 提示框\n    loading.initAjax();\n\n    //初始化页面按钮\n    this.initBtn();\n\n    //初始化查询form\n    this.initSearchForm();\n\n    //初始化数据表\n    this.initGrid();\n\n\n  } ,\n\n  //初始化查询form\n  initSearchForm : function () {\n    var $searchForm = $( '#searchForm' );\n    $searchForm.reloadForm( Param.query );\n\n    //查询按钮\n    $( '#searchBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n\n      var $treeGrid = $( '#treeGrid' );\n      var param = $treeGrid.TreeGrid( 'getParam' );\n\n      param = $.extend( {} , param , $( '#searchForm' ).serializeObject() );\n      param.page = 1;\n\n      $treeGrid.TreeGrid( 'setParam' , param );\n      $treeGrid.TreeGrid( 'reload' );\n    } );\n  } ,\n\n  //显示 portlet\n  setPortletShow : function ( type ) {\n    var $tablePortlet = $( '#tablePortlet' );\n    var $addEditPortlet = $( '#addEditPortlet' );\n\n    $tablePortlet.slideUp( 'fast' );\n    if ( type == 'add' ) {\n      if ( ! $addEditPortlet.hasClass( 'blue' ) ) {\n        $addEditPortlet.removeClass( 'green-meadow' ).addClass( 'blue' );\n      }\n\n      $addEditPortlet.find( '.caption-subject' ).html( '新增 ' + Param.pageTitle );\n    } else if ( type == 'edit' ) {\n      if ( ! $addEditPortlet.hasClass( 'green-meadow' ) ) {\n        $addEditPortlet.removeClass( 'blue' ).addClass( 'green-meadow' );\n      }\n      $addEditPortlet.find( '.caption-subject' ).html( '编辑 ' + Param.pageTitle );\n    }\n\n    //$('#data-table-portlet').slideUp('fast');\n    $addEditPortlet.show();\n  } ,\n\n  //关闭 portlet\n  setPortletHide : function () {\n    $( '#tablePortlet' ).slideDown( 'fast' );\n    $( '#addEditPortlet' ).slideUp( 'fast' );\n  } ,\n\n\n  //初始化各种按钮\n  initBtn : function () {\n    var self = this;\n\n    //打开添加框\n    $( '#addNewBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      self.setPortletShow( 'add' );\n\n      var $form = $( '#addEditForm' );\n\n      $form.reloadForm( Param.defaultRow );\n      setImgPreview.clear( 'icon' );\n      setImgPreview.clear( 'icon' );\n\n\n      $form.attr( 'action' , Param.uri.insert );\n    } );\n\n    //编辑按钮\n    $( document ).on( 'click' , '.editBtn' , function ( e ) {\n      e.preventDefault();\n      self.setPortletShow( 'edit' );\n\n      var id = $( this ).data( 'id' );\n      var row = $( '#treeGrid' ).TreeGrid( 'getRow' , id );\n      var $form = $( '#addEditForm' );\n\n      $form.reloadForm( row );\n      setImgPreview.set( 'icon' , row.icon );\n      setImgPreview.set( 'icon' , row.icon );\n      setImgPreview.set( 'icon' , row.icon );\n\n\n      $form.attr( 'action' , Param.uri.update + row.id );\n    } );\n\n    //删除一行\n    $( document ).on( 'click' , '.destroyBtn' , function ( e ) {\n      e.preventDefault();\n      var id = $( this ).data( 'id' );\n      self.delData( id );\n    } );\n\n    $( '#destroySelectBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var ids = $( '.checker:checked' ).serializeJSON().selectChecker;\n      if ( empty( ids ) ) {\n        tips.error( '请选择要删除的记录' );\n        return;\n      }\n      self.delData( ids );\n    } );\n\n    //提交添加编辑窗\n    $( '#submitFormBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var $form = $( '#addEditForm' );\n\n      if ( $form.validForm() ) {\n        var data = $form.serializeObject();\n\n        $.post( $form.attr( 'action' ) , data )\n         .fail( function ( res ) {\n           tips.error( res.responseText );\n         } )\n         .done( function ( res ) {\n           if ( res.code == 1001 ) {\n             //需要登录\n             tips.error( '请先登录' );\n           } else if ( res.code != 0 ) {\n             tips.error( res.msg );\n           } else {\n             tips.success( res.msg );\n             $( '#treeGrid' ).TreeGrid( 'reload' );\n             self.setPortletHide();\n           }\n         } );\n      }\n    } );\n\n    //关闭添加编辑窗\n    $( '#closePortletBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      self.setPortletHide();\n    } );\n\n    //上传按钮\n    $( '#iconUploadBtn' ).Uploader( {\n      uri : Param.uri.upload , //上传文件\n      param : Param.uploadParam ,\n      album : true ,\n      albumUri : Param.uri.album ,\n      albumCatalogUri : Param.uri.albumCatalog ,\n      albumParam : Param.albumParam ,\n      onSuccess : function ( ret ) {\n        tips.success( ret.msg );\n        if ( ret.code == 0 ) {\n          setImgPreview.set( 'icon' , ret.data.savePath );\n        }\n      } ,\n      onChooseAlbum : function ( uri ) {\n        setImgPreview.set( 'icon' , uri );\n      }\n    } );\n\n\n  } ,\n\n  delData : function ( ids ) {\n    var self = this;\n    var data = {\n      ids : ids\n    };\n\n    sure.init( '是否删除?' , function () {\n\n      $.post( Param.uri.destroy , data )\n       .fail( function ( res ) {\n         tips.error( res.responseText );\n       } )\n       .done( function ( res ) {\n         if ( res.code == 1001 ) {\n           //需要登录\n           tips.error( '请先登录' );\n         } else if ( res.code != 0 ) {\n           tips.error( res.msg );\n         } else {\n           tips.success( res.msg );\n           $( '#treeGrid' ).TreeGrid( 'reload' );\n         }\n       } );\n    } );\n  } ,\n\n\n  //初始化tree grid\n  initGrid : function () {\n    var self = this;\n    var uri = Param.uri.this + '?' + $.param( Param.query );\n    history.replaceState( Param.query , '' , uri );\n\n    $( '#treeGrid' ).TreeGrid( {\n      uri : Param.uri.read ,\n      field : 'text' , //显示箭头的字段\n      param : Param.query ,  //查询参数\n      rowStyle : function ( row ) {\n        if ( row.status == 0 ) {\n          return 'warning';\n        }\n      } ,\n      loadSuccess : function ( rows , settings ) {\n        var options = '<option value=\"0\" selected>根目录</option>';\n        options += form_options_rows( rows , settings );\n        $( 'select[name=\"pid\"]' ).html( options );\n\n        var oldUri = window.location.href;\n        var uri = Param.uri.this + '?' + $.param( settings.param );\n        if ( oldUri == uri ) {\n          return false;\n        }\n\n        var params = $.getUrlParams( window.location.href );\n        history.pushState( params , '' , oldUri );\n        history.replaceState( settings.param , '' , uri );\n      }\n    } );\n  }\n\n\n};\n\n//pop state 事件\nwindow.onpopstate = function ( event ) {\n  if ( event && event.state ) {\n    $( '#searchForm' ).reloadForm( event.state );\n    var $treeGrid = $( '#treeGrid' );\n    $treeGrid.TreeGrid( 'setParam' , event.state );\n    $treeGrid.TreeGrid( 'reload' );\n  }\n};\n\nvar typeColor = {\n  goods : 'default' ,\n  virtual : 'primary' ,\n  service : 'success'\n};"
  },
  {
    "path": "resources/assets/static/js/mp/MerOrder.js",
    "content": "/**\n * MerOrder JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-18\n */\n\nvar MerOrder = {\n  config : {\n    row : null ,\n  } ,\n  init : function () {\n    //重新设置菜单\n    if ( ! empty( Param.uri.menu ) ) {\n      Layout.setSidebarMenuActiveLink( 'set' , 'a[data-uri=\"' + Param.uri.menu + '\"]' );\n    }\n\n    //初始化ajax 提示框\n    loading.initAjax();\n\n    //初始化页面按钮\n    this.initBtn();\n\n    //初始化查询form\n    this.initSearchForm();\n\n    //初始化数据表\n    this.initGrid();\n    this.initItemsGrid();\n    this.initLogsGrid();\n\n  } ,\n\n  //初始化查询form\n  initSearchForm : function () {\n    var $searchForm = $( '#searchForm' );\n    $searchForm.reloadForm( Param.query );\n\n    //查询按钮\n    $( '#searchBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n\n      var $dataGrid = $( '#dataGrid' );\n      var param = $dataGrid.TableGrid( 'getParam' );\n\n      param = $.extend( {} , param , $( '#searchForm' ).serializeObject() );\n      param.page = 1;\n\n      $dataGrid.TableGrid( 'setParam' , param );\n      $dataGrid.TableGrid( 'reload' );\n    } );\n  } ,\n\n  //显示 portlet\n  setPortletShow : function ( type ) {\n    var $tablePortlet = $( '#tablePortlet' );\n    var $addEditPortlet = $( '#addEditPortlet' );\n\n    $tablePortlet.slideUp( 'fast' );\n    if ( type == 'add' ) {\n      if ( ! $addEditPortlet.hasClass( 'blue' ) ) {\n        $addEditPortlet.removeClass( 'green-meadow' ).addClass( 'blue' );\n      }\n\n      $addEditPortlet.find( '.caption-subject' ).html( '新增 ' + Param.pageTitle );\n    } else if ( type == 'edit' ) {\n      if ( ! $addEditPortlet.hasClass( 'green-meadow' ) ) {\n        $addEditPortlet.removeClass( 'blue' ).addClass( 'green-meadow' );\n      }\n      $addEditPortlet.find( '.caption-subject' ).html( '编辑 ' + Param.pageTitle );\n    }\n\n    //$('#data-table-portlet').slideUp('fast');\n    $addEditPortlet.show();\n  } ,\n\n  //关闭 portlet\n  setPortletHide : function () {\n    $( '#tablePortlet' ).slideDown( 'fast' );\n    $( '#addEditPortlet' ).slideUp( 'fast' );\n  } ,\n\n\n  //初始化各种按钮\n  initBtn : function () {\n    var self = this;\n\n    //编辑按钮\n    $( document ).on( 'click' , '.editBtn' , function ( e ) {\n      e.preventDefault();\n      self.setPortletShow( 'edit' );\n\n      var id = $( this ).data( 'id' );\n      var row = $( '#dataGrid' ).TableGrid( 'getRow' , id );\n      self.config.row = row;\n      //var $form = $( '#addEditForm' );\n\n      $( '.orderTab a:first' ).tab( 'show' );\n      $( '.orderDetail' ).FillValue( 'reload' , row );\n\n      Param.queryItems[ 'orderId' ] = id;\n      var $itemsGrid = $( '#itemsGrid' );\n      $itemsGrid.TableGrid( 'setParam' , Param.queryItems );\n      $itemsGrid.TableGrid( 'reload' );\n\n      Param.queryLogs[ 'orderId' ] = id;\n      var $logsGrid = $( '#logsGrid' );\n      $logsGrid.TableGrid( 'setParam' , Param.queryLogs );\n      $logsGrid.TableGrid( 'reload' );\n    } );\n\n\n    //提交添加编辑窗\n    $( '#submitFormBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      var $form = $( '#addEditForm' );\n\n      if ( $form.validForm() ) {\n        var data = $form.serializeObject();\n\n        $.post( $form.attr( 'action' ) , data )\n         .fail( function ( res ) {\n           tips.error( res.responseText );\n         } )\n         .done( function ( res ) {\n           if ( res.code == 1001 ) {\n             //需要登录\n             tips.error( '请先登录' );\n           } else if ( res.code != 0 ) {\n             tips.error( res.msg );\n           } else {\n             tips.success( res.msg );\n             $( '#dataGrid' ).TableGrid( 'reload' );\n             self.setPortletHide();\n           }\n         } );\n      }\n    } );\n\n    //关闭添加编辑窗\n    $( '.closePortletBtn' ).on( 'click' , function ( e ) {\n      e.preventDefault();\n      self.setPortletHide();\n    } );\n\n\n    $( document ).on( 'click' , '.changeStatusBtn' , function ( e ) {\n      e.preventDefault();\n\n      var id = $( this ).data( 'id' );\n      var data = {\n        status : $( this ).data( 'status' )\n      };\n      sure.init( '确定修改订单状态吗?' , function () {\n        $.post( Param.uri.changeStatus + id , data )\n         .fail( function ( res ) {\n           tips.error( res.responseText );\n         } )\n         .done( function ( res ) {\n           if ( res.code != 0 ) {\n             tips.error( res.msg );\n             return false;\n           }\n           $( '#dataGrid' ).TableGrid( 'reload' );\n           self.config.row.status = data.status;\n           $( '.orderDetail' ).FillValue( 'reload' , self.config.row );\n         } );\n      } );\n    } );\n\n\n  } ,\n\n  //初始化grid\n  initGrid : function () {\n    var self = this;\n    var uri = Param.uri.this + '?' + $.param( Param.query );\n    history.replaceState( Param.query , '' , uri );\n\n    $( '#dataGrid' ).TableGrid( {\n      uri : Param.uri.read ,\n      selectAll : true ,\n      param : Param.query ,\n      rowStyle : function ( row ) {\n        if ( row.status == 0 ) {\n          return 'warning';\n        }\n      } ,\n      loadSuccess : function ( rows , settings ) {\n        var oldUri = window.location.href;\n        var uri = Param.uri.this + '?' + $.param( settings.param );\n        if ( oldUri == uri ) {\n          return false;\n        }\n\n        var params = $.getUrlParams( window.location.href );\n        history.pushState( params , '' , oldUri );\n        history.replaceState( settings.param , '' , uri );\n      }\n    } );\n  } ,\n\n  //初始化itemsGrid\n  initItemsGrid : function () {\n    $( '#itemsGrid' ).TableGrid( {\n      uri : Param.uri.read_items ,\n      param : Param.queryItems ,\n      loadAfterInit : false ,\n      pagination : false\n    } );\n  } ,\n\n  //初始化logsGrid\n  initLogsGrid : function () {\n    $( '#logsGrid' ).TableGrid( {\n      uri : Param.uri.read_logs ,\n      param : Param.queryItems ,\n      loadAfterInit : false ,\n    } );\n  } ,\n\n};\n\n//pop state 事件\nwindow.onpopstate = function ( event ) {\n  if ( event && event.state ) {\n    $( '#searchForm' ).reloadForm( event.state );\n    var $dataGrid = $( '#dataGrid' );\n    $dataGrid.TableGrid( 'setParam' , event.state );\n    $dataGrid.TableGrid( 'reload' );\n  }\n};\n\nvar formatOrderNo = function ( value , row ) {\n  return value + '<br><small class=\"text-muted\">' + row.created_at + '</small>';\n};\n\nvar formatUser = function ( value , row ) {\n  return row.nickname + '<br><small class=\"text-muted\">' + row.phone + '</small>'\n};\n\nvar formatAddress = function ( value , row ) {\n  return row.address_name + '<br>' +\n         '<small class=\"text-muted\">' + row.address_phone + '</small><br>' +\n         '<small class=\"text-muted\">' + row.address_area_text + row.address + '</small> ';\n};\n\nvar formatChannel = function ( value ) {\n  return Param.payChannel[ value ];\n};\n\nvar formatCurrency = function ( value ) {\n  return Param.currency[ value ];\n};\n\nvar colorStatus = {\n  0 : 'default' ,\n  10 : FLAT_BG_COLOR.green_jungle ,\n\n  20 : FLAT_BG_COLOR.blue ,\n  21 : FLAT_BG_COLOR.blue_madison ,\n  22 : FLAT_BG_COLOR.blue_hoki ,\n  29 : FLAT_BG_COLOR.blue_steel ,\n\n  30 : FLAT_BG_COLOR.red ,\n  31 : FLAT_BG_COLOR.red_thunderbird ,\n  32 : FLAT_BG_COLOR.grey_silver ,\n  39 : FLAT_BG_COLOR.yellow ,\n\n  99 : \"dark\"\n};\n\nvar formatStatus = function ( value ) {\n  return '<span class=\"label label-sm bg-' + colorStatus[ value ] + '\">' + Param.status[ value ] + '</span>';\n};\n\nvar formatRemark = function ( value , row ) {\n  var userRemark = empty( row.user_remark ) ? '' : row.user_remark;\n  var sysRemark = empty( row.sys_remark ) ? '' : row.sys_remark;\n  return '<span class=\"badge badge-primary\"><i class=\"fa fa-user\"></i></span>' + userRemark + '<br>' +\n         '<span class=\"badge badge-danger\"><i class=\"fa fa-comment\"></i></span>' + sysRemark;\n};\n\nvar optDetail = function ( _ , row ) {\n  return '<a class=\"btn btn-sm grey-cascade editBtn\" data-id=\"' + row.id + '\" href=\"javascript:;\">' +\n         '<i class=\"fa fa-edit\"></i> 详情</a>';\n};\n\nvar formatChangeStatus = function ( value , row ) {\n  var flowTo = Param.flow[ value ].flow;\n  if ( empty( flowTo ) ) {\n    return '';\n  }\n\n  console.log( flowTo );\n  var html = '';\n  for ( var index in flowTo ) {\n    if ( ! flowTo.hasOwnProperty( index ) ) {\n      continue;\n    }\n    var statusTo = flowTo[ index ];\n    var statusText = Param.status[ statusTo ];\n    var color = colorStatus[ statusTo ];\n\n    html += '<a href=\"#\" ' +\n            'data-status=\"' + statusTo + '\" ' +\n            'class=\"btn btn-sm ' + color + ' changeStatusBtn\" ' +\n            'data-id=\"' + row.id + '\">' +\n            statusText + '</a> ';\n  }\n\n  return html;\n};\n\n"
  },
  {
    "path": "resources/assets/static/js/mp/MerUser.js",
    "content": "/**\n * MerUser JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2016-09-16\n */\n\nvar MerUser = {\n\ttoken : $('input[name=_token]').val(),\n\tinit : function () {\n\t\t//重新设置菜单\n\t\tif ( ! empty(Param.uri.menu) ) {\n\t\t\tLayout.setSidebarMenuActiveLink('set' , 'a[data-uri=\"' + Param.uri.menu + '\"]');\n\t\t}\n\n\t\t//初始化ajax 提示框\n\t\tloading.initAjax();\n\n\t\t//初始化页面按钮\n\t\tthis.initBtn();\n\n\t\t//初始化查询form\n\t\tthis.initSearchForm();\n\n\t\t//初始化数据表\n\t\tthis.initGrid();\n\n\n\t} ,\n\n\t//初始化查询form\n\tinitSearchForm : function () {\n\t\tvar $searchForm = $('#searchForm');\n\t\t$searchForm.reloadForm(Param.query);\n\n\t\t//查询按钮\n\t\t$('#searchBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar $dataGrid = $('#dataGrid');\n\t\t\tvar param = $dataGrid.TableGrid('getParam');\n\n\t\t\tparam = $.extend({} , param , $('#searchForm').serializeObject());\n\t\t\tparam.page = 1;\n\n\t\t\t$dataGrid.TableGrid('setParam' , param);\n\t\t\t$dataGrid.TableGrid('reload');\n\t\t});\n\t} ,\n\n\t//显示 portlet\n\tsetPortletShow : function (type) {\n\t\tvar $tablePortlet = $('#tablePortlet');\n\t\tvar $addEditPortlet = $('#addEditPortlet');\n\n\t\t$tablePortlet.slideUp('fast');\n\t\tif ( type == 'add' ) {\n\t\t\tif ( ! $addEditPortlet.hasClass('blue') ) {\n\t\t\t\t$addEditPortlet.removeClass('green-meadow').addClass('blue');\n\t\t\t}\n\n\t\t\t$addEditPortlet.find('.caption-subject').html('新增 ' + Param.pageTitle);\n\t\t} else if ( type == 'edit' ) {\n\t\t\tif ( ! $addEditPortlet.hasClass('green-meadow') ) {\n\t\t\t\t$addEditPortlet.removeClass('blue').addClass('green-meadow');\n\t\t\t}\n\t\t\t$addEditPortlet.find('.caption-subject').html('编辑 ' + Param.pageTitle);\n\t\t}\n\n\t\t//$('#data-table-portlet').slideUp('fast');\n\t\t$addEditPortlet.show();\n\t} ,\n\n//关闭 portlet\n\tsetPortletHide : function () {\n\t\t$('#tablePortlet').slideDown('fast');\n\t\t$('#addEditPortlet').slideUp('fast');\n\t} ,\n\n\n\t//初始化各种按钮\n\tinitBtn : function () {\n\t\tvar self = this;\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(Param.defaultRow);\n\t\t\tsetImgPreview.clear('icon');\n\t\t\tsetImgPreview.clear('icon');\n\n\n\t\t\t$form.attr('action' , Param.uri.insert);\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click' , '.editBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#dataGrid').TableGrid('getRow' , id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm(row);\n\t\t\tsetImgPreview.set('icon' , row.icon);\n\t\t\tsetImgPreview.set('icon' , row.icon);\n\t\t\tsetImgPreview.set('icon' , row.icon);\n\n\n\t\t\t$form.attr('action' , Param.uri.update + '/'+ row.id);\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click' , '.destroyBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData(id);\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif ( empty(ids) ) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.delData(ids);\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif ( $form.validForm() ) {\n\t\t\t\tvar data = $form.serializeObject();\n\t\t\t\tdata._token = self.token;\n\t\t\t\t$.post($form.attr('action') , data)\n\t\t\t\t .fail(function (res) {\n\t\t\t\t\t tips.error(res.responseText);\n\t\t\t\t })\n\t\t\t\t .done(function (res) {\n\t\t\t\t\t if ( res.code == 1001 ) {\n\t\t\t\t\t\t //需要登录\n\t\t\t\t\t\t tips.error('请先登录');\n\t\t\t\t\t } else if ( res.code != 0 ) {\n\t\t\t\t\t\t tips.error(res.msg);\n\t\t\t\t\t } else {\n\t\t\t\t\t\t tips.success(res.msg);\n\t\t\t\t\t\t $('#dataGrid').TableGrid('reload');\n\t\t\t\t\t\t self.setPortletHide();\n\t\t\t\t\t }\n\t\t\t\t });\n\t\t\t}\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n\t\t//上传按钮\n\t\t$('#iconUploadBtn').Uploader({\n\t\t\turi : Param.uri.upload , //上传文件\n\t\t\tparam : Param.uploadParam ,\n\t\t\talbum : true ,\n\t\t\talbumUri : Param.uri.album ,\n\t\t\talbumCatalogUri : Param.uri.albumCatalog ,\n\t\t\talbumParam : Param.albumParam ,\n\t\t\tonSuccess : function (ret) {\n\t\t\t\ttips.success(ret.msg);\n\t\t\t\tif ( ret.code == 0 ) {\n\t\t\t\t\tsetImgPreview.set('icon' , ret.data.uri);\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tonChooseAlbum : function (uri) {\n\t\t\t\tsetImgPreview.set('icon' , uri);\n\t\t\t}\n\t\t});\n\n\t\t$(document).on('click' , '.resetPwdBtn' , function(e){\n\t\t\te.preventDefault();\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tsure.init('重置密码为' + Param.resetPwd , function () {\n\t\t\t\t$.get( Param.uri.resetPwd + '/'+ id )\n\t\t\t\t .fail(function (res) {\n\t\t\t\t\t  tips.error(res.responseText);\n\t\t\t\t })\n\t\t\t\t .done(function (res) {\n\t\t\t\t\t\tif ( res.code != 0 ) {\n\t\t\t\t\t\t\ttips.error( res.msg );\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttips.success( res.msg );\n\t\t\t\t });\n\t\t\t})\n\t\t})\n\n\t} ,\n\n\tdelData : function (ids) {\n\t\tvar self = this;\n\t\tvar data = {\n\t\t\tids : ids,\n\t\t\t_token : this.token\n\t\t};\n\n\t\tsure.init('是否删除?' , function () {\n\n\t\t\t$.post(Param.uri.destroy , data)\n\t\t\t .fail(function (res) {\n\t\t\t\t tips.error(res.responseText);\n\t\t\t })\n\t\t\t .done(function (res) {\n\t\t\t\t if ( res.code == 1001 ) {\n\t\t\t\t\t //需要登录\n\t\t\t\t\t tips.error('请先登录');\n\t\t\t\t } else if ( res.code != 0 ) {\n\t\t\t\t\t tips.error(res.msg);\n\t\t\t\t } else {\n\t\t\t\t\t tips.success(res.msg);\n\t\t\t\t\t $('#dataGrid').TableGrid('reload');\n\t\t\t\t }\n\t\t\t });\n\t\t});\n\t} ,\n\n\t//初始化grid\n\tinitGrid : function () {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query , '' , uri);\n\n\t\t$('#dataGrid').TableGrid({\n\t\t\turi : Param.uri.read ,\n\t\t\tselectAll : true ,\n\t\t\tparam : Param.query ,\n\t\t\trowStyle : function (row) {\n\t\t\t\tif ( row.status == 0 ) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tloadSuccess : function (rows , settings) {\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif ( oldUri == uri ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params , '' , oldUri);\n\t\t\t\thistory.replaceState(settings.param , '' , uri);\n\t\t\t}\n\t\t});\n\t}\n\n};\n\n//pop state 事件\nwindow.onpopstate = function (event) {\n\tif ( event && event.state ) {\n\t\t$('#searchForm').reloadForm(event.state);\n\t\tvar $dataGrid = $('#dataGrid');\n\t\t$dataGrid.TableGrid('setParam' , event.state);\n\t\t$dataGrid.TableGrid('reload');\n\t}\n};\n\nvar optResetPwd = function (value , row ) {\n\treturn '<button class=\"btn btn-sm default resetPwdBtn\" data-id=\"'+ row.id +'\"><i class=\"fa fa-lock\"></i> 重置密码</button>';\n};\n\nvar formatName = function( value , row ){\n\tvar gender = ' ';\n\tif ( row.sex == 1 ) {\n\t\tgender += '<i class=\"fa fa-male\"></i>';\n\t}\n\tif ( row.sex == 2 ) {\n\t\tgender += '<i class=\"fa fa-female\"></i>';\n\t}\n\treturn row.nickname + gender +'<br>' +\n\t       row.phone + '';\n};\n\nvar formatRegFrom = function (value) {\n\treturn Param.regFrom[ value ];\n};"
  },
  {
    "path": "resources/assets/static/plugins/dmg-ui/AreaSelection.js",
    "content": "/**\n * 区域选择\n *\n * @author Zix\n * @version 1.0 2016-05-18\n */\n\n;(function ($) {\n\n\tvar areaSelectionTmp =\n\t\t'<input id=\"areaName{index}\" class=\"form-control\" type=\"text\" placeholder=\"区域\" disabled>' +\n\t\t'<span class=\"input-group-btn\">' +\n\t\t'<button id=\"areaSelectionBtn{index}\" class=\"btn blue\" type=\"button\">选择区域</button>' +\n\t\t'</span>';\n\n\tvar areaSelectionModal\n\t\t= '<div class=\"area-selection\" id=\"areaSelection{index}\">' +\n\t\t  '<div class=\"pull-right\"><a class=\"area-close-btn\" href=\"#\">关闭</a> </div>' +\n\t\t  '<div class=\"tabbable-line\">' +\n\t\t  '<ul class=\"nav nav-tabs\" id=\"areaTab{index}\">' +\n\t\t  '<li class=\"active\"><a id=\"areaTab1{index}\" data-level=\"1\" data-toggle=\"tab\" href=\"#areaContent1{index}\" aria-expanded=\"true\"></a></li>' +\n\t\t  '<li><a id=\"areaTab2{index}\" data-level=\"2\" data-toggle=\"tab\" href=\"#areaContent2{index}\" aria-expanded=\"false\">请选择</a></li>' +\n\t\t  '<li><a id=\"areaTab3{index}\" data-level=\"3\" data-toggle=\"tab\" href=\"#areaContent3{index}\" aria-expanded=\"false\"></a></li>' +\n\t\t  '</ul><div class=\"tab-content\">' +\n\t\t  '<div id=\"areaContent1{index}\" class=\"tab-pane active\">' +\n\t\t  '<ul class=\"list-inline list-unstyled\">' +\n\t\t  '</ul></div>' +\n\t\t  '<div id=\"areaContent2{index}\" class=\"tab-pane\">' +\n\t\t  '<ul class=\"list-inline list-unstyled\"></ul></div>' +\n\t\t  '<div id=\"areaContent3{index}\" class=\"tab-pane\">' +\n\t\t  '<ul class=\"list-inline list-unstyled\"></ul></div></div></div></div>';\n\n\tvar areaItemTmp = '<li><a class=\"area_item\" data-level=\"{level}\" data-id=\"{id}\" href=\"#\">{text}</a> </li>';\n\n\t//初始化页面\n\tvar _initAreaSelection = function ($this , index) {\n\n\t\tvar settings = $this.data('areaSelection');\n\n\t\tsettings.area = [0 , 0 , 0];\n\t\t$this.data('areaSelection' , settings);\n\n\t\t//添加选择按钮\n\t\t$this.wrap('<div class=\"input-group\"></div>');\n\t\t$this.after(areaSelectionTmp.replace(/\\{index}/g , index));\n\n\t\t$('#areaName' + index).val(settings.fullAreaName);\n\t\t//添加选择弹窗\n\t\tvar $areaSelection = $('.area-selection');\n\t\tif ( $areaSelection.length == 0 ) {\n\t\t\t$('body').append(areaSelectionModal.replace(/\\{index}/g , index));\n\t\t}\n\n\t\t$areaSelection = $('#areaSelection' + index);\n\n\t\t//选择按钮事件\n\t\tvar $areaSelectionBtn = $('#areaSelectionBtn' + index);\n\t\t$areaSelectionBtn.on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\t$('#areaSelection' + index).show();\n\t\t\t//定位\n\t\t\tvar pos = $(this).offset();\n\t\t\tvar width = $areaSelection.width();\n\n\t\t\t$areaSelection.css({\n\t\t\t\ttop : (pos.top + $(this).height() + 15) + 'px' ,\n\t\t\t\tleft : (pos.left - width + 60) + 'px' ,\n\t\t\t});\n\t\t});\n\n\t\t//关闭按钮事件\n\t\t$('.area-close-btn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\t$(this).parents('.area-selection').hide();\n\t\t});\n\n\t\t$(document).on('click' , '.area_item' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar level = $(this).data('level');\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar text = $(this).html();\n\n\t\t\tvar $areaTab1 = $('#areaTab1' + index);\n\t\t\tvar $areaTab2 = $('#areaTab2' + index);\n\t\t\tvar $areaTab3 = $('#areaTab3' + index);\n\n\t\t\tif ( level == 1 ) {\n\t\t\t\t$areaTab1.html(text);\n\t\t\t\t$areaTab2.trigger('click');\n\t\t\t\tsetContent2($this , index , id);\n\t\t\t}\n\n\t\t\tif ( level == 2 ) {\n\t\t\t\t$areaTab2.html(text);\n\t\t\t\t$areaTab3.tab('show');\n\t\t\t\tsetContent3($this , index , id);\n\t\t\t}\n\n\t\t\tif ( level == 3 ) {\n\t\t\t\tsettings.area[2] = id;\n\t\t\t\t$areaTab3.html(text);\n\t\t\t\t$(this).val(id);\n\t\t\t\t$('.area-close-btn').trigger('click');\n\t\t\t\tvar name = $areaTab1.html() + $areaTab2.html() + $areaTab3.html();\n\t\t\t\t$('#areaName' + index).val(name);\n\t\t\t\t$this.val(id);\n\t\t\t}\n\t\t});\n\n\t\tvar $areaTab = $('#areaTab' + index);\n\t\t$areaTab.find('a').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar level = $(this).data('level');\n\t\t\tsettings = $this.data('areaSelection');\n\n\t\t\tif ( level == 1 ) {\n\t\t\t\tsetContent1($this , index);\n\t\t\t} else if ( level == 2 ) {\n\t\t\t\tsetContent2($this , index , settings.area[0]);\n\t\t\t\tsettings.area[1] = 0;\n\t\t\t\tsettings.area[2] = 0;\n\t\t\t} else {\n\t\t\t\tsetContent3($this , index , settings.area[1]);\n\t\t\t\tsettings.area[2] = 0;\n\t\t\t}\n\t\t\t$this.data('areaSelection' , settings);\n\t\t});\n\n\t\tsetContent1($this , index);\n\t};\n\n\tvar setContent1 = function ($this , index) {\n\t\tvar settings = $this.data('areaSelection');\n\t\tvar $areaContent1 = $('#areaContent1' + index);\n\t\tvar $areaContent2 = $('#areaContent2' + index);\n\t\tvar $areaContent3 = $('#areaContent3' + index);\n\t\tvar $areaTab1 = $('#areaTab1' + index);\n\t\tvar $areaTab2 = $('#areaTab2' + index);\n\t\tvar $areaTab3 = $('#areaTab3' + index);\n\n\t\tvar id = settings.area[0];\n\n\t\tif ( $areaContent1.find('ul').html() == '' ) {\n\t\t\t//初始化数据\n\t\t\t$.get(settings.uri + 0)\n\t\t\t .fail(function (res) {\n\t\t\t\t tips.error(res.responseText);\n\t\t\t })\n\t\t\t .done(function (res) {\n\t\t\t\t var html = [];\n\t\t\t\t var defaultRow = {};\n\t\t\t\t $.each(res.data , function (i , row) {\n\t\t\t\t\t if ( id > 0 && row.id == id ) {\n\t\t\t\t\t\t defaultRow = row;\n\t\t\t\t\t } else if ( i == 0 ) {\n\t\t\t\t\t\t defaultRow = row;\n\t\t\t\t\t }\n\n\t\t\t\t\t html.push(areaItemTmp.replace(/\\{id}/g , row.id)\n\t\t\t\t\t                      .replace(/\\{text}/g , row.text)\n\t\t\t\t\t                      .replace(/\\{level}/g , row.level));\n\t\t\t\t });\n\n\t\t\t\t settings.area[0] = defaultRow.id;\n\t\t\t\t $this.data('areaSelection' , settings);\n\n\t\t\t\t $areaTab1.html(defaultRow.text);\n\t\t\t\t $areaTab2.html('请选择');\n\t\t\t\t $areaTab3.html('');\n\t\t\t\t $areaContent1.find('ul').html(html.join(''));\n\t\t\t\t $areaContent2.find('ul').html('');\n\t\t\t\t $areaContent3.find('ul').html('');\n\n\t\t\t\t setContent2($this , index , defaultRow.id);\n\t\t\t });\n\t\t} else {\n\t\t\t$areaTab2.html('请选择');\n\t\t\t$areaTab3.html('');\n\t\t\t$areaContent2.find('ul').html('');\n\t\t\t$areaContent3.find('ul').html('');\n\t\t}\n\t};\n\n\tvar setContent2 = function ($this , index , pid) {\n\t\tvar settings = $this.data('areaSelection');\n\n\t\tvar $areaContent2 = $('#areaContent2' + index);\n\t\tvar $areaContent3 = $('#areaContent3' + index);\n\n\t\tvar $areaTab2 = $('#areaTab2' + index);\n\t\tvar $areaTab3 = $('#areaTab3' + index);\n\n\t\tvar id = settings.area[0];\n\t\tif ( $areaContent2.find('ul').html() == '' || id != pid ) {\n\t\t\t//初始化数据\n\t\t\t$.get(settings.uri + pid)\n\t\t\t .fail(function (res) {\n\t\t\t\t tips.error(res.responseText);\n\t\t\t })\n\t\t\t .done(function (res) {\n\t\t\t\t var html = [];\n\t\t\t\t $.each(res.data , function (i , row) {\n\t\t\t\t\t html.push(areaItemTmp.replace(/\\{id}/g , row.id)\n\t\t\t\t\t                      .replace(/\\{text}/g , row.text)\n\t\t\t\t\t                      .replace(/\\{level}/g , row.level));\n\t\t\t\t });\n\t\t\t\t $areaTab2.html('请选择');\n\t\t\t\t $areaTab3.html('');\n\t\t\t\t $areaContent2.find('ul').html(html.join(''));\n\t\t\t\t $areaContent3.find('ul').html('');\n\t\t\t });\n\t\t}\n\t};\n\n\tvar setContent3 = function ($this , index , pid) {\n\t\tvar settings = $this.data('areaSelection');\n\n\t\tvar $areaContent3 = $('#areaContent3' + index);\n\t\tvar $areaTab3 = $('#areaTab3' + index);\n\n\t\tvar id = settings.area[1];\n\n\t\tif ( $areaContent3.find('ul').html() == '' || id != pid ) {\n\t\t\t$.get(settings.uri + pid)\n\t\t\t .fail(function (res) {\n\t\t\t\t tips.error(res.responseText);\n\t\t\t })\n\t\t\t .done(function (res) {\n\t\t\t\t var html = [];\n\t\t\t\t $.each(res.data , function (i , row) {\n\t\t\t\t\t html.push(areaItemTmp.replace(/\\{id}/g , row.id)\n\t\t\t\t\t                        .replace(/\\{text}/g , row.text)\n\t\t\t\t\t                        .replace(/\\{level}/g , row.level));\n\t\t\t\t });\n\t\t\t\t $areaTab3.html('请选择');\n\t\t\t\t $areaContent3.find('ul').html(html.join(''));\n\t\t\t });\n\t\t}\n\n\t};\n\n\t//插件的方法\n\tvar methods = {\n\t\t//初始化\n\t\tinit : function (options) {\n\t\t\treturn this.each(function (index) {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar settings = $this.data('areaSelection');\n\t\t\t\tif ( typeof(settings) == 'undefined' ) {\n\t\t\t\t\t//默认值\n\t\t\t\t\tvar defaults = {\n\t\t\t\t\t\turi : '' ,\n\t\t\t\t\t\tfullAreaName : '' ,\n\t\t\t\t\t\tarea : [0 , 0 , 0] ,\n\t\t\t\t\t\tonError : function (error) {\n\t\t\t\t\t\t\ttips.error(error);\n\t\t\t\t\t\t} ,\n\t\t\t\t\t\tonProgress : function (e) {\n\t\t\t\t\t\t} ,\n\t\t\t\t\t\tonSuccess : function () {\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tsettings = $.extend({} , defaults , options);\n\t\t\t\t\t$this.data('areaSelection' , settings);\n\t\t\t\t} else {\n\t\t\t\t\tsettings = $.extend({} , settings , options);\n\t\t\t\t}\n\n\t\t\t\t//初始化area_selection\n\t\t\t\t_initAreaSelection($this , index);\n\t\t\t});\n\t\t} ,\n\n\t\tsetAreaName : function (fullAreaName) {\n\t\t\t$(this).next().val(fullAreaName);\n\t\t}\n\t};\n\n\t//插件入口\n\t$.fn.AreaSelection = function () {\n\t\tvar method = arguments[0];\n\t\tif ( methods[method] ) {\n\t\t\tmethod = methods[method];\n\t\t\targuments = Array.prototype.slice.call(arguments , 1);\n\t\t} else if ( typeof(method) == 'object' || ! method ) {\n\t\t\tmethod = methods.init;\n\t\t} else {\n\t\t\treturn this;\n\t\t}\n\n\t\treturn method.apply(this , arguments);\n\t}\n})(jQuery);\n"
  },
  {
    "path": "resources/assets/static/plugins/dmg-ui/TableGrid.js",
    "content": "/**\n * FIT Table Grid\n *\n * @author Zix\n * @version 2.0 , 2016-05-03\n */\n\n;(function ( $ ) {\n\n  //保存数据\n  //var fit_grid = [];\n\n  //构建页面数据\n  var _initGrid = function ( $this ) {\n    var settings = $this.data( 'table_grid' );\n\n    //是否有全选\n    if ( settings.selectAll ) {\n      var checker_html = '<th class=\"checker_handle\" width=\"20\"><input type=\"checkbox\" id=\"selectAllChecker\" value=\"all\"></th>';\n      $this.find( 'tr' ).prepend( checker_html );\n    }\n\n    //重新渲染表头\n    var org_html = \"<thead>\" + $this.find( 'tr' ).html() + \"</thead><tbody></tbody>\";\n    $this.html( org_html );\n\n    //检查是否可排序\n    $this.find( 'th' ).each( function () {\n      if ( ! empty( $( this ).data( 'sorting' ) ) ) {\n        $( this ).addClass( 'sorting' );\n      }\n    } );\n\n    //排序事件\n    $( document ).on( 'click' , '.sorting , .sort_asc , .sort_desc' , function () {\n      settings.param.sort = $( this ).data( 'field' );\n\n      if ( $( this ).hasClass( 'sorting' ) ) {\n        settings.param.order = 'asc';\n      } else if ( $( this ).hasClass( 'sort_asc' ) ) {\n        settings.param.order = 'desc';\n      } else if ( $( this ).hasClass( 'sort_desc' ) ) {\n        settings.param.order = '';\n      }\n      $this.data( 'table_grid' , settings );\n      loadData( $this );\n    } );\n\n    //检查是否有全选\n    $( '#selectAllChecker' ).on( 'click' , function () {\n      $( '.checker' ).prop( 'checked' , $( this ).prop( 'checked' ) );\n    } );\n\n    //是否有分页\n    if ( settings.pagination ) {\n      pagination( $this );\n    }\n\n    //加载数据\n    if ( settings.loadAfterInit ) {\n      loadData( $this );\n    }\n  };\n\n  //加载并渲染\n  function loadData( $this ) {\n    var settings = $this.data( 'table_grid' );\n\n    //取数据\n    $.ajax( {\n      url : settings.uri ,\n      data : settings.param ,\n      type : \"GET\" ,\n      dataType : 'JSON' ,\n      error : function ( XHR ) {\n        tips.error( XHR.status + ' ' + XHR.statusText );\n      } ,\n      success : function ( ret ) {\n        if ( ret.code == 0 ) {\n          //渲染到页面\n          render( $this , ret );\n        } else if ( ret.code == 401 ) {\n          tips.error( '请先登录' );\n          var col_span = $this.find( 'th' ).length;\n          $this.find( 'tbody' ).html( '<tr class=\"danger\"><td align=\"center\" colspan=\"' + col_span + '\">请先登录 Orz</td></tr>' );\n        } else {\n          tips.error( ret.msg );\n        }\n      }\n    } );\n  }\n\n  function render( $this , ret ) {\n    var settings = $this.data( 'table_grid' );\n    var body_html = [];\n    var col_span = $this.find( 'th' ).length;\n\n    //保存值\n    $this.data( 'rows' , ret.data.rows );\n\n    //fit_grid[index].data = ret.data.rows;\n    settings.total = ret.data.total;\n    settings.totalPage = Math.ceil( ret.data.total / settings.param.pageSize );\n    $this.data( 'table_grid' , settings );\n\n    if ( settings.pagination == true ) {\n      set_pagination_info( $this ); //设置分页\n    }\n\n    var has_sort = false;\n    //生成显示的数据\n    if ( ret.data.rows.length == 0 ) {\n      body_html.push( '<tr class=\"danger\"><td align=\"center\" colspan=\"' + col_span + '\">暂无数据 @_@</td></tr>' );\n    } else {\n      for ( var i in ret.data.rows ) {\n        if ( ! ret.data.rows.hasOwnProperty( i ) ) {\n          continue;\n        }\n        var row = ret.data.rows[ i ];\n        //行样式\n        var rowStyle = settings.rowStyle( row , i );\n        rowStyle = empty( rowStyle ) ? '' : rowStyle;\n\n        body_html.push( '<tr class=\"' + rowStyle + '\">' );\n        //每格数据及样式\n        $this.find( 'th' ).each( function () {\n          var self = $( this );\n          var val = '';\n          if ( self.hasClass( 'checker_handle' ) ) {\n            //是否有选中\n            val = '<input class=\"checker\" type=\"checkbox\" name=\"selectChecker[]\" value=\"' + row[ 'id' ] + '\" >';\n          } else {\n            var field = self.data( 'field' );\n            var formatter = self.data( 'formatter' );\n\n            //判断是否有排序\n            if ( isset( self.data( 'sort' ) ) ) {\n              has_sort = true;\n            }\n\n            val = isset( row[ field ] ) ? row[ field ] : '';\n            //是否有格式化方法\n            if ( ! empty( formatter ) ) {\n              val = eval( formatter )( val , row , i );\n            }\n          }\n\n          body_html.push( '<td>' + val + '</td>' );\n        } );\n        body_html.push( '</tr>' );\n      }\n    }\n\n    //设置排序\n    if ( has_sort ) {\n      setSort( $this );\n    }\n\n    $this.find( 'tbody' ).html( body_html.join( '' ) );\n    //加载完成后的操作\n    settings.loadSuccess( ret.data.rows , settings );\n  }\n\n  //分页\n  function pagination( $this ) {\n    var settings = $this.data( 'table_grid' );\n\n    var range = [];\n\n    for ( var i in settings.pageSizeRange ) {\n      if ( ! settings.pageSizeRange.hasOwnProperty( i ) ) {\n        continue;\n      }\n      var item = settings.pageSizeRange[ i ];\n      var checked = i == 0 ? 'checked' : '';\n      range.push( '<option value=\"' + item + '\" ' + checked + '>' + item + '</option>' );\n    }\n\n    var html_tmp = '' +\n                   '<div class=\"row\">' +\n                   '<div class=\"col-sm-3\">第 ' +\n                   '<button class=\"btn btn-sm default pagination_prev\" type=\"button\"><i class=\"fa fa-angle-left\"></i></button>' +\n                   '<input type=\"text\" style=\"text-align:center; margin: 0 5px;\" ' +\n                   'class=\"form-control input-inline input-sm input-mini pagination_page\" value=\"{page}\">' +\n                   '<button class=\"btn btn-sm default pagination_next\" type=\"button\"><i class=\"fa fa-angle-right\"></i></button>' +\n                   ' 页 , 共 <span class=\"pagination_total_page\">{totalPage}</span> 页</div>' +\n                   '<div class=\"col-sm-4\">显示 ' +\n                   '<select class=\"form-control input-sm input-inline pagination_page_size\">{pageSize}</select>' +\n                   ' 行 , 共 <span class=\"pagination_total\">{total}</span> 行</div></div>';\n\n    //渲染到页面\n    $this.parent().after( html_tmp.replace( /\\{page}/g , settings.param.page )\n                                  .replace( /\\{totalPage}/g , settings.totalPage )\n                                  .replace( /\\{total}/g , settings.total )\n                                  .replace( /\\{pageSize}/g , range.join( '' ) ) );\n\n    var $pagination = $this.parent().next( '.row' );\n\n    var $pagination_page = $pagination.find( '.pagination_page' );\n    var $pagination_page_size = $pagination.find( '.pagination_page_size' );\n    var $pagination_prev = $pagination.find( '.pagination_prev' );\n    var $pagination_next = $pagination.find( '.pagination_next' );\n    //页面\n    $pagination_page.on( 'keyup blur' , function ( e ) {\n      var page = $.trim( $( this ).val() );\n      var event_type = e.type;\n      //检查是否填入的数组\n      if ( ! $.isNumeric( page ) ||\n           page < 1 ||\n           page == settings.param.page ||\n           page > settings.total_page ) {\n        e.preventDefault();\n        return;\n      }\n      //检查回车和失去焦点事件\n      if ( ( event_type == 'keyup' && e.keyCode == 13) ||\n           event_type == 'blur' ) {\n        settings.param.page = page;\n        loadData( $this );\n      }\n      e.preventDefault();\n    } );\n\n    //向后按钮\n    $pagination_prev.on( 'click' , function ( e ) {\n      e.preventDefault();\n      settings.param.page --;\n      $pagination_page.val( settings.param.page );\n      loadData( $this );\n    } );\n\n    //向前按钮\n    $pagination_next.on( 'click' , function ( e ) {\n      e.preventDefault();\n      settings.param.page ++;\n      $pagination_page.val( settings.param.page );\n      loadData( $this );\n    } );\n\n    //页数输入\n    $pagination_page_size.on( 'change' , function () {\n      settings.param.page = 1;\n      settings.param.pageSize = $( this ).val();\n      loadData( $this );\n    } );\n\n    $pagination_page_size.val( settings.param.pageSize );\n    $pagination_page.val( settings.param.page );\n  }\n\n  //设置分页按钮状态\n  function set_pagination_info( $this ) {\n    var settings = $this.data( 'table_grid' );\n    var $pagination = $this.parent().next( '.row' );\n\n    $pagination.find( '.pagination_page' ).val( settings.param.page );\n    $pagination.find( '.pagination_page_size' ).val( settings.param.pageSize );\n    $pagination.find( '.pagination_total' ).html( settings.total );\n    $pagination.find( '.pagination_total_page' ).html( settings.totalPage );\n\n    var $pagination_prev = $pagination.find( '.pagination_prev' );\n    var $pagination_next = $pagination.find( '.pagination_next' );\n\n    $pagination_prev.attr( 'disabled' , false );\n    $pagination_next.attr( 'disabled' , false );\n\n    if ( settings.totalPage == 1 ) {\n      $pagination_prev.attr( 'disabled' , true );\n      $pagination_next.attr( 'disabled' , true );\n      return;\n    }\n\n    if ( settings.param.page == 1 ) {\n      $pagination_prev.attr( 'disabled' , true );\n      return;\n    }\n\n    if ( settings.param.page == settings.totalPage ) {\n      $pagination_next.attr( 'disabled' , true );\n    }\n  }\n\n  function getSortClass( order ) {\n    switch ( order ) {\n      case '' :\n        return 'sorting';\n      case 'asc' :\n        return 'sort_asc';\n      case 'desc' :\n        return 'sort_desc';\n      default:\n        return 'sorting';\n    }\n  }\n\n  //设置排序标示\n  function setSort( $this ) {\n    var settings = $this.data( 'table_grid' );\n\n    var field = empty( settings.param.sort ) ? 'id' : settings.param.sort;\n    var order = empty( settings.param.order ) ? '' : settings.param.order.toLocaleLowerCase();\n\n    $this.find( 'th[data-sort]' ).each( function ( index ) {\n      var f = $( this ).data( 'field' );\n      var orderClass = (f == field) ? getSortClass( order ) : 'sorting';\n      $( this ).removeClass( 'sorting sort_asc sort_desc' ).addClass( orderClass );\n    } );\n  }\n\n  //插件的方法\n  var methods = {\n    //初始化\n    init : function ( options ) {\n      return this.each( function () {\n        var $this = $( this );\n        var settings = $this.data( 'table_grid' );\n        if ( typeof(settings) == 'undefined' ) {\n          //默认值\n          var defaults = {\n            uri : '' ,\n            selectAll : false ,\n            param : {\n              page : 1 ,\n              pageSize : 10 ,\n              keyword : ''\n            } ,\n            total : 0 ,\n            totalPage : 0 ,\n            loadAfterInit : true ,\n            pagination : true ,\n            pageSizeRange : [ 10 , 20 , 50 , 100 ] ,\n            rowStyle : function () {\n              return '';\n            } ,\n            loadSuccess : function () {}\n          };\n          settings = $.extend( {} , defaults , options );\n          $this.data( 'table_grid' , settings );\n        } else {\n          settings = $.extend( {} , settings , options );\n        }\n\n        //初始化grid\n        _initGrid( $this );\n      } );\n    } ,\n\n    //重新加载\n    reload : function () {\n      loadData( $( this ) );\n    } ,\n\n    getParam : function () {\n      return $( this ).data( 'table_grid' ).param;\n    } ,\n\n    setParam : function ( param ) {\n      var settings = $( this ).data( 'table_grid' );\n      settings[ 'param' ] = param;\n      $( this ).data( 'table_grid' , settings );\n    } ,\n\n    settings : function ( settings ) {\n      var oldSettings = $( this ).data( 'table_grid' );\n      var newSettings = $.extend( {} , settings , oldSettings );\n      $( this ).data( 'table_grid' , newSettings );\n    } ,\n\n    //取单行数据\n    getRow : function ( id ) {\n      var rows = $( this ).data( 'rows' );\n      for ( var i = 0 ; i < rows.length ; i ++ ) {\n        var row = rows[ i ];\n        if ( row.id == id ) {\n          return row;\n        }\n      }\n    } ,\n\n    //取多行数据\n    getRows : function () {\n      return $( this ).data( 'rows' );\n    }\n\n  };\n\n  //插件入口\n  $.fn.TableGrid = function () {\n    var method = arguments[ 0 ];\n    if ( methods[ method ] ) {\n      method = methods[ method ];\n      arguments = Array.prototype.slice.call( arguments , 1 );\n    } else if ( typeof(method) == 'object' || ! method ) {\n      method = methods.init;\n    } else {\n      return this;\n    }\n\n    return method.apply( this , arguments );\n  }\n})( jQuery );\n"
  },
  {
    "path": "resources/assets/static/plugins/dmg-ui/TreeGrid.js",
    "content": "/**\n * FIT Tree Grid\n *\n * @author Zix\n * @version 2.0 , 2016-05-06\n */\n\n;\n(function($) {\n\n\t//保存数据\n\t//var fit_tree_grid = [];\n\n\t//构建页面数据\n\tvar _initTreeGrid = function($this) {\n\t\tvar settings = $this.data('tree_grid');\n\n\t\t//重新渲染表头\n\t\tvar org_html = \"<thead>\" + $this.find('tr').html() + \"</thead><tbody></tbody>\";\n\t\t$this.html(org_html);\n\n\t\t$(document).on('click', '.level-fa', function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar old_class = 'fa-chevron-down';\n\t\t\tvar new_class = 'fa-chevron-right';\n\t\t\tvar expand = false;\n\t\t\tif ($(this).hasClass('fa-chevron-right')) {\n\t\t\t\told_class = 'fa-chevron-right';\n\t\t\t\tnew_class = 'fa-chevron-down';\n\t\t\t\texpand = true;\n\t\t\t}\n\t\t\t$(this).removeClass(old_class).addClass(new_class);\n\t\t\tvar $tr = $(this).parents('tr');\n\t\t\tvar $tbody = $(this).parents('tbody');\n\t\t\tvar id = $tr.data('id');\n\t\t\tif (expand) {\n\t\t\t\texpandTr($tbody, id);\n\t\t\t} else {\n\t\t\t\tcloseTr($tbody, id);\n\t\t\t}\n\t\t});\n\n\t\t//是否有分页\n\t\tif (settings.pagination) {\n\t\t\tpagination($this);\n\t\t}\n\n\t\t//加载数据\n\t\tloadData($this);\n\t};\n\n\tfunction expandTr(tbody, pid) {\n\t\tif (tbody.find('tr[data-pid=\"' + pid + '\"]').length > 0) {\n\t\t\ttbody.find('tr[data-pid=\"' + pid + '\"]').each(function() {\n\t\t\t\t$(this).removeClass('hide')\n\t\t\t\t\t.find('.fa-chevron-right')\n\t\t\t\t\t.removeClass('fa-chevron-right')\n\t\t\t\t\t.addClass('fa-chevron-down');\n\t\t\t\texpandTr(tbody, $(this).data('id'));\n\t\t\t});\n\t\t}\n\t}\n\n\tfunction closeTr(tbody, pid) {\n\t\tif (tbody.find('tr[data-pid=\"' + pid + '\"]').length > 0) {\n\t\t\ttbody.find('tr[data-pid=\"' + pid + '\"]').each(function() {\n\t\t\t\t$(this).addClass('hide')\n\t\t\t\t\t.find('.fa-chevron-down')\n\t\t\t\t\t.removeClass('fa-chevron-down')\n\t\t\t\t\t.addClass('fa-chevron-right');\n\t\t\t\tcloseTr(tbody, $(this).data('id'));\n\t\t\t});\n\t\t}\n\t}\n\n\t//加载并渲染\n\tfunction loadData($this) {\n\t\tvar settings = $this.data('tree_grid');\n\n\t\t//取数据\n\t\t$.ajax({\n\t\t\turl: settings.uri,\n\t\t\tdata: settings.param,\n\t\t\ttype: \"GET\",\n\t\t\tdataType: 'JSON',\n\t\t\terror: function(XHR) {\n\t\t\t\ttips.error(XHR.status + ' ' + XHR.statusText);\n\t\t\t},\n\t\t\tsuccess: function(ret) {\n\t\t\t\tvar bodyHtml = [];\n\t\t\t\tvar col_span = $this.find('th').length;\n\n\t\t\t\tif (ret.code == 401) {\n\t\t\t\t\ttips.error('请先登录');\n\t\t\t\t\tbodyHtml.push('<tr class=\"danger\"><td align=\"center\" colspan=\"' + col_span + '\">请先登录 Orz</td></tr>');\n\t\t\t\t}\n\t\t\t\tif (ret.code == 0) {\n\t\t\t\t\t//保存值\n\t\t\t\t\t$this.data('rows', ret.data.rows);\n\n\t\t\t\t\t//生成显示的数据\n\t\t\t\t\tif (ret.data.rows.length == 0) {\n\t\t\t\t\t\tbodyHtml.push('<tr class=\"danger\"><td align=\"center\" colspan=\"' + col_span + '\">暂无数据 @_@</td></tr>');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_makeBody($this, bodyHtml, ret.data.rows, settings);\n\t\t\t\t\t}\n\n\t\t\t\t\t//加载完成后的操作\n\t\t\t\t\tsettings.loadSuccess(ret.data.rows, settings);\n\n\n\t\t\t\t\t//fit_grid[index].data = ret.data.rows;\n\t\t\t\t\tsettings.total = ret.data.total;\n\t\t\t\t\tsettings.totalPage = Math.ceil(ret.data.total / settings.param.pageSize);\n\t\t\t\t\t$this.data('table_grid', settings);\n\t\t\t\t\tif (settings.pagination == true) {\n\t\t\t\t\t\tset_pagination_info($this); //设置分页\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//渲染到页面\n\t\t\t\t$this.find('tbody').html(bodyHtml.join(''));\n\t\t\t}\n\t\t});\n\t}\n\n\t//分页\n\tfunction pagination($this) {\n\t\tvar settings = $this.data('tree_grid');\n\n\t\tvar range = [];\n\n\t\tfor (var i in settings.pageSizeRange) {\n\t\t\tif (!settings.pageSizeRange.hasOwnProperty(i)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvar item = settings.pageSizeRange[i];\n\t\t\tvar checked = i == 0 ? 'checked' : '';\n\t\t\trange.push('<option value=\"' + item + '\" ' + checked + '>' + item + '</option>');\n\t\t}\n\n\t\tvar html_tmp = '' +\n\t\t\t'<div class=\"row\">' +\n\t\t\t'<div class=\"col-sm-3\">第 ' +\n\t\t\t'<button class=\"btn btn-sm default pagination_prev\" type=\"button\"><i class=\"fa fa-angle-left\"></i></button>' +\n\t\t\t'<input type=\"text\" style=\"text-align:center; margin: 0 5px;\" ' +\n\t\t\t'class=\"form-control input-inline input-sm input-mini pagination_page\" value=\"{page}\">' +\n\t\t\t'<button class=\"btn btn-sm default pagination_next\" type=\"button\"><i class=\"fa fa-angle-right\"></i></button>' +\n\t\t\t' 页 , 共 <span class=\"pagination_total_page\">{totalPage}</span> 页</div>' +\n\t\t\t'<div class=\"col-sm-4\">显示 ' +\n\t\t\t'<select class=\"form-control input-sm input-inline pagination_page_size\">{pageSize}</select>' +\n\t\t\t' 行 , 共 <span class=\"pagination_total\">{total}</span> 行</div></div>';\n\n\t\t//渲染到页面\n\t\t$this.parent().after(html_tmp.replace(/\\{page}/g, settings.param.page)\n\t\t\t.replace(/\\{totalPage}/g, settings.totalPage)\n\t\t\t.replace(/\\{total}/g, settings.total)\n\t\t\t.replace(/\\{pageSize}/g, range.join('')));\n\n\t\tvar $pagination = $this.parent().next('.row');\n\n\t\tvar $pagination_page = $pagination.find('.pagination_page');\n\t\tvar $pagination_page_size = $pagination.find('.pagination_page_size');\n\t\tvar $pagination_prev = $pagination.find('.pagination_prev');\n\t\tvar $pagination_next = $pagination.find('.pagination_next');\n\t\t//页面\n\t\t$pagination_page.on('keyup blur', function(e) {\n\t\t\tvar page = $.trim($(this).val());\n\t\t\tvar event_type = e.type;\n\t\t\t//检查是否填入的数组\n\t\t\tif (!$.isNumeric(page) ||\n\t\t\t\tpage < 1 ||\n\t\t\t\tpage == settings.param.page ||\n\t\t\t\tpage > settings.total_page) {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t//检查回车和失去焦点事件\n\t\t\tif ((event_type == 'keyup' && e.keyCode == 13) ||\n\t\t\t\tevent_type == 'blur') {\n\t\t\t\tsettings.param.page = page;\n\t\t\t\tloadData($this);\n\t\t\t}\n\t\t\te.preventDefault();\n\t\t});\n\n\t\t//向后按钮\n\t\t$pagination_prev.on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tsettings.param.page--;\n\t\t\t$pagination_page.val(settings.param.page);\n\t\t\tloadData($this);\n\t\t});\n\n\t\t//向前按钮\n\t\t$pagination_next.on('click', function(e) {\n\t\t\te.preventDefault();\n\t\t\tsettings.param.page++;\n\t\t\t$pagination_page.val(settings.param.page);\n\t\t\tloadData($this);\n\t\t});\n\n\t\t//页数输入\n\t\t$pagination_page_size.on('change', function() {\n\t\t\tsettings.param.page = 1;\n\t\t\tsettings.param.pageSize = $(this).val();\n\t\t\tloadData($this);\n\t\t});\n\n\t\t$pagination_page_size.val(settings.param.pageSize);\n\t\t$pagination_page.val(settings.param.page);\n\t}\n\n\t//设置分页按钮状态\n\tfunction set_pagination_info($this) {\n\t\tvar settings = $this.data('tree_grid');\n\t\tvar $pagination = $this.parent().next('.row');\n\n\t\t$pagination.find('.pagination_page').val(settings.param.page);\n\t\t$pagination.find('.pagination_page_size').val(settings.param.pageSize);\n\t\t$pagination.find('.pagination_total').html(settings.total);\n\t\t$pagination.find('.pagination_total_page').html(settings.totalPage);\n\n\t\tvar $pagination_prev = $pagination.find('.pagination_prev');\n\t\tvar $pagination_next = $pagination.find('.pagination_next');\n\n\t\t$pagination_prev.attr('disabled', false);\n\t\t$pagination_next.attr('disabled', false);\n\n\t\tif (settings.totalPage == 1) {\n\t\t\t$pagination_prev.attr('disabled', true);\n\t\t\t$pagination_next.attr('disabled', true);\n\t\t\treturn;\n\t\t}\n\n\t\tif (settings.param.page == 1) {\n\t\t\t$pagination_prev.attr('disabled', true);\n\t\t\treturn;\n\t\t}\n\n\t\tif (settings.param.page == settings.totalPage) {\n\t\t\t$pagination_next.attr('disabled', true);\n\t\t}\n\t}\n\n\tfunction _makeBody($this, bodyHtml, rows, settings) {\n\t\tvar nodeField = settings['nodeField'];\n\t\tvar expandAll = settings.expandAll;\n\n\t\tfor (var i in rows) {\n\t\t\tif (!rows.hasOwnProperty(i)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvar row = rows[i];\n\t\t\t//行样式\n\t\t\tvar rowStyle = settings.rowStyle(row, i);\n\t\t\trowStyle = empty(rowStyle) ? '' : rowStyle;\n\n\t\t\t//是否隐藏\n\t\t\tvar is_hide = '';\n\t\t\tif (row.level > 1 && !settings.expandAll) {\n\t\t\t\tis_hide = 'hide';\n\t\t\t}\n\n\t\t\tbodyHtml.push('<tr class=\"' + rowStyle + ' ' + is_hide + ' \" data-id=\"' + row.id + '\" ' +\n\t\t\t\t'data-pid=\"' + row.pid + '\" data-level=\"' + row.level + '\">');\n\t\t\t//每格数据及样式\n\t\t\t$this.find('th').each(function() {\n\t\t\t\tvar self = $(this);\n\t\t\t\tvar val = '';\n\t\t\t\tvar td_class = '';\n\t\t\t\tvar field = self.data('field');\n\t\t\t\tvar formatter = self.data('formatter');\n\t\t\t\tvar sort = self.data('sort');\n\n\t\t\t\tval = isset(row[field]) ? row[field] : '&nbsp;';\n\t\t\t\t//是否有格式化方法\n\t\t\t\tif (!empty(formatter)) {\n\t\t\t\t\tval = eval(formatter)(val, row, i);\n\t\t\t\t}\n\t\t\t\tif (settings.field == field) {\n\t\t\t\t\ttd_class = 'level-' + row.level;\n\t\t\t\t\tif (isset(row[nodeField])) {\n\t\t\t\t\t\tvar icon = settings.expandAll ? settings.expandIcon : settings.collapseIcon;\n\t\t\t\t\t\tval = '<i class=\"' + icon + ' level-fa font-blue\"></i>' + val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tval = '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + val;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbodyHtml.push('<td class=\"' + td_class + '\">' + val + '</td>');\n\t\t\t});\n\t\t\tbodyHtml.push('</tr>');\n\t\t\tif (isset(row.children)) {\n\t\t\t\t_makeBody($this, bodyHtml, row[nodeField], settings)\n\t\t\t}\n\t\t}\n\t}\n\n\t//插件的方法\n\tvar methods = {\n\t\t//初始化\n\t\tinit: function(options) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar settings = $this.data('tree_grid');\n\t\t\t\tif (typeof(settings) == 'undefined') {\n\t\t\t\t\t//默认值\n\t\t\t\t\tvar defaults = {\n\t\t\t\t\t\turi: '',\n\t\t\t\t\t\tfield: 'name', //缩进的字段名\n\t\t\t\t\t\tnodeField: 'children', //下级的字段名\n\t\t\t\t\t\texpandAll: false, //初始化时是否展开\n\t\t\t\t\t\tcollapseIcon: 'fa fa-chevron-right', //折叠的图标\n\t\t\t\t\t\texpandIcon: 'fa fa-chevron-down', //展开的图标\n\t\t\t\t\t\tparam: {\n\t\t\t\t\t\t\tkeyword: '',\n\t\t\t\t\t\t\tstatus: '',\n\t\t\t\t\t\t\tpage: 1,\n\t\t\t\t\t\t\tpageSize: 10,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttotal: 0,\n\t\t\t\t\t\ttotalPage: 0,\n\t\t\t\t\t\tloadAfterInit: true,\n\t\t\t\t\t\tpagination: true,\n\t\t\t\t\t\tpageSizeRange: [10, 20, 50, 100],\n\t\t\t\t\t\trowStyle: function() {\n\t\t\t\t\t\t\treturn '';\n\t\t\t\t\t\t},\n\t\t\t\t\t\tloadSuccess: function() {}\n\t\t\t\t\t};\n\t\t\t\t\tsettings = $.extend({}, defaults, options);\n\n\t\t\t\t} else {\n\t\t\t\t\tsettings = $.extend({}, settings, options);\n\t\t\t\t}\n\n\t\t\t\t$this.data('tree_grid', settings);\n\t\t\t\t//初始化tree grid\n\t\t\t\t_initTreeGrid($this);\n\t\t\t});\n\t\t},\n\n\t\t//重新加载\n\t\treload: function() {\n\t\t\tloadData($(this));\n\t\t},\n\n\t\tgetParam: function() {\n\t\t\tvar settings = $(this).data('tree_grid');\n\t\t\treturn settings['param'];\n\t\t},\n\n\t\tsetParam: function(param) {\n\t\t\tvar settings = $(this).data('tree_grid');\n\t\t\tsettings['param'] = param;\n\t\t\t$(this).data('tree_grid', settings);\n\t\t},\n\n\t\t//取单行数据\n\t\tgetRow: function(id) {\n\t\t\tvar rows = $(this).data('rows');\n\t\t\tvar settings = $(this).data('tree_grid');\n\t\t\treturn getRowById(id, rows, settings);\n\t\t},\n\n\t\t//取多行数据\n\t\tgetRows: function() {\n\t\t\treturn $(this).data('rows');\n\t\t}\n\n\t};\n\n\tfunction getRowById(id, rows, settings) {\n\t\tfor (var i = 0; i < rows.length; i++) {\n\t\t\tvar row = rows[i];\n\n\t\t\tif (row.id == id) {\n\t\t\t\treturn row;\n\t\t\t}\n\t\t\tif (isset(row[settings.nodeField])) {\n\t\t\t\tvar result = getRowById(id, row[settings.nodeField], settings);\n\t\t\t\tif (!empty(result)) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t//插件入口\n\t$.fn.TreeGrid = function() {\n\t\tvar method = arguments[0];\n\t\tif (methods[method]) {\n\t\t\tmethod = methods[method];\n\t\t\targuments = Array.prototype.slice.call(arguments, 1);\n\t\t} else if (typeof(method) == 'object' || !method) {\n\t\t\tmethod = methods.init;\n\t\t} else {\n\t\t\treturn this;\n\t\t}\n\n\t\treturn method.apply(this, arguments);\n\t}\n})(jQuery);"
  },
  {
    "path": "resources/assets/static/plugins/dmg-ui/Uploader.js",
    "content": "/**\n *\n */\n\n;(function ( $ ) {\n\n  var token = $('input[name=_token]').val();\n  //var settings = {};\n  var thisUploadObj = null;\n\n  //初始化页面\n  var _initUpload = function ( $this ) {\n    var settings = $this.data( 'uploader' );\n\n    //设置上传按钮样式和文本\n    $this.addClass( settings.btnStyle ).html( settings.btnText );\n\n    //模态框的模板\n    var modalTmp = '<div class=\"modal fade\" id=\"uploaderModal\">' +\n                   '<div class=\"modal-dialog\"><div class=\"modal-content\">' +\n                   '<div class=\"modal-header\">' +\n                   '<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>' +\n                   '<h4 class=\"modal-title\">文件上传</h4>' +\n                   '</div><div class=\"modal-body\">' +\n                   '<div class=\"row\">' +\n                   '<div class=\"col-md-12\"><div id=\"uploaderPreview\">' +\n                   '</div></div></div></div>' +\n                   '<div class=\"modal-footer\">' +\n                   '<form id=\"uploaderForm\"><input type=\"file\" id=\"uploaderFile\" style=\"display: none;\"></form>' +\n                   '<button type=\"button\" class=\"btn default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>' +\n                   '<button type=\"button\" class=\"btn btn-primary\" id=\"uploaderPickerBtn\"><i class=\"fa fa-image\"></i> 选择文件</button>' +\n                   '<button type=\"button\" class=\"btn btn-danger\" id=\"uploaderUploadBtn\"><i class=\"fa fa-upload\"></i> 上传</button>' +\n                   '</div></div></div></div>';\n\n    var previewImageTmp = '<img class=\"uploader-img\" id=\"uploaderPreviewImg\" src=\"\" alt=\"图片预览\">';\n    var preview_file_tmp = '<h4>{filename}</h4>';\n    /*\n     //上传内容模板\n     var image_tmp = '<img class=\"uploader-img\" id=\"uploader_img_{index}\" src=\"\" alt=\"图片预览\">' +\n     '<div class=\"uploader-holder-markup\" id=\"uploader_holder_markup_{index}\">' +\n     '<div class=\"uploader-holder-tracker\" id=\"uploader_holder_tracker_{index}\">' +\n     '<img class=\"uploader-holder-tracker-img\" src=\"\" id=\"uploader_holder_tracker_img_{index}\">' +\n     '</div>' +\n     '<img class=\"uploader-holder-img-bg\" src=\"\" id=\"uploader_holder_img_bg_{index}\"></div>';\n     */\n\n    //添加模态框到页面\n    var $modal = $( '#uploaderModal' );\n    var $uploaderPreview = $( '#uploaderPreview' );\n    var $uploaderPreviewImg = null;\n    var $uploaderFile = $( '#uploaderFile' );\n    if ( $modal.length == 0 ) {\n      $( 'body' ).append( modalTmp );\n      $modal = $( '#uploaderModal' );\n      $uploaderPreview = $( '#uploaderPreview' );\n      $uploaderPreviewImg = null;\n      $uploaderFile = $( '#uploaderFile' );\n\n      //选择文件按钮事件\n      $( '#uploaderPickerBtn' ).on( 'click' , function ( e ) {\n        e.preventDefault();\n        if ( settings.cropApi ) {\n          settings.cropApi.destroy();\n          settings.cropApi = null;\n        }\n        $uploaderPreview.empty();\n        $uploaderFile.trigger( 'click' );\n      } );\n\n      //如果选中的文件 则预览\n      $uploaderFile.on( 'change' , function ( e ) {\n        var settings = thisUploadObj.data( 'uploader' );\n        //检查是否支持HTML5上传\n        if ( ! window.FileReader ) {\n          tips.error( '浏览器不支持HTML5' );\n          return;\n        }\n\n        //检查是否是图片\n        var file = e.target.files[ 0 ];\n        if ( ! file.type.match( 'image.*' ) ) {\n          //如果是文件\n          //$uploader_holder.html(file_tmp.replace( /\\{filename}/g , file.name));\n        } else {\n          //如果是图片开始预览\n          $uploaderPreview.html( previewImageTmp );\n          $uploaderPreviewImg = $( '#uploaderPreviewImg' );\n          var reader = new FileReader();\n          reader.onload = (function ( theFile ) {\n            return function ( ev ) {\n              //获取显示尺寸\n              $uploaderPreviewImg.show();\n              $uploaderPreviewImg[ 0 ].src = ev.target.result;\n              $uploaderPreviewImg[ 0 ].onload = function () {\n                var cur_width = $modal.find( '.modal-body' ).width();\n                var org_width = $uploaderPreviewImg[ 0 ].width;\n                var org_height = $uploaderPreviewImg[ 0 ].height;\n\n                if ( cur_width > org_width ) {\n                  $uploaderPreviewImg.width( org_width );\n                  cur_width = org_width;\n                } else {\n                  $uploaderPreviewImg.width( cur_width );\n                }\n\n                //检查是否限制了宽和高\n                //console.log( settings.param );\n                if ( settings.param.width > 0 && settings.param.height > 0 ) {\n                  //检查图片尺寸\n                  if ( org_width < settings.param.width ) {\n                    uploaderError( $this , '宽度小于' + settings.param.width );\n                    return;\n                  }\n\n                  if ( org_height < settings.param.height ) {\n                    uploaderError( $this , '高度小于' + settings.param.height );\n                    return;\n                  }\n                  //启用 jcrop\n                  settings.ratio = cur_width / org_width;\n                  var w = parseInt( settings.param.width * settings.ratio );\n                  var h = parseInt( settings.param.height * settings.ratio );\n\n                  $uploaderPreviewImg.Jcrop( {\n                    setSelect : [ 0 , 0 , w , h ] ,\n                    minSize : [ w , h ] ,\n                    aspectRatio : settings.param.width / settings.param.height ,\n                    onChange : setCrop ,\n                    onSelect : setCrop ,\n                    onRelease : resetCrop\n                  } , function () {\n                    settings.cropApi = this;\n                  } );\n                }\n              };\n\n              function setCrop( c ) {\n                settings.crop = [];\n                settings.crop.push( c.x );\n                settings.crop.push( c.y );\n                settings.crop.push( c.w );\n                settings.crop.push( c.h );\n              }\n\n              function resetCrop() {\n                settings.crop = [];\n              }\n            };\n          })( file );\n          reader.readAsDataURL( file );\n        }\n      } );\n\n      //上传按钮\n      $( '#uploaderUploadBtn' ).on( 'click' , function ( e ) {\n        var settings = thisUploadObj.data( 'uploader' );\n        e.preventDefault();\n        var file = $uploaderFile[ 0 ].files[ 0 ];\n        if ( ! file ) {\n          uploaderError( $this , '请选择上传文件' );\n          return;\n        }\n\n        if ( file.size > settings.fileSizeLimit * 1024 ) {\n          uploaderError( $this , '文件超过' + settings.fileSizeLimit + 'KB' );\n          return;\n        }\n\n        var fd = new FormData();\n        fd.append( settings.fileObjName , file );\n        for ( var key in settings.param ) {\n          if ( ! settings.param.hasOwnProperty( key ) ) {\n            continue;\n          }\n          fd.append( key , settings.param[ key ] );\n        }\n        fd.append('_token' ,token);\n        //如果是图片\n        if ( file.type.match( 'image.*' ) ) {\n          //如果是图片,则计算裁剪\n          if ( settings.param.width > 0 && settings.param.height > 0 ) {\n            if ( settings.crop.length == 0 ) {\n              settings.onError( '请选择裁剪图片' );\n              return false;\n            }\n\n            //计算缩放比\n            var crop = [];\n            var w = parseInt( settings.crop[ 2 ] / settings.ratio );\n            w = w < settings.param.width ? settings.param.width : w;\n            var h = parseInt( settings.crop[ 3 ] / settings.ratio );\n            h = h < settings.param.height ? settings.param.height : h;\n\n            crop.push( parseInt( settings.crop[ 0 ] / settings.ratio ) );\n            crop.push( parseInt( settings.crop[ 1 ] / settings.ratio ) );\n            crop.push( w );\n            crop.push( h );\n\n            fd.append( 'crop' , crop.join( ',' ) );\n          }\n        }\n\n        var xhr = new XMLHttpRequest();\n        xhr.open( 'POST' , settings.uri , true );\n\n        xhr.upload.addEventListener( \"progress\" , function ( e ) {\n          loading.start();\n          settings.onProgress( e );\n        } );\n        xhr.addEventListener( \"load\" , function ( e ) {\n          loading.end();\n          $( '#uploaderModal' ).modal( 'hide' );\n          if ( settings.album ) {\n            loadAlbum( thisUploadObj );\n          }\n          settings.onSuccess( $.parseJSON( e.target.responseText ) );\n        } );\n        xhr.addEventListener( \"error\" , function ( e ) {\n          loading.end();\n          settings.onError( e.message );\n        } );\n        xhr.addEventListener( \"abort\" , function ( e ) {\n          loading.end();\n          settings.onError( e.message );\n        } );\n        xhr.send( fd );\n      } );\n\n      if ( settings.album ) {\n        initAlbum( $this );\n      }\n    }\n\n    //显示模态框\n    $this.on( 'click' , function ( e ) {\n      $uploaderFile.val('')\n      settings = $( this ).data( 'uploader' );\n      thisUploadObj = $this;\n      e.preventDefault();\n      if ( settings.cropApi ) {\n        //如果有裁剪对象 就先销毁\n        settings.cropApi.destroy();\n        settings.cropApi = null;\n      }\n\n      $uploaderPreview.empty();\n      $modal.modal( 'show' );\n    } );\n  };\n\n  //初始化相册\n  var initAlbum = function ( $this ) {\n    var settings = $this.data( 'uploader' );\n\n    $this.after( '<button type=\"button\" class=\"btn btn-info btn-sm open_album_btn\"><i class=\"fa fa-image\"></i> 相册</button>' );\n    var $openAlbumBtn = $this.next( 'button' );\n    var albumModal = '<div class=\"modal fade\" id=\"album_modal\">' +\n                     '<div class=\"modal-dialog\">' +\n                     '<div class=\"modal-content\">' +\n                     '<div class=\"modal-header\">' +\n                     '<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">' +\n                     '<span aria-hidden=\"true\">&times;</span></button>' +\n                     '<h4 class=\"modal-title\"><i class=\"icon-picture\"></i> 相册</h4></div>' +\n                     '<div class=\"modal-body\">' +\n                     '<ul class=\"nav nav-tabs\">{tab}</ul>' +\n                     '<div class=\"tab-content\">{tabContent}</div></div>' +\n                     '<div class=\"modal-footer\">' +\n                     '<button type=\"button\" class=\"btn default\" data-dismiss=\"modal\">关闭</button>' +\n                     '</div></div></div></div>';\n    var albumTab = '<li><a data-toggle=\"tab\" href=\"#{tabContentId}\" data-catalog=\"{catalog}\" data-tag=\"{tag}\"> {tag} </a></li>';\n    var albumTabContent = '<div id=\"{tabContentId}\" class=\"tab-pane fade\">' +\n                          '<div class=\"row img_content\"></div>' +\n                          '<div class=\"row\">' +\n                          '<div class=\"col-md-12 text-right\" id=\"{albumPagId}\"></div></div></div>';\n\n\n    var $albumModal = $( '#album_modal' );\n    if ( $albumModal.length == 0 ) {\n      $.get( settings.albumCatalogUri , function ( ret ) {\n        var tab = '';\n        var content = '';\n\n        for ( var i = 0 ; i < ret.length ; i ++ ) {\n          var tabContentId = 'album_tab_content_' + ret[ i ][ 'id' ];\n          var albumPagId = 'album_pag_' + ret[ i ][ 'id' ];\n          tab += albumTab.replace( /\\{tabContentId}/g , tabContentId )\n                         .replace( /\\{catalog}/g , ret[ i ][ 'id' ] )\n                         .replace( /\\{tag}/g , ret[ i ][ 'tag' ] );\n          content += albumTabContent.replace( /\\{tabContentId}/g , tabContentId )\n                                    .replace( /\\{catalog}/g , ret[ i ][ 'id' ] )\n                                    .replace( /\\{albumPagId}/g , albumPagId )\n                                    .replace( /\\{tag}/g , ret[ i ][ 'tag' ] );\n\n        }\n        var html = albumModal.replace( /\\{tab}/g , tab )\n                             .replace( /\\{tabContent}/g , content );\n        $( 'body' ).append( html );\n        $albumModal = $( '#album_modal' );\n\n        //打开album选择 modal\n        $openAlbumBtn.on( 'click' , function ( e ) {\n          e.preventDefault();\n          $albumModal.modal( 'show' );\n        } );\n\n        //切换tab\n        $albumModal.find( 'a[data-toggle=\"tab\"]' ).on( 'shown.bs.tab' , function ( e ) {\n          settings.albumParam.cur_tab = e.target;\n          $this.data( 'uploader' , settings );\n          var $target = $( e.target );\n          var page = $target.data( 'page' );\n\n          if ( empty( page ) ) {\n            loadAlbum( $this , $target );\n          }\n        } );\n\n        //设置默认的tab\n        //console.log(settings.param.default_tag);\n        var len = $albumModal.find( 'a[data-toggle=\"tab\"][data-tag=\"' + settings.albumParam.defaultTag + '\"]' ).length;\n        if ( len == 0 ) {\n          $albumModal.find( 'a[data-toggle=\"tab\"]' ).eq( 0 ).tab( 'show' );\n        } else {\n          $albumModal.find( 'a[data-toggle=\"tab\"][data-tag=\"' + settings.albumParam.defaultTag + '\"]' )\n                     .tab( 'show' );\n        }\n      } );\n    }\n\n    $( document ).on( 'click' , '.album_item img' , function ( e ) {\n      var img_src = $( this ).data( 'src' );\n      sure.init( '确认选择吗?' , function () {\n        $albumModal.modal( 'hide' );\n        settings.onChooseAlbum( img_src );\n      } );\n    } );\n  };\n\n  //加载相册\n  function loadAlbum( $this , $target ) {\n    var settings = $this.data( 'uploader' );\n\n    if ( ! settings.album ) {\n      return false;\n    }\n    if ( empty( $target ) ) {\n      $target = $( settings.albumParam.cur_tab );\n    }\n    var page = $target.data( 'page' );\n    page = empty( page ) ? 1 : page;\n\n    var catalog = $target.data( 'catalog' );\n    var albumPagId = 'album_pag_' + $target.data( 'catalog' );\n    var $albumPag = $( '#' + albumPagId );\n\n    var data = {\n      page : page ,\n      page_size : settings.albumParam.page_size ,\n      catalog : catalog\n    };\n\n    loading.start();\n    $.get( settings.albumUri , data , function ( ret ) {\n      loading.end();\n      $target.data( 'rows' , ret.rows );\n      $target.data( 'total' , ret.total );\n      $target.data( 'page' , page );\n      //tab_content_id\n      renderImg( $target , ret.rows );\n      if ( $albumPag.html() == '' ) {\n        var totalPage = Math.ceil( ret.total / settings.albumParam.pageSize );\n        //console.log( total_page );\n        $albumPag.bootpag( {\n          total : totalPage ,          // total pages\n          page : 1 ,            // default page\n          maxVisible : 5 ,     // visible pagination\n          leaps : true         // next/prev leaps through maxVisible\n        } ).on( \"page\" , function ( event , num ) {\n          $target.data( 'page' , num );\n          loadAlbum( $this , $target );\n        } );\n      }\n    } );\n  }\n\n  //渲染相册\n  function renderImg( $target , rows ) {\n    var albumImg = '<div class=\"col-sm-6 col-md-3\">' +\n                   '<a class=\"thumbnail album_item\" href=\"javascript:;\"><img src=\"{icon}\" data-src=\"{savePath}\"></a>' +\n                   '<div class=\"caption album_item\">{imgSize}</div>' +\n                   '</div>';\n\n    var imgHtml = '';\n    for ( var i = 0 ; i < rows.length ; i ++ ) {\n      imgHtml += albumImg.replace( /\\{icon}/g , Param.uri.img + rows[ i ][ 'uri' ] )\n                         .replace( /\\{savePath}/g , rows[ i ][ 'uri' ] )\n                         .replace( /\\{imgSize}/g , rows[ i ][ 'img_size' ] );\n    }\n\n    var tabContentId = $target.attr( 'href' );\n    $( tabContentId ).find( '.img_content' ).html( imgHtml );\n  }\n\n  var uploaderError = function ( $this , error ) {\n    var settings = $this.data( 'uploader' );\n    $( '#uploaderForm' )[ 0 ].reset();\n    settings.onError( error );\n  };\n\n  //插件的方法\n  var methods = {\n    //初始化\n    init : function ( options ) {\n      return this.each( function () {\n        var $this = $( this );\n        var settings = $this.data( 'uploader' );\n        if ( typeof(settings) == 'undefined' ) {\n          //默认值\n          var defaults = {\n            uri : '' ,\n            btnStyle : 'btn btn-primary btn-sm' ,\n            btnText : '<i class=\"fa fa-upload\"></i> 上传' ,\n            fileObjName : 'imgFile' ,\n            fileSizeLimit : 2048 ,\n            ratio : 1 ,\n            crop : [] ,\n            param : {\n              width : 0 ,\n              height : 0\n            } ,\n            saveAlbum : false ,\n            album : false ,\n            albumUri : '' ,\n            albumCatalogUri : '' ,\n            albumParam : {\n              defaultTag : '' ,\n              pageSize : 12\n            } ,\n            onChooseAlbum : function () {\n            } ,\n            onError : function ( error ) {\n              tips.error( error );\n            } ,\n            onProgress : function ( e ) {\n            } ,\n            onSuccess : function () {\n            }\n          };\n          settings = $.extend( {} , defaults , options );\n          $this.data( 'uploader' , settings );\n        } else {\n          settings = $.extend( {} , settings , options );\n        }\n\n        //console.log( settings );\n        //初始化插件\n        _initUpload( $this );\n      } );\n    } ,\n\n    getParam : function () {\n      return $( this ).data( 'uploader' ).param;\n    } ,\n\n    setParam : function ( param ) {\n      var settings = $( this ).data( 'uploader' );\n      settings[ 'param' ] = param;\n      $( this ).data( 'uploader' , settings );\n    }\n\n  };\n\n  //插件入口\n  $.fn.Uploader = function () {\n    var method = arguments[ 0 ];\n    if ( methods[ method ] ) {\n      method = methods[ method ];\n      arguments = Array.prototype.slice.call( arguments , 1 );\n    } else if ( typeof(method) == 'object' || ! method ) {\n      method = methods.init;\n    } else {\n      return this;\n    }\n\n    return method.apply( this , arguments );\n  }\n})( jQuery );\n"
  },
  {
    "path": "resources/assets/static/plugins/dmg-ui/album.js",
    "content": "/**\n *\n */\n\n;(function ($) {\n\n\tvar settings = {};\n\n\t//初始化页面\n\tvar _init_album = function ($this) {\n\t\tsettings = $this.data('album');\n\n\t\tvar album_btn = '<button type=\"button\" class=\"btn btn-info open_album_btn\"><i class=\"fa fa-image\"></i> 相册选取</button>';\n\n\t\t$this.after(album_btn);\n\t\tvar $open_album_btn = $this.next('button');\n\t\tvar album_modal = '<div class=\"modal fade\" id=\"album_modal\">' +\n\t\t                  '<div class=\"modal-dialog\">' +\n\t\t                  '<div class=\"modal-content\">' +\n\t\t                  '<div class=\"modal-header\">' +\n\t\t                  '<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">' +\n\t\t                  '<span aria-hidden=\"true\">&times;</span></button>' +\n\t\t                  '<h4 class=\"modal-title\"><i class=\"icon-picture\"></i> 相册</h4></div>' +\n\t\t                  '<div class=\"modal-body\">' +\n\t\t                  '<ul class=\"nav nav-tabs\">{tab}</ul>' +\n\t\t                  '<div class=\"tab-content\">{tab_content}</div></div>' +\n\t\t                  '<div class=\"modal-footer\">' +\n\t\t                  '<button type=\"button\" class=\"btn default\" data-dismiss=\"modal\">关闭</button>' +\n\t\t                  '</div></div></div></div>';\n\t\tvar album_tab = '<li><a data-toggle=\"tab\" href=\"#{tab_content_id}\" data-catalog=\"{catalog}\" data-tag=\"{tag}\"> {tag} </a></li>';\n\t\tvar album_tab_content = '<div id=\"{tab_content_id}\" class=\"tab-pane fade\">' +\n\t\t                        '<div class=\"row img_content\"></div>' +\n\t\t                        '<div class=\"row\">' +\n\t\t                        '<div class=\"col-md-12 text-right\" id=\"{album_pag_id}\"></div></div></div>';\n\n\n\n\t\tvar $album_modal = $('#album_modal');\n\t\tif ( $album_modal.length == 0 ) {\n\t\t\t$.get(settings.album_catalog_uri , function (ret) {\n\t\t\t\tvar tab = '';\n\t\t\t\tvar content = '';\n\n\t\t\t\tfor ( var i = 0 ; i < ret.length ; i ++ ) {\n\t\t\t\t\tvar tab_content_id = 'album_tab_content_' + ret[i]['id'];\n\t\t\t\t\tvar album_pag_id = 'album_pag_' + ret[i]['id'];\n\t\t\t\t\ttab += album_tab.replace(/\\{tab_content_id}/g , tab_content_id)\n\t\t\t\t\t               .replace(/\\{catalog}/g , ret[i]['id'])\n\t\t\t\t\t               .replace(/\\{tag}/g , ret[i]['tag']);\n\t\t\t\t\tcontent += album_tab_content.replace(/\\{tab_content_id}/g , tab_content_id)\n\t\t\t\t\t                           .replace(/\\{catalog}/g , ret[i]['id'])\n\t\t\t\t\t                            .replace(/\\{album_pag_id}/g , album_pag_id)\n\t\t\t\t\t                           .replace(/\\{tag}/g , ret[i]['tag']);\n\n\t\t\t\t}\n\t\t\t\tvar html = album_modal.replace(/\\{tab}/g , tab)\n\t\t\t\t                      .replace(/\\{tab_content}/g , content);\n\t\t\t\t$('body').append( html );\n\t\t\t\t$album_modal = $('#album_modal');\n\n\t\t\t\t//打开album选择 modal\n\t\t\t\t$open_album_btn.on('click' , function(e){\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t//$album_modal.find('[data-toggle=\"tab\"][data-tag=\"'+ settings.param.default_album +'\"]').tab('show');\n\t\t\t\t\t$album_modal.modal('show');\n\t\t\t\t});\n\n\t\t\t\t//切换tab\n\t\t\t\t$album_modal.find('a[data-toggle=\"tab\"]').on('shown.bs.tab', function (e) {\n\t\t\t\t\t//e.relatedTarget // previous active tab\n\t\t\t\t\t//e.target // newly activated tab\n\t\t\t\t\t//console.log( e.target );\n\t\t\t\t\t//console.log( $(e.target).data('catalog') );\n\t\t\t\t\tsettings.param.cur_tab = e.target ;\n\t\t\t\t\t$this.data('album' , settings );\n\t\t\t\t\tvar $target = $(e.target);\n\t\t\t\t\tvar page = $target.data('page');\n\n\t\t\t\t\tif ( empty(page) ) {\n\t\t\t\t\t\tload_album( $this , $target );\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t//设置默认的tab\n\t\t\t\t//console.log(settings.param.default_tag);\n\t\t\t\tvar len = $album_modal.find('a[data-toggle=\"tab\"][data-tag=\"'+ settings.param.default_tag +'\"]').length ;\n\t\t\t\tif ( len == 0  ) {\n\t\t\t\t\t$album_modal.find('a[data-toggle=\"tab\"]').eq(0).tab('show');\n\t\t\t\t} else {\n\t\t\t\t\t$album_modal.find('a[data-toggle=\"tab\"][data-tag=\"'+ settings.param.default_tag +'\"]')\n\t\t\t\t\t            .tab('show');\n\t\t\t\t}\n\n\n\t\t\t});\n\t\t}\n\n\t\t$(document).on('click' , '.album_item img' , function (e) {\n\t\t\tvar img_src =  $(this).attr('src') ;\n\t\t\tsure.init('确认选择吗?' , function(){\n\t\t\t\t$album_modal.modal('hide');\n\t\t\t\tsettings.onChoose( img_src );\n\t\t\t});\n\t\t});\n\t};\n\n\tfunction load_album( $this , $target ) {\n\t\tsettings = $this.data('album');\n\t\tif ( empty($target) ) {\n\t\t\t$target = $(settings.param.cur_tab);\n\t\t}\n\t\tvar page = $target.data('page');\n\t\tpage = empty(page) ? 1 : page ;\n\n\t\tvar catalog = $target.data('catalog');\n\t\tvar album_pag_id = 'album_pag_' + $target.data('catalog');\n\t\tvar $album_pag = $('#' + album_pag_id );\n\n\t\tvar data = {\n\t\t\tpage : page ,\n\t\t\tpage_size : settings.param.page_size ,\n\t\t\tcatalog : catalog\n\t\t};\n\n\t\tloading.start();\n\t\t$.get( settings.album_uri , data , function(ret){\n\t\t\tloading.end();\n\t\t\t$target.data('rows' , ret.rows );\n\t\t\t$target.data('total' , ret.total );\n\t\t\t$target.data('page' , page );\n\t\t\t//tab_content_id\n\t\t\trender_img( $target , ret.rows  );\n\t\t\tif ( $album_pag.html() == '' ) {\n\t\t\t\tvar total_page = Math.ceil( ret.total / settings.param.page_size );\n\t\t\t\t$album_pag.bootpag({\n\t\t\t\t\ttotal: total_page ,          // total pages\n\t\t\t\t\tpage: 1,            // default page\n\t\t\t\t\tmaxVisible: 5,     // visible pagination\n\t\t\t\t\tleaps: true         // next/prev leaps through maxVisible\n\t\t\t\t}).on(\"page\", function(event, num){\n\n\t\t\t\t\t$target.data('page' , num);\n\t\t\t\t\tload_album( $this , $target );\n\t\t\t\t\t//$(\"#content\").html(\"Page \" + num); // or some ajax content loading...\n\t\t\t\t\t// ... after content load -> change total to 10\n\t\t\t\t\t//$(this).bootpag({total: 10, maxVisible: 10});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction render_img( $target , rows ) {\n\t\tvar album_img = '<div class=\"col-sm-6 col-md-3\">' +\n\t\t                '<a class=\"thumbnail album_item\" href=\"javascript:;\"><img src=\"{icon}\"></a>' +\n\t\t                '<div class=\"caption album_item\">{img_size}</div>' +\n\t\t                '</div>';\n\n\t\tvar img_html = '';\n\t\tfor( var i = 0 ; i < rows.length ; i++ ) {\n\t\t\timg_html += album_img.replace(/\\{icon}/g , rows[i]['uri'])\n\t\t\t                     .replace(/\\{img_size}/g , rows[i]['img_size']);\n\t\t}\n\t\t\n\t\tvar tab_content_id = $target.attr('href');\n\t\t$(tab_content_id).find('.img_content').html(img_html);\n\t}\n\n\t//插件的方法\n\tvar methods = {\n\t\t//初始化\n\t\tinit : function (options) {\n\t\t\treturn this.each(function () {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar settings = $this.data('album');\n\t\t\t\tif ( typeof(settings) == 'undefined' ) {\n\t\t\t\t\t//默认值\n\t\t\t\t\tvar defaults = {\n\t\t\t\t\t\turi : '' ,\n\t\t\t\t\t\tbtnStyle : 'btn btn-info' ,\n\t\t\t\t\t\tbtnText : '<i class=\"fa fa-image\"></i> 相册选取' ,\n\t\t\t\t\t\talbum_uri : '' ,\n\t\t\t\t\t\talbum_catalog_uri : '' ,\n\t\t\t\t\t\tparam : {\n\t\t\t\t\t\t\tdefault_tag : ''\n\t\t\t\t\t\t} ,\n\t\t\t\t\t\tonChoose : function () {}\n\t\t\t\t\t};\n\t\t\t\t\tsettings = $.extend({} , defaults , options);\n\t\t\t\t\t$this.data('album' , settings);\n\t\t\t\t} else {\n\t\t\t\t\tsettings = $.extend({} , settings , options);\n\t\t\t\t}\n\n\t\t\t\t//console.log( settings );\n\t\t\t\t//初始化grid\n\t\t\t\t_init_album($this);\n\t\t\t});\n\t\t} ,\n\n\t\treload : function () {\n\n\t\t},\n\n\t\tget_param : function () {\n\t\t\treturn $(this).data('album').param;\n\t\t} ,\n\n\t\tset_param : function (param) {\n\t\t\tvar settings = $(this).data('album');\n\t\t\tsettings['param'] = param;\n\t\t\t$(this).data('album' , settings);\n\t\t}\n\n\t};\n\n\t//插件入口\n\t$.fn.Album = function () {\n\t\tvar method = arguments[0];\n\t\tif ( methods[method] ) {\n\t\t\tmethod = methods[method];\n\t\t\targuments = Array.prototype.slice.call(arguments , 1);\n\t\t} else if ( typeof(method) == 'object' || ! method ) {\n\t\t\tmethod = methods.init;\n\t\t} else {\n\t\t\treturn this;\n\t\t}\n\n\t\treturn method.apply(this , arguments);\n\t}\n})(jQuery);\n"
  },
  {
    "path": "resources/assets/static/plugins/dmg-ui/auto_fill.js",
    "content": "(function($) {\n\tvar doFill = function( $this , data ) {\n\t\t//查询 下级全部含有 data-field 的 dom\n\t\t$this.find('div[data-field],textarea[data-field],input[data-field]').each(function(){\n\t\t\tvar field = $(this).data('field');\n\t\t\tvar formatter = $(this).data('formatter');\n\t\t\tvar value =  '' ;\n\t\t\t//如果有值\n\t\t\tif ( isset( data[field] ) ) {\n\t\t\t\tvalue = data[field] ;\n\t\t\t}\n\t\t\t//如果有格式化函数\n\t\t\tif ( !empty( formatter ) ) {\n\t\t\t\tvalue = eval(formatter)( value , data );\n\t\t\t}\n\n\t\t\tif( $(this)[0].type == 'text' || $(this)[0].type == 'textarea' ) {\n\t\t\t\t$(this).val( value );\n\t\t\t} else {\n\t\t\t\t$(this).html( value );\n\t\t\t}\n\t\t});\n\t};\n\n\tvar methods = {\n\t\tinit: function(options) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar settings = $this.data('AutoFill');\n\n\t\t\t\tif(typeof(settings) == 'undefined') {\n\t\t\t\t\tvar defaults = {\n\t\t\t\t\t\tdata: 'value',\n\t\t\t\t\t\tonSomeEvent: function() {}\n\t\t\t\t\t};\n\t\t\t\t\tsettings = $.extend({}, defaults, options);\n\t\t\t\t} else {\n\t\t\t\t\tsettings = $.extend({}, settings, options);\n\t\t\t\t}\n\t\t\t\t$this.data('AutoFill', settings);\n\n\t\t\t\t// 代码在这里运行\n\t\t\t\tdoFill( $this , settings.data );\n\t\t\t});\n\t\t},\n\n\t\treload: function( data ) {\n\t\t\tdoFill( $(this) , data );\n\t\t},\n\n\t\treset : function() {\n\t\t\t//清除\n\t\t\t$(this).find('div[data-field],textarea[data-field],input[data-field]').each(function(){\n\t\t\t\tif( $(this)[0].type == 'text' || $(this)[0].type == 'textarea') {\n\t\t\t\t\t$(this).val( '' );\n\t\t\t\t} else {\n\t\t\t\t\t$(this).html( '' );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t$.fn.AutoFill = function() {\n\t\tvar method = arguments[0];\n\n\t\tif(methods[method]) {\n\t\t\tmethod = methods[method];\n\t\t\targuments = Array.prototype.slice.call(arguments, 1);\n\t\t} else if( typeof(method) == 'object' || !method ) {\n\t\t\tmethod = methods.init;\n\t\t} else {\n\t\t\t$.error( 'Method ' +  method + ' does not exist on jQuery.pluginName' );\n\t\t\treturn this;\n\t\t}\n\n\t\treturn method.apply(this, arguments);\n\n\t}\n\n})(jQuery);"
  },
  {
    "path": "resources/assets/static/plugins/dmg-ui/tiles.js",
    "content": "/**\n * JQuery Tiles\n */\n\n;(function ($) {\n\n\t//初始化页面\n\tvar _init_tiles = function ($this) {\n\t\tvar settings = $this.data('tiles');\n\n\n\t\tload_data($this);\n\t};\n\n\tvar load_data = function ($this) {\n\t\tvar settings = $this.data('tiles');\n\t\t//console.log( settings );\n\n\t\t//取数据\n\t\t$.ajax({\n\t\t\turl : settings.uri ,\n\t\t\tdata : settings.param ,\n\t\t\ttype : \"GET\" ,\n\t\t\tdataType : 'JSON' ,\n\t\t\terror : function (XHR) {\n\t\t\t\ttips.error(XHR.status + ' ' + XHR.statusText);\n\t\t\t} ,\n\t\t\tsuccess : function (ret) {\n\t\t\t\tif ( ret.code == 0 ) {\n\t\t\t\t\t$this.data('rows' , ret.data.rows);\n\n\t\t\t\t\trender($this , ret.data.rows);\n\t\t\t\t\tsettings.onSuccess( ret.data.rows , settings.param );\n\t\t\t\t} else if ( ret.code = 401 ) {\n\t\t\t\t\ttips.error('请先登录');\n\t\t\t\t\tbody_html.push('<tr class=\"danger\"><td align=\"center\" colspan=\"' + col_span + '\">请先登录 Orz</td></tr>');\n\t\t\t\t} else {\n\t\t\t\t\ttips.error(ret.msg);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\tvar render = function ($this , data) {\n\t\tvar settings = $this.data('tiles');\n\t\tvar tiles_container = '<div class=\"tiles \">{tile}</div>';\n\t\tvar tile_tmp = '<div class=\"tile {is_image} {color}\">' +\n                   '<a href=\"{link}\"><div class=\"tile-body\">{icon}</div></a>' +\n                   '<div class=\"tile-object\">' +\n                   '<div class=\"name\"> {name} </div>' +\n                   '<div class=\"number\">{action}</div>' +\n                   '</div></div>';\n\t\tvar html = [];\n\n\t\tfor ( var i = 0 ; i < data.length ; i ++ ) {\n\t\t\tvar row = data[i];\n\t\t\tvar tmp_html = tile_tmp;\n\n\t\t\ttmp_html = tmp_html.replace('{is_image}' , settings.is_image( row ) ? 'image selected' : '');\n\t\t\ttmp_html = tmp_html.replace('{color}' , settings.color);\n\t\t\ttmp_html = tmp_html.replace('{icon}' , eval(settings.icon)(row , i));\n\t\t\ttmp_html = tmp_html.replace('{name}' , eval(settings.name)(row , i));\n\n\t\t\tvar link = eval(settings.link)(row , i);\n\t\t\tif ( empty(link) ) {\n\t\t\t\tlink = 'javascript:;';\n\t\t\t}\n\t\t\ttmp_html = tmp_html.replace('{link}' , link);\n\n\t\t\tvar action = '';\n\t\t\tfor ( var j = 0 ; j < settings.action.length ; j ++ ) {\n\t\t\t\taction += eval(settings.action[j])(row , i);\n\t\t\t}\n\t\t\ttmp_html = tmp_html.replace('{action}' , action);\n\t\t\t//填充\n\t\t\thtml.push(tmp_html);\n\t\t}\n\t\t$this.html( tiles_container.replace( '{tile}' , html.join('') ));\n\t};\n\n\t//插件的方法\n\tvar methods = {\n\t\t//初始化\n\t\tinit : function (options) {\n\t\t\treturn this.each(function () {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar settings = $this.data('tiles');\n\t\t\t\tif ( typeof(settings) == 'undefined' ) {\n\t\t\t\t\t//默认值\n\t\t\t\t\tvar defaults = {\n\t\t\t\t\t\turi : '' ,\n\t\t\t\t\t\tparam : {} ,\n\t\t\t\t\t\tis_image : '' ,\n\t\t\t\t\t\tcolor : '' ,\n\t\t\t\t\t\ticon : function () { } ,\n\t\t\t\t\t\tname : function () { } ,\n\t\t\t\t\t\tlink : function () { } ,\n\t\t\t\t\t\taction : [] ,\n\t\t\t\t\t\tonError : function (error) {\n\t\t\t\t\t\t\ttips.error(error);\n\t\t\t\t\t\t} ,\n\t\t\t\t\t\tonSuccess : function () { }\n\t\t\t\t\t};\n\t\t\t\t\tsettings = $.extend({} , defaults , options);\n\t\t\t\t\t$this.data('tiles' , settings);\n\t\t\t\t} else {\n\t\t\t\t\tsettings = $.extend({} , settings , options);\n\t\t\t\t}\n\n\t\t\t\t//初始化grid\n\t\t\t\t_init_tiles($this);\n\t\t\t});\n\t\t} ,\n\n\t\t//重新加载\n\t\treload : function () {\n\t\t\tload_data($(this));\n\t\t} ,\n\n\t\tget_param : function () {\n\t\t\treturn $(this).data('tiles').param;\n\t\t} ,\n\n\t\tset_param : function (param) {\n\t\t\tvar settings = $(this).data('tiles');\n\t\t\tsettings['param'] = param;\n\t\t\t$(this).data('tiles' , settings);\n\t\t} ,\n\n\t\t//取单行数据\n\t\tget_row : function (id) {\n\t\t\tvar rows = $(this).data('rows');\n\t\t\tfor ( var i = 0 ; i < rows.length ; i ++ ) {\n\t\t\t\tvar row = rows[i];\n\t\t\t\tif ( row.id == id ) {\n\t\t\t\t\treturn row;\n\t\t\t\t}\n\t\t\t}\n\t\t} ,\n\n\t\t//取多行数据\n\t\tget_rows : function () {\n\t\t\treturn $(this).data('rows');\n\t\t}\n\t};\n\n\t//插件入口\n\t$.fn.Tiles = function () {\n\t\tvar method = arguments[0];\n\t\tif ( methods[method] ) {\n\t\t\tmethod = methods[method];\n\t\t\targuments = Array.prototype.slice.call(arguments , 1);\n\t\t} else if ( typeof(method) == 'object' || ! method ) {\n\t\t\tmethod = methods.init;\n\t\t} else {\n\t\t\treturn this;\n\t\t}\n\n\t\treturn method.apply(this , arguments);\n\t}\n})(jQuery);\n"
  },
  {
    "path": "resources/assets/static/plugins/jquery-md5/jQuery.md5.js",
    "content": "\t/**\n\t * jQuery MD5 hash algorithm function\n\t * \n\t * \t<code>\n\t * \t\tCalculate the md5 hash of a String \n\t * \t\tString $.md5 ( String str )\n\t * \t</code>\n\t * \n\t * Calculates the MD5 hash of str using the » RSA Data Security, Inc. MD5 Message-Digest Algorithm, and returns that hash. \n\t * MD5 (Message-Digest algorithm 5) is a widely-used cryptographic hash function with a 128-bit hash value. MD5 has been employed in a wide variety of security applications, and is also commonly used to check the integrity of data. The generated hash is also non-reversable. Data cannot be retrieved from the message digest, the digest uniquely identifies the data.\n\t * MD5 was developed by Professor Ronald L. Rivest in 1994. Its 128 bit (16 byte) message digest makes it a faster implementation than SHA-1.\n\t * This script is used to process a variable length message into a fixed-length output of 128 bits using the MD5 algorithm. It is fully compatible with UTF-8 encoding. It is very useful when u want to transfer encrypted passwords over the internet. If you plan using UTF-8 encoding in your project don't forget to set the page encoding to UTF-8 (Content-Type meta tag). \n\t * This function orginally get from the WebToolkit and rewrite for using as the jQuery plugin.\n\t * \n\t * Example\n\t * \tCode\n\t * \t\t<code>\n\t * \t\t\t$.md5(\"I'm Persian.\"); \n\t * \t\t</code>\n\t * \tResult\n\t * \t\t<code>\n\t * \t\t\t\"b8c901d0f02223f9761016cfff9d68df\"\n\t * \t\t</code>\n\t * \n\t * @alias Muhammad Hussein Fattahizadeh < muhammad [AT] semnanweb [DOT] com >\n\t * @link http://www.semnanweb.com/jquery-plugin/md5.html\n\t * @see http://www.webtoolkit.info/\n\t * @license http://www.gnu.org/licenses/gpl.html [GNU General Public License]\n\t * @param {jQuery} {md5:function(string))\n\t * @return string\n\t */\n\t(function($){\n\t\tvar rotateLeft = function(lValue, iShiftBits) {\n\t\t\treturn (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));\n\t\t}\n\t\tvar addUnsigned = function(lX, lY) {\n\t\t\tvar lX4, lY4, lX8, lY8, lResult;\n\t\t\tlX8 = (lX & 0x80000000);\n\t\t\tlY8 = (lY & 0x80000000);\n\t\t\tlX4 = (lX & 0x40000000);\n\t\t\tlY4 = (lY & 0x40000000);\n\t\t\tlResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);\n\t\t\tif (lX4 & lY4) return (lResult ^ 0x80000000 ^ lX8 ^ lY8);\n\t\t\tif (lX4 | lY4) {\n\t\t\t\tif (lResult & 0x40000000) return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);\n\t\t\t\telse return (lResult ^ 0x40000000 ^ lX8 ^ lY8);\n\t\t\t} else {\n\t\t\t\treturn (lResult ^ lX8 ^ lY8);\n\t\t\t}\n\t\t}\n\t\tvar F = function(x, y, z) {\n\t\t\treturn (x & y) | ((~ x) & z);\n\t\t}\n\t\tvar G = function(x, y, z) {\n\t\t\treturn (x & z) | (y & (~ z));\n\t\t}\n\t\tvar H = function(x, y, z) {\n\t\t\treturn (x ^ y ^ z);\n\t\t}\n\t\tvar I = function(x, y, z) {\n\t\t\treturn (y ^ (x | (~ z)));\n\t\t}\n\t\tvar FF = function(a, b, c, d, x, s, ac) {\n\t\t\ta = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac));\n\t\t\treturn addUnsigned(rotateLeft(a, s), b);\n\t\t};\n\t\tvar GG = function(a, b, c, d, x, s, ac) {\n\t\t\ta = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac));\n\t\t\treturn addUnsigned(rotateLeft(a, s), b);\n\t\t};\n\t\tvar HH = function(a, b, c, d, x, s, ac) {\n\t\t\ta = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac));\n\t\t\treturn addUnsigned(rotateLeft(a, s), b);\n\t\t};\n\t\tvar II = function(a, b, c, d, x, s, ac) {\n\t\t\ta = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac));\n\t\t\treturn addUnsigned(rotateLeft(a, s), b);\n\t\t};\n\t\tvar convertToWordArray = function(string) {\n\t\t\tvar lWordCount;\n\t\t\tvar lMessageLength = string.length;\n\t\t\tvar lNumberOfWordsTempOne = lMessageLength + 8;\n\t\t\tvar lNumberOfWordsTempTwo = (lNumberOfWordsTempOne - (lNumberOfWordsTempOne % 64)) / 64;\n\t\t\tvar lNumberOfWords = (lNumberOfWordsTempTwo + 1) * 16;\n\t\t\tvar lWordArray = Array(lNumberOfWords - 1);\n\t\t\tvar lBytePosition = 0;\n\t\t\tvar lByteCount = 0;\n\t\t\twhile (lByteCount < lMessageLength) {\n\t\t\t\tlWordCount = (lByteCount - (lByteCount % 4)) / 4;\n\t\t\t\tlBytePosition = (lByteCount % 4) * 8;\n\t\t\t\tlWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));\n\t\t\t\tlByteCount++;\n\t\t\t}\n\t\t\tlWordCount = (lByteCount - (lByteCount % 4)) / 4;\n\t\t\tlBytePosition = (lByteCount % 4) * 8;\n\t\t\tlWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);\n\t\t\tlWordArray[lNumberOfWords - 2] = lMessageLength << 3;\n\t\t\tlWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;\n\t\t\treturn lWordArray;\n\t\t};\n\t\tvar wordToHex = function(lValue) {\n\t\t\tvar WordToHexValue = \"\", WordToHexValueTemp = \"\", lByte, lCount;\n\t\t\tfor (lCount = 0; lCount <= 3; lCount++) {\n\t\t\t\tlByte = (lValue >>> (lCount * 8)) & 255;\n\t\t\t\tWordToHexValueTemp = \"0\" + lByte.toString(16);\n\t\t\t\tWordToHexValue = WordToHexValue + WordToHexValueTemp.substr(WordToHexValueTemp.length - 2, 2);\n\t\t\t}\n\t\t\treturn WordToHexValue;\n\t\t};\n\t\tvar uTF8Encode = function(string) {\n\t\t\tstring = string.replace(/\\x0d\\x0a/g, \"\\x0a\");\n\t\t\tvar output = \"\";\n\t\t\tfor (var n = 0; n < string.length; n++) {\n\t\t\t\tvar c = string.charCodeAt(n);\n\t\t\t\tif (c < 128) {\n\t\t\t\t\toutput += String.fromCharCode(c);\n\t\t\t\t} else if ((c > 127) && (c < 2048)) {\n\t\t\t\t\toutput += String.fromCharCode((c >> 6) | 192);\n\t\t\t\t\toutput += String.fromCharCode((c & 63) | 128);\n\t\t\t\t} else {\n\t\t\t\t\toutput += String.fromCharCode((c >> 12) | 224);\n\t\t\t\t\toutput += String.fromCharCode(((c >> 6) & 63) | 128);\n\t\t\t\t\toutput += String.fromCharCode((c & 63) | 128);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t};\n\t\t$.extend({\n\t\t\tmd5: function(string) {\n\t\t\t\tvar x = Array();\n\t\t\t\tvar k, AA, BB, CC, DD, a, b, c, d;\n\t\t\t\tvar S11=7, S12=12, S13=17, S14=22;\n\t\t\t\tvar S21=5, S22=9 , S23=14, S24=20;\n\t\t\t\tvar S31=4, S32=11, S33=16, S34=23;\n\t\t\t\tvar S41=6, S42=10, S43=15, S44=21;\n\t\t\t\tstring = uTF8Encode(string);\n\t\t\t\tx = convertToWordArray(string);\n\t\t\t\ta = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;\n\t\t\t\tfor (k = 0; k < x.length; k += 16) {\n\t\t\t\t\tAA = a; BB = b; CC = c; DD = d;\n\t\t\t\t\ta = FF(a, b, c, d, x[k+0],  S11, 0xD76AA478);\n\t\t\t\t\td = FF(d, a, b, c, x[k+1],  S12, 0xE8C7B756);\n\t\t\t\t\tc = FF(c, d, a, b, x[k+2],  S13, 0x242070DB);\n\t\t\t\t\tb = FF(b, c, d, a, x[k+3],  S14, 0xC1BDCEEE);\n\t\t\t\t\ta = FF(a, b, c, d, x[k+4],  S11, 0xF57C0FAF);\n\t\t\t\t\td = FF(d, a, b, c, x[k+5],  S12, 0x4787C62A);\n\t\t\t\t\tc = FF(c, d, a, b, x[k+6],  S13, 0xA8304613);\n\t\t\t\t\tb = FF(b, c, d, a, x[k+7],  S14, 0xFD469501);\n\t\t\t\t\ta = FF(a, b, c, d, x[k+8],  S11, 0x698098D8);\n\t\t\t\t\td = FF(d, a, b, c, x[k+9],  S12, 0x8B44F7AF);\n\t\t\t\t\tc = FF(c, d, a, b, x[k+10], S13, 0xFFFF5BB1);\n\t\t\t\t\tb = FF(b, c, d, a, x[k+11], S14, 0x895CD7BE);\n\t\t\t\t\ta = FF(a, b, c, d, x[k+12], S11, 0x6B901122);\n\t\t\t\t\td = FF(d, a, b, c, x[k+13], S12, 0xFD987193);\n\t\t\t\t\tc = FF(c, d, a, b, x[k+14], S13, 0xA679438E);\n\t\t\t\t\tb = FF(b, c, d, a, x[k+15], S14, 0x49B40821);\n\t\t\t\t\ta = GG(a, b, c, d, x[k+1],  S21, 0xF61E2562);\n\t\t\t\t\td = GG(d, a, b, c, x[k+6],  S22, 0xC040B340);\n\t\t\t\t\tc = GG(c, d, a, b, x[k+11], S23, 0x265E5A51);\n\t\t\t\t\tb = GG(b, c, d, a, x[k+0],  S24, 0xE9B6C7AA);\n\t\t\t\t\ta = GG(a, b, c, d, x[k+5],  S21, 0xD62F105D);\n\t\t\t\t\td = GG(d, a, b, c, x[k+10], S22, 0x2441453);\n\t\t\t\t\tc = GG(c, d, a, b, x[k+15], S23, 0xD8A1E681);\n\t\t\t\t\tb = GG(b, c, d, a, x[k+4],  S24, 0xE7D3FBC8);\n\t\t\t\t\ta = GG(a, b, c, d, x[k+9],  S21, 0x21E1CDE6);\n\t\t\t\t\td = GG(d, a, b, c, x[k+14], S22, 0xC33707D6);\n\t\t\t\t\tc = GG(c, d, a, b, x[k+3],  S23, 0xF4D50D87);\n\t\t\t\t\tb = GG(b, c, d, a, x[k+8],  S24, 0x455A14ED);\n\t\t\t\t\ta = GG(a, b, c, d, x[k+13], S21, 0xA9E3E905);\n\t\t\t\t\td = GG(d, a, b, c, x[k+2],  S22, 0xFCEFA3F8);\n\t\t\t\t\tc = GG(c, d, a, b, x[k+7],  S23, 0x676F02D9);\n\t\t\t\t\tb = GG(b, c, d, a, x[k+12], S24, 0x8D2A4C8A);\n\t\t\t\t\ta = HH(a, b, c, d, x[k+5],  S31, 0xFFFA3942);\n\t\t\t\t\td = HH(d, a, b, c, x[k+8],  S32, 0x8771F681);\n\t\t\t\t\tc = HH(c, d, a, b, x[k+11], S33, 0x6D9D6122);\n\t\t\t\t\tb = HH(b, c, d, a, x[k+14], S34, 0xFDE5380C);\n\t\t\t\t\ta = HH(a, b, c, d, x[k+1],  S31, 0xA4BEEA44);\n\t\t\t\t\td = HH(d, a, b, c, x[k+4],  S32, 0x4BDECFA9);\n\t\t\t\t\tc = HH(c, d, a, b, x[k+7],  S33, 0xF6BB4B60);\n\t\t\t\t\tb = HH(b, c, d, a, x[k+10], S34, 0xBEBFBC70);\n\t\t\t\t\ta = HH(a, b, c, d, x[k+13], S31, 0x289B7EC6);\n\t\t\t\t\td = HH(d, a, b, c, x[k+0],  S32, 0xEAA127FA);\n\t\t\t\t\tc = HH(c, d, a, b, x[k+3],  S33, 0xD4EF3085);\n\t\t\t\t\tb = HH(b, c, d, a, x[k+6],  S34, 0x4881D05);\n\t\t\t\t\ta = HH(a, b, c, d, x[k+9],  S31, 0xD9D4D039);\n\t\t\t\t\td = HH(d, a, b, c, x[k+12], S32, 0xE6DB99E5);\n\t\t\t\t\tc = HH(c, d, a, b, x[k+15], S33, 0x1FA27CF8);\n\t\t\t\t\tb = HH(b, c, d, a, x[k+2],  S34, 0xC4AC5665);\n\t\t\t\t\ta = II(a, b, c, d, x[k+0],  S41, 0xF4292244);\n\t\t\t\t\td = II(d, a, b, c, x[k+7],  S42, 0x432AFF97);\n\t\t\t\t\tc = II(c, d, a, b, x[k+14], S43, 0xAB9423A7);\n\t\t\t\t\tb = II(b, c, d, a, x[k+5],  S44, 0xFC93A039);\n\t\t\t\t\ta = II(a, b, c, d, x[k+12], S41, 0x655B59C3);\n\t\t\t\t\td = II(d, a, b, c, x[k+3],  S42, 0x8F0CCC92);\n\t\t\t\t\tc = II(c, d, a, b, x[k+10], S43, 0xFFEFF47D);\n\t\t\t\t\tb = II(b, c, d, a, x[k+1],  S44, 0x85845DD1);\n\t\t\t\t\ta = II(a, b, c, d, x[k+8],  S41, 0x6FA87E4F);\n\t\t\t\t\td = II(d, a, b, c, x[k+15], S42, 0xFE2CE6E0);\n\t\t\t\t\tc = II(c, d, a, b, x[k+6],  S43, 0xA3014314);\n\t\t\t\t\tb = II(b, c, d, a, x[k+13], S44, 0x4E0811A1);\n\t\t\t\t\ta = II(a, b, c, d, x[k+4],  S41, 0xF7537E82);\n\t\t\t\t\td = II(d, a, b, c, x[k+11], S42, 0xBD3AF235);\n\t\t\t\t\tc = II(c, d, a, b, x[k+2],  S43, 0x2AD7D2BB);\n\t\t\t\t\tb = II(b, c, d, a, x[k+9],  S44, 0xEB86D391);\n\t\t\t\t\ta = addUnsigned(a, AA);\n\t\t\t\t\tb = addUnsigned(b, BB);\n\t\t\t\t\tc = addUnsigned(c, CC);\n\t\t\t\t\td = addUnsigned(d, DD);\n\t\t\t\t}\n\t\t\t\tvar tempValue = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d);\n\t\t\t\treturn tempValue.toLowerCase();\n\t\t\t}\n\t\t});\n\t})(jQuery);\n"
  },
  {
    "path": "resources/assets/static/src/js/global/app.js",
    "content": "/**\n Core script to handle the entire theme and core functions\n **/\nvar App = function () {\n\n\t// IE mode\n\tvar isRTL = false;\n\tvar isIE8 = false;\n\tvar isIE9 = false;\n\tvar isIE10 = false;\n\n\tvar resizeHandlers = [];\n\n\tvar assetsPath = '../assets/';\n\n\tvar globalImgPath = 'static/themes/global/img/';\n\n\tvar globalPluginsPath = 'global/plugins/';\n\n\tvar globalCssPath = 'global/css/';\n\n\t// theme layout color set\n\n\tvar brandColors = {\n\t\t'blue' : '#89C4F4' ,\n\t\t'red' : '#F3565D' ,\n\t\t'green' : '#1bbc9b' ,\n\t\t'purple' : '#9b59b6' ,\n\t\t'grey' : '#95a5a6' ,\n\t\t'yellow' : '#F8CB00'\n\t};\n\n\t// initializes main settings\n\tvar handleInit = function () {\n\n\t\tif ( $('body').css('direction') === 'rtl' ) {\n\t\t\tisRTL = true;\n\t\t}\n\n\t\tisIE8 = ! ! navigator.userAgent.match(/MSIE 8.0/);\n\t\tisIE9 = ! ! navigator.userAgent.match(/MSIE 9.0/);\n\t\tisIE10 = ! ! navigator.userAgent.match(/MSIE 10.0/);\n\n\t\tif ( isIE10 ) {\n\t\t\t$('html').addClass('ie10'); // detect IE10 version\n\t\t}\n\n\t\tif ( isIE10 || isIE9 || isIE8 ) {\n\t\t\t$('html').addClass('ie'); // detect IE10 version\n\t\t}\n\t};\n\n\t// runs callback functions set by App.addResponsiveHandler().\n\tvar _runResizeHandlers = function () {\n\t\t// reinitialize other subscribed elements\n\t\tfor ( var i = 0 ; i < resizeHandlers.length ; i ++ ) {\n\t\t\tvar each = resizeHandlers[i];\n\t\t\teach.call();\n\t\t}\n\t};\n\n\t// handle the layout reinitialization on window resize\n\tvar handleOnResize = function () {\n\t\tvar resize;\n\t\tif ( isIE8 ) {\n\t\t\tvar currheight;\n\t\t\t$(window).resize(function () {\n\t\t\t\tif ( currheight == document.documentElement.clientHeight ) {\n\t\t\t\t\treturn; //quite event since only body resized not window.\n\t\t\t\t}\n\t\t\t\tif ( resize ) {\n\t\t\t\t\tclearTimeout(resize);\n\t\t\t\t}\n\t\t\t\tresize = setTimeout(function () {\n\t\t\t\t\t_runResizeHandlers();\n\t\t\t\t} , 50); // wait 50ms until window resize finishes.\n\t\t\t\tcurrheight = document.documentElement.clientHeight; // store last body client height\n\t\t\t});\n\t\t} else {\n\t\t\t$(window).resize(function () {\n\t\t\t\tif ( resize ) {\n\t\t\t\t\tclearTimeout(resize);\n\t\t\t\t}\n\t\t\t\tresize = setTimeout(function () {\n\t\t\t\t\t_runResizeHandlers();\n\t\t\t\t} , 50); // wait 50ms until window resize finishes.\n\t\t\t});\n\t\t}\n\t};\n\n\t// Handles portlet tools & actions\n\tvar handlePortletTools = function () {\n\t\t// handle portlet remove\n\t\t$('body').on('click' , '.portlet > .portlet-title > .tools > a.remove' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar portlet = $(this).closest(\".portlet\");\n\n\t\t\tif ( $('body').hasClass('page-portlet-fullscreen') ) {\n\t\t\t\t$('body').removeClass('page-portlet-fullscreen');\n\t\t\t}\n\n\t\t\tportlet.find('.portlet-title .fullscreen').tooltip('destroy');\n\t\t\tportlet.find('.portlet-title > .tools > .reload').tooltip('destroy');\n\t\t\tportlet.find('.portlet-title > .tools > .remove').tooltip('destroy');\n\t\t\tportlet.find('.portlet-title > .tools > .config').tooltip('destroy');\n\t\t\tportlet.find('.portlet-title > .tools > .collapse, .portlet > .portlet-title > .tools > .expand').tooltip('destroy');\n\n\t\t\tportlet.remove();\n\t\t});\n\n\t\t// handle portlet fullscreen\n\t\t$('body').on('click' , '.portlet > .portlet-title .fullscreen' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar portlet = $(this).closest(\".portlet\");\n\t\t\tif ( portlet.hasClass('portlet-fullscreen') ) {\n\t\t\t\t$(this).removeClass('on');\n\t\t\t\tportlet.removeClass('portlet-fullscreen');\n\t\t\t\t$('body').removeClass('page-portlet-fullscreen');\n\t\t\t\tportlet.children('.portlet-body').css('height' , 'auto');\n\t\t\t} else {\n\t\t\t\tvar height = App.getViewPort().height -\n\t\t\t\t             portlet.children('.portlet-title').outerHeight() -\n\t\t\t\t             parseInt(portlet.children('.portlet-body').css('padding-top')) -\n\t\t\t\t             parseInt(portlet.children('.portlet-body').css('padding-bottom'));\n\n\t\t\t\t$(this).addClass('on');\n\t\t\t\tportlet.addClass('portlet-fullscreen');\n\t\t\t\t$('body').addClass('page-portlet-fullscreen');\n\t\t\t\tportlet.children('.portlet-body').css('height' , height);\n\t\t\t}\n\t\t});\n\n\t\t$('body').on('click' , '.portlet > .portlet-title > .tools > a.reload' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar el = $(this).closest(\".portlet\").children(\".portlet-body\");\n\t\t\tvar url = $(this).attr(\"data-url\");\n\t\t\tvar error = $(this).attr(\"data-error-display\");\n\t\t\tif ( url ) {\n\t\t\t\tApp.blockUI({\n\t\t\t\t\ttarget : el ,\n\t\t\t\t\tanimate : true ,\n\t\t\t\t\toverlayColor : 'none'\n\t\t\t\t});\n\t\t\t\t$.ajax({\n\t\t\t\t\ttype : \"GET\" ,\n\t\t\t\t\tcache : false ,\n\t\t\t\t\turl : url ,\n\t\t\t\t\tdataType : \"html\" ,\n\t\t\t\t\tsuccess : function (res) {\n\t\t\t\t\t\tApp.unblockUI(el);\n\t\t\t\t\t\tel.html(res);\n\t\t\t\t\t\tApp.initAjax() // reinitialize elements & plugins for newly loaded content\n\t\t\t\t\t} ,\n\t\t\t\t\terror : function (xhr , ajaxOptions , thrownError) {\n\t\t\t\t\t\tApp.unblockUI(el);\n\t\t\t\t\t\tvar msg = 'Error on reloading the content. Please check your connection and try again.';\n\t\t\t\t\t\tif ( error == \"toastr\" && toastr ) {\n\t\t\t\t\t\t\ttoastr.error(msg);\n\t\t\t\t\t\t} else if ( error == \"notific8\" && $.notific8 ) {\n\t\t\t\t\t\t\t$.notific8('zindex' , 11500);\n\t\t\t\t\t\t\t$.notific8(msg , {\n\t\t\t\t\t\t\t\ttheme : 'ruby' ,\n\t\t\t\t\t\t\t\tlife : 3000\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\talert(msg);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// for demo purpose\n\t\t\t\tApp.blockUI({\n\t\t\t\t\ttarget : el ,\n\t\t\t\t\tanimate : true ,\n\t\t\t\t\toverlayColor : 'none'\n\t\t\t\t});\n\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\tApp.unblockUI(el);\n\t\t\t\t} , 1000);\n\t\t\t}\n\t\t});\n\n\t\t// load ajax data on page init\n\t\t$('.portlet .portlet-title a.reload[data-load=\"true\"]').click();\n\n\t\t$('body').on('click' , '.portlet > .portlet-title > .tools > .collapse, .portlet .portlet-title > .tools > .expand' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar el = $(this).closest(\".portlet\").children(\".portlet-body\");\n\t\t\tif ( $(this).hasClass(\"collapse\") ) {\n\t\t\t\t$(this).removeClass(\"collapse\").addClass(\"expand\");\n\t\t\t\tel.slideUp(200);\n\t\t\t} else {\n\t\t\t\t$(this).removeClass(\"expand\").addClass(\"collapse\");\n\t\t\t\tel.slideDown(200);\n\t\t\t}\n\t\t});\n\t};\n\n\t// Handlesmaterial design checkboxes\n\tvar handleMaterialDesign = function () {\n\n\t\t// Material design ckeckbox and radio effects\n\t\t$('body').on('click' , '.md-checkbox > label, .md-radio > label' , function () {\n\t\t\tvar the = $(this);\n\t\t\t// find the first span which is our circle/bubble\n\t\t\tvar el = $(this).children('span:first-child');\n\n\t\t\t// add the bubble class (we do this so it doesnt show on page load)\n\t\t\tel.addClass('inc');\n\n\t\t\t// clone it\n\t\t\tvar newone = el.clone(true);\n\n\t\t\t// add the cloned version before our original\n\t\t\tel.before(newone);\n\n\t\t\t// remove the original so that it is ready to run on next click\n\t\t\t$(\".\" + el.attr(\"class\") + \":last\" , the).remove();\n\t\t});\n\n\t\tif ( $('body').hasClass('page-md') ) {\n\t\t\t// Material design click effect\n\t\t\t// credit where credit's due; http://thecodeplayer.com/walkthrough/ripple-click-effect-google-material-design\n\t\t\t//\n\t\t\tvar element , circle , d , x , y;\n\t\t\t$('body').on('click' , 'a.btn, button.btn, input.btn, label.btn' , function (e) {\n\t\t\t\telement = $(this);\n\n\t\t\t\tif ( element.find(\".md-click-circle\").length == 0 ) {\n\t\t\t\t\telement.prepend(\"<span class='md-click-circle'></span>\");\n\t\t\t\t}\n\n\t\t\t\tcircle = element.find(\".md-click-circle\");\n\t\t\t\tcircle.removeClass(\"md-click-animate\");\n\n\t\t\t\tif ( ! circle.height() && ! circle.width() ) {\n\t\t\t\t\td = Math.max(element.outerWidth() , element.outerHeight());\n\t\t\t\t\tcircle.css({height : d , width : d});\n\t\t\t\t}\n\n\t\t\t\tx = e.pageX - element.offset().left - circle.width() / 2;\n\t\t\t\ty = e.pageY - element.offset().top - circle.height() / 2;\n\n\t\t\t\tcircle.css({top : y + 'px' , left : x + 'px'}).addClass(\"md-click-animate\");\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tcircle.remove();\n\t\t\t\t} , 1000);\n\t\t\t});\n\t\t}\n\n\t\t// Floating labels\n\t\tvar handleInput = function (el) {\n\t\t\tif ( el.val() != \"\" ) {\n\t\t\t\tel.addClass('edited');\n\t\t\t} else {\n\t\t\t\tel.removeClass('edited');\n\t\t\t}\n\t\t}\n\n\t\t$('body').on('keydown' , '.form-md-floating-label .form-control' , function (e) {\n\t\t\thandleInput($(this));\n\t\t});\n\t\t$('body').on('blur' , '.form-md-floating-label .form-control' , function (e) {\n\t\t\thandleInput($(this));\n\t\t});\n\n\t\t$('.form-md-floating-label .form-control').each(function () {\n\t\t\tif ( $(this).val().length > 0 ) {\n\t\t\t\t$(this).addClass('edited');\n\t\t\t}\n\t\t});\n\t}\n\n\t// Handles custom checkboxes & radios using jQuery iCheck plugin\n\tvar handleiCheck = function () {\n\t\tif ( ! $().iCheck ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$('.icheck').each(function () {\n\t\t\tvar checkboxClass = $(this).attr('data-checkbox') ? $(this).attr('data-checkbox') : 'icheckbox_minimal-grey';\n\t\t\tvar radioClass = $(this).attr('data-radio') ? $(this).attr('data-radio') : 'iradio_minimal-grey';\n\n\t\t\tif ( checkboxClass.indexOf('_line') > - 1 || radioClass.indexOf('_line') > - 1 ) {\n\t\t\t\t$(this).iCheck({\n\t\t\t\t\tcheckboxClass : checkboxClass ,\n\t\t\t\t\tradioClass : radioClass ,\n\t\t\t\t\tinsert : '<div class=\"icheck_line-icon\"></div>' + $(this).attr(\"data-label\")\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t$(this).iCheck({\n\t\t\t\t\tcheckboxClass : checkboxClass ,\n\t\t\t\t\tradioClass : radioClass\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n\n\t// Handles Bootstrap switches\n\tvar handleBootstrapSwitch = function () {\n\t\tif ( ! $().bootstrapSwitch ) {\n\t\t\treturn;\n\t\t}\n\t\t$('.make-switch').bootstrapSwitch();\n\t};\n\n\t// Handles Bootstrap confirmations\n\tvar handleBootstrapConfirmation = function () {\n\t\tif ( ! $().confirmation ) {\n\t\t\treturn;\n\t\t}\n\t\t$('[data-toggle=confirmation]').confirmation({\n\t\t\tbtnOkClass : 'btn btn-sm btn-success' ,\n\t\t\tbtnCancelClass : 'btn btn-sm btn-danger'\n\t\t});\n\t}\n\n\t// Handles Bootstrap Accordions.\n\tvar handleAccordions = function () {\n\t\t$('body').on('shown.bs.collapse' , '.accordion.scrollable' , function (e) {\n\t\t\tApp.scrollTo($(e.target));\n\t\t});\n\t};\n\n\t// Handles Bootstrap Tabs.\n\tvar handleTabs = function () {\n\t\t//activate tab if tab id provided in the URL\n\t\tif ( location.hash ) {\n\t\t\tvar tabid = encodeURI(location.hash.substr(1));\n\t\t\t$('a[href=\"#' + tabid + '\"]').parents('.tab-pane:hidden').each(function () {\n\t\t\t\tvar tabid = $(this).attr(\"id\");\n\t\t\t\t$('a[href=\"#' + tabid + '\"]').click();\n\t\t\t});\n\t\t\t$('a[href=\"#' + tabid + '\"]').click();\n\t\t}\n\n\t\tif ( $().tabdrop ) {\n\t\t\t$('.tabbable-tabdrop .nav-pills, .tabbable-tabdrop .nav-tabs').tabdrop({\n\t\t\t\ttext : '<i class=\"fa fa-ellipsis-v\"></i>&nbsp;<i class=\"fa fa-angle-down\"></i>'\n\t\t\t});\n\t\t}\n\t};\n\n\t// Handles Bootstrap Modals.\n\tvar handleModals = function () {\n\t\t// fix stackable modal issue: when 2 or more modals opened, closing one of modal will remove .modal-open class.\n\t\t$('body').on('hide.bs.modal' , function () {\n\t\t\tif ( $('.modal:visible').length > 1 && $('html').hasClass('modal-open') === false ) {\n\t\t\t\t$('html').addClass('modal-open');\n\t\t\t} else if ( $('.modal:visible').length <= 1 ) {\n\t\t\t\t$('html').removeClass('modal-open');\n\t\t\t}\n\t\t});\n\n\t\t// fix page scrollbars issue\n\t\t$('body').on('show.bs.modal' , '.modal' , function () {\n\t\t\tif ( $(this).hasClass(\"modal-scroll\") ) {\n\t\t\t\t$('body').addClass(\"modal-open-noscroll\");\n\t\t\t}\n\t\t});\n\n\t\t// fix page scrollbars issue\n\t\t$('body').on('hidden.bs.modal' , '.modal' , function () {\n\t\t\t$('body').removeClass(\"modal-open-noscroll\");\n\t\t});\n\n\t\t// remove ajax content and remove cache on modal closed\n\t\t$('body').on('hidden.bs.modal' , '.modal:not(.modal-cached)' , function () {\n\t\t\t$(this).removeData('bs.modal');\n\t\t});\n\t};\n\n\t// Handles Bootstrap Tooltips.\n\tvar handleTooltips = function () {\n\t\t// global tooltips\n\t\t$('.tooltips').tooltip();\n\n\t\t// portlet tooltips\n\t\t$('.portlet > .portlet-title .fullscreen').tooltip({\n\t\t\ttrigger : 'hover' ,\n\t\t\tcontainer : 'body' ,\n\t\t\ttitle : 'Fullscreen'\n\t\t});\n\t\t$('.portlet > .portlet-title > .tools > .reload').tooltip({\n\t\t\ttrigger : 'hover' ,\n\t\t\tcontainer : 'body' ,\n\t\t\ttitle : 'Reload'\n\t\t});\n\t\t$('.portlet > .portlet-title > .tools > .remove').tooltip({\n\t\t\ttrigger : 'hover' ,\n\t\t\tcontainer : 'body' ,\n\t\t\ttitle : 'Remove'\n\t\t});\n\t\t$('.portlet > .portlet-title > .tools > .config').tooltip({\n\t\t\ttrigger : 'hover' ,\n\t\t\tcontainer : 'body' ,\n\t\t\ttitle : 'Settings'\n\t\t});\n\t\t$('.portlet > .portlet-title > .tools > .collapse, .portlet > .portlet-title > .tools > .expand').tooltip({\n\t\t\ttrigger : 'hover' ,\n\t\t\tcontainer : 'body' ,\n\t\t\ttitle : 'Collapse/Expand'\n\t\t});\n\t};\n\n\t// Handles Bootstrap Dropdowns\n\tvar handleDropdowns = function () {\n\t\t/*\n\t\t Hold dropdown on click\n\t\t */\n\t\t$('body').on('click' , '.dropdown-menu.hold-on-click' , function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\t};\n\n\tvar handleAlerts = function () {\n\t\t$('body').on('click' , '[data-close=\"alert\"]' , function (e) {\n\t\t\t$(this).parent('.alert').hide();\n\t\t\t$(this).closest('.note').hide();\n\t\t\te.preventDefault();\n\t\t});\n\n\t\t$('body').on('click' , '[data-close=\"note\"]' , function (e) {\n\t\t\t$(this).closest('.note').hide();\n\t\t\te.preventDefault();\n\t\t});\n\n\t\t$('body').on('click' , '[data-remove=\"note\"]' , function (e) {\n\t\t\t$(this).closest('.note').remove();\n\t\t\te.preventDefault();\n\t\t});\n\t};\n\n\t// Handle Hower Dropdowns\n\tvar handleDropdownHover = function () {\n\t\t$('[data-hover=\"dropdown\"]').not('.hover-initialized').each(function () {\n\t\t\t$(this).dropdownHover();\n\t\t\t$(this).addClass('hover-initialized');\n\t\t});\n\t};\n\n\t// Handle textarea autosize\n\tvar handleTextareaAutosize = function () {\n\t\tif ( typeof(autosize) == \"function\" ) {\n\t\t\tautosize(document.querySelector('textarea.autosizeme'));\n\t\t}\n\t}\n\n\t// Handles Bootstrap Popovers\n\n\t// last popep popover\n\tvar lastPopedPopover;\n\n\tvar handlePopovers = function () {\n\t\t$('.popovers').popover();\n\n\t\t// close last displayed popover\n\n\t\t$(document).on('click.bs.popover.data-api' , function (e) {\n\t\t\tif ( lastPopedPopover ) {\n\t\t\t\tlastPopedPopover.popover('hide');\n\t\t\t}\n\t\t});\n\t};\n\n\t// Handles scrollable contents using jQuery SlimScroll plugin.\n\tvar handleScrollers = function () {\n\t\tApp.initSlimScroll('.scroller');\n\t};\n\n\t// Handles Image Preview using jQuery Fancybox plugin\n\tvar handleFancybox = function () {\n\t\tif ( ! jQuery.fancybox ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( $(\".fancybox-button\").length > 0 ) {\n\t\t\t$(\".fancybox-button\").fancybox({\n\t\t\t\tgroupAttr : 'data-rel' ,\n\t\t\t\tprevEffect : 'none' ,\n\t\t\t\tnextEffect : 'none' ,\n\t\t\t\tcloseBtn : true ,\n\t\t\t\thelpers : {\n\t\t\t\t\ttitle : {\n\t\t\t\t\t\ttype : 'inside'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t// Handles counterup plugin wrapper\n\tvar handleCounterup = function () {\n\t\tif ( ! $().counterUp ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$(\"[data-counter='counterup']\").counterUp({\n\t\t\tdelay : 10 ,\n\t\t\ttime : 1000\n\t\t});\n\t};\n\n\t// Fix input placeholder issue for IE8 and IE9\n\tvar handleFixInputPlaceholderForIE = function () {\n\t\t//fix html5 placeholder attribute for ie7 & ie8\n\t\tif ( isIE8 || isIE9 ) { // ie8 & ie9\n\t\t\t// this is html5 placeholder fix for inputs, inputs with placeholder-no-fix class will be skipped(e.g: we need\n\t\t\t// this for password fields)\n\t\t\t$('input[placeholder]:not(.placeholder-no-fix), textarea[placeholder]:not(.placeholder-no-fix)').each(function () {\n\t\t\t\tvar input = $(this);\n\n\t\t\t\tif ( input.val() === '' && input.attr(\"placeholder\") !== '' ) {\n\t\t\t\t\tinput.addClass(\"placeholder\").val(input.attr('placeholder'));\n\t\t\t\t}\n\n\t\t\t\tinput.focus(function () {\n\t\t\t\t\tif ( input.val() == input.attr('placeholder') ) {\n\t\t\t\t\t\tinput.val('');\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tinput.blur(function () {\n\t\t\t\t\tif ( input.val() === '' || input.val() == input.attr('placeholder') ) {\n\t\t\t\t\t\tinput.val(input.attr('placeholder'));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t};\n\n\t// Handle Select2 Dropdowns\n\tvar handleSelect2 = function () {\n\n\t};\n\n\t// handle group element heights\n\tvar handleHeight = function () {\n\t\t$('[data-auto-height]').each(function () {\n\t\t\tvar parent = $(this);\n\t\t\tvar items = $('[data-height]' , parent);\n\t\t\tvar height = 0;\n\t\t\tvar mode = parent.attr('data-mode');\n\t\t\tvar offset = parseInt(parent.attr('data-offset') ? parent.attr('data-offset') : 0);\n\n\t\t\titems.each(function () {\n\t\t\t\tif ( $(this).attr('data-height') == \"height\" ) {\n\t\t\t\t\t$(this).css('height' , '');\n\t\t\t\t} else {\n\t\t\t\t\t$(this).css('min-height' , '');\n\t\t\t\t}\n\n\t\t\t\tvar height_ = (mode == 'base-height' ? $(this).outerHeight() : $(this).outerHeight(true));\n\t\t\t\tif ( height_ > height ) {\n\t\t\t\t\theight = height_;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\theight = height + offset;\n\n\t\t\titems.each(function () {\n\t\t\t\tif ( $(this).attr('data-height') == \"height\" ) {\n\t\t\t\t\t$(this).css('height' , height);\n\t\t\t\t} else {\n\t\t\t\t\t$(this).css('min-height' , height);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif ( parent.attr('data-related') ) {\n\t\t\t\t$(parent.attr('data-related')).css('height' , parent.height());\n\t\t\t}\n\t\t});\n\t}\n\n\t//* END:CORE HANDLERS *//\n\n\treturn {\n\n\t\t//main function to initiate the theme\n\t\tinit : function () {\n\t\t\t//IMPORTANT!!!: Do not modify the core handlers call order.\n\n\t\t\t//Core handlers\n\t\t\thandleInit(); // initialize core variables\n\t\t\thandleOnResize(); // set and handle responsive\n\n\t\t\t//UI Component handlers\n\t\t\thandleMaterialDesign(); // handle material design\n\t\t\thandleiCheck(); // handles custom icheck radio and checkboxes\n\t\t\thandleBootstrapSwitch(); // handle bootstrap switch plugin\n\t\t\thandleScrollers(); // handles slim scrolling contents\n\t\t\thandleFancybox(); // handle fancy box\n\t\t\thandleSelect2(); // handle custom Select2 dropdowns\n\t\t\thandlePortletTools(); // handles portlet action bar functionality(refresh, configure, toggle, remove)\n\t\t\thandleAlerts(); //handle closabled alerts\n\t\t\thandleDropdowns(); // handle dropdowns\n\t\t\thandleTabs(); // handle tabs\n\t\t\thandleTooltips(); // handle bootstrap tooltips\n\t\t\thandlePopovers(); // handles bootstrap popovers\n\t\t\thandleAccordions(); //handles accordions\n\t\t\thandleModals(); // handle modals\n\t\t\thandleBootstrapConfirmation(); // handle bootstrap confirmations\n\t\t\thandleTextareaAutosize(); // handle autosize textareas\n\t\t\thandleCounterup(); // handle counterup instances\n\n\t\t\t//Handle group element heights\n\t\t\tthis.addResizeHandler(handleHeight); // handle auto calculating height on window resize\n\n\t\t\t// Hacks\n\t\t\thandleFixInputPlaceholderForIE(); //IE8 & IE9 input placeholder issue fix\n\t\t} ,\n\n\t\t//main function to initiate core javascript after ajax complete\n\t\tinitAjax : function () {\n\t\t\t//handleUniform(); // handles custom radio & checkboxes\n\t\t\thandleiCheck(); // handles custom icheck radio and checkboxes\n\t\t\thandleBootstrapSwitch(); // handle bootstrap switch plugin\n\t\t\thandleDropdownHover(); // handles dropdown hover\n\t\t\thandleScrollers(); // handles slim scrolling contents\n\t\t\thandleSelect2(); // handle custom Select2 dropdowns\n\t\t\thandleFancybox(); // handle fancy box\n\t\t\thandleDropdowns(); // handle dropdowns\n\t\t\thandleTooltips(); // handle bootstrap tooltips\n\t\t\thandlePopovers(); // handles bootstrap popovers\n\t\t\thandleAccordions(); //handles accordions\n\t\t\thandleBootstrapConfirmation(); // handle bootstrap confirmations\n\t\t} ,\n\n\t\t//init main components\n\t\tinitComponents : function () {\n\t\t\tthis.initAjax();\n\t\t} ,\n\n\t\t//public function to remember last opened popover that needs to be closed on click\n\t\tsetLastPopedPopover : function (el) {\n\t\t\tlastPopedPopover = el;\n\t\t} ,\n\n\t\t//public function to add callback a function which will be called on window resize\n\t\taddResizeHandler : function (func) {\n\t\t\tresizeHandlers.push(func);\n\t\t} ,\n\n\t\t//public functon to call _runresizeHandlers\n\t\trunResizeHandlers : function () {\n\t\t\t_runResizeHandlers();\n\t\t} ,\n\n\t\t// wrApper function to scroll(focus) to an element\n\t\tscrollTo : function (el , offeset) {\n\t\t\tvar pos = (el && el.length > 0) ? el.offset().top : 0;\n\n\t\t\tif ( el ) {\n\t\t\t\tif ( $('body').hasClass('page-header-fixed') ) {\n\t\t\t\t\tpos = pos - $('.page-header').height();\n\t\t\t\t} else if ( $('body').hasClass('page-header-top-fixed') ) {\n\t\t\t\t\tpos = pos - $('.page-header-top').height();\n\t\t\t\t} else if ( $('body').hasClass('page-header-menu-fixed') ) {\n\t\t\t\t\tpos = pos - $('.page-header-menu').height();\n\t\t\t\t}\n\t\t\t\tpos = pos + (offeset ? offeset : - 1 * el.height());\n\t\t\t}\n\n\t\t\t$('html,body').animate({\n\t\t\t\tscrollTop : pos\n\t\t\t} , 'slow');\n\t\t} ,\n\n\t\tinitSlimScroll : function (el) {\n\t\t\tif ( ! $().slimScroll ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$(el).each(function () {\n\t\t\t\tif ( $(this).attr(\"data-initialized\") ) {\n\t\t\t\t\treturn; // exit\n\t\t\t\t}\n\n\t\t\t\tvar height;\n\n\t\t\t\tif ( $(this).attr(\"data-height\") ) {\n\t\t\t\t\theight = $(this).attr(\"data-height\");\n\t\t\t\t} else {\n\t\t\t\t\theight = $(this).css('height');\n\t\t\t\t}\n\n\t\t\t\t$(this).slimScroll({\n\t\t\t\t\tallowPageScroll : true , // allow page scroll when the element scroll is ended\n\t\t\t\t\tsize : '7px' ,\n\t\t\t\t\tcolor : ($(this).attr(\"data-handle-color\") ? $(this).attr(\"data-handle-color\") : '#bbb') ,\n\t\t\t\t\twrapperClass : ($(this).attr(\"data-wrapper-class\") ? $(this).attr(\"data-wrapper-class\") : 'slimScrollDiv') ,\n\t\t\t\t\trailColor : ($(this).attr(\"data-rail-color\") ? $(this).attr(\"data-rail-color\") : '#eaeaea') ,\n\t\t\t\t\tposition : isRTL ? 'left' : 'right' ,\n\t\t\t\t\theight : height ,\n\t\t\t\t\talwaysVisible : ($(this).attr(\"data-always-visible\") == \"1\" ? true : false) ,\n\t\t\t\t\trailVisible : ($(this).attr(\"data-rail-visible\") == \"1\" ? true : false) ,\n\t\t\t\t\tdisableFadeOut : true\n\t\t\t\t});\n\n\t\t\t\t$(this).attr(\"data-initialized\" , \"1\");\n\t\t\t});\n\t\t} ,\n\n\t\tdestroySlimScroll : function (el) {\n\t\t\tif ( ! $().slimScroll ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$(el).each(function () {\n\t\t\t\tif ( $(this).attr(\"data-initialized\") === \"1\" ) { // destroy existing instance before updating the height\n\t\t\t\t\t$(this).removeAttr(\"data-initialized\");\n\t\t\t\t\t$(this).removeAttr(\"style\");\n\n\t\t\t\t\tvar attrList = {};\n\n\t\t\t\t\t// store the custom attribures so later we will reassign.\n\t\t\t\t\tif ( $(this).attr(\"data-handle-color\") ) {\n\t\t\t\t\t\tattrList[\"data-handle-color\"] = $(this).attr(\"data-handle-color\");\n\t\t\t\t\t}\n\t\t\t\t\tif ( $(this).attr(\"data-wrapper-class\") ) {\n\t\t\t\t\t\tattrList[\"data-wrapper-class\"] = $(this).attr(\"data-wrapper-class\");\n\t\t\t\t\t}\n\t\t\t\t\tif ( $(this).attr(\"data-rail-color\") ) {\n\t\t\t\t\t\tattrList[\"data-rail-color\"] = $(this).attr(\"data-rail-color\");\n\t\t\t\t\t}\n\t\t\t\t\tif ( $(this).attr(\"data-always-visible\") ) {\n\t\t\t\t\t\tattrList[\"data-always-visible\"] = $(this).attr(\"data-always-visible\");\n\t\t\t\t\t}\n\t\t\t\t\tif ( $(this).attr(\"data-rail-visible\") ) {\n\t\t\t\t\t\tattrList[\"data-rail-visible\"] = $(this).attr(\"data-rail-visible\");\n\t\t\t\t\t}\n\n\t\t\t\t\t$(this).slimScroll({\n\t\t\t\t\t\twrapperClass : ($(this).attr(\"data-wrapper-class\") ? $(this).attr(\"data-wrapper-class\") : 'slimScrollDiv') ,\n\t\t\t\t\t\tdestroy : true\n\t\t\t\t\t});\n\n\t\t\t\t\tvar the = $(this);\n\n\t\t\t\t\t// reassign custom attributes\n\t\t\t\t\t$.each(attrList , function (key , value) {\n\t\t\t\t\t\tthe.attr(key , value);\n\t\t\t\t\t});\n\n\t\t\t\t}\n\t\t\t});\n\t\t} ,\n\n\t\t// function to scroll to the top\n\t\tscrollTop : function () {\n\t\t\tApp.scrollTo();\n\t\t} ,\n\n\t\t// wrApper function to  block element(indicate loading)\n\t\tblockUI : function (options) {\n\t\t\toptions = $.extend(true , {} , options);\n\t\t\tvar html = '';\n\t\t\tif ( options.animate ) {\n\t\t\t\thtml = '<div class=\"loading-message ' + (options.boxed ? 'loading-message-boxed' : '') + '\">' + '<div class=\"block-spinner-bar\"><div class=\"bounce1\"></div><div class=\"bounce2\"></div><div class=\"bounce3\"></div></div>' + '</div>';\n\t\t\t} else if ( options.iconOnly ) {\n\t\t\t\thtml = '<div class=\"loading-message ' + (options.boxed ? 'loading-message-boxed' : '') + '\"><img src=\"' + this.getGlobalImgPath() + 'loading-spinner-grey.gif\" align=\"\"></div>';\n\t\t\t} else if ( options.textOnly ) {\n\t\t\t\thtml = '<div class=\"loading-message ' + (options.boxed ? 'loading-message-boxed' : '') + '\"><span>&nbsp;&nbsp;' + (options.message ? options.message : 'LOADING...') + '</span></div>';\n\t\t\t} else {\n\t\t\t\thtml = '<div class=\"loading-message ' + (options.boxed ? 'loading-message-boxed' : '') + '\"><img src=\"' + this.getGlobalImgPath() + 'loading-spinner-grey.gif\" align=\"\"><span>&nbsp;&nbsp;' + (options.message ? options.message : 'LOADING...') + '</span></div>';\n\t\t\t}\n\n\t\t\tif ( options.target ) { // element blocking\n\t\t\t\tvar el = $(options.target);\n\t\t\t\tif ( el.height() <= ($(window).height()) ) {\n\t\t\t\t\toptions.cenrerY = true;\n\t\t\t\t}\n\t\t\t\tel.block({\n\t\t\t\t\tmessage : html ,\n\t\t\t\t\tbaseZ : options.zIndex ? options.zIndex : 1000 ,\n\t\t\t\t\tcenterY : options.cenrerY !== undefined ? options.cenrerY : false ,\n\t\t\t\t\tcss : {\n\t\t\t\t\t\ttop : '10%' ,\n\t\t\t\t\t\tborder : '0' ,\n\t\t\t\t\t\tpadding : '0' ,\n\t\t\t\t\t\tbackgroundColor : 'none'\n\t\t\t\t\t} ,\n\t\t\t\t\toverlayCSS : {\n\t\t\t\t\t\tbackgroundColor : options.overlayColor ? options.overlayColor : '#555' ,\n\t\t\t\t\t\topacity : options.boxed ? 0.05 : 0.1 ,\n\t\t\t\t\t\tcursor : 'wait'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else { // page blocking\n\t\t\t\t$.blockUI({\n\t\t\t\t\tmessage : html ,\n\t\t\t\t\tbaseZ : options.zIndex ? options.zIndex : 1000 ,\n\t\t\t\t\tcss : {\n\t\t\t\t\t\tborder : '0' ,\n\t\t\t\t\t\tpadding : '0' ,\n\t\t\t\t\t\tbackgroundColor : 'none'\n\t\t\t\t\t} ,\n\t\t\t\t\toverlayCSS : {\n\t\t\t\t\t\tbackgroundColor : options.overlayColor ? options.overlayColor : '#555' ,\n\t\t\t\t\t\topacity : options.boxed ? 0.05 : 0.1 ,\n\t\t\t\t\t\tcursor : 'wait'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t} ,\n\n\t\t// wrApper function to  un-block element(finish loading)\n\t\tunblockUI : function (target) {\n\t\t\tif ( target ) {\n\t\t\t\t$(target).unblock({\n\t\t\t\t\tonUnblock : function () {\n\t\t\t\t\t\t$(target).css('position' , '');\n\t\t\t\t\t\t$(target).css('zoom' , '');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t$.unblockUI();\n\t\t\t}\n\t\t} ,\n\n\t\tstartPageLoading : function (options) {\n\t\t\tif ( options && options.animate ) {\n\t\t\t\t$('.page-spinner-bar').remove();\n\t\t\t\t$('body').append('<div class=\"page-spinner-bar\"><div class=\"bounce1\"></div><div class=\"bounce2\"></div><div class=\"bounce3\"></div></div>');\n\t\t\t} else {\n\t\t\t\t$('.page-loading').remove();\n\t\t\t\t$('body').append('<div class=\"page-loading\"><img src=\"' + this.getGlobalImgPath() + 'loading-spinner-grey.gif\"/>&nbsp;&nbsp;<span>' + (options && options.message ? options.message : 'Loading...') + '</span></div>');\n\t\t\t}\n\t\t} ,\n\n\t\tstopPageLoading : function () {\n\t\t\t$('.page-loading, .page-spinner-bar').remove();\n\t\t} ,\n\n\t\talert : function (options) {\n\n\t\t\toptions = $.extend(true , {\n\t\t\t\tcontainer : \"\" , // alerts parent container(by default placed after the page breadcrumbs)\n\t\t\t\tplace : \"append\" , // \"append\" or \"prepend\" in container\n\t\t\t\ttype : 'success' , // alert's type\n\t\t\t\tmessage : \"\" , // alert's message\n\t\t\t\tclose : true , // make alert closable\n\t\t\t\treset : true , // close all previouse alerts first\n\t\t\t\tfocus : true , // auto scroll to the alert after shown\n\t\t\t\tcloseInSeconds : 0 , // auto close after defined seconds\n\t\t\t\ticon : \"\" // put icon before the message\n\t\t\t} , options);\n\n\t\t\tvar id = App.getUniqueID(\"App_alert\");\n\n\t\t\tvar html = '<div id=\"' + id + '\" class=\"custom-alerts alert alert-' + options.type + ' fade in\">' + (options.close ? '<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\"></button>' : '') + (options.icon !== \"\" ? '<i class=\"fa-lg fa fa-' + options.icon + '\"></i>  ' : '') + options.message + '</div>';\n\n\t\t\tif ( options.reset ) {\n\t\t\t\t$('.custom-alerts').remove();\n\t\t\t}\n\n\t\t\tif ( ! options.container ) {\n\t\t\t\tif ( $('.page-fixed-main-content').length === 1 ) {\n\t\t\t\t\t$('.page-fixed-main-content').prepend(html);\n\t\t\t\t} else if ( ($('body').hasClass(\"page-container-bg-solid\") || $('body').hasClass(\"page-content-white\")) && $('.page-head').length === 0 ) {\n\t\t\t\t\t$('.page-title').after(html);\n\t\t\t\t} else {\n\t\t\t\t\tif ( $('.page-bar').length > 0 ) {\n\t\t\t\t\t\t$('.page-bar').after(html);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$('.page-breadcrumb, .breadcrumbs').after(html);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( options.place == \"append\" ) {\n\t\t\t\t\t$(options.container).append(html);\n\t\t\t\t} else {\n\t\t\t\t\t$(options.container).prepend(html);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( options.focus ) {\n\t\t\t\tApp.scrollTo($('#' + id));\n\t\t\t}\n\n\t\t\tif ( options.closeInSeconds > 0 ) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t$('#' + id).remove();\n\t\t\t\t} , options.closeInSeconds * 1000);\n\t\t\t}\n\n\t\t\treturn id;\n\t\t} ,\n\n\t\t//public function to initialize the fancybox plugin\n\t\tinitFancybox : function () {\n\t\t\thandleFancybox();\n\t\t} ,\n\n\t\t//public helper function to get actual input value(used in IE9 and IE8 due to placeholder attribute not supported)\n\t\tgetActualVal : function (el) {\n\t\t\tel = $(el);\n\t\t\tif ( el.val() === el.attr(\"placeholder\") ) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\treturn el.val();\n\t\t} ,\n\n\t\t//public function to get a paremeter by name from URL\n\t\tgetURLParameter : function (paramName) {\n\t\t\tvar searchString = window.location.search.substring(1) ,\n\t\t\t\ti , val , params = searchString.split(\"&\");\n\n\t\t\tfor ( i = 0 ; i < params.length ; i ++ ) {\n\t\t\t\tval = params[i].split(\"=\");\n\t\t\t\tif ( val[0] == paramName ) {\n\t\t\t\t\treturn unescape(val[1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t} ,\n\n\t\t// check for device touch support\n\t\tisTouchDevice : function () {\n\t\t\ttry {\n\t\t\t\tdocument.createEvent(\"TouchEvent\");\n\t\t\t\treturn true;\n\t\t\t} catch ( e ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} ,\n\n\t\t// To get the correct viewport width based on\n\t\t// http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/\n\t\tgetViewPort : function () {\n\t\t\tvar e = window ,\n\t\t\t\ta = 'inner';\n\t\t\tif ( ! ('innerWidth' in window) ) {\n\t\t\t\ta = 'client';\n\t\t\t\te = document.documentElement || document.body;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\twidth : e[a + 'Width'] ,\n\t\t\t\theight : e[a + 'Height']\n\t\t\t};\n\t\t} ,\n\n\t\tgetUniqueID : function (prefix) {\n\t\t\treturn 'prefix_' + Math.floor(Math.random() * (new Date()).getTime());\n\t\t} ,\n\n\t\t// check IE8 mode\n\t\tisIE8 : function () {\n\t\t\treturn isIE8;\n\t\t} ,\n\n\t\t// check IE9 mode\n\t\tisIE9 : function () {\n\t\t\treturn isIE9;\n\t\t} ,\n\n\t\t//check RTL mode\n\t\tisRTL : function () {\n\t\t\treturn isRTL;\n\t\t} ,\n\n\t\t// check IE8 mode\n\t\tisAngularJsApp : function () {\n\t\t\treturn (typeof angular == 'undefined') ? false : true;\n\t\t} ,\n\n\t\tgetAssetsPath : function () {\n\t\t\treturn assetsPath;\n\t\t} ,\n\n\t\tsetAssetsPath : function (path) {\n\t\t\tassetsPath = path;\n\t\t} ,\n\n\t\tsetGlobalImgPath : function (path) {\n\t\t\tglobalImgPath = path;\n\t\t} ,\n\n\t\tgetGlobalImgPath : function () {\n\t\t\treturn assetsPath + globalImgPath;\n\t\t} ,\n\n\t\tsetGlobalPluginsPath : function (path) {\n\t\t\tglobalPluginsPath = path;\n\t\t} ,\n\n\t\tgetGlobalPluginsPath : function () {\n\t\t\treturn assetsPath + globalPluginsPath;\n\t\t} ,\n\n\t\tgetGlobalCssPath : function () {\n\t\t\treturn assetsPath + globalCssPath;\n\t\t} ,\n\n\t\t// get layout color code by color name\n\t\tgetBrandColor : function (name) {\n\t\t\tif ( brandColors[name] ) {\n\t\t\t\treturn brandColors[name];\n\t\t\t} else {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t} ,\n\n\t\tgetResponsiveBreakpoint : function (size) {\n\t\t\t// bootstrap responsive breakpoints\n\t\t\tvar sizes = {\n\t\t\t\t'xs' : 480 ,     // extra small\n\t\t\t\t'sm' : 768 ,     // small\n\t\t\t\t'md' : 992 ,     // medium\n\t\t\t\t'lg' : 1200     // large\n\t\t\t};\n\n\t\t\treturn sizes[size] ? sizes[size] : 0;\n\t\t}\n\t};\n\n}();\n\njQuery(document).ready(function () {\n\tApp.init(); // init metronic core componets\n});"
  },
  {
    "path": "resources/assets/static/src/js/global/custom.js",
    "content": "/**\n * 自定义 JS 全局方法\n */\n\nvar xhrError = function ( XHR ) {\n  tips.error( XHR.status + ' ' + XHR.statusText );\n};\n\n//toastr 的 配置\ntoastr.options = {\n  \"closeButton\" : true ,\n  \"debug\" : false ,\n  \"positionClass\" : \"toast-top-center\" ,\n  \"onclick\" : null ,\n  \"showDuration\" : \"500\" ,\n  \"hideDuration\" : \"500\" ,\n  \"timeOut\" : \"3000\" ,\n  \"extendedTimeOut\" : \"1000\" ,\n  \"showEasing\" : \"swing\" ,\n  \"hideEasing\" : \"linear\" ,\n  \"showMethod\" : \"fadeIn\" ,\n  \"hideMethod\" : \"fadeOut\"\n};\n\n//提示\nvar tips = {\n  //错误提示\n  error : function ( msg ) {\n    toastr.error( msg , '@_@' );\n  } ,\n  //成功提示\n  success : function ( msg , callback ) {\n    toastr.success( msg , '^_^' );\n    if ( $.isFunction( callback ) ) {\n      setTimeout( callback , 2000 );\n    }\n  }\n};\n\n//设置上传文件预览\nvar setImgPreview = {\n  //设置图片预览\n  set : function ( tagName , fileSavePath , type ) {\n    var $preview = $( '#' + tagName + 'Preview' );\n    if ( empty( fileSavePath ) ) {\n      $preview.html( '' );\n      return;\n    }\n    var abPath = Param.uri.img + fileSavePath;\n    var tmp = '';\n    if ( empty( type ) || type == 'img' ) {\n      var clearBtn = \"setImgPreview.clear('\" + tagName + \"')\";\n      tmp = '<span class=\"badge badge-danger\" style=\"top: -5px; left: 125px; position: absolute; font-size: 22px ; cursor: pointer\" onclick=\"' + clearBtn + '\">X</span> <img src=\"{src}\" /> ';\n    } else if ( type == 'file' ) {\n      tmp = '<a href=\"{src}\" target=\"_blank\" class=\"btn red\" ><i class=\"icon-cloud-download\"></i> 下载</a>';\n    }\n\n    $preview.html( tmp.replace( /\\{src}/g , abPath ) );\n    $( 'input[name=\"' + tagName + '\"]' ).val( fileSavePath );\n  } ,\n  //清楚图片预览\n  clear : function ( tagName ) {\n    $( '#' + tagName + 'Preview' ).empty();\n    $( 'input[name=\"' + tagName + '\"]' ).val( '' );\n  }\n};\n\n//显示或停止 加载动画\nvar loading = {\n  //初始化\n  initAjax : function () {\n    var $fitLoading = this.insert();\n    $( document ).ajaxStart( function () {\n      $fitLoading.show();\n    } ).ajaxComplete( function () {\n      $fitLoading.fadeOut( 'fast' );\n    } );\n  } ,\n\n  //开始显示\n  start : function () {\n    var $fitLoading = this.insert();\n    $fitLoading.show();\n  } ,\n  //结束显示\n  end : function () {\n    $( '.fit-loading' ).hide();\n  } ,\n  //插入\n  insert : function () {\n    var $fitLoading = $( '.fit-loading' );\n    if ( $fitLoading.length == 0 ) {\n      $( 'body' ).append( '<div class=\"fit-loading\"></div>' );\n      $fitLoading = $( '.fit-loading' );\n    }\n    var top = ( $( window ).height() - $fitLoading.height() ) / 2;\n    var left = ( $( window ).width() - $fitLoading.width() ) / 2;\n    $fitLoading.css( {\n      top : top + 'px' ,\n      left : left + 'px' ,\n      display : 'none'\n    } );\n    return $fitLoading;\n  }\n};\n\n//显示\nvar sure = {\n  config : {} ,\n  //打开\n  init : function ( msg , ok , cancel ) {\n    var self = this;\n    self.config.ok = ok;\n    self.config.cancel = cancel;\n\n    if ( $( '.fit-confirm' ).length < 1 ) {\n      var html = [];\n      html.push( '<div class=\"fit-confirm\">' );\n      html.push( '<div class=\"fit-confirm-body\"></div>' );\n      html.push( '<div class=\"fit-confirm-btn\">' );\n      html.push( '<button class=\"half\" id=\"fit-confirm-cancel_btn\" type=\"button\" onclick=\"sure.cancel(); \">取消</button>' );\n      html.push( '<button class=\"half\" id=\"fit-confirm-ok_btn\" type=\"button\" onclick=\"sure.ok(); \">确定</button>' );\n      html.push( '</div></div>' );\n      $( 'body' ).append( html.join( '' ) );\n    }\n    if ( $( '.fit-modal' ).length < 1 ) {\n      $( 'body' ).append( '<div class=\"fit-modal\"></div>' );\n    }\n    $( '.fit-confirm-body' ).html( msg );\n    self.show();\n  } ,\n  //ok 按钮\n  ok : function () {\n    var self = this;\n    if ( $.isFunction( self.config.ok ) ) {\n      self.config.ok();\n    }\n    self.hide();\n  } ,\n  //取消按钮\n  cancel : function () {\n    var self = this;\n    if ( $.isFunction( self.config.cancel ) ) {\n      self.config.cancel();\n    }\n    self.hide();\n  } ,\n  //显示窗口\n  show : function () {\n    //var self = this;\n    var $fit_confirm = $( '.fit-confirm' );\n    var height = $( document ).height();\n    $( '.fit-modal' ).height( height - 1 ).show();\n    var top = ( $( window ).height() - $fit_confirm.height() ) / 2 - 60;\n    var left = ( $( window ).width() - $fit_confirm.width() ) / 2;\n    $fit_confirm.css( {\n      top : top + 'px' ,\n      left : left + 'px' ,\n      position : 'fixed'\n    } ).show();\n  } ,\n  //关闭窗口\n  hide : function () {\n    //var self = this;\n    $( '.fit-modal' ).hide();\n    $( '.fit-confirm' ).hide();\n  }\n};\n\n//变量是否为空\nvar empty = function ( val ) {\n  if ( val == null ||\n       val == 'undefined' ||\n       typeof( val) == 'undefined' ||\n       val == 0 ||\n       val == '' ||\n       val.length == 0 ) {\n    return true;\n  }\n  return false\n};\n\n//变量是否存在\nvar isset = function ( val ) {\n  if ( typeof( val ) == 'undefined' || val == null ) {\n    return false;\n  }\n  return true\n};\n\n//字符串重复\nvar str_repeat = function ( str , num ) {\n  return new Array( num + 1 ).join( str );\n};\n\n//取缩略图\nvar get_thumb = function ( icon , size ) {\n  if ( empty( size ) ) {\n    return icon;\n  }\n  return icon.substr( 0 , icon.lastIndexOf( \".\" ) + 1 ) + size + icon.substr( icon.lastIndexOf( \".\" ) );\n};\n\n//rows 转 select options(含树形结构)\nvar form_options_rows = function ( rows , settings ) {\n  var html = '';\n  $.each( rows , function ( index , row ) {\n    var prefix = '';\n    if ( isset( row[ 'level' ] ) ) {\n      prefix = row[ 'level' ] - 1 > 0 ? str_repeat( '&nbsp;&nbsp;&nbsp;&nbsp;' , row[ 'level' ] - 1 ) + '└─ ' : '';\n    }\n    html += '<option value=\"' + row.id + '\">' + prefix + row[ settings.field ] + '</option>';\n    if ( isset( row[ settings.nodeField ] ) ) {\n      html += form_options_rows( row[ settings.nodeField ] , settings );\n    }\n  } );\n  return html;\n};\n\nvar KE_OPTIONS = {\n  items : [\n    'source' ,\n    '|' ,\n    'undo' ,\n    'redo' ,\n    '|' ,\n    'preview' ,\n    'cut' ,\n    'copy' ,\n    'paste' ,\n    'plainpaste' ,\n    'wordpaste' ,\n    '|' ,\n    'justifyleft' ,\n    'justifycenter' ,\n    'justifyright' ,\n    'justifyfull' ,\n    'insertorderedlist' ,\n    'insertunorderedlist' ,\n    'indent' ,\n    'outdent' ,\n    'subscript' ,\n    'superscript' ,\n    'clearhtml' ,\n    'quickformat' ,\n    '|' ,\n    'fullscreen' ,\n    '/' ,\n    'formatblock' ,\n    'fontname' ,\n    'fontsize' ,\n    '|' ,\n    'forecolor' ,\n    'hilitecolor' ,\n    'bold' ,\n    'italic' ,\n    'underline' ,\n    'strikethrough' ,\n    'lineheight' ,\n    'removeformat' ,\n    '|' ,\n    'image' ,\n    'flash' ,\n    'media' ,\n    'table' ,\n    'hr' ,\n    'pagebreak' ,\n    'anchor' ,\n    'link' ,\n    'unlink'\n  ] ,\n  uploadJson : '' ,\n  allowFileManager : false ,\n  urlType : 'domain' ,\n  resizeType : 1 ,\n  themeType : 'simple' ,\n  afterBlur : function () {\n    this.sync();\n  }\n};\n\n\n//获取 url 参数\n$.extend( {\n  getUrlParams : function () {\n    var vars = [] , hash;\n    var hashes = window.location.href.slice( window.location.href.indexOf( '?' ) + 1 ).split( '&' );\n    for ( var i = 0 ; i < hashes.length ; i ++ ) {\n      hash = hashes[ i ].split( '=' );\n      //vars.push(hash[0]);\n      vars[ hash[ 0 ] ] = hash[ 1 ];\n    }\n    return vars;\n  } ,\n  getUrlParam : function ( name ) {\n    return $.getUrlParams()[ name ];\n  }\n} );\n\nvar FLAT_BG_COLOR = {\n  blue : 'blue' ,\n  blue_hoki : 'blue-hoki' ,\n  blue_steel : 'blue-steel' ,\n  blue_madison : 'blue-madison' ,\n  blue_chambray : 'blue-chambray' ,\n  blue_ebonyclay : 'blue-ebonyclay' ,\n\n  green : 'green' ,\n  green_meadow : 'green-meadow' ,\n  green_seagreen : 'green-seagreen' ,\n  green_turquoise : 'green-turquoise' ,\n  green_haze : 'green-haze' ,\n  green_jungle : 'green-jungle' ,\n\n  red : 'red' ,\n  red_pink : 'red-pink' ,\n  red_sunglo : 'red-sunglo' ,\n  red_intense : 'red-intense' ,\n  red_thunderbird : 'red-thunderbird' ,\n  red_flamingo : 'red-flamingo' ,\n\n  yellow : 'yellow' ,\n  yellow_gold : 'yellow-gold' ,\n  yellow_casablanca : 'yellow-casablanca' ,\n  yellow_crusta : 'yellow-crusta' ,\n  yellow_lemon : 'yellow-lemon' ,\n  yellow_saffron : 'yellow-saffron' ,\n\n  purple : 'purple' ,\n  purple_plum : 'purple-plum' ,\n  purple_medium : 'purple-medium' ,\n  purple_studio : 'purple-studio' ,\n  purple_wisteria : 'purple-wisteria' ,\n  purple_seance : 'purple-seance' ,\n\n  grey : 'grey' ,\n  grey_cascade : 'grey-cascade' ,\n  grey_silver : 'grey-silver' ,\n  grey_steel : 'grey-steel' ,\n  grey_cararra : 'grey-cararra' ,\n  grey_gallery : 'grey-gallery'\n};\n\nvar DTP_DATE_OPTION = {\n  language : 'zh-CN' ,\n  format : 'yyyy-mm-dd' ,\n  startView : 2 ,\n  minView : 2 ,\n  autoclose : 1 ,\n  todayBtn : true ,\n  todayHighlight : true ,\n  pickerPosition : 'bottom-right'\n};\n\nvar DTP_TIME_OPTION = {\n  language : 'zh-CN' ,\n  format : 'hh:ii' ,\n  startView : 0 ,\n  minView : 0 ,\n  minuteStep : 15 ,\n  autoclose : 1 ,\n  // forceParse : false ,\n  //pickerPosition: 'bottom-left'\n};\n\nvar DTP_DATETIME_OPTION = {\n  language : 'zh-CN' ,\n  format : 'yyyy-mm-dd hh:ii' ,\n  autoclose : 1 ,\n  todayBtn : true ,\n  todayHighlight : true ,\n  pickerPosition : 'bottom-right'\n};\n\n/**\n * 处理页面图片延时加载\n *\n * 需要延时加载的图片 格式为:\n * <img src=\"defaultImgUri\" data-src=\"imgUri\">\n *\n * 调用:\n * ImageLazyLoaded.init(); 或者\n *\n * ImageLazyLoaded.init({\n *  defaultImgUri : '默认图片的uri'\n * });\n */\nvar ImageLazyLoaded = {\n  config : {\n    defaultImgUri : 'defaultImgUri'\n  } ,\n\n  init : function ( config ) {\n    $.extend( this.config , config );\n\n    var self = this;\n    self.imageLoading();\n    $( document ).on( 'scroll' , function () {\n      self.imageLoading();\n    } );\n  } ,\n\n  imageLoading : function () {\n    var defaultImgUri = this.config.defaultImgUri;\n    $( 'img[src=\"' + defaultImgUri + '\"]' ).each( function () {\n      var $this = $( this );\n      var offset = $this.offset();\n      if ( $( window ).scrollTop() + window.height + 50 <= offset.top ) {\n        $this.attr( 'src' , $this.data( 'src' ) );\n      }\n    } );\n  }\n};\n\n(function ( $ ) {\n  //填充表单\n  $.fn.reloadForm = function ( data ) {\n    this[ 0 ].reset();\n    this.clearFormValid();\n    this.find( ':input' ).each( function () {\n      var name = $( this ).attr( 'name' );\n      if ( empty( name ) ) {\n        name = $( this ).attr( 'id' );\n      }\n      if ( isset( name ) && isset( data ) && isset( data[ name ] ) ) {\n        var val = data[ name ];\n        switch ( this.type ) {\n          case 'checkbox':\n          case 'radio':\n            $( 'input[name=\"' + name + '\"][value=\"' + val + '\"]' ).prop( 'checked' , true );\n            break;\n          default:\n            $( this ).val( val );\n            break;\n        }\n      }\n    } );\n  };\n\n  //扩展 animateCss 方法\n  $.fn.extend( {\n    animateCss : function ( animationName ) {\n      var animationEnd = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend';\n      this.addClass( 'animated ' + animationName ).one( animationEnd , function () {\n        $( this ).removeClass( 'animated ' + animationName );\n      } );\n    }\n  } );\n\n  //验证表单\n  $.fn.validForm = function () {\n    var ret = true;\n    this.find( ':input' ).each( function () {\n      var val = $.trim( $( this ).val() );\n      if ( $( this ).data( 'valid' ) ) {\n        switch ( $( this ).data( 'valid' ) ) {\n          case 'required':\n            if ( val == '' || val == 0 || val.length == 0 ) {\n              ret = false;\n            }\n            break;\n          case 'number':\n            if ( ! $.isNumeric( val ) || val < 0 ) {\n              ret = false;\n            }\n            break;\n          case 'positive':\n            if ( ! $.isNumeric( val ) || val <= 0 ) {\n              ret = false;\n            }\n            break;\n          default:\n            break;\n        }\n        if ( ! ret ) {\n          $( this ).focus();\n          tips.error( $( this ).data( 'tips' ) );\n          $( this ).parents( '.form-group' ).addClass( 'has-error' );\n          $( this ).before( '<i class=\"fa fa-warning valid-icon\"></i>' );\n          return ret;\n        } else {\n          $( this ).parents( '.form-group' ).removeClass( 'has-error' );\n          $( this ).prev( 'i' ).remove();\n        }\n      }\n    } );\n    return ret;\n  };\n\n  //清除验证样式\n  $.fn.clearFormValid = function () {\n    this.find( '.has-error' ).removeClass( 'has-error' );\n    this.find( '.valid-icon' ).remove();\n  };\n\n  //序列化表单返回 对象\n  $.fn.serializeObject = function () {\n    var o = {};\n    var a = this.serializeArray();\n    $.each( a , function () {\n      if ( o[ this.name ] !== undefined ) {\n        if ( ! o[ this.name ].push ) {\n          o[ this.name ] = [\n            o[ this.name ]\n          ];\n        }\n        o[ this.name ].push( this.value || '' );\n      } else {\n        o[ this.name ] = this.value || '';\n      }\n    } );\n    return o;\n  };\n\n  //序列号表单返回 JSON\n  $.fn.serializeJSON = function () {\n    var self          = this ,\n        json          = {} ,\n        push_counters = {} ,\n        patterns      = {\n          \"validate\" : /^[a-zA-Z][a-zA-Z0-9_]*(?:\\[(?:\\d*|[a-zA-Z0-9_]+)\\])*$/ ,\n          \"key\" : /[a-zA-Z0-9_]+|(?=\\[\\])/g ,\n          \"push\" : /^$/ ,\n          \"fixed\" : /^\\d+$/ ,\n          \"named\" : /^[a-zA-Z0-9_]+$/\n        };\n    this.build = function ( base , key , value ) {\n      base[ key ] = value;\n      return base;\n    };\n\n    this.push_counter = function ( key ) {\n      if ( push_counters[ key ] === undefined ) {\n        push_counters[ key ] = 0;\n      }\n      return push_counters[ key ] ++;\n    };\n\n    $.each( $( this ).serializeArray() , function () {\n      // skip invalid keys\n      if ( ! patterns.validate.test( this.name ) ) {\n        return;\n      }\n      var k ,\n          keys        = this.name.match( patterns.key ) ,\n          merge       = this.value ,\n          reverse_key = this.name;\n      while ( (k = keys.pop()) !== undefined ) {\n        // adjust reverse_key\n        reverse_key = reverse_key.replace( new RegExp( \"\\\\[\" + k + \"\\\\]$\" ) , '' );\n        // push\n        if ( k.match( patterns.push ) ) {\n          merge = self.build( [] , self.push_counter( reverse_key ) , merge );\n        }\n        // fixed\n        else if ( k.match( patterns.fixed ) ) {\n          merge = self.build( [] , k , merge );\n        }\n        // named\n        else if ( k.match( patterns.named ) ) {\n          merge = self.build( {} , k , merge );\n        }\n      }\n      json = $.extend( true , json , merge );\n    } );\n\n    return json;\n  };\n})( jQuery );"
  },
  {
    "path": "resources/assets/static/src/js/global/format.js",
    "content": "//******************************\n// data grid format function\n//******************************\n\n//edit button\nvar optEdit = function ( value , row ) {\n  return '<a class=\"btn btn-sm grey-cascade editBtn\" data-id=\"' + row.id + '\" href=\"javascript:;\">' +\n         '<i class=\"fa fa-edit\"></i> 编辑</a>';\n};\n\n//delete button\nvar optDelete = function ( value , row ) {\n  return '<a class=\"btn btn-sm red destroyBtn\" data-id=\"' + row.id + '\" href=\"javascript:;\">' +\n         '<i class=\"fa fa-trash\"></i> 删除</a>';\n};\n\nvar optIncome = function ( value , row ) {\n  return '<a class=\"btn btn-sm red destroyBtn\" data-id=\"' + row.id + '\" href=\"javascript:;\">' +\n         '<i class=\"fa fa-trash\"></i> 进入</a>';\n};\n\n//status\nvar statusColor = [ 'default' , 'primary' , 'success' , 'info' ];\nvar formatStatus = function ( value ) {\n  return '<span class=\"label label-sm label-' + statusColor[ value ] + '\">' + Param.status[ value ] + '</span>';\n};\n\n//type\nvar typeColor = [ 'default' , 'primary' , 'success' , 'info' ];\nvar formatType = function ( value ) {\n  return '<span class=\"label label-sm label-' + typeColor[ value ] + '\">' + Param.type[ value ] + '</span>';\n};\n\n//catalog\nvar catalogColor = [ 'default' , 'primary' , 'success' , 'info' ];\nvar formatCatalog = function ( value ) {\n  return '<span class=\"label label-sm label-' + catalogColor[ value ] + '\">' + Param.catalog[ value ] + '</span>';\n};\n\n//icon or img\nvar formatIcon = function ( value ) {\n  var html = '';\n  //console.log( 'value is ',value );\n  if ( value && ! empty( value ) ) {\n    var src = Param.uri.img + value;\n    html = '<a href=\"${src}\" target=\"_blank\"><img src=\"${src}\" style=\"max-width: 60px\"></a>'.replace( /\\${src}/g , src );\n  }\n  return html;\n};\n\n\nvar formatDatetime = function ( value ) {\n  var html = '';\n  if ( ! empty( value ) ) {\n    html = value.substr( 0 , 16 );\n  }\n  return html\n};\n\nvar formatDate = function ( value ) {\n  var html = '';\n  if ( ! empty( value ) ) {\n    html = value.substr( 0 , 10 );\n  }\n  return html\n};\n\nvar yesColor = [ 'default' , 'primary' ];\nvar formatYes = function ( value ) {\n  var data = [ '否' , '是' ];\n  return '<span class=\"label label-sm label-' + yesColor[ value ] + '\">' + data[ value ] + '</span>';\n};\n\nvar formatTest = function ( value ) {\n  var data = [ '否' , '是' ];\n  return '<span class=\"label label-sm label-' + yesColor[ value ] + '\">' + data[ value ] + '</span>';\n};"
  },
  {
    "path": "resources/assets/static/src/js/global/layout.js",
    "content": "/**\n Core script to handle the entire theme and core functions\n **/\nvar Layout = function () {\n\n\tvar layoutImgPath = 'static/themes/global/img/';\n\n\tvar layoutCssPath = 'static/themes/global/';\n\n\tvar resBreakpointMd = App.getResponsiveBreakpoint('md');\n\n\t//* BEGIN:CORE HANDLERS *//\n\t// this function handles responsive layout on screen size resize or mobile device rotate.\n\n\t// Set proper height for sidebar and content. The content and sidebar height must be synced always.\n\tvar handleSidebarAndContentHeight = function () {\n\t\tvar content = $('.page-content');\n\t\tvar sidebar = $('.page-sidebar');\n\t\tvar body = $('body');\n\t\tvar height;\n\n\t\tif ( body.hasClass(\"page-footer-fixed\") === true && body.hasClass(\"page-sidebar-fixed\") === false ) {\n\t\t\tvar available_height = App.getViewPort().height - $('.page-footer').outerHeight() - $('.page-header').outerHeight();\n\t\t\tif ( content.height() < available_height ) {\n\t\t\t\tcontent.attr('style' , 'min-height:' + available_height + 'px');\n\t\t\t}\n\t\t} else {\n\t\t\tif ( body.hasClass('page-sidebar-fixed') ) {\n\t\t\t\theight = _calculateFixedSidebarViewportHeight();\n\t\t\t\tif ( body.hasClass('page-footer-fixed') === false ) {\n\t\t\t\t\theight = height - $('.page-footer').outerHeight();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar headerHeight = $('.page-header').outerHeight();\n\t\t\t\tvar footerHeight = $('.page-footer').outerHeight();\n\n\t\t\t\tif ( App.getViewPort().width < resBreakpointMd ) {\n\t\t\t\t\theight = App.getViewPort().height - headerHeight - footerHeight;\n\t\t\t\t} else {\n\t\t\t\t\theight = sidebar.height() + 20;\n\t\t\t\t}\n\n\t\t\t\tif ( (height + headerHeight + footerHeight) <= App.getViewPort().height ) {\n\t\t\t\t\theight = App.getViewPort().height - headerHeight - footerHeight;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontent.attr('style' , 'min-height:' + height + 'px');\n\t\t}\n\t};\n\n\t// Handle sidebar menu links\n\tvar handleSidebarMenuActiveLink = function (mode , el) {\n\t\t//var url = location.hash.toLowerCase();\n\t\tvar url = location.pathname.toLocaleLowerCase();\n\t\t//console.log( 'mode' , mode );\n\t\t//console.log( 'el' , el );\n\t\tvar menu = $('.page-sidebar-menu');\n\n\t\tif ( mode === 'click' || mode === 'set' ) {\n\t\t\tel = $(el);\n\t\t} else if ( mode === 'match' ) {\n\t\t\tmenu.find(\"li > a\").each(function () {\n\t\t\t\tvar path = $(this).attr(\"href\").toLowerCase();\n\t\t\t\t// url match condition\n\t\t\t\tif ( path.length > 1 && url.substr(1 , path.length - 1) == path.substr(1) ) {\n\t\t\t\t\tel = $(this);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif ( ! el || el.length == 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( el.attr('href').toLowerCase() === 'javascript:;' || el.attr('href').toLowerCase() === '#' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar slideSpeed = parseInt(menu.data(\"slide-speed\"));\n\t\tvar keepExpand = menu.data(\"keep-expanded\");\n\n\t\t// begin: handle active state\n\t\tif ( menu.hasClass('page-sidebar-menu-hover-submenu') === false ) {\n\t\t\tmenu.find('li.nav-item.open').each(function () {\n\t\t\t\tvar match = false;\n\t\t\t\t$(this).find('li').each(function () {\n\t\t\t\t\tif ( $(this).find(' > a').attr('href') === el.attr('href') ) {\n\t\t\t\t\t\tmatch = true;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif ( match === true ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t$(this).removeClass('open');\n\t\t\t\t$(this).find('> a > .arrow.open').removeClass('open');\n\t\t\t\t$(this).find('> .sub-menu').slideUp();\n\t\t\t});\n\t\t} else {\n\t\t\tmenu.find('li.open').removeClass('open');\n\t\t}\n\n\t\tmenu.find('li.active').removeClass('active');\n\t\tmenu.find('li > a > .selected').remove();\n\t\t// end: handle active state\n\n\t\tel.parents('li').each(function () {\n\t\t\t$(this).addClass('active');\n\t\t\t$(this).find('> a > span.arrow').addClass('open');\n\n\t\t\tif ( $(this).parent('ul.page-sidebar-menu').length === 1 ) {\n\t\t\t\t$(this).find('> a').append('<span class=\"selected\"></span>');\n\t\t\t}\n\n\t\t\tif ( $(this).children('ul.sub-menu').length === 1 ) {\n\t\t\t\t$(this).addClass('open');\n\t\t\t}\n\t\t});\n\n\t\tif ( mode === 'click' ) {\n\t\t\tif ( App.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass(\"in\") ) { // close the menu on mobile view while laoding a page\n\t\t\t\t$('.page-header .responsive-toggler').click();\n\t\t\t}\n\t\t}\n\t};\n\n\t// Handle sidebar menu\n\tvar handleSidebarMenu = function () {\n\t\t// handle sidebar link click\n\t\t$('.page-sidebar-menu').on('click' , 'li > a.nav-toggle, li > a > span.nav-toggle' , function (e) {\n\t\t\tvar that = $(this).closest('.nav-item').children('.nav-link');\n\n\t\t\tif ( App.getViewPort().width >= resBreakpointMd && ! $('.page-sidebar-menu').attr(\"data-initialized\") && $('body').hasClass('page-sidebar-closed') && that.parent('li').parent('.page-sidebar-menu').length === 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar hasSubMenu = that.next().hasClass('sub-menu');\n\n\t\t\tif ( App.getViewPort().width >= resBreakpointMd && that.parents('.page-sidebar-menu-hover-submenu').length === 1 ) { // exit of hover sidebar menu\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hasSubMenu === false ) {\n\t\t\t\tif ( App.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass(\"in\") ) { // close the menu on mobile view while laoding a page\n\t\t\t\t\t$('.page-header .responsive-toggler').click();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar parent = that.parent().parent();\n\t\t\tvar the = that;\n\t\t\tvar menu = $('.page-sidebar-menu');\n\t\t\tvar sub = that.next();\n\n\t\t\tvar autoScroll = menu.data(\"auto-scroll\");\n\t\t\tvar slideSpeed = parseInt(menu.data(\"slide-speed\"));\n\t\t\tvar keepExpand = menu.data(\"keep-expanded\");\n\n\t\t\tif ( ! keepExpand ) {\n\t\t\t\tparent.children('li.open').children('a').children('.arrow').removeClass('open');\n\t\t\t\tparent.children('li.open').children('.sub-menu:not(.always-open)').slideUp(slideSpeed);\n\t\t\t\tparent.children('li.open').removeClass('open');\n\t\t\t}\n\n\t\t\tvar slideOffeset = - 200;\n\t\t\topen\n\n\t\t\tif ( sub.is(\":visible\") ) {\n\t\t\t\t$('.arrow' , the).removeClass(\"open\");\n\t\t\t\tthe.parent().removeClass(\"open\");\n\t\t\t\tsub.slideUp(slideSpeed , function () {\n\t\t\t\t\tif ( autoScroll === true && $('body').hasClass('page-sidebar-closed') === false ) {\n\t\t\t\t\t\tif ( $('body').hasClass('page-sidebar-fixed') ) {\n\t\t\t\t\t\t\tmenu.slimScroll({\n\t\t\t\t\t\t\t\t'scrollTo' : (the.position()).top\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tApp.scrollTo(the , slideOffeset);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\thandleSidebarAndContentHeight();\n\t\t\t\t});\n\t\t\t} else if ( hasSubMenu ) {\n\t\t\t\t$('.arrow' , the).addClass(\"open\");\n\t\t\t\tthe.parent().addClass(\"open\");\n\t\t\t\tsub.slideDown(slideSpeed , function () {\n\t\t\t\t\tif ( autoScroll === true && $('body').hasClass('page-sidebar-closed') === false ) {\n\t\t\t\t\t\tif ( $('body').hasClass('page-sidebar-fixed') ) {\n\t\t\t\t\t\t\tmenu.slimScroll({\n\t\t\t\t\t\t\t\t'scrollTo' : (the.position()).top\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tApp.scrollTo(the , slideOffeset);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\thandleSidebarAndContentHeight();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t});\n\n\t\t// handle ajax links within sidebar menu\n\t\t//$('.page-sidebar').on('click' , ' li > a.ajaxify' , function (e) {\n\t\t//\te.preventDefault();\n\t\t//\tconsole.log('here');\n\t\t//\tApp.scrollTop();\n\t\t//\n\t\t//\tvar url = $(this).attr(\"href\");\n\t\t//\tvar menuContainer = $('.page-sidebar ul');\n\t\t//\tvar pageContent = $('.page-content');\n\t\t//\tvar pageContentBody = $('.page-content .page-content-body');\n\t\t//\n\t\t//\tmenuContainer.children('li.active').removeClass('active');\n\t\t//\tmenuContainer.children('arrow.open').removeClass('open');\n\t\t//\n\t\t//\t$(this).parents('li').each(function () {\n\t\t//\t\t$(this).addClass('active');\n\t\t//\t\t$(this).children('a > span.arrow').addClass('open');\n\t\t//\t});\n\t\t//\t$(this).parents('li').addClass('active');\n\t\t//\n\t\t//\tif ( App.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass(\"in\") ) { // close the menu on\n\t\t// mobile view while laoding a page $('.page-header .responsive-toggler').click(); }  App.startPageLoading();  var\n\t\t// the = $(this);  $.ajax({ type : \"GET\" , cache : false , url : url , dataType : \"html\" , success : function (res)\n\t\t// { if ( the.parents('li.open').length === 0 ) { $('.page-sidebar-menu > li.open > a').click(); }\n\t\t// App.stopPageLoading(); pageContentBody.html(res); Layout.fixContentHeight(); // fix content height\n\t\t// App.initAjax(); // initialize core stuff } , error : function (xhr , ajaxOptions , thrownError) {\n\t\t// App.stopPageLoading(); pageContentBody.html('<h4>Could not load the requested content.</h4>'); } }); });\n\n\t\t// handle ajax link within main content\n\t\t//$('.page-content').on('click' , '.ajaxify' , function (e) {\n\t\t//\te.preventDefault();\n\t\t//\tApp.scrollTop();\n\t\t//\n\t\t//\tvar url = $(this).attr(\"href\");\n\t\t//\tvar pageContent = $('.page-content');\n\t\t//\tvar pageContentBody = $('.page-content .page-content-body');\n\t\t//\n\t\t//\tApp.startPageLoading();\n\t\t//\n\t\t//\tif ( App.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass(\"in\") ) { // close the menu on\n\t\t// mobile view while laoding a page $('.page-header .responsive-toggler').click(); }  $.ajax({ type : \"GET\" , cache\n\t\t// : false , url : url , dataType : \"html\" , success : function (res) { App.stopPageLoading();\n\t\t// pageContentBody.html(res); Layout.fixContentHeight(); // fix content height App.initAjax(); // initialize core\n\t\t// stuff } , error : function (xhr , ajaxOptions , thrownError) { pageContentBody.html('<h4>Could not load the\n\t\t// requested content.</h4>'); App.stopPageLoading(); } }); });\n\n\t\t// handle scrolling to top on responsive menu toggler click when header is fixed for mobile view\n\t\t$(document).on('click' , '.page-header-fixed-mobile .page-header .responsive-toggler' , function () {\n\t\t\tApp.scrollTop();\n\t\t});\n\n\t\t// handle sidebar hover effect\n\t\thandleFixedSidebarHoverEffect();\n\n\t\t// handle the search bar close\n\t\t$('.page-sidebar').on('click' , '.sidebar-search .remove' , function (e) {\n\t\t\te.preventDefault();\n\t\t\t$('.sidebar-search').removeClass(\"open\");\n\t\t});\n\n\t\t// handle the search query submit on enter press\n\t\t$('.page-sidebar .sidebar-search').on('keypress' , 'input.form-control' , function (e) {\n\t\t\tif ( e.which == 13 ) {\n\t\t\t\t$('.sidebar-search').submit();\n\t\t\t\treturn false; //<---- Add this line\n\t\t\t}\n\t\t});\n\n\t\t// handle the search submit(for sidebar search and responsive mode of the header search)\n\t\t$('.sidebar-search .submit').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tif ( $('body').hasClass(\"page-sidebar-closed\") ) {\n\t\t\t\tif ( $('.sidebar-search').hasClass('open') === false ) {\n\t\t\t\t\tif ( $('.page-sidebar-fixed').length === 1 ) {\n\t\t\t\t\t\t$('.page-sidebar .sidebar-toggler').click(); //trigger sidebar toggle button\n\t\t\t\t\t}\n\t\t\t\t\t$('.sidebar-search').addClass(\"open\");\n\t\t\t\t} else {\n\t\t\t\t\t$('.sidebar-search').submit();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$('.sidebar-search').submit();\n\t\t\t}\n\t\t});\n\n\t\t// handle close on body click\n\t\tif ( $('.sidebar-search').length !== 0 ) {\n\t\t\t$('.sidebar-search .input-group').on('click' , function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\t$('body').on('click' , function () {\n\t\t\t\tif ( $('.sidebar-search').hasClass('open') ) {\n\t\t\t\t\t$('.sidebar-search').removeClass(\"open\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t// Helper function to calculate sidebar height for fixed sidebar layout.\n\tvar _calculateFixedSidebarViewportHeight = function () {\n\t\tvar sidebarHeight = App.getViewPort().height - $('.page-header').outerHeight(true);\n\t\tif ( $('body').hasClass(\"page-footer-fixed\") ) {\n\t\t\tsidebarHeight = sidebarHeight - $('.page-footer').outerHeight();\n\t\t}\n\n\t\treturn sidebarHeight;\n\t};\n\n\t// Handles fixed sidebar\n\tvar handleFixedSidebar = function () {\n\t\tvar menu = $('.page-sidebar-menu');\n\n\t\tApp.destroySlimScroll(menu);\n\n\t\tif ( $('.page-sidebar-fixed').length === 0 ) {\n\t\t\thandleSidebarAndContentHeight();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( App.getViewPort().width >= resBreakpointMd ) {\n\t\t\tmenu.attr(\"data-height\" , _calculateFixedSidebarViewportHeight());\n\t\t\tApp.initSlimScroll(menu);\n\t\t\thandleSidebarAndContentHeight();\n\t\t}\n\t};\n\n\t// Handles sidebar toggler to close/hide the sidebar.\n\tvar handleFixedSidebarHoverEffect = function () {\n\t\tvar body = $('body');\n\t\tif ( body.hasClass('page-sidebar-fixed') ) {\n\t\t\t$('.page-sidebar').on('mouseenter' , function () {\n\t\t\t\tif ( body.hasClass('page-sidebar-closed') ) {\n\t\t\t\t\t$(this).find('.page-sidebar-menu').removeClass('page-sidebar-menu-closed');\n\t\t\t\t}\n\t\t\t}).on('mouseleave' , function () {\n\t\t\t\tif ( body.hasClass('page-sidebar-closed') ) {\n\t\t\t\t\t$(this).find('.page-sidebar-menu').addClass('page-sidebar-menu-closed');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t// Hanles sidebar toggler\n\tvar handleSidebarToggler = function () {\n\t\tvar body = $('body');\n\t\tif ( $.cookie && $.cookie('sidebar_closed') === '1' && App.getViewPort().width >= resBreakpointMd ) {\n\t\t\t$('body').addClass('page-sidebar-closed');\n\t\t\t$('.page-sidebar-menu').addClass('page-sidebar-menu-closed');\n\t\t}\n\n\t\t// handle sidebar show/hide\n\t\t$('body').on('click' , '.sidebar-toggler' , function (e) {\n\t\t\tvar sidebar = $('.page-sidebar');\n\t\t\tvar sidebarMenu = $('.page-sidebar-menu');\n\t\t\t$(\".sidebar-search\" , sidebar).removeClass(\"open\");\n\n\t\t\tif ( body.hasClass(\"page-sidebar-closed\") ) {\n\t\t\t\tbody.removeClass(\"page-sidebar-closed\");\n\t\t\t\tsidebarMenu.removeClass(\"page-sidebar-menu-closed\");\n\t\t\t\tif ( $.cookie ) {\n\t\t\t\t\t$.cookie('sidebar_closed' , '0');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbody.addClass(\"page-sidebar-closed\");\n\t\t\t\tsidebarMenu.addClass(\"page-sidebar-menu-closed\");\n\t\t\t\tif ( body.hasClass(\"page-sidebar-fixed\") ) {\n\t\t\t\t\tsidebarMenu.trigger(\"mouseleave\");\n\t\t\t\t}\n\t\t\t\tif ( $.cookie ) {\n\t\t\t\t\t$.cookie('sidebar_closed' , '1');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$(window).trigger('resize');\n\t\t});\n\t};\n\n\t// Handles the horizontal menu\n\tvar handleHorizontalMenu = function () {\n\t\t//handle tab click\n\t\t$('.page-header').on('click' , '.hor-menu a[data-toggle=\"tab\"]' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar nav = $(\".hor-menu .nav\");\n\t\t\tvar active_link = nav.find('li.current');\n\t\t\t$('li.active' , active_link).removeClass(\"active\");\n\t\t\t$('.selected' , active_link).remove();\n\t\t\tvar new_link = $(this).parents('li').last();\n\t\t\tnew_link.addClass(\"current\");\n\t\t\tnew_link.find(\"a:first\").append('<span class=\"selected\"></span>');\n\t\t});\n\n\t\t// handle search box expand/collapse\n\t\t$('.page-header').on('click' , '.search-form' , function (e) {\n\t\t\t$(this).addClass(\"open\");\n\t\t\t$(this).find('.form-control').focus();\n\n\t\t\t$('.page-header .search-form .form-control').on('blur' , function (e) {\n\t\t\t\t$(this).closest('.search-form').removeClass(\"open\");\n\t\t\t\t$(this).unbind(\"blur\");\n\t\t\t});\n\t\t});\n\n\t\t// handle hor menu search form on enter press\n\t\t$('.page-header').on('keypress' , '.hor-menu .search-form .form-control' , function (e) {\n\t\t\tif ( e.which == 13 ) {\n\t\t\t\t$(this).closest('.search-form').submit();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\t// handle header search button click\n\t\t$('.page-header').on('mousedown' , '.search-form.open .submit' , function (e) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\t$(this).closest('.search-form').submit();\n\t\t});\n\n\t\t// handle hover dropdown menu for desktop devices only\n\t\t$('[data-hover=\"megamenu-dropdown\"]').not('.hover-initialized').each(function () {\n\t\t\t$(this).dropdownHover();\n\t\t\t$(this).addClass('hover-initialized');\n\t\t});\n\n\t\t$(document).on('click' , '.mega-menu-dropdown .dropdown-menu' , function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\t};\n\n\t// Handles Bootstrap Tabs.\n\tvar handleTabs = function () {\n\t\t// fix content height on tab click\n\t\t$('body').on('shown.bs.tab' , 'a[data-toggle=\"tab\"]' , function () {\n\t\t\thandleSidebarAndContentHeight();\n\t\t});\n\t};\n\n\t// Handles the go to top button at the footer\n\tvar handleGoTop = function () {\n\t\tvar offset = 300;\n\t\tvar duration = 500;\n\n\t\tif ( navigator.userAgent.match(/iPhone|iPad|iPod/i) ) {  // ios supported\n\t\t\t$(window).bind(\"touchend touchcancel touchleave\" , function (e) {\n\t\t\t\tif ( $(this).scrollTop() > offset ) {\n\t\t\t\t\t$('.scroll-to-top').fadeIn(duration);\n\t\t\t\t} else {\n\t\t\t\t\t$('.scroll-to-top').fadeOut(duration);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {  // general\n\t\t\t$(window).scroll(function () {\n\t\t\t\tif ( $(this).scrollTop() > offset ) {\n\t\t\t\t\t$('.scroll-to-top').fadeIn(duration);\n\t\t\t\t} else {\n\t\t\t\t\t$('.scroll-to-top').fadeOut(duration);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t$('.scroll-to-top').click(function (e) {\n\t\t\te.preventDefault();\n\t\t\t$('html, body').animate({scrollTop : 0} , duration);\n\t\t\treturn false;\n\t\t});\n\t};\n\n\t// Hanlde 100% height elements(block, portlet, etc)\n\tvar handle100HeightContent = function () {\n\n\t\t$('.full-height-content').each(function () {\n\t\t\tvar target = $(this);\n\t\t\tvar height;\n\n\t\t\theight = App.getViewPort().height -\n\t\t\t         $('.page-header').outerHeight(true) -\n\t\t\t         $('.page-footer').outerHeight(true) -\n\t\t\t         $('.page-title').outerHeight(true) -\n\t\t\t         $('.page-bar').outerHeight(true);\n\n\t\t\tif ( target.hasClass('portlet') ) {\n\t\t\t\tvar portletBody = target.find('.portlet-body');\n\n\t\t\t\tApp.destroySlimScroll(portletBody.find('.full-height-content-body')); // destroy slimscroll\n\n\t\t\t\theight = height -\n\t\t\t\t         target.find('.portlet-title').outerHeight(true) -\n\t\t\t\t         parseInt(target.find('.portlet-body').css('padding-top')) -\n\t\t\t\t         parseInt(target.find('.portlet-body').css('padding-bottom')) - 5;\n\n\t\t\t\tif ( App.getViewPort().width >= resBreakpointMd && target.hasClass(\"full-height-content-scrollable\") ) {\n\t\t\t\t\theight = height - 35;\n\t\t\t\t\tportletBody.find('.full-height-content-body').css('height' , height);\n\t\t\t\t\tApp.initSlimScroll(portletBody.find('.full-height-content-body'));\n\t\t\t\t} else {\n\t\t\t\t\tportletBody.css('min-height' , height);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tApp.destroySlimScroll(target.find('.full-height-content-body')); // destroy slimscroll\n\n\t\t\t\tif ( App.getViewPort().width >= resBreakpointMd && target.hasClass(\"full-height-content-scrollable\") ) {\n\t\t\t\t\theight = height - 35;\n\t\t\t\t\ttarget.find('.full-height-content-body').css('height' , height);\n\t\t\t\t\tApp.initSlimScroll(target.find('.full-height-content-body'));\n\t\t\t\t} else {\n\t\t\t\t\ttarget.css('min-height' , height);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\t//* END:CORE HANDLERS *//\n\n\treturn {\n\t\t// Main init methods to initialize the layout\n\t\t//IMPORTANT!!!: Do not modify the core handlers call order.\n\n\t\tinitHeader : function () {\n\t\t\thandleHorizontalMenu(); // handles horizontal menu\n\t\t} ,\n\n\t\tsetSidebarMenuActiveLink : function (mode , el) {\n\t\t\thandleSidebarMenuActiveLink(mode , el);\n\t\t} ,\n\n\t\tinitSidebar : function () {\n\t\t\t//layout handlers\n\t\t\thandleFixedSidebar(); // handles fixed sidebar menu\n\t\t\thandleSidebarMenu(); // handles main menu\n\t\t\thandleSidebarToggler(); // handles sidebar hide/show\n\n\t\t\t//if ( App.isAngularJsApp() ) {\n\t\t\t//\thandleSidebarMenuActiveLink('match'); // init sidebar active links\n\t\t\t//}\n\n\t\t\tApp.addResizeHandler(handleFixedSidebar); // reinitialize fixed sidebar on window resize\n\t\t} ,\n\n\t\tinitContent : function () {\n\t\t\thandle100HeightContent(); // handles 100% height elements(block, portlet, etc)\n\t\t\thandleTabs(); // handle bootstrah tabs\n\n\t\t\tApp.addResizeHandler(handleSidebarAndContentHeight); // recalculate sidebar & content height on window resize\n\t\t\tApp.addResizeHandler(handle100HeightContent); // reinitialize content height on window resize\n\t\t} ,\n\n\t\tinitFooter : function () {\n\t\t\thandleGoTop(); //handles scroll to top functionality in the footer\n\t\t} ,\n\n\t\tchPwd : function () {\n\t\t\t//打开修改密码modal\n\t\t\t$('#chPwdBtn').on('click' , function (e) {\n\t\t\t\te.preventDefault();\n\t\t\t\t$('#chPwdModal').modal('show');\n\t\t\t});\n\n\t\t\t//提交修改密码表单\n\t\t\t$('#submitChPwdForm').on('click' , function (e) {\n\t\t\t\te.preventDefault();\n\t\t\t\t$.post(Param.uri.chPwd , $('#chPwdForm').serializeObject())\n\t\t\t\t .fail(function (res) {\n\t\t\t\t\t  res.error(res.responseText);\n\t\t\t\t })\n\t\t\t\t .done(function (res) {\n\t\t\t\t\t\tif ( res.code != 0 ) {\n\t\t\t\t\t\t\ttips.error( res.msg );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$('#chPwdModal').modal('hide');\n\t\t\t\t\t\t\ttips.success( res.msg , function(){\n\t\t\t\t\t\t\t\twindow.location.reload();\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t}\n\t\t\t\t });\n\t\t\t});\n\t\t} ,\n\n\t\tinit : function () {\n\t\t\tthis.initHeader();\n\t\t\tthis.initSidebar();\n\t\t\tthis.initContent();\n\t\t\tthis.initFooter();\n\t\t\tthis.setSidebarMenuActiveLink('match');\n\t\t\tthis.chPwd();\n\t\t} ,\n\n\t\t//public function to fix the sidebar and content height accordingly\n\t\tfixContentHeight : function () {\n\t\t\thandleSidebarAndContentHeight();\n\t\t} ,\n\n\t\tinitFixedSidebarHoverEffect : function () {\n\t\t\thandleFixedSidebarHoverEffect();\n\t\t} ,\n\n\t\tinitFixedSidebar : function () {\n\t\t\thandleFixedSidebar();\n\t\t} ,\n\n\t\tgetLayoutImgPath : function () {\n\t\t\treturn App.getAssetsPath() + layoutImgPath;\n\t\t} ,\n\n\t\tgetLayoutCssPath : function () {\n\t\t\treturn App.getAssetsPath() + layoutCssPath;\n\t\t}\n\t};\n\n}();\n\njQuery(document).ready(function () {\n\tLayout.init(); // init metronic core componets\n});"
  },
  {
    "path": "resources/assets/static/src/themes/global/components-rounded.css",
    "content": "/*********************************\n METRONIC ROUNDED STYLE COMPONENTS \n*********************************/\n/* Cubic Bezier Transition */\n/***\nGeneral reset\n***/\n/* Set default body */\nbody {\n  color: #333333;\n  font-family: \"Open Sans\", sans-serif;\n  padding: 0px !important;\n  margin: 0px !important;\n  direction: \"ltr\";\n  font-size: 14px; }\n\n/*\n Internet Explorer 10 doesn't differentiate device width from viewport width, and thus doesn't \n properly apply the media queries in Bootstrap's CSS. To address this, \n you can optionally include the following CSS and JavaScript to work around this problem until Microsoft issues a fix.\n*/\n@-webkit-viewport {\n  width: device-width; }\n\n@-moz-viewport {\n  width: device-width; }\n\n@-ms-viewport {\n  width: device-width; }\n\n@-o-viewport {\n  width: device-width; }\n\n@viewport {\n  width: device-width; }\n\n/*\n Internet Explorer 10 doesn't differentiate device width from viewport width, \n and thus doesn't properly apply the media queries in Bootstrap's CSS. To address this, following CSS code applied \n*/\n@-ms-viewport {\n  width: auto !important; }\n\n.md-shadow-z-1 {\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.18); }\n\n.md-shadow-z-1-i {\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.18) !important; }\n\n.md-shadow-z-1-hover {\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.14), 0 1px 2px rgba(0, 0, 0, 0.22); }\n\n.md-shadow-z-2 {\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.22); }\n\n.md-shadow-z-2-i {\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.22) !important; }\n\n.md-shadow-z-2-hover {\n  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.2), 0 3px 6px rgba(0, 0, 0, 0.26); }\n\n.md-shadow-z-3 {\n  box-shadow: 0 8px 18px rgba(0, 0, 0, 0.18), 0 6px 6px rgba(0, 0, 0, 0.23); }\n\n.md-shadow-z-3-i {\n  box-shadow: 0 8px 18px rgba(0, 0, 0, 0.18), 0 6px 6px rgba(0, 0, 0, 0.24) !important; }\n\n.md-shadow-z-3-hover {\n  box-shadow: 0 8px 18px rgba(0, 0, 0, 0.22), 0 6px 6px rgba(0, 0, 0, 0.26); }\n\n.md-shadow-z-4 {\n  box-shadow: 0 14px 28px rgba(0, 0, 0, 0.26), 0 10px 10px rgba(0, 0, 0, 0.22); }\n\n.md-shadow-z-4-i {\n  box-shadow: 0 14px 28px rgba(0, 0, 0, 0.26), 0 10px 10px rgba(0, 0, 0, 0.22) !important; }\n\n.md-shadow-z-5 {\n  box-shadow: 0 19px 38px rgba(0, 0, 0, 0.28), 0 15px 12px rgba(0, 0, 0, 0.22); }\n\n.md-shadow-z-5-i {\n  box-shadow: 0 19px 38px rgba(0, 0, 0, 0.28), 0 15px 12px rgba(0, 0, 0, 0.22) !important; }\n\n.md-shadow-none {\n  box-shadow: none !important; }\n\n.md-click-circle {\n  display: block;\n  position: absolute;\n  background: rgba(0, 0, 0, 0.2);\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: scale(0);\n  -moz-transform: scale(0);\n  transform: scale(0); }\n  .md-click-circle.md-click-animate {\n    -webkit-animation: mdClickEffect 0.65s linear;\n    -moz-animation: mdClickEffect 0.65s linear;\n    animation: mdClickEffect 0.65s linear; }\n\n@-webkit-keyframes mdClickEffect {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(0); }\n  100% {\n    opacity: 0 !important;\n    -webkit-transform: scale(2.5); } }\n\n@-moz-keyframes mdClickEffect {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(0); }\n  100% {\n    opacity: 0 !important;\n    -moz-transform: scale(2.5); } }\n\n@keyframes mdClickEffect {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(0); }\n  100% {\n    opacity: 0 !important;\n    transform: scale(2.5); } }\n\n.form-group.form-md-line-input {\n  position: relative;\n  margin: 0 0 35px 0;\n  padding-top: 20px; }\n  .form-horizontal .form-group.form-md-line-input {\n    padding-top: 10px;\n    margin-bottom: 20px;\n    margin: 0 -15px 20px -15px; }\n  .form-horizontal .form-group.form-md-line-input > label {\n    padding-top: 5px;\n    font-size: 14px;\n    color: #888888;\n    opacity: 1 ;\n    filter: alpha(opacity=100) ; }\n  .form-group.form-md-line-input .form-control {\n    background: none;\n    border: 0;\n    border-bottom: 1px solid #c2cad8;\n    -webkit-border-radius: 0;\n    -moz-border-radius: 0;\n    -ms-border-radius: 0;\n    -o-border-radius: 0;\n    border-radius: 0;\n    color: #555555;\n    box-shadow: none;\n    padding-left: 0;\n    padding-right: 0;\n    font-size: 14px; }\n    .form-group.form-md-line-input .form-control::-moz-placeholder {\n      color: #999;\n      opacity: 1; }\n    .form-group.form-md-line-input .form-control:-ms-input-placeholder {\n      color: #999; }\n    .form-group.form-md-line-input .form-control::-webkit-input-placeholder {\n      color: #999; }\n    .form-group.form-md-line-input .form-control.form-control-static {\n      border-bottom: 0; }\n    .form-group.form-md-line-input .form-control.input-sm {\n      font-size: 14px;\n      padding: 6px 0; }\n    .form-group.form-md-line-input .form-control.input-lg {\n      font-size: 20px;\n      padding: 14px 0; }\n    .form-group.form-md-line-input .form-control ~ label,\n    .form-group.form-md-line-input .form-control ~ .form-control-focus {\n      width: 100%;\n      position: absolute;\n      left: 0;\n      bottom: 0;\n      pointer-events: none; }\n      .form-horizontal .form-group.form-md-line-input .form-control ~ label, .form-horizontal\n      .form-group.form-md-line-input .form-control ~ .form-control-focus {\n        width: auto;\n        left: 15px;\n        right: 15px; }\n      .form-group.form-md-line-input .form-control ~ label:after,\n      .form-group.form-md-line-input .form-control ~ .form-control-focus:after {\n        content: '';\n        position: absolute;\n        z-index: 5;\n        bottom: 0;\n        left: 50%;\n        width: 0;\n        height: 2px;\n        width: 0;\n        visibility: hidden;\n        transition: 0.2s ease all; }\n    .form-group.form-md-line-input .form-control ~ label {\n      top: 0;\n      margin-bottom: 0;\n      font-size: 14px;\n      color: #888888;\n      opacity: 1 ;\n      filter: alpha(opacity=100) ; }\n    .form-group.form-md-line-input .form-control ~ .help-block-error {\n      opacity: 1 ;\n      filter: alpha(opacity=100) ; }\n    .form-group.form-md-line-input .form-control.edited:not([readonly]) ~ label,\n    .form-group.form-md-line-input .form-control.edited:not([readonly]) ~ .form-control-focus, .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ label,\n    .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ .form-control-focus, .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ label,\n    .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ .form-control-focus {\n      color: #888888; }\n      .form-group.form-md-line-input .form-control.edited:not([readonly]) ~ label:after,\n      .form-group.form-md-line-input .form-control.edited:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ label:after,\n      .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ label:after,\n      .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ .form-control-focus:after {\n        visibility: visible;\n        left: 0;\n        width: 100%;\n        background: #36c6d3; }\n    .form-group.form-md-line-input .form-control.edited:not([readonly]) ~ label, .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ label {\n      opacity: 1 ;\n      filter: alpha(opacity=100) ; }\n    .form-group.form-md-line-input .form-control.edited:not([readonly]) ~ .help-block, .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ .help-block, .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ .help-block {\n      color: #36c6d3;\n      opacity: 1 ;\n      filter: alpha(opacity=100) ; }\n    .form-group.form-md-line-input .form-control.edited:not([readonly]) ~ .help-block-error, .form-group.form-md-line-input .form-control:focus:not([readonly]) ~ .help-block-error, .form-group.form-md-line-input .form-control.focus:not([readonly]) ~ .help-block-error {\n      opacity: 0 ;\n      filter: alpha(opacity=0) ; }\n    .form-group.form-md-line-input .form-control[readonly], .form-group.form-md-line-input .form-control[disabled],\n    fieldset[disabled] .form-group.form-md-line-input .form-control {\n      background: none;\n      cursor: not-allowed;\n      border-bottom: 1px dashed #c2cad8; }\n  .form-group.form-md-line-input.form-md-floating-label .form-control ~ label {\n    font-size: 16px;\n    top: 25px;\n    transition: 0.2s ease all;\n    color: #999; }\n  .form-group.form-md-line-input.form-md-floating-label .form-control[readonly] ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.edited ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.form-control-static ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.focus:not([readonly]) ~ label {\n    top: 0;\n    font-size: 13px; }\n  .form-group.form-md-line-input.form-md-floating-label .form-control.input-sm ~ label {\n    font-size: 14px;\n    top: 24px; }\n  .form-group.form-md-line-input.form-md-floating-label .form-control.input-sm[readonly] ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-sm.form-control-static ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-sm.edited ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-sm:focus:not([readonly]) ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-sm.focus:not([readonly]) ~ label {\n    top: 0;\n    font-size: 13px; }\n  .form-group.form-md-line-input.form-md-floating-label .form-control.input-lg ~ label {\n    font-size: 20px;\n    top: 30px; }\n  .form-group.form-md-line-input.form-md-floating-label .form-control.input-lg[readonly] ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-lg.edited ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-lg.form-control-static ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-lg:focus:not([readonly]) ~ label, .form-group.form-md-line-input.form-md-floating-label .form-control.input-lg.focus:not([readonly]) ~ label {\n    top: 0;\n    font-size: 13px; }\n  .form-group.form-md-line-input.form-md-floating-label .input-icon > label {\n    padding-left: 34px; }\n  .form-group.form-md-line-input.form-md-floating-label .input-icon.right > label {\n    padding-left: 0;\n    padding-right: 34px; }\n  .form-group.form-md-line-input.form-md-floating-label .input-group.left-addon label {\n    padding-left: 34px; }\n  .form-group.form-md-line-input.form-md-floating-label .input-group.right-addon label {\n    padding-right: 34px; }\n  .form-group.form-md-line-input + .input-icon {\n    padding-top: 0; }\n  .form-group.form-md-line-input .help-block {\n    position: absolute;\n    margin: 2px 0 0 0;\n    opacity: 0 ;\n    filter: alpha(opacity=0) ;\n    font-size: 13px; }\n  .form-group.form-md-line-input > .input-icon > i {\n    left: 0;\n    bottom: 0;\n    margin: 9px 2px 10px 10px;\n    color: #888888; }\n  .form-group.form-md-line-input > .input-icon.input-icon-lg > i {\n    top: 6px; }\n  .form-group.form-md-line-input > .input-icon.input-icon-sm > i {\n    top: -1px; }\n  .form-group.form-md-line-input > .input-icon .form-control {\n    padding-left: 34px; }\n  .form-group.form-md-line-input > .input-icon > label {\n    margin-top: -20px; }\n  .form-group.form-md-line-input > .input-icon.right .form-control {\n    padding-left: 0;\n    padding-right: 34px; }\n  .form-group.form-md-line-input > .input-icon.right > i {\n    left: auto;\n    right: 8px;\n    margin: 11px 2px 10px 10px; }\n  .form-group.form-md-line-input + .input-group {\n    padding-top: 0; }\n  .form-group.form-md-line-input .input-group {\n    padding-top: 0; }\n    .form-group.form-md-line-input .input-group > label {\n      margin-top: -20px; }\n    .form-group.form-md-line-input .input-group .input-group-addon {\n      -webkit-border-radius: 0;\n      -moz-border-radius: 0;\n      -ms-border-radius: 0;\n      -o-border-radius: 0;\n      border-radius: 0;\n      background: none;\n      border: 0;\n      border-bottom: 1px solid #c2cad8; }\n    .form-group.form-md-line-input .input-group + .input-group-control {\n      padding-top: 0; }\n    .form-group.form-md-line-input .input-group .input-group-control {\n      padding-top: 0;\n      position: relative;\n      display: table-cell;\n      vertical-align: bottom; }\n      .form-group.form-md-line-input .input-group .input-group-control > label {\n        margin-top: -20px; }\n    .form-group.form-md-line-input .input-group .input-group-btn .btn {\n      -webkit-border-radius: 4px;\n      -moz-border-radius: 4px;\n      -ms-border-radius: 4px;\n      -o-border-radius: 4px;\n      border-radius: 4px; }\n    .form-group.form-md-line-input .input-group .input-group-btn.btn-left .btn {\n      margin-right: 10px; }\n    .form-group.form-md-line-input .input-group .input-group-btn.btn-right .btn {\n      margin-left: 10px; }\n    .form-group.form-md-line-input .input-group .help-block {\n      margin-top: 35px; }\n    .form-group.form-md-line-input .input-group.input-group-sm .help-block {\n      margin-top: 30px; }\n    .form-group.form-md-line-input .input-group.input-group-lg .help-block {\n      margin-top: 47px; }\n  .form-group.form-md-line-input.has-success .form-control {\n    border-bottom: 1px solid #27a4b0; }\n    .form-group.form-md-line-input.has-success .form-control.edited:not([readonly]) ~ label:after,\n    .form-group.form-md-line-input.has-success .form-control.edited:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-success .form-control.form-control-static ~ label:after,\n    .form-group.form-md-line-input.has-success .form-control.form-control-static ~ .form-control-focus:after, .form-group.form-md-line-input.has-success .form-control:focus:not([readonly]) ~ label:after,\n    .form-group.form-md-line-input.has-success .form-control:focus:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-success .form-control.focus:not([readonly]) ~ label:after,\n    .form-group.form-md-line-input.has-success .form-control.focus:not([readonly]) ~ .form-control-focus:after {\n      background: #27a4b0; }\n    .form-group.form-md-line-input.has-success .form-control.edited:not([readonly]) ~ label, .form-group.form-md-line-input.has-success .form-control.form-control-static ~ label, .form-group.form-md-line-input.has-success .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input.has-success .form-control.focus:not([readonly]) ~ label {\n      color: #27a4b0; }\n    .form-group.form-md-line-input.has-success .form-control.edited:not([readonly]) ~ i, .form-group.form-md-line-input.has-success .form-control.form-control-static ~ i, .form-group.form-md-line-input.has-success .form-control:focus:not([readonly]) ~ i, .form-group.form-md-line-input.has-success .form-control.focus:not([readonly]) ~ i {\n      color: #27a4b0; }\n    .form-group.form-md-line-input.has-success .form-control.edited:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-success .form-control.form-control-static ~ .help-block, .form-group.form-md-line-input.has-success .form-control:focus:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-success .form-control.focus:not([readonly]) ~ .help-block {\n      color: #27a4b0; }\n  .form-group.form-md-line-input.has-success .input-group-addon {\n    color: #27a4b0;\n    border-bottom: 1px solid #27a4b0; }\n  .form-group.form-md-line-input.has-success label {\n    color: #27a4b0; }\n  .form-group.form-md-line-input.has-warning .form-control {\n    border-bottom: 1px solid #c29d0b; }\n    .form-group.form-md-line-input.has-warning .form-control.edited:not([readonly]) ~ label:after,\n    .form-group.form-md-line-input.has-warning .form-control.edited:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-warning .form-control.form-control-static ~ label:after,\n    .form-group.form-md-line-input.has-warning .form-control.form-control-static ~ .form-control-focus:after, .form-group.form-md-line-input.has-warning .form-control:focus:not([readonly]) ~ label:after,\n    .form-group.form-md-line-input.has-warning .form-control:focus:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-warning .form-control.focus:not([readonly]) ~ label:after,\n    .form-group.form-md-line-input.has-warning .form-control.focus:not([readonly]) ~ .form-control-focus:after {\n      background: #c29d0b; }\n    .form-group.form-md-line-input.has-warning .form-control.edited:not([readonly]) ~ label, .form-group.form-md-line-input.has-warning .form-control.form-control-static ~ label, .form-group.form-md-line-input.has-warning .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input.has-warning .form-control.focus:not([readonly]) ~ label {\n      color: #c29d0b; }\n    .form-group.form-md-line-input.has-warning .form-control.edited:not([readonly]) ~ i, .form-group.form-md-line-input.has-warning .form-control.form-control-static ~ i, .form-group.form-md-line-input.has-warning .form-control:focus:not([readonly]) ~ i, .form-group.form-md-line-input.has-warning .form-control.focus:not([readonly]) ~ i {\n      color: #c29d0b; }\n    .form-group.form-md-line-input.has-warning .form-control.edited:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-warning .form-control.form-control-static ~ .help-block, .form-group.form-md-line-input.has-warning .form-control:focus:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-warning .form-control.focus:not([readonly]) ~ .help-block {\n      color: #c29d0b; }\n  .form-group.form-md-line-input.has-warning .input-group-addon {\n    color: #c29d0b;\n    border-bottom: 1px solid #c29d0b; }\n  .form-group.form-md-line-input.has-warning label {\n    color: #c29d0b; }\n  .form-group.form-md-line-input.has-error .form-control {\n    border-bottom: 1px solid #e73d4a; }\n    .form-group.form-md-line-input.has-error .form-control.edited:not([readonly]) ~ label:after,\n    .form-group.form-md-line-input.has-error .form-control.edited:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-error .form-control.form-control-static ~ label:after,\n    .form-group.form-md-line-input.has-error .form-control.form-control-static ~ .form-control-focus:after, .form-group.form-md-line-input.has-error .form-control:focus:not([readonly]) ~ label:after,\n    .form-group.form-md-line-input.has-error .form-control:focus:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-error .form-control.focus:not([readonly]) ~ label:after,\n    .form-group.form-md-line-input.has-error .form-control.focus:not([readonly]) ~ .form-control-focus:after {\n      background: #e73d4a; }\n    .form-group.form-md-line-input.has-error .form-control.edited:not([readonly]) ~ label, .form-group.form-md-line-input.has-error .form-control.form-control-static ~ label, .form-group.form-md-line-input.has-error .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input.has-error .form-control.focus:not([readonly]) ~ label {\n      color: #e73d4a; }\n    .form-group.form-md-line-input.has-error .form-control.edited:not([readonly]) ~ i, .form-group.form-md-line-input.has-error .form-control.form-control-static ~ i, .form-group.form-md-line-input.has-error .form-control:focus:not([readonly]) ~ i, .form-group.form-md-line-input.has-error .form-control.focus:not([readonly]) ~ i {\n      color: #e73d4a; }\n    .form-group.form-md-line-input.has-error .form-control.edited:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-error .form-control.form-control-static ~ .help-block, .form-group.form-md-line-input.has-error .form-control:focus:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-error .form-control.focus:not([readonly]) ~ .help-block {\n      color: #e73d4a; }\n  .form-group.form-md-line-input.has-error .input-group-addon {\n    color: #e73d4a;\n    border-bottom: 1px solid #e73d4a; }\n  .form-group.form-md-line-input.has-error label {\n    color: #e73d4a; }\n  .form-group.form-md-line-input.has-info .form-control {\n    border-bottom: 1px solid #327ad5; }\n    .form-group.form-md-line-input.has-info .form-control.edited:not([readonly]) ~ label:after,\n    .form-group.form-md-line-input.has-info .form-control.edited:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-info .form-control.form-control-static ~ label:after,\n    .form-group.form-md-line-input.has-info .form-control.form-control-static ~ .form-control-focus:after, .form-group.form-md-line-input.has-info .form-control:focus:not([readonly]) ~ label:after,\n    .form-group.form-md-line-input.has-info .form-control:focus:not([readonly]) ~ .form-control-focus:after, .form-group.form-md-line-input.has-info .form-control.focus:not([readonly]) ~ label:after,\n    .form-group.form-md-line-input.has-info .form-control.focus:not([readonly]) ~ .form-control-focus:after {\n      background: #327ad5; }\n    .form-group.form-md-line-input.has-info .form-control.edited:not([readonly]) ~ label, .form-group.form-md-line-input.has-info .form-control.form-control-static ~ label, .form-group.form-md-line-input.has-info .form-control:focus:not([readonly]) ~ label, .form-group.form-md-line-input.has-info .form-control.focus:not([readonly]) ~ label {\n      color: #327ad5; }\n    .form-group.form-md-line-input.has-info .form-control.edited:not([readonly]) ~ i, .form-group.form-md-line-input.has-info .form-control.form-control-static ~ i, .form-group.form-md-line-input.has-info .form-control:focus:not([readonly]) ~ i, .form-group.form-md-line-input.has-info .form-control.focus:not([readonly]) ~ i {\n      color: #327ad5; }\n    .form-group.form-md-line-input.has-info .form-control.edited:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-info .form-control.form-control-static ~ .help-block, .form-group.form-md-line-input.has-info .form-control:focus:not([readonly]) ~ .help-block, .form-group.form-md-line-input.has-info .form-control.focus:not([readonly]) ~ .help-block {\n      color: #327ad5; }\n  .form-group.form-md-line-input.has-info .input-group-addon {\n    color: #327ad5;\n    border-bottom: 1px solid #327ad5; }\n  .form-group.form-md-line-input.has-info label {\n    color: #327ad5; }\n\n.form-inline .form-md-line-input {\n  margin: 0;\n  padding-top: 0;\n  margin-right: 20px; }\n  .form-inline .form-md-line-input > .input-icon {\n    padding: 0; }\n\n.form-horizontal .form-group.form-md-line-input .input-icon .form-control {\n  padding-left: 33px; }\n\n.form-horizontal .form-group.form-md-line-input .input-icon > i {\n  top: 0; }\n\n.form-horizontal .form-group.form-md-line-input .input-icon.right .form-control {\n  padding-left: 0;\n  padding-right: 33px; }\n\n.form-horizontal .form-group.form-md-line-input .input-icon > .form-control-focus {\n  left: 0 !important;\n  right: 0 !important; }\n\n.form-horizontal .form-group.form-md-line-input .input-group {\n  padding-top: 0; }\n  .form-horizontal .form-group.form-md-line-input .input-group > .input-group-btn .btn {\n    margin-bottom: 0 !important; }\n  .form-horizontal .form-group.form-md-line-input .input-group > .input-group-control {\n    padding-top: 0; }\n    .form-horizontal .form-group.form-md-line-input .input-group > .input-group-control > .form-control-focus {\n      left: 0 !important;\n      right: 0 !important; }\n  .form-horizontal .form-group.form-md-line-input .input-group > .form-control-focus {\n    left: 0 !important;\n    right: 0 !important; }\n\n.md-checkbox {\n  position: relative;\n  /* handling click events */\n  /* when checkbox is checked */ }\n  .md-checkbox.md-checkbox-inline {\n    display: inline-block; }\n  .form-inline .md-checkbox.md-checkbox-inline {\n    margin-right: 20px;\n    top: 3px; }\n  .md-checkbox input[type=checkbox] {\n    visibility: hidden;\n    position: absolute; }\n  .md-checkbox label {\n    cursor: pointer;\n    padding-left: 30px; }\n  .md-checkbox label > span {\n    display: block;\n    position: absolute;\n    left: 0;\n    -webkit-transition-duration: 0.3s;\n    -moz-transition-duration: 0.3s;\n    transition-duration: 0.3s; }\n  .md-checkbox label > span.inc {\n    background: #fff;\n    left: -20px;\n    top: -20px;\n    height: 60px;\n    width: 60px;\n    opacity: 0;\n    border-radius: 50% !important;\n    -moz-border-radius: 50% !important;\n    -webkit-border-radius: 50% !important; }\n  .md-checkbox label > .box {\n    top: 0px;\n    border: 2px solid #666;\n    height: 20px;\n    width: 20px;\n    z-index: 5;\n    -webkit-transition-delay: 0.2s;\n    -moz-transition-delay: 0.2s;\n    transition-delay: 0.2s; }\n  .md-checkbox label > .check {\n    top: -4px;\n    left: 6px;\n    width: 10px;\n    height: 20px;\n    border: 2px solid #36c6d3;\n    border-top: none;\n    border-left: none;\n    opacity: 0;\n    z-index: 5;\n    -webkit-transform: rotate(180deg);\n    -moz-transform: rotate(180deg);\n    transform: rotate(180deg);\n    -webkit-transition-delay: 0.3s;\n    -moz-transition-delay: 0.3s;\n    transition-delay: 0.3s; }\n  .md-checkbox label > span.inc {\n    -webkit-animation: growCircle 0.3s ease;\n    -moz-animation: growCircle 0.3s ease;\n    animation: growCircle 0.3s ease; }\n  .md-checkbox input[type=checkbox]:checked ~ label > .box {\n    opacity: 0;\n    -webkit-transform: scale(0) rotate(-180deg);\n    -moz-transform: scale(0) rotate(-180deg);\n    transform: scale(0) rotate(-180deg); }\n  .md-checkbox input[type=checkbox]:checked ~ label > .check {\n    opacity: 1;\n    -webkit-transform: scale(1) rotate(45deg);\n    -moz-transform: scale(1) rotate(45deg);\n    transform: scale(1) rotate(45deg); }\n  .md-checkbox input[type=checkbox]:disabled ~ label,\n  .md-checkbox input[type=checkbox][disabled] ~ label {\n    cursor: not-allowed;\n    opacity: 0.7 ;\n    filter: alpha(opacity=70) ; }\n  .md-checkbox input[type=checkbox]:disabled ~ label > .box,\n  .md-checkbox input[type=checkbox][disabled] ~ label > .box {\n    cursor: not-allowed;\n    opacity: 0.7 ;\n    filter: alpha(opacity=70) ; }\n  .md-checkbox input[type=checkbox]:disabled:checked ~ label > .check,\n  .md-checkbox input[type=checkbox][disabled]:checked ~ label > .check {\n    cursor: not-allowed;\n    opacity: 0.7 ;\n    filter: alpha(opacity=70) ; }\n\n.has-error .md-checkbox label,\n.has-error.md-checkbox label {\n  color: #e73d4a; }\n\n.has-error .md-checkbox label > .box,\n.has-error.md-checkbox label > .box {\n  border-color: #e73d4a; }\n\n.has-error .md-checkbox label > .check,\n.has-error.md-checkbox label > .check {\n  border-color: #e73d4a; }\n\n.has-success .md-checkbox label,\n.has-success.md-checkbox label {\n  color: #27a4b0; }\n\n.has-success .md-checkbox label > .box,\n.has-success.md-checkbox label > .box {\n  border-color: #27a4b0; }\n\n.has-success .md-checkbox label > .check,\n.has-success.md-checkbox label > .check {\n  border-color: #27a4b0; }\n\n.has-warning .md-checkbox label,\n.has-warning.md-checkbox label {\n  color: #c29d0b; }\n\n.has-warning .md-checkbox label > .box,\n.has-warning.md-checkbox label > .box {\n  border-color: #c29d0b; }\n\n.has-warning .md-checkbox label > .check,\n.has-warning.md-checkbox label > .check {\n  border-color: #c29d0b; }\n\n.has-info .md-checkbox label,\n.has-info.md-checkbox label {\n  color: #327ad5; }\n\n.has-info .md-checkbox label > .box,\n.has-info.md-checkbox label > .box {\n  border-color: #327ad5; }\n\n.has-info .md-checkbox label > .check,\n.has-info.md-checkbox label > .check {\n  border-color: #327ad5; }\n\n.form-md-checkboxes {\n  padding-top: 5px; }\n  .form-md-checkboxes > label {\n    font-size: 14px;\n    color: #888888;\n    opacity: 1 ;\n    filter: alpha(opacity=100) ; }\n  .form-md-checkboxes.has-error label {\n    color: #ed6b75; }\n  .form-md-checkboxes.has-info label {\n    color: #659be0; }\n  .form-md-checkboxes.has-success label {\n    color: #36c6d3; }\n  .form-md-checkboxes.has-warning label {\n    color: #F1C40F; }\n\n.md-checkbox-list {\n  margin: 5px 0 5px 0; }\n  .form-horizontal .md-checkbox-list {\n    margin-top: 5px; }\n  .md-checkbox-list .md-checkbox {\n    display: block;\n    margin-bottom: 10px; }\n    .md-checkbox-list .md-checkbox:last-child {\n      margin-bottom: 0; }\n\n.md-checkbox-inline {\n  margin: 5px 0 5px 0; }\n  .form-horizontal .md-checkbox-inline {\n    margin-top: 7px; }\n  .md-checkbox-inline .md-checkbox {\n    display: inline-block;\n    margin-right: 20px; }\n    .md-checkbox-inline .md-checkbox:last-child {\n      margin-right: 0; }\n\n/* bubble animation */\n@-webkit-keyframes growCircle {\n  0%, 100% {\n    -webkit-transform: scale(0);\n    opacity: 1; }\n  70% {\n    background: #eee;\n    -webkit-transform: scale(1.25); } }\n\n@-moz-keyframes growCircle {\n  0%, 100% {\n    -moz-transform: scale(0);\n    opacity: 1; }\n  70% {\n    background: #eee;\n    -moz-transform: scale(1.25); } }\n\n@keyframes growCircle {\n  0%, 100% {\n    transform: scale(0);\n    opacity: 1; }\n  70% {\n    background: #eee;\n    transform: scale(1.25); } }\n\n.md-radio {\n  position: relative;\n  /* handling click events */\n  /* when radio is checked */ }\n  .md-radio input[type=radio] {\n    visibility: hidden;\n    position: absolute; }\n  .md-radio label {\n    cursor: pointer;\n    padding-left: 30px; }\n  .md-radio label > span {\n    display: block;\n    position: absolute;\n    left: 0;\n    -webkit-transition-duration: 0.3s;\n    -moz-transition-duration: 0.3s;\n    transition-duration: 0.3s; }\n  .md-radio label > span.inc {\n    background: #fff;\n    left: -20px;\n    top: -20px;\n    height: 60px;\n    width: 60px;\n    opacity: 0;\n    border-radius: 50% !important;\n    -moz-border-radius: 50% !important;\n    -webkit-border-radius: 50% !important; }\n  .md-radio label > .box {\n    top: 0px;\n    border: 2px solid #666;\n    height: 20px;\n    width: 20px;\n    border-radius: 50% !important;\n    -moz-border-radius: 50% !important;\n    -webkit-border-radius: 50% !important;\n    z-index: 5; }\n  .md-radio label > .check {\n    top: 5px;\n    left: 5px;\n    width: 10px;\n    height: 10px;\n    background: #36c6d3;\n    opacity: 0;\n    z-index: 6;\n    border-radius: 50% !important;\n    -moz-border-radius: 50% !important;\n    -webkit-border-radius: 50% !important;\n    -webkit-transform: scale(0);\n    -moz-transform: scale(0);\n    transform: scale(0); }\n  .md-radio label > span.inc {\n    -webkit-animation: growCircleRadio 0.3s ease;\n    -moz-animation: growCircleRadio 0.3s ease;\n    animation: growCircleRadio 0.3s ease; }\n  .md-radio input[type=radio]:checked ~ label > .check {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    -moz-transform: scale(1);\n    transform: scale(1); }\n  .md-radio input[type=radio]:disabled ~ label,\n  .md-radio input[type=radio][disabled] ~ label {\n    cursor: not-allowed;\n    opacity: 0.7 ;\n    filter: alpha(opacity=70) ; }\n  .md-radio input[type=radio]:disabled ~ label > .box,\n  .md-radio input[type=radio][disabled] ~ label > .box {\n    cursor: not-allowed;\n    opacity: 0.7 ;\n    filter: alpha(opacity=70) ; }\n  .md-radio input[type=radio]:disabled:checked ~ label > .check,\n  .md-radio input[type=radio][disabled]:checked ~ label > .check {\n    cursor: not-allowed;\n    opacity: 0.7 ;\n    filter: alpha(opacity=70) ; }\n\n.has-error .md-radio label,\n.has-error.md-radio label {\n  color: #e73d4a; }\n\n.has-error .md-radio label > .box,\n.has-error.md-radio label > .box {\n  border-color: #e73d4a; }\n\n.has-error .md-radio label > .check,\n.has-error.md-radio label > .check {\n  background: #e73d4a; }\n\n.has-success .md-radio label,\n.has-success.md-radio label {\n  color: #27a4b0; }\n\n.has-success .md-radio label > .box,\n.has-success.md-radio label > .box {\n  border-color: #27a4b0; }\n\n.has-success .md-radio label > .check,\n.has-success.md-radio label > .check {\n  background: #27a4b0; }\n\n.has-warning .md-radio label,\n.has-warning.md-radio label {\n  color: #c29d0b; }\n\n.has-warning .md-radio label > .box,\n.has-warning.md-radio label > .box {\n  border-color: #c29d0b; }\n\n.has-warning .md-radio label > .check,\n.has-warning.md-radio label > .check {\n  background: #c29d0b; }\n\n.has-info .md-radio label,\n.has-info.md-radio label {\n  color: #327ad5; }\n\n.has-info .md-radio label > .box,\n.has-info.md-radio label > .box {\n  border-color: #327ad5; }\n\n.has-info .md-radio label > .check,\n.has-info.md-radio label > .check {\n  background: #327ad5; }\n\n.form-md-radios {\n  padding-top: 5px; }\n  .form-md-radios > label {\n    font-size: 14px;\n    color: #888888;\n    opacity: 1 ;\n    filter: alpha(opacity=100) ; }\n  .form-md-radios.has-error label {\n    color: #ed6b75; }\n  .form-md-radios.has-info label {\n    color: #659be0; }\n  .form-md-radios.has-success label {\n    color: #36c6d3; }\n  .form-md-radios.has-warning label {\n    color: #F1C40F; }\n\n.md-radio-list {\n  margin: 5px 0 5px 0; }\n  .form-horizontal .md-radio-list {\n    margin-top: 5px; }\n  .md-radio-list .md-radio {\n    display: block;\n    margin-bottom: 10px; }\n\n.md-radio-inline {\n  margin: 5px 0 5px 0; }\n  .form-horizontal .md-radio-inline {\n    margin-top: 7px; }\n  .md-radio-inline .md-radio {\n    display: inline-block;\n    margin-right: 20px; }\n    .md-radio-inline .md-radio:last-child {\n      margin-right: 0; }\n\n/* bubble animation */\n@-webkit-keyframes growCircleRadio {\n  0%, 100% {\n    -webkit-transform: scale(0);\n    opacity: 1; }\n  70% {\n    background: #eee;\n    -webkit-transform: scale(1.25); } }\n\n@-moz-keyframes growCircleRadio {\n  0%, 100% {\n    -moz-transform: scale(0);\n    opacity: 1; }\n  70% {\n    background: #eee;\n    -moz-transform: scale(1.25); } }\n\n@keyframes growCircleRadio {\n  0%, 100% {\n    transform: scale(0);\n    opacity: 1; }\n  70% {\n    background: #eee;\n    transform: scale(1.25); } }\n\n/***\nGeneral typography\n***/\n/* Links */\na:hover {\n  cursor: pointer; }\n\n/* Primary Link */\n.primary-link {\n  color: #65A0D0;\n  font-weight: 600; }\n  .primary-link:hover {\n    color: #5194ca; }\n\np {\n  margin: 20px 0; }\n\nlabel {\n  font-weight: normal; }\n\n/* Headings */\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-family: \"Open Sans\", sans-serif;\n  font-weight: 300; }\n\nh1 {\n  font-size: 36px; }\n\nh2 {\n  font-size: 30px; }\n\nh3 {\n  font-size: 24px; }\n\nh4 {\n  font-size: 18px; }\n\nh5 {\n  font-size: 14px; }\n\nh6 {\n  font-size: 12px; }\n\n/* Headings helper text */\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small {\n  color: #444444; }\n\n/* Block headings */\nh1.block,\nh2.block,\nh3.block,\nh4.block,\nh5.block,\nh6.block {\n  padding-top: 10px;\n  padding-bottom: 10px; }\n\n/* Links */\na {\n  text-shadow: none;\n  color: #337ab7; }\n  a:hover {\n    color: #23527c; }\n  a:focus, a:hover, a:active {\n    outline: 0; }\n\n/* Horizontal break */\nhr {\n  margin: 20px 0;\n  border: 0;\n  border-top: 1px solid #eee;\n  border-bottom: 0; }\n\n/* Unstyled List */\n.list-unstyled li > .list-unstyled {\n  margin-left: 25px; }\n\n/* Code */\ncode {\n  border: 1px solid #e1e1e1;\n  -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);\n  -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1); }\n\n/* Disabled Navigation Link */\n.disabled-link.disable-target,\n.disabled-link .disable-target {\n  opacity: 0.6 !important;\n  filter: alpha(opacity=60) !important; }\n  .disabled-link.disable-target:hover,\n  .disabled-link .disable-target:hover {\n    cursor: not-allowed !important; }\n\n.disabled-link:hover {\n  cursor: not-allowed !important; }\n\n/***\nUtilities\n***/\n/* Rounded Element */\n.rounded-2 {\n  border-radius: 2px !important; }\n\n.rounded-3 {\n  border-radius: 3px !important; }\n\n.rounded-4 {\n  border-radius: 4px !important; }\n\n/* Circle Element */\n.circle {\n  border-radius: 25px !important; }\n\n.circle-right {\n  border-radius: 0 25px 25px 0 !important; }\n\n.circle-left {\n  border-radius: 25px 0 0 25px !important; }\n\n.circle-bottom {\n  border-radius: 0 0 25px 25px !important; }\n\n.circle-top {\n  border-radius: 25px 25px 0 0 !important; }\n\n.rounded {\n  border-radius: 50% !important; }\n\n/* General utilities */\n.display-none,\n.display-hide {\n  display: none; }\n\n.hidden {\n  display: none !important; }\n\n.primary-font {\n  font-family: \"Open Sans\", sans-serif !important; }\n\n.bold {\n  font-weight: 700 !important; }\n  .bold.btn {\n    letter-spacing: 0; }\n\n.sbold {\n  font-weight: 600 !important; }\n  .sbold.btn {\n    letter-spacing: 0; }\n\n.thin {\n  font-weight: 300 !important; }\n\n.uppercase {\n  text-transform: uppercase !important; }\n\n.fix-margin {\n  margin-left: 0px !important; }\n\n.border {\n  border: 1px solid red; }\n\n.font-hg {\n  font-size: 23px; }\n\n.font-lg {\n  font-size: 18px; }\n\n.font-md {\n  font-size: 14px; }\n\n.font-sm {\n  font-size: 13px; }\n\n.font-xs {\n  font-size: 11px; }\n\n.inline {\n  display: inline; }\n\n.inline-block {\n  display: inline-block; }\n\n.text-align-reverse {\n  text-align: right; }\n\n/* Margin and padding utilities */\n.no-space {\n  margin: 0px !important;\n  padding: 0px !important; }\n\n.no-margin {\n  margin: 0; }\n\n.margin-bottom-5 {\n  margin-bottom: 5px; }\n\n.margin-bottom-10 {\n  margin-bottom: 10px !important; }\n\n.margin-top-10 {\n  margin-top: 10px !important; }\n\n.margin-top-15 {\n  margin-top: 15px !important; }\n\n.margin-bottom-15 {\n  margin-bottom: 15px !important; }\n\n.margin-bottom-20 {\n  margin-bottom: 20px !important; }\n\n.margin-top-20 {\n  margin-top: 20px !important; }\n\n.margin-top-30 {\n  margin-top: 30px !important; }\n\n.margin-top-40 {\n  margin-top: 40px !important; }\n\n.margin-bottom-25 {\n  margin-bottom: 25px !important; }\n\n.margin-bottom-30 {\n  margin-bottom: 30px !important; }\n\n.margin-bottom-40 {\n  margin-bottom: 40px !important; }\n\n.margin-right-10 {\n  margin-right: 10px !important; }\n\n/* IE8 & IE9 mode utilities */\n.visible-ie8 {\n  display: none; }\n\n.ie8 .visible-ie8 {\n  display: inherit !important; }\n\n.visible-ie9 {\n  display: none; }\n\n.ie9 .visible-ie9 {\n  display: inherit !important; }\n\n.hidden-ie8 {\n  display: inherit; }\n\n.ie8 .hidden-ie8 {\n  display: none !important; }\n\n.hidden-ie9 {\n  display: inherit; }\n\n.ie9 .hidden-ie9 {\n  display: none !important; }\n\n/***\nResponsive Utils\n***/\n@media (max-width: 1024px) {\n  .hidden-1024 {\n    display: none; } }\n\n@media (max-width: 480px) {\n  .hidden-480 {\n    display: none; } }\n\n@media (max-width: 320px) {\n  .hidden-320 {\n    display: none; } }\n\n/***\nDemo Utils\n***/\n.scrollspy-example {\n  position: relative;\n  height: 200px;\n  margin-top: 10px;\n  overflow: auto; }\n\n.util-btn-margin-bottom-5 .btn {\n  margin-bottom: 5px !important; }\n\n.util-btn-group-margin-bottom-5 .btn-group {\n  margin-bottom: 5px !important; }\n\n.padding-tb-10 {\n  padding: 10px 0; }\n\n.padding-tb-15 {\n  padding: 10px 0; }\n\n.padding-tb-20 {\n  padding: 20px 0; }\n\n/***\nUsers\n***/\n.user-info {\n  margin-bottom: 10px !important; }\n  .user-info img {\n    float: left;\n    margin-right: 5px; }\n  .user-info .details {\n    display: inline-block; }\n  .user-info .label {\n    font-weight: 300;\n    font-size: 11px; }\n\n/***\nCustom vertical inline menu\n***/\n.ver-inline-menu {\n  padding: 0;\n  margin: 0;\n  list-style: none; }\n  .ver-inline-menu li {\n    position: relative;\n    margin-bottom: 1px; }\n    .ver-inline-menu li i {\n      width: 37px;\n      height: 37px;\n      display: inline-block;\n      color: #b9cbd5;\n      font-size: 15px;\n      padding: 12px 10px 10px 8px;\n      margin: 0 8px 0 0;\n      text-align: center;\n      background: #e0eaf0 !important; }\n    .ver-inline-menu li a {\n      font-size: 14px;\n      font-weight: 300;\n      color: #557386;\n      display: block;\n      background: #f0f6fa;\n      border-left: solid 2px #c4d5df; }\n    .ver-inline-menu li:hover a {\n      background: #e0eaf0;\n      text-decoration: none; }\n    .ver-inline-menu li:hover i {\n      color: #fff;\n      background: #c4d5df !important; }\n    .ver-inline-menu li.active a {\n      border-left: solid 2px #0c91e5; }\n    .ver-inline-menu li.active i {\n      background: #0c91e5 !important; }\n    .ver-inline-menu li.active a,\n    .ver-inline-menu li.active i {\n      color: #fff;\n      background: #169ef4;\n      text-decoration: none; }\n    .ver-inline-menu li.active a,\n    .ver-inline-menu li:hover a {\n      font-size: 14px; }\n    .ver-inline-menu li.active:after {\n      content: '';\n      display: inline-block;\n      border-bottom: 6px solid transparent;\n      border-top: 6px solid transparent;\n      border-left: 6px solid #169ef4;\n      position: absolute;\n      top: 12px;\n      right: -5px; }\n\n@media (max-width: 767px) {\n  .ver-inline-menu > li.active:after {\n    display: none; } }\n\n/***\nSeparated List\n***/\n.list-separated {\n  margin-top: 10px;\n  margin-bottom: 15px; }\n  .list-separated > div:last-child {\n    border-right: 0; }\n  @media (max-width: 767px) {\n    .list-separated {\n      /* 767px */ }\n      .list-separated > div {\n        margin-bottom: 20px; } }\n\n/***\nNumber & Chart Stats\n***/\n.number-stats {\n  margin: 10px 0; }\n  .number-stats .stat-number {\n    display: inline-block;\n    margin: 0 5px; }\n    .number-stats .stat-number .title {\n      font-size: 13px;\n      margin-bottom: 3px;\n      color: #B8C3C7; }\n    .number-stats .stat-number .number {\n      font-size: 27px;\n      line-height: 27px;\n      color: #7D8C9D; }\n  .number-stats .stat-chart {\n    display: inline-block;\n    margin: 0 5px; }\n  .number-stats > div {\n    border-right: 1px solid #f5f5f5; }\n    .number-stats > div:last-child {\n      border-right: 0; }\n  .number-stats .stat-left {\n    float: right; }\n    .number-stats .stat-left .stat-number {\n      float: right;\n      text-align: right; }\n    .number-stats .stat-left .stat-chart {\n      float: right; }\n  .number-stats .stat-right {\n    float: left !important; }\n    .number-stats .stat-right .stat-number {\n      float: left;\n      text-align: left; }\n    .number-stats .stat-right .stat-chart {\n      float: left; }\n  .number-stats .stat-number {\n    float: left;\n    text-align: left; }\n  .number-stats .stat-chart {\n    float: left; }\n\n/***\nGeneral User Record Listing\n***/\n.general-item-list > .item {\n  padding: 10px 0;\n  border-bottom: 1px solid #F1F4F7; }\n  .general-item-list > .item:last-child {\n    border-bottom: 0; }\n  .general-item-list > .item > .item-head {\n    margin-bottom: 5px; }\n    .general-item-list > .item > .item-head:before, .general-item-list > .item > .item-head:after {\n      content: \" \";\n      display: table; }\n    .general-item-list > .item > .item-head:after {\n      clear: both; }\n    .general-item-list > .item > .item-head > .item-details {\n      display: inline-block;\n      float: left; }\n      .general-item-list > .item > .item-head > .item-details > .item-pic {\n        height: 35px;\n        margin-right: 10px;\n        -webkit-border-radius: 100%;\n        -moz-border-radius: 100%;\n        -ms-border-radius: 100%;\n        -o-border-radius: 100%;\n        border-radius: 100%; }\n      .general-item-list > .item > .item-head > .item-details > .item-name {\n        display: inline-block;\n        margin-right: 10px; }\n      .general-item-list > .item > .item-head > .item-details > .item-label {\n        color: #C0C9CC; }\n    .general-item-list > .item > .item-head > .item-status {\n      color: #C0C9CC;\n      top: 10px;\n      position: relative;\n      display: inline-block;\n      float: right; }\n      .general-item-list > .item > .item-head > .item-status > .badge {\n        margin-top: -2px; }\n  .general-item-list > .item > .item-body {\n    color: #96a5aa; }\n\n/***\nFile dropzone\n***/\n.file-drop-zone {\n  border: 2px dashed #ddd;\n  padding: 30px;\n  text-align: center; }\n  .file-drop-zone.file-drop-zone-over {\n    border-color: #aaa; }\n\n/***\nFontawesome Icons\n***/\n[class^=\"fa-\"]:not(.fa-stack),\n[class^=\"glyphicon-\"],\n[class^=\"icon-\"],\n[class*=\" fa-\"]:not(.fa-stack),\n[class*=\" glyphicon-\"],\n[class*=\" icon-\"] {\n  display: inline-block;\n  *margin-right: .3em;\n  line-height: 14px;\n  -webkit-font-smoothing: antialiased; }\n\n/* Make font awesome icons fixed width */\nli [class^=\"fa-\"],\nli [class^=\"glyphicon-\"],\nli [class^=\"icon-\"],\nli [class*=\" fa-\"],\nli [class*=\" glyphicon-\"],\nli [class*=\" icon-\"] {\n  display: inline-block;\n  width: 1.25em;\n  text-align: center; }\n\nli [class^=\"glyphicon-\"],\nli [class*=\" glyphicon-\"] {\n  top: 2px; }\n\nli [class^=\"icon-\"],\nli [class*=\" icon-\"] {\n  top: 1px;\n  position: relative; }\n\nli [class^=\"fa-\"].icon-large,\nli [class^=\"glyphicon-\"].icon-large,\nli [class^=\"icon-\"].icon-large,\nli [class*=\" fa-\"].icon-large,\nli [class*=\" glyphicon-\"].icon-large,\nli [class*=\" icon-\"].icon-large {\n  /* increased font size for icon-large */\n  width: 1.5625em; }\n\n/* Icon states */\n.icon-state-default {\n  color: #bac3d0; }\n\n.icon-state-success {\n  color: #36c6d3; }\n\n.icon-state-info {\n  color: #659be0; }\n\n.icon-state-warning {\n  color: #F1C40F; }\n\n.icon-state-danger {\n  color: #ed6b75; }\n\n/***\nFont Awesome 4.x Demo\n***/\n.fa-item {\n  font-size: 14px;\n  padding: 10px 10px 10px 20px; }\n  .fa-item i {\n    font-size: 16px;\n    display: inline-block;\n    width: 20px;\n    color: #333; }\n  .fa-item:hover {\n    cursor: pointer;\n    background: #eee; }\n\n/***\nSimple Line Icons Demo\n***/\n.simplelineicons-demo .item-box {\n  display: inline-block;\n  font-size: 16px;\n  margin: 0 -0.22em 1em 0;\n  padding-left: 1em;\n  width: 100%; }\n  .simplelineicons-demo .item-box .item {\n    background-color: #fff;\n    color: #33383e;\n    border-radius: 8px;\n    display: inline-block;\n    padding: 10px;\n    width: 100%; }\n    .simplelineicons-demo .item-box .item span {\n      font-size: 22px; }\n\n@media only screen and (min-width: 768px) {\n  .simplelineicons-demo .item-box {\n    width: 33.333%; } }\n\n/*** \nGlyphicons Demo\n***/\n.glyphicons-demo ul {\n  padding-left: 0;\n  padding-bottom: 1px;\n  margin-bottom: 20px;\n  list-style: none;\n  overflow: hidden; }\n\n.bs-glyphicon-class {\n  text-align: center; }\n\n.bs-glyphicons {\n  padding-left: 0;\n  padding-bottom: 1px;\n  margin-bottom: 20px;\n  list-style: none;\n  overflow: hidden; }\n\n.glyphicons-demo ul li {\n  float: left;\n  width: 25%;\n  height: 115px;\n  padding: 10px;\n  margin: 0 -1px -1px 0;\n  font-size: 14px;\n  line-height: 1.4;\n  text-align: center;\n  border: 1px solid #ddd; }\n\n.glyphicons-demo .glyphicon {\n  display: block;\n  margin: 5px auto 10px;\n  font-size: 24px;\n  color: #444; }\n\n.glyphicons-demo ul li:hover {\n  background-color: rgba(86, 61, 124, 0.1); }\n\n@media (min-width: 768px) {\n  .glyphicons-demo ul li {\n    width: 12.5%; } }\n\n/***\nCustomized Bootstrap Alerts\n***/\n.alert {\n  border-width: 1px; }\n  .alert > p {\n    margin: 0; }\n  .alert.alert-borderless {\n    border: 0; }\n\n/***\nCustom Bootstrap Badges\n***/\n.badge {\n  font-size: 11px !important;\n  font-weight: 300;\n  text-align: center;\n  height: 18px;\n  color: #fff;\n  padding: 3px 6px 3px 6px;\n  -webkit-border-radius: 12px !important;\n  -moz-border-radius: 12px !important;\n  border-radius: 12px !important;\n  text-shadow: none !important;\n  text-align: center;\n  vertical-align: middle; }\n  .badge.badge-roundless {\n    -webkit-border-radius: 0 !important;\n    -moz-border-radius: 0 !important;\n    border-radius: 0 !important; }\n  .badge.badge-empty {\n    display: inline-block;\n    padding: 0;\n    min-width: 8px;\n    height: 8px;\n    width: 8px; }\n\n/* Badge variants */\n.badge-default {\n  background-color: #bac3d0;\n  background-image: none; }\n\n.badge-primary {\n  background-color: #337ab7;\n  background-image: none; }\n\n.badge-info {\n  background-color: #659be0;\n  background-image: none; }\n\n.badge-success {\n  background-color: #36c6d3;\n  background-image: none; }\n\n.badge-danger {\n  background-color: #ed6b75;\n  background-image: none; }\n\n.badge-warning {\n  background-color: #F1C40F;\n  background-image: none; }\n\n/* Fix badge position for navs */\n.nav.nav-pills > li > a > .badge,\n.nav.nav-stacked > li > a > .badge {\n  margin-top: -2px; }\n\n/***\nDropdown Menu Badges\n***/\n.dropdown-menu > li > a > .badge {\n  position: absolute;\n  margin-top: 1px;\n  right: 3px;\n  display: inline; }\n\n.dropdown-menu.badge-roundless {\n  -webkit-border-radius: 0 !important;\n  -moz-border-radius: 0 !important;\n  border-radius: 0 !important; }\n\n/***\nCustom buttons based on bootstrap SASS\n***/\n.btn {\n  outline: none !important;\n  box-shadow: none !important; }\n  .btn:hover {\n    transition: all 0.3s; }\n\n.btn:not(.btn-sm):not(.btn-lg) {\n  line-height: 1.44; }\n\n/***\nCustom color buttons \n***/\n.btn.white:not(.btn-outline) {\n  color: #666;\n  background-color: #ffffff;\n  border-color: #ffffff; }\n  .btn.white:not(.btn-outline):focus, .btn.white:not(.btn-outline).focus {\n    color: #666;\n    background-color: #e6e6e6;\n    border-color: #bfbfbf; }\n  .btn.white:not(.btn-outline):hover {\n    color: #666;\n    background-color: #e6e6e6;\n    border-color: #e0e0e0; }\n  .btn.white:not(.btn-outline):active, .btn.white:not(.btn-outline).active,\n  .open > .btn.white:not(.btn-outline).dropdown-toggle {\n    color: #666;\n    background-color: #e6e6e6;\n    border-color: #e0e0e0; }\n    .btn.white:not(.btn-outline):active:hover, .btn.white:not(.btn-outline):active:focus, .btn.white:not(.btn-outline):active.focus, .btn.white:not(.btn-outline).active:hover, .btn.white:not(.btn-outline).active:focus, .btn.white:not(.btn-outline).active.focus,\n    .open > .btn.white:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.white:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.white:not(.btn-outline).dropdown-toggle.focus {\n      color: #666;\n      background-color: #d4d4d4;\n      border-color: #bfbfbf; }\n  .btn.white:not(.btn-outline):active, .btn.white:not(.btn-outline).active,\n  .open > .btn.white:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.white:not(.btn-outline).disabled:hover, .btn.white:not(.btn-outline).disabled:focus, .btn.white:not(.btn-outline).disabled.focus, .btn.white:not(.btn-outline)[disabled]:hover, .btn.white:not(.btn-outline)[disabled]:focus, .btn.white:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.white:not(.btn-outline):hover,\n  fieldset[disabled] .btn.white:not(.btn-outline):focus,\n  fieldset[disabled] .btn.white:not(.btn-outline).focus {\n    background-color: #ffffff;\n    border-color: #ffffff; }\n  .btn.white:not(.btn-outline) .badge {\n    color: #ffffff;\n    background-color: #666; }\n\n.btn.btn-outline.white {\n  border-color: #ffffff;\n  color: #ffffff;\n  background: none; }\n  .btn.btn-outline.white:hover, .btn.btn-outline.white:active, .btn.btn-outline.white:active:hover, .btn.btn-outline.white:active:focus, .btn.btn-outline.white:focus, .btn.btn-outline.white.active {\n    border-color: #ffffff;\n    color: #666;\n    background-color: #ffffff; }\n\n.btn.white-stripe {\n  border-left: 4px solid #ffffff !important; }\n\n.btn.default:not(.btn-outline) {\n  color: #333;\n  background-color: #e1e5ec;\n  border-color: #e1e5ec; }\n  .btn.default:not(.btn-outline):focus, .btn.default:not(.btn-outline).focus {\n    color: #333;\n    background-color: #c2cad8;\n    border-color: #93a1bb; }\n  .btn.default:not(.btn-outline):hover {\n    color: #333;\n    background-color: #c2cad8;\n    border-color: #bcc5d4; }\n  .btn.default:not(.btn-outline):active, .btn.default:not(.btn-outline).active,\n  .open > .btn.default:not(.btn-outline).dropdown-toggle {\n    color: #333;\n    background-color: #c2cad8;\n    border-color: #bcc5d4; }\n    .btn.default:not(.btn-outline):active:hover, .btn.default:not(.btn-outline):active:focus, .btn.default:not(.btn-outline):active.focus, .btn.default:not(.btn-outline).active:hover, .btn.default:not(.btn-outline).active:focus, .btn.default:not(.btn-outline).active.focus,\n    .open > .btn.default:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.default:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.default:not(.btn-outline).dropdown-toggle.focus {\n      color: #333;\n      background-color: #acb7ca;\n      border-color: #93a1bb; }\n  .btn.default:not(.btn-outline):active, .btn.default:not(.btn-outline).active,\n  .open > .btn.default:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.default:not(.btn-outline).disabled:hover, .btn.default:not(.btn-outline).disabled:focus, .btn.default:not(.btn-outline).disabled.focus, .btn.default:not(.btn-outline)[disabled]:hover, .btn.default:not(.btn-outline)[disabled]:focus, .btn.default:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.default:not(.btn-outline):hover,\n  fieldset[disabled] .btn.default:not(.btn-outline):focus,\n  fieldset[disabled] .btn.default:not(.btn-outline).focus {\n    background-color: #e1e5ec;\n    border-color: #e1e5ec; }\n  .btn.default:not(.btn-outline) .badge {\n    color: #e1e5ec;\n    background-color: #666; }\n\n.btn.btn-outline.default {\n  border-color: #e1e5ec;\n  color: #e1e5ec;\n  background: none; }\n  .btn.btn-outline.default:hover, .btn.btn-outline.default:active, .btn.btn-outline.default:active:hover, .btn.btn-outline.default:active:focus, .btn.btn-outline.default:focus, .btn.btn-outline.default.active {\n    border-color: #e1e5ec;\n    color: #666;\n    background-color: #e1e5ec; }\n\n.btn.default-stripe {\n  border-left: 4px solid #e1e5ec !important; }\n\n.btn.dark:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #2f353b;\n  border-color: #2f353b; }\n  .btn.dark:not(.btn-outline):focus, .btn.dark:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #181c1f;\n    border-color: black; }\n  .btn.dark:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #181c1f;\n    border-color: #141619; }\n  .btn.dark:not(.btn-outline):active, .btn.dark:not(.btn-outline).active,\n  .open > .btn.dark:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #181c1f;\n    border-color: #141619; }\n    .btn.dark:not(.btn-outline):active:hover, .btn.dark:not(.btn-outline):active:focus, .btn.dark:not(.btn-outline):active.focus, .btn.dark:not(.btn-outline).active:hover, .btn.dark:not(.btn-outline).active:focus, .btn.dark:not(.btn-outline).active.focus,\n    .open > .btn.dark:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.dark:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.dark:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #090a0b;\n      border-color: black; }\n  .btn.dark:not(.btn-outline):active, .btn.dark:not(.btn-outline).active,\n  .open > .btn.dark:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.dark:not(.btn-outline).disabled:hover, .btn.dark:not(.btn-outline).disabled:focus, .btn.dark:not(.btn-outline).disabled.focus, .btn.dark:not(.btn-outline)[disabled]:hover, .btn.dark:not(.btn-outline)[disabled]:focus, .btn.dark:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.dark:not(.btn-outline):hover,\n  fieldset[disabled] .btn.dark:not(.btn-outline):focus,\n  fieldset[disabled] .btn.dark:not(.btn-outline).focus {\n    background-color: #2f353b;\n    border-color: #2f353b; }\n  .btn.dark:not(.btn-outline) .badge {\n    color: #2f353b;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.dark {\n  border-color: #2f353b;\n  color: #2f353b;\n  background: none; }\n  .btn.btn-outline.dark:hover, .btn.btn-outline.dark:active, .btn.btn-outline.dark:active:hover, .btn.btn-outline.dark:active:focus, .btn.btn-outline.dark:focus, .btn.btn-outline.dark.active {\n    border-color: #2f353b;\n    color: #FFFFFF;\n    background-color: #2f353b; }\n\n.btn.dark-stripe {\n  border-left: 4px solid #2f353b !important; }\n\n.btn.blue:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #3598dc;\n  border-color: #3598dc; }\n  .btn.blue:not(.btn-outline):focus, .btn.blue:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #217ebd;\n    border-color: #15527c; }\n  .btn.blue:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #217ebd;\n    border-color: #1f78b5; }\n  .btn.blue:not(.btn-outline):active, .btn.blue:not(.btn-outline).active,\n  .open > .btn.blue:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #217ebd;\n    border-color: #1f78b5; }\n    .btn.blue:not(.btn-outline):active:hover, .btn.blue:not(.btn-outline):active:focus, .btn.blue:not(.btn-outline):active.focus, .btn.blue:not(.btn-outline).active:hover, .btn.blue:not(.btn-outline).active:focus, .btn.blue:not(.btn-outline).active.focus,\n    .open > .btn.blue:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.blue:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.blue:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #1c699f;\n      border-color: #15527c; }\n  .btn.blue:not(.btn-outline):active, .btn.blue:not(.btn-outline).active,\n  .open > .btn.blue:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.blue:not(.btn-outline).disabled:hover, .btn.blue:not(.btn-outline).disabled:focus, .btn.blue:not(.btn-outline).disabled.focus, .btn.blue:not(.btn-outline)[disabled]:hover, .btn.blue:not(.btn-outline)[disabled]:focus, .btn.blue:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.blue:not(.btn-outline):hover,\n  fieldset[disabled] .btn.blue:not(.btn-outline):focus,\n  fieldset[disabled] .btn.blue:not(.btn-outline).focus {\n    background-color: #3598dc;\n    border-color: #3598dc; }\n  .btn.blue:not(.btn-outline) .badge {\n    color: #3598dc;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.blue {\n  border-color: #3598dc;\n  color: #3598dc;\n  background: none; }\n  .btn.btn-outline.blue:hover, .btn.btn-outline.blue:active, .btn.btn-outline.blue:active:hover, .btn.btn-outline.blue:active:focus, .btn.btn-outline.blue:focus, .btn.btn-outline.blue.active {\n    border-color: #3598dc;\n    color: #FFFFFF;\n    background-color: #3598dc; }\n\n.btn.blue-stripe {\n  border-left: 4px solid #3598dc !important; }\n\n.btn.blue-madison:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #578ebe;\n  border-color: #578ebe; }\n  .btn.blue-madison:not(.btn-outline):focus, .btn.blue-madison:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #3f74a3;\n    border-color: #2a4d6c; }\n  .btn.blue-madison:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #3f74a3;\n    border-color: #3c6f9c; }\n  .btn.blue-madison:not(.btn-outline):active, .btn.blue-madison:not(.btn-outline).active,\n  .open > .btn.blue-madison:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #3f74a3;\n    border-color: #3c6f9c; }\n    .btn.blue-madison:not(.btn-outline):active:hover, .btn.blue-madison:not(.btn-outline):active:focus, .btn.blue-madison:not(.btn-outline):active.focus, .btn.blue-madison:not(.btn-outline).active:hover, .btn.blue-madison:not(.btn-outline).active:focus, .btn.blue-madison:not(.btn-outline).active.focus,\n    .open > .btn.blue-madison:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.blue-madison:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.blue-madison:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #356289;\n      border-color: #2a4d6c; }\n  .btn.blue-madison:not(.btn-outline):active, .btn.blue-madison:not(.btn-outline).active,\n  .open > .btn.blue-madison:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.blue-madison:not(.btn-outline).disabled:hover, .btn.blue-madison:not(.btn-outline).disabled:focus, .btn.blue-madison:not(.btn-outline).disabled.focus, .btn.blue-madison:not(.btn-outline)[disabled]:hover, .btn.blue-madison:not(.btn-outline)[disabled]:focus, .btn.blue-madison:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.blue-madison:not(.btn-outline):hover,\n  fieldset[disabled] .btn.blue-madison:not(.btn-outline):focus,\n  fieldset[disabled] .btn.blue-madison:not(.btn-outline).focus {\n    background-color: #578ebe;\n    border-color: #578ebe; }\n  .btn.blue-madison:not(.btn-outline) .badge {\n    color: #578ebe;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.blue-madison {\n  border-color: #578ebe;\n  color: #578ebe;\n  background: none; }\n  .btn.btn-outline.blue-madison:hover, .btn.btn-outline.blue-madison:active, .btn.btn-outline.blue-madison:active:hover, .btn.btn-outline.blue-madison:active:focus, .btn.btn-outline.blue-madison:focus, .btn.btn-outline.blue-madison.active {\n    border-color: #578ebe;\n    color: #FFFFFF;\n    background-color: #578ebe; }\n\n.btn.blue-madison-stripe {\n  border-left: 4px solid #578ebe !important; }\n\n.btn.blue-chambray:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #2C3E50;\n  border-color: #2C3E50; }\n  .btn.blue-chambray:not(.btn-outline):focus, .btn.blue-chambray:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #1a252f;\n    border-color: black; }\n  .btn.blue-chambray:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #1a252f;\n    border-color: #161f29; }\n  .btn.blue-chambray:not(.btn-outline):active, .btn.blue-chambray:not(.btn-outline).active,\n  .open > .btn.blue-chambray:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #1a252f;\n    border-color: #161f29; }\n    .btn.blue-chambray:not(.btn-outline):active:hover, .btn.blue-chambray:not(.btn-outline):active:focus, .btn.blue-chambray:not(.btn-outline):active.focus, .btn.blue-chambray:not(.btn-outline).active:hover, .btn.blue-chambray:not(.btn-outline).active:focus, .btn.blue-chambray:not(.btn-outline).active.focus,\n    .open > .btn.blue-chambray:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.blue-chambray:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.blue-chambray:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #0d1318;\n      border-color: black; }\n  .btn.blue-chambray:not(.btn-outline):active, .btn.blue-chambray:not(.btn-outline).active,\n  .open > .btn.blue-chambray:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.blue-chambray:not(.btn-outline).disabled:hover, .btn.blue-chambray:not(.btn-outline).disabled:focus, .btn.blue-chambray:not(.btn-outline).disabled.focus, .btn.blue-chambray:not(.btn-outline)[disabled]:hover, .btn.blue-chambray:not(.btn-outline)[disabled]:focus, .btn.blue-chambray:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.blue-chambray:not(.btn-outline):hover,\n  fieldset[disabled] .btn.blue-chambray:not(.btn-outline):focus,\n  fieldset[disabled] .btn.blue-chambray:not(.btn-outline).focus {\n    background-color: #2C3E50;\n    border-color: #2C3E50; }\n  .btn.blue-chambray:not(.btn-outline) .badge {\n    color: #2C3E50;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.blue-chambray {\n  border-color: #2C3E50;\n  color: #2C3E50;\n  background: none; }\n  .btn.btn-outline.blue-chambray:hover, .btn.btn-outline.blue-chambray:active, .btn.btn-outline.blue-chambray:active:hover, .btn.btn-outline.blue-chambray:active:focus, .btn.btn-outline.blue-chambray:focus, .btn.btn-outline.blue-chambray.active {\n    border-color: #2C3E50;\n    color: #FFFFFF;\n    background-color: #2C3E50; }\n\n.btn.blue-chambray-stripe {\n  border-left: 4px solid #2C3E50 !important; }\n\n.btn.blue-ebonyclay:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #22313F;\n  border-color: #22313F; }\n  .btn.blue-ebonyclay:not(.btn-outline):focus, .btn.blue-ebonyclay:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #10171e;\n    border-color: black; }\n  .btn.blue-ebonyclay:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #10171e;\n    border-color: #0d1217; }\n  .btn.blue-ebonyclay:not(.btn-outline):active, .btn.blue-ebonyclay:not(.btn-outline).active,\n  .open > .btn.blue-ebonyclay:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #10171e;\n    border-color: #0d1217; }\n    .btn.blue-ebonyclay:not(.btn-outline):active:hover, .btn.blue-ebonyclay:not(.btn-outline):active:focus, .btn.blue-ebonyclay:not(.btn-outline):active.focus, .btn.blue-ebonyclay:not(.btn-outline).active:hover, .btn.blue-ebonyclay:not(.btn-outline).active:focus, .btn.blue-ebonyclay:not(.btn-outline).active.focus,\n    .open > .btn.blue-ebonyclay:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.blue-ebonyclay:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.blue-ebonyclay:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #040507;\n      border-color: black; }\n  .btn.blue-ebonyclay:not(.btn-outline):active, .btn.blue-ebonyclay:not(.btn-outline).active,\n  .open > .btn.blue-ebonyclay:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.blue-ebonyclay:not(.btn-outline).disabled:hover, .btn.blue-ebonyclay:not(.btn-outline).disabled:focus, .btn.blue-ebonyclay:not(.btn-outline).disabled.focus, .btn.blue-ebonyclay:not(.btn-outline)[disabled]:hover, .btn.blue-ebonyclay:not(.btn-outline)[disabled]:focus, .btn.blue-ebonyclay:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.blue-ebonyclay:not(.btn-outline):hover,\n  fieldset[disabled] .btn.blue-ebonyclay:not(.btn-outline):focus,\n  fieldset[disabled] .btn.blue-ebonyclay:not(.btn-outline).focus {\n    background-color: #22313F;\n    border-color: #22313F; }\n  .btn.blue-ebonyclay:not(.btn-outline) .badge {\n    color: #22313F;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.blue-ebonyclay {\n  border-color: #22313F;\n  color: #22313F;\n  background: none; }\n  .btn.btn-outline.blue-ebonyclay:hover, .btn.btn-outline.blue-ebonyclay:active, .btn.btn-outline.blue-ebonyclay:active:hover, .btn.btn-outline.blue-ebonyclay:active:focus, .btn.btn-outline.blue-ebonyclay:focus, .btn.btn-outline.blue-ebonyclay.active {\n    border-color: #22313F;\n    color: #FFFFFF;\n    background-color: #22313F; }\n\n.btn.blue-ebonyclay-stripe {\n  border-left: 4px solid #22313F !important; }\n\n.btn.blue-hoki:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #67809F;\n  border-color: #67809F; }\n  .btn.blue-hoki:not(.btn-outline):focus, .btn.blue-hoki:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #526781;\n    border-color: #344252; }\n  .btn.blue-hoki:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #526781;\n    border-color: #4e627b; }\n  .btn.blue-hoki:not(.btn-outline):active, .btn.blue-hoki:not(.btn-outline).active,\n  .open > .btn.blue-hoki:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #526781;\n    border-color: #4e627b; }\n    .btn.blue-hoki:not(.btn-outline):active:hover, .btn.blue-hoki:not(.btn-outline):active:focus, .btn.blue-hoki:not(.btn-outline):active.focus, .btn.blue-hoki:not(.btn-outline).active:hover, .btn.blue-hoki:not(.btn-outline).active:focus, .btn.blue-hoki:not(.btn-outline).active.focus,\n    .open > .btn.blue-hoki:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.blue-hoki:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.blue-hoki:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #44566b;\n      border-color: #344252; }\n  .btn.blue-hoki:not(.btn-outline):active, .btn.blue-hoki:not(.btn-outline).active,\n  .open > .btn.blue-hoki:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.blue-hoki:not(.btn-outline).disabled:hover, .btn.blue-hoki:not(.btn-outline).disabled:focus, .btn.blue-hoki:not(.btn-outline).disabled.focus, .btn.blue-hoki:not(.btn-outline)[disabled]:hover, .btn.blue-hoki:not(.btn-outline)[disabled]:focus, .btn.blue-hoki:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.blue-hoki:not(.btn-outline):hover,\n  fieldset[disabled] .btn.blue-hoki:not(.btn-outline):focus,\n  fieldset[disabled] .btn.blue-hoki:not(.btn-outline).focus {\n    background-color: #67809F;\n    border-color: #67809F; }\n  .btn.blue-hoki:not(.btn-outline) .badge {\n    color: #67809F;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.blue-hoki {\n  border-color: #67809F;\n  color: #67809F;\n  background: none; }\n  .btn.btn-outline.blue-hoki:hover, .btn.btn-outline.blue-hoki:active, .btn.btn-outline.blue-hoki:active:hover, .btn.btn-outline.blue-hoki:active:focus, .btn.btn-outline.blue-hoki:focus, .btn.btn-outline.blue-hoki.active {\n    border-color: #67809F;\n    color: #FFFFFF;\n    background-color: #67809F; }\n\n.btn.blue-hoki-stripe {\n  border-left: 4px solid #67809F !important; }\n\n.btn.blue-steel:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #4B77BE;\n  border-color: #4B77BE; }\n  .btn.blue-steel:not(.btn-outline):focus, .btn.blue-steel:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #395f9d;\n    border-color: #243d65; }\n  .btn.blue-steel:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #395f9d;\n    border-color: #365b96; }\n  .btn.blue-steel:not(.btn-outline):active, .btn.blue-steel:not(.btn-outline).active,\n  .open > .btn.blue-steel:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #395f9d;\n    border-color: #365b96; }\n    .btn.blue-steel:not(.btn-outline):active:hover, .btn.blue-steel:not(.btn-outline):active:focus, .btn.blue-steel:not(.btn-outline):active.focus, .btn.blue-steel:not(.btn-outline).active:hover, .btn.blue-steel:not(.btn-outline).active:focus, .btn.blue-steel:not(.btn-outline).active.focus,\n    .open > .btn.blue-steel:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.blue-steel:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.blue-steel:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #2f4f83;\n      border-color: #243d65; }\n  .btn.blue-steel:not(.btn-outline):active, .btn.blue-steel:not(.btn-outline).active,\n  .open > .btn.blue-steel:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.blue-steel:not(.btn-outline).disabled:hover, .btn.blue-steel:not(.btn-outline).disabled:focus, .btn.blue-steel:not(.btn-outline).disabled.focus, .btn.blue-steel:not(.btn-outline)[disabled]:hover, .btn.blue-steel:not(.btn-outline)[disabled]:focus, .btn.blue-steel:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.blue-steel:not(.btn-outline):hover,\n  fieldset[disabled] .btn.blue-steel:not(.btn-outline):focus,\n  fieldset[disabled] .btn.blue-steel:not(.btn-outline).focus {\n    background-color: #4B77BE;\n    border-color: #4B77BE; }\n  .btn.blue-steel:not(.btn-outline) .badge {\n    color: #4B77BE;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.blue-steel {\n  border-color: #4B77BE;\n  color: #4B77BE;\n  background: none; }\n  .btn.btn-outline.blue-steel:hover, .btn.btn-outline.blue-steel:active, .btn.btn-outline.blue-steel:active:hover, .btn.btn-outline.blue-steel:active:focus, .btn.btn-outline.blue-steel:focus, .btn.btn-outline.blue-steel.active {\n    border-color: #4B77BE;\n    color: #FFFFFF;\n    background-color: #4B77BE; }\n\n.btn.blue-steel-stripe {\n  border-left: 4px solid #4B77BE !important; }\n\n.btn.blue-soft:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #4c87b9;\n  border-color: #4c87b9; }\n  .btn.blue-soft:not(.btn-outline):focus, .btn.blue-soft:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #3b6d97;\n    border-color: #264560; }\n  .btn.blue-soft:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #3b6d97;\n    border-color: #386890; }\n  .btn.blue-soft:not(.btn-outline):active, .btn.blue-soft:not(.btn-outline).active,\n  .open > .btn.blue-soft:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #3b6d97;\n    border-color: #386890; }\n    .btn.blue-soft:not(.btn-outline):active:hover, .btn.blue-soft:not(.btn-outline):active:focus, .btn.blue-soft:not(.btn-outline):active.focus, .btn.blue-soft:not(.btn-outline).active:hover, .btn.blue-soft:not(.btn-outline).active:focus, .btn.blue-soft:not(.btn-outline).active.focus,\n    .open > .btn.blue-soft:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.blue-soft:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.blue-soft:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #315a7d;\n      border-color: #264560; }\n  .btn.blue-soft:not(.btn-outline):active, .btn.blue-soft:not(.btn-outline).active,\n  .open > .btn.blue-soft:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.blue-soft:not(.btn-outline).disabled:hover, .btn.blue-soft:not(.btn-outline).disabled:focus, .btn.blue-soft:not(.btn-outline).disabled.focus, .btn.blue-soft:not(.btn-outline)[disabled]:hover, .btn.blue-soft:not(.btn-outline)[disabled]:focus, .btn.blue-soft:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.blue-soft:not(.btn-outline):hover,\n  fieldset[disabled] .btn.blue-soft:not(.btn-outline):focus,\n  fieldset[disabled] .btn.blue-soft:not(.btn-outline).focus {\n    background-color: #4c87b9;\n    border-color: #4c87b9; }\n  .btn.blue-soft:not(.btn-outline) .badge {\n    color: #4c87b9;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.blue-soft {\n  border-color: #4c87b9;\n  color: #4c87b9;\n  background: none; }\n  .btn.btn-outline.blue-soft:hover, .btn.btn-outline.blue-soft:active, .btn.btn-outline.blue-soft:active:hover, .btn.btn-outline.blue-soft:active:focus, .btn.btn-outline.blue-soft:focus, .btn.btn-outline.blue-soft.active {\n    border-color: #4c87b9;\n    color: #FFFFFF;\n    background-color: #4c87b9; }\n\n.btn.blue-soft-stripe {\n  border-left: 4px solid #4c87b9 !important; }\n\n.btn.blue-dark:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #5e738b;\n  border-color: #5e738b; }\n  .btn.blue-dark:not(.btn-outline):focus, .btn.blue-dark:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #495a6d;\n    border-color: #2b343f; }\n  .btn.blue-dark:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #495a6d;\n    border-color: #455566; }\n  .btn.blue-dark:not(.btn-outline):active, .btn.blue-dark:not(.btn-outline).active,\n  .open > .btn.blue-dark:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #495a6d;\n    border-color: #455566; }\n    .btn.blue-dark:not(.btn-outline):active:hover, .btn.blue-dark:not(.btn-outline):active:focus, .btn.blue-dark:not(.btn-outline):active.focus, .btn.blue-dark:not(.btn-outline).active:hover, .btn.blue-dark:not(.btn-outline).active:focus, .btn.blue-dark:not(.btn-outline).active.focus,\n    .open > .btn.blue-dark:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.blue-dark:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.blue-dark:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #3b4857;\n      border-color: #2b343f; }\n  .btn.blue-dark:not(.btn-outline):active, .btn.blue-dark:not(.btn-outline).active,\n  .open > .btn.blue-dark:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.blue-dark:not(.btn-outline).disabled:hover, .btn.blue-dark:not(.btn-outline).disabled:focus, .btn.blue-dark:not(.btn-outline).disabled.focus, .btn.blue-dark:not(.btn-outline)[disabled]:hover, .btn.blue-dark:not(.btn-outline)[disabled]:focus, .btn.blue-dark:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.blue-dark:not(.btn-outline):hover,\n  fieldset[disabled] .btn.blue-dark:not(.btn-outline):focus,\n  fieldset[disabled] .btn.blue-dark:not(.btn-outline).focus {\n    background-color: #5e738b;\n    border-color: #5e738b; }\n  .btn.blue-dark:not(.btn-outline) .badge {\n    color: #5e738b;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.blue-dark {\n  border-color: #5e738b;\n  color: #5e738b;\n  background: none; }\n  .btn.btn-outline.blue-dark:hover, .btn.btn-outline.blue-dark:active, .btn.btn-outline.blue-dark:active:hover, .btn.btn-outline.blue-dark:active:focus, .btn.btn-outline.blue-dark:focus, .btn.btn-outline.blue-dark.active {\n    border-color: #5e738b;\n    color: #FFFFFF;\n    background-color: #5e738b; }\n\n.btn.blue-dark-stripe {\n  border-left: 4px solid #5e738b !important; }\n\n.btn.blue-sharp:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #5C9BD1;\n  border-color: #5C9BD1; }\n  .btn.blue-sharp:not(.btn-outline):focus, .btn.blue-sharp:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #3782c3;\n    border-color: #265a87; }\n  .btn.blue-sharp:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #3782c3;\n    border-color: #357dbb; }\n  .btn.blue-sharp:not(.btn-outline):active, .btn.blue-sharp:not(.btn-outline).active,\n  .open > .btn.blue-sharp:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #3782c3;\n    border-color: #357dbb; }\n    .btn.blue-sharp:not(.btn-outline):active:hover, .btn.blue-sharp:not(.btn-outline):active:focus, .btn.blue-sharp:not(.btn-outline):active.focus, .btn.blue-sharp:not(.btn-outline).active:hover, .btn.blue-sharp:not(.btn-outline).active:focus, .btn.blue-sharp:not(.btn-outline).active.focus,\n    .open > .btn.blue-sharp:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.blue-sharp:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.blue-sharp:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #2f70a7;\n      border-color: #265a87; }\n  .btn.blue-sharp:not(.btn-outline):active, .btn.blue-sharp:not(.btn-outline).active,\n  .open > .btn.blue-sharp:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.blue-sharp:not(.btn-outline).disabled:hover, .btn.blue-sharp:not(.btn-outline).disabled:focus, .btn.blue-sharp:not(.btn-outline).disabled.focus, .btn.blue-sharp:not(.btn-outline)[disabled]:hover, .btn.blue-sharp:not(.btn-outline)[disabled]:focus, .btn.blue-sharp:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.blue-sharp:not(.btn-outline):hover,\n  fieldset[disabled] .btn.blue-sharp:not(.btn-outline):focus,\n  fieldset[disabled] .btn.blue-sharp:not(.btn-outline).focus {\n    background-color: #5C9BD1;\n    border-color: #5C9BD1; }\n  .btn.blue-sharp:not(.btn-outline) .badge {\n    color: #5C9BD1;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.blue-sharp {\n  border-color: #5C9BD1;\n  color: #5C9BD1;\n  background: none; }\n  .btn.btn-outline.blue-sharp:hover, .btn.btn-outline.blue-sharp:active, .btn.btn-outline.blue-sharp:active:hover, .btn.btn-outline.blue-sharp:active:focus, .btn.btn-outline.blue-sharp:focus, .btn.btn-outline.blue-sharp.active {\n    border-color: #5C9BD1;\n    color: #FFFFFF;\n    background-color: #5C9BD1; }\n\n.btn.blue-sharp-stripe {\n  border-left: 4px solid #5C9BD1 !important; }\n\n.btn.green:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #32c5d2;\n  border-color: #32c5d2; }\n  .btn.green:not(.btn-outline):focus, .btn.green:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #26a1ab;\n    border-color: #18666d; }\n  .btn.green:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #26a1ab;\n    border-color: #2499a3; }\n  .btn.green:not(.btn-outline):active, .btn.green:not(.btn-outline).active,\n  .open > .btn.green:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #26a1ab;\n    border-color: #2499a3; }\n    .btn.green:not(.btn-outline):active:hover, .btn.green:not(.btn-outline):active:focus, .btn.green:not(.btn-outline):active.focus, .btn.green:not(.btn-outline).active:hover, .btn.green:not(.btn-outline).active:focus, .btn.green:not(.btn-outline).active.focus,\n    .open > .btn.green:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.green:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.green:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #1f858e;\n      border-color: #18666d; }\n  .btn.green:not(.btn-outline):active, .btn.green:not(.btn-outline).active,\n  .open > .btn.green:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.green:not(.btn-outline).disabled:hover, .btn.green:not(.btn-outline).disabled:focus, .btn.green:not(.btn-outline).disabled.focus, .btn.green:not(.btn-outline)[disabled]:hover, .btn.green:not(.btn-outline)[disabled]:focus, .btn.green:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.green:not(.btn-outline):hover,\n  fieldset[disabled] .btn.green:not(.btn-outline):focus,\n  fieldset[disabled] .btn.green:not(.btn-outline).focus {\n    background-color: #32c5d2;\n    border-color: #32c5d2; }\n  .btn.green:not(.btn-outline) .badge {\n    color: #32c5d2;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.green {\n  border-color: #32c5d2;\n  color: #32c5d2;\n  background: none; }\n  .btn.btn-outline.green:hover, .btn.btn-outline.green:active, .btn.btn-outline.green:active:hover, .btn.btn-outline.green:active:focus, .btn.btn-outline.green:focus, .btn.btn-outline.green.active {\n    border-color: #32c5d2;\n    color: #FFFFFF;\n    background-color: #32c5d2; }\n\n.btn.green-stripe {\n  border-left: 4px solid #32c5d2 !important; }\n\n.btn.green-meadow:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #1BBC9B;\n  border-color: #1BBC9B; }\n  .btn.green-meadow:not(.btn-outline):focus, .btn.green-meadow:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #158f76;\n    border-color: #0b4d3f; }\n  .btn.green-meadow:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #158f76;\n    border-color: #13866f; }\n  .btn.green-meadow:not(.btn-outline):active, .btn.green-meadow:not(.btn-outline).active,\n  .open > .btn.green-meadow:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #158f76;\n    border-color: #13866f; }\n    .btn.green-meadow:not(.btn-outline):active:hover, .btn.green-meadow:not(.btn-outline):active:focus, .btn.green-meadow:not(.btn-outline):active.focus, .btn.green-meadow:not(.btn-outline).active:hover, .btn.green-meadow:not(.btn-outline).active:focus, .btn.green-meadow:not(.btn-outline).active.focus,\n    .open > .btn.green-meadow:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.green-meadow:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.green-meadow:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #10705c;\n      border-color: #0b4d3f; }\n  .btn.green-meadow:not(.btn-outline):active, .btn.green-meadow:not(.btn-outline).active,\n  .open > .btn.green-meadow:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.green-meadow:not(.btn-outline).disabled:hover, .btn.green-meadow:not(.btn-outline).disabled:focus, .btn.green-meadow:not(.btn-outline).disabled.focus, .btn.green-meadow:not(.btn-outline)[disabled]:hover, .btn.green-meadow:not(.btn-outline)[disabled]:focus, .btn.green-meadow:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.green-meadow:not(.btn-outline):hover,\n  fieldset[disabled] .btn.green-meadow:not(.btn-outline):focus,\n  fieldset[disabled] .btn.green-meadow:not(.btn-outline).focus {\n    background-color: #1BBC9B;\n    border-color: #1BBC9B; }\n  .btn.green-meadow:not(.btn-outline) .badge {\n    color: #1BBC9B;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.green-meadow {\n  border-color: #1BBC9B;\n  color: #1BBC9B;\n  background: none; }\n  .btn.btn-outline.green-meadow:hover, .btn.btn-outline.green-meadow:active, .btn.btn-outline.green-meadow:active:hover, .btn.btn-outline.green-meadow:active:focus, .btn.btn-outline.green-meadow:focus, .btn.btn-outline.green-meadow.active {\n    border-color: #1BBC9B;\n    color: #FFFFFF;\n    background-color: #1BBC9B; }\n\n.btn.green-meadow-stripe {\n  border-left: 4px solid #1BBC9B !important; }\n\n.btn.green-seagreen:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #1BA39C;\n  border-color: #1BA39C; }\n  .btn.green-seagreen:not(.btn-outline):focus, .btn.green-seagreen:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #147772;\n    border-color: #093633; }\n  .btn.green-seagreen:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #147772;\n    border-color: #126e6a; }\n  .btn.green-seagreen:not(.btn-outline):active, .btn.green-seagreen:not(.btn-outline).active,\n  .open > .btn.green-seagreen:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #147772;\n    border-color: #126e6a; }\n    .btn.green-seagreen:not(.btn-outline):active:hover, .btn.green-seagreen:not(.btn-outline):active:focus, .btn.green-seagreen:not(.btn-outline):active.focus, .btn.green-seagreen:not(.btn-outline).active:hover, .btn.green-seagreen:not(.btn-outline).active:focus, .btn.green-seagreen:not(.btn-outline).active.focus,\n    .open > .btn.green-seagreen:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.green-seagreen:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.green-seagreen:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #0f5955;\n      border-color: #093633; }\n  .btn.green-seagreen:not(.btn-outline):active, .btn.green-seagreen:not(.btn-outline).active,\n  .open > .btn.green-seagreen:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.green-seagreen:not(.btn-outline).disabled:hover, .btn.green-seagreen:not(.btn-outline).disabled:focus, .btn.green-seagreen:not(.btn-outline).disabled.focus, .btn.green-seagreen:not(.btn-outline)[disabled]:hover, .btn.green-seagreen:not(.btn-outline)[disabled]:focus, .btn.green-seagreen:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.green-seagreen:not(.btn-outline):hover,\n  fieldset[disabled] .btn.green-seagreen:not(.btn-outline):focus,\n  fieldset[disabled] .btn.green-seagreen:not(.btn-outline).focus {\n    background-color: #1BA39C;\n    border-color: #1BA39C; }\n  .btn.green-seagreen:not(.btn-outline) .badge {\n    color: #1BA39C;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.green-seagreen {\n  border-color: #1BA39C;\n  color: #1BA39C;\n  background: none; }\n  .btn.btn-outline.green-seagreen:hover, .btn.btn-outline.green-seagreen:active, .btn.btn-outline.green-seagreen:active:hover, .btn.btn-outline.green-seagreen:active:focus, .btn.btn-outline.green-seagreen:focus, .btn.btn-outline.green-seagreen.active {\n    border-color: #1BA39C;\n    color: #FFFFFF;\n    background-color: #1BA39C; }\n\n.btn.green-seagreen-stripe {\n  border-left: 4px solid #1BA39C !important; }\n\n.btn.green-turquoise:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #36D7B7;\n  border-color: #36D7B7; }\n  .btn.green-turquoise:not(.btn-outline):focus, .btn.green-turquoise:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #24b699;\n    border-color: #177663; }\n  .btn.green-turquoise:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #24b699;\n    border-color: #22ad92; }\n  .btn.green-turquoise:not(.btn-outline):active, .btn.green-turquoise:not(.btn-outline).active,\n  .open > .btn.green-turquoise:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #24b699;\n    border-color: #22ad92; }\n    .btn.green-turquoise:not(.btn-outline):active:hover, .btn.green-turquoise:not(.btn-outline):active:focus, .btn.green-turquoise:not(.btn-outline):active.focus, .btn.green-turquoise:not(.btn-outline).active:hover, .btn.green-turquoise:not(.btn-outline).active:focus, .btn.green-turquoise:not(.btn-outline).active.focus,\n    .open > .btn.green-turquoise:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.green-turquoise:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.green-turquoise:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #1e9880;\n      border-color: #177663; }\n  .btn.green-turquoise:not(.btn-outline):active, .btn.green-turquoise:not(.btn-outline).active,\n  .open > .btn.green-turquoise:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.green-turquoise:not(.btn-outline).disabled:hover, .btn.green-turquoise:not(.btn-outline).disabled:focus, .btn.green-turquoise:not(.btn-outline).disabled.focus, .btn.green-turquoise:not(.btn-outline)[disabled]:hover, .btn.green-turquoise:not(.btn-outline)[disabled]:focus, .btn.green-turquoise:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.green-turquoise:not(.btn-outline):hover,\n  fieldset[disabled] .btn.green-turquoise:not(.btn-outline):focus,\n  fieldset[disabled] .btn.green-turquoise:not(.btn-outline).focus {\n    background-color: #36D7B7;\n    border-color: #36D7B7; }\n  .btn.green-turquoise:not(.btn-outline) .badge {\n    color: #36D7B7;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.green-turquoise {\n  border-color: #36D7B7;\n  color: #36D7B7;\n  background: none; }\n  .btn.btn-outline.green-turquoise:hover, .btn.btn-outline.green-turquoise:active, .btn.btn-outline.green-turquoise:active:hover, .btn.btn-outline.green-turquoise:active:focus, .btn.btn-outline.green-turquoise:focus, .btn.btn-outline.green-turquoise.active {\n    border-color: #36D7B7;\n    color: #FFFFFF;\n    background-color: #36D7B7; }\n\n.btn.green-turquoise-stripe {\n  border-left: 4px solid #36D7B7 !important; }\n\n.btn.green-haze:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #44b6ae;\n  border-color: #44b6ae; }\n  .btn.green-haze:not(.btn-outline):focus, .btn.green-haze:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #36918b;\n    border-color: #215955; }\n  .btn.green-haze:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #36918b;\n    border-color: #338983; }\n  .btn.green-haze:not(.btn-outline):active, .btn.green-haze:not(.btn-outline).active,\n  .open > .btn.green-haze:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #36918b;\n    border-color: #338983; }\n    .btn.green-haze:not(.btn-outline):active:hover, .btn.green-haze:not(.btn-outline):active:focus, .btn.green-haze:not(.btn-outline):active.focus, .btn.green-haze:not(.btn-outline).active:hover, .btn.green-haze:not(.btn-outline).active:focus, .btn.green-haze:not(.btn-outline).active.focus,\n    .open > .btn.green-haze:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.green-haze:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.green-haze:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #2c7772;\n      border-color: #215955; }\n  .btn.green-haze:not(.btn-outline):active, .btn.green-haze:not(.btn-outline).active,\n  .open > .btn.green-haze:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.green-haze:not(.btn-outline).disabled:hover, .btn.green-haze:not(.btn-outline).disabled:focus, .btn.green-haze:not(.btn-outline).disabled.focus, .btn.green-haze:not(.btn-outline)[disabled]:hover, .btn.green-haze:not(.btn-outline)[disabled]:focus, .btn.green-haze:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.green-haze:not(.btn-outline):hover,\n  fieldset[disabled] .btn.green-haze:not(.btn-outline):focus,\n  fieldset[disabled] .btn.green-haze:not(.btn-outline).focus {\n    background-color: #44b6ae;\n    border-color: #44b6ae; }\n  .btn.green-haze:not(.btn-outline) .badge {\n    color: #44b6ae;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.green-haze {\n  border-color: #44b6ae;\n  color: #44b6ae;\n  background: none; }\n  .btn.btn-outline.green-haze:hover, .btn.btn-outline.green-haze:active, .btn.btn-outline.green-haze:active:hover, .btn.btn-outline.green-haze:active:focus, .btn.btn-outline.green-haze:focus, .btn.btn-outline.green-haze.active {\n    border-color: #44b6ae;\n    color: #FFFFFF;\n    background-color: #44b6ae; }\n\n.btn.green-haze-stripe {\n  border-left: 4px solid #44b6ae !important; }\n\n.btn.green-jungle:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #26C281;\n  border-color: #26C281; }\n  .btn.green-jungle:not(.btn-outline):focus, .btn.green-jungle:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #1e9765;\n    border-color: #11573a; }\n  .btn.green-jungle:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #1e9765;\n    border-color: #1c8f5f; }\n  .btn.green-jungle:not(.btn-outline):active, .btn.green-jungle:not(.btn-outline).active,\n  .open > .btn.green-jungle:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #1e9765;\n    border-color: #1c8f5f; }\n    .btn.green-jungle:not(.btn-outline):active:hover, .btn.green-jungle:not(.btn-outline):active:focus, .btn.green-jungle:not(.btn-outline):active.focus, .btn.green-jungle:not(.btn-outline).active:hover, .btn.green-jungle:not(.btn-outline).active:focus, .btn.green-jungle:not(.btn-outline).active.focus,\n    .open > .btn.green-jungle:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.green-jungle:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.green-jungle:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #187a51;\n      border-color: #11573a; }\n  .btn.green-jungle:not(.btn-outline):active, .btn.green-jungle:not(.btn-outline).active,\n  .open > .btn.green-jungle:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.green-jungle:not(.btn-outline).disabled:hover, .btn.green-jungle:not(.btn-outline).disabled:focus, .btn.green-jungle:not(.btn-outline).disabled.focus, .btn.green-jungle:not(.btn-outline)[disabled]:hover, .btn.green-jungle:not(.btn-outline)[disabled]:focus, .btn.green-jungle:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.green-jungle:not(.btn-outline):hover,\n  fieldset[disabled] .btn.green-jungle:not(.btn-outline):focus,\n  fieldset[disabled] .btn.green-jungle:not(.btn-outline).focus {\n    background-color: #26C281;\n    border-color: #26C281; }\n  .btn.green-jungle:not(.btn-outline) .badge {\n    color: #26C281;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.green-jungle {\n  border-color: #26C281;\n  color: #26C281;\n  background: none; }\n  .btn.btn-outline.green-jungle:hover, .btn.btn-outline.green-jungle:active, .btn.btn-outline.green-jungle:active:hover, .btn.btn-outline.green-jungle:active:focus, .btn.btn-outline.green-jungle:focus, .btn.btn-outline.green-jungle.active {\n    border-color: #26C281;\n    color: #FFFFFF;\n    background-color: #26C281; }\n\n.btn.green-jungle-stripe {\n  border-left: 4px solid #26C281 !important; }\n\n.btn.green-soft:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #3faba4;\n  border-color: #3faba4; }\n  .btn.green-soft:not(.btn-outline):focus, .btn.green-soft:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #318680;\n    border-color: #1d4e4b; }\n  .btn.green-soft:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #318680;\n    border-color: #2f7e79; }\n  .btn.green-soft:not(.btn-outline):active, .btn.green-soft:not(.btn-outline).active,\n  .open > .btn.green-soft:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #318680;\n    border-color: #2f7e79; }\n    .btn.green-soft:not(.btn-outline):active:hover, .btn.green-soft:not(.btn-outline):active:focus, .btn.green-soft:not(.btn-outline):active.focus, .btn.green-soft:not(.btn-outline).active:hover, .btn.green-soft:not(.btn-outline).active:focus, .btn.green-soft:not(.btn-outline).active.focus,\n    .open > .btn.green-soft:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.green-soft:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.green-soft:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #286c67;\n      border-color: #1d4e4b; }\n  .btn.green-soft:not(.btn-outline):active, .btn.green-soft:not(.btn-outline).active,\n  .open > .btn.green-soft:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.green-soft:not(.btn-outline).disabled:hover, .btn.green-soft:not(.btn-outline).disabled:focus, .btn.green-soft:not(.btn-outline).disabled.focus, .btn.green-soft:not(.btn-outline)[disabled]:hover, .btn.green-soft:not(.btn-outline)[disabled]:focus, .btn.green-soft:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.green-soft:not(.btn-outline):hover,\n  fieldset[disabled] .btn.green-soft:not(.btn-outline):focus,\n  fieldset[disabled] .btn.green-soft:not(.btn-outline).focus {\n    background-color: #3faba4;\n    border-color: #3faba4; }\n  .btn.green-soft:not(.btn-outline) .badge {\n    color: #3faba4;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.green-soft {\n  border-color: #3faba4;\n  color: #3faba4;\n  background: none; }\n  .btn.btn-outline.green-soft:hover, .btn.btn-outline.green-soft:active, .btn.btn-outline.green-soft:active:hover, .btn.btn-outline.green-soft:active:focus, .btn.btn-outline.green-soft:focus, .btn.btn-outline.green-soft.active {\n    border-color: #3faba4;\n    color: #FFFFFF;\n    background-color: #3faba4; }\n\n.btn.green-soft-stripe {\n  border-left: 4px solid #3faba4 !important; }\n\n.btn.green-dark:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #4DB3A2;\n  border-color: #4DB3A2; }\n  .btn.green-dark:not(.btn-outline):focus, .btn.green-dark:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #3d9082;\n    border-color: #265a51; }\n  .btn.green-dark:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #3d9082;\n    border-color: #3a897b; }\n  .btn.green-dark:not(.btn-outline):active, .btn.green-dark:not(.btn-outline).active,\n  .open > .btn.green-dark:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #3d9082;\n    border-color: #3a897b; }\n    .btn.green-dark:not(.btn-outline):active:hover, .btn.green-dark:not(.btn-outline):active:focus, .btn.green-dark:not(.btn-outline):active.focus, .btn.green-dark:not(.btn-outline).active:hover, .btn.green-dark:not(.btn-outline).active:focus, .btn.green-dark:not(.btn-outline).active.focus,\n    .open > .btn.green-dark:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.green-dark:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.green-dark:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #33776b;\n      border-color: #265a51; }\n  .btn.green-dark:not(.btn-outline):active, .btn.green-dark:not(.btn-outline).active,\n  .open > .btn.green-dark:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.green-dark:not(.btn-outline).disabled:hover, .btn.green-dark:not(.btn-outline).disabled:focus, .btn.green-dark:not(.btn-outline).disabled.focus, .btn.green-dark:not(.btn-outline)[disabled]:hover, .btn.green-dark:not(.btn-outline)[disabled]:focus, .btn.green-dark:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.green-dark:not(.btn-outline):hover,\n  fieldset[disabled] .btn.green-dark:not(.btn-outline):focus,\n  fieldset[disabled] .btn.green-dark:not(.btn-outline).focus {\n    background-color: #4DB3A2;\n    border-color: #4DB3A2; }\n  .btn.green-dark:not(.btn-outline) .badge {\n    color: #4DB3A2;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.green-dark {\n  border-color: #4DB3A2;\n  color: #4DB3A2;\n  background: none; }\n  .btn.btn-outline.green-dark:hover, .btn.btn-outline.green-dark:active, .btn.btn-outline.green-dark:active:hover, .btn.btn-outline.green-dark:active:focus, .btn.btn-outline.green-dark:focus, .btn.btn-outline.green-dark.active {\n    border-color: #4DB3A2;\n    color: #FFFFFF;\n    background-color: #4DB3A2; }\n\n.btn.green-dark-stripe {\n  border-left: 4px solid #4DB3A2 !important; }\n\n.btn.green-sharp:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #2ab4c0;\n  border-color: #2ab4c0; }\n  .btn.green-sharp:not(.btn-outline):focus, .btn.green-sharp:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #218d96;\n    border-color: #135257; }\n  .btn.green-sharp:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #218d96;\n    border-color: #1f858e; }\n  .btn.green-sharp:not(.btn-outline):active, .btn.green-sharp:not(.btn-outline).active,\n  .open > .btn.green-sharp:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #218d96;\n    border-color: #1f858e; }\n    .btn.green-sharp:not(.btn-outline):active:hover, .btn.green-sharp:not(.btn-outline):active:focus, .btn.green-sharp:not(.btn-outline):active.focus, .btn.green-sharp:not(.btn-outline).active:hover, .btn.green-sharp:not(.btn-outline).active:focus, .btn.green-sharp:not(.btn-outline).active.focus,\n    .open > .btn.green-sharp:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.green-sharp:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.green-sharp:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #1a7179;\n      border-color: #135257; }\n  .btn.green-sharp:not(.btn-outline):active, .btn.green-sharp:not(.btn-outline).active,\n  .open > .btn.green-sharp:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.green-sharp:not(.btn-outline).disabled:hover, .btn.green-sharp:not(.btn-outline).disabled:focus, .btn.green-sharp:not(.btn-outline).disabled.focus, .btn.green-sharp:not(.btn-outline)[disabled]:hover, .btn.green-sharp:not(.btn-outline)[disabled]:focus, .btn.green-sharp:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.green-sharp:not(.btn-outline):hover,\n  fieldset[disabled] .btn.green-sharp:not(.btn-outline):focus,\n  fieldset[disabled] .btn.green-sharp:not(.btn-outline).focus {\n    background-color: #2ab4c0;\n    border-color: #2ab4c0; }\n  .btn.green-sharp:not(.btn-outline) .badge {\n    color: #2ab4c0;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.green-sharp {\n  border-color: #2ab4c0;\n  color: #2ab4c0;\n  background: none; }\n  .btn.btn-outline.green-sharp:hover, .btn.btn-outline.green-sharp:active, .btn.btn-outline.green-sharp:active:hover, .btn.btn-outline.green-sharp:active:focus, .btn.btn-outline.green-sharp:focus, .btn.btn-outline.green-sharp.active {\n    border-color: #2ab4c0;\n    color: #FFFFFF;\n    background-color: #2ab4c0; }\n\n.btn.green-sharp-stripe {\n  border-left: 4px solid #2ab4c0 !important; }\n\n.btn.grey:not(.btn-outline) {\n  color: #333333;\n  background-color: #E5E5E5;\n  border-color: #E5E5E5; }\n  .btn.grey:not(.btn-outline):focus, .btn.grey:not(.btn-outline).focus {\n    color: #333333;\n    background-color: #cccccc;\n    border-color: #a5a5a5; }\n  .btn.grey:not(.btn-outline):hover {\n    color: #333333;\n    background-color: #cccccc;\n    border-color: #c6c6c6; }\n  .btn.grey:not(.btn-outline):active, .btn.grey:not(.btn-outline).active,\n  .open > .btn.grey:not(.btn-outline).dropdown-toggle {\n    color: #333333;\n    background-color: #cccccc;\n    border-color: #c6c6c6; }\n    .btn.grey:not(.btn-outline):active:hover, .btn.grey:not(.btn-outline):active:focus, .btn.grey:not(.btn-outline):active.focus, .btn.grey:not(.btn-outline).active:hover, .btn.grey:not(.btn-outline).active:focus, .btn.grey:not(.btn-outline).active.focus,\n    .open > .btn.grey:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.grey:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.grey:not(.btn-outline).dropdown-toggle.focus {\n      color: #333333;\n      background-color: #bababa;\n      border-color: #a5a5a5; }\n  .btn.grey:not(.btn-outline):active, .btn.grey:not(.btn-outline).active,\n  .open > .btn.grey:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.grey:not(.btn-outline).disabled:hover, .btn.grey:not(.btn-outline).disabled:focus, .btn.grey:not(.btn-outline).disabled.focus, .btn.grey:not(.btn-outline)[disabled]:hover, .btn.grey:not(.btn-outline)[disabled]:focus, .btn.grey:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.grey:not(.btn-outline):hover,\n  fieldset[disabled] .btn.grey:not(.btn-outline):focus,\n  fieldset[disabled] .btn.grey:not(.btn-outline).focus {\n    background-color: #E5E5E5;\n    border-color: #E5E5E5; }\n  .btn.grey:not(.btn-outline) .badge {\n    color: #E5E5E5;\n    background-color: #333333; }\n\n.btn.btn-outline.grey {\n  border-color: #E5E5E5;\n  color: #E5E5E5;\n  background: none; }\n  .btn.btn-outline.grey:hover, .btn.btn-outline.grey:active, .btn.btn-outline.grey:active:hover, .btn.btn-outline.grey:active:focus, .btn.btn-outline.grey:focus, .btn.btn-outline.grey.active {\n    border-color: #E5E5E5;\n    color: #333333;\n    background-color: #E5E5E5; }\n\n.btn.grey-stripe {\n  border-left: 4px solid #E5E5E5 !important; }\n\n.btn.grey-steel:not(.btn-outline) {\n  color: #80898e;\n  background-color: #e9edef;\n  border-color: #e9edef; }\n  .btn.grey-steel:not(.btn-outline):focus, .btn.grey-steel:not(.btn-outline).focus {\n    color: #80898e;\n    background-color: #cbd5da;\n    border-color: #9fb1b9; }\n  .btn.grey-steel:not(.btn-outline):hover {\n    color: #80898e;\n    background-color: #cbd5da;\n    border-color: #c6d0d5; }\n  .btn.grey-steel:not(.btn-outline):active, .btn.grey-steel:not(.btn-outline).active,\n  .open > .btn.grey-steel:not(.btn-outline).dropdown-toggle {\n    color: #80898e;\n    background-color: #cbd5da;\n    border-color: #c6d0d5; }\n    .btn.grey-steel:not(.btn-outline):active:hover, .btn.grey-steel:not(.btn-outline):active:focus, .btn.grey-steel:not(.btn-outline):active.focus, .btn.grey-steel:not(.btn-outline).active:hover, .btn.grey-steel:not(.btn-outline).active:focus, .btn.grey-steel:not(.btn-outline).active.focus,\n    .open > .btn.grey-steel:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.grey-steel:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.grey-steel:not(.btn-outline).dropdown-toggle.focus {\n      color: #80898e;\n      background-color: #b7c4ca;\n      border-color: #9fb1b9; }\n  .btn.grey-steel:not(.btn-outline):active, .btn.grey-steel:not(.btn-outline).active,\n  .open > .btn.grey-steel:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.grey-steel:not(.btn-outline).disabled:hover, .btn.grey-steel:not(.btn-outline).disabled:focus, .btn.grey-steel:not(.btn-outline).disabled.focus, .btn.grey-steel:not(.btn-outline)[disabled]:hover, .btn.grey-steel:not(.btn-outline)[disabled]:focus, .btn.grey-steel:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.grey-steel:not(.btn-outline):hover,\n  fieldset[disabled] .btn.grey-steel:not(.btn-outline):focus,\n  fieldset[disabled] .btn.grey-steel:not(.btn-outline).focus {\n    background-color: #e9edef;\n    border-color: #e9edef; }\n  .btn.grey-steel:not(.btn-outline) .badge {\n    color: #e9edef;\n    background-color: #80898e; }\n\n.btn.btn-outline.grey-steel {\n  border-color: #e9edef;\n  color: #e9edef;\n  background: none; }\n  .btn.btn-outline.grey-steel:hover, .btn.btn-outline.grey-steel:active, .btn.btn-outline.grey-steel:active:hover, .btn.btn-outline.grey-steel:active:focus, .btn.btn-outline.grey-steel:focus, .btn.btn-outline.grey-steel.active {\n    border-color: #e9edef;\n    color: #80898e;\n    background-color: #e9edef; }\n\n.btn.grey-steel-stripe {\n  border-left: 4px solid #e9edef !important; }\n\n.btn.grey-cararra:not(.btn-outline) {\n  color: #333333;\n  background-color: #fafafa;\n  border-color: #fafafa; }\n  .btn.grey-cararra:not(.btn-outline):focus, .btn.grey-cararra:not(.btn-outline).focus {\n    color: #333333;\n    background-color: #e1e1e1;\n    border-color: #bababa; }\n  .btn.grey-cararra:not(.btn-outline):hover {\n    color: #333333;\n    background-color: #e1e1e1;\n    border-color: #dbdbdb; }\n  .btn.grey-cararra:not(.btn-outline):active, .btn.grey-cararra:not(.btn-outline).active,\n  .open > .btn.grey-cararra:not(.btn-outline).dropdown-toggle {\n    color: #333333;\n    background-color: #e1e1e1;\n    border-color: #dbdbdb; }\n    .btn.grey-cararra:not(.btn-outline):active:hover, .btn.grey-cararra:not(.btn-outline):active:focus, .btn.grey-cararra:not(.btn-outline):active.focus, .btn.grey-cararra:not(.btn-outline).active:hover, .btn.grey-cararra:not(.btn-outline).active:focus, .btn.grey-cararra:not(.btn-outline).active.focus,\n    .open > .btn.grey-cararra:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.grey-cararra:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.grey-cararra:not(.btn-outline).dropdown-toggle.focus {\n      color: #333333;\n      background-color: #cfcfcf;\n      border-color: #bababa; }\n  .btn.grey-cararra:not(.btn-outline):active, .btn.grey-cararra:not(.btn-outline).active,\n  .open > .btn.grey-cararra:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.grey-cararra:not(.btn-outline).disabled:hover, .btn.grey-cararra:not(.btn-outline).disabled:focus, .btn.grey-cararra:not(.btn-outline).disabled.focus, .btn.grey-cararra:not(.btn-outline)[disabled]:hover, .btn.grey-cararra:not(.btn-outline)[disabled]:focus, .btn.grey-cararra:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.grey-cararra:not(.btn-outline):hover,\n  fieldset[disabled] .btn.grey-cararra:not(.btn-outline):focus,\n  fieldset[disabled] .btn.grey-cararra:not(.btn-outline).focus {\n    background-color: #fafafa;\n    border-color: #fafafa; }\n  .btn.grey-cararra:not(.btn-outline) .badge {\n    color: #fafafa;\n    background-color: #333333; }\n\n.btn.btn-outline.grey-cararra {\n  border-color: #fafafa;\n  color: #fafafa;\n  background: none; }\n  .btn.btn-outline.grey-cararra:hover, .btn.btn-outline.grey-cararra:active, .btn.btn-outline.grey-cararra:active:hover, .btn.btn-outline.grey-cararra:active:focus, .btn.btn-outline.grey-cararra:focus, .btn.btn-outline.grey-cararra.active {\n    border-color: #fafafa;\n    color: #333333;\n    background-color: #fafafa; }\n\n.btn.grey-cararra-stripe {\n  border-left: 4px solid #fafafa !important; }\n\n.btn.grey-gallery:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #555555;\n  border-color: #555555; }\n  .btn.grey-gallery:not(.btn-outline):focus, .btn.grey-gallery:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #3c3c3c;\n    border-color: #151515; }\n  .btn.grey-gallery:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #3c3c3c;\n    border-color: #363636; }\n  .btn.grey-gallery:not(.btn-outline):active, .btn.grey-gallery:not(.btn-outline).active,\n  .open > .btn.grey-gallery:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #3c3c3c;\n    border-color: #363636; }\n    .btn.grey-gallery:not(.btn-outline):active:hover, .btn.grey-gallery:not(.btn-outline):active:focus, .btn.grey-gallery:not(.btn-outline):active.focus, .btn.grey-gallery:not(.btn-outline).active:hover, .btn.grey-gallery:not(.btn-outline).active:focus, .btn.grey-gallery:not(.btn-outline).active.focus,\n    .open > .btn.grey-gallery:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.grey-gallery:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.grey-gallery:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #2a2a2a;\n      border-color: #151515; }\n  .btn.grey-gallery:not(.btn-outline):active, .btn.grey-gallery:not(.btn-outline).active,\n  .open > .btn.grey-gallery:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.grey-gallery:not(.btn-outline).disabled:hover, .btn.grey-gallery:not(.btn-outline).disabled:focus, .btn.grey-gallery:not(.btn-outline).disabled.focus, .btn.grey-gallery:not(.btn-outline)[disabled]:hover, .btn.grey-gallery:not(.btn-outline)[disabled]:focus, .btn.grey-gallery:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.grey-gallery:not(.btn-outline):hover,\n  fieldset[disabled] .btn.grey-gallery:not(.btn-outline):focus,\n  fieldset[disabled] .btn.grey-gallery:not(.btn-outline).focus {\n    background-color: #555555;\n    border-color: #555555; }\n  .btn.grey-gallery:not(.btn-outline) .badge {\n    color: #555555;\n    background-color: #ffffff; }\n\n.btn.btn-outline.grey-gallery {\n  border-color: #555555;\n  color: #555555;\n  background: none; }\n  .btn.btn-outline.grey-gallery:hover, .btn.btn-outline.grey-gallery:active, .btn.btn-outline.grey-gallery:active:hover, .btn.btn-outline.grey-gallery:active:focus, .btn.btn-outline.grey-gallery:focus, .btn.btn-outline.grey-gallery.active {\n    border-color: #555555;\n    color: #ffffff;\n    background-color: #555555; }\n\n.btn.grey-gallery-stripe {\n  border-left: 4px solid #555555 !important; }\n\n.btn.grey-cascade:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #95A5A6;\n  border-color: #95A5A6; }\n  .btn.grey-cascade:not(.btn-outline):focus, .btn.grey-cascade:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #798d8f;\n    border-color: #566566; }\n  .btn.grey-cascade:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #798d8f;\n    border-color: #74898a; }\n  .btn.grey-cascade:not(.btn-outline):active, .btn.grey-cascade:not(.btn-outline).active,\n  .open > .btn.grey-cascade:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #798d8f;\n    border-color: #74898a; }\n    .btn.grey-cascade:not(.btn-outline):active:hover, .btn.grey-cascade:not(.btn-outline):active:focus, .btn.grey-cascade:not(.btn-outline):active.focus, .btn.grey-cascade:not(.btn-outline).active:hover, .btn.grey-cascade:not(.btn-outline).active:focus, .btn.grey-cascade:not(.btn-outline).active.focus,\n    .open > .btn.grey-cascade:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.grey-cascade:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.grey-cascade:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #687b7c;\n      border-color: #566566; }\n  .btn.grey-cascade:not(.btn-outline):active, .btn.grey-cascade:not(.btn-outline).active,\n  .open > .btn.grey-cascade:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.grey-cascade:not(.btn-outline).disabled:hover, .btn.grey-cascade:not(.btn-outline).disabled:focus, .btn.grey-cascade:not(.btn-outline).disabled.focus, .btn.grey-cascade:not(.btn-outline)[disabled]:hover, .btn.grey-cascade:not(.btn-outline)[disabled]:focus, .btn.grey-cascade:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.grey-cascade:not(.btn-outline):hover,\n  fieldset[disabled] .btn.grey-cascade:not(.btn-outline):focus,\n  fieldset[disabled] .btn.grey-cascade:not(.btn-outline).focus {\n    background-color: #95A5A6;\n    border-color: #95A5A6; }\n  .btn.grey-cascade:not(.btn-outline) .badge {\n    color: #95A5A6;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.grey-cascade {\n  border-color: #95A5A6;\n  color: #95A5A6;\n  background: none; }\n  .btn.btn-outline.grey-cascade:hover, .btn.btn-outline.grey-cascade:active, .btn.btn-outline.grey-cascade:active:hover, .btn.btn-outline.grey-cascade:active:focus, .btn.btn-outline.grey-cascade:focus, .btn.btn-outline.grey-cascade.active {\n    border-color: #95A5A6;\n    color: #FFFFFF;\n    background-color: #95A5A6; }\n\n.btn.grey-cascade-stripe {\n  border-left: 4px solid #95A5A6 !important; }\n\n.btn.grey-silver:not(.btn-outline) {\n  color: #FAFCFB;\n  background-color: #BFBFBF;\n  border-color: #BFBFBF; }\n  .btn.grey-silver:not(.btn-outline):focus, .btn.grey-silver:not(.btn-outline).focus {\n    color: #FAFCFB;\n    background-color: #a6a6a6;\n    border-color: #7f7f7f; }\n  .btn.grey-silver:not(.btn-outline):hover {\n    color: #FAFCFB;\n    background-color: #a6a6a6;\n    border-color: #a0a0a0; }\n  .btn.grey-silver:not(.btn-outline):active, .btn.grey-silver:not(.btn-outline).active,\n  .open > .btn.grey-silver:not(.btn-outline).dropdown-toggle {\n    color: #FAFCFB;\n    background-color: #a6a6a6;\n    border-color: #a0a0a0; }\n    .btn.grey-silver:not(.btn-outline):active:hover, .btn.grey-silver:not(.btn-outline):active:focus, .btn.grey-silver:not(.btn-outline):active.focus, .btn.grey-silver:not(.btn-outline).active:hover, .btn.grey-silver:not(.btn-outline).active:focus, .btn.grey-silver:not(.btn-outline).active.focus,\n    .open > .btn.grey-silver:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.grey-silver:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.grey-silver:not(.btn-outline).dropdown-toggle.focus {\n      color: #FAFCFB;\n      background-color: #949494;\n      border-color: #7f7f7f; }\n  .btn.grey-silver:not(.btn-outline):active, .btn.grey-silver:not(.btn-outline).active,\n  .open > .btn.grey-silver:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.grey-silver:not(.btn-outline).disabled:hover, .btn.grey-silver:not(.btn-outline).disabled:focus, .btn.grey-silver:not(.btn-outline).disabled.focus, .btn.grey-silver:not(.btn-outline)[disabled]:hover, .btn.grey-silver:not(.btn-outline)[disabled]:focus, .btn.grey-silver:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.grey-silver:not(.btn-outline):hover,\n  fieldset[disabled] .btn.grey-silver:not(.btn-outline):focus,\n  fieldset[disabled] .btn.grey-silver:not(.btn-outline).focus {\n    background-color: #BFBFBF;\n    border-color: #BFBFBF; }\n  .btn.grey-silver:not(.btn-outline) .badge {\n    color: #BFBFBF;\n    background-color: #FAFCFB; }\n\n.btn.btn-outline.grey-silver {\n  border-color: #BFBFBF;\n  color: #BFBFBF;\n  background: none; }\n  .btn.btn-outline.grey-silver:hover, .btn.btn-outline.grey-silver:active, .btn.btn-outline.grey-silver:active:hover, .btn.btn-outline.grey-silver:active:focus, .btn.btn-outline.grey-silver:focus, .btn.btn-outline.grey-silver.active {\n    border-color: #BFBFBF;\n    color: #FAFCFB;\n    background-color: #BFBFBF; }\n\n.btn.grey-silver-stripe {\n  border-left: 4px solid #BFBFBF !important; }\n\n.btn.grey-salsa:not(.btn-outline) {\n  color: #FAFCFB;\n  background-color: #ACB5C3;\n  border-color: #ACB5C3; }\n  .btn.grey-salsa:not(.btn-outline):focus, .btn.grey-salsa:not(.btn-outline).focus {\n    color: #FAFCFB;\n    background-color: #8e9bae;\n    border-color: #64748b; }\n  .btn.grey-salsa:not(.btn-outline):hover {\n    color: #FAFCFB;\n    background-color: #8e9bae;\n    border-color: #8895a9; }\n  .btn.grey-salsa:not(.btn-outline):active, .btn.grey-salsa:not(.btn-outline).active,\n  .open > .btn.grey-salsa:not(.btn-outline).dropdown-toggle {\n    color: #FAFCFB;\n    background-color: #8e9bae;\n    border-color: #8895a9; }\n    .btn.grey-salsa:not(.btn-outline):active:hover, .btn.grey-salsa:not(.btn-outline):active:focus, .btn.grey-salsa:not(.btn-outline):active.focus, .btn.grey-salsa:not(.btn-outline).active:hover, .btn.grey-salsa:not(.btn-outline).active:focus, .btn.grey-salsa:not(.btn-outline).active.focus,\n    .open > .btn.grey-salsa:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.grey-salsa:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.grey-salsa:not(.btn-outline).dropdown-toggle.focus {\n      color: #FAFCFB;\n      background-color: #7a889f;\n      border-color: #64748b; }\n  .btn.grey-salsa:not(.btn-outline):active, .btn.grey-salsa:not(.btn-outline).active,\n  .open > .btn.grey-salsa:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.grey-salsa:not(.btn-outline).disabled:hover, .btn.grey-salsa:not(.btn-outline).disabled:focus, .btn.grey-salsa:not(.btn-outline).disabled.focus, .btn.grey-salsa:not(.btn-outline)[disabled]:hover, .btn.grey-salsa:not(.btn-outline)[disabled]:focus, .btn.grey-salsa:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.grey-salsa:not(.btn-outline):hover,\n  fieldset[disabled] .btn.grey-salsa:not(.btn-outline):focus,\n  fieldset[disabled] .btn.grey-salsa:not(.btn-outline).focus {\n    background-color: #ACB5C3;\n    border-color: #ACB5C3; }\n  .btn.grey-salsa:not(.btn-outline) .badge {\n    color: #ACB5C3;\n    background-color: #FAFCFB; }\n\n.btn.btn-outline.grey-salsa {\n  border-color: #ACB5C3;\n  color: #ACB5C3;\n  background: none; }\n  .btn.btn-outline.grey-salsa:hover, .btn.btn-outline.grey-salsa:active, .btn.btn-outline.grey-salsa:active:hover, .btn.btn-outline.grey-salsa:active:focus, .btn.btn-outline.grey-salsa:focus, .btn.btn-outline.grey-salsa.active {\n    border-color: #ACB5C3;\n    color: #FAFCFB;\n    background-color: #ACB5C3; }\n\n.btn.grey-salsa-stripe {\n  border-left: 4px solid #ACB5C3 !important; }\n\n.btn.grey-salt:not(.btn-outline) {\n  color: #FAFCFB;\n  background-color: #bfcad1;\n  border-color: #bfcad1; }\n  .btn.grey-salt:not(.btn-outline):focus, .btn.grey-salt:not(.btn-outline).focus {\n    color: #FAFCFB;\n    background-color: #a1b1bc;\n    border-color: #758d9c; }\n  .btn.grey-salt:not(.btn-outline):hover {\n    color: #FAFCFB;\n    background-color: #a1b1bc;\n    border-color: #9badb7; }\n  .btn.grey-salt:not(.btn-outline):active, .btn.grey-salt:not(.btn-outline).active,\n  .open > .btn.grey-salt:not(.btn-outline).dropdown-toggle {\n    color: #FAFCFB;\n    background-color: #a1b1bc;\n    border-color: #9badb7; }\n    .btn.grey-salt:not(.btn-outline):active:hover, .btn.grey-salt:not(.btn-outline):active:focus, .btn.grey-salt:not(.btn-outline):active.focus, .btn.grey-salt:not(.btn-outline).active:hover, .btn.grey-salt:not(.btn-outline).active:focus, .btn.grey-salt:not(.btn-outline).active.focus,\n    .open > .btn.grey-salt:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.grey-salt:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.grey-salt:not(.btn-outline).dropdown-toggle.focus {\n      color: #FAFCFB;\n      background-color: #8da0ad;\n      border-color: #758d9c; }\n  .btn.grey-salt:not(.btn-outline):active, .btn.grey-salt:not(.btn-outline).active,\n  .open > .btn.grey-salt:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.grey-salt:not(.btn-outline).disabled:hover, .btn.grey-salt:not(.btn-outline).disabled:focus, .btn.grey-salt:not(.btn-outline).disabled.focus, .btn.grey-salt:not(.btn-outline)[disabled]:hover, .btn.grey-salt:not(.btn-outline)[disabled]:focus, .btn.grey-salt:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.grey-salt:not(.btn-outline):hover,\n  fieldset[disabled] .btn.grey-salt:not(.btn-outline):focus,\n  fieldset[disabled] .btn.grey-salt:not(.btn-outline).focus {\n    background-color: #bfcad1;\n    border-color: #bfcad1; }\n  .btn.grey-salt:not(.btn-outline) .badge {\n    color: #bfcad1;\n    background-color: #FAFCFB; }\n\n.btn.btn-outline.grey-salt {\n  border-color: #bfcad1;\n  color: #bfcad1;\n  background: none; }\n  .btn.btn-outline.grey-salt:hover, .btn.btn-outline.grey-salt:active, .btn.btn-outline.grey-salt:active:hover, .btn.btn-outline.grey-salt:active:focus, .btn.btn-outline.grey-salt:focus, .btn.btn-outline.grey-salt.active {\n    border-color: #bfcad1;\n    color: #FAFCFB;\n    background-color: #bfcad1; }\n\n.btn.grey-salt-stripe {\n  border-left: 4px solid #bfcad1 !important; }\n\n.btn.grey-mint:not(.btn-outline) {\n  color: #FFFFFF;\n  background-color: #525e64;\n  border-color: #525e64; }\n  .btn.grey-mint:not(.btn-outline):focus, .btn.grey-mint:not(.btn-outline).focus {\n    color: #FFFFFF;\n    background-color: #3b4448;\n    border-color: #191c1e; }\n  .btn.grey-mint:not(.btn-outline):hover {\n    color: #FFFFFF;\n    background-color: #3b4448;\n    border-color: #363e42; }\n  .btn.grey-mint:not(.btn-outline):active, .btn.grey-mint:not(.btn-outline).active,\n  .open > .btn.grey-mint:not(.btn-outline).dropdown-toggle {\n    color: #FFFFFF;\n    background-color: #3b4448;\n    border-color: #363e42; }\n    .btn.grey-mint:not(.btn-outline):active:hover, .btn.grey-mint:not(.btn-outline):active:focus, .btn.grey-mint:not(.btn-outline):active.focus, .btn.grey-mint:not(.btn-outline).active:hover, .btn.grey-mint:not(.btn-outline).active:focus, .btn.grey-mint:not(.btn-outline).active.focus,\n    .open > .btn.grey-mint:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.grey-mint:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.grey-mint:not(.btn-outline).dropdown-toggle.focus {\n      color: #FFFFFF;\n      background-color: #2b3134;\n      border-color: #191c1e; }\n  .btn.grey-mint:not(.btn-outline):active, .btn.grey-mint:not(.btn-outline).active,\n  .open > .btn.grey-mint:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.grey-mint:not(.btn-outline).disabled:hover, .btn.grey-mint:not(.btn-outline).disabled:focus, .btn.grey-mint:not(.btn-outline).disabled.focus, .btn.grey-mint:not(.btn-outline)[disabled]:hover, .btn.grey-mint:not(.btn-outline)[disabled]:focus, .btn.grey-mint:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.grey-mint:not(.btn-outline):hover,\n  fieldset[disabled] .btn.grey-mint:not(.btn-outline):focus,\n  fieldset[disabled] .btn.grey-mint:not(.btn-outline).focus {\n    background-color: #525e64;\n    border-color: #525e64; }\n  .btn.grey-mint:not(.btn-outline) .badge {\n    color: #525e64;\n    background-color: #FFFFFF; }\n\n.btn.btn-outline.grey-mint {\n  border-color: #525e64;\n  color: #525e64;\n  background: none; }\n  .btn.btn-outline.grey-mint:hover, .btn.btn-outline.grey-mint:active, .btn.btn-outline.grey-mint:active:hover, .btn.btn-outline.grey-mint:active:focus, .btn.btn-outline.grey-mint:focus, .btn.btn-outline.grey-mint.active {\n    border-color: #525e64;\n    color: #FFFFFF;\n    background-color: #525e64; }\n\n.btn.grey-mint-stripe {\n  border-left: 4px solid #525e64 !important; }\n\n.btn.red:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #e7505a;\n  border-color: #e7505a; }\n  .btn.red:not(.btn-outline):focus, .btn.red:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #e12330;\n    border-color: #a1161f; }\n  .btn.red:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #e12330;\n    border-color: #dc1e2b; }\n  .btn.red:not(.btn-outline):active, .btn.red:not(.btn-outline).active,\n  .open > .btn.red:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #e12330;\n    border-color: #dc1e2b; }\n    .btn.red:not(.btn-outline):active:hover, .btn.red:not(.btn-outline):active:focus, .btn.red:not(.btn-outline):active.focus, .btn.red:not(.btn-outline).active:hover, .btn.red:not(.btn-outline).active:focus, .btn.red:not(.btn-outline).active.focus,\n    .open > .btn.red:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.red:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.red:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #c51b26;\n      border-color: #a1161f; }\n  .btn.red:not(.btn-outline):active, .btn.red:not(.btn-outline).active,\n  .open > .btn.red:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.red:not(.btn-outline).disabled:hover, .btn.red:not(.btn-outline).disabled:focus, .btn.red:not(.btn-outline).disabled.focus, .btn.red:not(.btn-outline)[disabled]:hover, .btn.red:not(.btn-outline)[disabled]:focus, .btn.red:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.red:not(.btn-outline):hover,\n  fieldset[disabled] .btn.red:not(.btn-outline):focus,\n  fieldset[disabled] .btn.red:not(.btn-outline).focus {\n    background-color: #e7505a;\n    border-color: #e7505a; }\n  .btn.red:not(.btn-outline) .badge {\n    color: #e7505a;\n    background-color: #ffffff; }\n\n.btn.btn-outline.red {\n  border-color: #e7505a;\n  color: #e7505a;\n  background: none; }\n  .btn.btn-outline.red:hover, .btn.btn-outline.red:active, .btn.btn-outline.red:active:hover, .btn.btn-outline.red:active:focus, .btn.btn-outline.red:focus, .btn.btn-outline.red.active {\n    border-color: #e7505a;\n    color: #ffffff;\n    background-color: #e7505a; }\n\n.btn.red-stripe {\n  border-left: 4px solid #e7505a !important; }\n\n.btn.red-pink:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #E08283;\n  border-color: #E08283; }\n  .btn.red-pink:not(.btn-outline):focus, .btn.red-pink:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #d6595a;\n    border-color: #b52d2e; }\n  .btn.red-pink:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #d6595a;\n    border-color: #d45152; }\n  .btn.red-pink:not(.btn-outline):active, .btn.red-pink:not(.btn-outline).active,\n  .open > .btn.red-pink:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #d6595a;\n    border-color: #d45152; }\n    .btn.red-pink:not(.btn-outline):active:hover, .btn.red-pink:not(.btn-outline):active:focus, .btn.red-pink:not(.btn-outline):active.focus, .btn.red-pink:not(.btn-outline).active:hover, .btn.red-pink:not(.btn-outline).active:focus, .btn.red-pink:not(.btn-outline).active.focus,\n    .open > .btn.red-pink:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.red-pink:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.red-pink:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #cf3d3e;\n      border-color: #b52d2e; }\n  .btn.red-pink:not(.btn-outline):active, .btn.red-pink:not(.btn-outline).active,\n  .open > .btn.red-pink:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.red-pink:not(.btn-outline).disabled:hover, .btn.red-pink:not(.btn-outline).disabled:focus, .btn.red-pink:not(.btn-outline).disabled.focus, .btn.red-pink:not(.btn-outline)[disabled]:hover, .btn.red-pink:not(.btn-outline)[disabled]:focus, .btn.red-pink:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.red-pink:not(.btn-outline):hover,\n  fieldset[disabled] .btn.red-pink:not(.btn-outline):focus,\n  fieldset[disabled] .btn.red-pink:not(.btn-outline).focus {\n    background-color: #E08283;\n    border-color: #E08283; }\n  .btn.red-pink:not(.btn-outline) .badge {\n    color: #E08283;\n    background-color: #ffffff; }\n\n.btn.btn-outline.red-pink {\n  border-color: #E08283;\n  color: #E08283;\n  background: none; }\n  .btn.btn-outline.red-pink:hover, .btn.btn-outline.red-pink:active, .btn.btn-outline.red-pink:active:hover, .btn.btn-outline.red-pink:active:focus, .btn.btn-outline.red-pink:focus, .btn.btn-outline.red-pink.active {\n    border-color: #E08283;\n    color: #ffffff;\n    background-color: #E08283; }\n\n.btn.red-pink-stripe {\n  border-left: 4px solid #E08283 !important; }\n\n.btn.red-sunglo:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #E26A6A;\n  border-color: #E26A6A; }\n  .btn.red-sunglo:not(.btn-outline):focus, .btn.red-sunglo:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #da3f3f;\n    border-color: #ab2121; }\n  .btn.red-sunglo:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #da3f3f;\n    border-color: #d83737; }\n  .btn.red-sunglo:not(.btn-outline):active, .btn.red-sunglo:not(.btn-outline).active,\n  .open > .btn.red-sunglo:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #da3f3f;\n    border-color: #d83737; }\n    .btn.red-sunglo:not(.btn-outline):active:hover, .btn.red-sunglo:not(.btn-outline):active:focus, .btn.red-sunglo:not(.btn-outline):active.focus, .btn.red-sunglo:not(.btn-outline).active:hover, .btn.red-sunglo:not(.btn-outline).active:focus, .btn.red-sunglo:not(.btn-outline).active.focus,\n    .open > .btn.red-sunglo:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.red-sunglo:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.red-sunglo:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #cd2828;\n      border-color: #ab2121; }\n  .btn.red-sunglo:not(.btn-outline):active, .btn.red-sunglo:not(.btn-outline).active,\n  .open > .btn.red-sunglo:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.red-sunglo:not(.btn-outline).disabled:hover, .btn.red-sunglo:not(.btn-outline).disabled:focus, .btn.red-sunglo:not(.btn-outline).disabled.focus, .btn.red-sunglo:not(.btn-outline)[disabled]:hover, .btn.red-sunglo:not(.btn-outline)[disabled]:focus, .btn.red-sunglo:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.red-sunglo:not(.btn-outline):hover,\n  fieldset[disabled] .btn.red-sunglo:not(.btn-outline):focus,\n  fieldset[disabled] .btn.red-sunglo:not(.btn-outline).focus {\n    background-color: #E26A6A;\n    border-color: #E26A6A; }\n  .btn.red-sunglo:not(.btn-outline) .badge {\n    color: #E26A6A;\n    background-color: #ffffff; }\n\n.btn.btn-outline.red-sunglo {\n  border-color: #E26A6A;\n  color: #E26A6A;\n  background: none; }\n  .btn.btn-outline.red-sunglo:hover, .btn.btn-outline.red-sunglo:active, .btn.btn-outline.red-sunglo:active:hover, .btn.btn-outline.red-sunglo:active:focus, .btn.btn-outline.red-sunglo:focus, .btn.btn-outline.red-sunglo.active {\n    border-color: #E26A6A;\n    color: #ffffff;\n    background-color: #E26A6A; }\n\n.btn.red-sunglo-stripe {\n  border-left: 4px solid #E26A6A !important; }\n\n.btn.red-intense:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #e35b5a;\n  border-color: #e35b5a; }\n  .btn.red-intense:not(.btn-outline):focus, .btn.red-intense:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #dc302e;\n    border-color: #a21c1b; }\n  .btn.red-intense:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #dc302e;\n    border-color: #da2726; }\n  .btn.red-intense:not(.btn-outline):active, .btn.red-intense:not(.btn-outline).active,\n  .open > .btn.red-intense:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #dc302e;\n    border-color: #da2726; }\n    .btn.red-intense:not(.btn-outline):active:hover, .btn.red-intense:not(.btn-outline):active:focus, .btn.red-intense:not(.btn-outline):active.focus, .btn.red-intense:not(.btn-outline).active:hover, .btn.red-intense:not(.btn-outline).active:focus, .btn.red-intense:not(.btn-outline).active.focus,\n    .open > .btn.red-intense:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.red-intense:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.red-intense:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #c52321;\n      border-color: #a21c1b; }\n  .btn.red-intense:not(.btn-outline):active, .btn.red-intense:not(.btn-outline).active,\n  .open > .btn.red-intense:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.red-intense:not(.btn-outline).disabled:hover, .btn.red-intense:not(.btn-outline).disabled:focus, .btn.red-intense:not(.btn-outline).disabled.focus, .btn.red-intense:not(.btn-outline)[disabled]:hover, .btn.red-intense:not(.btn-outline)[disabled]:focus, .btn.red-intense:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.red-intense:not(.btn-outline):hover,\n  fieldset[disabled] .btn.red-intense:not(.btn-outline):focus,\n  fieldset[disabled] .btn.red-intense:not(.btn-outline).focus {\n    background-color: #e35b5a;\n    border-color: #e35b5a; }\n  .btn.red-intense:not(.btn-outline) .badge {\n    color: #e35b5a;\n    background-color: #ffffff; }\n\n.btn.btn-outline.red-intense {\n  border-color: #e35b5a;\n  color: #e35b5a;\n  background: none; }\n  .btn.btn-outline.red-intense:hover, .btn.btn-outline.red-intense:active, .btn.btn-outline.red-intense:active:hover, .btn.btn-outline.red-intense:active:focus, .btn.btn-outline.red-intense:focus, .btn.btn-outline.red-intense.active {\n    border-color: #e35b5a;\n    color: #ffffff;\n    background-color: #e35b5a; }\n\n.btn.red-intense-stripe {\n  border-left: 4px solid #e35b5a !important; }\n\n.btn.red-thunderbird:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #D91E18;\n  border-color: #D91E18; }\n  .btn.red-thunderbird:not(.btn-outline):focus, .btn.red-thunderbird:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #ab1813;\n    border-color: #660e0b; }\n  .btn.red-thunderbird:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #ab1813;\n    border-color: #a21612; }\n  .btn.red-thunderbird:not(.btn-outline):active, .btn.red-thunderbird:not(.btn-outline).active,\n  .open > .btn.red-thunderbird:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #ab1813;\n    border-color: #a21612; }\n    .btn.red-thunderbird:not(.btn-outline):active:hover, .btn.red-thunderbird:not(.btn-outline):active:focus, .btn.red-thunderbird:not(.btn-outline):active.focus, .btn.red-thunderbird:not(.btn-outline).active:hover, .btn.red-thunderbird:not(.btn-outline).active:focus, .btn.red-thunderbird:not(.btn-outline).active.focus,\n    .open > .btn.red-thunderbird:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.red-thunderbird:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.red-thunderbird:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #8b130f;\n      border-color: #660e0b; }\n  .btn.red-thunderbird:not(.btn-outline):active, .btn.red-thunderbird:not(.btn-outline).active,\n  .open > .btn.red-thunderbird:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.red-thunderbird:not(.btn-outline).disabled:hover, .btn.red-thunderbird:not(.btn-outline).disabled:focus, .btn.red-thunderbird:not(.btn-outline).disabled.focus, .btn.red-thunderbird:not(.btn-outline)[disabled]:hover, .btn.red-thunderbird:not(.btn-outline)[disabled]:focus, .btn.red-thunderbird:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.red-thunderbird:not(.btn-outline):hover,\n  fieldset[disabled] .btn.red-thunderbird:not(.btn-outline):focus,\n  fieldset[disabled] .btn.red-thunderbird:not(.btn-outline).focus {\n    background-color: #D91E18;\n    border-color: #D91E18; }\n  .btn.red-thunderbird:not(.btn-outline) .badge {\n    color: #D91E18;\n    background-color: #ffffff; }\n\n.btn.btn-outline.red-thunderbird {\n  border-color: #D91E18;\n  color: #D91E18;\n  background: none; }\n  .btn.btn-outline.red-thunderbird:hover, .btn.btn-outline.red-thunderbird:active, .btn.btn-outline.red-thunderbird:active:hover, .btn.btn-outline.red-thunderbird:active:focus, .btn.btn-outline.red-thunderbird:focus, .btn.btn-outline.red-thunderbird.active {\n    border-color: #D91E18;\n    color: #ffffff;\n    background-color: #D91E18; }\n\n.btn.red-thunderbird-stripe {\n  border-left: 4px solid #D91E18 !important; }\n\n.btn.red-flamingo:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #EF4836;\n  border-color: #EF4836; }\n  .btn.red-flamingo:not(.btn-outline):focus, .btn.red-flamingo:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #e02612;\n    border-color: #991a0c; }\n  .btn.red-flamingo:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #e02612;\n    border-color: #d72411; }\n  .btn.red-flamingo:not(.btn-outline):active, .btn.red-flamingo:not(.btn-outline).active,\n  .open > .btn.red-flamingo:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #e02612;\n    border-color: #d72411; }\n    .btn.red-flamingo:not(.btn-outline):active:hover, .btn.red-flamingo:not(.btn-outline):active:focus, .btn.red-flamingo:not(.btn-outline):active.focus, .btn.red-flamingo:not(.btn-outline).active:hover, .btn.red-flamingo:not(.btn-outline).active:focus, .btn.red-flamingo:not(.btn-outline).active.focus,\n    .open > .btn.red-flamingo:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.red-flamingo:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.red-flamingo:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #bf200f;\n      border-color: #991a0c; }\n  .btn.red-flamingo:not(.btn-outline):active, .btn.red-flamingo:not(.btn-outline).active,\n  .open > .btn.red-flamingo:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.red-flamingo:not(.btn-outline).disabled:hover, .btn.red-flamingo:not(.btn-outline).disabled:focus, .btn.red-flamingo:not(.btn-outline).disabled.focus, .btn.red-flamingo:not(.btn-outline)[disabled]:hover, .btn.red-flamingo:not(.btn-outline)[disabled]:focus, .btn.red-flamingo:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.red-flamingo:not(.btn-outline):hover,\n  fieldset[disabled] .btn.red-flamingo:not(.btn-outline):focus,\n  fieldset[disabled] .btn.red-flamingo:not(.btn-outline).focus {\n    background-color: #EF4836;\n    border-color: #EF4836; }\n  .btn.red-flamingo:not(.btn-outline) .badge {\n    color: #EF4836;\n    background-color: #ffffff; }\n\n.btn.btn-outline.red-flamingo {\n  border-color: #EF4836;\n  color: #EF4836;\n  background: none; }\n  .btn.btn-outline.red-flamingo:hover, .btn.btn-outline.red-flamingo:active, .btn.btn-outline.red-flamingo:active:hover, .btn.btn-outline.red-flamingo:active:focus, .btn.btn-outline.red-flamingo:focus, .btn.btn-outline.red-flamingo.active {\n    border-color: #EF4836;\n    color: #ffffff;\n    background-color: #EF4836; }\n\n.btn.red-flamingo-stripe {\n  border-left: 4px solid #EF4836 !important; }\n\n.btn.red-soft:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #d05454;\n  border-color: #d05454; }\n  .btn.red-soft:not(.btn-outline):focus, .btn.red-soft:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #bd3434;\n    border-color: #812323; }\n  .btn.red-soft:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #bd3434;\n    border-color: #b53232; }\n  .btn.red-soft:not(.btn-outline):active, .btn.red-soft:not(.btn-outline).active,\n  .open > .btn.red-soft:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #bd3434;\n    border-color: #b53232; }\n    .btn.red-soft:not(.btn-outline):active:hover, .btn.red-soft:not(.btn-outline):active:focus, .btn.red-soft:not(.btn-outline):active.focus, .btn.red-soft:not(.btn-outline).active:hover, .btn.red-soft:not(.btn-outline).active:focus, .btn.red-soft:not(.btn-outline).active.focus,\n    .open > .btn.red-soft:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.red-soft:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.red-soft:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #a12c2c;\n      border-color: #812323; }\n  .btn.red-soft:not(.btn-outline):active, .btn.red-soft:not(.btn-outline).active,\n  .open > .btn.red-soft:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.red-soft:not(.btn-outline).disabled:hover, .btn.red-soft:not(.btn-outline).disabled:focus, .btn.red-soft:not(.btn-outline).disabled.focus, .btn.red-soft:not(.btn-outline)[disabled]:hover, .btn.red-soft:not(.btn-outline)[disabled]:focus, .btn.red-soft:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.red-soft:not(.btn-outline):hover,\n  fieldset[disabled] .btn.red-soft:not(.btn-outline):focus,\n  fieldset[disabled] .btn.red-soft:not(.btn-outline).focus {\n    background-color: #d05454;\n    border-color: #d05454; }\n  .btn.red-soft:not(.btn-outline) .badge {\n    color: #d05454;\n    background-color: #ffffff; }\n\n.btn.btn-outline.red-soft {\n  border-color: #d05454;\n  color: #d05454;\n  background: none; }\n  .btn.btn-outline.red-soft:hover, .btn.btn-outline.red-soft:active, .btn.btn-outline.red-soft:active:hover, .btn.btn-outline.red-soft:active:focus, .btn.btn-outline.red-soft:focus, .btn.btn-outline.red-soft.active {\n    border-color: #d05454;\n    color: #ffffff;\n    background-color: #d05454; }\n\n.btn.red-soft-stripe {\n  border-left: 4px solid #d05454 !important; }\n\n.btn.red-haze:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #f36a5a;\n  border-color: #f36a5a; }\n  .btn.red-haze:not(.btn-outline):focus, .btn.red-haze:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #f03f2a;\n    border-color: #c0210e; }\n  .btn.red-haze:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #f03f2a;\n    border-color: #ef3621; }\n  .btn.red-haze:not(.btn-outline):active, .btn.red-haze:not(.btn-outline).active,\n  .open > .btn.red-haze:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #f03f2a;\n    border-color: #ef3621; }\n    .btn.red-haze:not(.btn-outline):active:hover, .btn.red-haze:not(.btn-outline):active:focus, .btn.red-haze:not(.btn-outline):active.focus, .btn.red-haze:not(.btn-outline).active:hover, .btn.red-haze:not(.btn-outline).active:focus, .btn.red-haze:not(.btn-outline).active.focus,\n    .open > .btn.red-haze:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.red-haze:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.red-haze:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #e62711;\n      border-color: #c0210e; }\n  .btn.red-haze:not(.btn-outline):active, .btn.red-haze:not(.btn-outline).active,\n  .open > .btn.red-haze:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.red-haze:not(.btn-outline).disabled:hover, .btn.red-haze:not(.btn-outline).disabled:focus, .btn.red-haze:not(.btn-outline).disabled.focus, .btn.red-haze:not(.btn-outline)[disabled]:hover, .btn.red-haze:not(.btn-outline)[disabled]:focus, .btn.red-haze:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.red-haze:not(.btn-outline):hover,\n  fieldset[disabled] .btn.red-haze:not(.btn-outline):focus,\n  fieldset[disabled] .btn.red-haze:not(.btn-outline).focus {\n    background-color: #f36a5a;\n    border-color: #f36a5a; }\n  .btn.red-haze:not(.btn-outline) .badge {\n    color: #f36a5a;\n    background-color: #ffffff; }\n\n.btn.btn-outline.red-haze {\n  border-color: #f36a5a;\n  color: #f36a5a;\n  background: none; }\n  .btn.btn-outline.red-haze:hover, .btn.btn-outline.red-haze:active, .btn.btn-outline.red-haze:active:hover, .btn.btn-outline.red-haze:active:focus, .btn.btn-outline.red-haze:focus, .btn.btn-outline.red-haze.active {\n    border-color: #f36a5a;\n    color: #ffffff;\n    background-color: #f36a5a; }\n\n.btn.red-haze-stripe {\n  border-left: 4px solid #f36a5a !important; }\n\n.btn.red-mint:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #e43a45;\n  border-color: #e43a45; }\n  .btn.red-mint:not(.btn-outline):focus, .btn.red-mint:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #cf1c28;\n    border-color: #8b131b; }\n  .btn.red-mint:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #cf1c28;\n    border-color: #c61b26; }\n  .btn.red-mint:not(.btn-outline):active, .btn.red-mint:not(.btn-outline).active,\n  .open > .btn.red-mint:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #cf1c28;\n    border-color: #c61b26; }\n    .btn.red-mint:not(.btn-outline):active:hover, .btn.red-mint:not(.btn-outline):active:focus, .btn.red-mint:not(.btn-outline):active.focus, .btn.red-mint:not(.btn-outline).active:hover, .btn.red-mint:not(.btn-outline).active:focus, .btn.red-mint:not(.btn-outline).active.focus,\n    .open > .btn.red-mint:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.red-mint:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.red-mint:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #af1822;\n      border-color: #8b131b; }\n  .btn.red-mint:not(.btn-outline):active, .btn.red-mint:not(.btn-outline).active,\n  .open > .btn.red-mint:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.red-mint:not(.btn-outline).disabled:hover, .btn.red-mint:not(.btn-outline).disabled:focus, .btn.red-mint:not(.btn-outline).disabled.focus, .btn.red-mint:not(.btn-outline)[disabled]:hover, .btn.red-mint:not(.btn-outline)[disabled]:focus, .btn.red-mint:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.red-mint:not(.btn-outline):hover,\n  fieldset[disabled] .btn.red-mint:not(.btn-outline):focus,\n  fieldset[disabled] .btn.red-mint:not(.btn-outline).focus {\n    background-color: #e43a45;\n    border-color: #e43a45; }\n  .btn.red-mint:not(.btn-outline) .badge {\n    color: #e43a45;\n    background-color: #ffffff; }\n\n.btn.btn-outline.red-mint {\n  border-color: #e43a45;\n  color: #e43a45;\n  background: none; }\n  .btn.btn-outline.red-mint:hover, .btn.btn-outline.red-mint:active, .btn.btn-outline.red-mint:active:hover, .btn.btn-outline.red-mint:active:focus, .btn.btn-outline.red-mint:focus, .btn.btn-outline.red-mint.active {\n    border-color: #e43a45;\n    color: #ffffff;\n    background-color: #e43a45; }\n\n.btn.red-mint-stripe {\n  border-left: 4px solid #e43a45 !important; }\n\n.btn.yellow:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #c49f47;\n  border-color: #c49f47; }\n  .btn.yellow:not(.btn-outline):focus, .btn.yellow:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #a48334;\n    border-color: #6a5422; }\n  .btn.yellow:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #a48334;\n    border-color: #9c7c32; }\n  .btn.yellow:not(.btn-outline):active, .btn.yellow:not(.btn-outline).active,\n  .open > .btn.yellow:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #a48334;\n    border-color: #9c7c32; }\n    .btn.yellow:not(.btn-outline):active:hover, .btn.yellow:not(.btn-outline):active:focus, .btn.yellow:not(.btn-outline):active.focus, .btn.yellow:not(.btn-outline).active:hover, .btn.yellow:not(.btn-outline).active:focus, .btn.yellow:not(.btn-outline).active.focus,\n    .open > .btn.yellow:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.yellow:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.yellow:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #896d2c;\n      border-color: #6a5422; }\n  .btn.yellow:not(.btn-outline):active, .btn.yellow:not(.btn-outline).active,\n  .open > .btn.yellow:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.yellow:not(.btn-outline).disabled:hover, .btn.yellow:not(.btn-outline).disabled:focus, .btn.yellow:not(.btn-outline).disabled.focus, .btn.yellow:not(.btn-outline)[disabled]:hover, .btn.yellow:not(.btn-outline)[disabled]:focus, .btn.yellow:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.yellow:not(.btn-outline):hover,\n  fieldset[disabled] .btn.yellow:not(.btn-outline):focus,\n  fieldset[disabled] .btn.yellow:not(.btn-outline).focus {\n    background-color: #c49f47;\n    border-color: #c49f47; }\n  .btn.yellow:not(.btn-outline) .badge {\n    color: #c49f47;\n    background-color: #ffffff; }\n\n.btn.btn-outline.yellow {\n  border-color: #c49f47;\n  color: #c49f47;\n  background: none; }\n  .btn.btn-outline.yellow:hover, .btn.btn-outline.yellow:active, .btn.btn-outline.yellow:active:hover, .btn.btn-outline.yellow:active:focus, .btn.btn-outline.yellow:focus, .btn.btn-outline.yellow.active {\n    border-color: #c49f47;\n    color: #ffffff;\n    background-color: #c49f47; }\n\n.btn.yellow-stripe {\n  border-left: 4px solid #c49f47 !important; }\n\n.btn.yellow-gold:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #E87E04;\n  border-color: #E87E04; }\n  .btn.yellow-gold:not(.btn-outline):focus, .btn.yellow-gold:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #b66303;\n    border-color: #6b3a02; }\n  .btn.yellow-gold:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #b66303;\n    border-color: #ac5d03; }\n  .btn.yellow-gold:not(.btn-outline):active, .btn.yellow-gold:not(.btn-outline).active,\n  .open > .btn.yellow-gold:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #b66303;\n    border-color: #ac5d03; }\n    .btn.yellow-gold:not(.btn-outline):active:hover, .btn.yellow-gold:not(.btn-outline):active:focus, .btn.yellow-gold:not(.btn-outline):active.focus, .btn.yellow-gold:not(.btn-outline).active:hover, .btn.yellow-gold:not(.btn-outline).active:focus, .btn.yellow-gold:not(.btn-outline).active.focus,\n    .open > .btn.yellow-gold:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.yellow-gold:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.yellow-gold:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #935003;\n      border-color: #6b3a02; }\n  .btn.yellow-gold:not(.btn-outline):active, .btn.yellow-gold:not(.btn-outline).active,\n  .open > .btn.yellow-gold:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.yellow-gold:not(.btn-outline).disabled:hover, .btn.yellow-gold:not(.btn-outline).disabled:focus, .btn.yellow-gold:not(.btn-outline).disabled.focus, .btn.yellow-gold:not(.btn-outline)[disabled]:hover, .btn.yellow-gold:not(.btn-outline)[disabled]:focus, .btn.yellow-gold:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.yellow-gold:not(.btn-outline):hover,\n  fieldset[disabled] .btn.yellow-gold:not(.btn-outline):focus,\n  fieldset[disabled] .btn.yellow-gold:not(.btn-outline).focus {\n    background-color: #E87E04;\n    border-color: #E87E04; }\n  .btn.yellow-gold:not(.btn-outline) .badge {\n    color: #E87E04;\n    background-color: #ffffff; }\n\n.btn.btn-outline.yellow-gold {\n  border-color: #E87E04;\n  color: #E87E04;\n  background: none; }\n  .btn.btn-outline.yellow-gold:hover, .btn.btn-outline.yellow-gold:active, .btn.btn-outline.yellow-gold:active:hover, .btn.btn-outline.yellow-gold:active:focus, .btn.btn-outline.yellow-gold:focus, .btn.btn-outline.yellow-gold.active {\n    border-color: #E87E04;\n    color: #ffffff;\n    background-color: #E87E04; }\n\n.btn.yellow-gold-stripe {\n  border-left: 4px solid #E87E04 !important; }\n\n.btn.yellow-casablanca:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #f2784b;\n  border-color: #f2784b; }\n  .btn.yellow-casablanca:not(.btn-outline):focus, .btn.yellow-casablanca:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #ef541b;\n    border-color: #b1390d; }\n  .btn.yellow-casablanca:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #ef541b;\n    border-color: #ee4d12; }\n  .btn.yellow-casablanca:not(.btn-outline):active, .btn.yellow-casablanca:not(.btn-outline).active,\n  .open > .btn.yellow-casablanca:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #ef541b;\n    border-color: #ee4d12; }\n    .btn.yellow-casablanca:not(.btn-outline):active:hover, .btn.yellow-casablanca:not(.btn-outline):active:focus, .btn.yellow-casablanca:not(.btn-outline):active.focus, .btn.yellow-casablanca:not(.btn-outline).active:hover, .btn.yellow-casablanca:not(.btn-outline).active:focus, .btn.yellow-casablanca:not(.btn-outline).active.focus,\n    .open > .btn.yellow-casablanca:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.yellow-casablanca:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.yellow-casablanca:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #d74510;\n      border-color: #b1390d; }\n  .btn.yellow-casablanca:not(.btn-outline):active, .btn.yellow-casablanca:not(.btn-outline).active,\n  .open > .btn.yellow-casablanca:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.yellow-casablanca:not(.btn-outline).disabled:hover, .btn.yellow-casablanca:not(.btn-outline).disabled:focus, .btn.yellow-casablanca:not(.btn-outline).disabled.focus, .btn.yellow-casablanca:not(.btn-outline)[disabled]:hover, .btn.yellow-casablanca:not(.btn-outline)[disabled]:focus, .btn.yellow-casablanca:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.yellow-casablanca:not(.btn-outline):hover,\n  fieldset[disabled] .btn.yellow-casablanca:not(.btn-outline):focus,\n  fieldset[disabled] .btn.yellow-casablanca:not(.btn-outline).focus {\n    background-color: #f2784b;\n    border-color: #f2784b; }\n  .btn.yellow-casablanca:not(.btn-outline) .badge {\n    color: #f2784b;\n    background-color: #ffffff; }\n\n.btn.btn-outline.yellow-casablanca {\n  border-color: #f2784b;\n  color: #f2784b;\n  background: none; }\n  .btn.btn-outline.yellow-casablanca:hover, .btn.btn-outline.yellow-casablanca:active, .btn.btn-outline.yellow-casablanca:active:hover, .btn.btn-outline.yellow-casablanca:active:focus, .btn.btn-outline.yellow-casablanca:focus, .btn.btn-outline.yellow-casablanca.active {\n    border-color: #f2784b;\n    color: #ffffff;\n    background-color: #f2784b; }\n\n.btn.yellow-casablanca-stripe {\n  border-left: 4px solid #f2784b !important; }\n\n.btn.yellow-crusta:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #f3c200;\n  border-color: #f3c200; }\n  .btn.yellow-crusta:not(.btn-outline):focus, .btn.yellow-crusta:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #c09900;\n    border-color: #745c00; }\n  .btn.yellow-crusta:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #c09900;\n    border-color: #b69100; }\n  .btn.yellow-crusta:not(.btn-outline):active, .btn.yellow-crusta:not(.btn-outline).active,\n  .open > .btn.yellow-crusta:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #c09900;\n    border-color: #b69100; }\n    .btn.yellow-crusta:not(.btn-outline):active:hover, .btn.yellow-crusta:not(.btn-outline):active:focus, .btn.yellow-crusta:not(.btn-outline):active.focus, .btn.yellow-crusta:not(.btn-outline).active:hover, .btn.yellow-crusta:not(.btn-outline).active:focus, .btn.yellow-crusta:not(.btn-outline).active.focus,\n    .open > .btn.yellow-crusta:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.yellow-crusta:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.yellow-crusta:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #9c7d00;\n      border-color: #745c00; }\n  .btn.yellow-crusta:not(.btn-outline):active, .btn.yellow-crusta:not(.btn-outline).active,\n  .open > .btn.yellow-crusta:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.yellow-crusta:not(.btn-outline).disabled:hover, .btn.yellow-crusta:not(.btn-outline).disabled:focus, .btn.yellow-crusta:not(.btn-outline).disabled.focus, .btn.yellow-crusta:not(.btn-outline)[disabled]:hover, .btn.yellow-crusta:not(.btn-outline)[disabled]:focus, .btn.yellow-crusta:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.yellow-crusta:not(.btn-outline):hover,\n  fieldset[disabled] .btn.yellow-crusta:not(.btn-outline):focus,\n  fieldset[disabled] .btn.yellow-crusta:not(.btn-outline).focus {\n    background-color: #f3c200;\n    border-color: #f3c200; }\n  .btn.yellow-crusta:not(.btn-outline) .badge {\n    color: #f3c200;\n    background-color: #ffffff; }\n\n.btn.btn-outline.yellow-crusta {\n  border-color: #f3c200;\n  color: #f3c200;\n  background: none; }\n  .btn.btn-outline.yellow-crusta:hover, .btn.btn-outline.yellow-crusta:active, .btn.btn-outline.yellow-crusta:active:hover, .btn.btn-outline.yellow-crusta:active:focus, .btn.btn-outline.yellow-crusta:focus, .btn.btn-outline.yellow-crusta.active {\n    border-color: #f3c200;\n    color: #ffffff;\n    background-color: #f3c200; }\n\n.btn.yellow-crusta-stripe {\n  border-left: 4px solid #f3c200 !important; }\n\n.btn.yellow-lemon:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #F7CA18;\n  border-color: #F7CA18; }\n  .btn.yellow-lemon:not(.btn-outline):focus, .btn.yellow-lemon:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #d5ab07;\n    border-color: #8b7005; }\n  .btn.yellow-lemon:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #d5ab07;\n    border-color: #cba307; }\n  .btn.yellow-lemon:not(.btn-outline):active, .btn.yellow-lemon:not(.btn-outline).active,\n  .open > .btn.yellow-lemon:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #d5ab07;\n    border-color: #cba307; }\n    .btn.yellow-lemon:not(.btn-outline):active:hover, .btn.yellow-lemon:not(.btn-outline):active:focus, .btn.yellow-lemon:not(.btn-outline):active.focus, .btn.yellow-lemon:not(.btn-outline).active:hover, .btn.yellow-lemon:not(.btn-outline).active:focus, .btn.yellow-lemon:not(.btn-outline).active.focus,\n    .open > .btn.yellow-lemon:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.yellow-lemon:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.yellow-lemon:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #b28f06;\n      border-color: #8b7005; }\n  .btn.yellow-lemon:not(.btn-outline):active, .btn.yellow-lemon:not(.btn-outline).active,\n  .open > .btn.yellow-lemon:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.yellow-lemon:not(.btn-outline).disabled:hover, .btn.yellow-lemon:not(.btn-outline).disabled:focus, .btn.yellow-lemon:not(.btn-outline).disabled.focus, .btn.yellow-lemon:not(.btn-outline)[disabled]:hover, .btn.yellow-lemon:not(.btn-outline)[disabled]:focus, .btn.yellow-lemon:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.yellow-lemon:not(.btn-outline):hover,\n  fieldset[disabled] .btn.yellow-lemon:not(.btn-outline):focus,\n  fieldset[disabled] .btn.yellow-lemon:not(.btn-outline).focus {\n    background-color: #F7CA18;\n    border-color: #F7CA18; }\n  .btn.yellow-lemon:not(.btn-outline) .badge {\n    color: #F7CA18;\n    background-color: #ffffff; }\n\n.btn.btn-outline.yellow-lemon {\n  border-color: #F7CA18;\n  color: #F7CA18;\n  background: none; }\n  .btn.btn-outline.yellow-lemon:hover, .btn.btn-outline.yellow-lemon:active, .btn.btn-outline.yellow-lemon:active:hover, .btn.btn-outline.yellow-lemon:active:focus, .btn.btn-outline.yellow-lemon:focus, .btn.btn-outline.yellow-lemon.active {\n    border-color: #F7CA18;\n    color: #ffffff;\n    background-color: #F7CA18; }\n\n.btn.yellow-lemon-stripe {\n  border-left: 4px solid #F7CA18 !important; }\n\n.btn.yellow-saffron:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #F4D03F;\n  border-color: #F4D03F; }\n  .btn.yellow-saffron:not(.btn-outline):focus, .btn.yellow-saffron:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #f1c40f;\n    border-color: #aa8a0a; }\n  .btn.yellow-saffron:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #f1c40f;\n    border-color: #e8bd0d; }\n  .btn.yellow-saffron:not(.btn-outline):active, .btn.yellow-saffron:not(.btn-outline).active,\n  .open > .btn.yellow-saffron:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #f1c40f;\n    border-color: #e8bd0d; }\n    .btn.yellow-saffron:not(.btn-outline):active:hover, .btn.yellow-saffron:not(.btn-outline):active:focus, .btn.yellow-saffron:not(.btn-outline):active.focus, .btn.yellow-saffron:not(.btn-outline).active:hover, .btn.yellow-saffron:not(.btn-outline).active:focus, .btn.yellow-saffron:not(.btn-outline).active.focus,\n    .open > .btn.yellow-saffron:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.yellow-saffron:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.yellow-saffron:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #d0a90c;\n      border-color: #aa8a0a; }\n  .btn.yellow-saffron:not(.btn-outline):active, .btn.yellow-saffron:not(.btn-outline).active,\n  .open > .btn.yellow-saffron:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.yellow-saffron:not(.btn-outline).disabled:hover, .btn.yellow-saffron:not(.btn-outline).disabled:focus, .btn.yellow-saffron:not(.btn-outline).disabled.focus, .btn.yellow-saffron:not(.btn-outline)[disabled]:hover, .btn.yellow-saffron:not(.btn-outline)[disabled]:focus, .btn.yellow-saffron:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.yellow-saffron:not(.btn-outline):hover,\n  fieldset[disabled] .btn.yellow-saffron:not(.btn-outline):focus,\n  fieldset[disabled] .btn.yellow-saffron:not(.btn-outline).focus {\n    background-color: #F4D03F;\n    border-color: #F4D03F; }\n  .btn.yellow-saffron:not(.btn-outline) .badge {\n    color: #F4D03F;\n    background-color: #ffffff; }\n\n.btn.btn-outline.yellow-saffron {\n  border-color: #F4D03F;\n  color: #F4D03F;\n  background: none; }\n  .btn.btn-outline.yellow-saffron:hover, .btn.btn-outline.yellow-saffron:active, .btn.btn-outline.yellow-saffron:active:hover, .btn.btn-outline.yellow-saffron:active:focus, .btn.btn-outline.yellow-saffron:focus, .btn.btn-outline.yellow-saffron.active {\n    border-color: #F4D03F;\n    color: #ffffff;\n    background-color: #F4D03F; }\n\n.btn.yellow-saffron-stripe {\n  border-left: 4px solid #F4D03F !important; }\n\n.btn.yellow-soft:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #c8d046;\n  border-color: #c8d046; }\n  .btn.yellow-soft:not(.btn-outline):focus, .btn.yellow-soft:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #adb52e;\n    border-color: #73781e; }\n  .btn.yellow-soft:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #adb52e;\n    border-color: #a5ad2c; }\n  .btn.yellow-soft:not(.btn-outline):active, .btn.yellow-soft:not(.btn-outline).active,\n  .open > .btn.yellow-soft:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #adb52e;\n    border-color: #a5ad2c; }\n    .btn.yellow-soft:not(.btn-outline):active:hover, .btn.yellow-soft:not(.btn-outline):active:focus, .btn.yellow-soft:not(.btn-outline):active.focus, .btn.yellow-soft:not(.btn-outline).active:hover, .btn.yellow-soft:not(.btn-outline).active:focus, .btn.yellow-soft:not(.btn-outline).active.focus,\n    .open > .btn.yellow-soft:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.yellow-soft:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.yellow-soft:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #929927;\n      border-color: #73781e; }\n  .btn.yellow-soft:not(.btn-outline):active, .btn.yellow-soft:not(.btn-outline).active,\n  .open > .btn.yellow-soft:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.yellow-soft:not(.btn-outline).disabled:hover, .btn.yellow-soft:not(.btn-outline).disabled:focus, .btn.yellow-soft:not(.btn-outline).disabled.focus, .btn.yellow-soft:not(.btn-outline)[disabled]:hover, .btn.yellow-soft:not(.btn-outline)[disabled]:focus, .btn.yellow-soft:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.yellow-soft:not(.btn-outline):hover,\n  fieldset[disabled] .btn.yellow-soft:not(.btn-outline):focus,\n  fieldset[disabled] .btn.yellow-soft:not(.btn-outline).focus {\n    background-color: #c8d046;\n    border-color: #c8d046; }\n  .btn.yellow-soft:not(.btn-outline) .badge {\n    color: #c8d046;\n    background-color: #ffffff; }\n\n.btn.btn-outline.yellow-soft {\n  border-color: #c8d046;\n  color: #c8d046;\n  background: none; }\n  .btn.btn-outline.yellow-soft:hover, .btn.btn-outline.yellow-soft:active, .btn.btn-outline.yellow-soft:active:hover, .btn.btn-outline.yellow-soft:active:focus, .btn.btn-outline.yellow-soft:focus, .btn.btn-outline.yellow-soft.active {\n    border-color: #c8d046;\n    color: #ffffff;\n    background-color: #c8d046; }\n\n.btn.yellow-soft-stripe {\n  border-left: 4px solid #c8d046 !important; }\n\n.btn.yellow-haze:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #c5bf66;\n  border-color: #c5bf66; }\n  .btn.yellow-haze:not(.btn-outline):focus, .btn.yellow-haze:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #b4ad44;\n    border-color: #7c772f; }\n  .btn.yellow-haze:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #b4ad44;\n    border-color: #aca641; }\n  .btn.yellow-haze:not(.btn-outline):active, .btn.yellow-haze:not(.btn-outline).active,\n  .open > .btn.yellow-haze:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #b4ad44;\n    border-color: #aca641; }\n    .btn.yellow-haze:not(.btn-outline):active:hover, .btn.yellow-haze:not(.btn-outline):active:focus, .btn.yellow-haze:not(.btn-outline):active.focus, .btn.yellow-haze:not(.btn-outline).active:hover, .btn.yellow-haze:not(.btn-outline).active:focus, .btn.yellow-haze:not(.btn-outline).active.focus,\n    .open > .btn.yellow-haze:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.yellow-haze:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.yellow-haze:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #9a943a;\n      border-color: #7c772f; }\n  .btn.yellow-haze:not(.btn-outline):active, .btn.yellow-haze:not(.btn-outline).active,\n  .open > .btn.yellow-haze:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.yellow-haze:not(.btn-outline).disabled:hover, .btn.yellow-haze:not(.btn-outline).disabled:focus, .btn.yellow-haze:not(.btn-outline).disabled.focus, .btn.yellow-haze:not(.btn-outline)[disabled]:hover, .btn.yellow-haze:not(.btn-outline)[disabled]:focus, .btn.yellow-haze:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.yellow-haze:not(.btn-outline):hover,\n  fieldset[disabled] .btn.yellow-haze:not(.btn-outline):focus,\n  fieldset[disabled] .btn.yellow-haze:not(.btn-outline).focus {\n    background-color: #c5bf66;\n    border-color: #c5bf66; }\n  .btn.yellow-haze:not(.btn-outline) .badge {\n    color: #c5bf66;\n    background-color: #ffffff; }\n\n.btn.btn-outline.yellow-haze {\n  border-color: #c5bf66;\n  color: #c5bf66;\n  background: none; }\n  .btn.btn-outline.yellow-haze:hover, .btn.btn-outline.yellow-haze:active, .btn.btn-outline.yellow-haze:active:hover, .btn.btn-outline.yellow-haze:active:focus, .btn.btn-outline.yellow-haze:focus, .btn.btn-outline.yellow-haze.active {\n    border-color: #c5bf66;\n    color: #ffffff;\n    background-color: #c5bf66; }\n\n.btn.yellow-haze-stripe {\n  border-left: 4px solid #c5bf66 !important; }\n\n.btn.yellow-mint:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #c5b96b;\n  border-color: #c5b96b; }\n  .btn.yellow-mint:not(.btn-outline):focus, .btn.yellow-mint:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #b6a747;\n    border-color: #7f7532; }\n  .btn.yellow-mint:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #b6a747;\n    border-color: #aea044; }\n  .btn.yellow-mint:not(.btn-outline):active, .btn.yellow-mint:not(.btn-outline).active,\n  .open > .btn.yellow-mint:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #b6a747;\n    border-color: #aea044; }\n    .btn.yellow-mint:not(.btn-outline):active:hover, .btn.yellow-mint:not(.btn-outline):active:focus, .btn.yellow-mint:not(.btn-outline):active.focus, .btn.yellow-mint:not(.btn-outline).active:hover, .btn.yellow-mint:not(.btn-outline).active:focus, .btn.yellow-mint:not(.btn-outline).active.focus,\n    .open > .btn.yellow-mint:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.yellow-mint:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.yellow-mint:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #9c8f3d;\n      border-color: #7f7532; }\n  .btn.yellow-mint:not(.btn-outline):active, .btn.yellow-mint:not(.btn-outline).active,\n  .open > .btn.yellow-mint:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.yellow-mint:not(.btn-outline).disabled:hover, .btn.yellow-mint:not(.btn-outline).disabled:focus, .btn.yellow-mint:not(.btn-outline).disabled.focus, .btn.yellow-mint:not(.btn-outline)[disabled]:hover, .btn.yellow-mint:not(.btn-outline)[disabled]:focus, .btn.yellow-mint:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.yellow-mint:not(.btn-outline):hover,\n  fieldset[disabled] .btn.yellow-mint:not(.btn-outline):focus,\n  fieldset[disabled] .btn.yellow-mint:not(.btn-outline).focus {\n    background-color: #c5b96b;\n    border-color: #c5b96b; }\n  .btn.yellow-mint:not(.btn-outline) .badge {\n    color: #c5b96b;\n    background-color: #ffffff; }\n\n.btn.btn-outline.yellow-mint {\n  border-color: #c5b96b;\n  color: #c5b96b;\n  background: none; }\n  .btn.btn-outline.yellow-mint:hover, .btn.btn-outline.yellow-mint:active, .btn.btn-outline.yellow-mint:active:hover, .btn.btn-outline.yellow-mint:active:focus, .btn.btn-outline.yellow-mint:focus, .btn.btn-outline.yellow-mint.active {\n    border-color: #c5b96b;\n    color: #ffffff;\n    background-color: #c5b96b; }\n\n.btn.yellow-mint-stripe {\n  border-left: 4px solid #c5b96b !important; }\n\n.btn.purple:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #8E44AD;\n  border-color: #8E44AD; }\n  .btn.purple:not(.btn-outline):focus, .btn.purple:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #703688;\n    border-color: #432051; }\n  .btn.purple:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #703688;\n    border-color: #6a3381; }\n  .btn.purple:not(.btn-outline):active, .btn.purple:not(.btn-outline).active,\n  .open > .btn.purple:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #703688;\n    border-color: #6a3381; }\n    .btn.purple:not(.btn-outline):active:hover, .btn.purple:not(.btn-outline):active:focus, .btn.purple:not(.btn-outline):active.focus, .btn.purple:not(.btn-outline).active:hover, .btn.purple:not(.btn-outline).active:focus, .btn.purple:not(.btn-outline).active.focus,\n    .open > .btn.purple:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.purple:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.purple:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #5b2c6f;\n      border-color: #432051; }\n  .btn.purple:not(.btn-outline):active, .btn.purple:not(.btn-outline).active,\n  .open > .btn.purple:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.purple:not(.btn-outline).disabled:hover, .btn.purple:not(.btn-outline).disabled:focus, .btn.purple:not(.btn-outline).disabled.focus, .btn.purple:not(.btn-outline)[disabled]:hover, .btn.purple:not(.btn-outline)[disabled]:focus, .btn.purple:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.purple:not(.btn-outline):hover,\n  fieldset[disabled] .btn.purple:not(.btn-outline):focus,\n  fieldset[disabled] .btn.purple:not(.btn-outline).focus {\n    background-color: #8E44AD;\n    border-color: #8E44AD; }\n  .btn.purple:not(.btn-outline) .badge {\n    color: #8E44AD;\n    background-color: #ffffff; }\n\n.btn.btn-outline.purple {\n  border-color: #8E44AD;\n  color: #8E44AD;\n  background: none; }\n  .btn.btn-outline.purple:hover, .btn.btn-outline.purple:active, .btn.btn-outline.purple:active:hover, .btn.btn-outline.purple:active:focus, .btn.btn-outline.purple:focus, .btn.btn-outline.purple.active {\n    border-color: #8E44AD;\n    color: #ffffff;\n    background-color: #8E44AD; }\n\n.btn.purple-stripe {\n  border-left: 4px solid #8E44AD !important; }\n\n.btn.purple-plum:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #8775a7;\n  border-color: #8775a7; }\n  .btn.purple-plum:not(.btn-outline):focus, .btn.purple-plum:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #6d5b8e;\n    border-color: #493d60; }\n  .btn.purple-plum:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #6d5b8e;\n    border-color: #685788; }\n  .btn.purple-plum:not(.btn-outline):active, .btn.purple-plum:not(.btn-outline).active,\n  .open > .btn.purple-plum:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #6d5b8e;\n    border-color: #685788; }\n    .btn.purple-plum:not(.btn-outline):active:hover, .btn.purple-plum:not(.btn-outline):active:focus, .btn.purple-plum:not(.btn-outline):active.focus, .btn.purple-plum:not(.btn-outline).active:hover, .btn.purple-plum:not(.btn-outline).active:focus, .btn.purple-plum:not(.btn-outline).active.focus,\n    .open > .btn.purple-plum:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.purple-plum:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.purple-plum:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #5d4d78;\n      border-color: #493d60; }\n  .btn.purple-plum:not(.btn-outline):active, .btn.purple-plum:not(.btn-outline).active,\n  .open > .btn.purple-plum:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.purple-plum:not(.btn-outline).disabled:hover, .btn.purple-plum:not(.btn-outline).disabled:focus, .btn.purple-plum:not(.btn-outline).disabled.focus, .btn.purple-plum:not(.btn-outline)[disabled]:hover, .btn.purple-plum:not(.btn-outline)[disabled]:focus, .btn.purple-plum:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.purple-plum:not(.btn-outline):hover,\n  fieldset[disabled] .btn.purple-plum:not(.btn-outline):focus,\n  fieldset[disabled] .btn.purple-plum:not(.btn-outline).focus {\n    background-color: #8775a7;\n    border-color: #8775a7; }\n  .btn.purple-plum:not(.btn-outline) .badge {\n    color: #8775a7;\n    background-color: #ffffff; }\n\n.btn.btn-outline.purple-plum {\n  border-color: #8775a7;\n  color: #8775a7;\n  background: none; }\n  .btn.btn-outline.purple-plum:hover, .btn.btn-outline.purple-plum:active, .btn.btn-outline.purple-plum:active:hover, .btn.btn-outline.purple-plum:active:focus, .btn.btn-outline.purple-plum:focus, .btn.btn-outline.purple-plum.active {\n    border-color: #8775a7;\n    color: #ffffff;\n    background-color: #8775a7; }\n\n.btn.purple-plum-stripe {\n  border-left: 4px solid #8775a7 !important; }\n\n.btn.purple-medium:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #BF55EC;\n  border-color: #BF55EC; }\n  .btn.purple-medium:not(.btn-outline):focus, .btn.purple-medium:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #ae27e7;\n    border-color: #8013ae; }\n  .btn.purple-medium:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #ae27e7;\n    border-color: #aa1ee6; }\n  .btn.purple-medium:not(.btn-outline):active, .btn.purple-medium:not(.btn-outline).active,\n  .open > .btn.purple-medium:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #ae27e7;\n    border-color: #aa1ee6; }\n    .btn.purple-medium:not(.btn-outline):active:hover, .btn.purple-medium:not(.btn-outline):active:focus, .btn.purple-medium:not(.btn-outline):active.focus, .btn.purple-medium:not(.btn-outline).active:hover, .btn.purple-medium:not(.btn-outline).active:focus, .btn.purple-medium:not(.btn-outline).active.focus,\n    .open > .btn.purple-medium:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.purple-medium:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.purple-medium:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #9b18d3;\n      border-color: #8013ae; }\n  .btn.purple-medium:not(.btn-outline):active, .btn.purple-medium:not(.btn-outline).active,\n  .open > .btn.purple-medium:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.purple-medium:not(.btn-outline).disabled:hover, .btn.purple-medium:not(.btn-outline).disabled:focus, .btn.purple-medium:not(.btn-outline).disabled.focus, .btn.purple-medium:not(.btn-outline)[disabled]:hover, .btn.purple-medium:not(.btn-outline)[disabled]:focus, .btn.purple-medium:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.purple-medium:not(.btn-outline):hover,\n  fieldset[disabled] .btn.purple-medium:not(.btn-outline):focus,\n  fieldset[disabled] .btn.purple-medium:not(.btn-outline).focus {\n    background-color: #BF55EC;\n    border-color: #BF55EC; }\n  .btn.purple-medium:not(.btn-outline) .badge {\n    color: #BF55EC;\n    background-color: #ffffff; }\n\n.btn.btn-outline.purple-medium {\n  border-color: #BF55EC;\n  color: #BF55EC;\n  background: none; }\n  .btn.btn-outline.purple-medium:hover, .btn.btn-outline.purple-medium:active, .btn.btn-outline.purple-medium:active:hover, .btn.btn-outline.purple-medium:active:focus, .btn.btn-outline.purple-medium:focus, .btn.btn-outline.purple-medium.active {\n    border-color: #BF55EC;\n    color: #ffffff;\n    background-color: #BF55EC; }\n\n.btn.purple-medium-stripe {\n  border-left: 4px solid #BF55EC !important; }\n\n.btn.purple-studio:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #8E44AD;\n  border-color: #8E44AD; }\n  .btn.purple-studio:not(.btn-outline):focus, .btn.purple-studio:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #703688;\n    border-color: #432051; }\n  .btn.purple-studio:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #703688;\n    border-color: #6a3381; }\n  .btn.purple-studio:not(.btn-outline):active, .btn.purple-studio:not(.btn-outline).active,\n  .open > .btn.purple-studio:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #703688;\n    border-color: #6a3381; }\n    .btn.purple-studio:not(.btn-outline):active:hover, .btn.purple-studio:not(.btn-outline):active:focus, .btn.purple-studio:not(.btn-outline):active.focus, .btn.purple-studio:not(.btn-outline).active:hover, .btn.purple-studio:not(.btn-outline).active:focus, .btn.purple-studio:not(.btn-outline).active.focus,\n    .open > .btn.purple-studio:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.purple-studio:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.purple-studio:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #5b2c6f;\n      border-color: #432051; }\n  .btn.purple-studio:not(.btn-outline):active, .btn.purple-studio:not(.btn-outline).active,\n  .open > .btn.purple-studio:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.purple-studio:not(.btn-outline).disabled:hover, .btn.purple-studio:not(.btn-outline).disabled:focus, .btn.purple-studio:not(.btn-outline).disabled.focus, .btn.purple-studio:not(.btn-outline)[disabled]:hover, .btn.purple-studio:not(.btn-outline)[disabled]:focus, .btn.purple-studio:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.purple-studio:not(.btn-outline):hover,\n  fieldset[disabled] .btn.purple-studio:not(.btn-outline):focus,\n  fieldset[disabled] .btn.purple-studio:not(.btn-outline).focus {\n    background-color: #8E44AD;\n    border-color: #8E44AD; }\n  .btn.purple-studio:not(.btn-outline) .badge {\n    color: #8E44AD;\n    background-color: #ffffff; }\n\n.btn.btn-outline.purple-studio {\n  border-color: #8E44AD;\n  color: #8E44AD;\n  background: none; }\n  .btn.btn-outline.purple-studio:hover, .btn.btn-outline.purple-studio:active, .btn.btn-outline.purple-studio:active:hover, .btn.btn-outline.purple-studio:active:focus, .btn.btn-outline.purple-studio:focus, .btn.btn-outline.purple-studio.active {\n    border-color: #8E44AD;\n    color: #ffffff;\n    background-color: #8E44AD; }\n\n.btn.purple-studio-stripe {\n  border-left: 4px solid #8E44AD !important; }\n\n.btn.purple-wisteria:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #9B59B6;\n  border-color: #9B59B6; }\n  .btn.purple-wisteria:not(.btn-outline):focus, .btn.purple-wisteria:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #804399;\n    border-color: #532c64; }\n  .btn.purple-wisteria:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #804399;\n    border-color: #7a4092; }\n  .btn.purple-wisteria:not(.btn-outline):active, .btn.purple-wisteria:not(.btn-outline).active,\n  .open > .btn.purple-wisteria:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #804399;\n    border-color: #7a4092; }\n    .btn.purple-wisteria:not(.btn-outline):active:hover, .btn.purple-wisteria:not(.btn-outline):active:focus, .btn.purple-wisteria:not(.btn-outline):active.focus, .btn.purple-wisteria:not(.btn-outline).active:hover, .btn.purple-wisteria:not(.btn-outline).active:focus, .btn.purple-wisteria:not(.btn-outline).active.focus,\n    .open > .btn.purple-wisteria:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.purple-wisteria:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.purple-wisteria:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #6b3880;\n      border-color: #532c64; }\n  .btn.purple-wisteria:not(.btn-outline):active, .btn.purple-wisteria:not(.btn-outline).active,\n  .open > .btn.purple-wisteria:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.purple-wisteria:not(.btn-outline).disabled:hover, .btn.purple-wisteria:not(.btn-outline).disabled:focus, .btn.purple-wisteria:not(.btn-outline).disabled.focus, .btn.purple-wisteria:not(.btn-outline)[disabled]:hover, .btn.purple-wisteria:not(.btn-outline)[disabled]:focus, .btn.purple-wisteria:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.purple-wisteria:not(.btn-outline):hover,\n  fieldset[disabled] .btn.purple-wisteria:not(.btn-outline):focus,\n  fieldset[disabled] .btn.purple-wisteria:not(.btn-outline).focus {\n    background-color: #9B59B6;\n    border-color: #9B59B6; }\n  .btn.purple-wisteria:not(.btn-outline) .badge {\n    color: #9B59B6;\n    background-color: #ffffff; }\n\n.btn.btn-outline.purple-wisteria {\n  border-color: #9B59B6;\n  color: #9B59B6;\n  background: none; }\n  .btn.btn-outline.purple-wisteria:hover, .btn.btn-outline.purple-wisteria:active, .btn.btn-outline.purple-wisteria:active:hover, .btn.btn-outline.purple-wisteria:active:focus, .btn.btn-outline.purple-wisteria:focus, .btn.btn-outline.purple-wisteria.active {\n    border-color: #9B59B6;\n    color: #ffffff;\n    background-color: #9B59B6; }\n\n.btn.purple-wisteria-stripe {\n  border-left: 4px solid #9B59B6 !important; }\n\n.btn.purple-seance:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #9A12B3;\n  border-color: #9A12B3; }\n  .btn.purple-seance:not(.btn-outline):focus, .btn.purple-seance:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #720d85;\n    border-color: #36063f; }\n  .btn.purple-seance:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #720d85;\n    border-color: #6a0c7b; }\n  .btn.purple-seance:not(.btn-outline):active, .btn.purple-seance:not(.btn-outline).active,\n  .open > .btn.purple-seance:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #720d85;\n    border-color: #6a0c7b; }\n    .btn.purple-seance:not(.btn-outline):active:hover, .btn.purple-seance:not(.btn-outline):active:focus, .btn.purple-seance:not(.btn-outline):active.focus, .btn.purple-seance:not(.btn-outline).active:hover, .btn.purple-seance:not(.btn-outline).active:focus, .btn.purple-seance:not(.btn-outline).active.focus,\n    .open > .btn.purple-seance:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.purple-seance:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.purple-seance:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #560a64;\n      border-color: #36063f; }\n  .btn.purple-seance:not(.btn-outline):active, .btn.purple-seance:not(.btn-outline).active,\n  .open > .btn.purple-seance:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.purple-seance:not(.btn-outline).disabled:hover, .btn.purple-seance:not(.btn-outline).disabled:focus, .btn.purple-seance:not(.btn-outline).disabled.focus, .btn.purple-seance:not(.btn-outline)[disabled]:hover, .btn.purple-seance:not(.btn-outline)[disabled]:focus, .btn.purple-seance:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.purple-seance:not(.btn-outline):hover,\n  fieldset[disabled] .btn.purple-seance:not(.btn-outline):focus,\n  fieldset[disabled] .btn.purple-seance:not(.btn-outline).focus {\n    background-color: #9A12B3;\n    border-color: #9A12B3; }\n  .btn.purple-seance:not(.btn-outline) .badge {\n    color: #9A12B3;\n    background-color: #ffffff; }\n\n.btn.btn-outline.purple-seance {\n  border-color: #9A12B3;\n  color: #9A12B3;\n  background: none; }\n  .btn.btn-outline.purple-seance:hover, .btn.btn-outline.purple-seance:active, .btn.btn-outline.purple-seance:active:hover, .btn.btn-outline.purple-seance:active:focus, .btn.btn-outline.purple-seance:focus, .btn.btn-outline.purple-seance.active {\n    border-color: #9A12B3;\n    color: #ffffff;\n    background-color: #9A12B3; }\n\n.btn.purple-seance-stripe {\n  border-left: 4px solid #9A12B3 !important; }\n\n.btn.purple-intense:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #8775a7;\n  border-color: #8775a7; }\n  .btn.purple-intense:not(.btn-outline):focus, .btn.purple-intense:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #6d5b8e;\n    border-color: #493d60; }\n  .btn.purple-intense:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #6d5b8e;\n    border-color: #685788; }\n  .btn.purple-intense:not(.btn-outline):active, .btn.purple-intense:not(.btn-outline).active,\n  .open > .btn.purple-intense:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #6d5b8e;\n    border-color: #685788; }\n    .btn.purple-intense:not(.btn-outline):active:hover, .btn.purple-intense:not(.btn-outline):active:focus, .btn.purple-intense:not(.btn-outline):active.focus, .btn.purple-intense:not(.btn-outline).active:hover, .btn.purple-intense:not(.btn-outline).active:focus, .btn.purple-intense:not(.btn-outline).active.focus,\n    .open > .btn.purple-intense:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.purple-intense:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.purple-intense:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #5d4d78;\n      border-color: #493d60; }\n  .btn.purple-intense:not(.btn-outline):active, .btn.purple-intense:not(.btn-outline).active,\n  .open > .btn.purple-intense:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.purple-intense:not(.btn-outline).disabled:hover, .btn.purple-intense:not(.btn-outline).disabled:focus, .btn.purple-intense:not(.btn-outline).disabled.focus, .btn.purple-intense:not(.btn-outline)[disabled]:hover, .btn.purple-intense:not(.btn-outline)[disabled]:focus, .btn.purple-intense:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.purple-intense:not(.btn-outline):hover,\n  fieldset[disabled] .btn.purple-intense:not(.btn-outline):focus,\n  fieldset[disabled] .btn.purple-intense:not(.btn-outline).focus {\n    background-color: #8775a7;\n    border-color: #8775a7; }\n  .btn.purple-intense:not(.btn-outline) .badge {\n    color: #8775a7;\n    background-color: #ffffff; }\n\n.btn.btn-outline.purple-intense {\n  border-color: #8775a7;\n  color: #8775a7;\n  background: none; }\n  .btn.btn-outline.purple-intense:hover, .btn.btn-outline.purple-intense:active, .btn.btn-outline.purple-intense:active:hover, .btn.btn-outline.purple-intense:active:focus, .btn.btn-outline.purple-intense:focus, .btn.btn-outline.purple-intense.active {\n    border-color: #8775a7;\n    color: #ffffff;\n    background-color: #8775a7; }\n\n.btn.purple-intense-stripe {\n  border-left: 4px solid #8775a7 !important; }\n\n.btn.purple-sharp:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #796799;\n  border-color: #796799; }\n  .btn.purple-sharp:not(.btn-outline):focus, .btn.purple-sharp:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #61527b;\n    border-color: #3d344d; }\n  .btn.purple-sharp:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #61527b;\n    border-color: #5c4e75; }\n  .btn.purple-sharp:not(.btn-outline):active, .btn.purple-sharp:not(.btn-outline).active,\n  .open > .btn.purple-sharp:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #61527b;\n    border-color: #5c4e75; }\n    .btn.purple-sharp:not(.btn-outline):active:hover, .btn.purple-sharp:not(.btn-outline):active:focus, .btn.purple-sharp:not(.btn-outline):active.focus, .btn.purple-sharp:not(.btn-outline).active:hover, .btn.purple-sharp:not(.btn-outline).active:focus, .btn.purple-sharp:not(.btn-outline).active.focus,\n    .open > .btn.purple-sharp:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.purple-sharp:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.purple-sharp:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #504465;\n      border-color: #3d344d; }\n  .btn.purple-sharp:not(.btn-outline):active, .btn.purple-sharp:not(.btn-outline).active,\n  .open > .btn.purple-sharp:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.purple-sharp:not(.btn-outline).disabled:hover, .btn.purple-sharp:not(.btn-outline).disabled:focus, .btn.purple-sharp:not(.btn-outline).disabled.focus, .btn.purple-sharp:not(.btn-outline)[disabled]:hover, .btn.purple-sharp:not(.btn-outline)[disabled]:focus, .btn.purple-sharp:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.purple-sharp:not(.btn-outline):hover,\n  fieldset[disabled] .btn.purple-sharp:not(.btn-outline):focus,\n  fieldset[disabled] .btn.purple-sharp:not(.btn-outline).focus {\n    background-color: #796799;\n    border-color: #796799; }\n  .btn.purple-sharp:not(.btn-outline) .badge {\n    color: #796799;\n    background-color: #ffffff; }\n\n.btn.btn-outline.purple-sharp {\n  border-color: #796799;\n  color: #796799;\n  background: none; }\n  .btn.btn-outline.purple-sharp:hover, .btn.btn-outline.purple-sharp:active, .btn.btn-outline.purple-sharp:active:hover, .btn.btn-outline.purple-sharp:active:focus, .btn.btn-outline.purple-sharp:focus, .btn.btn-outline.purple-sharp.active {\n    border-color: #796799;\n    color: #ffffff;\n    background-color: #796799; }\n\n.btn.purple-sharp-stripe {\n  border-left: 4px solid #796799 !important; }\n\n.btn.purple-soft:not(.btn-outline) {\n  color: #ffffff;\n  background-color: #8877a9;\n  border-color: #8877a9; }\n  .btn.purple-soft:not(.btn-outline):focus, .btn.purple-soft:not(.btn-outline).focus {\n    color: #ffffff;\n    background-color: #6e5c91;\n    border-color: #4a3e62; }\n  .btn.purple-soft:not(.btn-outline):hover {\n    color: #ffffff;\n    background-color: #6e5c91;\n    border-color: #69588b; }\n  .btn.purple-soft:not(.btn-outline):active, .btn.purple-soft:not(.btn-outline).active,\n  .open > .btn.purple-soft:not(.btn-outline).dropdown-toggle {\n    color: #ffffff;\n    background-color: #6e5c91;\n    border-color: #69588b; }\n    .btn.purple-soft:not(.btn-outline):active:hover, .btn.purple-soft:not(.btn-outline):active:focus, .btn.purple-soft:not(.btn-outline):active.focus, .btn.purple-soft:not(.btn-outline).active:hover, .btn.purple-soft:not(.btn-outline).active:focus, .btn.purple-soft:not(.btn-outline).active.focus,\n    .open > .btn.purple-soft:not(.btn-outline).dropdown-toggle:hover,\n    .open > .btn.purple-soft:not(.btn-outline).dropdown-toggle:focus,\n    .open > .btn.purple-soft:not(.btn-outline).dropdown-toggle.focus {\n      color: #ffffff;\n      background-color: #5d4e7b;\n      border-color: #4a3e62; }\n  .btn.purple-soft:not(.btn-outline):active, .btn.purple-soft:not(.btn-outline).active,\n  .open > .btn.purple-soft:not(.btn-outline).dropdown-toggle {\n    background-image: none; }\n  .btn.purple-soft:not(.btn-outline).disabled:hover, .btn.purple-soft:not(.btn-outline).disabled:focus, .btn.purple-soft:not(.btn-outline).disabled.focus, .btn.purple-soft:not(.btn-outline)[disabled]:hover, .btn.purple-soft:not(.btn-outline)[disabled]:focus, .btn.purple-soft:not(.btn-outline)[disabled].focus,\n  fieldset[disabled] .btn.purple-soft:not(.btn-outline):hover,\n  fieldset[disabled] .btn.purple-soft:not(.btn-outline):focus,\n  fieldset[disabled] .btn.purple-soft:not(.btn-outline).focus {\n    background-color: #8877a9;\n    border-color: #8877a9; }\n  .btn.purple-soft:not(.btn-outline) .badge {\n    color: #8877a9;\n    background-color: #ffffff; }\n\n.btn.btn-outline.purple-soft {\n  border-color: #8877a9;\n  color: #8877a9;\n  background: none; }\n  .btn.btn-outline.purple-soft:hover, .btn.btn-outline.purple-soft:active, .btn.btn-outline.purple-soft:active:hover, .btn.btn-outline.purple-soft:active:focus, .btn.btn-outline.purple-soft:focus, .btn.btn-outline.purple-soft.active {\n    border-color: #8877a9;\n    color: #ffffff;\n    background-color: #8877a9; }\n\n.btn.purple-soft-stripe {\n  border-left: 4px solid #8877a9 !important; }\n\n/* Circle Buttons */\n.btn-circle {\n  border-radius: 25px !important;\n  overflow: hidden; }\n\n.btn-circle-right {\n  border-radius: 0 25px 25px 0 !important; }\n\n.btn-circle-left {\n  border-radius: 25px 0 0 25px !important; }\n\n.btn-circle-bottom {\n  border-radius: 0 0 25px 25px !important; }\n\n.btn-circle-top {\n  border-radius: 25px 25px 0 0 !important; }\n\n.btn-icon-only {\n  height: 34px;\n  width: 34px;\n  text-align: center;\n  padding-left: 0;\n  padding-right: 0; }\n  .btn-icon-only > [class^=\"icon-\"],\n  .btn-icon-only > i {\n    text-align: center;\n    margin-top: 2px; }\n\n.btn-group.btn-group-circle > .btn:first-child {\n  border-radius: 25px 0 0 25px !important; }\n\n.btn-group.btn-group-circle > .btn:last-child {\n  border-radius: 0 25px 25px 0 !important; }\n\n.btn-group.btn-group-devided > .btn {\n  margin-right: 5px; }\n  .btn-group.btn-group-devided > .btn:last-child {\n    margin-right: 0; }\n\n.btn-group-vertical.btn-group-vertical-circle > .btn:first-child {\n  border-radius: 25px 25px 0 0 !important; }\n\n.btn-group-vertical.btn-group-vertical-circle > .btn:last-child {\n  border-radius: 0 0 25px 25px !important; }\n\n/***\nImage Carousel\n***/\n.carousel.image-carousel .carousel-inner {\n  padding-top: 0;\n  padding-bottom: 0; }\n\n.carousel.image-carousel .carousel-control i {\n  position: absolute;\n  top: 40%; }\n\n.carousel.image-carousel.image-carousel-hoverable .carousel-control i {\n  display: none; }\n\n.carousel.image-carousel.image-carousel-hoverable:hover .carousel-control i {\n  display: inline-block; }\n\n.carousel.image-carousel .carousel-control.left i {\n  left: 10px; }\n\n.carousel.image-carousel .carousel-control.right i {\n  right: 10px; }\n\n.carousel.image-carousel .carousel-indicators {\n  margin-top: 10px;\n  bottom: -7px; }\n  .carousel.image-carousel .carousel-indicators li {\n    background-color: #666; }\n    .carousel.image-carousel .carousel-indicators li.active {\n      background-color: #666; }\n\n.carousel.image-carousel .carousel-caption {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 15px 15px 25px 15px;\n  background: #333333;\n  background: rgba(0, 0, 0, 0.75); }\n  .carousel.image-carousel .carousel-caption h4,\n  .carousel.image-carousel .carousel-caption h3,\n  .carousel.image-carousel .carousel-caption h2,\n  .carousel.image-carousel .carousel-caption p {\n    text-align: left;\n    line-height: 20px;\n    color: #ffffff; }\n  .carousel.image-carousel .carousel-caption h4,\n  .carousel.image-carousel .carousel-caption h3,\n  .carousel.image-carousel .carousel-caption h2 {\n    margin: 0 0 5px; }\n    .carousel.image-carousel .carousel-caption h4 a,\n    .carousel.image-carousel .carousel-caption h3 a,\n    .carousel.image-carousel .carousel-caption h2 a {\n      color: #aaa; }\n  .carousel.image-carousel .carousel-caption p {\n    margin-bottom: 0; }\n  .carousel.image-carousel .carousel-caption .item {\n    margin: 0; }\n\n/***\nCharts and statistics\n***/\n.chart,\n.pie,\n.bars {\n  overflow: hidden;\n  height: 300px;\n  width: 100%;\n  font-family: \"Open Sans\", sans-serif !important;\n  font-size: 14px; }\n\n/***\nStatistic lists\n***/\n.item-list.table .percent {\n  width: 30px;\n  float: right;\n  margin-right: 10px;\n  margin-top: 3px; }\n\n/***\nChart tooltips\n***/\n.chart-tooltip {\n  clear: both;\n  z-index: 100;\n  background-color: #736e6e !important;\n  padding: 5px !important;\n  color: #fff; }\n  .chart-tooltip .label {\n    clear: both;\n    display: block;\n    margin-bottom: 2px; }\n\n/***\nMini chart containers\n***/\n.bar-chart,\n.line-chart {\n  display: none; }\n\n/***\nChats\n***/\n.chats {\n  margin: 0;\n  padding: 0;\n  margin-top: -15px; }\n  .chats li {\n    list-style: none;\n    padding: 5px 0;\n    margin: 10px auto;\n    font-size: 12px; }\n    .chats li .body {\n      display: block; }\n    .chats li .avatar {\n      height: 45px;\n      width: 45px;\n      -webkit-border-radius: 50% !important;\n      -moz-border-radius: 50% !important;\n      border-radius: 50% !important; }\n    .chats li.in .avatar {\n      float: left;\n      margin-right: 10px; }\n    .chats li.out .avatar {\n      float: right;\n      margin-left: 10px; }\n    .chats li .name {\n      color: #3590c1;\n      font-size: 13px;\n      font-weight: 400; }\n    .chats li .datetime {\n      color: #333;\n      font-size: 13px;\n      font-weight: 400; }\n    .chats li .message {\n      display: block;\n      padding: 5px;\n      position: relative; }\n    .chats li.in .message {\n      text-align: left;\n      border-left: 2px solid #1BBC9B;\n      margin-left: 65px;\n      background: #fafafa; }\n      .chats li.in .message .arrow {\n        display: block;\n        position: absolute;\n        top: 5px;\n        left: -8px;\n        width: 0;\n        height: 0;\n        border-top: 8px solid transparent;\n        border-bottom: 8px solid transparent;\n        border-right: 8px solid #1BBC9B; }\n    .chats li.out .message {\n      border-right: 2px solid #F3565D;\n      margin-right: 65px;\n      background: #fafafa;\n      text-align: right; }\n      .chats li.out .message .arrow {\n        display: block;\n        position: absolute;\n        top: 5px;\n        right: -8px;\n        border-top: 8px solid transparent;\n        border-bottom: 8px solid transparent;\n        border-left: 8px solid #F3565D; }\n    .chats li.out .name,\n    .chats li.out .datetime {\n      text-align: right; }\n\n.chat-form {\n  margin-top: 15px;\n  padding: 10px;\n  background-color: #e9eff3;\n  overflow: hidden;\n  clear: both; }\n  .chat-form .input-cont {\n    margin-right: 40px; }\n    .chat-form .input-cont .form-control {\n      border: 1px solid #ddd;\n      width: 100%  !important;\n      margin-top: 0;\n      background-color: #fff !important; }\n      .chat-form .input-cont .form-control:focus {\n        border: 1px solid #4b8df9 !important; }\n  .chat-form .btn-cont {\n    margin-top: -41px;\n    position: relative;\n    float: right;\n    width: 44px; }\n    .chat-form .btn-cont .arrow {\n      position: absolute;\n      top: 17px;\n      right: 43px;\n      border-top: 8px solid transparent;\n      border-bottom: 8px solid transparent;\n      border-right: 8px solid #4d90fe;\n      -webkit-box-sizing: border-box;\n      -moz-box-sizing: border-box;\n      box-sizing: border-box; }\n    .chat-form .btn-cont .btn {\n      margin-top: 7px; }\n    .chat-form .btn-cont:hover .arrow {\n      border-right-color: #0362fd;\n      transition: all 0.3s; }\n    .chat-form .btn-cont:hover .btn {\n      background-color: #0362fd;\n      transition: all 0.3s; }\n\n/***\nCustomized Bootstrap Close Icon \n***/\n.close {\n  display: inline-block;\n  margin-top: 0px;\n  margin-right: 0px;\n  width: 9px;\n  height: 9px;\n  background-repeat: no-repeat !important;\n  text-indent: -10000px;\n  outline: none;\n  background-image: url(\"img/remove-icon-small.png\") !important; }\n\n/***\nCustomized Bootstrap Dropdowns\n***/\n/***\nDropdowns\n***/\n.dropup.open > .dropdown-toggle,\n.dropdown.open > .dropdown-toggle {\n  border-color: #ddd; }\n\n/***\nDropdown Menu\n***/\n/*rtl:ignore*/\n.dropdown-menu {\n  box-shadow: 5px 5px rgba(102, 102, 102, 0.1); }\n\n.dropdown-menu {\n  left: 0/*rtl:auto*/;\n  min-width: 175px;\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  float: left;\n  list-style: none;\n  text-shadow: none;\n  padding: 0px;\n  background-color: #ffffff;\n  margin: 10px  0px 0px 0px;\n  border: 1px solid #eee;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  -ms-border-radius: 4px;\n  -o-border-radius: 4px;\n  border-radius: 4px; }\n  .dropdown-menu li.divider {\n    background: #f1f3f6; }\n  .dropdown-menu li.header {\n    padding: 8px 14px 2px 14px; }\n  .dropdown-menu > li > a {\n    padding: 8px 16px;\n    color: #6f6f6f;\n    text-decoration: none;\n    display: block;\n    clear: both;\n    font-weight: 300;\n    line-height: 18px;\n    white-space: nowrap; }\n    .dropdown-menu > li > a > [class^=\"fa-\"],\n    .dropdown-menu > li > a > [class*=\" fa-\"] {\n      color: #888; }\n    .dropdown-menu > li > a > [class^=\"icon-\"],\n    .dropdown-menu > li > a > [class*=\" icon-\"] {\n      color: #666; }\n    .dropdown-menu > li > a > [class^=\"glyphicon-\"],\n    .dropdown-menu > li > a > [class*=\" glyphicon-\"] {\n      color: #888; }\n  .dropdown-menu > li:hover > a, .dropdown-menu > li.active > a, .dropdown-menu > li.active:hover > a {\n    text-decoration: none;\n    background-image: none;\n    background-color: #f6f6f6;\n    color: #555;\n    filter: none; }\n  .dropdown-menu.bottom-up {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 2px; }\n    .dropdown-menu.bottom-up:before, .dropdown-menu.bottom-up:after {\n      display: none; }\n  .dropdown-menu > li:first-child:hover > a {\n    border-radius: 4px 4px 0px 0px; }\n  .dropdown-menu > li:last-child:hover > a {\n    border-radius: 0px 0px 4px 4px; }\n\n.dropdown-hover:hover > .dropdown-menu {\n  display: block; }\n\n.dropdown > .dropdown-menu,\n.dropdown-toggle > .dropdown-menu,\n.btn-group > .dropdown-menu {\n  margin-top: 10px; }\n  .dropdown > .dropdown-menu:before,\n  .dropdown-toggle > .dropdown-menu:before,\n  .btn-group > .dropdown-menu:before {\n    position: absolute;\n    top: -8px;\n    left: 9px;\n    right: auto;\n    display: inline-block !important;\n    border-right: 8px solid transparent;\n    border-bottom: 8px solid #e0e0e0;\n    border-left: 8px solid transparent;\n    content: ''; }\n  .dropdown > .dropdown-menu:after,\n  .dropdown-toggle > .dropdown-menu:after,\n  .btn-group > .dropdown-menu:after {\n    position: absolute;\n    top: -7px;\n    left: 10px;\n    right: auto;\n    display: inline-block !important;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid #fff;\n    border-left: 7px solid transparent;\n    content: ''; }\n  .dropdown > .dropdown-menu.pull-left:before,\n  .dropdown-toggle > .dropdown-menu.pull-left:before,\n  .btn-group > .dropdown-menu.pull-left:before {\n    left: auto;\n    right: 9px; }\n  .dropdown > .dropdown-menu.pull-left:after,\n  .dropdown-toggle > .dropdown-menu.pull-left:after,\n  .btn-group > .dropdown-menu.pull-left:after {\n    left: auto;\n    right: 10px; }\n  .dropdown > .dropdown-menu.pull-right:before,\n  .dropdown-toggle > .dropdown-menu.pull-right:before,\n  .btn-group > .dropdown-menu.pull-right:before {\n    left: auto;\n    right: 9px; }\n  .dropdown > .dropdown-menu.pull-right:after,\n  .dropdown-toggle > .dropdown-menu.pull-right:after,\n  .btn-group > .dropdown-menu.pull-right:after {\n    left: auto;\n    right: 10px; }\n\n.dropdown.dropup > .dropdown-menu,\n.dropdown-toggle.dropup > .dropdown-menu,\n.btn-group.dropup > .dropdown-menu {\n  margin-top: 0px;\n  margin-bottom: 10px; }\n  .dropdown.dropup > .dropdown-menu:after, .dropdown.dropup > .dropdown-menu:before,\n  .dropdown-toggle.dropup > .dropdown-menu:after,\n  .dropdown-toggle.dropup > .dropdown-menu:before,\n  .btn-group.dropup > .dropdown-menu:after,\n  .btn-group.dropup > .dropdown-menu:before {\n    display: none !important; }\n\n.dropdown-toggle:after {\n  display: none; }\n\n/* Dropdown submenu support for Bootsrap 3 */\n.dropdown-submenu {\n  position: relative; }\n  .dropdown-submenu > .dropdown-menu {\n    top: 5px;\n    left: 100%;\n    margin-top: -6px;\n    margin-left: -1px; }\n  .dropdown-submenu > a:after {\n    position: absolute;\n    display: inline-block;\n    font-size: 14px;\n    right: 7px;\n    top: 7px;\n    font-family: FontAwesome;\n    height: auto;\n    content: \"\\f105\";\n    font-weight: 300; }\n  .dropdown-submenu:hover > .dropdown-menu {\n    display: block; }\n  .dropdown-submenu:hover > a:after {\n    border-left-color: #ffffff; }\n  .dropdown-submenu.pull-left {\n    float: none; }\n    .dropdown-submenu.pull-left > .dropdown-menu {\n      left: -100%;\n      margin-left: 10px; }\n  .dropup .dropdown-submenu > .dropdown-menu {\n    top: auto;\n    bottom: 0;\n    margin-top: 0;\n    margin-bottom: -2px; }\n\n.nav.pull-right > li > .dropdown-menu,\n.nav > li > .dropdown-menu.pull-right {\n  right: 0;\n  left: auto; }\n  .nav.pull-right > li > .dropdown-menu:before,\n  .nav > li > .dropdown-menu.pull-right:before {\n    right: 12px;\n    left: auto; }\n  .nav.pull-right > li > .dropdown-menu:after,\n  .nav > li > .dropdown-menu.pull-right:after {\n    right: 13px;\n    left: auto; }\n  .nav.pull-right > li > .dropdown-menu .dropdown-menu,\n  .nav > li > .dropdown-menu.pull-right .dropdown-menu {\n    right: 100%;\n    left: auto;\n    margin-right: -1px;\n    margin-left: 0; }\n\n@media (max-width: 767px) {\n  /* 767px */\n  .navbar-nav .open .dropdown-menu {\n    position: absolute;\n    float: left;\n    width: auto;\n    margin-top: 0;\n    background-color: #ffffff;\n    border: 1px solid #efefef;\n    box-shadow: 5px 5px rgba(102, 102, 102, 0.1); }\n    .navbar-nav .open .dropdown-menu > li > a {\n      padding: 6px 0 6px 13px;\n      color: #333; }\n    .navbar-nav .open .dropdown-menu > li > a:hover,\n    .navbar-nav .open .dropdown-menu > li > a:active {\n      background-color: #eee; } }\n\n/***\nDropdown Checkboxes\n***/\n.dropdown-content {\n  padding: 10px; }\n  .dropdown-content form {\n    margin: 0; }\n\n.dropdown.inline .dropdown-menu {\n  display: inline-block;\n  position: relative; }\n\n.dropdown-radiobuttons,\n.dropdown-checkboxes {\n  padding: 5px; }\n  .dropdown-radiobuttons label,\n  .dropdown-checkboxes label {\n    display: block;\n    font-weight: 300;\n    color: #333;\n    margin-bottom: 4px;\n    margin-top: 4px; }\n    .dropdown-radiobuttons label .radio,\n    .dropdown-checkboxes label .radio {\n      margin-right: 3px; }\n\n/*--------------------------------------------------\n    [Dropdown Menu v2]\n----------------------------------------------------*/\n.dropdown-menu-v2 {\n  top: 100%;\n  right: 0;\n  z-index: 1001;\n  display: none;\n  float: left;\n  min-width: 225px;\n  padding: 20px 0;\n  margin: 25px 0 0;\n  font-size: 13px;\n  text-align: left;\n  list-style: none;\n  position: absolute;\n  background: #242b31;\n  -webkit-border-radius: 2px;\n  -moz-border-radius: 2px;\n  -ms-border-radius: 2px;\n  -o-border-radius: 2px;\n  border-radius: 2px;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  transition-duration: 300ms;\n  transition-property: all;\n  transition-timing-function: cubic-bezier(0.7, 1, 0.7, 1); }\n  .dropdown-menu-v2:before {\n    top: -10px;\n    right: 0;\n    width: 0;\n    height: 0;\n    content: ' ';\n    position: absolute;\n    border-style: solid;\n    display: inline-block;\n    border-width: 0 0 15px 15px;\n    border-color: transparent transparent #242b31 transparent; }\n  .dropdown-menu-v2 > li > a {\n    clear: both;\n    color: #606e7a;\n    display: block;\n    font-weight: 600;\n    padding: 8px 20px;\n    position: relative;\n    white-space: nowrap;\n    line-height: 1.42857143;\n    text-transform: uppercase; }\n    .dropdown-menu-v2 > li > a:hover, .dropdown-menu-v2 > li > a:focus {\n      background: #21282e;\n      text-decoration: none;\n      color: #009dc7; }\n  .dropdown-menu-v2 .active > a,\n  .dropdown-menu-v2 .active > a:hover,\n  .dropdown-menu-v2 .active > a:focus,\n  .dropdown-menu-v2 .active > a,\n  .dropdown-menu-v2 .active > a:hover,\n  .dropdown-menu-v2 .active > a:focus,\n  .dropdown-menu-v2 .active > a,\n  .dropdown-menu-v2 .active > a:hover,\n  .dropdown-menu-v2 .active > a:focus {\n    outline: 0;\n    text-decoration: none;\n    background-color: #21282e;\n    color: #009dc7; }\n  .dropdown-menu-v2 .disabled > a,\n  .dropdown-menu-v2 .disabled > a:hover,\n  .dropdown-menu-v2 .disabled > a:focus,\n  .dropdown-menu-v2 .disabled > a,\n  .dropdown-menu-v2 .disabled > a:hover,\n  .dropdown-menu-v2 .disabled > a:focus,\n  .dropdown-menu-v2 .disabled > a,\n  .dropdown-menu-v2 .disabled > a:hover,\n  .dropdown-menu-v2 .disabled > a:focus {\n    color: #009dc7; }\n  .dropdown-menu-v2 .disabled > a:hover,\n  .dropdown-menu-v2 .disabled > a:focus,\n  .dropdown-menu-v2 .disabled > a:hover,\n  .dropdown-menu-v2 .disabled > a:focus {\n    text-decoration: none;\n    cursor: not-allowed;\n    background-color: transparent;\n    background-image: none; }\n  .dropdown-menu-v2 .divider {\n    height: 1px;\n    margin: 9px 0;\n    overflow: hidden;\n    background: #2e353c; }\n  .dropdown-menu-v2 .badge {\n    top: 8px;\n    right: 10px;\n    position: absolute; }\n\n.dropdown-menu-v2.pull-right {\n  right: 0;\n  left: auto; }\n\n.open > .dropdown-menu-v2 {\n  display: block; }\n\n.pull-right > .dropdown-menu-v2 {\n  right: 0;\n  left: auto; }\n\n/***\nSystem feeds\n***/\n.feeds {\n  margin: 0px;\n  padding: 0px;\n  list-style: none; }\n  .feeds li {\n    background-color: #fafafa;\n    color: #82949a;\n    margin-bottom: 7px; }\n    .feeds li:before, .feeds li:after {\n      display: table;\n      line-height: 0;\n      content: \"\"; }\n    .feeds li:after {\n      clear: both; }\n    .feeds li:last-child {\n      margin-bottom: 0px; }\n    .feeds li .col1 {\n      float: left;\n      width: 100%;\n      clear: both; }\n      .feeds li .col1 > .cont {\n        float: left;\n        margin-right: 75px;\n        overflow: hidden; }\n        .feeds li .col1 > .cont > .cont-col1 {\n          float: left;\n          margin-right: -100%; }\n          .feeds li .col1 > .cont > .cont-col1 > .label {\n            display: inline-block;\n            padding: 5px 4px 6px 5px;\n            vertical-align: middle;\n            text-align: center; }\n            .feeds li .col1 > .cont > .cont-col1 > .label > i {\n              text-align: center;\n              font-size: 14px; }\n        .feeds li .col1 > .cont > .cont-col2 {\n          float: left;\n          width: 100%; }\n          .feeds li .col1 > .cont > .cont-col2 > .desc {\n            margin-left: 35px;\n            padding-top: 4px;\n            padding-bottom: 5px;\n            overflow: hidden; }\n    .feeds li .col2 {\n      float: left;\n      width: 75px;\n      margin-left: -75px; }\n      .feeds li .col2 > .date {\n        padding: 4px 9px 5px 4px;\n        text-align: right;\n        font-style: italic;\n        color: #c1cbd0; }\n\n/***\nForm Layouts\n****/\n/* Static info */\n.static-info {\n  margin-bottom: 10px; }\n  .static-info .name {\n    font-size: 14px; }\n  .static-info .value {\n    font-size: 14px;\n    font-weight: 600; }\n  .static-info.align-reverse .name,\n  .static-info.align-reverse .value {\n    text-align: right; }\n\n/* Help blocks */\n.help-block {\n  margin-top: 5px;\n  margin-bottom: 5px; }\n\n.help-inline {\n  font-size: 13px;\n  color: #737373;\n  display: inline-block;\n  padding: 5px; }\n\n.form-inline input {\n  margin-bottom: 0px !important; }\n\n/* Control Label */\n.control-label {\n  color: #999999;\n  margin-top: 1px;\n  font-weight: normal; }\n\n.control-label .required,\n.form-group .required {\n  color: #e02222;\n  font-size: 12px;\n  padding-left: 2px; }\n\n.form {\n  padding: 0 !important; }\n\n.portlet-form .form-body,\n.form .form-body {\n  padding: 20px; }\n  .portlet.light .portlet-form .form-body, .portlet.light\n  .form .form-body {\n    padding-left: 0;\n    padding-right: 0; }\n\n.portlet-form .form-actions,\n.form .form-actions {\n  padding: 20px 20px;\n  margin: 0;\n  background-color: #f5f5f5;\n  border-top: 1px solid #e7ecf1;\n  *zoom: 1; }\n  .portlet.light .portlet-form .form-actions, .portlet.light\n  .form .form-actions {\n    background: none;\n    padding-left: 0;\n    padding-right: 0; }\n  .portlet-form .form-actions.noborder,\n  .form .form-actions.noborder {\n    border-top: 0; }\n  .portlet .portlet-form .form-actions, .portlet\n  .form .form-actions {\n    -webkit-border-radius: 0 0 4px 4px;\n    -moz-border-radius: 0 0 4px 4px;\n    -ms-border-radius: 0 0 4px 4px;\n    -o-border-radius: 0 0 4px 4px;\n    border-radius: 0 0 4px 4px; }\n  .portlet-form .form-actions:before, .portlet-form .form-actions:after,\n  .form .form-actions:before,\n  .form .form-actions:after {\n    content: \" \";\n    display: table; }\n  .portlet-form .form-actions:after,\n  .form .form-actions:after {\n    clear: both; }\n  .portlet-form .form-actions.right,\n  .form .form-actions.right {\n    padding-left: 0;\n    padding-right: 20px;\n    text-align: right; }\n    .portlet.light .portlet-form .form-actions.right, .portlet.light\n    .form .form-actions.right {\n      padding-right: 0; }\n  .portlet-form .form-actions.left,\n  .form .form-actions.left {\n    padding-left: 20px;\n    padding-right: 0;\n    text-align: left; }\n    .portlet.light .portlet-form .form-actions.left, .portlet.light\n    .form .form-actions.left {\n      padding-left: 0; }\n  .portlet-form .form-actions.nobg,\n  .form .form-actions.nobg {\n    background-color: transparent; }\n  .portlet-form .form-actions.top,\n  .form .form-actions.top {\n    margin-top: 0;\n    margin-bottom: 20px;\n    border-top: 0;\n    border-bottom: 1px solid #e7ecf1; }\n    .portlet.light .portlet-form .form-actions.top, .portlet.light\n    .form .form-actions.top {\n      background: none; }\n  .portlet-form .form-actions .btn-set,\n  .form .form-actions .btn-set {\n    display: inline-block; }\n  @media (max-width: 767px) {\n    .portlet-form .form-actions,\n    .form .form-actions {\n      /* 767px */ }\n      .portlet-form .form-actions .btn-set,\n      .form .form-actions .btn-set {\n        margin-bottom: 3px;\n        margin-top: 3px;\n        float: left !important; } }\n\n.portlet-form .form-section,\n.form .form-section {\n  margin: 30px 0px 30px 0px;\n  padding-bottom: 5px;\n  border-bottom: 1px solid #e7ecf1; }\n  .form-fit .portlet-form .form-section, .form-fit\n  .form .form-section {\n    margin-left: 20px;\n    margin-right: 20px; }\n\n/* Checkboxes */\n.checkbox,\n.form-horizontal .checkbox {\n  padding: 0; }\n  .checkbox > label,\n  .form-horizontal .checkbox > label {\n    padding-left: 0; }\n\n.checkbox-list > label {\n  display: block; }\n  .checkbox-list > label.checkbox-inline {\n    display: inline-block; }\n    .checkbox-list > label.checkbox-inline:first-child {\n      padding-left: 0; }\n\n/* Radio buttons */\n.radio-list > label {\n  display: block; }\n  .radio-list > label.radio-inline {\n    display: inline-block; }\n    .radio-list > label.radio-inline:first-child {\n      padding-left: 0; }\n\n/* Radio buttons in horizontal forms */\n.form-horizontal .radio-list .radio {\n  padding-top: 1px; }\n\n.form-horizontal .radio-list > label {\n  margin-bottom: 0; }\n\n.form-horizontal .radio > span {\n  margin-top: 2px; }\n\n/* Rows seperated form layout */\n.form .form-row-seperated .portlet-body {\n  padding: 0; }\n\n.form .form-row-seperated .form-group {\n  margin: 0;\n  border-bottom: 1px solid #efefef;\n  padding: 15px 0; }\n  .form .form-row-seperated .form-group.last {\n    border-bottom: 0;\n    margin-bottom: 0;\n    padding-bottom: 13px; }\n  .form .form-row-seperated .form-group .help-block {\n    margin-bottom: 0; }\n\n.form .form-row-seperated .form-body {\n  padding: 0; }\n\n.form .form-row-seperated .form-actions {\n  padding-left: 15px !important;\n  padding-right: 15px !important; }\n\n/* Form bordered */\n.form .form-bordered .form-group {\n  margin: 0;\n  border-bottom: 1px solid #efefef; }\n  .form .form-bordered .form-group > div {\n    padding: 15px;\n    border-left: 1px solid #efefef; }\n    @media (max-width: 991px) {\n      .form .form-bordered .form-group > div {\n        /* 991px */\n        border-left: 0; } }\n  .form .form-bordered .form-group.last {\n    border-bottom: 0; }\n  .form .form-bordered .form-group .control-label {\n    padding-top: 20px; }\n    @media (max-width: 991px) {\n      .form .form-bordered .form-group .control-label {\n        /* 991px */\n        padding-top: 10px; } }\n  .form .form-bordered .form-group .help-block {\n    margin-bottom: 0; }\n  .form .form-bordered .form-group .form-control {\n    margin: 0; }\n\n.form .form-bordered .form-body {\n  margin: 0;\n  padding: 0; }\n\n.form .form-bordered .form-actions {\n  margin-top: 0;\n  padding-left: 16px !important;\n  padding-right: 16px !important; }\n  @media (max-width: 991px) {\n    .form .form-bordered .form-actions {\n      /* 991px */\n      padding-left: 15px !important;\n      padding-right: 15px !important; } }\n\n/* Horizontal bordered form */\n.form .form-horizontal.form-bordered.form-row-stripped .form-group:nth-child(even) {\n  background-color: #fcfcfc; }\n\n.form .form-horizontal.form-bordered.form-row-stripped .form-control {\n  background: #fff !important; }\n\n.form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) {\n  background-color: #fcfcfc; }\n  .form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) > div {\n    background-color: #ffffff; }\n\n.form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) {\n  background-color: #fcfcfc; }\n\n/* Horizontal form small input issue */\n.form-horizontal .form-group .input-sm {\n  margin-top: 3px; }\n\n/***\nForms\n***/\n.form-control {\n  outline: none !important;\n  box-shadow: none !important; }\n  .form-control.height-auto {\n    height: auto; }\n\n.input-group-addon > i {\n  color: #c5cdda; }\n\n/***\nCustom color buttons \n***/\n.form-control.white {\n  border-color: #ffffff; }\n  .form-control.white:focus {\n    border-color: #e6e6e6; }\n\n.form-control.focus-white:focus {\n  border-color: #ffffff; }\n\n.form-control.default {\n  border-color: #e1e5ec; }\n  .form-control.default:focus {\n    border-color: #c2cad8; }\n\n.form-control.focus-default:focus {\n  border-color: #e1e5ec; }\n\n.form-control.dark {\n  border-color: #2f353b; }\n  .form-control.dark:focus {\n    border-color: #181c1f; }\n\n.form-control.focus-dark:focus {\n  border-color: #2f353b; }\n\n.form-control.blue {\n  border-color: #3598dc; }\n  .form-control.blue:focus {\n    border-color: #217ebd; }\n\n.form-control.focus-blue:focus {\n  border-color: #3598dc; }\n\n.form-control.blue-madison {\n  border-color: #578ebe; }\n  .form-control.blue-madison:focus {\n    border-color: #3f74a3; }\n\n.form-control.focus-blue-madison:focus {\n  border-color: #578ebe; }\n\n.form-control.blue-chambray {\n  border-color: #2C3E50; }\n  .form-control.blue-chambray:focus {\n    border-color: #1a252f; }\n\n.form-control.focus-blue-chambray:focus {\n  border-color: #2C3E50; }\n\n.form-control.blue-ebonyclay {\n  border-color: #22313F; }\n  .form-control.blue-ebonyclay:focus {\n    border-color: #10171e; }\n\n.form-control.focus-blue-ebonyclay:focus {\n  border-color: #22313F; }\n\n.form-control.blue-hoki {\n  border-color: #67809F; }\n  .form-control.blue-hoki:focus {\n    border-color: #526781; }\n\n.form-control.focus-blue-hoki:focus {\n  border-color: #67809F; }\n\n.form-control.blue-steel {\n  border-color: #4B77BE; }\n  .form-control.blue-steel:focus {\n    border-color: #395f9d; }\n\n.form-control.focus-blue-steel:focus {\n  border-color: #4B77BE; }\n\n.form-control.blue-soft {\n  border-color: #4c87b9; }\n  .form-control.blue-soft:focus {\n    border-color: #3b6d97; }\n\n.form-control.focus-blue-soft:focus {\n  border-color: #4c87b9; }\n\n.form-control.blue-dark {\n  border-color: #5e738b; }\n  .form-control.blue-dark:focus {\n    border-color: #495a6d; }\n\n.form-control.focus-blue-dark:focus {\n  border-color: #5e738b; }\n\n.form-control.blue-sharp {\n  border-color: #5C9BD1; }\n  .form-control.blue-sharp:focus {\n    border-color: #3782c3; }\n\n.form-control.focus-blue-sharp:focus {\n  border-color: #5C9BD1; }\n\n.form-control.green {\n  border-color: #32c5d2; }\n  .form-control.green:focus {\n    border-color: #26a1ab; }\n\n.form-control.focus-green:focus {\n  border-color: #32c5d2; }\n\n.form-control.green-meadow {\n  border-color: #1BBC9B; }\n  .form-control.green-meadow:focus {\n    border-color: #158f76; }\n\n.form-control.focus-green-meadow:focus {\n  border-color: #1BBC9B; }\n\n.form-control.green-seagreen {\n  border-color: #1BA39C; }\n  .form-control.green-seagreen:focus {\n    border-color: #147772; }\n\n.form-control.focus-green-seagreen:focus {\n  border-color: #1BA39C; }\n\n.form-control.green-turquoise {\n  border-color: #36D7B7; }\n  .form-control.green-turquoise:focus {\n    border-color: #24b699; }\n\n.form-control.focus-green-turquoise:focus {\n  border-color: #36D7B7; }\n\n.form-control.green-haze {\n  border-color: #44b6ae; }\n  .form-control.green-haze:focus {\n    border-color: #36918b; }\n\n.form-control.focus-green-haze:focus {\n  border-color: #44b6ae; }\n\n.form-control.green-jungle {\n  border-color: #26C281; }\n  .form-control.green-jungle:focus {\n    border-color: #1e9765; }\n\n.form-control.focus-green-jungle:focus {\n  border-color: #26C281; }\n\n.form-control.green-soft {\n  border-color: #3faba4; }\n  .form-control.green-soft:focus {\n    border-color: #318680; }\n\n.form-control.focus-green-soft:focus {\n  border-color: #3faba4; }\n\n.form-control.green-dark {\n  border-color: #4DB3A2; }\n  .form-control.green-dark:focus {\n    border-color: #3d9082; }\n\n.form-control.focus-green-dark:focus {\n  border-color: #4DB3A2; }\n\n.form-control.green-sharp {\n  border-color: #2ab4c0; }\n  .form-control.green-sharp:focus {\n    border-color: #218d96; }\n\n.form-control.focus-green-sharp:focus {\n  border-color: #2ab4c0; }\n\n.form-control.grey {\n  border-color: #E5E5E5; }\n  .form-control.grey:focus {\n    border-color: #cccccc; }\n\n.form-control.focus-grey:focus {\n  border-color: #E5E5E5; }\n\n.form-control.grey-steel {\n  border-color: #e9edef; }\n  .form-control.grey-steel:focus {\n    border-color: #cbd5da; }\n\n.form-control.focus-grey-steel:focus {\n  border-color: #e9edef; }\n\n.form-control.grey-cararra {\n  border-color: #fafafa; }\n  .form-control.grey-cararra:focus {\n    border-color: #e1e1e1; }\n\n.form-control.focus-grey-cararra:focus {\n  border-color: #fafafa; }\n\n.form-control.grey-gallery {\n  border-color: #555555; }\n  .form-control.grey-gallery:focus {\n    border-color: #3c3c3c; }\n\n.form-control.focus-grey-gallery:focus {\n  border-color: #555555; }\n\n.form-control.grey-cascade {\n  border-color: #95A5A6; }\n  .form-control.grey-cascade:focus {\n    border-color: #798d8f; }\n\n.form-control.focus-grey-cascade:focus {\n  border-color: #95A5A6; }\n\n.form-control.grey-silver {\n  border-color: #BFBFBF; }\n  .form-control.grey-silver:focus {\n    border-color: #a6a6a6; }\n\n.form-control.focus-grey-silver:focus {\n  border-color: #BFBFBF; }\n\n.form-control.grey-salsa {\n  border-color: #ACB5C3; }\n  .form-control.grey-salsa:focus {\n    border-color: #8e9bae; }\n\n.form-control.focus-grey-salsa:focus {\n  border-color: #ACB5C3; }\n\n.form-control.grey-salt {\n  border-color: #bfcad1; }\n  .form-control.grey-salt:focus {\n    border-color: #a1b1bc; }\n\n.form-control.focus-grey-salt:focus {\n  border-color: #bfcad1; }\n\n.form-control.grey-mint {\n  border-color: #525e64; }\n  .form-control.grey-mint:focus {\n    border-color: #3b4448; }\n\n.form-control.focus-grey-mint:focus {\n  border-color: #525e64; }\n\n.form-control.red {\n  border-color: #e7505a; }\n  .form-control.red:focus {\n    border-color: #e12330; }\n\n.form-control.focus-red:focus {\n  border-color: #e7505a; }\n\n.form-control.red-pink {\n  border-color: #E08283; }\n  .form-control.red-pink:focus {\n    border-color: #d6595a; }\n\n.form-control.focus-red-pink:focus {\n  border-color: #E08283; }\n\n.form-control.red-sunglo {\n  border-color: #E26A6A; }\n  .form-control.red-sunglo:focus {\n    border-color: #da3f3f; }\n\n.form-control.focus-red-sunglo:focus {\n  border-color: #E26A6A; }\n\n.form-control.red-intense {\n  border-color: #e35b5a; }\n  .form-control.red-intense:focus {\n    border-color: #dc302e; }\n\n.form-control.focus-red-intense:focus {\n  border-color: #e35b5a; }\n\n.form-control.red-thunderbird {\n  border-color: #D91E18; }\n  .form-control.red-thunderbird:focus {\n    border-color: #ab1813; }\n\n.form-control.focus-red-thunderbird:focus {\n  border-color: #D91E18; }\n\n.form-control.red-flamingo {\n  border-color: #EF4836; }\n  .form-control.red-flamingo:focus {\n    border-color: #e02612; }\n\n.form-control.focus-red-flamingo:focus {\n  border-color: #EF4836; }\n\n.form-control.red-soft {\n  border-color: #d05454; }\n  .form-control.red-soft:focus {\n    border-color: #bd3434; }\n\n.form-control.focus-red-soft:focus {\n  border-color: #d05454; }\n\n.form-control.red-haze {\n  border-color: #f36a5a; }\n  .form-control.red-haze:focus {\n    border-color: #f03f2a; }\n\n.form-control.focus-red-haze:focus {\n  border-color: #f36a5a; }\n\n.form-control.red-mint {\n  border-color: #e43a45; }\n  .form-control.red-mint:focus {\n    border-color: #cf1c28; }\n\n.form-control.focus-red-mint:focus {\n  border-color: #e43a45; }\n\n.form-control.yellow {\n  border-color: #c49f47; }\n  .form-control.yellow:focus {\n    border-color: #a48334; }\n\n.form-control.focus-yellow:focus {\n  border-color: #c49f47; }\n\n.form-control.yellow-gold {\n  border-color: #E87E04; }\n  .form-control.yellow-gold:focus {\n    border-color: #b66303; }\n\n.form-control.focus-yellow-gold:focus {\n  border-color: #E87E04; }\n\n.form-control.yellow-casablanca {\n  border-color: #f2784b; }\n  .form-control.yellow-casablanca:focus {\n    border-color: #ef541b; }\n\n.form-control.focus-yellow-casablanca:focus {\n  border-color: #f2784b; }\n\n.form-control.yellow-crusta {\n  border-color: #f3c200; }\n  .form-control.yellow-crusta:focus {\n    border-color: #c09900; }\n\n.form-control.focus-yellow-crusta:focus {\n  border-color: #f3c200; }\n\n.form-control.yellow-lemon {\n  border-color: #F7CA18; }\n  .form-control.yellow-lemon:focus {\n    border-color: #d5ab07; }\n\n.form-control.focus-yellow-lemon:focus {\n  border-color: #F7CA18; }\n\n.form-control.yellow-saffron {\n  border-color: #F4D03F; }\n  .form-control.yellow-saffron:focus {\n    border-color: #f1c40f; }\n\n.form-control.focus-yellow-saffron:focus {\n  border-color: #F4D03F; }\n\n.form-control.yellow-soft {\n  border-color: #c8d046; }\n  .form-control.yellow-soft:focus {\n    border-color: #adb52e; }\n\n.form-control.focus-yellow-soft:focus {\n  border-color: #c8d046; }\n\n.form-control.yellow-haze {\n  border-color: #c5bf66; }\n  .form-control.yellow-haze:focus {\n    border-color: #b4ad44; }\n\n.form-control.focus-yellow-haze:focus {\n  border-color: #c5bf66; }\n\n.form-control.yellow-mint {\n  border-color: #c5b96b; }\n  .form-control.yellow-mint:focus {\n    border-color: #b6a747; }\n\n.form-control.focus-yellow-mint:focus {\n  border-color: #c5b96b; }\n\n.form-control.purple {\n  border-color: #8E44AD; }\n  .form-control.purple:focus {\n    border-color: #703688; }\n\n.form-control.focus-purple:focus {\n  border-color: #8E44AD; }\n\n.form-control.purple-plum {\n  border-color: #8775a7; }\n  .form-control.purple-plum:focus {\n    border-color: #6d5b8e; }\n\n.form-control.focus-purple-plum:focus {\n  border-color: #8775a7; }\n\n.form-control.purple-medium {\n  border-color: #BF55EC; }\n  .form-control.purple-medium:focus {\n    border-color: #ae27e7; }\n\n.form-control.focus-purple-medium:focus {\n  border-color: #BF55EC; }\n\n.form-control.purple-studio {\n  border-color: #8E44AD; }\n  .form-control.purple-studio:focus {\n    border-color: #703688; }\n\n.form-control.focus-purple-studio:focus {\n  border-color: #8E44AD; }\n\n.form-control.purple-wisteria {\n  border-color: #9B59B6; }\n  .form-control.purple-wisteria:focus {\n    border-color: #804399; }\n\n.form-control.focus-purple-wisteria:focus {\n  border-color: #9B59B6; }\n\n.form-control.purple-seance {\n  border-color: #9A12B3; }\n  .form-control.purple-seance:focus {\n    border-color: #720d85; }\n\n.form-control.focus-purple-seance:focus {\n  border-color: #9A12B3; }\n\n.form-control.purple-intense {\n  border-color: #8775a7; }\n  .form-control.purple-intense:focus {\n    border-color: #6d5b8e; }\n\n.form-control.focus-purple-intense:focus {\n  border-color: #8775a7; }\n\n.form-control.purple-sharp {\n  border-color: #796799; }\n  .form-control.purple-sharp:focus {\n    border-color: #61527b; }\n\n.form-control.focus-purple-sharp:focus {\n  border-color: #796799; }\n\n.form-control.purple-soft {\n  border-color: #8877a9; }\n  .form-control.purple-soft:focus {\n    border-color: #6e5c91; }\n\n.form-control.focus-purple-soft:focus {\n  border-color: #8877a9; }\n\n.input-xxs {\n  width: 45px !important; }\n\n/* Form uneditable input */\n.uneditable-input {\n  padding: 6px 12px;\n  min-width: 206px;\n  font-size: 14px;\n  font-weight: normal;\n  height: 34px;\n  color: #555555;\n  background-color: #fff;\n  border: 1px solid #c2cad8;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; }\n\n.form-control-static {\n  display: inline-block;\n  margin: 0; }\n\n/* Form input sizing */\n.input-mini {\n  width: 45px !important; }\n\n.input-xsmall {\n  width: 80px !important; }\n\n.input-small {\n  width: 145px !important; }\n\n.input-medium {\n  width: 240px !important; }\n\n.input-large {\n  width: 320px !important; }\n\n.input-xlarge {\n  width: 420px !important; }\n\n@media (max-width: 768px) {\n  /* 768px */\n  .input-large {\n    width: 250px !important; }\n  .input-xlarge {\n    width: 300px !important; } }\n\n.input-inline {\n  display: inline-block;\n  width: auto;\n  vertical-align: middle; }\n\n.input-fixed {\n  overflow: hidden; }\n\n.input-fixed {\n  overflow: hidden; }\n\n.form-group .input-inline {\n  margin-right: 5px; }\n\n@media (max-width: 768px) {\n  /* 768px */\n  .input-lg {\n    width: 250px !important; }\n  .input-xlg {\n    width: 300px !important; } }\n\n/* Circle Inputs */\n.input-circle {\n  border-radius: 25px !important; }\n\n.input-circle-right {\n  border-radius: 0 25px 25px 0 !important; }\n\n.input-circle-left {\n  border-radius: 25px 0 0 25px !important; }\n\n.input-circle-bottom {\n  border-radius: 0 0 25px 25px !important; }\n\n.input-circle-top {\n  border-radius: 25px 25px 0 0 !important; }\n\n.mt-radio,\n.mt-checkbox {\n  display: inline-block;\n  position: relative;\n  padding-left: 30px;\n  margin-bottom: 15px;\n  cursor: pointer;\n  font-size: 14px;\n  webkit-transition: all 0.3s;\n  -moz-transition: all 0.3s;\n  -ms-transition: all 0.3s;\n  -o-transition: all 0.3s;\n  transition: all 0.3s; }\n  .mt-radio.mt-radio-disabled, .mt-radio.mt-checkbox-disabled,\n  .mt-checkbox.mt-radio-disabled,\n  .mt-checkbox.mt-checkbox-disabled {\n    opacity: 0.6 ;\n    filter: alpha(opacity=60) ; }\n  .mt-radio > input,\n  .mt-checkbox > input {\n    position: absolute;\n    z-index: -1;\n    opacity: 0 ;\n    filter: alpha(opacity=0) ; }\n  .mt-radio > span,\n  .mt-checkbox > span {\n    border: 1px solid transparent;\n    position: absolute;\n    top: 0px;\n    left: 0;\n    height: 19px;\n    width: 19px;\n    background: #E6E6E6; }\n    .mt-radio > span:after,\n    .mt-checkbox > span:after {\n      content: '';\n      position: absolute;\n      display: none; }\n  .mt-radio:hover > input:not([disabled]) ~ span,\n  .mt-radio > input:focus ~ span,\n  .mt-checkbox:hover > input:not([disabled]) ~ span,\n  .mt-checkbox > input:focus ~ span {\n    background: #d9d9d9;\n    webkit-transition: all 0.3s;\n    -moz-transition: all 0.3s;\n    -ms-transition: all 0.3s;\n    -o-transition: all 0.3s;\n    transition: all 0.3s; }\n  .mt-radio > input:checked ~ span,\n  .mt-checkbox > input:checked ~ span {\n    webkit-transition: all 0.3s;\n    -moz-transition: all 0.3s;\n    -ms-transition: all 0.3s;\n    -o-transition: all 0.3s;\n    transition: all 0.3s;\n    background: #d9d9d9; }\n    .mt-radio > input:checked ~ span:after,\n    .mt-checkbox > input:checked ~ span:after {\n      display: block; }\n  .mt-radio:hover > input:not([disabled]):checked ~ span,\n  .mt-radio > input:checked ~ span,\n  .mt-checkbox:hover > input:not([disabled]):checked ~ span,\n  .mt-checkbox > input:checked ~ span {\n    webkit-transition: all 0.3s;\n    -moz-transition: all 0.3s;\n    -ms-transition: all 0.3s;\n    -o-transition: all 0.3s;\n    transition: all 0.3s;\n    background: #d9d9d9; }\n  .mt-radio > input:disabled ~ span,\n  .mt-checkbox > input:disabled ~ span {\n    opacity: 0.6 ;\n    filter: alpha(opacity=60) ;\n    pointer-events: none; }\n  .mt-radio.mt-radio-outline > span, .mt-radio.mt-checkbox-outline > span,\n  .mt-checkbox.mt-radio-outline > span,\n  .mt-checkbox.mt-checkbox-outline > span {\n    border: 1px solid #d9d9d9;\n    background: none; }\n  .mt-radio.mt-radio-outline:hover > input:not([disabled]) ~ span,\n  .mt-radio.mt-radio-outline > input:focus ~ span, .mt-radio.mt-checkbox-outline:hover > input:not([disabled]) ~ span,\n  .mt-radio.mt-checkbox-outline > input:focus ~ span,\n  .mt-checkbox.mt-radio-outline:hover > input:not([disabled]) ~ span,\n  .mt-checkbox.mt-radio-outline > input:focus ~ span,\n  .mt-checkbox.mt-checkbox-outline:hover > input:not([disabled]) ~ span,\n  .mt-checkbox.mt-checkbox-outline > input:focus ~ span {\n    border: 1px solid #d9d9d9;\n    background: none; }\n  .mt-radio.mt-radio-outline > input:checked ~ span, .mt-radio.mt-checkbox-outline > input:checked ~ span,\n  .mt-checkbox.mt-radio-outline > input:checked ~ span,\n  .mt-checkbox.mt-checkbox-outline > input:checked ~ span {\n    border: 1px solid #d9d9d9;\n    background: none; }\n  .mt-radio.mt-radio-outline:hover > input:not([disabled]):checked ~ span,\n  .mt-radio.mt-radio-outline > input:checked ~ span, .mt-radio.mt-checkbox-outline:hover > input:not([disabled]):checked ~ span,\n  .mt-radio.mt-checkbox-outline > input:checked ~ span,\n  .mt-checkbox.mt-radio-outline:hover > input:not([disabled]):checked ~ span,\n  .mt-checkbox.mt-radio-outline > input:checked ~ span,\n  .mt-checkbox.mt-checkbox-outline:hover > input:not([disabled]):checked ~ span,\n  .mt-checkbox.mt-checkbox-outline > input:checked ~ span {\n    border: 1px solid #d9d9d9;\n    background: none; }\n\n.mt-radio > span {\n  -webkit-border-radius: 50%!important;\n  -moz-border-radius: 50%!important;\n  -ms-border-radius: 50%!important;\n  -o-border-radius: 50%!important;\n  border-radius: 50%!important; }\n  .mt-radio > span:after {\n    left: 6px;\n    top: 6px;\n    height: 6px;\n    width: 6px;\n    border-radius: 50%;\n    background: #666666; }\n\n.mt-radio > input:disabled ~ span:after {\n  background: #666666; }\n\nth > .mt-radio.mt-radio-single,\ntd > .mt-radio.mt-radio-single {\n  right: -5px; }\n\n.mt-checkbox > span:after {\n  left: 6px;\n  top: 3px;\n  width: 5px;\n  height: 10px;\n  border: solid #666666;\n  border-width: 0 2px 2px 0;\n  transform: rotate(45deg); }\n\n.mt-checkbox > input:disabled ~ span:after {\n  border-color: #666666; }\n\n.form-inline .mt-checkbox {\n  margin-left: 15px;\n  margin-right: 15px; }\n\nth > .mt-checkbox.mt-checkbox-single,\ntd > .mt-checkbox.mt-checkbox-single {\n  right: -5px; }\n\n.mt-checkbox-list,\n.mt-radio-list {\n  padding: 10px 0; }\n  .form-horizontal .form-group .mt-checkbox-list, .form-horizontal .form-group\n  .mt-radio-list {\n    padding-top: 0; }\n  .mt-checkbox-list .mt-checkbox,\n  .mt-checkbox-list .mt-radio,\n  .mt-radio-list .mt-checkbox,\n  .mt-radio-list .mt-radio {\n    display: block; }\n\n.mt-checkbox-inline,\n.mt-radio-inline {\n  padding: 10px 0; }\n  .form-horizontal .form-group .mt-checkbox-inline, .form-horizontal .form-group\n  .mt-radio-inline {\n    padding-top: 8px; }\n  .mt-checkbox-inline .mt-checkbox,\n  .mt-checkbox-inline .mt-radio,\n  .mt-radio-inline .mt-checkbox,\n  .mt-radio-inline .mt-radio {\n    display: inline-block;\n    margin-right: 15px; }\n    .mt-checkbox-inline .mt-checkbox:last-child,\n    .mt-checkbox-inline .mt-radio:last-child,\n    .mt-radio-inline .mt-checkbox:last-child,\n    .mt-radio-inline .mt-radio:last-child {\n      margin-right: 0; }\n\n/***\nCustom icon buttons\n***/\n.icon-btn {\n  height: 60px;\n  min-width: 80px;\n  margin: 5px 5px 0 0;\n  border: 1px solid #ddd;\n  padding: 12px 0px 0px 0px;\n  background-color: #fafafa;\n  background-image: none;\n  filter: none;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  display: inline-block;\n  color: #646464;\n  text-shadow: none;\n  text-align: center;\n  cursor: pointer;\n  position: relative;\n  -webkit-transition: all 0.3s ease;\n  -moz-transition: all 0.3s ease;\n  -ms-transition: all 0.3s ease;\n  -o-transition: all 0.3s ease;\n  transition: all 0.3s ease; }\n  .icon-btn:hover {\n    text-decoration: none;\n    border-color: #999;\n    color: #444;\n    text-shadow: 0 1px 0px white;\n    -webkit-transition: all 0.3s ease;\n    -moz-transition: all 0.3s ease;\n    -ms-transition: all 0.3s ease;\n    -o-transition: all 0.3s ease;\n    transition: all 0.3s ease;\n    -webkit-box-shadow: none;\n    -moz-box-shadow: none;\n    box-shadow: none; }\n    .icon-btn:hover > .badge {\n      -webkit-transition: all 0.3s ease;\n      -moz-transition: all 0.3s ease;\n      -ms-transition: all 0.3s ease;\n      -o-transition: all 0.3s ease;\n      transition: all 0.3s ease;\n      -webkit-box-shadow: none;\n      -moz-box-shadow: none;\n      box-shadow: none; }\n  .icon-btn > div {\n    margin-top: 5px;\n    margin-bottom: 20px;\n    color: #3f444a;\n    font-size: 12px;\n    font-weight: 300; }\n  .icon-btn > .badge {\n    position: absolute;\n    font-size: 11px;\n    font-weight: 300;\n    top: -5px;\n    right: -5px;\n    padding: 3px 6px 3px 6px;\n    color: white;\n    text-shadow: none;\n    border-width: 0;\n    border-style: solid;\n    -webkit-border-radius: 12px;\n    -moz-border-radius: 12px;\n    border-radius: 12px;\n    -webkit-box-shadow: none;\n    -moz-box-shadow: none;\n    box-shadow: none; }\n  .icon-btn > i {\n    font-size: 18px; }\n  .ie8 .icon-btn:hover {\n    filter: none; }\n\n/***\nInput icons\n***/\n.input-icon {\n  position: relative;\n  left: 0; }\n  .input-icon > .form-control {\n    padding-left: 33px; }\n    .input-group .input-icon > .form-control {\n      -webkit-border-radius: 4px 0 0 4px;\n      -moz-border-radius: 4px 0 0 4px;\n      -ms-border-radius: 4px 0 0 4px;\n      -o-border-radius: 4px 0 0 4px;\n      border-radius: 4px 0 0 4px; }\n  .input-icon > i {\n    color: #ccc;\n    display: block;\n    position: absolute;\n    margin: 11px 2px 4px 10px;\n    z-index: 3;\n    width: 16px;\n    font-size: 16px;\n    text-align: center;\n    left: 0; }\n    .modal .input-icon > i {\n      z-index: 10055; }\n    .has-success .input-icon > i {\n      color: #36c6d3; }\n    .has-warning .input-icon > i {\n      color: #F1C40F; }\n    .has-info .input-icon > i {\n      color: #659be0; }\n    .has-error .input-icon > i {\n      color: #ed6b75; }\n  .input-icon.right {\n    left: auto;\n    right: 0; }\n    .input-icon.right > .form-control {\n      padding-right: 33px;\n      padding-left: 12px; }\n      .input-group .input-icon.right > .form-control {\n        -webkit-border-radius: 0 4px 4px 0;\n        -moz-border-radius: 0 4px 4px 0;\n        -ms-border-radius: 0 4px 4px 0;\n        -o-border-radius: 0 4px 4px 0;\n        border-radius: 0 4px 4px 0; }\n    .input-icon.right > i {\n      left: auto;\n      right: 8px;\n      float: right; }\n  .input-icon.input-icon-lg > i {\n    margin-top: 16px; }\n  .input-icon.input-icon-sm > i {\n    margin-top: 8px;\n    font-size: 13px; }\n\n/***\nCustomized Bootstrap Labels\n***/\n.label {\n  text-shadow: none !important;\n  font-size: 14px;\n  font-weight: 300;\n  padding: 3px 6px 3px 6px;\n  color: #fff;\n  font-family: \"Open Sans\", sans-serif; }\n  .label.label-sm {\n    font-size: 13px;\n    padding: 2px 5px 2px 5px; }\n  h1 .label,\n  h2 .label,\n  h3 .label,\n  h4 .label,\n  h5 .label,\n  h6 .label {\n    font-size: 75%; }\n\n/* Labels variants */\n.label-default {\n  background-color: #bac3d0; }\n  .label-default[href]:hover, .label-default[href]:focus {\n    background-color: #9ca8bb; }\n\n.label-primary {\n  background-color: #337ab7; }\n  .label-primary[href]:hover, .label-primary[href]:focus {\n    background-color: #286090; }\n\n.label-success {\n  background-color: #36c6d3; }\n  .label-success[href]:hover, .label-success[href]:focus {\n    background-color: #27a4b0; }\n\n.label-info {\n  background-color: #659be0; }\n  .label-info[href]:hover, .label-info[href]:focus {\n    background-color: #3a80d7; }\n\n.label-warning {\n  background-color: #F1C40F; }\n  .label-warning[href]:hover, .label-warning[href]:focus {\n    background-color: #c29d0b; }\n\n.label-danger {\n  background-color: #ed6b75; }\n  .label-danger[href]:hover, .label-danger[href]:focus {\n    background-color: #e73d4a; }\n\n/***\nIconic labels\n***/\n.label.label-icon {\n  padding: 4px 0px 4px 4px;\n  margin-right: 2px;\n  text-align: center !important; }\n  .label.label-icon > i {\n    font-size: 12px;\n    text-align: center !important; }\n  .ie8 .label.label-icon,\n  .ie9 .label.label-icon {\n    padding: 3px 0px 3px 3px; }\n\n/***\nText states\n***/\n.text-default {\n  color: #bac3d0; }\n\n.text-primary {\n  color: #337ab7; }\n\n.text-success {\n  color: #36c6d3; }\n\n.text-info {\n  color: #659be0; }\n\n.text-warning {\n  color: #F1C40F; }\n\n.text-danger {\n  color: #ed6b75; }\n\n/***\nCustomized List Group\n***/\n/* Contextual variants */\n.list-group > li:first-child {\n  border-radius-topleft: 4px;\n  border-radius-topright: 4px; }\n\n.list-group > li:last-child {\n  border-radius-bottomleft: 4px;\n  border-radius-bottomright: 4px; }\n\n.list-group .list-group-item-success {\n  color: #27a4b0;\n  background-color: #abe7ed; }\n\n.list-group a.list-group-item-success,\n.list-group button.list-group-item-success {\n  color: #27a4b0; }\n  .list-group a.list-group-item-success .list-group-item-heading,\n  .list-group button.list-group-item-success .list-group-item-heading {\n    color: inherit; }\n  .list-group a.list-group-item-success:hover, .list-group a.list-group-item-success:focus,\n  .list-group button.list-group-item-success:hover,\n  .list-group button.list-group-item-success:focus {\n    color: #27a4b0;\n    background-color: #96e1e8; }\n  .list-group a.list-group-item-success.active, .list-group a.list-group-item-success.active:hover, .list-group a.list-group-item-success.active:focus,\n  .list-group button.list-group-item-success.active,\n  .list-group button.list-group-item-success.active:hover,\n  .list-group button.list-group-item-success.active:focus {\n    color: #fff;\n    background-color: #27a4b0;\n    border-color: #27a4b0; }\n\n.list-group .list-group-item-info {\n  color: #327ad5;\n  background-color: #e0ebf9; }\n\n.list-group a.list-group-item-info,\n.list-group button.list-group-item-info {\n  color: #327ad5; }\n  .list-group a.list-group-item-info .list-group-item-heading,\n  .list-group button.list-group-item-info .list-group-item-heading {\n    color: inherit; }\n  .list-group a.list-group-item-info:hover, .list-group a.list-group-item-info:focus,\n  .list-group button.list-group-item-info:hover,\n  .list-group button.list-group-item-info:focus {\n    color: #327ad5;\n    background-color: #caddf4; }\n  .list-group a.list-group-item-info.active, .list-group a.list-group-item-info.active:hover, .list-group a.list-group-item-info.active:focus,\n  .list-group button.list-group-item-info.active,\n  .list-group button.list-group-item-info.active:hover,\n  .list-group button.list-group-item-info.active:focus {\n    color: #fff;\n    background-color: #327ad5;\n    border-color: #327ad5; }\n\n.list-group .list-group-item-warning {\n  color: #c29d0b;\n  background-color: #f9e491; }\n\n.list-group a.list-group-item-warning,\n.list-group button.list-group-item-warning {\n  color: #c29d0b; }\n  .list-group a.list-group-item-warning .list-group-item-heading,\n  .list-group button.list-group-item-warning .list-group-item-heading {\n    color: inherit; }\n  .list-group a.list-group-item-warning:hover, .list-group a.list-group-item-warning:focus,\n  .list-group button.list-group-item-warning:hover,\n  .list-group button.list-group-item-warning:focus {\n    color: #c29d0b;\n    background-color: #f7de79; }\n  .list-group a.list-group-item-warning.active, .list-group a.list-group-item-warning.active:hover, .list-group a.list-group-item-warning.active:focus,\n  .list-group button.list-group-item-warning.active,\n  .list-group button.list-group-item-warning.active:hover,\n  .list-group button.list-group-item-warning.active:focus {\n    color: #fff;\n    background-color: #c29d0b;\n    border-color: #c29d0b; }\n\n.list-group .list-group-item-danger {\n  color: #e73d4a;\n  background-color: #fbe1e3; }\n\n.list-group a.list-group-item-danger,\n.list-group button.list-group-item-danger {\n  color: #e73d4a; }\n  .list-group a.list-group-item-danger .list-group-item-heading,\n  .list-group button.list-group-item-danger .list-group-item-heading {\n    color: inherit; }\n  .list-group a.list-group-item-danger:hover, .list-group a.list-group-item-danger:focus,\n  .list-group button.list-group-item-danger:hover,\n  .list-group button.list-group-item-danger:focus {\n    color: #e73d4a;\n    background-color: #f8cace; }\n  .list-group a.list-group-item-danger.active, .list-group a.list-group-item-danger.active:hover, .list-group a.list-group-item-danger.active:focus,\n  .list-group button.list-group-item-danger.active,\n  .list-group button.list-group-item-danger.active:hover,\n  .list-group button.list-group-item-danger.active:focus {\n    color: #fff;\n    background-color: #e73d4a;\n    border-color: #e73d4a; }\n\n/***\nUI Loading\n***/\n.loading-message {\n  display: inline-block;\n  min-width: 125px;\n  margin-left: -60px;\n  padding: 10px;\n  margin: 0 auto;\n  color: #000 !important;\n  font-size: 13px;\n  font-weight: 400;\n  text-align: center;\n  vertical-align: middle; }\n  .loading-message.loading-message-boxed {\n    border: 1px solid #ddd;\n    background-color: #eee;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    -ms-border-radius: 4px;\n    -o-border-radius: 4px;\n    border-radius: 4px;\n    -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n    -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n    box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); }\n  .loading-message > span {\n    line-height: 20px;\n    vertical-align: middle; }\n\n.page-loading {\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  -ms-border-radius: 4px;\n  -o-border-radius: 4px;\n  border-radius: 4px;\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  min-width: 125px;\n  margin-left: -60px;\n  margin-top: -30px;\n  padding: 7px;\n  text-align: center;\n  color: #333;\n  font-size: 13px;\n  border: 1px solid #ddd;\n  background-color: #eee;\n  vertical-align: middle;\n  -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n  -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); }\n  .page-loading > span {\n    line-height: 20px;\n    vertical-align: middle; }\n\n.page-spinner-bar {\n  position: fixed;\n  z-index: 10051;\n  width: 100px;\n  top: 40%;\n  left: 50%;\n  margin-left: -55px;\n  text-align: center; }\n  .page-spinner-bar > div {\n    margin: 0 5px;\n    width: 18px;\n    height: 18px;\n    background: #eee;\n    border-radius: 100% !important;\n    display: inline-block;\n    -webkit-animation: bounceDelay 1.4s infinite ease-in-out;\n    animation: bounceDelay 1.4s infinite ease-in-out;\n    /* Prevent first frame from flickering when animation starts */\n    -webkit-animation-fill-mode: both;\n    animation-fill-mode: both; }\n  .page-spinner-bar .bounce1 {\n    -webkit-animation-delay: -0.32s;\n    animation-delay: -0.32s; }\n  .page-spinner-bar .bounce2 {\n    -webkit-animation-delay: -0.16s;\n    animation-delay: -0.16s; }\n\n.block-spinner-bar {\n  display: inline-block;\n  width: 80px;\n  text-align: center; }\n  .block-spinner-bar > div {\n    margin: 0 2px;\n    width: 15px;\n    height: 15px;\n    background: #eee;\n    border-radius: 100% !important;\n    display: inline-block;\n    -webkit-animation: bounceDelay 1.4s infinite ease-in-out;\n    animation: bounceDelay 1.4s infinite ease-in-out;\n    /* Prevent first frame from flickering when animation starts */\n    -webkit-animation-fill-mode: both;\n    animation-fill-mode: both; }\n  .block-spinner-bar .bounce1 {\n    -webkit-animation-delay: -0.32s;\n    animation-delay: -0.32s; }\n  .block-spinner-bar .bounce2 {\n    -webkit-animation-delay: -0.16s;\n    animation-delay: -0.16s; }\n\n/***\nMetro icons\n***/\n[class^=\"m-icon-\"] {\n  display: inline-block;\n  width: 14px;\n  height: 14px;\n  margin-top: 3px;\n  line-height: 14px;\n  vertical-align: top;\n  background-image: url(img/syncfusion-icons.png);\n  background-position: 0 0;\n  background-repeat: no-repeat; }\n\n[class^=\"m-icon-big-\"] {\n  display: inline-block;\n  width: 30px;\n  height: 30px;\n  margin: 6px;\n  vertical-align: middle;\n  background-image: url(img/syncfusion-icons.png);\n  background-position: 0 0px;\n  background-repeat: no-repeat; }\n\n/* large icons */\n.btn.m-icon-big {\n  padding: 9px 16px 8px 16px; }\n\n.btn.m-icon-big.m-icon-only {\n  padding: 9px 8px 8px 0px; }\n\n.btn.m-icon-big [class^=\"m-icon-big-\"] {\n  margin: 0 0 0 10px; }\n\n.btn.m-icon-ony > i {\n  margin-left: 0px; }\n\n/* default icons */\n.btn.m-icon {\n  padding: 7px 14px 7px 14px; }\n\n.btn.m-icon [class^=\"m-icon-\"] {\n  margin: 4px 0 0 5px; }\n\n.btn.m-icon.m-icon-only {\n  padding: 7px 10px 7px 6px; }\n\n/* white icon */\n.m-icon-white {\n  background-image: url(img/syncfusion-icons-white.png); }\n\n/*  Misc */\n.m-icon-swapright {\n  background-position: -27px -10px; }\n\n.m-icon-swapdown {\n  background-position: -68px -10px; }\n\n.m-icon-swapleft {\n  background-position: -8px -10px; }\n\n.m-icon-swapup {\n  background-position: -46px -10px; }\n\n.m-icon-big-swapright {\n  background-position: -42px -28px; }\n\n.m-icon-big-swapdown {\n  background-position: -115px -28px; }\n\n.m-icon-big-swapleft {\n  background-position: -6px -28px; }\n\n.m-icon-big-swapup {\n  background-position: -78px -28px; }\n\n/***\nCustomized Bootstrap Modal \n***/\n.modal {\n  z-index: 10050;\n  outline: none;\n  overflow-y: auto !important;\n  /* Fix content shifting to the right on modal open due to scrollbar closed */ }\n  .page-portlet-fullscreen .modal {\n    z-index: 10060; }\n  .modal .modal-header {\n    border-bottom: 1px solid #EFEFEF; }\n    .modal .modal-header h3 {\n      font-weight: 300; }\n    .modal .modal-header .close {\n      margin-top: 0px !important; }\n  .modal.draggable-modal .modal-header {\n    cursor: move; }\n  .modal .modal-dialog {\n    z-index: 10051; }\n  .modal > .loading {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    margin-top: -22px;\n    margin-left: -22px; }\n  .modal.in .page-loading {\n    display: none; }\n\n.modal-open {\n  overflow-y: auto !important; }\n\n.modal-open-noscroll {\n  overflow-y: hidden !important; }\n\n.modal-backdrop {\n  border: 0;\n  outline: none; }\n  .page-portlet-fullscreen .modal-backdrop {\n    z-index: 10059; }\n  .modal-backdrop, .modal-backdrop.fade.in {\n    background-color: #333 !important; }\n\nbody[ng-controller] .modal-backdrop {\n  z-index: 10049 !important; }\n\nbody[ng-controller] .modal {\n  z-index: 10050 !important; }\n\n/* Full width modal */\n.modal-full.modal-dialog {\n  width: 99%; }\n\n@media (max-width: 768px) {\n  .modal-full.modal-dialog {\n    width: auto; } }\n\n/***\nNotes\n***/\n.note {\n  margin: 0 0 20px 0;\n  padding: 15px 30px 15px 15px;\n  border-left: 5px solid #eee;\n  -webkit-border-radius: 0 4px 4px 0;\n  -moz-border-radius: 0 4px 4px 0;\n  -ms-border-radius: 0 4px 4px 0;\n  -o-border-radius: 0 4px 4px 0;\n  border-radius: 0 4px 4px 0; }\n  .note h1,\n  .note h2,\n  .note h3,\n  .note h4,\n  .note h5,\n  .note h6 {\n    margin-top: 0; }\n    .note h1 .close,\n    .note h2 .close,\n    .note h3 .close,\n    .note h4 .close,\n    .note h5 .close,\n    .note h6 .close {\n      margin-right: -10px; }\n  .note p {\n    margin: 0;\n    font-size: 13px; }\n    .note p:last-child {\n      margin-bottom: 0; }\n  .note code,\n  .note .highlight {\n    background-color: #fff; }\n  .note.note-default {\n    background-color: white;\n    border-color: #b0c1d2;\n    color: black; }\n    .note.note-default.note-bordered {\n      background-color: #eef1f5;\n      border-color: #c0cedb; }\n    .note.note-default.note-shadow {\n      background-color: #f1f4f7;\n      border-color: #d1dbe4;\n      box-shadow: 5px 5px rgba(212, 221, 230, 0.2); }\n  .note.note-success {\n    background-color: #c0edf1;\n    border-color: #58d0da;\n    color: black; }\n    .note.note-success.note-bordered {\n      background-color: #a7e6ec;\n      border-color: #6dd6df; }\n    .note.note-success.note-shadow {\n      background-color: #abe7ed;\n      border-color: #81dbe3;\n      box-shadow: 5px 5px rgba(134, 221, 228, 0.2); }\n  .note.note-info {\n    background-color: #f5f8fd;\n    border-color: #8bb4e7;\n    color: #010407; }\n    .note.note-info.note-bordered {\n      background-color: #dbe8f8;\n      border-color: #a0c2ec; }\n    .note.note-info.note-shadow {\n      background-color: #e0ebf9;\n      border-color: #b5cff0;\n      box-shadow: 5px 5px rgba(185, 210, 241, 0.2); }\n  .note.note-warning {\n    background-color: #faeaa9;\n    border-color: #f3cc31;\n    color: black; }\n    .note.note-warning.note-bordered {\n      background-color: #f8e38c;\n      border-color: #f4d249; }\n    .note.note-warning.note-shadow {\n      background-color: #f9e491;\n      border-color: #f6d861;\n      box-shadow: 5px 5px rgba(246, 217, 102, 0.2); }\n  .note.note-danger {\n    background-color: #fef7f8;\n    border-color: #f0868e;\n    color: #210406; }\n    .note.note-danger.note-bordered {\n      background-color: #fbdcde;\n      border-color: #f39da3; }\n    .note.note-danger.note-shadow {\n      background-color: #fbe1e3;\n      border-color: #f6b3b8;\n      box-shadow: 5px 5px rgba(246, 184, 189, 0.2); }\n\n/***\nCustomized Bootstrap Pagination\n***/\n.pagination {\n  margin: 10px 0; }\n  .pagination.pagination-circle > li:first-child > a {\n    border-radius: 25px 0 0 25px !important; }\n  .pagination.pagination-circle > li:last-child > a {\n    border-radius: 0 25px 25px 0 !important; }\n\n/***\nCustomized Bootstrap Panels\n***/\n.panel {\n  -webkit-box-shadow: none !important;\n  -moz-box-shadow: none !important;\n  box-shadow: none !important; }\n  .panel-group .panel {\n    overflow: visible; }\n  .panel .panel-body {\n    font-size: 13px; }\n  .panel .panel-title > a:hover {\n    text-decoration: none; }\n  .accordion .panel .panel-heading {\n    padding: 0; }\n  .accordion .panel .panel-title {\n    padding: 0; }\n    .accordion .panel .panel-title .accordion-toggle {\n      display: block;\n      padding: 10px 15px; }\n    .accordion .panel .panel-title .accordion-toggle.accordion-toggle-styled {\n      background: url(\"img/accordion-plusminus.png\") no-repeat;\n      background-position: right -19px;\n      margin-right: 15px; }\n    .accordion .panel .panel-title .accordion-toggle.accordion-toggle-styled.collapsed {\n      background-position: right 12px; }\n\n/***\nAccordions\n***/\n.panel-heading {\n  background: #eee; }\n  .panel-heading a {\n    text-decoration: none; }\n  .panel-heading a:active,\n  .panel-heading a:focus,\n  .panel-heading a:hover {\n    text-decoration: none; }\n\n/***\nCustomized Bootstrap Popover\n***/\n/*rtl:ignore*/\n.popover {\n  box-shadow: 5px 5px rgba(102, 102, 102, 0.1);\n  padding: 0; }\n\n.popover .popover-title {\n  margin: 0 !important; }\n\n/***\nPortlets\n***/\n/* Full Screen portlet mode */\n.page-portlet-fullscreen {\n  overflow: hidden; }\n\n/* Basic portlet */\n.portlet {\n  margin-top: 0px;\n  margin-bottom: 25px;\n  padding: 0px;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  -ms-border-radius: 4px;\n  -o-border-radius: 4px;\n  border-radius: 4px; }\n  .portlet.portlet-fullscreen {\n    z-index: 10060;\n    margin: 0;\n    position: fixed;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    width: 100%;\n    height: 100%;\n    background: #fff; }\n    .portlet.portlet-fullscreen > .portlet-body {\n      overflow-y: auto;\n      overflow-x: hidden;\n      padding: 0 10px; }\n    .portlet.portlet-fullscreen > .portlet-title {\n      padding: 0 10px; }\n  .portlet > .portlet-title {\n    border-bottom: 1px solid #eee;\n    padding: 0;\n    margin-bottom: 10px;\n    min-height: 41px;\n    -webkit-border-radius: 4px 4px 0 0;\n    -moz-border-radius: 4px 4px 0 0;\n    -ms-border-radius: 4px 4px 0 0;\n    -o-border-radius: 4px 4px 0 0;\n    border-radius: 4px 4px 0 0; }\n    .portlet > .portlet-title:before, .portlet > .portlet-title:after {\n      content: \" \";\n      display: table; }\n    .portlet > .portlet-title:after {\n      clear: both; }\n    .portlet > .portlet-title > .caption {\n      float: left;\n      display: inline-block;\n      font-size: 18px;\n      line-height: 18px;\n      padding: 10px 0; }\n      .portlet > .portlet-title > .caption.bold {\n        font-weight: 400; }\n      .portlet > .portlet-title > .caption > i {\n        float: left;\n        margin-top: 4px;\n        display: inline-block;\n        font-size: 13px;\n        margin-right: 5px;\n        color: #666; }\n        .portlet > .portlet-title > .caption > i.glyphicon {\n          margin-top: 2px; }\n      .portlet > .portlet-title > .caption > .caption-helper {\n        padding: 0;\n        margin: 0;\n        line-height: 13px;\n        color: #9eacb4;\n        font-size: 13px;\n        font-weight: 400; }\n    .portlet > .portlet-title > .actions {\n      float: right;\n      display: inline-block;\n      padding: 6px 0; }\n      .portlet > .portlet-title > .actions > .dropdown-menu i {\n        color: #555555; }\n      .portlet > .portlet-title > .actions > .btn,\n      .portlet > .portlet-title > .actions > .btn.btn-sm,\n      .portlet > .portlet-title > .actions > .btn-group > .btn,\n      .portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm {\n        padding: 4px 10px;\n        font-size: 13px;\n        line-height: 1.5; }\n        .portlet > .portlet-title > .actions > .btn.btn-default,\n        .portlet > .portlet-title > .actions > .btn.btn-sm.btn-default,\n        .portlet > .portlet-title > .actions > .btn-group > .btn.btn-default,\n        .portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm.btn-default {\n          padding: 3px 9px; }\n        .portlet > .portlet-title > .actions > .btn > i,\n        .portlet > .portlet-title > .actions > .btn.btn-sm > i,\n        .portlet > .portlet-title > .actions > .btn-group > .btn > i,\n        .portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm > i {\n          font-size: 13px; }\n      .portlet > .portlet-title > .actions .btn-icon-only {\n        padding: 5px 7px 3px 7px; }\n        .portlet > .portlet-title > .actions .btn-icon-only.btn-default {\n          padding: 4px 6px 2px 6px; }\n          .portlet > .portlet-title > .actions .btn-icon-only.btn-default > i {\n            font-size: 14px; }\n          .portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen {\n            font-family: FontAwesome;\n            color: #a0a0a0;\n            padding-top: 3px; }\n            .portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen.btn-sm {\n              padding: 3px 3px !important;\n              height: 27px;\n              width: 27px; }\n            .portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen:before {\n              content: \"\\f065\"; }\n            .portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen.on:before {\n              content: \"\\f066\"; }\n    .portlet > .portlet-title > .tools {\n      float: right;\n      display: inline-block;\n      padding: 12px 0 8px 0; }\n      .portlet > .portlet-title > .tools > a {\n        display: inline-block;\n        height: 16px;\n        margin-left: 5px;\n        opacity: 1 ;\n        filter: alpha(opacity=100) ; }\n      .portlet > .portlet-title > .tools > a.remove {\n        background-image: url(img/portlet-remove-icon.png);\n        background-repeat: no-repeat;\n        width: 11px; }\n      .portlet > .portlet-title > .tools > a.config {\n        background-image: url(img/portlet-config-icon.png);\n        background-repeat: no-repeat;\n        width: 12px; }\n      .portlet > .portlet-title > .tools > a.reload {\n        background-image: url(img/portlet-reload-icon.png);\n        width: 13px; }\n      .portlet > .portlet-title > .tools > a.expand {\n        background-image: url(img/portlet-expand-icon.png);\n        width: 14px;\n        visibility: visible; }\n      .portlet > .portlet-title > .tools > a.collapse {\n        background-image: url(img/portlet-collapse-icon.png);\n        width: 14px;\n        visibility: visible; }\n      .portlet > .portlet-title > .tools > a.fullscreen {\n        display: inline-block;\n        top: -3px;\n        position: relative;\n        font-size: 13px;\n        font-family: FontAwesome;\n        color: #ACACAC; }\n        .portlet > .portlet-title > .tools > a.fullscreen:before {\n          content: \"\\f065\"; }\n        .portlet > .portlet-title > .tools > a.fullscreen.on:before {\n          content: \"\\f066\"; }\n      .portlet > .portlet-title > .tools > a:hover {\n        text-decoration: none;\n        -webkit-transition: all 0.1s ease-in-out;\n        -moz-transition: all 0.1s ease-in-out;\n        -o-transition: all 0.1s ease-in-out;\n        -ms-transition: all 0.1s ease-in-out;\n        transition: all 0.1s ease-in-out;\n        opacity: 0.8 ;\n        filter: alpha(opacity=80) ; }\n    .portlet > .portlet-title > .pagination {\n      float: right;\n      display: inline-block;\n      margin: 2px 0 0 0;\n      border: 0;\n      padding: 4px 0; }\n    .portlet > .portlet-title > .nav-tabs {\n      background: none;\n      margin: 1px 0 0 0;\n      float: right;\n      display: inline-block;\n      border: 0; }\n      .portlet > .portlet-title > .nav-tabs > li {\n        background: none;\n        margin: 0;\n        border: 0; }\n        .portlet > .portlet-title > .nav-tabs > li > a {\n          background: none;\n          margin: 5px 0 0 1px;\n          border: 0;\n          padding: 8px 10px;\n          color: #fff; }\n        .portlet > .portlet-title > .nav-tabs > li.active > a,\n        .portlet > .portlet-title > .nav-tabs > li:hover > a {\n          color: #333;\n          background: #fff;\n          border: 0; }\n  .portlet > .portlet-body {\n    clear: both;\n    -webkit-border-radius: 0 0 4px 4px;\n    -moz-border-radius: 0 0 4px 4px;\n    -ms-border-radius: 0 0 4px 4px;\n    -o-border-radius: 0 0 4px 4px;\n    border-radius: 0 0 4px 4px; }\n    .portlet > .portlet-body p {\n      margin-top: 0; }\n  .portlet > .portlet-empty {\n    min-height: 125px; }\n  .portlet.full-height-content {\n    margin-bottom: 0; }\n\n/* Portlet background colors */\n/* Side bordered portlet */\n.portlet.bordered {\n  border-left: 2px solid #e6e9ec !important; }\n  .portlet.bordered > .portlet-title {\n    border-bottom: 0; }\n\n/* Solid colored portlet */\n.portlet.solid {\n  padding: 0 10px 10px 10px;\n  border: 0px; }\n  .portlet.solid > .portlet-title {\n    border-bottom: 0;\n    margin-bottom: 10px; }\n    .portlet.solid > .portlet-title > .caption {\n      padding: 16px 0 2px 0; }\n    .portlet.solid > .portlet-title > .actions {\n      padding: 12px 0 6px 0; }\n    .portlet.solid > .portlet-title > .tools {\n      padding: 14px 0 6px 0; }\n\n/* Solid bordered portlet */\n.portlet.solid.bordered > .portlet-title {\n  margin-bottom: 10px; }\n\n/* Box portlet */\n.portlet.box {\n  padding: 0px !important; }\n  .portlet.box > .portlet-title {\n    border-bottom: 0;\n    padding: 0 10px;\n    margin-bottom: 0;\n    color: #fff; }\n    .portlet.box > .portlet-title > .caption {\n      padding: 11px 0 9px 0; }\n    .portlet.box > .portlet-title > .tools > a.remove {\n      background-image: url(img/portlet-remove-icon-white.png); }\n    .portlet.box > .portlet-title > .tools > a.config {\n      background-image: url(img/portlet-config-icon-white.png); }\n    .portlet.box > .portlet-title > .tools > a.reload {\n      background-image: url(img/portlet-reload-icon-white.png); }\n    .portlet.box > .portlet-title > .tools > a.expand {\n      background-image: url(img/portlet-expand-icon-white.png); }\n    .portlet.box > .portlet-title > .tools > a.collapse {\n      background-image: url(img/portlet-collapse-icon-white.png); }\n    .portlet.box > .portlet-title > .tools > a.fullscreen {\n      color: #fdfdfd; }\n    .portlet.box > .portlet-title > .actions {\n      padding: 7px 0 5px 0; }\n  .portlet.box > .portlet-body {\n    background-color: #fff;\n    padding: 15px; }\n\n/* Light Portlet */\n.portlet.light {\n  padding: 12px 20px 15px 20px;\n  background-color: #fff; }\n  .portlet.light.bordered {\n    border: 1px solid #e7ecf1 !important; }\n    .portlet.light.bordered > .portlet-title {\n      border-bottom: 1px solid #eef1f5; }\n  .portlet.light.bg-inverse {\n    background: #f1f4f7; }\n  .portlet.light > .portlet-title {\n    padding: 0;\n    min-height: 48px; }\n    .portlet.light > .portlet-title > .caption {\n      color: #666;\n      padding: 10px 0; }\n      .portlet.light > .portlet-title > .caption > .caption-subject {\n        font-size: 16px; }\n      .portlet.light > .portlet-title > .caption > i {\n        color: #777;\n        font-size: 15px;\n        font-weight: 300;\n        margin-top: 3px; }\n      .portlet.light > .portlet-title > .caption.caption-md > .caption-subject {\n        font-size: 15px; }\n      .portlet.light > .portlet-title > .caption.caption-md > i {\n        font-size: 14px; }\n    .portlet.light > .portlet-title > .actions {\n      padding: 6px 0 14px 0; }\n      .portlet.light > .portlet-title > .actions .btn-default {\n        color: #666; }\n      .portlet.light > .portlet-title > .actions .btn-icon-only {\n        height: 27px;\n        width: 27px; }\n      .portlet.light > .portlet-title > .actions .dropdown-menu li > a {\n        color: #555; }\n    .portlet.light > .portlet-title > .inputs {\n      float: right;\n      display: inline-block;\n      padding: 4px 0; }\n      .portlet.light > .portlet-title > .inputs > .portlet-input .input-icon > i {\n        font-size: 14px;\n        margin-top: 9px; }\n      .portlet.light > .portlet-title > .inputs > .portlet-input .input-icon > .form-control {\n        height: 30px;\n        padding: 2px 26px 3px 10px;\n        font-size: 13px; }\n      .portlet.light > .portlet-title > .inputs > .portlet-input > .form-control {\n        height: 30px;\n        padding: 3px 10px;\n        font-size: 13px; }\n    .portlet.light > .portlet-title > .pagination {\n      padding: 2px 0 13px 0; }\n    .portlet.light > .portlet-title > .tools {\n      padding: 10px 0 13px 0;\n      margin-top: 2px; }\n    .portlet.light > .portlet-title > .nav-tabs > li {\n      margin: 0;\n      padding: 0; }\n      .portlet.light > .portlet-title > .nav-tabs > li > a {\n        margin: 0;\n        padding: 12px 13px 13px 13px;\n        font-size: 13px;\n        color: #666; }\n      .portlet.light > .portlet-title > .nav-tabs > li.active > a,\n      .portlet.light > .portlet-title > .nav-tabs > li:hover > a {\n        margin: 0;\n        background: none;\n        color: #333; }\n  .portlet.light.form-fit {\n    padding: 0; }\n    .portlet.light.form-fit > .portlet-title {\n      padding: 17px 20px 10px 20px;\n      margin-bottom: 0; }\n  .portlet.light .portlet-body {\n    padding-top: 8px; }\n  .portlet.light.portlet-fullscreen > .portlet-body {\n    padding: 8px 0; }\n  .portlet.light.portlet-fit {\n    padding: 0; }\n    .portlet.light.portlet-fit > .portlet-title {\n      padding: 15px 20px 10px 20px; }\n    .portlet.light.portlet-fit > .portlet-body {\n      padding: 10px 20px 20px 20px; }\n  .portlet.light.portlet-fit.portlet-form > .portlet-body {\n    padding: 0; }\n  .portlet.light.portlet-fit.portlet-form > .portlet-body {\n    padding: 0; }\n    .portlet.light.portlet-fit.portlet-form > .portlet-body .form-actions {\n      background: none; }\n  .portlet.light.portlet-datatable.portlet-fit > .portlet-body {\n    padding-top: 10px;\n    padding-bottom: 25px; }\n\n.tab-pane > p:last-child {\n  margin-bottom: 0px; }\n\n/* Reverse aligned tabs */\n.tabs-reversed > li {\n  float: right;\n  margin-right: 0; }\n  .tabs-reversed > li > a {\n    margin-right: 0; }\n\n/* jQuery UI Draggable Portlets */\n.portlet-sortable:not(.portlet-fullscreen) > .portlet-title {\n  cursor: move; }\n\n.portlet-sortable-placeholder {\n  border: 2px dashed #eee;\n  margin-bottom: 25px; }\n\n.portlet-sortable-empty {\n  box-shadow: none !important;\n  height: 45px; }\n\n.portlet-collapsed {\n  display: none; }\n\n@media (max-width: 991px) {\n  /* 991px */\n  .portlet-collapsed-on-mobile {\n    display: none; } }\n\n/***\nCustom colored portlets \n***/\n.portlet > .portlet-body.white,\n.portlet.white {\n  background-color: #ffffff; }\n\n.portlet.solid.white > .portlet-title,\n.portlet.solid.white > .portlet-body {\n  border: 0;\n  color: #666; }\n\n.portlet.solid.white > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.white > .portlet-title > .caption > i {\n    color: #666; }\n\n.portlet.solid.white > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.white > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.white > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.white > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.white > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.white > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.white {\n  border: 1px solid white;\n  border-top: 0; }\n  .portlet.box.white > .portlet-title {\n    background-color: #ffffff; }\n    .portlet.box.white > .portlet-title > .caption {\n      color: #666; }\n      .portlet.box.white > .portlet-title > .caption > i {\n        color: #666; }\n    .portlet.box.white > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid white;\n      color: white; }\n      .portlet.box.white > .portlet-title > .actions .btn-default > i {\n        color: white; }\n      .portlet.box.white > .portlet-title > .actions .btn-default:hover, .portlet.box.white > .portlet-title > .actions .btn-default:focus, .portlet.box.white > .portlet-title > .actions .btn-default:active, .portlet.box.white > .portlet-title > .actions .btn-default.active {\n        border: 1px solid white;\n        color: white; }\n\n.portlet > .portlet-body.default,\n.portlet.default {\n  background-color: #e1e5ec; }\n\n.portlet.solid.default > .portlet-title,\n.portlet.solid.default > .portlet-body {\n  border: 0;\n  color: #666; }\n\n.portlet.solid.default > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.default > .portlet-title > .caption > i {\n    color: #666; }\n\n.portlet.solid.default > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.default > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.default > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.default > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.default > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.default > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.default {\n  border: 1px solid white;\n  border-top: 0; }\n  .portlet.box.default > .portlet-title {\n    background-color: #e1e5ec; }\n    .portlet.box.default > .portlet-title > .caption {\n      color: #666; }\n      .portlet.box.default > .portlet-title > .caption > i {\n        color: #666; }\n    .portlet.box.default > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid white;\n      color: white; }\n      .portlet.box.default > .portlet-title > .actions .btn-default > i {\n        color: white; }\n      .portlet.box.default > .portlet-title > .actions .btn-default:hover, .portlet.box.default > .portlet-title > .actions .btn-default:focus, .portlet.box.default > .portlet-title > .actions .btn-default:active, .portlet.box.default > .portlet-title > .actions .btn-default.active {\n        border: 1px solid white;\n        color: white; }\n\n.portlet > .portlet-body.dark,\n.portlet.dark {\n  background-color: #2f353b; }\n\n.portlet.solid.dark > .portlet-title,\n.portlet.solid.dark > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.dark > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.dark > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.dark > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.dark > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.dark > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.dark > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.dark > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.dark > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.dark {\n  border: 1px solid #464f57;\n  border-top: 0; }\n  .portlet.box.dark > .portlet-title {\n    background-color: #2f353b; }\n    .portlet.box.dark > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.dark > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.dark > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #616d79;\n      color: #6c7a88; }\n      .portlet.box.dark > .portlet-title > .actions .btn-default > i {\n        color: #738290; }\n      .portlet.box.dark > .portlet-title > .actions .btn-default:hover, .portlet.box.dark > .portlet-title > .actions .btn-default:focus, .portlet.box.dark > .portlet-title > .actions .btn-default:active, .portlet.box.dark > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #798794;\n        color: #8793a0; }\n\n.portlet > .portlet-body.blue,\n.portlet.blue {\n  background-color: #3598dc; }\n\n.portlet.solid.blue > .portlet-title,\n.portlet.solid.blue > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.blue > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.blue > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.blue > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.blue > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.blue > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.blue > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.blue > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.blue > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.blue {\n  border: 1px solid #60aee4;\n  border-top: 0; }\n  .portlet.box.blue > .portlet-title {\n    background-color: #3598dc; }\n    .portlet.box.blue > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.blue > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.blue > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #95c9ed;\n      color: #aad4f0; }\n      .portlet.box.blue > .portlet-title > .actions .btn-default > i {\n        color: #b7daf3; }\n      .portlet.box.blue > .portlet-title > .actions .btn-default:hover, .portlet.box.blue > .portlet-title > .actions .btn-default:focus, .portlet.box.blue > .portlet-title > .actions .btn-default:active, .portlet.box.blue > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #c0dff4;\n        color: #d6eaf8; }\n\n.portlet > .portlet-body.blue-madison,\n.portlet.blue-madison {\n  background-color: #578ebe; }\n\n.portlet.solid.blue-madison > .portlet-title,\n.portlet.solid.blue-madison > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.blue-madison > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.blue-madison > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.blue-madison > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.blue-madison > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.blue-madison > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.blue-madison > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.blue-madison > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.blue-madison > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.blue-madison {\n  border: 1px solid #7ca7cc;\n  border-top: 0; }\n  .portlet.box.blue-madison > .portlet-title {\n    background-color: #578ebe; }\n    .portlet.box.blue-madison > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.blue-madison > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.blue-madison > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #a8c4dd;\n      color: #bad1e4; }\n      .portlet.box.blue-madison > .portlet-title > .actions .btn-default > i {\n        color: #c5d8e9; }\n      .portlet.box.blue-madison > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-madison > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-madison > .portlet-title > .actions .btn-default:active, .portlet.box.blue-madison > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #cdddec;\n        color: #dfeaf3; }\n\n.portlet > .portlet-body.blue-chambray,\n.portlet.blue-chambray {\n  background-color: #2C3E50; }\n\n.portlet.solid.blue-chambray > .portlet-title,\n.portlet.solid.blue-chambray > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.blue-chambray > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.blue-chambray > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.blue-chambray > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.blue-chambray > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.blue-chambray > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.blue-chambray > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.blue-chambray > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.blue-chambray > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.blue-chambray {\n  border: 1px solid #3e5871;\n  border-top: 0; }\n  .portlet.box.blue-chambray > .portlet-title {\n    background-color: #2C3E50; }\n    .portlet.box.blue-chambray > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.blue-chambray > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.blue-chambray > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #547698;\n      color: #5f83a7; }\n      .portlet.box.blue-chambray > .portlet-title > .actions .btn-default > i {\n        color: #698bac; }\n      .portlet.box.blue-chambray > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default:active, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #6f90b0;\n        color: #809cb9; }\n\n.portlet > .portlet-body.blue-ebonyclay,\n.portlet.blue-ebonyclay {\n  background-color: #22313F; }\n\n.portlet.solid.blue-ebonyclay > .portlet-title,\n.portlet.solid.blue-ebonyclay > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.blue-ebonyclay > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.blue-ebonyclay > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.blue-ebonyclay {\n  border: 1px solid #344b60;\n  border-top: 0; }\n  .portlet.box.blue-ebonyclay > .portlet-title {\n    background-color: #22313F; }\n    .portlet.box.blue-ebonyclay > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.blue-ebonyclay > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #496a88;\n      color: #527798; }\n      .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default > i {\n        color: #587ea2; }\n      .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:active, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #5d83a7;\n        color: #6d90b0; }\n\n.portlet > .portlet-body.blue-hoki,\n.portlet.blue-hoki {\n  background-color: #67809F; }\n\n.portlet.solid.blue-hoki > .portlet-title,\n.portlet.solid.blue-hoki > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.blue-hoki > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.blue-hoki > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.blue-hoki > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.blue-hoki > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.blue-hoki > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.blue-hoki > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.blue-hoki > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.blue-hoki > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.blue-hoki {\n  border: 1px solid #869ab3;\n  border-top: 0; }\n  .portlet.box.blue-hoki > .portlet-title {\n    background-color: #67809F; }\n    .portlet.box.blue-hoki > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.blue-hoki > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.blue-hoki > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #acb9ca;\n      color: #bbc7d4; }\n      .portlet.box.blue-hoki > .portlet-title > .actions .btn-default > i {\n        color: #c5ceda; }\n      .portlet.box.blue-hoki > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default:active, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #cbd4de;\n        color: #dbe1e8; }\n\n.portlet > .portlet-body.blue-steel,\n.portlet.blue-steel {\n  background-color: #4B77BE; }\n\n.portlet.solid.blue-steel > .portlet-title,\n.portlet.solid.blue-steel > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.blue-steel > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.blue-steel > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.blue-steel > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.blue-steel > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.blue-steel > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.blue-steel > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.blue-steel > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.blue-steel > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.blue-steel {\n  border: 1px solid #7093cc;\n  border-top: 0; }\n  .portlet.box.blue-steel > .portlet-title {\n    background-color: #4B77BE; }\n    .portlet.box.blue-steel > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.blue-steel > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.blue-steel > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #9db5dc;\n      color: #b0c3e3; }\n      .portlet.box.blue-steel > .portlet-title > .actions .btn-default > i {\n        color: #bbcce7; }\n      .portlet.box.blue-steel > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-steel > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-steel > .portlet-title > .actions .btn-default:active, .portlet.box.blue-steel > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #c3d2e9;\n        color: #d6e0f0; }\n\n.portlet > .portlet-body.blue-soft,\n.portlet.blue-soft {\n  background-color: #4c87b9; }\n\n.portlet.solid.blue-soft > .portlet-title,\n.portlet.solid.blue-soft > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.blue-soft > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.blue-soft > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.blue-soft > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.blue-soft > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.blue-soft > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.blue-soft > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.blue-soft > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.blue-soft > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.blue-soft {\n  border: 1px solid #71a0c7;\n  border-top: 0; }\n  .portlet.box.blue-soft > .portlet-title {\n    background-color: #4c87b9; }\n    .portlet.box.blue-soft > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.blue-soft > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.blue-soft > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #9dbdd9;\n      color: #afc9e0; }\n      .portlet.box.blue-soft > .portlet-title > .actions .btn-default > i {\n        color: #bad1e4; }\n      .portlet.box.blue-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-soft > .portlet-title > .actions .btn-default:active, .portlet.box.blue-soft > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #c1d6e7;\n        color: #d4e2ee; }\n\n.portlet > .portlet-body.blue-dark,\n.portlet.blue-dark {\n  background-color: #5e738b; }\n\n.portlet.solid.blue-dark > .portlet-title,\n.portlet.solid.blue-dark > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.blue-dark > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.blue-dark > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.blue-dark > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.blue-dark > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.blue-dark > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.blue-dark > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.blue-dark > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.blue-dark > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.blue-dark {\n  border: 1px solid #788da4;\n  border-top: 0; }\n  .portlet.box.blue-dark > .portlet-title {\n    background-color: #5e738b; }\n    .portlet.box.blue-dark > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.blue-dark > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.blue-dark > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #9dacbd;\n      color: #acb8c7; }\n      .portlet.box.blue-dark > .portlet-title > .actions .btn-default > i {\n        color: #b5c0cd; }\n      .portlet.box.blue-dark > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-dark > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-dark > .portlet-title > .actions .btn-default:active, .portlet.box.blue-dark > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #bbc5d1;\n        color: #cad2db; }\n\n.portlet > .portlet-body.blue-sharp,\n.portlet.blue-sharp {\n  background-color: #5C9BD1; }\n\n.portlet.solid.blue-sharp > .portlet-title,\n.portlet.solid.blue-sharp > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.blue-sharp > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.blue-sharp > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.blue-sharp > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.blue-sharp > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.blue-sharp > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.blue-sharp > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.blue-sharp > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.blue-sharp > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.blue-sharp {\n  border: 1px solid #84b3dc;\n  border-top: 0; }\n  .portlet.box.blue-sharp > .portlet-title {\n    background-color: #5C9BD1; }\n    .portlet.box.blue-sharp > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.blue-sharp > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.blue-sharp > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #b4d1ea;\n      color: #c7ddef; }\n      .portlet.box.blue-sharp > .portlet-title > .actions .btn-default > i {\n        color: #d3e4f3; }\n      .portlet.box.blue-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #dbe9f5;\n        color: #eff5fb; }\n\n.portlet > .portlet-body.green,\n.portlet.green {\n  background-color: #32c5d2; }\n\n.portlet.solid.green > .portlet-title,\n.portlet.solid.green > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.green > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.green > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.green > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.green > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.green > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.green > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.green > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.green > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.green {\n  border: 1px solid #5cd1db;\n  border-top: 0; }\n  .portlet.box.green > .portlet-title {\n    background-color: #32c5d2; }\n    .portlet.box.green > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.green > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.green > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #8edfe6;\n      color: #a3e5eb; }\n      .portlet.box.green > .portlet-title > .actions .btn-default > i {\n        color: #afe8ee; }\n      .portlet.box.green > .portlet-title > .actions .btn-default:hover, .portlet.box.green > .portlet-title > .actions .btn-default:focus, .portlet.box.green > .portlet-title > .actions .btn-default:active, .portlet.box.green > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #b8ebef;\n        color: #cdf1f4; }\n\n.portlet > .portlet-body.green-meadow,\n.portlet.green-meadow {\n  background-color: #1BBC9B; }\n\n.portlet.solid.green-meadow > .portlet-title,\n.portlet.solid.green-meadow > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.green-meadow > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.green-meadow > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.green-meadow > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.green-meadow > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.green-meadow > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.green-meadow > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.green-meadow > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.green-meadow > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.green-meadow {\n  border: 1px solid #2ae0bb;\n  border-top: 0; }\n  .portlet.box.green-meadow > .portlet-title {\n    background-color: #1BBC9B; }\n    .portlet.box.green-meadow > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.green-meadow > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.green-meadow > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #5fe8cc;\n      color: #75ebd3; }\n      .portlet.box.green-meadow > .portlet-title > .actions .btn-default > i {\n        color: #83edd7; }\n      .portlet.box.green-meadow > .portlet-title > .actions .btn-default:hover, .portlet.box.green-meadow > .portlet-title > .actions .btn-default:focus, .portlet.box.green-meadow > .portlet-title > .actions .btn-default:active, .portlet.box.green-meadow > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #8ceeda;\n        color: #a2f2e1; }\n\n.portlet > .portlet-body.green-seagreen,\n.portlet.green-seagreen {\n  background-color: #1BA39C; }\n\n.portlet.solid.green-seagreen > .portlet-title,\n.portlet.solid.green-seagreen > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.green-seagreen > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.green-seagreen > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.green-seagreen > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.green-seagreen > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.green-seagreen > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.green-seagreen > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.green-seagreen > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.green-seagreen > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.green-seagreen {\n  border: 1px solid #22cfc6;\n  border-top: 0; }\n  .portlet.box.green-seagreen > .portlet-title {\n    background-color: #1BA39C; }\n    .portlet.box.green-seagreen > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.green-seagreen > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.green-seagreen > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #4de1da;\n      color: #63e5de; }\n      .portlet.box.green-seagreen > .portlet-title > .actions .btn-default > i {\n        color: #70e7e1; }\n      .portlet.box.green-seagreen > .portlet-title > .actions .btn-default:hover, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default:focus, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default:active, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #78e9e3;\n        color: #8eece8; }\n\n.portlet > .portlet-body.green-turquoise,\n.portlet.green-turquoise {\n  background-color: #36D7B7; }\n\n.portlet.solid.green-turquoise > .portlet-title,\n.portlet.solid.green-turquoise > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.green-turquoise > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.green-turquoise > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.green-turquoise > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.green-turquoise > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.green-turquoise > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.green-turquoise > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.green-turquoise > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.green-turquoise > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.green-turquoise {\n  border: 1px solid #61dfc6;\n  border-top: 0; }\n  .portlet.box.green-turquoise > .portlet-title {\n    background-color: #36D7B7; }\n    .portlet.box.green-turquoise > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.green-turquoise > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.green-turquoise > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #94ead9;\n      color: #a9eee0; }\n      .portlet.box.green-turquoise > .portlet-title > .actions .btn-default > i {\n        color: #b6f0e5; }\n      .portlet.box.green-turquoise > .portlet-title > .actions .btn-default:hover, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default:focus, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default:active, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #bef2e8;\n        color: #d3f6ef; }\n\n.portlet > .portlet-body.green-haze,\n.portlet.green-haze {\n  background-color: #44b6ae; }\n\n.portlet.solid.green-haze > .portlet-title,\n.portlet.solid.green-haze > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.green-haze > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.green-haze > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.green-haze > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.green-haze > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.green-haze > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.green-haze > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.green-haze > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.green-haze > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.green-haze {\n  border: 1px solid #67c6bf;\n  border-top: 0; }\n  .portlet.box.green-haze > .portlet-title {\n    background-color: #44b6ae; }\n    .portlet.box.green-haze > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.green-haze > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.green-haze > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #93d7d2;\n      color: #a6deda; }\n      .portlet.box.green-haze > .portlet-title > .actions .btn-default > i {\n        color: #b1e2de; }\n      .portlet.box.green-haze > .portlet-title > .actions .btn-default:hover, .portlet.box.green-haze > .portlet-title > .actions .btn-default:focus, .portlet.box.green-haze > .portlet-title > .actions .btn-default:active, .portlet.box.green-haze > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #b9e5e2;\n        color: #cbece9; }\n\n.portlet > .portlet-body.green-jungle,\n.portlet.green-jungle {\n  background-color: #26C281; }\n\n.portlet.solid.green-jungle > .portlet-title,\n.portlet.solid.green-jungle > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.green-jungle > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.green-jungle > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.green-jungle > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.green-jungle > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.green-jungle > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.green-jungle > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.green-jungle > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.green-jungle > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.green-jungle {\n  border: 1px solid #41da9a;\n  border-top: 0; }\n  .portlet.box.green-jungle > .portlet-title {\n    background-color: #26C281; }\n    .portlet.box.green-jungle > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.green-jungle > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.green-jungle > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #74e4b5;\n      color: #8ae8c1; }\n      .portlet.box.green-jungle > .portlet-title > .actions .btn-default > i {\n        color: #96ebc8; }\n      .portlet.box.green-jungle > .portlet-title > .actions .btn-default:hover, .portlet.box.green-jungle > .portlet-title > .actions .btn-default:focus, .portlet.box.green-jungle > .portlet-title > .actions .btn-default:active, .portlet.box.green-jungle > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #9feccc;\n        color: #b4f0d7; }\n\n.portlet > .portlet-body.green-soft,\n.portlet.green-soft {\n  background-color: #3faba4; }\n\n.portlet.solid.green-soft > .portlet-title,\n.portlet.solid.green-soft > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.green-soft > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.green-soft > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.green-soft > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.green-soft > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.green-soft > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.green-soft > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.green-soft > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.green-soft > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.green-soft {\n  border: 1px solid #5bc2bc;\n  border-top: 0; }\n  .portlet.box.green-soft > .portlet-title {\n    background-color: #3faba4; }\n    .portlet.box.green-soft > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.green-soft > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.green-soft > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #87d3ce;\n      color: #9adad6; }\n      .portlet.box.green-soft > .portlet-title > .actions .btn-default > i {\n        color: #a5deda; }\n      .portlet.box.green-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.green-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.green-soft > .portlet-title > .actions .btn-default:active, .portlet.box.green-soft > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #ade1dd;\n        color: #bfe7e5; }\n\n.portlet > .portlet-body.green-dark,\n.portlet.green-dark {\n  background-color: #4DB3A2; }\n\n.portlet.solid.green-dark > .portlet-title,\n.portlet.solid.green-dark > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.green-dark > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.green-dark > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.green-dark > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.green-dark > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.green-dark > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.green-dark > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.green-dark > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.green-dark > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.green-dark {\n  border: 1px solid #71c2b5;\n  border-top: 0; }\n  .portlet.box.green-dark > .portlet-title {\n    background-color: #4DB3A2; }\n    .portlet.box.green-dark > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.green-dark > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.green-dark > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #9cd5cb;\n      color: #addcd4; }\n      .portlet.box.green-dark > .portlet-title > .actions .btn-default > i {\n        color: #b8e1da; }\n      .portlet.box.green-dark > .portlet-title > .actions .btn-default:hover, .portlet.box.green-dark > .portlet-title > .actions .btn-default:focus, .portlet.box.green-dark > .portlet-title > .actions .btn-default:active, .portlet.box.green-dark > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #bfe4de;\n        color: #d1ebe7; }\n\n.portlet > .portlet-body.green-sharp,\n.portlet.green-sharp {\n  background-color: #2ab4c0; }\n\n.portlet.solid.green-sharp > .portlet-title,\n.portlet.solid.green-sharp > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.green-sharp > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.green-sharp > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.green-sharp > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.green-sharp > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.green-sharp > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.green-sharp > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.green-sharp > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.green-sharp > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.green-sharp {\n  border: 1px solid #46cbd7;\n  border-top: 0; }\n  .portlet.box.green-sharp > .portlet-title {\n    background-color: #2ab4c0; }\n    .portlet.box.green-sharp > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.green-sharp > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.green-sharp > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #79d9e2;\n      color: #8edfe6; }\n      .portlet.box.green-sharp > .portlet-title > .actions .btn-default > i {\n        color: #9ae3e9; }\n      .portlet.box.green-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.green-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.green-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.green-sharp > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #a2e5eb;\n        color: #b7ebef; }\n\n.portlet > .portlet-body.grey,\n.portlet.grey {\n  background-color: #E5E5E5; }\n\n.portlet.solid.grey > .portlet-title,\n.portlet.solid.grey > .portlet-body {\n  border: 0;\n  color: #333333; }\n\n.portlet.solid.grey > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.grey > .portlet-title > .caption > i {\n    color: #333333; }\n\n.portlet.solid.grey > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.grey > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.grey > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.grey > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.grey > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.grey > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.grey {\n  border: 1px solid white;\n  border-top: 0; }\n  .portlet.box.grey > .portlet-title {\n    background-color: #E5E5E5; }\n    .portlet.box.grey > .portlet-title > .caption {\n      color: #333333; }\n      .portlet.box.grey > .portlet-title > .caption > i {\n        color: #333333; }\n    .portlet.box.grey > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid white;\n      color: white; }\n      .portlet.box.grey > .portlet-title > .actions .btn-default > i {\n        color: white; }\n      .portlet.box.grey > .portlet-title > .actions .btn-default:hover, .portlet.box.grey > .portlet-title > .actions .btn-default:focus, .portlet.box.grey > .portlet-title > .actions .btn-default:active, .portlet.box.grey > .portlet-title > .actions .btn-default.active {\n        border: 1px solid white;\n        color: white; }\n\n.portlet > .portlet-body.grey-steel,\n.portlet.grey-steel {\n  background-color: #e9edef; }\n\n.portlet.solid.grey-steel > .portlet-title,\n.portlet.solid.grey-steel > .portlet-body {\n  border: 0;\n  color: #80898e; }\n\n.portlet.solid.grey-steel > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.grey-steel > .portlet-title > .caption > i {\n    color: #80898e; }\n\n.portlet.solid.grey-steel > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.grey-steel > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.grey-steel > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.grey-steel > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.grey-steel > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.grey-steel > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.grey-steel {\n  border: 1px solid white;\n  border-top: 0; }\n  .portlet.box.grey-steel > .portlet-title {\n    background-color: #e9edef; }\n    .portlet.box.grey-steel > .portlet-title > .caption {\n      color: #80898e; }\n      .portlet.box.grey-steel > .portlet-title > .caption > i {\n        color: #80898e; }\n    .portlet.box.grey-steel > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid white;\n      color: white; }\n      .portlet.box.grey-steel > .portlet-title > .actions .btn-default > i {\n        color: white; }\n      .portlet.box.grey-steel > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-steel > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-steel > .portlet-title > .actions .btn-default:active, .portlet.box.grey-steel > .portlet-title > .actions .btn-default.active {\n        border: 1px solid white;\n        color: white; }\n\n.portlet > .portlet-body.grey-cararra,\n.portlet.grey-cararra {\n  background-color: #fafafa; }\n\n.portlet.solid.grey-cararra > .portlet-title,\n.portlet.solid.grey-cararra > .portlet-body {\n  border: 0;\n  color: #333333; }\n\n.portlet.solid.grey-cararra > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.grey-cararra > .portlet-title > .caption > i {\n    color: #333333; }\n\n.portlet.solid.grey-cararra > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.grey-cararra > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.grey-cararra > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.grey-cararra > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.grey-cararra > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.grey-cararra > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.grey-cararra {\n  border: 1px solid white;\n  border-top: 0; }\n  .portlet.box.grey-cararra > .portlet-title {\n    background-color: #fafafa; }\n    .portlet.box.grey-cararra > .portlet-title > .caption {\n      color: #333333; }\n      .portlet.box.grey-cararra > .portlet-title > .caption > i {\n        color: #333333; }\n    .portlet.box.grey-cararra > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid white;\n      color: white; }\n      .portlet.box.grey-cararra > .portlet-title > .actions .btn-default > i {\n        color: white; }\n      .portlet.box.grey-cararra > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default:active, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default.active {\n        border: 1px solid white;\n        color: white; }\n\n.portlet > .portlet-body.grey-gallery,\n.portlet.grey-gallery {\n  background-color: #555555; }\n\n.portlet.solid.grey-gallery > .portlet-title,\n.portlet.solid.grey-gallery > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.grey-gallery > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.grey-gallery > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.grey-gallery > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.grey-gallery > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.grey-gallery > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.grey-gallery > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.grey-gallery > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.grey-gallery > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.grey-gallery {\n  border: 1px solid #6f6f6f;\n  border-top: 0; }\n  .portlet.box.grey-gallery > .portlet-title {\n    background-color: #555555; }\n    .portlet.box.grey-gallery > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.grey-gallery > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.grey-gallery > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #8d8d8d;\n      color: #9a9a9a; }\n      .portlet.box.grey-gallery > .portlet-title > .actions .btn-default > i {\n        color: #a2a2a2; }\n      .portlet.box.grey-gallery > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default:active, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #a7a7a7;\n        color: #b3b3b3; }\n\n.portlet > .portlet-body.grey-cascade,\n.portlet.grey-cascade {\n  background-color: #95A5A6; }\n\n.portlet.solid.grey-cascade > .portlet-title,\n.portlet.solid.grey-cascade > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.grey-cascade > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.grey-cascade > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.grey-cascade > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.grey-cascade > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.grey-cascade > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.grey-cascade > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.grey-cascade > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.grey-cascade > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.grey-cascade {\n  border: 1px solid #b1bdbd;\n  border-top: 0; }\n  .portlet.box.grey-cascade > .portlet-title {\n    background-color: #95A5A6; }\n    .portlet.box.grey-cascade > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.grey-cascade > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.grey-cascade > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #d2d9d9;\n      color: #e0e5e5; }\n      .portlet.box.grey-cascade > .portlet-title > .actions .btn-default > i {\n        color: #e8ecec; }\n      .portlet.box.grey-cascade > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default:active, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #eef0f0;\n        color: #fcfcfc; }\n\n.portlet > .portlet-body.grey-silver,\n.portlet.grey-silver {\n  background-color: #BFBFBF; }\n\n.portlet.solid.grey-silver > .portlet-title,\n.portlet.solid.grey-silver > .portlet-body {\n  border: 0;\n  color: #FAFCFB; }\n\n.portlet.solid.grey-silver > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.grey-silver > .portlet-title > .caption > i {\n    color: #FAFCFB; }\n\n.portlet.solid.grey-silver > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.grey-silver > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.grey-silver > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.grey-silver > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.grey-silver > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.grey-silver > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.grey-silver {\n  border: 1px solid #d9d9d9;\n  border-top: 0; }\n  .portlet.box.grey-silver > .portlet-title {\n    background-color: #BFBFBF; }\n    .portlet.box.grey-silver > .portlet-title > .caption {\n      color: #FAFCFB; }\n      .portlet.box.grey-silver > .portlet-title > .caption > i {\n        color: #FAFCFB; }\n    .portlet.box.grey-silver > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #f7f7f7;\n      color: white; }\n      .portlet.box.grey-silver > .portlet-title > .actions .btn-default > i {\n        color: white; }\n      .portlet.box.grey-silver > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-silver > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-silver > .portlet-title > .actions .btn-default:active, .portlet.box.grey-silver > .portlet-title > .actions .btn-default.active {\n        border: 1px solid white;\n        color: white; }\n\n.portlet > .portlet-body.grey-salsa,\n.portlet.grey-salsa {\n  background-color: #ACB5C3; }\n\n.portlet.solid.grey-salsa > .portlet-title,\n.portlet.solid.grey-salsa > .portlet-body {\n  border: 0;\n  color: #FAFCFB; }\n\n.portlet.solid.grey-salsa > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.grey-salsa > .portlet-title > .caption > i {\n    color: #FAFCFB; }\n\n.portlet.solid.grey-salsa > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.grey-salsa > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.grey-salsa > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.grey-salsa > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.grey-salsa > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.grey-salsa > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.grey-salsa {\n  border: 1px solid #cacfd8;\n  border-top: 0; }\n  .portlet.box.grey-salsa > .portlet-title {\n    background-color: #ACB5C3; }\n    .portlet.box.grey-salsa > .portlet-title > .caption {\n      color: #FAFCFB; }\n      .portlet.box.grey-salsa > .portlet-title > .caption > i {\n        color: #FAFCFB; }\n    .portlet.box.grey-salsa > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #edeff2;\n      color: #fcfcfd; }\n      .portlet.box.grey-salsa > .portlet-title > .actions .btn-default > i {\n        color: white; }\n      .portlet.box.grey-salsa > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default:active, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default.active {\n        border: 1px solid white;\n        color: white; }\n\n.portlet > .portlet-body.grey-salt,\n.portlet.grey-salt {\n  background-color: #bfcad1; }\n\n.portlet.solid.grey-salt > .portlet-title,\n.portlet.solid.grey-salt > .portlet-body {\n  border: 0;\n  color: #FAFCFB; }\n\n.portlet.solid.grey-salt > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.grey-salt > .portlet-title > .caption > i {\n    color: #FAFCFB; }\n\n.portlet.solid.grey-salt > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.grey-salt > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.grey-salt > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.grey-salt > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.grey-salt > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.grey-salt > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.grey-salt {\n  border: 1px solid #dde3e6;\n  border-top: 0; }\n  .portlet.box.grey-salt > .portlet-title {\n    background-color: #bfcad1; }\n    .portlet.box.grey-salt > .portlet-title > .caption {\n      color: #FAFCFB; }\n      .portlet.box.grey-salt > .portlet-title > .caption > i {\n        color: #FAFCFB; }\n    .portlet.box.grey-salt > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid white;\n      color: white; }\n      .portlet.box.grey-salt > .portlet-title > .actions .btn-default > i {\n        color: white; }\n      .portlet.box.grey-salt > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-salt > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-salt > .portlet-title > .actions .btn-default:active, .portlet.box.grey-salt > .portlet-title > .actions .btn-default.active {\n        border: 1px solid white;\n        color: white; }\n\n.portlet > .portlet-body.grey-mint,\n.portlet.grey-mint {\n  background-color: #525e64; }\n\n.portlet.solid.grey-mint > .portlet-title,\n.portlet.solid.grey-mint > .portlet-body {\n  border: 0;\n  color: #FFFFFF; }\n\n.portlet.solid.grey-mint > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.grey-mint > .portlet-title > .caption > i {\n    color: #FFFFFF; }\n\n.portlet.solid.grey-mint > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.grey-mint > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.grey-mint > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.grey-mint > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.grey-mint > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.grey-mint > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.grey-mint {\n  border: 1px solid #697880;\n  border-top: 0; }\n  .portlet.box.grey-mint > .portlet-title {\n    background-color: #525e64; }\n    .portlet.box.grey-mint > .portlet-title > .caption {\n      color: #FFFFFF; }\n      .portlet.box.grey-mint > .portlet-title > .caption > i {\n        color: #FFFFFF; }\n    .portlet.box.grey-mint > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #88979e;\n      color: #96a3a9; }\n      .portlet.box.grey-mint > .portlet-title > .actions .btn-default > i {\n        color: #9faab0; }\n      .portlet.box.grey-mint > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-mint > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-mint > .portlet-title > .actions .btn-default:active, .portlet.box.grey-mint > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #a4afb5;\n        color: #b2bcc0; }\n\n.portlet > .portlet-body.red,\n.portlet.red {\n  background-color: #e7505a; }\n\n.portlet.solid.red > .portlet-title,\n.portlet.solid.red > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.red > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.red > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.red > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.red > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.red > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.red > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.red > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.red > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.red {\n  border: 1px solid #ed7d84;\n  border-top: 0; }\n  .portlet.box.red > .portlet-title {\n    background-color: #e7505a; }\n    .portlet.box.red > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.red > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.red > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #f5b3b7;\n      color: #f8c9cc; }\n      .portlet.box.red > .portlet-title > .actions .btn-default > i {\n        color: #f9d7d9; }\n      .portlet.box.red > .portlet-title > .actions .btn-default:hover, .portlet.box.red > .portlet-title > .actions .btn-default:focus, .portlet.box.red > .portlet-title > .actions .btn-default:active, .portlet.box.red > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #fbe0e1;\n        color: #fef6f6; }\n\n.portlet > .portlet-body.red-pink,\n.portlet.red-pink {\n  background-color: #E08283; }\n\n.portlet.solid.red-pink > .portlet-title,\n.portlet.solid.red-pink > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.red-pink > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.red-pink > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.red-pink > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.red-pink > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.red-pink > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.red-pink > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.red-pink > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.red-pink > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.red-pink {\n  border: 1px solid #eaabac;\n  border-top: 0; }\n  .portlet.box.red-pink > .portlet-title {\n    background-color: #E08283; }\n    .portlet.box.red-pink > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.red-pink > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.red-pink > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #f6dcdc;\n      color: #fbf0f0; }\n      .portlet.box.red-pink > .portlet-title > .actions .btn-default > i {\n        color: #fefdfd; }\n      .portlet.box.red-pink > .portlet-title > .actions .btn-default:hover, .portlet.box.red-pink > .portlet-title > .actions .btn-default:focus, .portlet.box.red-pink > .portlet-title > .actions .btn-default:active, .portlet.box.red-pink > .portlet-title > .actions .btn-default.active {\n        border: 1px solid white;\n        color: white; }\n\n.portlet > .portlet-body.red-sunglo,\n.portlet.red-sunglo {\n  background-color: #E26A6A; }\n\n.portlet.solid.red-sunglo > .portlet-title,\n.portlet.solid.red-sunglo > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.red-sunglo > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.red-sunglo > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.red-sunglo > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.red-sunglo > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.red-sunglo > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.red-sunglo > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.red-sunglo > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.red-sunglo > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.red-sunglo {\n  border: 1px solid #ea9595;\n  border-top: 0; }\n  .portlet.box.red-sunglo > .portlet-title {\n    background-color: #E26A6A; }\n    .portlet.box.red-sunglo > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.red-sunglo > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.red-sunglo > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #f4c8c8;\n      color: #f8dddd; }\n      .portlet.box.red-sunglo > .portlet-title > .actions .btn-default > i {\n        color: #fbeaea; }\n      .portlet.box.red-sunglo > .portlet-title > .actions .btn-default:hover, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default:focus, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default:active, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #fdf3f3;\n        color: white; }\n\n.portlet > .portlet-body.red-intense,\n.portlet.red-intense {\n  background-color: #e35b5a; }\n\n.portlet.solid.red-intense > .portlet-title,\n.portlet.solid.red-intense > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.red-intense > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.red-intense > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.red-intense > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.red-intense > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.red-intense > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.red-intense > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.red-intense > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.red-intense > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.red-intense {\n  border: 1px solid #ea8686;\n  border-top: 0; }\n  .portlet.box.red-intense > .portlet-title {\n    background-color: #e35b5a; }\n    .portlet.box.red-intense > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.red-intense > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.red-intense > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #f3baba;\n      color: #f7d0d0; }\n      .portlet.box.red-intense > .portlet-title > .actions .btn-default > i {\n        color: #f9dddd; }\n      .portlet.box.red-intense > .portlet-title > .actions .btn-default:hover, .portlet.box.red-intense > .portlet-title > .actions .btn-default:focus, .portlet.box.red-intense > .portlet-title > .actions .btn-default:active, .portlet.box.red-intense > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #fbe6e6;\n        color: #fefbfb; }\n\n.portlet > .portlet-body.red-thunderbird,\n.portlet.red-thunderbird {\n  background-color: #D91E18; }\n\n.portlet.solid.red-thunderbird > .portlet-title,\n.portlet.solid.red-thunderbird > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.red-thunderbird > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.red-thunderbird > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.red-thunderbird > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.red-thunderbird > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.red-thunderbird > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.red-thunderbird > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.red-thunderbird > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.red-thunderbird > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.red-thunderbird {\n  border: 1px solid #e9403b;\n  border-top: 0; }\n  .portlet.box.red-thunderbird > .portlet-title {\n    background-color: #D91E18; }\n    .portlet.box.red-thunderbird > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.red-thunderbird > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #ef7672;\n      color: #f28c89; }\n      .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default > i {\n        color: #f39997; }\n      .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:hover, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:focus, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:active, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #f4a2a0;\n        color: #f7b9b7; }\n\n.portlet > .portlet-body.red-flamingo,\n.portlet.red-flamingo {\n  background-color: #EF4836; }\n\n.portlet.solid.red-flamingo > .portlet-title,\n.portlet.solid.red-flamingo > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.red-flamingo > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.red-flamingo > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.red-flamingo > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.red-flamingo > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.red-flamingo > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.red-flamingo > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.red-flamingo > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.red-flamingo > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.red-flamingo {\n  border: 1px solid #f37365;\n  border-top: 0; }\n  .portlet.box.red-flamingo > .portlet-title {\n    background-color: #EF4836; }\n    .portlet.box.red-flamingo > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.red-flamingo > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.red-flamingo > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #f7a79e;\n      color: #f9bcb6; }\n      .portlet.box.red-flamingo > .portlet-title > .actions .btn-default > i {\n        color: #fac9c4; }\n      .portlet.box.red-flamingo > .portlet-title > .actions .btn-default:hover, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default:focus, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default:active, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #fbd2cd;\n        color: #fde7e5; }\n\n.portlet > .portlet-body.red-soft,\n.portlet.red-soft {\n  background-color: #d05454; }\n\n.portlet.solid.red-soft > .portlet-title,\n.portlet.solid.red-soft > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.red-soft > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.red-soft > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.red-soft > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.red-soft > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.red-soft > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.red-soft > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.red-soft > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.red-soft > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.red-soft {\n  border: 1px solid #db7c7c;\n  border-top: 0; }\n  .portlet.box.red-soft > .portlet-title {\n    background-color: #d05454; }\n    .portlet.box.red-soft > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.red-soft > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.red-soft > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #e8acac;\n      color: #eec0c0; }\n      .portlet.box.red-soft > .portlet-title > .actions .btn-default > i {\n        color: #f1cccc; }\n      .portlet.box.red-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.red-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.red-soft > .portlet-title > .actions .btn-default:active, .portlet.box.red-soft > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #f3d4d4;\n        color: #f9e8e8; }\n\n.portlet > .portlet-body.red-haze,\n.portlet.red-haze {\n  background-color: #f36a5a; }\n\n.portlet.solid.red-haze > .portlet-title,\n.portlet.solid.red-haze > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.red-haze > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.red-haze > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.red-haze > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.red-haze > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.red-haze > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.red-haze > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.red-haze > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.red-haze > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.red-haze {\n  border: 1px solid #f6958a;\n  border-top: 0; }\n  .portlet.box.red-haze > .portlet-title {\n    background-color: #f36a5a; }\n    .portlet.box.red-haze > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.red-haze > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.red-haze > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #fbc8c3;\n      color: #fcdeda; }\n      .portlet.box.red-haze > .portlet-title > .actions .btn-default > i {\n        color: #fdebe9; }\n      .portlet.box.red-haze > .portlet-title > .actions .btn-default:hover, .portlet.box.red-haze > .portlet-title > .actions .btn-default:focus, .portlet.box.red-haze > .portlet-title > .actions .btn-default:active, .portlet.box.red-haze > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #fef3f2;\n        color: white; }\n\n.portlet > .portlet-body.red-mint,\n.portlet.red-mint {\n  background-color: #e43a45; }\n\n.portlet.solid.red-mint > .portlet-title,\n.portlet.solid.red-mint > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.red-mint > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.red-mint > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.red-mint > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.red-mint > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.red-mint > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.red-mint > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.red-mint > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.red-mint > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.red-mint {\n  border: 1px solid #ea676f;\n  border-top: 0; }\n  .portlet.box.red-mint > .portlet-title {\n    background-color: #e43a45; }\n    .portlet.box.red-mint > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.red-mint > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.red-mint > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #f29da2;\n      color: #f5b3b7; }\n      .portlet.box.red-mint > .portlet-title > .actions .btn-default > i {\n        color: #f6c1c4; }\n      .portlet.box.red-mint > .portlet-title > .actions .btn-default:hover, .portlet.box.red-mint > .portlet-title > .actions .btn-default:focus, .portlet.box.red-mint > .portlet-title > .actions .btn-default:active, .portlet.box.red-mint > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #f8cacd;\n        color: #fbe0e2; }\n\n.portlet > .portlet-body.yellow,\n.portlet.yellow {\n  background-color: #c49f47; }\n\n.portlet.solid.yellow > .portlet-title,\n.portlet.solid.yellow > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.yellow > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.yellow > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.yellow > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.yellow > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.yellow > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.yellow > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.yellow > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.yellow > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.yellow {\n  border: 1px solid #d0b36e;\n  border-top: 0; }\n  .portlet.box.yellow > .portlet-title {\n    background-color: #c49f47; }\n    .portlet.box.yellow > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.yellow > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.yellow > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #dfcb9c;\n      color: #e5d5af; }\n      .portlet.box.yellow > .portlet-title > .actions .btn-default > i {\n        color: #e9dbbb; }\n      .portlet.box.yellow > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow > .portlet-title > .actions .btn-default:active, .portlet.box.yellow > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #ecdfc3;\n        color: #f2ead6; }\n\n.portlet > .portlet-body.yellow-gold,\n.portlet.yellow-gold {\n  background-color: #E87E04; }\n\n.portlet.solid.yellow-gold > .portlet-title,\n.portlet.solid.yellow-gold > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.yellow-gold > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.yellow-gold > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.yellow-gold > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.yellow-gold > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.yellow-gold > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.yellow-gold > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.yellow-gold > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.yellow-gold > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.yellow-gold {\n  border: 1px solid #fb9724;\n  border-top: 0; }\n  .portlet.box.yellow-gold > .portlet-title {\n    background-color: #E87E04; }\n    .portlet.box.yellow-gold > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.yellow-gold > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.yellow-gold > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #fcb460;\n      color: #fdbf79; }\n      .portlet.box.yellow-gold > .portlet-title > .actions .btn-default > i {\n        color: #fdc788; }\n      .portlet.box.yellow-gold > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #fdcb92;\n        color: #fed7ab; }\n\n.portlet > .portlet-body.yellow-casablanca,\n.portlet.yellow-casablanca {\n  background-color: #f2784b; }\n\n.portlet.solid.yellow-casablanca > .portlet-title,\n.portlet.solid.yellow-casablanca > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.yellow-casablanca > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.yellow-casablanca > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.yellow-casablanca {\n  border: 1px solid #f59c7b;\n  border-top: 0; }\n  .portlet.box.yellow-casablanca > .portlet-title {\n    background-color: #f2784b; }\n    .portlet.box.yellow-casablanca > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.yellow-casablanca > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #fac6b4;\n      color: #fbd8cb; }\n      .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default > i {\n        color: #fce3da; }\n      .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #fdeae3;\n        color: #fffcfb; }\n\n.portlet > .portlet-body.yellow-crusta,\n.portlet.yellow-crusta {\n  background-color: #f3c200; }\n\n.portlet.solid.yellow-crusta > .portlet-title,\n.portlet.solid.yellow-crusta > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.yellow-crusta > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.yellow-crusta > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.yellow-crusta > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.yellow-crusta > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.yellow-crusta > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.yellow-crusta > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.yellow-crusta > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.yellow-crusta > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.yellow-crusta {\n  border: 1px solid #ffd327;\n  border-top: 0; }\n  .portlet.box.yellow-crusta > .portlet-title {\n    background-color: #f3c200; }\n    .portlet.box.yellow-crusta > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.yellow-crusta > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #ffe064;\n      color: #ffe57e; }\n      .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default > i {\n        color: #ffe88d; }\n      .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #ffea97;\n        color: #ffefb1; }\n\n.portlet > .portlet-body.yellow-lemon,\n.portlet.yellow-lemon {\n  background-color: #F7CA18; }\n\n.portlet.solid.yellow-lemon > .portlet-title,\n.portlet.solid.yellow-lemon > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.yellow-lemon > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.yellow-lemon > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.yellow-lemon > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.yellow-lemon > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.yellow-lemon > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.yellow-lemon > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.yellow-lemon > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.yellow-lemon > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.yellow-lemon {\n  border: 1px solid #f9d549;\n  border-top: 0; }\n  .portlet.box.yellow-lemon > .portlet-title {\n    background-color: #F7CA18; }\n    .portlet.box.yellow-lemon > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.yellow-lemon > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #fbe384;\n      color: #fce99d; }\n      .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default > i {\n        color: #fcecac; }\n      .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #fceeb6;\n        color: #fdf4ce; }\n\n.portlet > .portlet-body.yellow-saffron,\n.portlet.yellow-saffron {\n  background-color: #F4D03F; }\n\n.portlet.solid.yellow-saffron > .portlet-title,\n.portlet.solid.yellow-saffron > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.yellow-saffron > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.yellow-saffron > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.yellow-saffron > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.yellow-saffron > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.yellow-saffron > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.yellow-saffron > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.yellow-saffron > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.yellow-saffron > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.yellow-saffron {\n  border: 1px solid #f7dc6f;\n  border-top: 0; }\n  .portlet.box.yellow-saffron > .portlet-title {\n    background-color: #F4D03F; }\n    .portlet.box.yellow-saffron > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.yellow-saffron > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #faeaa9;\n      color: #fbf0c1; }\n      .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default > i {\n        color: #fcf3d0; }\n      .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #fdf6d9;\n        color: #fefcf1; }\n\n.portlet > .portlet-body.yellow-soft,\n.portlet.yellow-soft {\n  background-color: #c8d046; }\n\n.portlet.solid.yellow-soft > .portlet-title,\n.portlet.solid.yellow-soft > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.yellow-soft > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.yellow-soft > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.yellow-soft > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.yellow-soft > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.yellow-soft > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.yellow-soft > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.yellow-soft > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.yellow-soft > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.yellow-soft {\n  border: 1px solid #d4da6f;\n  border-top: 0; }\n  .portlet.box.yellow-soft > .portlet-title {\n    background-color: #c8d046; }\n    .portlet.box.yellow-soft > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.yellow-soft > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.yellow-soft > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #e3e79f;\n      color: #e9ecb4; }\n      .portlet.box.yellow-soft > .portlet-title > .actions .btn-default > i {\n        color: #ecefc0; }\n      .portlet.box.yellow-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-soft > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-soft > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #eff1c8;\n        color: #f5f6dc; }\n\n.portlet > .portlet-body.yellow-haze,\n.portlet.yellow-haze {\n  background-color: #c5bf66; }\n\n.portlet.solid.yellow-haze > .portlet-title,\n.portlet.solid.yellow-haze > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.yellow-haze > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.yellow-haze > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.yellow-haze > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.yellow-haze > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.yellow-haze > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.yellow-haze > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.yellow-haze > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.yellow-haze > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.yellow-haze {\n  border: 1px solid #d3ce8b;\n  border-top: 0; }\n  .portlet.box.yellow-haze > .portlet-title {\n    background-color: #c5bf66; }\n    .portlet.box.yellow-haze > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.yellow-haze > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.yellow-haze > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #e4e1b7;\n      color: #ebe9ca; }\n      .portlet.box.yellow-haze > .portlet-title > .actions .btn-default > i {\n        color: #efedd5; }\n      .portlet.box.yellow-haze > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-haze > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-haze > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-haze > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #f2f1dc;\n        color: #f9f8ef; }\n\n.portlet > .portlet-body.yellow-mint,\n.portlet.yellow-mint {\n  background-color: #c5b96b; }\n\n.portlet.solid.yellow-mint > .portlet-title,\n.portlet.solid.yellow-mint > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.yellow-mint > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.yellow-mint > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.yellow-mint > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.yellow-mint > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.yellow-mint > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.yellow-mint > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.yellow-mint > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.yellow-mint > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.yellow-mint {\n  border: 1px solid #d3ca90;\n  border-top: 0; }\n  .portlet.box.yellow-mint > .portlet-title {\n    background-color: #c5b96b; }\n    .portlet.box.yellow-mint > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.yellow-mint > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.yellow-mint > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #e5dfbc;\n      color: #ece8ce; }\n      .portlet.box.yellow-mint > .portlet-title > .actions .btn-default > i {\n        color: #f0edd9; }\n      .portlet.box.yellow-mint > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-mint > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-mint > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-mint > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #f3f0e0;\n        color: #faf9f3; }\n\n.portlet > .portlet-body.purple,\n.portlet.purple {\n  background-color: #8E44AD; }\n\n.portlet.solid.purple > .portlet-title,\n.portlet.solid.purple > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.purple > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.purple > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.purple > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.purple > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.purple > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.purple > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.purple > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.purple > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.purple {\n  border: 1px solid #a563c1;\n  border-top: 0; }\n  .portlet.box.purple > .portlet-title {\n    background-color: #8E44AD; }\n    .portlet.box.purple > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.purple > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.purple > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #bf8ed3;\n      color: #c9a1da; }\n      .portlet.box.purple > .portlet-title > .actions .btn-default > i {\n        color: #cfacde; }\n      .portlet.box.purple > .portlet-title > .actions .btn-default:hover, .portlet.box.purple > .portlet-title > .actions .btn-default:focus, .portlet.box.purple > .portlet-title > .actions .btn-default:active, .portlet.box.purple > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #d4b3e1;\n        color: #dec5e8; }\n\n.portlet > .portlet-body.purple-plum,\n.portlet.purple-plum {\n  background-color: #8775a7; }\n\n.portlet.solid.purple-plum > .portlet-title,\n.portlet.solid.purple-plum > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.purple-plum > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.purple-plum > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.purple-plum > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.purple-plum > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.purple-plum > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.purple-plum > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.purple-plum > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.purple-plum > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.purple-plum {\n  border: 1px solid #a294bb;\n  border-top: 0; }\n  .portlet.box.purple-plum > .portlet-title {\n    background-color: #8775a7; }\n    .portlet.box.purple-plum > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.purple-plum > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.purple-plum > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #c3bad3;\n      color: #d0c9dd; }\n      .portlet.box.purple-plum > .portlet-title > .actions .btn-default > i {\n        color: #d8d2e3; }\n      .portlet.box.purple-plum > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-plum > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-plum > .portlet-title > .actions .btn-default:active, .portlet.box.purple-plum > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #ded9e7;\n        color: #ebe8f0; }\n\n.portlet > .portlet-body.purple-medium,\n.portlet.purple-medium {\n  background-color: #BF55EC; }\n\n.portlet.solid.purple-medium > .portlet-title,\n.portlet.solid.purple-medium > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.purple-medium > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.purple-medium > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.purple-medium > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.purple-medium > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.purple-medium > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.purple-medium > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.purple-medium > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.purple-medium > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.purple-medium {\n  border: 1px solid #d083f1;\n  border-top: 0; }\n  .portlet.box.purple-medium > .portlet-title {\n    background-color: #BF55EC; }\n    .portlet.box.purple-medium > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.purple-medium > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.purple-medium > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #e5baf7;\n      color: #eed1fa; }\n      .portlet.box.purple-medium > .portlet-title > .actions .btn-default > i {\n        color: #f3dffb; }\n      .portlet.box.purple-medium > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-medium > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-medium > .portlet-title > .actions .btn-default:active, .portlet.box.purple-medium > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #f6e8fc;\n        color: white; }\n\n.portlet > .portlet-body.purple-studio,\n.portlet.purple-studio {\n  background-color: #8E44AD; }\n\n.portlet.solid.purple-studio > .portlet-title,\n.portlet.solid.purple-studio > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.purple-studio > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.purple-studio > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.purple-studio > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.purple-studio > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.purple-studio > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.purple-studio > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.purple-studio > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.purple-studio > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.purple-studio {\n  border: 1px solid #a563c1;\n  border-top: 0; }\n  .portlet.box.purple-studio > .portlet-title {\n    background-color: #8E44AD; }\n    .portlet.box.purple-studio > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.purple-studio > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.purple-studio > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #bf8ed3;\n      color: #c9a1da; }\n      .portlet.box.purple-studio > .portlet-title > .actions .btn-default > i {\n        color: #cfacde; }\n      .portlet.box.purple-studio > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-studio > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-studio > .portlet-title > .actions .btn-default:active, .portlet.box.purple-studio > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #d4b3e1;\n        color: #dec5e8; }\n\n.portlet > .portlet-body.purple-wisteria,\n.portlet.purple-wisteria {\n  background-color: #9B59B6; }\n\n.portlet.solid.purple-wisteria > .portlet-title,\n.portlet.solid.purple-wisteria > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.purple-wisteria > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.purple-wisteria > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.purple-wisteria > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.purple-wisteria > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.purple-wisteria > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.purple-wisteria > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.purple-wisteria > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.purple-wisteria > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.purple-wisteria {\n  border: 1px solid #b07cc6;\n  border-top: 0; }\n  .portlet.box.purple-wisteria > .portlet-title {\n    background-color: #9B59B6; }\n    .portlet.box.purple-wisteria > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.purple-wisteria > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #caa7d8;\n      color: #d5b9e0; }\n      .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default > i {\n        color: #dbc3e5; }\n      .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:active, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #dfcae8;\n        color: #eadcf0; }\n\n.portlet > .portlet-body.purple-seance,\n.portlet.purple-seance {\n  background-color: #9A12B3; }\n\n.portlet.solid.purple-seance > .portlet-title,\n.portlet.solid.purple-seance > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.purple-seance > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.purple-seance > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.purple-seance > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.purple-seance > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.purple-seance > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.purple-seance > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.purple-seance > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.purple-seance > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.purple-seance {\n  border: 1px solid #c217e1;\n  border-top: 0; }\n  .portlet.box.purple-seance > .portlet-title {\n    background-color: #9A12B3; }\n    .portlet.box.purple-seance > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.purple-seance > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.purple-seance > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #d349ed;\n      color: #d960ef; }\n      .portlet.box.purple-seance > .portlet-title > .actions .btn-default > i {\n        color: #dc6ef0; }\n      .portlet.box.purple-seance > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-seance > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-seance > .portlet-title > .actions .btn-default:active, .portlet.box.purple-seance > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #de77f1;\n        color: #e48ef4; }\n\n.portlet > .portlet-body.purple-intense,\n.portlet.purple-intense {\n  background-color: #8775a7; }\n\n.portlet.solid.purple-intense > .portlet-title,\n.portlet.solid.purple-intense > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.purple-intense > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.purple-intense > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.purple-intense > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.purple-intense > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.purple-intense > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.purple-intense > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.purple-intense > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.purple-intense > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.purple-intense {\n  border: 1px solid #a294bb;\n  border-top: 0; }\n  .portlet.box.purple-intense > .portlet-title {\n    background-color: #8775a7; }\n    .portlet.box.purple-intense > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.purple-intense > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.purple-intense > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #c3bad3;\n      color: #d0c9dd; }\n      .portlet.box.purple-intense > .portlet-title > .actions .btn-default > i {\n        color: #d8d2e3; }\n      .portlet.box.purple-intense > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-intense > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-intense > .portlet-title > .actions .btn-default:active, .portlet.box.purple-intense > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #ded9e7;\n        color: #ebe8f0; }\n\n.portlet > .portlet-body.purple-sharp,\n.portlet.purple-sharp {\n  background-color: #796799; }\n\n.portlet.solid.purple-sharp > .portlet-title,\n.portlet.solid.purple-sharp > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.purple-sharp > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.purple-sharp > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.purple-sharp > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.purple-sharp > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.purple-sharp > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.purple-sharp > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.purple-sharp > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.purple-sharp > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.purple-sharp {\n  border: 1px solid #9486ad;\n  border-top: 0; }\n  .portlet.box.purple-sharp > .portlet-title {\n    background-color: #796799; }\n    .portlet.box.purple-sharp > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.purple-sharp > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.purple-sharp > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #b4aac6;\n      color: #c2b9d0; }\n      .portlet.box.purple-sharp > .portlet-title > .actions .btn-default > i {\n        color: #cac3d6; }\n      .portlet.box.purple-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #cfc9db;\n        color: #ddd8e5; }\n\n.portlet > .portlet-body.purple-soft,\n.portlet.purple-soft {\n  background-color: #8877a9; }\n\n.portlet.solid.purple-soft > .portlet-title,\n.portlet.solid.purple-soft > .portlet-body {\n  border: 0;\n  color: #ffffff; }\n\n.portlet.solid.purple-soft > .portlet-title > .caption {\n  font-weight: 400; }\n  .portlet.solid.purple-soft > .portlet-title > .caption > i {\n    color: #ffffff; }\n\n.portlet.solid.purple-soft > .portlet-title > .tools > a.remove {\n  background-image: url(img/portlet-remove-icon-white.png); }\n\n.portlet.solid.purple-soft > .portlet-title > .tools > a.config {\n  background-image: url(img/portlet-config-icon-white.png); }\n\n.portlet.solid.purple-soft > .portlet-title > .tools > a.reload {\n  background-image: url(img/portlet-reload-icon-white.png); }\n\n.portlet.solid.purple-soft > .portlet-title > .tools > a.expand {\n  background-image: url(img/portlet-expand-icon-white.png); }\n\n.portlet.solid.purple-soft > .portlet-title > .tools > a.collapse {\n  background-image: url(img/portlet-collapse-icon-white.png); }\n\n.portlet.solid.purple-soft > .portlet-title > .tools > a.fullscreen {\n  color: #fdfdfd; }\n\n.portlet.box.purple-soft {\n  border: 1px solid #a396bd;\n  border-top: 0; }\n  .portlet.box.purple-soft > .portlet-title {\n    background-color: #8877a9; }\n    .portlet.box.purple-soft > .portlet-title > .caption {\n      color: #ffffff; }\n      .portlet.box.purple-soft > .portlet-title > .caption > i {\n        color: #ffffff; }\n    .portlet.box.purple-soft > .portlet-title > .actions .btn-default {\n      background: transparent !important;\n      background-color: transparent !important;\n      border: 1px solid #c4bcd4;\n      color: #d2cbde; }\n      .portlet.box.purple-soft > .portlet-title > .actions .btn-default > i {\n        color: #dad5e4; }\n      .portlet.box.purple-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-soft > .portlet-title > .actions .btn-default:active, .portlet.box.purple-soft > .portlet-title > .actions .btn-default.active {\n        border: 1px solid #dfdbe8;\n        color: #edebf2; }\n\n/***\nCustomized Progress Bars\n***/\n.progress {\n  border: 0;\n  background-image: none;\n  filter: none;\n  box-shadow: none;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none; }\n  .progress.progress-sm {\n    height: 12px; }\n  .page-md .progress {\n    text-indent: -99999px; }\n\n/* Custom colors */\n.progress-bar.white {\n  background: #ffffff !important;\n  color: #666 !important; }\n\n.progress-bar.default {\n  background: #e1e5ec !important;\n  color: #666 !important; }\n\n.progress-bar.dark {\n  background: #2f353b !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.blue {\n  background: #3598dc !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.blue-madison {\n  background: #578ebe !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.blue-chambray {\n  background: #2C3E50 !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.blue-ebonyclay {\n  background: #22313F !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.blue-hoki {\n  background: #67809F !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.blue-steel {\n  background: #4B77BE !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.blue-soft {\n  background: #4c87b9 !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.blue-dark {\n  background: #5e738b !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.blue-sharp {\n  background: #5C9BD1 !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.green {\n  background: #32c5d2 !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.green-meadow {\n  background: #1BBC9B !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.green-seagreen {\n  background: #1BA39C !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.green-turquoise {\n  background: #36D7B7 !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.green-haze {\n  background: #44b6ae !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.green-jungle {\n  background: #26C281 !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.green-soft {\n  background: #3faba4 !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.green-dark {\n  background: #4DB3A2 !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.green-sharp {\n  background: #2ab4c0 !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.grey {\n  background: #E5E5E5 !important;\n  color: #333333 !important; }\n\n.progress-bar.grey-steel {\n  background: #e9edef !important;\n  color: #80898e !important; }\n\n.progress-bar.grey-cararra {\n  background: #fafafa !important;\n  color: #333333 !important; }\n\n.progress-bar.grey-gallery {\n  background: #555555 !important;\n  color: #ffffff !important; }\n\n.progress-bar.grey-cascade {\n  background: #95A5A6 !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.grey-silver {\n  background: #BFBFBF !important;\n  color: #FAFCFB !important; }\n\n.progress-bar.grey-salsa {\n  background: #ACB5C3 !important;\n  color: #FAFCFB !important; }\n\n.progress-bar.grey-salt {\n  background: #bfcad1 !important;\n  color: #FAFCFB !important; }\n\n.progress-bar.grey-mint {\n  background: #525e64 !important;\n  color: #FFFFFF !important; }\n\n.progress-bar.red {\n  background: #e7505a !important;\n  color: #ffffff !important; }\n\n.progress-bar.red-pink {\n  background: #E08283 !important;\n  color: #ffffff !important; }\n\n.progress-bar.red-sunglo {\n  background: #E26A6A !important;\n  color: #ffffff !important; }\n\n.progress-bar.red-intense {\n  background: #e35b5a !important;\n  color: #ffffff !important; }\n\n.progress-bar.red-thunderbird {\n  background: #D91E18 !important;\n  color: #ffffff !important; }\n\n.progress-bar.red-flamingo {\n  background: #EF4836 !important;\n  color: #ffffff !important; }\n\n.progress-bar.red-soft {\n  background: #d05454 !important;\n  color: #ffffff !important; }\n\n.progress-bar.red-haze {\n  background: #f36a5a !important;\n  color: #ffffff !important; }\n\n.progress-bar.red-mint {\n  background: #e43a45 !important;\n  color: #ffffff !important; }\n\n.progress-bar.yellow {\n  background: #c49f47 !important;\n  color: #ffffff !important; }\n\n.progress-bar.yellow-gold {\n  background: #E87E04 !important;\n  color: #ffffff !important; }\n\n.progress-bar.yellow-casablanca {\n  background: #f2784b !important;\n  color: #ffffff !important; }\n\n.progress-bar.yellow-crusta {\n  background: #f3c200 !important;\n  color: #ffffff !important; }\n\n.progress-bar.yellow-lemon {\n  background: #F7CA18 !important;\n  color: #ffffff !important; }\n\n.progress-bar.yellow-saffron {\n  background: #F4D03F !important;\n  color: #ffffff !important; }\n\n.progress-bar.yellow-soft {\n  background: #c8d046 !important;\n  color: #ffffff !important; }\n\n.progress-bar.yellow-haze {\n  background: #c5bf66 !important;\n  color: #ffffff !important; }\n\n.progress-bar.yellow-mint {\n  background: #c5b96b !important;\n  color: #ffffff !important; }\n\n.progress-bar.purple {\n  background: #8E44AD !important;\n  color: #ffffff !important; }\n\n.progress-bar.purple-plum {\n  background: #8775a7 !important;\n  color: #ffffff !important; }\n\n.progress-bar.purple-medium {\n  background: #BF55EC !important;\n  color: #ffffff !important; }\n\n.progress-bar.purple-studio {\n  background: #8E44AD !important;\n  color: #ffffff !important; }\n\n.progress-bar.purple-wisteria {\n  background: #9B59B6 !important;\n  color: #ffffff !important; }\n\n.progress-bar.purple-seance {\n  background: #9A12B3 !important;\n  color: #ffffff !important; }\n\n.progress-bar.purple-intense {\n  background: #8775a7 !important;\n  color: #ffffff !important; }\n\n.progress-bar.purple-sharp {\n  background: #796799 !important;\n  color: #ffffff !important; }\n\n.progress-bar.purple-soft {\n  background: #8877a9 !important;\n  color: #ffffff !important; }\n\n/***\nDashboard Stats\n***/\n.dashboard-stat {\n  display: block;\n  margin-bottom: 25px;\n  overflow: hidden;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  -ms-border-radius: 4px;\n  -o-border-radius: 4px;\n  border-radius: 4px; }\n  .dashboard-stat:before, .dashboard-stat:after {\n    content: \" \";\n    display: table; }\n  .dashboard-stat:after {\n    clear: both; }\n  .portlet .dashboard-stat:last-child {\n    margin-bottom: 0; }\n  .dashboard-stat .visual {\n    width: 80px;\n    height: 80px;\n    display: block;\n    float: left;\n    padding-top: 10px;\n    padding-left: 15px;\n    margin-bottom: 15px;\n    font-size: 35px;\n    line-height: 35px; }\n    .dashboard-stat .visual > i {\n      margin-left: -35px;\n      font-size: 110px;\n      line-height: 110px; }\n  .dashboard-stat .details {\n    position: absolute;\n    right: 15px;\n    padding-right: 15px; }\n    .dashboard-stat .details .number {\n      padding-top: 25px;\n      text-align: right;\n      font-size: 34px;\n      line-height: 36px;\n      letter-spacing: -1px;\n      margin-bottom: 0px;\n      font-weight: 300; }\n    .dashboard-stat .details .desc {\n      text-align: right;\n      font-size: 16px;\n      letter-spacing: 0px;\n      font-weight: 300; }\n  .dashboard-stat .more {\n    clear: both;\n    display: block;\n    padding: 6px 10px 6px 10px;\n    position: relative;\n    text-transform: uppercase;\n    font-weight: 300;\n    font-size: 11px;\n    opacity: 0.7;\n    filter: alpha(opacity=70); }\n    .dashboard-stat .more:hover {\n      text-decoration: none;\n      opacity: 0.9;\n      filter: alpha(opacity=90); }\n    .dashboard-stat .more > i {\n      display: inline-block;\n      margin-top: 1px;\n      float: right; }\n  .dashboard-stat.dashboard-stat-v2 .visual {\n    padding-top: 35px;\n    margin-bottom: 40px; }\n\n.dashboard-stat.white {\n  background-color: #ffffff; }\n  .dashboard-stat.white.dashboard-stat-light:hover {\n    background-color: whitesmoke; }\n  .dashboard-stat.white .visual > i {\n    color: #666;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.white .details .number {\n    color: #666; }\n  .dashboard-stat.white .details .desc {\n    color: #666;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.white .more {\n    color: #666;\n    background-color: whitesmoke; }\n\n.dashboard-stat.default {\n  background-color: #e1e5ec; }\n  .dashboard-stat.default.dashboard-stat-light:hover {\n    background-color: #d5dae4; }\n  .dashboard-stat.default .visual > i {\n    color: #666;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.default .details .number {\n    color: #666; }\n  .dashboard-stat.default .details .desc {\n    color: #666;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.default .more {\n    color: #666;\n    background-color: #d5dae4; }\n\n.dashboard-stat.dark {\n  background-color: #2f353b; }\n  .dashboard-stat.dark.dashboard-stat-light:hover {\n    background-color: #262b30; }\n  .dashboard-stat.dark .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.dark .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.dark .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.dark .more {\n    color: #FFFFFF;\n    background-color: #262b30; }\n\n.dashboard-stat.blue {\n  background-color: #3598dc; }\n  .dashboard-stat.blue.dashboard-stat-light:hover {\n    background-color: #258fd7; }\n  .dashboard-stat.blue .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.blue .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.blue .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.blue .more {\n    color: #FFFFFF;\n    background-color: #258fd7; }\n\n.dashboard-stat.blue-madison {\n  background-color: #578ebe; }\n  .dashboard-stat.blue-madison.dashboard-stat-light:hover {\n    background-color: #4884b8; }\n  .dashboard-stat.blue-madison .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.blue-madison .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.blue-madison .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.blue-madison .more {\n    color: #FFFFFF;\n    background-color: #4884b8; }\n\n.dashboard-stat.blue-chambray {\n  background-color: #2C3E50; }\n  .dashboard-stat.blue-chambray.dashboard-stat-light:hover {\n    background-color: #253443; }\n  .dashboard-stat.blue-chambray .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.blue-chambray .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.blue-chambray .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.blue-chambray .more {\n    color: #FFFFFF;\n    background-color: #253443; }\n\n.dashboard-stat.blue-ebonyclay {\n  background-color: #22313F; }\n  .dashboard-stat.blue-ebonyclay.dashboard-stat-light:hover {\n    background-color: #1b2732; }\n  .dashboard-stat.blue-ebonyclay .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.blue-ebonyclay .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.blue-ebonyclay .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.blue-ebonyclay .more {\n    color: #FFFFFF;\n    background-color: #1b2732; }\n\n.dashboard-stat.blue-hoki {\n  background-color: #67809F; }\n  .dashboard-stat.blue-hoki.dashboard-stat-light:hover {\n    background-color: #5e7694; }\n  .dashboard-stat.blue-hoki .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.blue-hoki .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.blue-hoki .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.blue-hoki .more {\n    color: #FFFFFF;\n    background-color: #5e7694; }\n\n.dashboard-stat.blue-steel {\n  background-color: #4B77BE; }\n  .dashboard-stat.blue-steel.dashboard-stat-light:hover {\n    background-color: #416db4; }\n  .dashboard-stat.blue-steel .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.blue-steel .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.blue-steel .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.blue-steel .more {\n    color: #FFFFFF;\n    background-color: #416db4; }\n\n.dashboard-stat.blue-soft {\n  background-color: #4c87b9; }\n  .dashboard-stat.blue-soft.dashboard-stat-light:hover {\n    background-color: #447dad; }\n  .dashboard-stat.blue-soft .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.blue-soft .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.blue-soft .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.blue-soft .more {\n    color: #FFFFFF;\n    background-color: #447dad; }\n\n.dashboard-stat.blue-dark {\n  background-color: #5e738b; }\n  .dashboard-stat.blue-dark.dashboard-stat-light:hover {\n    background-color: #56697f; }\n  .dashboard-stat.blue-dark .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.blue-dark .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.blue-dark .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.blue-dark .more {\n    color: #FFFFFF;\n    background-color: #56697f; }\n\n.dashboard-stat.blue-sharp {\n  background-color: #5C9BD1; }\n  .dashboard-stat.blue-sharp.dashboard-stat-light:hover {\n    background-color: #4c91cd; }\n  .dashboard-stat.blue-sharp .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.blue-sharp .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.blue-sharp .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.blue-sharp .more {\n    color: #FFFFFF;\n    background-color: #4c91cd; }\n\n.dashboard-stat.green {\n  background-color: #32c5d2; }\n  .dashboard-stat.green.dashboard-stat-light:hover {\n    background-color: #2bb8c4; }\n  .dashboard-stat.green .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.green .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.green .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.green .more {\n    color: #FFFFFF;\n    background-color: #2bb8c4; }\n\n.dashboard-stat.green-meadow {\n  background-color: #1BBC9B; }\n  .dashboard-stat.green-meadow.dashboard-stat-light:hover {\n    background-color: #18aa8c; }\n  .dashboard-stat.green-meadow .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.green-meadow .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.green-meadow .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.green-meadow .more {\n    color: #FFFFFF;\n    background-color: #18aa8c; }\n\n.dashboard-stat.green-seagreen {\n  background-color: #1BA39C; }\n  .dashboard-stat.green-seagreen.dashboard-stat-light:hover {\n    background-color: #18918b; }\n  .dashboard-stat.green-seagreen .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.green-seagreen .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.green-seagreen .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.green-seagreen .more {\n    color: #FFFFFF;\n    background-color: #18918b; }\n\n.dashboard-stat.green-turquoise {\n  background-color: #36D7B7; }\n  .dashboard-stat.green-turquoise.dashboard-stat-light:hover {\n    background-color: #29cfae; }\n  .dashboard-stat.green-turquoise .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.green-turquoise .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.green-turquoise .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.green-turquoise .more {\n    color: #FFFFFF;\n    background-color: #29cfae; }\n\n.dashboard-stat.green-haze {\n  background-color: #44b6ae; }\n  .dashboard-stat.green-haze.dashboard-stat-light:hover {\n    background-color: #3ea7a0; }\n  .dashboard-stat.green-haze .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.green-haze .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.green-haze .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.green-haze .more {\n    color: #FFFFFF;\n    background-color: #3ea7a0; }\n\n.dashboard-stat.green-jungle {\n  background-color: #26C281; }\n  .dashboard-stat.green-jungle.dashboard-stat-light:hover {\n    background-color: #23b176; }\n  .dashboard-stat.green-jungle .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.green-jungle .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.green-jungle .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.green-jungle .more {\n    color: #FFFFFF;\n    background-color: #23b176; }\n\n.dashboard-stat.green-soft {\n  background-color: #3faba4; }\n  .dashboard-stat.green-soft.dashboard-stat-light:hover {\n    background-color: #3a9c96; }\n  .dashboard-stat.green-soft .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.green-soft .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.green-soft .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.green-soft .more {\n    color: #FFFFFF;\n    background-color: #3a9c96; }\n\n.dashboard-stat.green-dark {\n  background-color: #4DB3A2; }\n  .dashboard-stat.green-dark.dashboard-stat-light:hover {\n    background-color: #46a595; }\n  .dashboard-stat.green-dark .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.green-dark .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.green-dark .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.green-dark .more {\n    color: #FFFFFF;\n    background-color: #46a595; }\n\n.dashboard-stat.green-sharp {\n  background-color: #2ab4c0; }\n  .dashboard-stat.green-sharp.dashboard-stat-light:hover {\n    background-color: #26a4af; }\n  .dashboard-stat.green-sharp .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.green-sharp .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.green-sharp .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.green-sharp .more {\n    color: #FFFFFF;\n    background-color: #26a4af; }\n\n.dashboard-stat.grey {\n  background-color: #E5E5E5; }\n  .dashboard-stat.grey.dashboard-stat-light:hover {\n    background-color: #dbdbdb; }\n  .dashboard-stat.grey .visual > i {\n    color: #333333;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.grey .details .number {\n    color: #333333; }\n  .dashboard-stat.grey .details .desc {\n    color: #333333;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.grey .more {\n    color: #333333;\n    background-color: #dbdbdb; }\n\n.dashboard-stat.grey-steel {\n  background-color: #e9edef; }\n  .dashboard-stat.grey-steel.dashboard-stat-light:hover {\n    background-color: #dde3e6; }\n  .dashboard-stat.grey-steel .visual > i {\n    color: #80898e;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.grey-steel .details .number {\n    color: #80898e; }\n  .dashboard-stat.grey-steel .details .desc {\n    color: #80898e;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.grey-steel .more {\n    color: #80898e;\n    background-color: #dde3e6; }\n\n.dashboard-stat.grey-cararra {\n  background-color: #fafafa; }\n  .dashboard-stat.grey-cararra.dashboard-stat-light:hover {\n    background-color: #f0f0f0; }\n  .dashboard-stat.grey-cararra .visual > i {\n    color: #333333;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.grey-cararra .details .number {\n    color: #333333; }\n  .dashboard-stat.grey-cararra .details .desc {\n    color: #333333;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.grey-cararra .more {\n    color: #333333;\n    background-color: #f0f0f0; }\n\n.dashboard-stat.grey-gallery {\n  background-color: #555555; }\n  .dashboard-stat.grey-gallery.dashboard-stat-light:hover {\n    background-color: #4b4b4b; }\n  .dashboard-stat.grey-gallery .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.grey-gallery .details .number {\n    color: #ffffff; }\n  .dashboard-stat.grey-gallery .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.grey-gallery .more {\n    color: #ffffff;\n    background-color: #4b4b4b; }\n\n.dashboard-stat.grey-cascade {\n  background-color: #95A5A6; }\n  .dashboard-stat.grey-cascade.dashboard-stat-light:hover {\n    background-color: #8a9c9d; }\n  .dashboard-stat.grey-cascade .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.grey-cascade .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.grey-cascade .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.grey-cascade .more {\n    color: #FFFFFF;\n    background-color: #8a9c9d; }\n\n.dashboard-stat.grey-silver {\n  background-color: #BFBFBF; }\n  .dashboard-stat.grey-silver.dashboard-stat-light:hover {\n    background-color: #b5b5b5; }\n  .dashboard-stat.grey-silver .visual > i {\n    color: #FAFCFB;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.grey-silver .details .number {\n    color: #FAFCFB; }\n  .dashboard-stat.grey-silver .details .desc {\n    color: #FAFCFB;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.grey-silver .more {\n    color: #FAFCFB;\n    background-color: #b5b5b5; }\n\n.dashboard-stat.grey-salsa {\n  background-color: #ACB5C3; }\n  .dashboard-stat.grey-salsa.dashboard-stat-light:hover {\n    background-color: #a0aaba; }\n  .dashboard-stat.grey-salsa .visual > i {\n    color: #FAFCFB;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.grey-salsa .details .number {\n    color: #FAFCFB; }\n  .dashboard-stat.grey-salsa .details .desc {\n    color: #FAFCFB;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.grey-salsa .more {\n    color: #FAFCFB;\n    background-color: #a0aaba; }\n\n.dashboard-stat.grey-salt {\n  background-color: #bfcad1; }\n  .dashboard-stat.grey-salt.dashboard-stat-light:hover {\n    background-color: #b3c0c8; }\n  .dashboard-stat.grey-salt .visual > i {\n    color: #FAFCFB;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.grey-salt .details .number {\n    color: #FAFCFB; }\n  .dashboard-stat.grey-salt .details .desc {\n    color: #FAFCFB;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.grey-salt .more {\n    color: #FAFCFB;\n    background-color: #b3c0c8; }\n\n.dashboard-stat.grey-mint {\n  background-color: #525e64; }\n  .dashboard-stat.grey-mint.dashboard-stat-light:hover {\n    background-color: #495359; }\n  .dashboard-stat.grey-mint .visual > i {\n    color: #FFFFFF;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.grey-mint .details .number {\n    color: #FFFFFF; }\n  .dashboard-stat.grey-mint .details .desc {\n    color: #FFFFFF;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.grey-mint .more {\n    color: #FFFFFF;\n    background-color: #495359; }\n\n.dashboard-stat.red {\n  background-color: #e7505a; }\n  .dashboard-stat.red.dashboard-stat-light:hover {\n    background-color: #e53e49; }\n  .dashboard-stat.red .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.red .details .number {\n    color: #ffffff; }\n  .dashboard-stat.red .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.red .more {\n    color: #ffffff;\n    background-color: #e53e49; }\n\n.dashboard-stat.red-pink {\n  background-color: #E08283; }\n  .dashboard-stat.red-pink.dashboard-stat-light:hover {\n    background-color: #dc7273; }\n  .dashboard-stat.red-pink .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.red-pink .details .number {\n    color: #ffffff; }\n  .dashboard-stat.red-pink .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.red-pink .more {\n    color: #ffffff;\n    background-color: #dc7273; }\n\n.dashboard-stat.red-sunglo {\n  background-color: #E26A6A; }\n  .dashboard-stat.red-sunglo.dashboard-stat-light:hover {\n    background-color: #df5959; }\n  .dashboard-stat.red-sunglo .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.red-sunglo .details .number {\n    color: #ffffff; }\n  .dashboard-stat.red-sunglo .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.red-sunglo .more {\n    color: #ffffff;\n    background-color: #df5959; }\n\n.dashboard-stat.red-intense {\n  background-color: #e35b5a; }\n  .dashboard-stat.red-intense.dashboard-stat-light:hover {\n    background-color: #e04a49; }\n  .dashboard-stat.red-intense .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.red-intense .details .number {\n    color: #ffffff; }\n  .dashboard-stat.red-intense .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.red-intense .more {\n    color: #ffffff;\n    background-color: #e04a49; }\n\n.dashboard-stat.red-thunderbird {\n  background-color: #D91E18; }\n  .dashboard-stat.red-thunderbird.dashboard-stat-light:hover {\n    background-color: #c71b16; }\n  .dashboard-stat.red-thunderbird .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.red-thunderbird .details .number {\n    color: #ffffff; }\n  .dashboard-stat.red-thunderbird .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.red-thunderbird .more {\n    color: #ffffff;\n    background-color: #c71b16; }\n\n.dashboard-stat.red-flamingo {\n  background-color: #EF4836; }\n  .dashboard-stat.red-flamingo.dashboard-stat-light:hover {\n    background-color: #ed3723; }\n  .dashboard-stat.red-flamingo .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.red-flamingo .details .number {\n    color: #ffffff; }\n  .dashboard-stat.red-flamingo .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.red-flamingo .more {\n    color: #ffffff;\n    background-color: #ed3723; }\n\n.dashboard-stat.red-soft {\n  background-color: #d05454; }\n  .dashboard-stat.red-soft.dashboard-stat-light:hover {\n    background-color: #cc4444; }\n  .dashboard-stat.red-soft .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.red-soft .details .number {\n    color: #ffffff; }\n  .dashboard-stat.red-soft .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.red-soft .more {\n    color: #ffffff;\n    background-color: #cc4444; }\n\n.dashboard-stat.red-haze {\n  background-color: #f36a5a; }\n  .dashboard-stat.red-haze.dashboard-stat-light:hover {\n    background-color: #f25947; }\n  .dashboard-stat.red-haze .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.red-haze .details .number {\n    color: #ffffff; }\n  .dashboard-stat.red-haze .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.red-haze .more {\n    color: #ffffff;\n    background-color: #f25947; }\n\n.dashboard-stat.red-mint {\n  background-color: #e43a45; }\n  .dashboard-stat.red-mint.dashboard-stat-light:hover {\n    background-color: #e22834; }\n  .dashboard-stat.red-mint .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.red-mint .details .number {\n    color: #ffffff; }\n  .dashboard-stat.red-mint .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.red-mint .more {\n    color: #ffffff;\n    background-color: #e22834; }\n\n.dashboard-stat.yellow {\n  background-color: #c49f47; }\n  .dashboard-stat.yellow.dashboard-stat-light:hover {\n    background-color: #bb953c; }\n  .dashboard-stat.yellow .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.yellow .details .number {\n    color: #ffffff; }\n  .dashboard-stat.yellow .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.yellow .more {\n    color: #ffffff;\n    background-color: #bb953c; }\n\n.dashboard-stat.yellow-gold {\n  background-color: #E87E04; }\n  .dashboard-stat.yellow-gold.dashboard-stat-light:hover {\n    background-color: #d47304; }\n  .dashboard-stat.yellow-gold .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.yellow-gold .details .number {\n    color: #ffffff; }\n  .dashboard-stat.yellow-gold .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.yellow-gold .more {\n    color: #ffffff;\n    background-color: #d47304; }\n\n.dashboard-stat.yellow-casablanca {\n  background-color: #f2784b; }\n  .dashboard-stat.yellow-casablanca.dashboard-stat-light:hover {\n    background-color: #f16a38; }\n  .dashboard-stat.yellow-casablanca .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.yellow-casablanca .details .number {\n    color: #ffffff; }\n  .dashboard-stat.yellow-casablanca .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.yellow-casablanca .more {\n    color: #ffffff;\n    background-color: #f16a38; }\n\n.dashboard-stat.yellow-crusta {\n  background-color: #f3c200; }\n  .dashboard-stat.yellow-crusta.dashboard-stat-light:hover {\n    background-color: #dfb200; }\n  .dashboard-stat.yellow-crusta .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.yellow-crusta .details .number {\n    color: #ffffff; }\n  .dashboard-stat.yellow-crusta .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.yellow-crusta .more {\n    color: #ffffff;\n    background-color: #dfb200; }\n\n.dashboard-stat.yellow-lemon {\n  background-color: #F7CA18; }\n  .dashboard-stat.yellow-lemon.dashboard-stat-light:hover {\n    background-color: #f2c308; }\n  .dashboard-stat.yellow-lemon .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.yellow-lemon .details .number {\n    color: #ffffff; }\n  .dashboard-stat.yellow-lemon .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.yellow-lemon .more {\n    color: #ffffff;\n    background-color: #f2c308; }\n\n.dashboard-stat.yellow-saffron {\n  background-color: #F4D03F; }\n  .dashboard-stat.yellow-saffron.dashboard-stat-light:hover {\n    background-color: #f3cb2c; }\n  .dashboard-stat.yellow-saffron .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.yellow-saffron .details .number {\n    color: #ffffff; }\n  .dashboard-stat.yellow-saffron .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.yellow-saffron .more {\n    color: #ffffff;\n    background-color: #f3cb2c; }\n\n.dashboard-stat.yellow-soft {\n  background-color: #c8d046; }\n  .dashboard-stat.yellow-soft.dashboard-stat-light:hover {\n    background-color: #c3cc36; }\n  .dashboard-stat.yellow-soft .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.yellow-soft .details .number {\n    color: #ffffff; }\n  .dashboard-stat.yellow-soft .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.yellow-soft .more {\n    color: #ffffff;\n    background-color: #c3cc36; }\n\n.dashboard-stat.yellow-haze {\n  background-color: #c5bf66; }\n  .dashboard-stat.yellow-haze.dashboard-stat-light:hover {\n    background-color: #bfb957; }\n  .dashboard-stat.yellow-haze .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.yellow-haze .details .number {\n    color: #ffffff; }\n  .dashboard-stat.yellow-haze .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.yellow-haze .more {\n    color: #ffffff;\n    background-color: #bfb957; }\n\n.dashboard-stat.yellow-mint {\n  background-color: #c5b96b; }\n  .dashboard-stat.yellow-mint.dashboard-stat-light:hover {\n    background-color: #bfb25c; }\n  .dashboard-stat.yellow-mint .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.yellow-mint .details .number {\n    color: #ffffff; }\n  .dashboard-stat.yellow-mint .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.yellow-mint .more {\n    color: #ffffff;\n    background-color: #bfb25c; }\n\n.dashboard-stat.purple {\n  background-color: #8E44AD; }\n  .dashboard-stat.purple.dashboard-stat-light:hover {\n    background-color: #823e9e; }\n  .dashboard-stat.purple .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.purple .details .number {\n    color: #ffffff; }\n  .dashboard-stat.purple .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.purple .more {\n    color: #ffffff;\n    background-color: #823e9e; }\n\n.dashboard-stat.purple-plum {\n  background-color: #8775a7; }\n  .dashboard-stat.purple-plum.dashboard-stat-light:hover {\n    background-color: #7c699f; }\n  .dashboard-stat.purple-plum .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.purple-plum .details .number {\n    color: #ffffff; }\n  .dashboard-stat.purple-plum .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.purple-plum .more {\n    color: #ffffff;\n    background-color: #7c699f; }\n\n.dashboard-stat.purple-medium {\n  background-color: #BF55EC; }\n  .dashboard-stat.purple-medium.dashboard-stat-light:hover {\n    background-color: #b843ea; }\n  .dashboard-stat.purple-medium .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.purple-medium .details .number {\n    color: #ffffff; }\n  .dashboard-stat.purple-medium .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.purple-medium .more {\n    color: #ffffff;\n    background-color: #b843ea; }\n\n.dashboard-stat.purple-studio {\n  background-color: #8E44AD; }\n  .dashboard-stat.purple-studio.dashboard-stat-light:hover {\n    background-color: #823e9e; }\n  .dashboard-stat.purple-studio .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.purple-studio .details .number {\n    color: #ffffff; }\n  .dashboard-stat.purple-studio .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.purple-studio .more {\n    color: #ffffff;\n    background-color: #823e9e; }\n\n.dashboard-stat.purple-wisteria {\n  background-color: #9B59B6; }\n  .dashboard-stat.purple-wisteria.dashboard-stat-light:hover {\n    background-color: #924dae; }\n  .dashboard-stat.purple-wisteria .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.purple-wisteria .details .number {\n    color: #ffffff; }\n  .dashboard-stat.purple-wisteria .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.purple-wisteria .more {\n    color: #ffffff;\n    background-color: #924dae; }\n\n.dashboard-stat.purple-seance {\n  background-color: #9A12B3; }\n  .dashboard-stat.purple-seance.dashboard-stat-light:hover {\n    background-color: #8a10a0; }\n  .dashboard-stat.purple-seance .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.purple-seance .details .number {\n    color: #ffffff; }\n  .dashboard-stat.purple-seance .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.purple-seance .more {\n    color: #ffffff;\n    background-color: #8a10a0; }\n\n.dashboard-stat.purple-intense {\n  background-color: #8775a7; }\n  .dashboard-stat.purple-intense.dashboard-stat-light:hover {\n    background-color: #7c699f; }\n  .dashboard-stat.purple-intense .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.purple-intense .details .number {\n    color: #ffffff; }\n  .dashboard-stat.purple-intense .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.purple-intense .more {\n    color: #ffffff;\n    background-color: #7c699f; }\n\n.dashboard-stat.purple-sharp {\n  background-color: #796799; }\n  .dashboard-stat.purple-sharp.dashboard-stat-light:hover {\n    background-color: #6f5f8d; }\n  .dashboard-stat.purple-sharp .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.purple-sharp .details .number {\n    color: #ffffff; }\n  .dashboard-stat.purple-sharp .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.purple-sharp .more {\n    color: #ffffff;\n    background-color: #6f5f8d; }\n\n.dashboard-stat.purple-soft {\n  background-color: #8877a9; }\n  .dashboard-stat.purple-soft.dashboard-stat-light:hover {\n    background-color: #7d6ba1; }\n  .dashboard-stat.purple-soft .visual > i {\n    color: #ffffff;\n    opacity: 0.1;\n    filter: alpha(opacity=10); }\n  .dashboard-stat.purple-soft .details .number {\n    color: #ffffff; }\n  .dashboard-stat.purple-soft .details .desc {\n    color: #ffffff;\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .dashboard-stat.purple-soft .more {\n    color: #ffffff;\n    background-color: #7d6ba1; }\n\n.dashboard-stat-light {\n  padding-bottom: 20px;\n  margin-bottom: 20px; }\n  .dashboard-stat-light .details {\n    margin-bottom: 5px; }\n    .dashboard-stat-light .details .number {\n      font-weight: 300;\n      margin-bottom: 0px; }\n\n/***\nDashboard Stats 2\n***/\n.dashboard-stat2 {\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  -ms-border-radius: 4px;\n  -o-border-radius: 4px;\n  border-radius: 4px;\n  background: #fff;\n  padding: 15px 15px 30px 15px;\n  margin-bottom: 20px; }\n  .dashboard-stat2.bordered {\n    border: 1px solid #e7ecf1; }\n  .dashboard-stat2 .display {\n    margin-bottom: 20px; }\n    .dashboard-stat2 .display:before, .dashboard-stat2 .display:after {\n      content: \" \";\n      display: table; }\n    .dashboard-stat2 .display:after {\n      clear: both; }\n    .dashboard-stat2 .display .number {\n      float: left;\n      display: inline-block; }\n      .dashboard-stat2 .display .number h3 {\n        margin: 0 0 2px 0;\n        padding: 0;\n        font-size: 30px;\n        font-weight: 400; }\n        .dashboard-stat2 .display .number h3 > small {\n          font-size: 23px; }\n      .dashboard-stat2 .display .number small {\n        font-size: 14px;\n        color: #AAB5BC;\n        font-weight: 600;\n        text-transform: uppercase; }\n    .dashboard-stat2 .display .icon {\n      display: inline-block;\n      float: right;\n      padding: 7px 0 0 0; }\n      .dashboard-stat2 .display .icon > i {\n        color: #cbd4e0;\n        font-size: 26px; }\n  .dashboard-stat2 .progress-info {\n    clear: both; }\n    .dashboard-stat2 .progress-info .progress {\n      margin: 0;\n      height: 4px;\n      clear: both;\n      display: block; }\n    .dashboard-stat2 .progress-info .status {\n      margin-top: 5px;\n      font-size: 11px;\n      color: #AAB5BC;\n      font-weight: 600;\n      text-transform: uppercase; }\n      .dashboard-stat2 .progress-info .status .status-title {\n        float: left;\n        display: inline-block; }\n      .dashboard-stat2 .progress-info .status .status-number {\n        float: right;\n        display: inline-block; }\n\n/***\nText Stats\n***/\n.text-stat h3 {\n  margin-top: 5px;\n  margin-bottom: 0px;\n  font-size: 18px; }\n\n.text-stat span {\n  font-size: 13px !important; }\n\n@media (max-width: 767px) {\n  /* 767px */\n  .text-stat {\n    margin-top: 20px; } }\n\n/***\nSocial Icons\n***/\n.social-icons {\n  padding: 0;\n  margin: 0; }\n  .social-icons:before, .social-icons:after {\n    content: \" \";\n    display: table; }\n  .social-icons:after {\n    clear: both; }\n  .social-icons li {\n    float: left;\n    display: inline;\n    list-style: none;\n    margin-right: 5px;\n    margin-bottom: 5px;\n    text-indent: -9999px; }\n    .social-icons li > a {\n      -webkit-border-radius: 2px;\n      -moz-border-radius: 2px;\n      -ms-border-radius: 2px;\n      -o-border-radius: 2px;\n      border-radius: 2px;\n      width: 28px;\n      height: 28px;\n      display: block;\n      background-position: 0 0;\n      background-repeat: no-repeat;\n      transition: all 0.3s ease-in-out;\n      -o-transition: all 0.3s ease-in-out;\n      -ms-transition: all 0.3s ease-in-out;\n      -moz-transition: all 0.3s ease-in-out;\n      -webkit-transition: all 0.3s ease-in-out; }\n    .social-icons li:hover > a {\n      background-position: 0 -38px; }\n    .social-icons li .amazon {\n      background: url(img/social/amazon.png) no-repeat; }\n    .social-icons li .behance {\n      background: url(img/social/behance.png) no-repeat; }\n    .social-icons li .blogger {\n      background: url(img/social/blogger.png) no-repeat; }\n    .social-icons li .deviantart {\n      background: url(img/social/deviantart.png) no-repeat; }\n    .social-icons li .dribbble {\n      background: url(img/social/dribbble.png) no-repeat; }\n    .social-icons li .dropbox {\n      background: url(img/social/dropbox.png) no-repeat; }\n    .social-icons li .evernote {\n      background: url(img/social/evernote.png) no-repeat; }\n    .social-icons li .facebook {\n      background: url(img/social/facebook.png) no-repeat; }\n    .social-icons li .forrst {\n      background: url(img/social/forrst.png) no-repeat; }\n    .social-icons li .github {\n      background: url(img/social/github.png) no-repeat; }\n    .social-icons li .googleplus {\n      background: url(img/social/googleplus.png) no-repeat; }\n    .social-icons li .jolicloud {\n      background: url(img/social/jolicloud.png) no-repeat; }\n    .social-icons li .last-fm {\n      background: url(img/social/last-fm.png) no-repeat; }\n    .social-icons li .linkedin {\n      background: url(img/social/linkedin.png) no-repeat; }\n    .social-icons li .picasa {\n      background: url(img/social/picasa.png) no-repeat; }\n    .social-icons li .pintrest {\n      background: url(img/social/pintrest.png) no-repeat; }\n    .social-icons li .rss {\n      background: url(img/social/rss.png) no-repeat; }\n    .social-icons li .skype {\n      background: url(img/social/skype.png) no-repeat; }\n    .social-icons li .spotify {\n      background: url(img/social/spotify.png) no-repeat; }\n    .social-icons li .stumbleupon {\n      background: url(img/social/stumbleupon.png) no-repeat; }\n    .social-icons li .tumblr {\n      background: url(img/social/tumblr.png) no-repeat; }\n    .social-icons li .twitter {\n      background: url(img/social/twitter.png) no-repeat; }\n    .social-icons li .vimeo {\n      background: url(img/social/vimeo.png) no-repeat; }\n    .social-icons li .wordpress {\n      background: url(img/social/wordpress.png) no-repeat; }\n    .social-icons li .xing {\n      background: url(img/social/xing.png) no-repeat; }\n    .social-icons li .yahoo {\n      background: url(img/social/yahoo.png) no-repeat; }\n    .social-icons li .youtube {\n      background: url(img/social/youtube.png) no-repeat; }\n    .social-icons li .vk {\n      background: url(img/social/vk.png) no-repeat; }\n    .social-icons li .instagram {\n      background: url(img/social/instagram.png) no-repeat; }\n    .social-icons li .reddit {\n      background: url(img/social/reddit.png) no-repeat; }\n    .social-icons li .aboutme {\n      background: url(img/social/aboutme.png) no-repeat; }\n    .social-icons li .flickr {\n      background: url(img/social/flickr.png) no-repeat; }\n    .social-icons li .foursquare {\n      background: url(img/social/foursquare.png) no-repeat; }\n    .social-icons li .gravatar {\n      background: url(img/social/gravatar.png) no-repeat; }\n    .social-icons li .klout {\n      background: url(img/social/klout.png) no-repeat; }\n    .social-icons li .myspace {\n      background: url(img/social/myspace.png) no-repeat; }\n    .social-icons li .quora {\n      background: url(img/social/quora.png) no-repeat; }\n  .social-icons.social-icons-color > li > a {\n    opacity: 0.7;\n    background-position: 0 -38px !important; }\n    .social-icons.social-icons-color > li > a:hover {\n      opacity: 1; }\n  .social-icons.social-icons-circle > li > a {\n    border-radius: 25px !important; }\n\n/***\nInline Social Icons\n***/\n.social-icon {\n  display: inline-block !important;\n  width: 28px;\n  height: 28px;\n  background-position: 0 0;\n  background-repeat: no-repeat;\n  -webkit-border-radius: 2px;\n  -moz-border-radius: 2px;\n  -ms-border-radius: 2px;\n  -o-border-radius: 2px;\n  border-radius: 2px;\n  transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  -ms-transition: all 0.3s ease-in-out;\n  -moz-transition: all 0.3s ease-in-out;\n  -webkit-transition: all 0.3s ease-in-out; }\n  .social-icon.social-icon-circle {\n    border-radius: 25px !important; }\n\n.social-icon.amazon {\n  background: url(img/social/amazon.png) no-repeat; }\n\n.social-icon.behance {\n  background: url(img/social/behance.png) no-repeat; }\n\n.social-icon.blogger {\n  background: url(img/social/blogger.png) no-repeat; }\n\n.social-icon.deviantart {\n  background: url(img/social/deviantart.png) no-repeat; }\n\n.social-icon.dribbble {\n  background: url(img/social/dribbble.png) no-repeat; }\n\n.social-icon.dropbox {\n  background: url(img/social/dropbox.png) no-repeat; }\n\n.social-icon.evernote {\n  background: url(img/social/evernote.png) no-repeat; }\n\n.social-icon.facebook {\n  background: url(img/social/facebook.png) no-repeat; }\n\n.social-icon.forrst {\n  background: url(img/social/forrst.png) no-repeat; }\n\n.social-icon.github {\n  background: url(img/social/github.png) no-repeat; }\n\n.social-icon.googleplus {\n  background: url(img/social/googleplus.png) no-repeat; }\n\n.social-icon.jolicloud {\n  background: url(img/social/jolicloud.png) no-repeat; }\n\n.social-icon.last-fm {\n  background: url(img/social/last-fm.png) no-repeat; }\n\n.social-icon.linkedin {\n  background: url(img/social/linkedin.png) no-repeat; }\n\n.social-icon.picasa {\n  background: url(img/social/picasa.png) no-repeat; }\n\n.social-icon.pintrest {\n  background: url(img/social/pintrest.png) no-repeat; }\n\n.social-icon.rss {\n  background: url(img/social/rss.png) no-repeat; }\n\n.social-icon.skype {\n  background: url(img/social/skype.png) no-repeat; }\n\n.social-icon.spotify {\n  background: url(img/social/spotify.png) no-repeat; }\n\n.social-icon.stumbleupon {\n  background: url(img/social/stumbleupon.png) no-repeat; }\n\n.social-icon.tumblr {\n  background: url(img/social/tumblr.png) no-repeat; }\n\n.social-icon.twitter {\n  background: url(img/social/twitter.png) no-repeat; }\n\n.social-icon.vimeo {\n  background: url(img/social/vimeo.png) no-repeat; }\n\n.social-icon.wordpress {\n  background: url(img/social/wordpress.png) no-repeat; }\n\n.social-icon.xing {\n  background: url(img/social/xing.png) no-repeat; }\n\n.social-icon.yahoo {\n  background: url(img/social/yahoo.png) no-repeat; }\n\n.social-icon.youtube {\n  background: url(img/social/youtube.png) no-repeat; }\n\n.social-icon.vk {\n  background: url(img/social/vk.png) no-repeat; }\n\n.social-icon.instagram {\n  background: url(img/social/instagram.png) no-repeat; }\n\n.social-icon.reddit {\n  background: url(img/social/reddit.png) no-repeat; }\n\n.social-icon.aboutme {\n  background: url(img/social/aboutme.png) no-repeat; }\n\n.social-icon.flickr {\n  background: url(img/social/flickr.png) no-repeat; }\n\n.social-icon.foursquare {\n  background: url(img/social/foursquare.png) no-repeat; }\n\n.social-icon.gravatar {\n  background: url(img/social/gravatar.png) no-repeat; }\n\n.social-icon.klout {\n  background: url(img/social/klout.png) no-repeat; }\n\n.social-icon.myspace {\n  background: url(img/social/myspace.png) no-repeat; }\n\n.social-icon.quora {\n  background: url(img/social/quora.png) no-repeat; }\n\n.social-icon:hover {\n  background-position: 0 -38px; }\n\n.social-icon-color {\n  opacity: 0.7;\n  background-position: 0 -38px !important; }\n  .social-icon-color:hover {\n    opacity: 1; }\n\n/***\nScrollable Tables\n***/\n.table-scrollable {\n  width: 100%;\n  overflow-x: auto;\n  overflow-y: hidden;\n  border: 1px solid #e7ecf1;\n  margin: 10px 0 !important; }\n  .DTS .table-scrollable {\n    border: 0; }\n  .table-scrollable.table-scrollable-borderless {\n    border: 0; }\n  .table-scrollable > .table {\n    width: 100% !important;\n    margin: 0 !important;\n    margin-bottom: 0;\n    background-color: #fff; }\n    .table-scrollable > .table > thead > tr > th,\n    .table-scrollable > .table > tbody > tr > th,\n    .table-scrollable > .table > tfoot > tr > th,\n    .table-scrollable > .table > tfoot > tr > th,\n    .table-scrollable > .table > tfoot > tr > td {\n      white-space: nowrap; }\n  .table-scrollable > .table-bordered {\n    border: 0; }\n    .table-scrollable > .table-bordered > thead > tr > th:first-child,\n    .table-scrollable > .table-bordered > tbody > tr > th:first-child,\n    .table-scrollable > .table-bordered > tfoot > tr > th:first-child,\n    .table-scrollable > .table-bordered > thead > tr > td:first-child,\n    .table-scrollable > .table-bordered > tbody > tr > td:first-child,\n    .table-scrollable > .table-bordered > tfoot > tr > td:first-child {\n      border-left: 0; }\n    .table-scrollable > .table-bordered > thead > tr > th:last-child,\n    .table-scrollable > .table-bordered > tbody > tr > th:last-child,\n    .table-scrollable > .table-bordered > tfoot > tr > th:last-child,\n    .table-scrollable > .table-bordered > thead > tr > td:last-child,\n    .table-scrollable > .table-bordered > tbody > tr > td:last-child,\n    .table-scrollable > .table-bordered > tfoot > tr > td:last-child {\n      border-right: 0; }\n    .table-scrollable > .table-bordered > thead > tr:last-child > th,\n    .table-scrollable > .table-bordered > tbody > tr:last-child > th,\n    .table-scrollable > .table-bordered > tfoot > tr:last-child > th,\n    .table-scrollable > .table-bordered > thead > tr:last-child > td,\n    .table-scrollable > .table-bordered > tbody > tr:last-child > td,\n    .table-scrollable > .table-bordered > tfoot > tr:last-child > td {\n      border-bottom: 0; }\n\n/***\nCustomized Bootstrap Tables\n***/\n.table td,\n.table th {\n  font-size: 14px; }\n\n.table.table-bordered thead > tr > th {\n  border-bottom: 0; }\n\n.table td .img-responsive {\n  width: 100%; }\n\n/***\nResponsive Flip Scroll Tables\n***/\n.flip-scroll table {\n  width: 100%; }\n\n@media only screen and (max-width: 768px) {\n  /* 768px */\n  .flip-scroll .flip-content:after {\n    visibility: hidden;\n    display: block;\n    font-size: 0;\n    content: \" \";\n    clear: both;\n    height: 0; }\n  .flip-scroll * html .flip-content {\n    zoom: 1; }\n  .flip-scroll *:first-child + html .flip-content {\n    zoom: 1; }\n  .flip-scroll table {\n    width: 100%;\n    border-collapse: collapse;\n    border-spacing: 0; }\n  .flip-scroll th,\n  .flip-scroll td {\n    margin: 0;\n    vertical-align: top; }\n  .flip-scroll th {\n    text-align: left;\n    border: 0 !important;\n    border-bottom: 1px solid #ddd !important;\n    border-right: 1px solid #ddd !important;\n    font-size: 13px !important;\n    padding: 5px;\n    width: auto !important; }\n  .flip-scroll table {\n    display: block;\n    position: relative;\n    width: 100%; }\n  .flip-scroll thead {\n    display: block;\n    float: left; }\n  .flip-scroll tbody {\n    display: block;\n    width: auto;\n    position: relative;\n    overflow-x: auto;\n    white-space: nowrap; }\n  .flip-scroll .flip-content tbody tr td {\n    font-size: 13px;\n    line-height: 1.483; }\n  .flip-scroll .table-bordered.flip-content tbody tr td {\n    font-size: 13px;\n    line-height: 1.43; }\n  .flip-scroll thead tr {\n    display: block; }\n  .flip-scroll th {\n    display: block;\n    text-align: right; }\n  .flip-scroll tbody tr {\n    display: inline-block;\n    vertical-align: top;\n    margin-left: -5px; }\n  .flip-scroll td {\n    display: block;\n    min-height: 1.25em;\n    text-align: left;\n    border-top: 0 !important;\n    border-left: 0 !important;\n    border-right: 0 !important; }\n  /* sort out borders */\n  .flip-scroll th {\n    border-bottom: 0;\n    border-left: 0; }\n  .flip-scroll td {\n    border-left: 0;\n    border-right: 0;\n    border-bottom: 0; }\n  .flip-scroll tbody tr {\n    border-left: 1px solid #ddd; }\n  .flip-scroll th:last-child,\n  .flip-scroll td:last-child {\n    border-bottom: 1px solid #ddd; } }\n\n/***\nCustom tables\n***/\n.table-toolbar {\n  margin-bottom: 20px; }\n  .table-toolbar:before, .table-toolbar:after {\n    content: \" \";\n    display: table; }\n  .table-toolbar:after {\n    clear: both; }\n\n.table.table-full-width {\n  width: 100% !important; }\n\n.table .btn {\n  margin-top: 0px;\n  margin-left: 0px;\n  margin-right: 5px; }\n\n.table thead tr th {\n  font-size: 14px;\n  font-weight: 600; }\n\n.table-advance {\n  margin-bottom: 10px !important; }\n\n.table-advance thead {\n  color: #3f444a; }\n\n.table-advance thead tr th {\n  background-color: #f1f4f7;\n  font-size: 14px;\n  font-weight: 400;\n  color: #3f444a; }\n\n.table-advance div.success,\n.table-advance div.info,\n.table-advance div.important,\n.table-advance div.warning,\n.table-advance div.danger {\n  position: absolute;\n  margin-top: -5px;\n  float: left;\n  width: 2px;\n  height: 30px;\n  margin-right: 20px !important; }\n\n.table-advance tr td {\n  border-left-width: 0px; }\n\n.table-advance tr td:first-child {\n  border-left-width: 2px !important; }\n\n.table-advance tr td.highlight:first-child a {\n  margin-left: 15px; }\n\n.table-advance td.highlight div.primary {\n  border-left: 2px solid #337ab7; }\n\n.table-advance td.highlight div.success {\n  border-left: 2px solid #36c6d3; }\n\n.table-advance td.highlight div.info {\n  border-left: 2px solid #659be0; }\n\n.table-advance td.highlight div.warning {\n  border-left: 2px solid #F1C40F; }\n\n.table-advance td.highlight div.danger {\n  border-left: 2px solid #ed6b75; }\n\n@media (max-width: 767px) {\n  /* 767px */\n  .table-advance tr > td.highlight:first-child a {\n    margin-left: 8px; } }\n\n/***\nLight Table\n***/\n.table.table-light {\n  border: 0 !important; }\n  .table.table-light > thead > tr:hover > th {\n    background: none; }\n  .table.table-light > thead > tr.uppercase {\n    text-transform: uppercase; }\n  .table.table-light > thead > tr > th {\n    font-weight: 600;\n    font-size: 13px;\n    color: #93a2a9;\n    font-family: \"Open Sans\", sans-serif;\n    border: 0;\n    border-bottom: 1px solid #F2F5F8; }\n  .table.table-light > tbody > tr:last-child > td {\n    border: 0; }\n  .table.table-light > tbody > tr > td {\n    border: 0;\n    border-bottom: 1px solid #F2F5F8;\n    color: #8896a0;\n    vertical-align: middle; }\n    .table.table-light > tbody > tr > td.fit {\n      width: 1px;\n      padding-right: 3px; }\n    .table.table-light > tbody > tr > td .user-pic {\n      display: inline-block;\n      vertical-align: middle;\n      height: 30px;\n      -webkit-border-radius: 100%;\n      -moz-border-radius: 100%;\n      -ms-border-radius: 100%;\n      -o-border-radius: 100%;\n      border-radius: 100%; }\n  .table.table-light.table-hover > tbody > tr > td:hover,\n  .table.table-light.table-hover > tbody > tr > th:hover,\n  .table.table-light.table-hover > tbody > tr:hover > td,\n  .table.table-light.table-hover > tbody > tr:hover > th {\n    background: #f9fafb; }\n\n/***\nCustomized Bootstrap Tabs \n***/\n/* Tabs and pills */\n.nav-tabs,\n.nav-pills {\n  margin-bottom: 10px; }\n  .nav-tabs > li > a,\n  .nav-pills > li > a {\n    font-size: 14px;\n    -webkit-border-radius: 4px 4px 0 0;\n    -moz-border-radius: 4px 4px 0 0;\n    -ms-border-radius: 4px 4px 0 0;\n    -o-border-radius: 4px 4px 0 0;\n    border-radius: 4px 4px 0 0; }\n    .nav-tabs > li > a > .badge,\n    .nav-pills > li > a > .badge {\n      margin-top: -6px; }\n  .nav-tabs > li .dropdown-menu:before, .nav-tabs > li .dropdown-menu:after,\n  .nav-pills > li .dropdown-menu:before,\n  .nav-pills > li .dropdown-menu:after {\n    display: none; }\n  .nav-tabs.nav-tabs-sm > li > a, .nav-tabs.nav-pills-sm > li > a,\n  .nav-pills.nav-tabs-sm > li > a,\n  .nav-pills.nav-pills-sm > li > a {\n    font-size: 13px; }\n  .nav-tabs .dropdown.open > .dropdown-toggle,\n  .nav-pills .dropdown.open > .dropdown-toggle {\n    background: #eee;\n    color: #0d638f;\n    border-color: transparent; }\n\n/* Left and right tabs */\n.tabs-right.nav-tabs,\n.tabs-left.nav-tabs {\n  border-bottom: 0; }\n  .tabs-right.nav-tabs > li,\n  .tabs-left.nav-tabs > li {\n    float: none; }\n    .tabs-right.nav-tabs > li > a,\n    .tabs-left.nav-tabs > li > a {\n      margin-right: 0;\n      margin-bottom: 3px; }\n\n/* Left tabs */\n.tabs-left.nav-tabs {\n  border-right: 1px solid #ddd; }\n  .tabs-left.nav-tabs > li > a {\n    display: block;\n    margin-right: -1px; }\n    .tabs-left.nav-tabs > li > a:hover, .tabs-left.nav-tabs > li > a:focus {\n      -webkit-border-radius: 4px 0 0 4px;\n      -moz-border-radius: 4px 0 0 4px;\n      -ms-border-radius: 4px 0 0 4px;\n      -o-border-radius: 4px 0 0 4px;\n      border-radius: 4px 0 0 4px;\n      border-color: #eeeeee #dddddd #eeeeee #eeeeee; }\n  .tabs-left.nav-tabs > li.active > a,\n  .tabs-left.nav-tabs > li.active > a:hover\n> li.active > a:focus {\n    -webkit-border-radius: 4px 0 0 4px;\n    -moz-border-radius: 4px 0 0 4px;\n    -ms-border-radius: 4px 0 0 4px;\n    -o-border-radius: 4px 0 0 4px;\n    border-radius: 4px 0 0 4px;\n    border-color: #ddd transparent #ddd #ddd;\n    *border-right-color: #ffffff; }\n\n/* Right tabs */\n.tabs-right.nav-tabs {\n  border-left: 1px solid #ddd; }\n  .tabs-right.nav-tabs > li > a {\n    display: block;\n    margin-left: -1px; }\n    .tabs-right.nav-tabs > li > a:hover, .tabs-right.nav-tabs > li > a:focus {\n      -webkit-border-radius: 0 4px 4px 0;\n      -moz-border-radius: 0 4px 4px 0;\n      -ms-border-radius: 0 4px 4px 0;\n      -o-border-radius: 0 4px 4px 0;\n      border-radius: 0 4px 4px 0;\n      border-color: #eeeeee #eeeeee #eeeeee #dddddd; }\n  .tabs-right.nav-tabs > li.active > a,\n  .tabs-right.nav-tabs > li.active > a:hover\n> li.active > a:focus {\n    -webkit-border-radius: 0 4px 4px 0;\n    -moz-border-radius: 0 4px 4px 0;\n    -ms-border-radius: 0 4px 4px 0;\n    -o-border-radius: 0 4px 4px 0;\n    border-radius: 0 4px 4px 0;\n    border-color: #ddd #ddd #ddd transparent;\n    *border-left-color: #ffffff; }\n\n/* Below tabs */\n.tabs-below > .nav-tabs,\n.tabs-below > .nav-pills {\n  border-bottom: 0;\n  margin-bottom: 0px;\n  margin-top: 10px; }\n\n.tabs-below > .nav-tabs {\n  border-top: 1px solid #ddd;\n  margin-bottom: 0;\n  margin-top: 10px; }\n  .tabs-below > .nav-tabs > li > a {\n    margin-top: -1px;\n    margin-bottom: 0; }\n    .tabs-below > .nav-tabs > li > a:hover, .tabs-below > .nav-tabs > li > a:focus {\n      border-top-color: #ddd;\n      border-bottom-color: transparent; }\n    .tabs-below > .nav-tabs > li > a .dropdown-menu {\n      -webkit-border-radius: 4px;\n      -moz-border-radius: 4px;\n      -ms-border-radius: 4px;\n      -o-border-radius: 4px;\n      border-radius: 4px; }\n  .tabs-below > .nav-tabs .active a,\n  .tabs-below > .nav-tabs .active a:hover\n.active a:focus {\n    -webkit-border-radius: 0 0 4px 4px;\n    -moz-border-radius: 0 0 4px 4px;\n    -ms-border-radius: 0 0 4px 4px;\n    -o-border-radius: 0 0 4px 4px;\n    border-radius: 0 0 4px 4px;\n    border-color: transparent #ddd #ddd #ddd  !important; }\n\n/***\nCustom tabs\n***/\n/* In BS3.0.0 tabbable class was removed. We had to added it back */\n.tabbable:before, .tabbable:after {\n  content: \" \";\n  display: table; }\n\n.tabbable:after {\n  clear: both; }\n\n.tabbable-custom {\n  margin-bottom: 15px;\n  padding: 0px;\n  overflow: hidden;\n  /* justified tabs */\n  /* boxless tabs */\n  /* below justified tabs */\n  /* full width tabs */\n  /* below tabs */ }\n  .tabbable-custom > .nav-tabs {\n    border: none;\n    margin: 0px; }\n    .tabbable-custom > .nav-tabs > li {\n      margin-right: 2px;\n      border-top: 2px solid transparent; }\n      .tabbable-custom > .nav-tabs > li > a {\n        margin-right: 0;\n        -webkit-border-radius: 0;\n        -moz-border-radius: 0;\n        -ms-border-radius: 0;\n        -o-border-radius: 0;\n        border-radius: 0; }\n        .tabbable-custom > .nav-tabs > li > a:hover {\n          background: none;\n          border-color: transparent; }\n      .tabbable-custom > .nav-tabs > li.active {\n        border-top: 3px solid #ed6b75;\n        margin-top: 0;\n        position: relative; }\n        .tabbable-custom > .nav-tabs > li.active > a {\n          border-top: none !important;\n          font-weight: 400;\n          -webkit-border-radius: 0;\n          -moz-border-radius: 0;\n          -ms-border-radius: 0;\n          -o-border-radius: 0;\n          border-radius: 0; }\n          .tabbable-custom > .nav-tabs > li.active > a:hover {\n            -webkit-border-radius: 0;\n            -moz-border-radius: 0;\n            -ms-border-radius: 0;\n            -o-border-radius: 0;\n            border-radius: 0;\n            border-top: none;\n            background: #fff;\n            border-color: #d4d4d4 #d4d4d4 transparent; }\n  .tabbable-custom > .tab-content {\n    background-color: #fff;\n    border: 1px solid #ddd;\n    padding: 10px;\n    -webkit-border-radius: 0 0 4px 4px;\n    -moz-border-radius: 0 0 4px 4px;\n    -ms-border-radius: 0 0 4px 4px;\n    -o-border-radius: 0 0 4px 4px;\n    border-radius: 0 0 4px 4px; }\n  .tabbable-custom.nav-justified > .tab-content {\n    margin-top: -1px; }\n  .tabbable-custom.boxless > .tab-content {\n    padding: 15px 0;\n    border-left: none;\n    border-right: none;\n    border-bottom: none; }\n  .tabbable-custom.tabs-below.nav-justified .tab-content {\n    margin-top: 0px;\n    margin-bottom: -2px;\n    -webkit-border-radius: 4px 4px 0 0;\n    -moz-border-radius: 4px 4px 0 0;\n    -ms-border-radius: 4px 4px 0 0;\n    -o-border-radius: 4px 4px 0 0;\n    border-radius: 4px 4px 0 0; }\n  .tabbable-custom.tabbable-full-width > .nav-tabs > li > a {\n    color: #424242;\n    font-size: 15px;\n    padding: 9px 15px; }\n  .tabbable-custom.tabbable-full-width > .tab-content {\n    padding: 15px 0;\n    border-left: none;\n    border-right: none;\n    border-bottom: none; }\n  .tabbable-custom.tabs-below .nav-tabs > li > a {\n    border-top: none;\n    border-bottom: 2px solid transparent;\n    margin-top: -1px; }\n  .tabbable-custom.tabs-below .nav-tabs > li.active {\n    border-top: none;\n    border-bottom: 3px solid #d12610;\n    margin-bottom: 0;\n    position: relative; }\n    .tabbable-custom.tabs-below .nav-tabs > li.active > a {\n      border-bottom: none; }\n      .tabbable-custom.tabs-below .nav-tabs > li.active > a:hover {\n        background: #fff;\n        border-color: #d4d4d4 #d4d4d4 transparent; }\n\n.tabbable-custom.tabbable-noborder > .nav-tabs > li > a {\n  border: 0; }\n\n.tabbable-custom.tabbable-noborder .tab-content {\n  border: 0; }\n\n.portlet:not(.light) .tabbable-line {\n  padding-top: 15px; }\n\n.tabbable-line > .nav-tabs {\n  border: none;\n  margin: 0px; }\n  .tabbable-line > .nav-tabs > li {\n    margin: 0;\n    border-bottom: 4px solid transparent; }\n    .tabbable-line > .nav-tabs > li > a {\n      background: none !important;\n      border: 0;\n      margin: 0;\n      padding-left: 15px;\n      padding-right: 15px;\n      color: #737373; }\n      .tabbable-line > .nav-tabs > li > a > i {\n        color: #a6a6a6; }\n    .tabbable-line > .nav-tabs > li.active {\n      background: none;\n      border-bottom: 4px solid #36c6d3;\n      position: relative; }\n      .tabbable-line > .nav-tabs > li.active > a {\n        border: 0;\n        color: #333; }\n        .tabbable-line > .nav-tabs > li.active > a > i {\n          color: #404040; }\n    .tabbable-line > .nav-tabs > li.open, .tabbable-line > .nav-tabs > li:hover {\n      background: none;\n      border-bottom: 4px solid #9fe4ea; }\n      .tabbable-line > .nav-tabs > li.open > a, .tabbable-line > .nav-tabs > li:hover > a {\n        border: 0;\n        background: none !important;\n        color: #333; }\n        .tabbable-line > .nav-tabs > li.open > a > i, .tabbable-line > .nav-tabs > li:hover > a > i {\n          color: #a6a6a6; }\n      .tabbable-line > .nav-tabs > li.open .dropdown-menu, .tabbable-line > .nav-tabs > li:hover .dropdown-menu {\n        margin-top: 0px; }\n\n.tabbable-line > .tab-content {\n  margin-top: 0;\n  border: 0;\n  border-top: 1px solid #eef1f5;\n  padding: 30px 0; }\n  .page-container-bg-solid .tabbable-line > .tab-content {\n    border-top: 1px solid #dae2ea; }\n  .portlet .tabbable-line > .tab-content {\n    padding-bottom: 0; }\n\n.tabbable-line.tabs-below > .nav-tabs > li {\n  border-top: 4px solid transparent; }\n  .tabbable-line.tabs-below > .nav-tabs > li > a {\n    margin-top: 0; }\n  .tabbable-line.tabs-below > .nav-tabs > li:hover {\n    border-bottom: 0;\n    border-top: 4px solid #fbdcde; }\n  .tabbable-line.tabs-below > .nav-tabs > li.active {\n    margin-bottom: -2px;\n    border-bottom: 0;\n    border-top: 4px solid #ed6b75; }\n\n.tabbable-line.tabs-below > .tab-content {\n  margin-top: -10px;\n  border-top: 0;\n  border-bottom: 1px solid #eee;\n  padding-bottom: 15px; }\n\n.portlet .tabbable-bordered {\n  margin-top: 20px; }\n\n.tabbable-bordered .nav-tabs {\n  margin-bottom: 0;\n  border-bottom: 0; }\n\n.tabbable-bordered .tab-content {\n  padding: 30px 20px 20px 20px;\n  border: 1px solid #ddd;\n  background: #ffffff; }\n\n/***\nTiles(new in v1.1.1)\n***/\n.tiles {\n  margin-right: -10px; }\n  .tiles:before, .tiles:after {\n    display: table;\n    content: \" \"; }\n  .tiles:after {\n    clear: both; }\n  .tiles .tile {\n    display: block;\n    letter-spacing: 0.02em;\n    float: left;\n    height: 135px;\n    width: 135px !important;\n    cursor: pointer;\n    text-decoration: none;\n    color: #ffffff;\n    position: relative;\n    font-weight: 300;\n    font-size: 12px;\n    letter-spacing: 0.02em;\n    line-height: 20px;\n    overflow: hidden;\n    border: 4px solid transparent;\n    margin: 0 10px 10px 0; }\n    .tiles .tile:after, .tiles .tile:before {\n      content: \"\";\n      float: left; }\n    .tiles .tile.double {\n      width: 280px !important; }\n    .tiles .tile.double-down {\n      height: 280px !important; }\n      .tiles .tile.double-down i {\n        margin-top: 95px; }\n    .tiles .tile:hover {\n      border-color: #aaa !important; }\n    .tiles .tile:active, .tiles .tile.selected {\n      border-color: #ccc !important; }\n    .tiles .tile.selected .corner:after {\n      content: \"\";\n      display: inline-block;\n      border-left: 40px solid transparent;\n      border-bottom: 40px solid transparent;\n      border-right: 40px solid #ccc;\n      position: absolute;\n      top: -3px;\n      right: -3px; }\n    .tiles .tile.selected .check:after {\n      content: \"\";\n      font-family: FontAwesome;\n      font-size: 13px;\n      content: \"\\f00c\";\n      display: inline-block;\n      position: absolute;\n      top: 2px;\n      right: 2px; }\n    .tiles .tile.icon {\n      padding: 0; }\n    .tiles .tile.image .tile-body {\n      padding: 0 !important; }\n      .tiles .tile.image .tile-body > img {\n        width: 100%;\n        height: auto;\n        min-height: 100%;\n        max-width: 100%; }\n      .tiles .tile.image .tile-body h3 {\n        display: inline-block; }\n    .tiles .tile .tile-body {\n      height: 100%;\n      vertical-align: top;\n      padding: 10px 10px;\n      overflow: hidden;\n      position: relative;\n      font-weight: 400;\n      font-size: 12px;\n      color: #000000;\n      color: #ffffff;\n      margin-bottom: 10px; }\n      .tiles .tile .tile-body p {\n        font-weight: 400;\n        font-size: 13px;\n        color: #000000;\n        color: #ffffff;\n        line-height: 20px;\n        overflow: hidden; }\n        .tiles .tile .tile-body p:hover {\n          color: rgba(0, 0, 0, 0.8); }\n        .tiles .tile .tile-body p:active {\n          color: rgba(0, 0, 0, 0.4); }\n        .tiles .tile .tile-body p:hover {\n          color: #ffffff; }\n      .tiles .tile .tile-body img {\n        float: left;\n        margin-right: 10px; }\n        .tiles .tile .tile-body img.pull-right {\n          float: right !important;\n          margin-left: 10px;\n          margin-right: 0px; }\n      .tiles .tile .tile-body > .content {\n        display: inline-block; }\n      .tiles .tile .tile-body > i {\n        margin-top: 17px;\n        display: block;\n        font-size: 56px;\n        line-height: 56px;\n        text-align: center; }\n      .tiles .tile .tile-body h1,\n      .tiles .tile .tile-body h2,\n      .tiles .tile .tile-body h3,\n      .tiles .tile .tile-body h4,\n      .tiles .tile .tile-body h5,\n      .tiles .tile .tile-body h6,\n      .tiles .tile .tile-body p {\n        padding: 0;\n        margin: 0;\n        line-height: 14px; }\n        .tiles .tile .tile-body h1:hover,\n        .tiles .tile .tile-body h2:hover,\n        .tiles .tile .tile-body h3:hover,\n        .tiles .tile .tile-body h4:hover,\n        .tiles .tile .tile-body h5:hover,\n        .tiles .tile .tile-body h6:hover,\n        .tiles .tile .tile-body p:hover {\n          color: #ffffff; }\n      .tiles .tile .tile-body h3,\n      .tiles .tile .tile-body h4 {\n        margin-bottom: 5px; }\n    .tiles .tile .tile-object {\n      position: absolute;\n      bottom: 0;\n      left: 0;\n      right: 0;\n      min-height: 30px;\n      background-color: transparent;\n      *zoom: 1; }\n      .tiles .tile .tile-object:before, .tiles .tile .tile-object:after {\n        display: table;\n        content: \"\"; }\n      .tiles .tile .tile-object:after {\n        clear: both; }\n      .tiles .tile .tile-object > .name {\n        position: absolute;\n        bottom: 0;\n        left: 0;\n        margin-bottom: 5px;\n        margin-left: 10px;\n        margin-right: 15px;\n        font-weight: 400;\n        font-size: 13px;\n        color: #ffffff; }\n        .tiles .tile .tile-object > .name > i {\n          vertical-align: middle;\n          display: block;\n          font-size: 24px;\n          height: 18px;\n          width: 24px; }\n      .tiles .tile .tile-object > .number {\n        position: absolute;\n        bottom: 0;\n        right: 0;\n        margin-bottom: 0;\n        color: #ffffff;\n        text-align: center;\n        font-weight: 600;\n        font-size: 14px;\n        letter-spacing: 0.01em;\n        line-height: 14px;\n        margin-bottom: 8px;\n        margin-right: 10px; }\n\n/***\nCustimized Bootstrap Wells\n***/\n.well {\n  border: 0;\n  padding: 20px;\n  -webkit-box-shadow: none !important;\n  -moz-box-shadow: none !important;\n  box-shadow: none !important; }\n\n/*--------------------------------------------------\n\t[Widgets]\n----------------------------------------------------*/\n/*** Widget Background Colors ***/\n.widget-bg-color-purple {\n  background: #9a7caf; }\n\n.widget-bg-color-purple-dark {\n  background: #4b365a; }\n\n.widget-bg-color-purple-light {\n  background: #674d79; }\n\n.widget-bg-color-green {\n  background: #4db3a4; }\n\n.widget-bg-color-red {\n  background: #f36a5a; }\n\n.widget-bg-color-blue {\n  background: #5b9bd1; }\n\n.widget-bg-color-gray {\n  background: #323c45; }\n\n.widget-bg-color-gray-dark {\n  background: #144f57; }\n\n.widget-bg-color-white {\n  background: #fff; }\n\n.widget-bg-color-dark {\n  background: #3e4f5e; }\n\n.widget-bg-color-dark-light {\n  background: #8e9daa; }\n\n.widget-bg-color-fb {\n  background: #475e98; }\n\n.widget-bg-color-tw {\n  background: #55acee; }\n\n/*** Widget Title Colors ***/\n.widget-title-color-purple {\n  color: #9a7caf; }\n\n.widget-title-color-purple-dark {\n  color: #4b365a; }\n\n.widget-title-color-purple-light {\n  color: #674d79; }\n\n.widget-title-color-green {\n  color: #4db3a4; }\n\n.widget-title-color-red {\n  color: #f36a5a; }\n\n.widget-title-color-blue {\n  color: #5b9bd1; }\n\n.widget-title-color-gray {\n  color: #323c45; }\n\n.widget-title-color-gray-dark {\n  color: #144f57; }\n\n.widget-title-color-white {\n  color: #fff; }\n\n.widget-title-color-dark {\n  color: #3e4f5e; }\n\n.widget-title-color-dark-light {\n  color: #8e9daa; }\n\n.widget-title-color-fb {\n  color: #475e98; }\n\n.widget-title-color-tw {\n  color: #55acee; }\n\n.overflow-h {\n  overflow: hidden; }\n\n/*** Widget Carousel ***/\n.widget-carousel .carousel-indicators {\n  left: -18%;\n  bottom: 10px;\n  margin-left: 0; }\n\n.widget-carousel .carousel-indicators-red > li {\n  border-color: #f36a5a; }\n  .widget-carousel .carousel-indicators-red > li.active {\n    background: #f36a5a; }\n\n/*** Widget Gradient ***/\n.widget-gradient {\n  position: relative;\n  min-height: 350px;\n  overflow: hidden;\n  background-size: cover;\n  background-position: 50% 50%;\n  border-radius: 4px; }\n  .widget-gradient .widget-gradient-body {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    width: auto;\n    height: auto;\n    padding: 20px; }\n    .widget-gradient .widget-gradient-body .widget-gradient-title {\n      font-size: 21px;\n      font-weight: 600;\n      color: #fff;\n      margin: 0; }\n    .widget-gradient .widget-gradient-body .widget-gradient-body-actions {\n      position: absolute;\n      right: 20px;\n      bottom: 20px;\n      padding: 0;\n      margin: 0; }\n      .widget-gradient .widget-gradient-body .widget-gradient-body-actions li {\n        font-size: 14px;\n        padding: 0 0 0 8px; }\n        .widget-gradient .widget-gradient-body .widget-gradient-body-actions li:first-child {\n          padding-left: 0; }\n        .widget-gradient .widget-gradient-body .widget-gradient-body-actions li a {\n          color: #fff; }\n          .widget-gradient .widget-gradient-body .widget-gradient-body-actions li a:hover {\n            color: #a1afbb;\n            text-decoration: none; }\n\n/*** Widget Gradient ***/\n.widget-wrap-img {\n  border-radius: 4px;\n  position: relative;\n  min-height: 350px;\n  padding: 20px; }\n  .widget-wrap-img .widget-wrap-img-title {\n    font-size: 21px;\n    font-weight: 600;\n    color: #3e4f5e;\n    margin: 0 0 20px; }\n  .widget-wrap-img .widget-wrap-img-element {\n    position: absolute;\n    bottom: 0;\n    right: 0; }\n\n/*** Widget Tab ***/\n.widget-tab {\n  min-height: 420px;\n  border-radius: 4px; }\n  .widget-tab .nav-tabs {\n    margin: 0;\n    border-color: #eff1f3; }\n    .widget-tab .nav-tabs > li {\n      margin: 0 10px; }\n      .widget-tab .nav-tabs > li:first-child {\n        margin-left: 20px; }\n      .widget-tab .nav-tabs > li > a {\n        border: 0;\n        font-weight: bold;\n        color: #8e9daa;\n        text-transform: uppercase;\n        padding: 20px 0; }\n        .widget-tab .nav-tabs > li > a > i {\n          color: #8e9daa; }\n      .widget-tab .nav-tabs > li.open, .widget-tab .nav-tabs > li:hover {\n        border-bottom: 1px solid #f36a5a; }\n        .widget-tab .nav-tabs > li.open > a, .widget-tab .nav-tabs > li:hover > a {\n          border: 0;\n          background: inherit;\n          color: #f36a5a; }\n          .widget-tab .nav-tabs > li.open > a > i, .widget-tab .nav-tabs > li:hover > a > i {\n            color: #f36a5a; }\n      .widget-tab .nav-tabs > li.active {\n        border-bottom: 1px solid #f36a5a;\n        position: relative; }\n        .widget-tab .nav-tabs > li.active > a {\n          border: 0;\n          color: #f36a5a; }\n          .widget-tab .nav-tabs > li.active > a > i {\n            color: #f36a5a; }\n  .widget-tab .tab-content {\n    padding: 20px;\n    color: #8e9daa; }\n  .widget-tab .slimScrollBar {\n    right: 10px !important;\n    margin-top: 17px !important;\n    margin-bottom: 17px !important; }\n\n/*** Widget News ***/\n.widget-news {\n  overflow: hidden;\n  margin-right: 10px;\n  border-radius: 4px; }\n  .widget-news .widget-news-left-elem {\n    float: left;\n    width: 100px;\n    height: auto;\n    margin-right: 15px; }\n  .widget-news .widget-news-right-body {\n    overflow: hidden; }\n    .widget-news .widget-news-right-body .widget-news-right-body-title {\n      font-size: 16px;\n      font-weight: 600;\n      color: #3e4f5e;\n      margin: 0 0 5px;\n      clear: both; }\n      .widget-news .widget-news-right-body .widget-news-right-body-title .label {\n        float: right;\n        font-weight: 600;\n        background: #a1afbb;\n        border-radius: 3px !important; }\n    .widget-news .widget-news-right-body p {\n      font-size: 13px; }\n\n/*** Widget Thumb ***/\n.widget-thumb {\n  padding: 20px;\n  border-radius: 4px; }\n  .widget-thumb.bordered {\n    border: 1px solid #e7ecf1; }\n  .widget-thumb .widget-thumb-heading {\n    font-size: 14px;\n    font-weight: bold;\n    color: #8e9daa;\n    margin: 0 0 20px 0; }\n  .widget-thumb .widget-thumb-wrap {\n    overflow: hidden; }\n    .widget-thumb .widget-thumb-wrap .widget-thumb-icon {\n      float: left;\n      width: 60px;\n      height: 60px;\n      display: inline-block;\n      font-size: 20px;\n      line-height: 41px;\n      color: #fff;\n      text-align: center;\n      padding: 10px;\n      margin-right: 15px; }\n  .widget-thumb .widget-thumb-body {\n    overflow: hidden; }\n    .widget-thumb .widget-thumb-body .widget-thumb-subtitle {\n      padding-top: 2px;\n      display: block;\n      font-size: 14px;\n      font-weight: 600;\n      color: #8e9daa; }\n    .widget-thumb .widget-thumb-body .widget-thumb-body-stat {\n      display: block;\n      font-size: 30px;\n      font-weight: 600;\n      color: #3e4f5e; }\n\n/*** Widget Socials ***/\n.widget-socials {\n  border-radius: 4px;\n  min-height: 250px;\n  padding: 20px; }\n  .widget-socials .widget-socials-title {\n    font-size: 25px;\n    font-weight: 700;\n    line-height: 1.4;\n    color: #fff;\n    margin: 0 0 20px; }\n  .widget-socials .widget-social-subtitle {\n    color: #fff;\n    font-weight: 200;\n    line-height: 1.4; }\n    .widget-socials .widget-social-subtitle a {\n      color: #fff; }\n  .widget-socials .widget-socials-paragraph {\n    display: block;\n    color: #65727d; }\n  .widget-socials .widget-social-icon-fb, .widget-socials .widget-social-icon-tw {\n    font-size: 30px;\n    margin: 30px 0; }\n  .widget-socials .widget-social-icon-fb {\n    color: #2b3f72; }\n  .widget-socials .widget-social-icon-tw {\n    color: #3686c3; }\n\n/*** Widget Comments ***/\n.widget-comments {\n  min-height: 420px; }\n\n/*** Widget Media ***/\n.widget-media {\n  border-radius: 4px;\n  border-bottom: 1px solid #f6f9fc;\n  overflow: hidden;\n  padding-bottom: 15px;\n  margin-bottom: 15px; }\n  .widget-media .widget-media-elements {\n    float: left;\n    margin-right: 20px; }\n  .widget-media .widget-media-avatar {\n    width: 55px;\n    height: 55px;\n    display: block; }\n  .widget-media .widget-btn-default {\n    display: inline-block;\n    font-size: 12px;\n    color: #96a2b1;\n    border: 1px solid #ebf0f6;\n    padding: 3px 10px; }\n    .widget-media .widget-btn-default .widget-btn-icon {\n      line-height: 1.5; }\n    .widget-media .widget-btn-default:hover {\n      background: #ebf0f6;\n      text-decoration: none; }\n  .widget-media .widget-btn-red {\n    display: inline-block;\n    font-size: 12px;\n    color: #f36a5a;\n    border: 1px solid #ebf0f6;\n    padding: 3px 10px; }\n    .widget-media .widget-btn-red .widget-btn-icon {\n      line-height: 1.5; }\n    .widget-media .widget-btn-red:hover {\n      color: #fff;\n      background: #f36a5a;\n      text-decoration: none; }\n  .widget-media .widget-btn-blue {\n    display: inline-block;\n    font-size: 12px;\n    color: #fff;\n    border: 1px solid #ebf0f6;\n    padding: 3px 10px;\n    background: #337ab7; }\n    .widget-media .widget-btn-blue .widget-btn-icon {\n      line-height: 1.5; }\n    .widget-media .widget-btn-blue:hover {\n      color: #337ab7;\n      background: #fff;\n      text-decoration: none; }\n  .widget-media .widget-media-body {\n    overflow: hidden; }\n    .widget-media .widget-media-body .widget-media-body-title {\n      font-size: 15px;\n      font-weight: 600;\n      color: #5b9bd1;\n      margin: 0 0 7px; }\n    .widget-media .widget-media-body .widget-media-body-subtitle {\n      font-size: 13px;\n      color: #7e8c9e; }\n\n/*** Widget Blog ***/\n.widget-blog {\n  border-radius: 4px;\n  background: #fff;\n  padding: 20px;\n  background-position: center center;\n  background-size: cover;\n  padding-top: 30px; }\n  .widget-blog .widget-blog-heading {\n    position: relative;\n    margin-bottom: 30px; }\n    .widget-blog .widget-blog-heading:before {\n      position: absolute;\n      bottom: -15px;\n      left: 50%;\n      width: 50px;\n      height: 1px;\n      border-width: 1px;\n      background: #8e9daa;\n      margin-left: -25px;\n      content: \" \"; }\n  .widget-blog .widget-blog-title {\n    font-size: 20px;\n    font-weight: 400;\n    color: #3e4f5e;\n    margin: 0 0 15px; }\n    .widget-blog .widget-blog-title a {\n      color: #3e4f5e; }\n  .widget-blog .widget-blog-subtitle {\n    display: block;\n    font-size: 13px;\n    color: #8e9daa;\n    letter-spacing: 3px; }\n  .widget-blog .btn-widget-purple {\n    display: inline-block;\n    font-size: 13px;\n    color: #8e9daa;\n    border: 1px solid #8e9daa;\n    padding: 7px 17px; }\n    .widget-blog .btn-widget-purple:hover {\n      color: #fff;\n      background: #8e9daa;\n      text-decoration: none; }\n\n/*** Widget Progress ***/\n.widget-progress {\n  min-height: 420px; }\n  .widget-progress .widget-progress-element {\n    border-radius: 4px;\n    overflow: hidden;\n    padding: 30px 10px; }\n  .widget-progress .widget-progress-title {\n    display: block;\n    color: #fff;\n    margin-bottom: 5px; }\n  .widget-progress .progress {\n    height: 3px;\n    background: rgba(255, 255, 255, 0.2);\n    margin-bottom: 0; }\n\n/*** Widget Gradient ***/\n.widget-map {\n  border-radius: 4px;\n  min-height: 350px;\n  border-radius: 3px; }\n  .widget-map .widget-map-mapplic {\n    border-top-right-radius: 3px;\n    border-top-left-radius: 3px; }\n    .widget-map .widget-map-mapplic .mapplic-container {\n      background: #5b9bd1; }\n    .widget-map .widget-map-mapplic .mapplic-layer.world > img {\n      opacity: .3; }\n  .widget-map .widget-map-body {\n    background: #fff;\n    border-bottom-right-radius: 3px;\n    border-bottom-left-radius: 3px;\n    padding: 20px;\n    overflow: hidden; }\n  .widget-map .widget-sparkline-chart {\n    width: 25%;\n    float: left;\n    border-left: 1px solid #e7eff7;\n    padding: 0 15px; }\n    .widget-map .widget-sparkline-chart:first-child {\n      border-left: none; }\n    .widget-map .widget-sparkline-chart .widget-sparkline-title {\n      display: block;\n      font-size: 12px;\n      font-weight: 600;\n      color: #a1afbb; }\n\n/* Widget Map for max-width 480px */\n@media (max-width: 480px) {\n  /* 480px */\n  .widget-map .widget-sparkline-chart {\n    width: 50%;\n    border-left: none;\n    margin-top: 10px;\n    margin-bottom: 10px; } }\n\n/*** Widget Subscribe ***/\n.widget-subscribe {\n  border-radius: 4px;\n  min-height: 250px;\n  overflow: hidden;\n  padding: 30px; }\n  .widget-subscribe .widget-subscribe-no {\n    float: left;\n    font-size: 67px;\n    font-weight: 600;\n    line-height: 1;\n    color: #9a7caf; }\n  .widget-subscribe .widget-subscribe-title {\n    font-size: 25px;\n    font-weight: 700;\n    line-height: 1.4;\n    margin: 0 0 15px 45px; }\n  .widget-subscribe .widget-subscribe-subtitle {\n    font-size: 15px;\n    font-weight: 600; }\n  .widget-subscribe .widget-subscribe-subtitle-link {\n    color: #cab0dd; }\n  .widget-subscribe.widget-subscribe-quote {\n    position: relative; }\n    .widget-subscribe.widget-subscribe-quote:before {\n      position: absolute;\n      top: 2px;\n      font-size: 70px;\n      color: #fff;\n      content: \"\\201C\"; }\n\n/* Widget Subscribe for media queries */\n@media (max-width: 767px) {\n  /* 767px */\n  .widget-subscribe.widget-subscribe-border {\n    border-top: 1px solid #f5f8fb;\n    border-bottom: 1px solid #f5f8fb;\n    border-right: none; } }\n\n@media (min-width: 768px) {\n  /* 768px */\n  .widget-subscribe.widget-subscribe-border {\n    border-left: 1px solid #f5f8fb;\n    border-right: 1px solid #f5f8fb; } }\n\n@media (min-width: 767px) and (max-width: 991px) {\n  /* 767px & 991px */\n  .widget-subscribe.widget-subscribe-border {\n    border-left: none; }\n  .widget-subscribe.widget-subscribe-border-top {\n    border-top: 1px solid #f5f8fb; } }\n\n/*--------------------------------------------------\n    [Material Design]\n----------------------------------------------------*/\n.page-md .widget-bg-color-white,\n.page-md .widget-map,\n.page-md .widget-carousel,\n.page-md .widget-progress-element,\n.page-md .widget-socials,\n.page-md .widget-blog {\n  box-shadow: 0px 2px 3px 2px rgba(0, 0, 0, 0.03); }\n\n/***\nAngularJS Basic Animations\n***/\n@-webkit-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(15px); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0); } }\n\n@-moz-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -moz-transform: translateY(15px); }\n  100% {\n    opacity: 1;\n    -moz-transform: translateY(0); } }\n\n@-o-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -o-transform: translateY(15px); }\n  100% {\n    opacity: 1;\n    -o-transform: translateY(0); } }\n\n@keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    transform: translateY(15px); }\n  100% {\n    opacity: 1;\n    transform: translateY(0); } }\n\n.fade-in-up {\n  -webkit-animation: fadeInUp .5s;\n  animation: fadeInUp .5s; }\n\n@-webkit-keyframes bounceDelay {\n  0%, 80%, 100% {\n    -webkit-transform: scale(0); }\n  40% {\n    -webkit-transform: scale(1); } }\n\n@keyframes bounceDelay {\n  0%, 80%, 100% {\n    transform: scale(0);\n    -webkit-transform: scale(0); }\n  40% {\n    transform: scale(1);\n    -webkit-transform: scale(1); } }\n\n@keyframes input-focus {\n  0% {\n    left: 20%;\n    width: 20%; }\n  99% {\n    width: 0;\n    left: 0;\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n.m-heading-1 {\n  margin: 0 0 20px 0;\n  background: #ffffff;\n  padding-left: 15px;\n  border-left: 8px solid #88909a; }\n  .m-heading-1 > h3 {\n    font-size: 20px;\n    color: #3f444a;\n    font-weight: 500;\n    margin: 0 0 15px 0; }\n    .m-heading-1 > h3 > i {\n      font-size: 18px;\n      color: #88909a; }\n  .m-heading-1 > p {\n    color: #5c6873;\n    margin: 10px 0 0 0; }\n    .m-heading-1 > p:first-child {\n      margin-top: 0; }\n  .m-heading-1.m-bordered {\n    border-right: 1px solid #10161c;\n    border-top: 1px solid #10161c;\n    border-bottom: 1px solid #10161c;\n    padding: 15px 15px; }\n    .page-container-bg-solid .m-heading-1.m-bordered {\n      border-right: 0;\n      border-top: 0;\n      border-bottom: 0; }\n  .m-heading-1.m-title-md > h3 {\n    font-size: 18px;\n    margin-bottom: 10px; }\n    .m-heading-1.m-title-md > h3 > i {\n      font-size: 16px;\n      color: #88909a; }\n  .m-heading-1.m-title-md > p {\n    margin: 15px 0; }\n  .m-heading-1.m-title-sm > h3 {\n    font-size: 16px;\n    margin-bottom: 10px; }\n    .m-heading-1.m-title-sm > h3 > i {\n      font-size: 14px;\n      color: #88909a; }\n  .m-heading-1.m-title-sm > p {\n    margin: 10px 0; }\n\n@media (max-width: 991px) {\n  /* 991px */\n  .m-heading-1 {\n    margin: 0px 0; } }\n\n/***\nTimeline \n***/\n.timeline {\n  margin: 0;\n  padding: 0;\n  position: relative;\n  margin-bottom: 30px; }\n  .timeline:before {\n    content: '';\n    position: absolute;\n    display: block;\n    width: 4px;\n    background: #f5f6fa;\n    top: 0px;\n    bottom: 0px;\n    margin-left: 38px; }\n  .timeline .timeline-item {\n    margin: 0;\n    padding: 0; }\n  .timeline .timeline-badge {\n    float: left;\n    position: relative;\n    padding-right: 30px;\n    height: 80px;\n    width: 80px; }\n  .timeline .timeline-badge-userpic {\n    width: 80px;\n    border: 4px #f5f6fa solid;\n    -webkit-border-radius: 50% !important;\n    -moz-border-radius: 50% !important;\n    border-radius: 50% !important; }\n  .timeline .timeline-badge-userpic img {\n    -webkit-border-radius: 50% !important;\n    -moz-border-radius: 50% !important;\n    border-radius: 50% !important;\n    vertical-align: middle !important; }\n  .timeline .timeline-icon {\n    width: 80px;\n    height: 80px;\n    background-color: #f5f6fa;\n    -webkit-border-radius: 50% !important;\n    -moz-border-radius: 50% !important;\n    border-radius: 50% !important;\n    padding-top: 30px;\n    padding-left: 22px; }\n  .timeline .timeline-icon i {\n    font-size: 34px; }\n  .timeline .timeline-body {\n    position: relative;\n    padding: 20px;\n    margin-top: 20px;\n    margin-left: 110px;\n    background-color: #f5f6fa;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    -ms-border-radius: 4px;\n    -o-border-radius: 4px;\n    border-radius: 4px; }\n    .timeline .timeline-body:before, .timeline .timeline-body:after {\n      content: \" \";\n      display: table; }\n    .timeline .timeline-body:after {\n      clear: both; }\n  .timeline .timeline-body-arrow {\n    position: absolute;\n    top: 30px;\n    left: -14px;\n    width: 0;\n    height: 0;\n    border-style: solid;\n    border-width: 14px 14px 14px 0;\n    border-color: transparent #f5f6fa transparent transparent; }\n  .timeline .timeline-body-head {\n    margin-bottom: 10px; }\n  .timeline .timeline-body-head-caption {\n    float: left; }\n  .timeline .timeline-body-title {\n    font-size: 16px;\n    font-weight: 600; }\n  .timeline .timeline-body-alerttitle {\n    font-size: 16px;\n    font-weight: 600; }\n  .timeline .timeline-body-time {\n    font-size: 14px;\n    margin-left: 10px; }\n  .timeline .timeline-body-head-actions {\n    float: right; }\n  .timeline .timeline-body-head-actions .btn-group {\n    margin-top: -2px; }\n  .timeline .timeline-body-content {\n    font-size: 14px;\n    margin-top: 35px; }\n  .timeline .timeline-body-img {\n    width: 100px;\n    height: 100px;\n    margin: 5px 20px 0 0px; }\n  .timeline.white-bg:before {\n    background: #fff; }\n  .timeline.white-bg .timeline-badge-userpic {\n    border-color: #fff; }\n  .timeline.white-bg .timeline-icon {\n    background-color: #fff; }\n  .timeline.white-bg .timeline-body {\n    background-color: #fff; }\n  .timeline.white-bg .timeline-body-arrow {\n    border-color: transparent #fff transparent transparent; }\n\n@media (max-width: 768px) {\n  .timeline .timeline-body-head-caption {\n    width: 100%; }\n  .timeline .timeline-body-head-actions {\n    float: left;\n    width: 100%;\n    margin-top: 20px;\n    margin-bottom: 20px; } }\n\n@media (max-width: 480px) {\n  .timeline:before {\n    margin-left: 28px; }\n  .timeline .timeline-badge {\n    padding-right: 40px;\n    width: 60px;\n    height: 60px; }\n  .timeline .timeline-badge-userpic {\n    width: 60px; }\n  .timeline .timeline-icon {\n    width: 60px;\n    height: 60px;\n    padding-top: 23px;\n    padding-left: 18px; }\n  .timeline .timeline-icon i {\n    font-size: 25px; }\n  .timeline .timeline-body {\n    margin-left: 80px; }\n  .timeline .timeline-body-arrow {\n    top: 17px; } }\n\n/***\nTimeline 2\n***/\n.mt-timeline-2 {\n  position: relative; }\n  .mt-timeline-2 > .mt-timeline-line {\n    position: absolute;\n    z-index: 1;\n    height: 100%;\n    width: 1px;\n    top: 0;\n    left: 50%;\n    border-left: 4px solid;\n    transform: translateX(-2px); }\n  .mt-timeline-2 > .mt-container {\n    position: relative;\n    padding: 0; }\n    .mt-timeline-2 > .mt-container > .mt-item {\n      list-style: none;\n      padding-bottom: 60px;\n      clear: both; }\n      .mt-timeline-2 > .mt-container > .mt-item .timeline-body-img.pull-left {\n        margin-right: 15px; }\n      .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-icon {\n        width: 70px;\n        height: 70px;\n        background-color: #ccc;\n        border-radius: 50% !important;\n        position: absolute;\n        left: 50%;\n        transform: translateX(-50%);\n        z-index: 5;\n        border: 0;\n        overflow: hidden; }\n        .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-icon > i {\n          top: 50%;\n          left: 50%;\n          transform: translateY(-50%) translateX(-50%);\n          font-size: 24px; }\n        .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-icon > img {\n          width: 100%;\n          height: auto; }\n      .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content {\n        width: 50%;\n        display: inline-block;\n        position: relative; }\n        .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container {\n          text-align: left;\n          background-color: #f5f6fa;\n          padding: 30px;\n          border: 2px solid;\n          border-color: #d3d7e9; }\n          .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container:before, .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container:after {\n            content: \" \";\n            display: table; }\n          .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container:after {\n            clear: both; }\n          .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-author,\n          .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-title {\n            width: 50%;\n            margin-bottom: 15px; }\n          .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-content-title {\n            opacity: 0.8 ;\n            filter: alpha(opacity=80) ;\n            margin-top: 10px;\n            font-size: 18px;\n            font-weight: 600; }\n          .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-avatar {\n            width: 40px;\n            height: 40px;\n            border-radius: 50% !important;\n            overflow: hidden; }\n            .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-avatar > img {\n              width: 100%;\n              height: auto; }\n          .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-author-name,\n          .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-author-name a {\n            opacity: 0.9 ;\n            filter: alpha(opacity=90) ;\n            font-size: 15px;\n            font-weight: 600;\n            text-decoration: none; }\n          .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-author-notes {\n            font-size: 12px; }\n          .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-content {\n            padding-top: 15px;\n            border-top: 1px solid;\n            clear: both;\n            line-height: 1.7em; }\n            .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-content > p {\n              opacity: 0.7 ;\n              filter: alpha(opacity=70) ; }\n            .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-content a, .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-content button {\n              font-size: 14px; }\n          .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .btn {\n            display: inline-block;\n            margin: 0 5px 10px 0; }\n          .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .btn.pull-right {\n            margin: 0 0 10px 5px; }\n          .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container:before {\n            content: '';\n            position: absolute;\n            top: 28px;\n            height: 0;\n            width: 0;\n            border: 10px solid transparent; }\n      .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) {\n        text-align: left; }\n        .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container {\n          margin-right: 60px; }\n          .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-title {\n            float: left; }\n          .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-author {\n            float: right; }\n          .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-avatar {\n            float: right;\n            margin-left: 15px; }\n          .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-author-name,\n          .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-author-notes {\n            text-align: right; }\n          .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container:before {\n            right: 40px;\n            border-left: 10px solid #d3d7e9; }\n      .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) {\n        text-align: right; }\n        .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-icon > i {\n          transform: translateY(-50%) translateX(50%);\n          left: -50%; }\n        .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container {\n          margin-left: 60px; }\n          .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container .mt-avatar {\n            float: left;\n            margin-right: 15px; }\n          .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container .mt-title {\n            float: right;\n            text-align: right; }\n          .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container .mt-author {\n            float: left; }\n          .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container .mt-author-name,\n          .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container .mt-author-notes {\n            text-align: left; }\n          .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container:before {\n            left: 40px;\n            border-right: 10px solid #E9EDEF; }\n\n@media (max-width: 991px) {\n  /* 991px */\n  .mt-timeline-2 > .mt-timeline-line {\n    left: 25px; }\n  .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-icon {\n    left: 25px; }\n    .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-icon > i {\n      left: 0; }\n  .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content {\n    width: 100%; }\n    .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-title {\n      float: none;\n      text-align: left !important; }\n    .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-author,\n    .mt-timeline-2 > .mt-container > .mt-item > .mt-timeline-content > .mt-content-container .mt-title {\n      width: 100%; }\n  .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) {\n    text-align: right; }\n    .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container {\n      margin-left: 80px;\n      margin-right: 0; }\n      .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-avatar {\n        float: left;\n        margin-right: 15px; }\n      .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-title {\n        float: right;\n        text-align: right; }\n      .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-author {\n        float: left; }\n      .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-author-name,\n      .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container .mt-author-notes {\n        text-align: left; }\n      .mt-timeline-2 > .mt-container > .mt-item:nth-child(odd) > .mt-timeline-content > .mt-content-container:before {\n        left: 70px;\n        border-right: 10px solid #E9EDEF;\n        border-left: none; }\n  .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container {\n    margin-left: 80px;\n    margin-right: 0; }\n    .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container:before {\n      left: 70px;\n      border-right: 10px solid #E9EDEF;\n      border-left: none; } }\n\n@media (max-width: 480px) {\n  .btn.pull-right,\n  .btn-group.pull-right {\n    float: none !important;\n    margin: 0 5px 10px 0 !important; } }\n\n@media (max-width: 400px) {\n  .mt-timeline-2 > .mt-container > .mt-item:nth-child(even) > .mt-timeline-content > .mt-content-container .mt-author-notes {\n    clear: both;\n    padding-top: 10px; } }\n\n/***\nHorizontal Timeline \n***/\n/* PLUGIN CSS */\n.cd-horizontal-timeline {\n  opacity: 0;\n  -webkit-transition: opacity 0.2s;\n  -moz-transition: opacity 0.2s;\n  transition: opacity 0.2s; }\n\n.cd-horizontal-timeline::before {\n  /* never visible - this is used in jQuery to check the current MQ */\n  content: 'mobile';\n  display: none; }\n\n.cd-horizontal-timeline.loaded {\n  /* show the timeline after events position has been set (using JavaScript) */\n  opacity: 1; }\n\n.cd-horizontal-timeline .timeline {\n  position: relative;\n  height: 100px;\n  width: 90%;\n  max-width: 800px;\n  margin: 0 auto; }\n\n.cd-horizontal-timeline .events-wrapper {\n  position: relative;\n  height: 100%;\n  margin: 0 40px;\n  overflow: hidden; }\n\n.cd-horizontal-timeline .events-wrapper::after, .cd-horizontal-timeline .events-wrapper::before {\n  /* these are used to create a shadow effect at the sides of the timeline */\n  content: '';\n  position: absolute;\n  z-index: 2;\n  top: 0;\n  height: 100%;\n  width: 20px; }\n\n.cd-horizontal-timeline .events-wrapper::before {\n  left: 0;\n  background-image: -webkit-linear-gradient(left, #f8f8f8, rgba(248, 248, 248, 0));\n  background-image: linear-gradient(to right, #f8f8f8, rgba(248, 248, 248, 0)); }\n\n.cd-horizontal-timeline .events-wrapper::after {\n  right: 0;\n  background-image: -webkit-linear-gradient(right, #f8f8f8, rgba(248, 248, 248, 0));\n  background-image: linear-gradient(to left, #f8f8f8, rgba(248, 248, 248, 0)); }\n\n.cd-horizontal-timeline .events {\n  /* this is the grey line/timeline */\n  position: absolute;\n  z-index: 1;\n  left: 0;\n  top: 49px;\n  height: 2px;\n  /* width will be set using JavaScript */\n  background: #dfdfdf;\n  -webkit-transition: -webkit-transform 0.4s;\n  -moz-transition: -moz-transform 0.4s;\n  transition: transform 0.4s; }\n\n.cd-horizontal-timeline .filling-line {\n  /* this is used to create the green line filling the timeline */\n  position: absolute;\n  z-index: 1;\n  left: 0;\n  top: 0;\n  height: 100%;\n  width: 100%;\n  background-color: #7b9d6f;\n  -webkit-transform: scaleX(0);\n  -moz-transform: scaleX(0);\n  -ms-transform: scaleX(0);\n  -o-transform: scaleX(0);\n  transform: scaleX(0);\n  -webkit-transform-origin: left center;\n  -moz-transform-origin: left center;\n  -ms-transform-origin: left center;\n  -o-transform-origin: left center;\n  transform-origin: left center;\n  -webkit-transition: -webkit-transform 0.3s;\n  -moz-transition: -moz-transform 0.3s;\n  transition: transform 0.3s; }\n\n.cd-horizontal-timeline .events a {\n  position: absolute;\n  bottom: 0;\n  z-index: 2;\n  text-align: center;\n  font-size: 1.3rem;\n  padding-bottom: 15px;\n  color: #383838;\n  /* fix bug on Safari - text flickering while timeline translates */\n  -webkit-transform: translateZ(0);\n  -moz-transform: translateZ(0);\n  -ms-transform: translateZ(0);\n  -o-transform: translateZ(0);\n  transform: translateZ(0); }\n\n.cd-horizontal-timeline .events a::after {\n  /* this is used to create the event spot */\n  content: '';\n  position: absolute;\n  left: 50%;\n  right: auto;\n  -webkit-transform: translateX(-50%);\n  -moz-transform: translateX(-50%);\n  -ms-transform: translateX(-50%);\n  -o-transform: translateX(-50%);\n  transform: translateX(-50%);\n  bottom: -5px;\n  height: 12px;\n  width: 12px;\n  border-radius: 50%;\n  -webkit-transition: background-color 0.3s, border-color 0.3s;\n  -moz-transition: background-color 0.3s, border-color 0.3s;\n  transition: background-color 0.3s, border-color 0.3s; }\n\n.no-touch .cd-horizontal-timeline .events a:hover::after {\n  background-color: #7b9d6f;\n  border-color: #7b9d6f; }\n\n.cd-horizontal-timeline .events a.selected {\n  pointer-events: none; }\n\n@media only screen and (min-width: 1100px) {\n  .cd-horizontal-timeline::before {\n    /* never visible - this is used in jQuery to check the current MQ */\n    content: 'desktop'; } }\n\n.cd-timeline-navigation a {\n  /* these are the left/right arrows to navigate the timeline */\n  position: absolute;\n  z-index: 1;\n  top: 50%;\n  bottom: auto;\n  -webkit-transform: translateY(-50%);\n  -moz-transform: translateY(-50%);\n  -ms-transform: translateY(-50%);\n  -o-transform: translateY(-50%);\n  transform: translateY(-50%);\n  height: 34px;\n  width: 34px;\n  border-radius: 50%;\n  border: 2px solid #dfdfdf;\n  /* replace text with an icon */\n  overflow: hidden;\n  color: transparent;\n  text-indent: 100%;\n  white-space: nowrap;\n  -webkit-transition: border-color 0.3s;\n  -moz-transition: border-color 0.3s;\n  transition: border-color 0.3s; }\n\n.cd-timeline-navigation a.prev {\n  left: 0; }\n\n.cd-timeline-navigation a.next {\n  right: 0; }\n\n.cd-timeline-navigation a.inactive {\n  cursor: not-allowed; }\n\n.cd-timeline-navigation a.inactive::after {\n  background-position: 0 -16px; }\n\n.no-touch .cd-timeline-navigation a.inactive:hover {\n  border-color: #dfdfdf; }\n\n.cd-horizontal-timeline .events-content {\n  position: relative;\n  width: 100%;\n  margin: 10px 0 0 0;\n  overflow: hidden;\n  -webkit-transition: height 0.4s;\n  -moz-transition: height 0.4s;\n  transition: height 0.4s; }\n\n.cd-horizontal-timeline .events-content > ol > li {\n  position: absolute;\n  z-index: 1;\n  width: 100%;\n  left: 0;\n  top: 0;\n  -webkit-transform: translateX(-100%);\n  -moz-transform: translateX(-100%);\n  -ms-transform: translateX(-100%);\n  -o-transform: translateX(-100%);\n  transform: translateX(-100%);\n  padding: 0;\n  opacity: 0;\n  -webkit-animation-duration: 0.4s;\n  -moz-animation-duration: 0.4s;\n  animation-duration: 0.4s;\n  -webkit-animation-timing-function: ease-in-out;\n  -moz-animation-timing-function: ease-in-out;\n  animation-timing-function: ease-in-out; }\n\n.cd-horizontal-timeline .events-content > ol > li.selected {\n  /* visible event content */\n  position: relative;\n  z-index: 2;\n  opacity: 1;\n  -webkit-transform: translateX(0);\n  -moz-transform: translateX(0);\n  -ms-transform: translateX(0);\n  -o-transform: translateX(0);\n  transform: translateX(0); }\n\n.cd-horizontal-timeline .events-content > ol > li.enter-right, .cd-horizontal-timeline .events-content > ol > li.leave-right {\n  -webkit-animation-name: cd-enter-right;\n  -moz-animation-name: cd-enter-right;\n  animation-name: cd-enter-right; }\n\n.cd-horizontal-timeline .events-content > ol > li.enter-left, .cd-horizontal-timeline .events-content > ol > li.leave-left {\n  -webkit-animation-name: cd-enter-left;\n  -moz-animation-name: cd-enter-left;\n  animation-name: cd-enter-left; }\n\n.cd-horizontal-timeline .events-content > ol > li.leave-right, .cd-horizontal-timeline .events-content > ol > li.leave-left {\n  -webkit-animation-direction: reverse;\n  -moz-animation-direction: reverse;\n  animation-direction: reverse; }\n\n.cd-horizontal-timeline .events-content > ol > li {\n  margin: 0 auto; }\n\n.cd-horizontal-timeline .events-content em {\n  display: block;\n  font-style: italic;\n  margin: 10px auto; }\n\n.cd-horizontal-timeline .events-content em::before {\n  content: '- '; }\n\n@-webkit-keyframes cd-enter-right {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(100%); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%); } }\n\n@-moz-keyframes cd-enter-right {\n  0% {\n    opacity: 0;\n    -moz-transform: translateX(100%); }\n  100% {\n    opacity: 1;\n    -moz-transform: translateX(0%); } }\n\n@keyframes cd-enter-right {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(100%);\n    -moz-transform: translateX(100%);\n    -ms-transform: translateX(100%);\n    -o-transform: translateX(100%);\n    transform: translateX(100%); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    -moz-transform: translateX(0%);\n    -ms-transform: translateX(0%);\n    -o-transform: translateX(0%);\n    transform: translateX(0%); } }\n\n@-webkit-keyframes cd-enter-left {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-100%); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%); } }\n\n@-moz-keyframes cd-enter-left {\n  0% {\n    opacity: 0;\n    -moz-transform: translateX(-100%); }\n  100% {\n    opacity: 1;\n    -moz-transform: translateX(0%); } }\n\n@keyframes cd-enter-left {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-100%);\n    -moz-transform: translateX(-100%);\n    -ms-transform: translateX(-100%);\n    -o-transform: translateX(-100%);\n    transform: translateX(-100%); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    -moz-transform: translateX(0%);\n    -ms-transform: translateX(0%);\n    -o-transform: translateX(0%);\n    transform: translateX(0%); } }\n\n/* METRONIC EXTENDED CSS */\n.mt-timeline-horizontal {\n  font-size: 14px; }\n  .mt-timeline-horizontal ol, .mt-timeline-horizontal ul {\n    list-style: none; }\n  .mt-timeline-horizontal blockquote, .mt-timeline-horizontal q {\n    quotes: none; }\n  .mt-timeline-horizontal blockquote:before, .mt-timeline-horizontal blockquote:after,\n  .mt-timeline-horizontal q:before, .mt-timeline-horizontal q:after {\n    content: '';\n    content: none; }\n  .mt-timeline-horizontal table {\n    border-collapse: collapse;\n    border-spacing: 0; }\n  .mt-timeline-horizontal .timeline {\n    width: 100%;\n    max-width: 100%; }\n    .mt-timeline-horizontal .timeline:before {\n      background: transparent; }\n    .mt-timeline-horizontal .timeline .events-wrapper .events a:after {\n      background-color: transparent;\n      border: 2px solid; }\n    .mt-timeline-horizontal .timeline .events-wrapper .events a.selected:after {\n      background-color: #fff !important; }\n    .mt-timeline-horizontal .timeline .events-wrapper .events a:hover, .mt-timeline-horizontal .timeline .events-wrapper .events a:focus {\n      text-decoration: none; }\n    .mt-timeline-horizontal .timeline .events-wrapper:before, .mt-timeline-horizontal .timeline .events-wrapper:after {\n      background-image: none; }\n    .mt-timeline-horizontal .timeline .mt-ht-nav-icon li a {\n      border-radius: 50% !important; }\n      .mt-timeline-horizontal .timeline .mt-ht-nav-icon li a i {\n        position: absolute;\n        top: 50%;\n        left: 0;\n        transform: translateX(50%) translateY(-50%);\n        width: 10px; }\n    .mt-timeline-horizontal .timeline .mt-ht-nav-icon li:first-child a i {\n      left: -2px; }\n    .mt-timeline-horizontal .timeline.mt-timeline-square .events a:after {\n      border-radius: 0 !important; }\n    .mt-timeline-horizontal .timeline.mt-timeline-square .mt-ht-nav-icon li a {\n      border-radius: 0 !important; }\n  .mt-timeline-horizontal .events-content ol {\n    padding: 0; }\n    .mt-timeline-horizontal .events-content ol li .mt-title {\n      margin-top: 15px;\n      float: left;\n      width: 60%; }\n      .mt-timeline-horizontal .events-content ol li .mt-title h2 {\n        margin: 0;\n        opacity: 0.8 ;\n        filter: alpha(opacity=80) ;\n        font-size: 18px;\n        font-weight: 600; }\n    .mt-timeline-horizontal .events-content ol li .mt-author {\n      float: right;\n      position: relative;\n      text-align: right;\n      width: 40%; }\n      .mt-timeline-horizontal .events-content ol li .mt-author > .mt-avatar {\n        float: right;\n        margin-left: 15px; }\n      .mt-timeline-horizontal .events-content ol li .mt-author > .mt-author-name {\n        margin-top: 5px; }\n        .mt-timeline-horizontal .events-content ol li .mt-author > .mt-author-name a {\n          opacity: 0.9 ;\n          filter: alpha(opacity=90) ;\n          font-size: 15px;\n          font-weight: 600; }\n          .mt-timeline-horizontal .events-content ol li .mt-author > .mt-author-name a:hover, .mt-timeline-horizontal .events-content ol li .mt-author > .mt-author-name a:focus {\n            text-decoration: none; }\n      .mt-timeline-horizontal .events-content ol li .mt-author > .mt-author-datetime {\n        font-size: 13px; }\n      .mt-timeline-horizontal .events-content ol li .mt-author > .mt-avatar {\n        width: 50px;\n        height: 50px;\n        border-radius: 50% !important;\n        overflow: hidden; }\n        .mt-timeline-horizontal .events-content ol li .mt-author > .mt-avatar > img {\n          width: 100%;\n          height: auto; }\n    .mt-timeline-horizontal .events-content ol li .mt-content {\n      margin-top: 20px;\n      padding-top: 20px;\n      border-top: 1px solid;\n      clear: both;\n      line-height: 1.7em; }\n      .mt-timeline-horizontal .events-content ol li .mt-content > p {\n        opacity: 0.7 ;\n        filter: alpha(opacity=70) ; }\n      .mt-timeline-horizontal .events-content ol li .mt-content img.pull-left {\n        margin: 0 15px 15px 0; }\n      .mt-timeline-horizontal .events-content ol li .mt-content img.pull-right {\n        margin: 0 0 15px 15px; }\n      .mt-timeline-horizontal .events-content ol li .mt-content .btn-group .dropdown-menu {\n        margin-right: 5px; }\n\n@media (max-width: 480px) {\n  .mt-timeline-horizontal .events-content ol li .mt-title {\n    width: 100%; }\n  .mt-timeline-horizontal .events-content ol li .mt-author {\n    width: 100%;\n    margin-top: 15px;\n    text-align: left; }\n    .mt-timeline-horizontal .events-content ol li .mt-author > .mt-avatar {\n      float: left;\n      margin-right: 15px;\n      margin-left: 0; }\n    .mt-timeline-horizontal .events-content ol li .mt-author > .mt-author-name {\n      margin-top: 10px; }\n  .mt-timeline-horizontal .btn.pull-right {\n    float: none !important;\n    margin: 0 !important; } }\n\n/***\nTasks Widget \n***/\n.tasks-widget:after {\n  clear: both; }\n\n.tasks-widget .task-list {\n  list-style: none;\n  padding: 0;\n  margin: 0; }\n  .tasks-widget .task-list > li {\n    position: relative;\n    padding: 10px 10px;\n    border-bottom: 1px solid #F4F6F9; }\n    .tasks-widget .task-list > li:hover {\n      background: #F4F6F9; }\n    .tasks-widget .task-list > li.last-line {\n      border-bottom: none; }\n    .tasks-widget .task-list > li.task-done {\n      background: #f6f6f6; }\n      .tasks-widget .task-list > li.task-done:hover {\n        background: #f4f4f4; }\n      .tasks-widget .task-list > li.task-done .task-title-sp {\n        text-decoration: line-through; }\n    .tasks-widget .task-list > li > .task-bell {\n      margin-left: 10px; }\n    .tasks-widget .task-list > li > .task-checkbox {\n      float: left;\n      width: 30px; }\n      .tasks-widget .task-list > li > .task-checkbox input[type=\"checkbox\"] {\n        cursor: pointer; }\n    .tasks-widget .task-list > li > .task-title {\n      color: #838FA1;\n      margin-right: 10px; }\n      .tasks-widget .task-list > li > .task-title .task-title-sp {\n        margin-right: 5px; }\n    .tasks-widget .task-list > li .task-config-btn {\n      margin-top: -1px; }\n    .tasks-widget .task-list > li > .task-config {\n      display: none;\n      position: absolute;\n      top: 7px;\n      right: 10px; }\n    .tasks-widget .task-list > li:hover > .task-config {\n      display: block;\n      margin-bottom: 0 !important; }\n\n.tasks-widget .task-footer {\n  margin-top: 5px; }\n  .tasks-widget .task-footer:before, .tasks-widget .task-footer:after {\n    content: \" \";\n    display: table; }\n  .tasks-widget .task-footer:after {\n    clear: both; }\n\n@media only screen and (max-width: 480px) {\n  .tasks-widget .task-config-btn {\n    float: inherit;\n    display: block; }\n  .tasks-widget .task-list-projects li > .label {\n    margin-bottom: 5px; } }\n\n.mt-comments .mt-comment {\n  padding: 10px;\n  margin: 0 0 10px 0; }\n  .mt-comments .mt-comment .mt-comment-img {\n    width: 40px;\n    float: left; }\n    .mt-comments .mt-comment .mt-comment-img > img {\n      border-radius: 50% !important; }\n  .mt-comments .mt-comment .mt-comment-body {\n    padding-left: 20px;\n    position: relative;\n    overflow: hidden; }\n    .mt-comments .mt-comment .mt-comment-body .mt-comment-info:before, .mt-comments .mt-comment .mt-comment-body .mt-comment-info:after {\n      content: \" \";\n      display: table; }\n    .mt-comments .mt-comment .mt-comment-body .mt-comment-info:after {\n      clear: both; }\n    .mt-comments .mt-comment .mt-comment-body .mt-comment-info .mt-comment-author {\n      display: inline-block;\n      float: left;\n      margin: 0px 0px 10px 0;\n      color: #060606;\n      font-weight: 600; }\n    .mt-comments .mt-comment .mt-comment-body .mt-comment-info .mt-comment-date {\n      display: inline-block;\n      float: right;\n      margin: 0px;\n      color: #BABABA; }\n    .mt-comments .mt-comment .mt-comment-body .mt-comment-text {\n      color: #999999; }\n    .mt-comments .mt-comment .mt-comment-body .mt-comment-details {\n      margin: 10px 0px 0px 0; }\n      .mt-comments .mt-comment .mt-comment-body .mt-comment-details .mt-comment-status {\n        text-transform: uppercase;\n        float: left; }\n        .mt-comments .mt-comment .mt-comment-body .mt-comment-details .mt-comment-status.mt-comment-status-pending {\n          color: #B8C0F5; }\n        .mt-comments .mt-comment .mt-comment-body .mt-comment-details .mt-comment-status.mt-comment-status-approved {\n          color: #6BD873; }\n        .mt-comments .mt-comment .mt-comment-body .mt-comment-details .mt-comment-status.mt-comment-status-rejected {\n          color: red; }\n      .mt-comments .mt-comment .mt-comment-body .mt-comment-details .mt-comment-actions {\n        display: none;\n        list-style: none;\n        margin: 0;\n        padding: 0;\n        float: right; }\n        .mt-comments .mt-comment .mt-comment-body .mt-comment-details .mt-comment-actions > li {\n          float: left;\n          padding: 0 5px;\n          margin: 0; }\n          .mt-comments .mt-comment .mt-comment-body .mt-comment-details .mt-comment-actions > li > a {\n            text-transform: uppercase;\n            color: #999999; }\n            .mt-comments .mt-comment .mt-comment-body .mt-comment-details .mt-comment-actions > li > a:hover {\n              color: #666666;\n              text-decoration: none; }\n  .mt-comments .mt-comment:hover {\n    background: #f9f9f9; }\n    .mt-comments .mt-comment:hover .mt-comment-body .mt-comment-details .mt-comment-actions {\n      display: inline-block; }\n\n.mt-actions .mt-action {\n  margin: 0px;\n  padding: 15px 0 15px 0;\n  border-bottom: 1px solid #f7f8f9; }\n  .mt-actions .mt-action:last-child {\n    border-bottom: 0px; }\n  .mt-actions .mt-action .mt-action-img {\n    width: 40px;\n    float: left; }\n    .mt-actions .mt-action .mt-action-img > img {\n      border-radius: 50% !important;\n      margin-bottom: 2px; }\n  .mt-actions .mt-action .mt-action-body {\n    padding-left: 15px;\n    position: relative;\n    overflow: hidden; }\n    .mt-actions .mt-action .mt-action-body .mt-action-row {\n      display: table;\n      width: 100%; }\n      .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-info {\n        display: table-cell;\n        vertical-align: top; }\n        .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-info .mt-action-icon {\n          display: table-cell;\n          padding: 6px 20px 6px 6px; }\n          .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-info .mt-action-icon > i {\n            display: inline-block;\n            position: relative;\n            top: 10px;\n            font-size: 25px;\n            color: #78E0E8; }\n        .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-info .mt-action-details {\n          display: table-cell;\n          vertical-align: top; }\n          .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-info .mt-action-details .mt-action-author {\n            color: #060606;\n            font-weight: 600; }\n          .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-info .mt-action-details .mt-action-desc {\n            margin-bottom: 0;\n            color: #999b9b; }\n      .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-datetime {\n        vertical-align: top;\n        display: table-cell;\n        text-align: center;\n        width: 150px;\n        white-space: nowrap;\n        padding-top: 15px;\n        color: #A6A8A8; }\n        .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-datetime .mt-action-dot {\n          display: inline-block;\n          width: 10px;\n          height: 10px;\n          background-color: red;\n          border-radius: 50% !important;\n          margin-left: 5px;\n          margin-right: 5px; }\n      .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-buttons {\n        vertical-align: top;\n        display: table-cell;\n        text-align: center;\n        width: 160px;\n        white-space: nowrap;\n        padding-top: 10px; }\n\n@media (max-width: 767px) {\n  /* 767px */\n  .mt-actions .mt-action .mt-action-body .mt-action-row {\n    display: block; }\n    .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-info {\n      display: block; }\n    .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-datetime {\n      display: inline-block;\n      margin-left: 40px; }\n    .mt-actions .mt-action .mt-action-body .mt-action-row .mt-action-buttons {\n      display: inline-block;\n      float: right; } }\n\n.mt-widget-1 {\n  border: 1px solid #e7ecf1;\n  text-align: center;\n  position: relative; }\n  .mt-widget-1 .mt-icon {\n    position: absolute;\n    right: 10px;\n    top: 10px;\n    margin: 7px;\n    font-size: 20px; }\n    .mt-widget-1 .mt-icon > a > i {\n      color: #a1e5e1; }\n    .mt-widget-1 .mt-icon > a:hover > i {\n      color: #79dad5; }\n  .mt-widget-1 .mt-img {\n    display: inline-block;\n    border-radius: 50% !important;\n    border: 4px solid #e7ecf1;\n    margin: 40px 0 30px 0; }\n    .mt-widget-1 .mt-img > img {\n      border: 1px solid trnsparent;\n      border-radius: 50% !important; }\n  .mt-widget-1 .mt-body .mt-username {\n    text-align: center;\n    margin: 5px 10px;\n    font-weight: 600;\n    font-size: 16px; }\n  .mt-widget-1 .mt-body .mt-user-title {\n    text-align: center;\n    margin: 10px 10px 10px 10px;\n    color: #666666;\n    font-size: 13px; }\n  .mt-widget-1 .mt-body .mt-stats {\n    margin: 30px 0px 0px 0px; }\n    .mt-widget-1 .mt-body .mt-stats .btn-group {\n      border-top: 1px solid #e7ecf1; }\n      .mt-widget-1 .mt-body .mt-stats .btn-group .btn {\n        padding: 10px 10px;\n        font-size: 14px;\n        border-right: 1px solid #e7ecf1; }\n        .mt-widget-1 .mt-body .mt-stats .btn-group .btn:hover {\n          background-color: #e7ecf1; }\n        .mt-widget-1 .mt-body .mt-stats .btn-group .btn:last-child {\n          border: 0; }\n        .mt-widget-1 .mt-body .mt-stats .btn-group .btn > i {\n          position: relative;\n          top: 3px;\n          right: 2px;\n          font-size: 16px; }\n        .mt-widget-1 .mt-body .mt-stats .btn-group .btn:first-child {\n          border-bottom-left-radius: 4px !important; }\n        .mt-widget-1 .mt-body .mt-stats .btn-group .btn:last-child {\n          border-bottom-right-radius: 4px !important; }\n\n.mt-widget-2 {\n  border: 1px solid #e7ecf1;\n  position: relative; }\n  .mt-widget-2 .mt-head {\n    position: absolute;\n    width: 100%;\n    background-size: 100% 100%; }\n    .mt-widget-2 .mt-head .mt-head-label {\n      position: absolute;\n      top: 8px;\n      right: 8px;\n      cursor: pointer; }\n      .mt-widget-2 .mt-head .mt-head-label > button {\n        font-size: 13px;\n        border-radius: 2px !important; }\n    .mt-widget-2 .mt-head .mt-head-user .mt-head-user-img {\n      position: relative;\n      float: left;\n      margin: 165px 32px 18px 35px; }\n      .mt-widget-2 .mt-head .mt-head-user .mt-head-user-img::after {\n        content: \"\";\n        position: absolute;\n        top: 90%;\n        left: 50%;\n        margin-left: -15px;\n        border-width: 13px;\n        border-style: solid;\n        border-color: transparent transparent white  transparent; }\n      .mt-widget-2 .mt-head .mt-head-user .mt-head-user-img > img {\n        width: 65px;\n        border-radius: 50% !important; }\n    .mt-widget-2 .mt-head .mt-head-user .mt-head-user-info {\n      margin: 175px 0 0 -9px;\n      color: white;\n      display: inline-block; }\n      .mt-widget-2 .mt-head .mt-head-user .mt-head-user-info .mt-user-name {\n        display: block;\n        font-size: 15px; }\n      .mt-widget-2 .mt-head .mt-head-user .mt-head-user-info .mt-user-time {\n        font-size: 13px;\n        display: block; }\n        .mt-widget-2 .mt-head .mt-head-user .mt-head-user-info .mt-user-time > i {\n          position: relative;\n          top: 1px;\n          font-size: 13px; }\n  .mt-widget-2 .mt-body {\n    padding-top: 160px;\n    text-align: center; }\n    .mt-widget-2 .mt-body .mt-body-title {\n      margin-top: 130px;\n      font-weight: 600;\n      font-size: 16px; }\n    .mt-widget-2 .mt-body .mt-body-description {\n      margin-top: 10px;\n      display: inline-block;\n      color: #666666;\n      font-size: 13px;\n      padding: 0 10px; }\n    .mt-widget-2 .mt-body .mt-body-stats {\n      padding: 0; }\n      .mt-widget-2 .mt-body .mt-body-stats:before, .mt-widget-2 .mt-body .mt-body-stats:after {\n        content: \" \";\n        display: table; }\n      .mt-widget-2 .mt-body .mt-body-stats:after {\n        clear: both; }\n      .mt-widget-2 .mt-body .mt-body-stats > li {\n        margin: 15px;\n        list-style: none;\n        display: inline-block; }\n    .mt-widget-2 .mt-body .mt-body-actions {\n      border-top: 1px solid #e7ecf1; }\n      .mt-widget-2 .mt-body .mt-body-actions > i {\n        font-size: 18px; }\n      .mt-widget-2 .mt-body .mt-body-actions .btn {\n        font-size: 14px;\n        border-right: 1px solid #e7ecf1;\n        padding: 12px 0 12px 0;\n        text-align: center; }\n        .mt-widget-2 .mt-body .mt-body-actions .btn:last-child {\n          border: 0; }\n\n.mt-widget-3 {\n  border: 1px solid #e7ecf1; }\n  .mt-widget-3 .mt-head {\n    background-color: #5DC9E6;\n    margin-bottom: 20px;\n    color: white;\n    padding: 15px 0; }\n    .mt-widget-3 .mt-head .mt-head-icon {\n      font-size: 35px;\n      text-align: center;\n      padding-top: 20px;\n      margin-bottom: 10px; }\n    .mt-widget-3 .mt-head .mt-head-desc {\n      margin-left: 10px;\n      margin-right: 10px;\n      text-align: center;\n      color: #fff;\n      opacity: 0.8 ;\n      filter: alpha(opacity=80) ; }\n    .mt-widget-3 .mt-head .mt-head-date {\n      text-align: center;\n      margin-top: 20px;\n      display: block;\n      color: #f2f2f2; }\n    .mt-widget-3 .mt-head .mt-head-button {\n      margin: 10px 0;\n      text-align: center;\n      padding: 20px; }\n      .mt-widget-3 .mt-head .mt-head-button > button {\n        width: 90px; }\n  .mt-widget-3 .mt-body-actions-icons .btn-group {\n    margin-bottom: 20px; }\n    .mt-widget-3 .mt-body-actions-icons .btn-group .mt-icon {\n      display: block;\n      position: relative;\n      padding: 5px;\n      font-size: 15px; }\n  .mt-widget-3 .mt-body-actions-icons .btn {\n    border-right: 1px solid #e7ecf1;\n    font-size: 11px;\n    text-align: center;\n    padding: 0; }\n    .mt-widget-3 .mt-body-actions-icons .btn:last-child {\n      border-right: 0; }\n\n.mt-widget-4 {\n  min-height: 250px;\n  color: white;\n  background-color: #26C0B8; }\n  .mt-widget-4 .mt-img-container {\n    position: relative; }\n    .mt-widget-4 .mt-img-container > img {\n      height: 250px;\n      width: 100%; }\n  .mt-widget-4 .mt-container {\n    width: 150px;\n    background-color: #26C0B8;\n    min-height: 250px;\n    position: absolute;\n    right: 15px;\n    top: 0; }\n    .mt-widget-4 .mt-container .mt-head-title {\n      text-align: center;\n      margin-top: 20px;\n      padding: 10px; }\n    .mt-widget-4 .mt-container .mt-body-icons {\n      margin-top: 30px;\n      text-align: center; }\n      .mt-widget-4 .mt-container .mt-body-icons > a {\n        color: #e6e6e6;\n        display: inline-block;\n        padding: 10px;\n        font-size: 17px; }\n        .mt-widget-4 .mt-container .mt-body-icons > a:hover {\n          color: #fff; }\n    .mt-widget-4 .mt-container .mt-footer-button {\n      margin-top: 30px;\n      position: absolute;\n      right: 0; }\n      .mt-widget-4 .mt-container .mt-footer-button > .btn {\n        width: 90px;\n        border-top-right-radius: 0 !important;\n        border-bottom-right-radius: 0 !important;\n        border: none !important; }\n\n.mt-code {\n  padding: 3px;\n  color: #E43A45;\n  border-radius: 4px !important;\n  display: inline;\n  word-wrap: normal; }\n\n.caption-desc {\n  font-size: 13px;\n  margin-top: 0.5em;\n  line-height: 2.3em; }\n\n.mt-element-step .row {\n  margin: 0; }\n\n.mt-element-step .step-default .mt-step-col {\n  padding-top: 30px;\n  padding-bottom: 30px;\n  text-align: center; }\n\n.mt-element-step .step-default .mt-step-number {\n  font-size: 26px;\n  border-radius: 50% !important;\n  display: inline-block;\n  margin: auto;\n  padding: 3px 14px;\n  margin-bottom: 20px; }\n\n.mt-element-step .step-default .mt-step-title {\n  font-size: 30px;\n  font-weight: 100; }\n\n.mt-element-step .step-default .active {\n  background-color: #32c5d2 !important; }\n  .mt-element-step .step-default .active .mt-step-number {\n    color: #32c5d2 !important; }\n  .mt-element-step .step-default .active .mt-step-title,\n  .mt-element-step .step-default .active .mt-step-content {\n    color: #fff !important; }\n\n.mt-element-step .step-default .done {\n  background-color: #26C281 !important; }\n  .mt-element-step .step-default .done .mt-step-number {\n    color: #26C281 !important; }\n  .mt-element-step .step-default .done .mt-step-title,\n  .mt-element-step .step-default .done .mt-step-content {\n    color: #fff !important; }\n\n.mt-element-step .step-default .error {\n  background-color: #E7505A !important; }\n  .mt-element-step .step-default .error .mt-step-number {\n    color: #E7505A !important; }\n  .mt-element-step .step-default .error .mt-step-title,\n  .mt-element-step .step-default .error .mt-step-content {\n    color: #fff !important; }\n\n.mt-element-step .step-thin .mt-step-col {\n  padding-top: 10px;\n  padding-bottom: 10px; }\n\n.mt-element-step .step-thin .mt-step-number {\n  font-size: 26px;\n  border-radius: 50% !important;\n  float: left;\n  margin: auto;\n  padding: 3px 14px; }\n\n.mt-element-step .step-thin .mt-step-title {\n  font-size: 24px;\n  font-weight: 100;\n  padding-left: 60px;\n  margin-top: -4px; }\n\n.mt-element-step .step-thin .mt-step-content {\n  padding-left: 60px;\n  margin-top: -5px; }\n\n.mt-element-step .step-thin .active {\n  background-color: #32c5d2 !important; }\n  .mt-element-step .step-thin .active .mt-step-number {\n    color: #32c5d2 !important; }\n  .mt-element-step .step-thin .active .mt-step-title,\n  .mt-element-step .step-thin .active .mt-step-content {\n    color: #fff !important; }\n\n.mt-element-step .step-thin .done {\n  background-color: #26C281 !important; }\n  .mt-element-step .step-thin .done .mt-step-number {\n    color: #26C281 !important; }\n  .mt-element-step .step-thin .done .mt-step-title,\n  .mt-element-step .step-thin .done .mt-step-content {\n    color: #fff !important; }\n\n.mt-element-step .step-thin .error {\n  background-color: #E7505A !important; }\n  .mt-element-step .step-thin .error .mt-step-number {\n    color: #E7505A !important; }\n  .mt-element-step .step-thin .error .mt-step-title,\n  .mt-element-step .step-thin .error .mt-step-content {\n    color: #fff !important; }\n\n.mt-element-step .step-background .mt-step-col {\n  padding-top: 30px;\n  padding-bottom: 30px;\n  text-align: center;\n  height: 160px; }\n\n.mt-element-step .step-background .mt-step-number {\n  font-size: 200px;\n  position: absolute;\n  bottom: 0;\n  right: 0;\n  line-height: 0.79em;\n  color: #dae1e4;\n  z-index: 4; }\n\n.mt-element-step .step-background .mt-step-title {\n  font-size: 30px;\n  font-weight: 100;\n  text-align: right;\n  padding-right: 25%;\n  z-index: 5;\n  position: relative; }\n\n.mt-element-step .step-background .mt-step-content {\n  text-align: right;\n  padding-right: 25%;\n  z-index: 5;\n  position: relative; }\n\n.mt-element-step .step-background .active {\n  background-color: #32c5d2 !important; }\n  .mt-element-step .step-background .active .mt-step-number {\n    color: #2ab4c0 !important; }\n  .mt-element-step .step-background .active .mt-step-title,\n  .mt-element-step .step-background .active .mt-step-content {\n    color: #fff !important; }\n\n.mt-element-step .step-background .done {\n  background-color: #26C281 !important; }\n  .mt-element-step .step-background .done .mt-step-number {\n    color: #22ad73 !important; }\n  .mt-element-step .step-background .done .mt-step-title,\n  .mt-element-step .step-background .done .mt-step-content {\n    color: #fff !important; }\n\n.mt-element-step .step-background .error {\n  background-color: #E7505A !important; }\n  .mt-element-step .step-background .error .mt-step-number {\n    color: #e43a45 !important; }\n  .mt-element-step .step-background .error .mt-step-title,\n  .mt-element-step .step-background .error .mt-step-content {\n    color: #fff !important; }\n\n.mt-element-step .step-background-thin .mt-step-col {\n  padding-top: 15px;\n  padding-bottom: 15px;\n  text-align: center; }\n\n.mt-element-step .step-background-thin .mt-step-number {\n  font-size: 120px;\n  position: absolute;\n  bottom: 0;\n  right: 0;\n  line-height: 0.79em;\n  color: #dae1e4;\n  z-index: 4; }\n\n.mt-element-step .step-background-thin .mt-step-title {\n  font-size: 30px;\n  font-weight: 100;\n  text-align: right;\n  padding-right: 25%;\n  z-index: 5;\n  position: relative; }\n\n.mt-element-step .step-background-thin .mt-step-content {\n  text-align: right;\n  position: relative;\n  padding-right: 25%;\n  z-index: 5; }\n\n.mt-element-step .step-background-thin .active {\n  background-color: #32c5d2 !important; }\n  .mt-element-step .step-background-thin .active .mt-step-number {\n    color: #2ab4c0 !important; }\n  .mt-element-step .step-background-thin .active .mt-step-title,\n  .mt-element-step .step-background-thin .active .mt-step-content {\n    color: #fff !important; }\n\n.mt-element-step .step-background-thin .done {\n  background-color: #26C281 !important; }\n  .mt-element-step .step-background-thin .done .mt-step-number {\n    color: #22ad73 !important; }\n  .mt-element-step .step-background-thin .done .mt-step-title,\n  .mt-element-step .step-background-thin .done .mt-step-content {\n    color: #fff !important; }\n\n.mt-element-step .step-background-thin .error {\n  background-color: #E7505A !important; }\n  .mt-element-step .step-background-thin .error .mt-step-number {\n    color: #e43a45 !important; }\n  .mt-element-step .step-background-thin .error .mt-step-title,\n  .mt-element-step .step-background-thin .error .mt-step-content {\n    color: #fff !important; }\n\n.mt-element-step .step-no-background .mt-step-col {\n  padding-top: 30px;\n  padding-bottom: 30px;\n  text-align: center; }\n\n.mt-element-step .step-no-background .mt-step-number {\n  font-size: 26px;\n  border-radius: 50% !important;\n  display: inline-block;\n  margin: auto;\n  padding: 3px 14px;\n  margin-bottom: 20px;\n  border: 1px solid;\n  border-color: #e5e5e5; }\n\n.mt-element-step .step-no-background .mt-step-title {\n  font-size: 30px;\n  font-weight: 100; }\n\n.mt-element-step .step-no-background .active .mt-step-number {\n  color: #32c5d2 !important;\n  border-color: #32c5d2 !important;\n  font-weight: 700; }\n\n.mt-element-step .step-no-background .active .mt-step-title,\n.mt-element-step .step-no-background .active .mt-step-content {\n  color: #32c5d2 !important;\n  font-weight: 700; }\n\n.mt-element-step .step-no-background .done .mt-step-number {\n  color: #26C281 !important;\n  border-color: #26C281 !important;\n  font-weight: 700; }\n\n.mt-element-step .step-no-background .done .mt-step-title,\n.mt-element-step .step-no-background .done .mt-step-content {\n  color: #26C281 !important;\n  font-weight: 700; }\n\n.mt-element-step .step-no-background .error .mt-step-number {\n  color: #E7505A !important;\n  border-color: #E7505A !important;\n  font-weight: 700; }\n\n.mt-element-step .step-no-background .error .mt-step-title,\n.mt-element-step .step-no-background .error .mt-step-content {\n  color: #E7505A !important;\n  font-weight: 700; }\n\n.mt-element-step .step-no-background-thin .mt-step-col {\n  padding-top: 10px;\n  padding-bottom: 10px; }\n\n.mt-element-step .step-no-background-thin .mt-step-number {\n  font-size: 26px;\n  border-radius: 50% !important;\n  float: left;\n  margin: auto;\n  padding: 3px 14px;\n  border: 1px solid;\n  border-color: #e5e5e5; }\n\n.mt-element-step .step-no-background-thin .mt-step-title {\n  font-size: 24px;\n  font-weight: 100;\n  padding-left: 60px;\n  margin-top: -4px; }\n\n.mt-element-step .step-no-background-thin .mt-step-content {\n  padding-left: 60px;\n  margin-top: -5px; }\n\n.mt-element-step .step-no-background-thin .active .mt-step-number {\n  color: #32c5d2 !important;\n  border-color: #32c5d2 !important;\n  font-weight: 700; }\n\n.mt-element-step .step-no-background-thin .active .mt-step-title,\n.mt-element-step .step-no-background-thin .active .mt-step-content {\n  color: #32c5d2 !important;\n  font-weight: 700; }\n\n.mt-element-step .step-no-background-thin .done .mt-step-number {\n  color: #26C281 !important;\n  border-color: #26C281 !important;\n  font-weight: 700; }\n\n.mt-element-step .step-no-background-thin .done .mt-step-title,\n.mt-element-step .step-no-background-thin .done .mt-step-content {\n  color: #26C281 !important;\n  font-weight: 700; }\n\n.mt-element-step .step-no-background-thin .error .mt-step-number {\n  color: #E7505A !important;\n  border-color: #E7505A !important;\n  font-weight: 700; }\n\n.mt-element-step .step-no-background-thin .error .mt-step-title,\n.mt-element-step .step-no-background-thin .error .mt-step-content {\n  color: #E7505A !important;\n  font-weight: 700; }\n\n.mt-element-step .step-line .mt-step-col {\n  padding: 30px 0;\n  text-align: center; }\n\n.mt-element-step .step-line .mt-step-number {\n  font-size: 26px;\n  border-radius: 50% !important;\n  display: inline-block;\n  margin: auto;\n  padding: 9px;\n  margin-bottom: 5px;\n  border: 3px solid;\n  border-color: #e5e5e5;\n  position: relative;\n  z-index: 5;\n  height: 60px;\n  width: 60px;\n  text-align: center; }\n  .mt-element-step .step-line .mt-step-number > i {\n    position: relative;\n    top: 50%;\n    transform: translateY(-120%); }\n\n.mt-element-step .step-line .mt-step-title {\n  font-size: 20px;\n  font-weight: 400;\n  position: relative; }\n  .mt-element-step .step-line .mt-step-title:after {\n    content: '';\n    height: 3px;\n    width: 50%;\n    position: absolute;\n    background-color: #e5e5e5;\n    top: -32px;\n    left: 50%;\n    z-index: 4;\n    transform: translateY(-100%); }\n  .mt-element-step .step-line .mt-step-title:before {\n    content: '';\n    height: 3px;\n    width: 50%;\n    position: absolute;\n    background-color: #e5e5e5;\n    top: -32px;\n    right: 50%;\n    z-index: 4;\n    transform: translateY(-100%); }\n\n.mt-element-step .step-line .first .mt-step-title:before {\n  content: none; }\n\n.mt-element-step .step-line .last .mt-step-title:after {\n  content: none; }\n\n.mt-element-step .step-line .active .mt-step-number {\n  color: #32c5d2 !important;\n  border-color: #32c5d2 !important; }\n\n.mt-element-step .step-line .active .mt-step-title,\n.mt-element-step .step-line .active .mt-step-content {\n  color: #32c5d2 !important; }\n\n.mt-element-step .step-line .active .mt-step-title:after, .mt-element-step .step-line .active .mt-step-title:before {\n  background-color: #32c5d2; }\n\n.mt-element-step .step-line .done .mt-step-number {\n  color: #26C281 !important;\n  border-color: #26C281 !important; }\n\n.mt-element-step .step-line .done .mt-step-title,\n.mt-element-step .step-line .done .mt-step-content {\n  color: #26C281 !important; }\n\n.mt-element-step .step-line .done .mt-step-title:after, .mt-element-step .step-line .done .mt-step-title:before {\n  background-color: #26C281; }\n\n.mt-element-step .step-line .error .mt-step-number {\n  color: #E7505A !important;\n  border-color: #E7505A !important; }\n\n.mt-element-step .step-line .error .mt-step-title,\n.mt-element-step .step-line .error .mt-step-content {\n  color: #E7505A !important; }\n\n.mt-element-step .step-line .error .mt-step-title:after, .mt-element-step .step-line .error .mt-step-title:before {\n  background-color: #E7505A; }\n\n@media (max-width: 991px) {\n  /* 991px */\n  .mt-element-step .step-line .mt-step-title:after {\n    content: none; }\n  .mt-element-step .step-line .mt-step-title:before {\n    content: none; } }\n\n.mt-element-list .list-default.mt-list-head {\n  background-position: center;\n  background-size: cover;\n  background-repeat: no-repeat;\n  padding: 15px; }\n  .mt-element-list .list-default.mt-list-head .list-title {\n    margin: 0 0 0.7em 0;\n    font-size: 18px; }\n  .mt-element-list .list-default.mt-list-head .list-date {\n    font-size: 12px; }\n  .mt-element-list .list-default.mt-list-head .list-pending {\n    margin-bottom: 10px; }\n  .mt-element-list .list-default.mt-list-head .list-count {\n    display: inline-block;\n    padding: 3px 7px; }\n    .mt-element-list .list-default.mt-list-head .list-count.last {\n      margin-bottom: 0; }\n  .mt-element-list .list-default.mt-list-head .list-label {\n    display: inline-block;\n    font-size: 12px; }\n\n.mt-element-list .list-default.mt-list-container {\n  border-left: 1px solid;\n  border-right: 1px solid;\n  border-bottom: 1px solid;\n  border-color: #e7ecf1;\n  padding: 15px; }\n  .mt-element-list .list-default.mt-list-container .mt-list-title {\n    padding-bottom: 15px;\n    font-size: 14px;\n    font-weight: 700; }\n  .mt-element-list .list-default.mt-list-container ul {\n    margin-bottom: 0;\n    padding: 0; }\n    .mt-element-list .list-default.mt-list-container ul > .mt-list-item {\n      list-style: none;\n      border-bottom: 1px solid;\n      border-color: #e7ecf1;\n      padding: 25px 0;\n      min-height: 45px; }\n      .mt-element-list .list-default.mt-list-container ul > .mt-list-item:first-child {\n        padding-top: 0; }\n      .mt-element-list .list-default.mt-list-container ul > .mt-list-item:last-child {\n        padding-bottom: 0;\n        border: none; }\n      .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-icon-container {\n        border: 1px solid;\n        border-color: #e7ecf1;\n        border-radius: 50% !important;\n        padding: 0.9em;\n        float: left;\n        width: 45px;\n        height: 45px; }\n        .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-icon-container > a {\n          color: #34495e; }\n          .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-icon-container > a:hover {\n            color: #26C281;\n            text-decoration: none; }\n        .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-icon-container.done {\n          border-color: #26C281; }\n          .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-icon-container.done > a {\n            color: #26C281; }\n            .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-icon-container.done > a:hover {\n              color: #26C281;\n              text-decoration: none; }\n      .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-item-content {\n        padding: 0 75px 0 60px; }\n        .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-item-content > h3 {\n          margin-top: 0;\n          margin-bottom: 5px;\n          font-size: 16px; }\n          .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a {\n            color: #34495e; }\n            .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a:hover {\n              color: #26C281;\n              text-decoration: none; }\n        .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-item-content > p {\n          margin: 0; }\n      .mt-element-list .list-default.mt-list-container ul > .mt-list-item > .list-datetime {\n        text-align: right;\n        float: right;\n        width: 60px; }\n\n.mt-element-list .list-default.ext-1.mt-list-container {\n  padding: 15px 0 0 0; }\n  .mt-element-list .list-default.ext-1.mt-list-container .mt-list-title {\n    padding: 0 15px 15px 15px; }\n  .mt-element-list .list-default.ext-1.mt-list-container ul > .mt-list-item {\n    padding: 15px;\n    border-left: 3px solid;\n    border-color: #2F353B;\n    border-bottom-color: #e7ecf1; }\n    .mt-element-list .list-default.ext-1.mt-list-container ul > .mt-list-item:hover {\n      background-color: #e5e5e5; }\n    .mt-element-list .list-default.ext-1.mt-list-container ul > .mt-list-item.done {\n      border-color: #26C281;\n      border-bottom-color: #e7ecf1; }\n      .mt-element-list .list-default.ext-1.mt-list-container ul > .mt-list-item.done:hover {\n        background-color: #96ebc8; }\n    .mt-element-list .list-default.ext-1.mt-list-container ul > .mt-list-item > .list-icon-container {\n      border: none; }\n\n.mt-element-list .list-default.group .list-toggle-container:hover, .mt-element-list .list-default.group .list-toggle-container:focus, .mt-element-list .list-default.group .list-toggle-container:active {\n  text-decoration: none; }\n\n.mt-element-list .list-default.group .list-toggle-container .list-toggle {\n  padding: 15px;\n  background-color: #2F353B;\n  font-weight: 700;\n  color: #fff;\n  text-decoration: none; }\n  .mt-element-list .list-default.group .list-toggle-container .list-toggle.done {\n    background-color: #26C281; }\n\n.mt-element-list .list-simple.mt-list-head {\n  padding: 15px; }\n  .mt-element-list .list-simple.mt-list-head .list-title {\n    margin: 0;\n    padding-right: 85px; }\n  .mt-element-list .list-simple.mt-list-head .list-date {\n    font-size: 12px;\n    opacity: 0.8;\n    float: right;\n    width: 75px; }\n\n.mt-element-list .list-simple.mt-list-container {\n  border-left: 1px solid;\n  border-right: 1px solid;\n  border-bottom: 1px solid;\n  border-color: #e7ecf1;\n  padding: 15px; }\n  .mt-element-list .list-simple.mt-list-container ul {\n    margin-bottom: 0;\n    padding: 0; }\n    .mt-element-list .list-simple.mt-list-container ul > .mt-list-item {\n      list-style: none;\n      border-bottom: 1px solid;\n      border-color: #e7ecf1;\n      padding: 15px 0; }\n      .mt-element-list .list-simple.mt-list-container ul > .mt-list-item:first-child {\n        padding-top: 0; }\n      .mt-element-list .list-simple.mt-list-container ul > .mt-list-item:last-child {\n        padding-bottom: 0;\n        border: none; }\n      .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-icon-container {\n        font-size: 14px;\n        float: left; }\n        .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-icon-container > a {\n          color: #34495e; }\n          .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-icon-container > a:hover {\n            color: #26C281;\n            text-decoration: none; }\n        .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-icon-container.done {\n          color: #26C281; }\n          .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-icon-container.done > a {\n            color: #26C281; }\n            .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-icon-container.done > a:hover {\n              color: #26C281;\n              text-decoration: none; }\n      .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-item-content {\n        padding: 0 75px 0 60px; }\n        .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-item-content > h3 {\n          margin: 0;\n          font-size: 18px; }\n          .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a {\n            color: #34495e; }\n            .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a:hover {\n              color: #26C281;\n              text-decoration: none; }\n      .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-datetime {\n        text-align: right;\n        float: right;\n        width: 60px; }\n\n.mt-element-list .list-simple.mt-list-head {\n  padding: 15px; }\n  .mt-element-list .list-simple.mt-list-head .list-title {\n    margin: 0;\n    padding-right: 85px; }\n  .mt-element-list .list-simple.mt-list-head .list-date {\n    font-size: 12px;\n    opacity: 0.8;\n    float: right;\n    width: 75px; }\n\n.mt-element-list .list-simple.ext-1.mt-list-container {\n  padding: 0; }\n  .mt-element-list .list-simple.ext-1.mt-list-container ul > .mt-list-item {\n    padding: 15px;\n    border-left: 3px solid;\n    border-color: #34495e;\n    border-bottom-color: #e7ecf1; }\n    .mt-element-list .list-simple.ext-1.mt-list-container ul > .mt-list-item:hover {\n      background-color: #e5e5e5; }\n    .mt-element-list .list-simple.ext-1.mt-list-container ul > .mt-list-item.done {\n      border-color: #26C281;\n      border-bottom-color: #e7ecf1; }\n      .mt-element-list .list-simple.ext-1.mt-list-container ul > .mt-list-item.done:hover {\n        background-color: #96ebc8; }\n\n.mt-element-list .list-simple.group .list-toggle-container:hover, .mt-element-list .list-simple.group .list-toggle-container:focus, .mt-element-list .list-simple.group .list-toggle-container:active {\n  text-decoration: none; }\n\n.mt-element-list .list-simple.group .list-toggle-container .list-toggle {\n  padding: 15px;\n  background-color: #34495e;\n  font-weight: 700;\n  color: #fff;\n  text-decoration: none; }\n  .mt-element-list .list-simple.group .list-toggle-container .list-toggle.done {\n    background-color: #26C281; }\n\n.mt-element-list .list-news.mt-list-head {\n  padding: 15px;\n  text-align: center; }\n  .mt-element-list .list-news.mt-list-head .list-title {\n    margin: 0; }\n  .mt-element-list .list-news.mt-list-head .badge {\n    margin-top: 5px; }\n\n.mt-element-list .list-news.mt-list-container {\n  border-left: 1px solid;\n  border-right: 1px solid;\n  border-bottom: 1px solid;\n  border-color: #e7ecf1;\n  padding: 15px 0; }\n  .mt-element-list .list-news.mt-list-container ul {\n    margin-bottom: 0;\n    padding: 0; }\n    .mt-element-list .list-news.mt-list-container ul > .mt-list-item {\n      list-style: none;\n      border-bottom: 1px solid;\n      border-color: #e7ecf1;\n      padding: 15px;\n      position: relative; }\n      .mt-element-list .list-news.mt-list-container ul > .mt-list-item:first-child {\n        padding-top: 0; }\n      .mt-element-list .list-news.mt-list-container ul > .mt-list-item:last-child {\n        padding-bottom: 0;\n        border: none; }\n      .mt-element-list .list-news.mt-list-container ul > .mt-list-item > .list-icon-container {\n        font-size: 20px;\n        position: absolute;\n        right: 5px;\n        top: 50%;\n        margin-top: -10px; }\n        .mt-element-list .list-news.mt-list-container ul > .mt-list-item > .list-icon-container a {\n          color: #2f353b; }\n          .mt-element-list .list-news.mt-list-container ul > .mt-list-item > .list-icon-container a:hover {\n            color: #32c5d2; }\n      .mt-element-list .list-news.mt-list-container ul > .mt-list-item > .list-item-content {\n        padding: 0 25px 0 0; }\n        .mt-element-list .list-news.mt-list-container ul > .mt-list-item > .list-item-content > h3 {\n          margin: 0;\n          font-size: 18px;\n          margin-bottom: 10px; }\n          .mt-element-list .list-news.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a {\n            color: #34495e; }\n            .mt-element-list .list-news.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a:hover {\n              color: #32c5d2;\n              text-decoration: none; }\n      .mt-element-list .list-news.mt-list-container ul > .mt-list-item > .list-datetime {\n        margin-bottom: 10px; }\n\n.mt-element-list .list-news.ext-1.mt-list-head {\n  position: relative;\n  text-align: left; }\n  .mt-element-list .list-news.ext-1.mt-list-head .list-count {\n    position: absolute;\n    right: 0;\n    top: 0;\n    height: 100%;\n    padding: 19px; }\n\n.mt-element-list .list-news.ext-1 .list-thumb {\n  width: 80px;\n  height: 80px;\n  overflow: hidden;\n  float: left; }\n  .mt-element-list .list-news.ext-1 .list-thumb img {\n    width: 100%; }\n\n.mt-element-list .list-news.ext-1.mt-list-container {\n  padding: 0; }\n  .mt-element-list .list-news.ext-1.mt-list-container ul > .mt-list-item {\n    padding: 15px; }\n    .mt-element-list .list-news.ext-1.mt-list-container ul > .mt-list-item > .list-datetime {\n      padding-left: 90px; }\n    .mt-element-list .list-news.ext-1.mt-list-container ul > .mt-list-item > .list-item-content {\n      padding-left: 90px; }\n    .mt-element-list .list-news.ext-1.mt-list-container ul > .mt-list-item:hover {\n      background-color: #e5e5e5; }\n    .mt-element-list .list-news.ext-1.mt-list-container ul > .mt-list-item:last-child {\n      padding-bottom: 15px; }\n\n.mt-element-list .list-news.ext-2.mt-list-head {\n  position: relative;\n  text-align: left; }\n  .mt-element-list .list-news.ext-2.mt-list-head .list-count {\n    position: absolute;\n    right: 0;\n    top: 0;\n    height: 100%;\n    padding: 19px; }\n\n.mt-element-list .list-news.ext-2 .list-thumb {\n  width: 80px;\n  height: 80px;\n  overflow: hidden;\n  float: left; }\n  .mt-element-list .list-news.ext-2 .list-thumb img {\n    width: 100%; }\n\n.mt-element-list .list-news.ext-2.mt-list-container {\n  padding: 0; }\n  .mt-element-list .list-news.ext-2.mt-list-container ul > .mt-list-item {\n    padding: 15px; }\n    .mt-element-list .list-news.ext-2.mt-list-container ul > .mt-list-item > .list-datetime {\n      padding-left: 90px; }\n    .mt-element-list .list-news.ext-2.mt-list-container ul > .mt-list-item > .list-item-content {\n      padding-left: 90px; }\n      .mt-element-list .list-news.ext-2.mt-list-container ul > .mt-list-item > .list-item-content > h3 {\n        font-size: 16px; }\n        .mt-element-list .list-news.ext-2.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a:hover {\n          color: #F2784B; }\n    .mt-element-list .list-news.ext-2.mt-list-container ul > .mt-list-item:hover {\n      background-color: #e5e5e5; }\n    .mt-element-list .list-news.ext-2.mt-list-container ul > .mt-list-item:last-child {\n      padding-bottom: 15px; }\n\n.mt-element-list .list-todo.mt-list-head {\n  padding: 15px;\n  position: relative; }\n  .mt-element-list .list-todo.mt-list-head .list-title {\n    margin: 0; }\n  .mt-element-list .list-todo.mt-list-head .list-head-count {\n    margin-top: 5px; }\n    .mt-element-list .list-todo.mt-list-head .list-head-count > .list-head-count-item {\n      display: inline-block;\n      margin-right: 15px; }\n  .mt-element-list .list-todo.mt-list-head .list-count {\n    position: absolute;\n    top: 0;\n    right: 0;\n    padding: 29px;\n    font-size: 16px; }\n  .mt-element-list .list-todo.mt-list-head a {\n    color: #fff; }\n    .mt-element-list .list-todo.mt-list-head a:hover {\n      text-decoration: none; }\n\n.mt-element-list .list-todo.mt-list-container {\n  border-left: 1px solid;\n  border-right: 1px solid;\n  border-bottom: 1px solid;\n  border-color: #e7ecf1;\n  position: relative; }\n  .mt-element-list .list-todo.mt-list-container .list-todo-line {\n    position: absolute;\n    z-index: 1;\n    height: 100%;\n    width: 1px;\n    top: 0;\n    left: 25px;\n    border-left: 1px solid;\n    border-color: #e7ecf1; }\n  .mt-element-list .list-todo.mt-list-container ul {\n    margin-bottom: 0;\n    padding: 0;\n    position: relative;\n    z-index: 5; }\n    .mt-element-list .list-todo.mt-list-container ul > .mt-list-item {\n      list-style: none;\n      border-bottom: 1px solid;\n      border-bottom-style: dashed;\n      border-color: #e7ecf1;\n      padding: 15px;\n      position: relative; }\n      .mt-element-list .list-todo.mt-list-container ul > .mt-list-item:last-child {\n        border: none; }\n      .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-icon {\n        display: inline-block;\n        margin-top: 0.7em;\n        padding: 0.7em 0;\n        vertical-align: top; }\n      .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item {\n        margin-left: 15px;\n        display: inline-block;\n        vertical-align: top;\n        width: 90%;\n        position: relative; }\n        .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item:after {\n          right: 100%;\n          top: 50%;\n          border: solid transparent;\n          content: \" \";\n          height: 0;\n          width: 0;\n          position: absolute;\n          pointer-events: none;\n          border-color: rgba(47, 53, 59, 0);\n          border-right-color: #2f353b;\n          border-width: 8px;\n          top: 18px; }\n        .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item > .list-toggle-container:hover, .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item > .list-toggle-container:focus, .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item > .list-toggle-container:active {\n          text-decoration: none; }\n        .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item > .list-toggle-container .list-toggle {\n          padding: 15px; }\n          .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item > .list-toggle-container .list-toggle > .list-toggle-title {\n            display: inline-block; }\n        .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list {\n          border: 1px solid;\n          border-color: #e7ecf1;\n          padding: 0;\n          margin: 0;\n          position: relative;\n          border-top: none;\n          border-bottom: none; }\n          .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item {\n            list-style: none;\n            padding: 15px;\n            border-bottom: 1px solid;\n            border-color: #e7ecf1; }\n            .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item a {\n              color: #2f353b; }\n              .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item a:hover {\n                text-decoration: none;\n                color: #e43a45; }\n            .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item:last-child {\n              border-bottom: none; }\n            .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item > .task-icon {\n              float: left; }\n            .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item > .task-content {\n              padding: 0 45px 0 35px; }\n              .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item > .task-content > h4 {\n                margin-top: 0;\n                font-size: 14px; }\n              .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item > .task-content > p {\n                font-size: 13px;\n                margin: 0; }\n            .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item > .task-status {\n              float: right; }\n              .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item > .task-status a {\n                color: #e5e5e5; }\n              .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item > .task-status .done:hover {\n                color: #26C281; }\n              .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item > .task-status .pending:hover {\n                color: #e43a45; }\n            .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-list-item.done > .task-status .done {\n              color: #26C281; }\n          .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-footer {\n            padding: 15px;\n            text-align: center; }\n            .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-footer a {\n              color: #2f353b; }\n              .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-footer a:hover {\n                text-decoration: none; }\n              .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-footer a.task-trash:hover {\n                color: #e43a45; }\n              .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-todo-item .task-list .task-footer a.task-add:hover {\n                color: #26C281; }\n      .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-icon-container {\n        font-size: 20px;\n        position: absolute;\n        right: 5px;\n        top: 50%;\n        margin-top: -10px; }\n        .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-icon-container a {\n          color: #2f353b; }\n          .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-icon-container a:hover {\n            color: #32c5d2; }\n      .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-item-content {\n        padding: 0 25px 0 0; }\n        .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-item-content > h3 {\n          margin: 0;\n          font-size: 18px;\n          margin-bottom: 10px; }\n          .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a {\n            color: #34495e; }\n            .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-item-content > h3 > a:hover {\n              color: #32c5d2;\n              text-decoration: none; }\n      .mt-element-list .list-todo.mt-list-container ul > .mt-list-item > .list-datetime {\n        margin-bottom: 10px; }\n\n.mt-element-list .list-default.mt-list-head.white {\n  background-color: #ffffff;\n  color: #666; }\n  .mt-element-list .list-default.mt-list-head.white .badge {\n    background-color: white;\n    color: #666; }\n  .mt-element-list .list-default.mt-list-head.white.ext-1 .badge {\n    background-color: #e6e6e6; }\n  .mt-element-list .list-default.mt-list-head.white .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.white .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.white {\n  background-color: #ffffff;\n  color: #666; }\n\n.mt-element-list .list-todo .list-count.white {\n  background-color: #ffffff;\n  color: #666; }\n  .mt-element-list .list-todo .list-count.white:hover {\n    background-color: #f2f2f2; }\n\n.mt-element-list .list-todo .list-todo-line.white {\n  border-color: #ffffff; }\n\n.mt-element-list .list-todo .list-todo-item.white:after {\n  border-right-color: #ffffff !important; }\n\n.mt-element-list .list-todo .list-todo-item.white .list-toggle {\n  background: #ffffff;\n  color: #666 !important; }\n  .mt-element-list .list-todo .list-todo-item.white .list-toggle > .badge {\n    color: #ffffff;\n    background: #666; }\n\n.mt-element-list .list-default.mt-list-head.default {\n  background-color: #e1e5ec;\n  color: #666; }\n  .mt-element-list .list-default.mt-list-head.default .badge {\n    background-color: white;\n    color: #666; }\n  .mt-element-list .list-default.mt-list-head.default.ext-1 .badge {\n    background-color: #c2cad8; }\n  .mt-element-list .list-default.mt-list-head.default .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.default .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.default {\n  background-color: #e1e5ec;\n  color: #666; }\n\n.mt-element-list .list-todo .list-count.default {\n  background-color: #e1e5ec;\n  color: #666; }\n  .mt-element-list .list-todo .list-count.default:hover {\n    background-color: #d1d7e2; }\n\n.mt-element-list .list-todo .list-todo-line.default {\n  border-color: #e1e5ec; }\n\n.mt-element-list .list-todo .list-todo-item.default:after {\n  border-right-color: #e1e5ec !important; }\n\n.mt-element-list .list-todo .list-todo-item.default .list-toggle {\n  background: #e1e5ec;\n  color: #666 !important; }\n  .mt-element-list .list-todo .list-todo-item.default .list-toggle > .badge {\n    color: #e1e5ec;\n    background: #666; }\n\n.mt-element-list .list-default.mt-list-head.dark {\n  background-color: #2f353b;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.dark .badge {\n    background-color: #464f57;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.dark.ext-1 .badge {\n    background-color: #181c1f; }\n  .mt-element-list .list-default.mt-list-head.dark .list-label {\n    color: #acb5bd; }\n  .mt-element-list .list-default.mt-list-head.dark .list-date {\n    color: #acb5bd; }\n\n.mt-element-list .list-todo.mt-list-head.dark {\n  background-color: #2f353b;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.dark {\n  background-color: #2f353b;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.dark:hover {\n    background-color: #24282d; }\n\n.mt-element-list .list-todo .list-todo-line.dark {\n  border-color: #2f353b; }\n\n.mt-element-list .list-todo .list-todo-item.dark:after {\n  border-right-color: #2f353b !important; }\n\n.mt-element-list .list-todo .list-todo-item.dark .list-toggle {\n  background: #2f353b;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.dark .list-toggle > .badge {\n    color: #2f353b;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.blue {\n  background-color: #3598dc;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue .badge {\n    background-color: #60aee4;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue.ext-1 .badge {\n    background-color: #217ebd; }\n  .mt-element-list .list-default.mt-list-head.blue .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.blue .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.blue {\n  background-color: #3598dc;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.blue {\n  background-color: #3598dc;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.blue:hover {\n    background-color: #258cd3; }\n\n.mt-element-list .list-todo .list-todo-line.blue {\n  border-color: #3598dc; }\n\n.mt-element-list .list-todo .list-todo-item.blue:after {\n  border-right-color: #3598dc !important; }\n\n.mt-element-list .list-todo .list-todo-item.blue .list-toggle {\n  background: #3598dc;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.blue .list-toggle > .badge {\n    color: #3598dc;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.blue-madison {\n  background-color: #578ebe;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue-madison .badge {\n    background-color: #7ca7cc;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue-madison.ext-1 .badge {\n    background-color: #3f74a3; }\n  .mt-element-list .list-default.mt-list-head.blue-madison .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.blue-madison .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.blue-madison {\n  background-color: #578ebe;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.blue-madison {\n  background-color: #578ebe;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.blue-madison:hover {\n    background-color: #4682b5; }\n\n.mt-element-list .list-todo .list-todo-line.blue-madison {\n  border-color: #578ebe; }\n\n.mt-element-list .list-todo .list-todo-item.blue-madison:after {\n  border-right-color: #578ebe !important; }\n\n.mt-element-list .list-todo .list-todo-item.blue-madison .list-toggle {\n  background: #578ebe;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.blue-madison .list-toggle > .badge {\n    color: #578ebe;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.blue-chambray {\n  background-color: #2C3E50;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue-chambray .badge {\n    background-color: #3e5871;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue-chambray.ext-1 .badge {\n    background-color: #1a252f; }\n  .mt-element-list .list-default.mt-list-head.blue-chambray .list-label {\n    color: #aabed1; }\n  .mt-element-list .list-default.mt-list-head.blue-chambray .list-date {\n    color: #aabed1; }\n\n.mt-element-list .list-todo.mt-list-head.blue-chambray {\n  background-color: #2C3E50;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.blue-chambray {\n  background-color: #2C3E50;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.blue-chambray:hover {\n    background-color: #233140; }\n\n.mt-element-list .list-todo .list-todo-line.blue-chambray {\n  border-color: #2C3E50; }\n\n.mt-element-list .list-todo .list-todo-item.blue-chambray:after {\n  border-right-color: #2C3E50 !important; }\n\n.mt-element-list .list-todo .list-todo-item.blue-chambray .list-toggle {\n  background: #2C3E50;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.blue-chambray .list-toggle > .badge {\n    color: #2C3E50;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.blue-ebonyclay {\n  background-color: #22313F;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue-ebonyclay .badge {\n    background-color: #344b60;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue-ebonyclay.ext-1 .badge {\n    background-color: #10171e; }\n  .mt-element-list .list-default.mt-list-head.blue-ebonyclay .list-label {\n    color: #98b1c8; }\n  .mt-element-list .list-default.mt-list-head.blue-ebonyclay .list-date {\n    color: #98b1c8; }\n\n.mt-element-list .list-todo.mt-list-head.blue-ebonyclay {\n  background-color: #22313F;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.blue-ebonyclay {\n  background-color: #22313F;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.blue-ebonyclay:hover {\n    background-color: #19242e; }\n\n.mt-element-list .list-todo .list-todo-line.blue-ebonyclay {\n  border-color: #22313F; }\n\n.mt-element-list .list-todo .list-todo-item.blue-ebonyclay:after {\n  border-right-color: #22313F !important; }\n\n.mt-element-list .list-todo .list-todo-item.blue-ebonyclay .list-toggle {\n  background: #22313F;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.blue-ebonyclay .list-toggle > .badge {\n    color: #22313F;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.blue-hoki {\n  background-color: #67809F;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue-hoki .badge {\n    background-color: #869ab3;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue-hoki.ext-1 .badge {\n    background-color: #526781; }\n  .mt-element-list .list-default.mt-list-head.blue-hoki .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.blue-hoki .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.blue-hoki {\n  background-color: #67809F;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.blue-hoki {\n  background-color: #67809F;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.blue-hoki:hover {\n    background-color: #5c7391; }\n\n.mt-element-list .list-todo .list-todo-line.blue-hoki {\n  border-color: #67809F; }\n\n.mt-element-list .list-todo .list-todo-item.blue-hoki:after {\n  border-right-color: #67809F !important; }\n\n.mt-element-list .list-todo .list-todo-item.blue-hoki .list-toggle {\n  background: #67809F;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.blue-hoki .list-toggle > .badge {\n    color: #67809F;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.blue-steel {\n  background-color: #4B77BE;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue-steel .badge {\n    background-color: #7093cc;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue-steel.ext-1 .badge {\n    background-color: #395f9d; }\n  .mt-element-list .list-default.mt-list-head.blue-steel .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.blue-steel .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.blue-steel {\n  background-color: #4B77BE;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.blue-steel {\n  background-color: #4B77BE;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.blue-steel:hover {\n    background-color: #406bb0; }\n\n.mt-element-list .list-todo .list-todo-line.blue-steel {\n  border-color: #4B77BE; }\n\n.mt-element-list .list-todo .list-todo-item.blue-steel:after {\n  border-right-color: #4B77BE !important; }\n\n.mt-element-list .list-todo .list-todo-item.blue-steel .list-toggle {\n  background: #4B77BE;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.blue-steel .list-toggle > .badge {\n    color: #4B77BE;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.blue-soft {\n  background-color: #4c87b9;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue-soft .badge {\n    background-color: #71a0c7;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue-soft.ext-1 .badge {\n    background-color: #3b6d97; }\n  .mt-element-list .list-default.mt-list-head.blue-soft .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.blue-soft .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.blue-soft {\n  background-color: #4c87b9;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.blue-soft {\n  background-color: #4c87b9;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.blue-soft:hover {\n    background-color: #427aa9; }\n\n.mt-element-list .list-todo .list-todo-line.blue-soft {\n  border-color: #4c87b9; }\n\n.mt-element-list .list-todo .list-todo-item.blue-soft:after {\n  border-right-color: #4c87b9 !important; }\n\n.mt-element-list .list-todo .list-todo-item.blue-soft .list-toggle {\n  background: #4c87b9;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.blue-soft .list-toggle > .badge {\n    color: #4c87b9;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.blue-dark {\n  background-color: #5e738b;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue-dark .badge {\n    background-color: #788da4;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue-dark.ext-1 .badge {\n    background-color: #495a6d; }\n  .mt-element-list .list-default.mt-list-head.blue-dark .list-label {\n    color: #f2f4f6; }\n  .mt-element-list .list-default.mt-list-head.blue-dark .list-date {\n    color: #f2f4f6; }\n\n.mt-element-list .list-todo.mt-list-head.blue-dark {\n  background-color: #5e738b;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.blue-dark {\n  background-color: #5e738b;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.blue-dark:hover {\n    background-color: #54667c; }\n\n.mt-element-list .list-todo .list-todo-line.blue-dark {\n  border-color: #5e738b; }\n\n.mt-element-list .list-todo .list-todo-item.blue-dark:after {\n  border-right-color: #5e738b !important; }\n\n.mt-element-list .list-todo .list-todo-item.blue-dark .list-toggle {\n  background: #5e738b;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.blue-dark .list-toggle > .badge {\n    color: #5e738b;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.blue-sharp {\n  background-color: #5C9BD1;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue-sharp .badge {\n    background-color: #84b3dc;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.blue-sharp.ext-1 .badge {\n    background-color: #3782c3; }\n  .mt-element-list .list-default.mt-list-head.blue-sharp .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.blue-sharp .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.blue-sharp {\n  background-color: #5C9BD1;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.blue-sharp {\n  background-color: #5C9BD1;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.blue-sharp:hover {\n    background-color: #488fcb; }\n\n.mt-element-list .list-todo .list-todo-line.blue-sharp {\n  border-color: #5C9BD1; }\n\n.mt-element-list .list-todo .list-todo-item.blue-sharp:after {\n  border-right-color: #5C9BD1 !important; }\n\n.mt-element-list .list-todo .list-todo-item.blue-sharp .list-toggle {\n  background: #5C9BD1;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.blue-sharp .list-toggle > .badge {\n    color: #5C9BD1;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.green {\n  background-color: #32c5d2;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green .badge {\n    background-color: #5cd1db;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green.ext-1 .badge {\n    background-color: #26a1ab; }\n  .mt-element-list .list-default.mt-list-head.green .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.green .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.green {\n  background-color: #32c5d2;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.green {\n  background-color: #32c5d2;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.green:hover {\n    background-color: #2ab4c0; }\n\n.mt-element-list .list-todo .list-todo-line.green {\n  border-color: #32c5d2; }\n\n.mt-element-list .list-todo .list-todo-item.green:after {\n  border-right-color: #32c5d2 !important; }\n\n.mt-element-list .list-todo .list-todo-item.green .list-toggle {\n  background: #32c5d2;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.green .list-toggle > .badge {\n    color: #32c5d2;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.green-meadow {\n  background-color: #1BBC9B;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green-meadow .badge {\n    background-color: #2ae0bb;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green-meadow.ext-1 .badge {\n    background-color: #158f76; }\n  .mt-element-list .list-default.mt-list-head.green-meadow .list-label {\n    color: #dcfaf4; }\n  .mt-element-list .list-default.mt-list-head.green-meadow .list-date {\n    color: #dcfaf4; }\n\n.mt-element-list .list-todo.mt-list-head.green-meadow {\n  background-color: #1BBC9B;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.green-meadow {\n  background-color: #1BBC9B;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.green-meadow:hover {\n    background-color: #18a689; }\n\n.mt-element-list .list-todo .list-todo-line.green-meadow {\n  border-color: #1BBC9B; }\n\n.mt-element-list .list-todo .list-todo-item.green-meadow:after {\n  border-right-color: #1BBC9B !important; }\n\n.mt-element-list .list-todo .list-todo-item.green-meadow .list-toggle {\n  background: #1BBC9B;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.green-meadow .list-toggle > .badge {\n    color: #1BBC9B;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.green-seagreen {\n  background-color: #1BA39C;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green-seagreen .badge {\n    background-color: #22cfc6;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green-seagreen.ext-1 .badge {\n    background-color: #147772; }\n  .mt-element-list .list-default.mt-list-head.green-seagreen .list-label {\n    color: #c7f6f3; }\n  .mt-element-list .list-default.mt-list-head.green-seagreen .list-date {\n    color: #c7f6f3; }\n\n.mt-element-list .list-todo.mt-list-head.green-seagreen {\n  background-color: #1BA39C;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.green-seagreen {\n  background-color: #1BA39C;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.green-seagreen:hover {\n    background-color: #178d87; }\n\n.mt-element-list .list-todo .list-todo-line.green-seagreen {\n  border-color: #1BA39C; }\n\n.mt-element-list .list-todo .list-todo-item.green-seagreen:after {\n  border-right-color: #1BA39C !important; }\n\n.mt-element-list .list-todo .list-todo-item.green-seagreen .list-toggle {\n  background: #1BA39C;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.green-seagreen .list-toggle > .badge {\n    color: #1BA39C;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.green-turquoise {\n  background-color: #36D7B7;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green-turquoise .badge {\n    background-color: #61dfc6;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green-turquoise.ext-1 .badge {\n    background-color: #24b699; }\n  .mt-element-list .list-default.mt-list-head.green-turquoise .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.green-turquoise .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.green-turquoise {\n  background-color: #36D7B7;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.green-turquoise {\n  background-color: #36D7B7;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.green-turquoise:hover {\n    background-color: #28cbab; }\n\n.mt-element-list .list-todo .list-todo-line.green-turquoise {\n  border-color: #36D7B7; }\n\n.mt-element-list .list-todo .list-todo-item.green-turquoise:after {\n  border-right-color: #36D7B7 !important; }\n\n.mt-element-list .list-todo .list-todo-item.green-turquoise .list-toggle {\n  background: #36D7B7;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.green-turquoise .list-toggle > .badge {\n    color: #36D7B7;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.green-haze {\n  background-color: #44b6ae;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green-haze .badge {\n    background-color: #67c6bf;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green-haze.ext-1 .badge {\n    background-color: #36918b; }\n  .mt-element-list .list-default.mt-list-head.green-haze .list-label {\n    color: #fbfefd; }\n  .mt-element-list .list-default.mt-list-head.green-haze .list-date {\n    color: #fbfefd; }\n\n.mt-element-list .list-todo.mt-list-head.green-haze {\n  background-color: #44b6ae;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.green-haze {\n  background-color: #44b6ae;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.green-haze:hover {\n    background-color: #3da39c; }\n\n.mt-element-list .list-todo .list-todo-line.green-haze {\n  border-color: #44b6ae; }\n\n.mt-element-list .list-todo .list-todo-item.green-haze:after {\n  border-right-color: #44b6ae !important; }\n\n.mt-element-list .list-todo .list-todo-item.green-haze .list-toggle {\n  background: #44b6ae;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.green-haze .list-toggle > .badge {\n    color: #44b6ae;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.green-jungle {\n  background-color: #26C281;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green-jungle .badge {\n    background-color: #41da9a;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green-jungle.ext-1 .badge {\n    background-color: #1e9765; }\n  .mt-element-list .list-default.mt-list-head.green-jungle .list-label {\n    color: #ecfbf5; }\n  .mt-element-list .list-default.mt-list-head.green-jungle .list-date {\n    color: #ecfbf5; }\n\n.mt-element-list .list-todo.mt-list-head.green-jungle {\n  background-color: #26C281;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.green-jungle {\n  background-color: #26C281;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.green-jungle:hover {\n    background-color: #22ad73; }\n\n.mt-element-list .list-todo .list-todo-line.green-jungle {\n  border-color: #26C281; }\n\n.mt-element-list .list-todo .list-todo-item.green-jungle:after {\n  border-right-color: #26C281 !important; }\n\n.mt-element-list .list-todo .list-todo-item.green-jungle .list-toggle {\n  background: #26C281;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.green-jungle .list-toggle > .badge {\n    color: #26C281;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.green-soft {\n  background-color: #3faba4;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green-soft .badge {\n    background-color: #5bc2bc;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green-soft.ext-1 .badge {\n    background-color: #318680; }\n  .mt-element-list .list-default.mt-list-head.green-soft .list-label {\n    color: #f0f9f9; }\n  .mt-element-list .list-default.mt-list-head.green-soft .list-date {\n    color: #f0f9f9; }\n\n.mt-element-list .list-todo.mt-list-head.green-soft {\n  background-color: #3faba4;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.green-soft {\n  background-color: #3faba4;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.green-soft:hover {\n    background-color: #389892; }\n\n.mt-element-list .list-todo .list-todo-line.green-soft {\n  border-color: #3faba4; }\n\n.mt-element-list .list-todo .list-todo-item.green-soft:after {\n  border-right-color: #3faba4 !important; }\n\n.mt-element-list .list-todo .list-todo-item.green-soft .list-toggle {\n  background: #3faba4;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.green-soft .list-toggle > .badge {\n    color: #3faba4;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.green-dark {\n  background-color: #4DB3A2;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green-dark .badge {\n    background-color: #71c2b5;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green-dark.ext-1 .badge {\n    background-color: #3d9082; }\n  .mt-element-list .list-default.mt-list-head.green-dark .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.green-dark .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.green-dark {\n  background-color: #4DB3A2;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.green-dark {\n  background-color: #4DB3A2;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.green-dark:hover {\n    background-color: #45a292; }\n\n.mt-element-list .list-todo .list-todo-line.green-dark {\n  border-color: #4DB3A2; }\n\n.mt-element-list .list-todo .list-todo-item.green-dark:after {\n  border-right-color: #4DB3A2 !important; }\n\n.mt-element-list .list-todo .list-todo-item.green-dark .list-toggle {\n  background: #4DB3A2;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.green-dark .list-toggle > .badge {\n    color: #4DB3A2;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.green-sharp {\n  background-color: #2ab4c0;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green-sharp .badge {\n    background-color: #46cbd7;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.green-sharp.ext-1 .badge {\n    background-color: #218d96; }\n  .mt-element-list .list-default.mt-list-head.green-sharp .list-label {\n    color: #eefafb; }\n  .mt-element-list .list-default.mt-list-head.green-sharp .list-date {\n    color: #eefafb; }\n\n.mt-element-list .list-todo.mt-list-head.green-sharp {\n  background-color: #2ab4c0;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.green-sharp {\n  background-color: #2ab4c0;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.green-sharp:hover {\n    background-color: #25a0ab; }\n\n.mt-element-list .list-todo .list-todo-line.green-sharp {\n  border-color: #2ab4c0; }\n\n.mt-element-list .list-todo .list-todo-item.green-sharp:after {\n  border-right-color: #2ab4c0 !important; }\n\n.mt-element-list .list-todo .list-todo-item.green-sharp .list-toggle {\n  background: #2ab4c0;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.green-sharp .list-toggle > .badge {\n    color: #2ab4c0;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.grey {\n  background-color: #E5E5E5;\n  color: #333333; }\n  .mt-element-list .list-default.mt-list-head.grey .badge {\n    background-color: white;\n    color: #333333; }\n  .mt-element-list .list-default.mt-list-head.grey.ext-1 .badge {\n    background-color: #cccccc; }\n  .mt-element-list .list-default.mt-list-head.grey .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.grey .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.grey {\n  background-color: #E5E5E5;\n  color: #333333; }\n\n.mt-element-list .list-todo .list-count.grey {\n  background-color: #E5E5E5;\n  color: #333333; }\n  .mt-element-list .list-todo .list-count.grey:hover {\n    background-color: #d8d8d8; }\n\n.mt-element-list .list-todo .list-todo-line.grey {\n  border-color: #E5E5E5; }\n\n.mt-element-list .list-todo .list-todo-item.grey:after {\n  border-right-color: #E5E5E5 !important; }\n\n.mt-element-list .list-todo .list-todo-item.grey .list-toggle {\n  background: #E5E5E5;\n  color: #333333 !important; }\n  .mt-element-list .list-todo .list-todo-item.grey .list-toggle > .badge {\n    color: #E5E5E5;\n    background: #333333; }\n\n.mt-element-list .list-default.mt-list-head.grey-steel {\n  background-color: #e9edef;\n  color: #80898e; }\n  .mt-element-list .list-default.mt-list-head.grey-steel .badge {\n    background-color: white;\n    color: #80898e; }\n  .mt-element-list .list-default.mt-list-head.grey-steel.ext-1 .badge {\n    background-color: #cbd5da; }\n  .mt-element-list .list-default.mt-list-head.grey-steel .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.grey-steel .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.grey-steel {\n  background-color: #e9edef;\n  color: #80898e; }\n\n.mt-element-list .list-todo .list-count.grey-steel {\n  background-color: #e9edef;\n  color: #80898e; }\n  .mt-element-list .list-todo .list-count.grey-steel:hover {\n    background-color: #dae1e4; }\n\n.mt-element-list .list-todo .list-todo-line.grey-steel {\n  border-color: #e9edef; }\n\n.mt-element-list .list-todo .list-todo-item.grey-steel:after {\n  border-right-color: #e9edef !important; }\n\n.mt-element-list .list-todo .list-todo-item.grey-steel .list-toggle {\n  background: #e9edef;\n  color: #80898e !important; }\n  .mt-element-list .list-todo .list-todo-item.grey-steel .list-toggle > .badge {\n    color: #e9edef;\n    background: #80898e; }\n\n.mt-element-list .list-default.mt-list-head.grey-cararra {\n  background-color: #fafafa;\n  color: #333333; }\n  .mt-element-list .list-default.mt-list-head.grey-cararra .badge {\n    background-color: white;\n    color: #333333; }\n  .mt-element-list .list-default.mt-list-head.grey-cararra.ext-1 .badge {\n    background-color: #e1e1e1; }\n  .mt-element-list .list-default.mt-list-head.grey-cararra .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.grey-cararra .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.grey-cararra {\n  background-color: #fafafa;\n  color: #333333; }\n\n.mt-element-list .list-todo .list-count.grey-cararra {\n  background-color: #fafafa;\n  color: #333333; }\n  .mt-element-list .list-todo .list-count.grey-cararra:hover {\n    background-color: #ededed; }\n\n.mt-element-list .list-todo .list-todo-line.grey-cararra {\n  border-color: #fafafa; }\n\n.mt-element-list .list-todo .list-todo-item.grey-cararra:after {\n  border-right-color: #fafafa !important; }\n\n.mt-element-list .list-todo .list-todo-item.grey-cararra .list-toggle {\n  background: #fafafa;\n  color: #333333 !important; }\n  .mt-element-list .list-todo .list-todo-item.grey-cararra .list-toggle > .badge {\n    color: #fafafa;\n    background: #333333; }\n\n.mt-element-list .list-default.mt-list-head.grey-gallery {\n  background-color: #555555;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.grey-gallery .badge {\n    background-color: #6f6f6f;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.grey-gallery.ext-1 .badge {\n    background-color: #3c3c3c; }\n  .mt-element-list .list-default.mt-list-head.grey-gallery .list-label {\n    color: #d5d5d5; }\n  .mt-element-list .list-default.mt-list-head.grey-gallery .list-date {\n    color: #d5d5d5; }\n\n.mt-element-list .list-todo.mt-list-head.grey-gallery {\n  background-color: #555555;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.grey-gallery {\n  background-color: #555555;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.grey-gallery:hover {\n    background-color: #484848; }\n\n.mt-element-list .list-todo .list-todo-line.grey-gallery {\n  border-color: #555555; }\n\n.mt-element-list .list-todo .list-todo-item.grey-gallery:after {\n  border-right-color: #555555 !important; }\n\n.mt-element-list .list-todo .list-todo-item.grey-gallery .list-toggle {\n  background: #555555;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.grey-gallery .list-toggle > .badge {\n    color: #555555;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.grey-cascade {\n  background-color: #95A5A6;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.grey-cascade .badge {\n    background-color: #b1bdbd;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.grey-cascade.ext-1 .badge {\n    background-color: #798d8f; }\n  .mt-element-list .list-default.mt-list-head.grey-cascade .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.grey-cascade .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.grey-cascade {\n  background-color: #95A5A6;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.grey-cascade {\n  background-color: #95A5A6;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.grey-cascade:hover {\n    background-color: #87999a; }\n\n.mt-element-list .list-todo .list-todo-line.grey-cascade {\n  border-color: #95A5A6; }\n\n.mt-element-list .list-todo .list-todo-item.grey-cascade:after {\n  border-right-color: #95A5A6 !important; }\n\n.mt-element-list .list-todo .list-todo-item.grey-cascade .list-toggle {\n  background: #95A5A6;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.grey-cascade .list-toggle > .badge {\n    color: #95A5A6;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.grey-silver {\n  background-color: #BFBFBF;\n  color: #FAFCFB; }\n  .mt-element-list .list-default.mt-list-head.grey-silver .badge {\n    background-color: #d9d9d9;\n    color: #FAFCFB; }\n  .mt-element-list .list-default.mt-list-head.grey-silver.ext-1 .badge {\n    background-color: #a6a6a6; }\n  .mt-element-list .list-default.mt-list-head.grey-silver .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.grey-silver .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.grey-silver {\n  background-color: #BFBFBF;\n  color: #FAFCFB; }\n\n.mt-element-list .list-todo .list-count.grey-silver {\n  background-color: #BFBFBF;\n  color: #FAFCFB; }\n  .mt-element-list .list-todo .list-count.grey-silver:hover {\n    background-color: #b2b2b2; }\n\n.mt-element-list .list-todo .list-todo-line.grey-silver {\n  border-color: #BFBFBF; }\n\n.mt-element-list .list-todo .list-todo-item.grey-silver:after {\n  border-right-color: #BFBFBF !important; }\n\n.mt-element-list .list-todo .list-todo-item.grey-silver .list-toggle {\n  background: #BFBFBF;\n  color: #FAFCFB !important; }\n  .mt-element-list .list-todo .list-todo-item.grey-silver .list-toggle > .badge {\n    color: #BFBFBF;\n    background: #FAFCFB; }\n\n.mt-element-list .list-default.mt-list-head.grey-salsa {\n  background-color: #ACB5C3;\n  color: #FAFCFB; }\n  .mt-element-list .list-default.mt-list-head.grey-salsa .badge {\n    background-color: #cacfd8;\n    color: #FAFCFB; }\n  .mt-element-list .list-default.mt-list-head.grey-salsa.ext-1 .badge {\n    background-color: #8e9bae; }\n  .mt-element-list .list-default.mt-list-head.grey-salsa .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.grey-salsa .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.grey-salsa {\n  background-color: #ACB5C3;\n  color: #FAFCFB; }\n\n.mt-element-list .list-todo .list-count.grey-salsa {\n  background-color: #ACB5C3;\n  color: #FAFCFB; }\n  .mt-element-list .list-todo .list-count.grey-salsa:hover {\n    background-color: #9da8b8; }\n\n.mt-element-list .list-todo .list-todo-line.grey-salsa {\n  border-color: #ACB5C3; }\n\n.mt-element-list .list-todo .list-todo-item.grey-salsa:after {\n  border-right-color: #ACB5C3 !important; }\n\n.mt-element-list .list-todo .list-todo-item.grey-salsa .list-toggle {\n  background: #ACB5C3;\n  color: #FAFCFB !important; }\n  .mt-element-list .list-todo .list-todo-item.grey-salsa .list-toggle > .badge {\n    color: #ACB5C3;\n    background: #FAFCFB; }\n\n.mt-element-list .list-default.mt-list-head.grey-salt {\n  background-color: #bfcad1;\n  color: #FAFCFB; }\n  .mt-element-list .list-default.mt-list-head.grey-salt .badge {\n    background-color: #dde3e6;\n    color: #FAFCFB; }\n  .mt-element-list .list-default.mt-list-head.grey-salt.ext-1 .badge {\n    background-color: #a1b1bc; }\n  .mt-element-list .list-default.mt-list-head.grey-salt .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.grey-salt .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.grey-salt {\n  background-color: #bfcad1;\n  color: #FAFCFB; }\n\n.mt-element-list .list-todo .list-count.grey-salt {\n  background-color: #bfcad1;\n  color: #FAFCFB; }\n  .mt-element-list .list-todo .list-count.grey-salt:hover {\n    background-color: #b0bec6; }\n\n.mt-element-list .list-todo .list-todo-line.grey-salt {\n  border-color: #bfcad1; }\n\n.mt-element-list .list-todo .list-todo-item.grey-salt:after {\n  border-right-color: #bfcad1 !important; }\n\n.mt-element-list .list-todo .list-todo-item.grey-salt .list-toggle {\n  background: #bfcad1;\n  color: #FAFCFB !important; }\n  .mt-element-list .list-todo .list-todo-item.grey-salt .list-toggle > .badge {\n    color: #bfcad1;\n    background: #FAFCFB; }\n\n.mt-element-list .list-default.mt-list-head.grey-mint {\n  background-color: #525e64;\n  color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.grey-mint .badge {\n    background-color: #697880;\n    color: #FFFFFF; }\n  .mt-element-list .list-default.mt-list-head.grey-mint.ext-1 .badge {\n    background-color: #3b4448; }\n  .mt-element-list .list-default.mt-list-head.grey-mint .list-label {\n    color: #d7dcde; }\n  .mt-element-list .list-default.mt-list-head.grey-mint .list-date {\n    color: #d7dcde; }\n\n.mt-element-list .list-todo.mt-list-head.grey-mint {\n  background-color: #525e64;\n  color: #FFFFFF; }\n\n.mt-element-list .list-todo .list-count.grey-mint {\n  background-color: #525e64;\n  color: #FFFFFF; }\n  .mt-element-list .list-todo .list-count.grey-mint:hover {\n    background-color: #475156; }\n\n.mt-element-list .list-todo .list-todo-line.grey-mint {\n  border-color: #525e64; }\n\n.mt-element-list .list-todo .list-todo-item.grey-mint:after {\n  border-right-color: #525e64 !important; }\n\n.mt-element-list .list-todo .list-todo-item.grey-mint .list-toggle {\n  background: #525e64;\n  color: #FFFFFF !important; }\n  .mt-element-list .list-todo .list-todo-item.grey-mint .list-toggle > .badge {\n    color: #525e64;\n    background: #FFFFFF; }\n\n.mt-element-list .list-default.mt-list-head.red {\n  background-color: #e7505a;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red .badge {\n    background-color: #ed7d84;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red.ext-1 .badge {\n    background-color: #e12330; }\n  .mt-element-list .list-default.mt-list-head.red .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.red .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.red {\n  background-color: #e7505a;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.red {\n  background-color: #e7505a;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.red:hover {\n    background-color: #e43a45; }\n\n.mt-element-list .list-todo .list-todo-line.red {\n  border-color: #e7505a; }\n\n.mt-element-list .list-todo .list-todo-item.red:after {\n  border-right-color: #e7505a !important; }\n\n.mt-element-list .list-todo .list-todo-item.red .list-toggle {\n  background: #e7505a;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.red .list-toggle > .badge {\n    color: #e7505a;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.red-pink {\n  background-color: #E08283;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red-pink .badge {\n    background-color: #eaabac;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red-pink.ext-1 .badge {\n    background-color: #d6595a; }\n  .mt-element-list .list-default.mt-list-head.red-pink .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.red-pink .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.red-pink {\n  background-color: #E08283;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.red-pink {\n  background-color: #E08283;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.red-pink:hover {\n    background-color: #db6e6f; }\n\n.mt-element-list .list-todo .list-todo-line.red-pink {\n  border-color: #E08283; }\n\n.mt-element-list .list-todo .list-todo-item.red-pink:after {\n  border-right-color: #E08283 !important; }\n\n.mt-element-list .list-todo .list-todo-item.red-pink .list-toggle {\n  background: #E08283;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.red-pink .list-toggle > .badge {\n    color: #E08283;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.red-sunglo {\n  background-color: #E26A6A;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red-sunglo .badge {\n    background-color: #ea9595;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red-sunglo.ext-1 .badge {\n    background-color: #da3f3f; }\n  .mt-element-list .list-default.mt-list-head.red-sunglo .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.red-sunglo .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.red-sunglo {\n  background-color: #E26A6A;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.red-sunglo {\n  background-color: #E26A6A;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.red-sunglo:hover {\n    background-color: #de5555; }\n\n.mt-element-list .list-todo .list-todo-line.red-sunglo {\n  border-color: #E26A6A; }\n\n.mt-element-list .list-todo .list-todo-item.red-sunglo:after {\n  border-right-color: #E26A6A !important; }\n\n.mt-element-list .list-todo .list-todo-item.red-sunglo .list-toggle {\n  background: #E26A6A;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.red-sunglo .list-toggle > .badge {\n    color: #E26A6A;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.red-intense {\n  background-color: #e35b5a;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red-intense .badge {\n    background-color: #ea8686;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red-intense.ext-1 .badge {\n    background-color: #dc302e; }\n  .mt-element-list .list-default.mt-list-head.red-intense .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.red-intense .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.red-intense {\n  background-color: #e35b5a;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.red-intense {\n  background-color: #e35b5a;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.red-intense:hover {\n    background-color: #df4544; }\n\n.mt-element-list .list-todo .list-todo-line.red-intense {\n  border-color: #e35b5a; }\n\n.mt-element-list .list-todo .list-todo-item.red-intense:after {\n  border-right-color: #e35b5a !important; }\n\n.mt-element-list .list-todo .list-todo-item.red-intense .list-toggle {\n  background: #e35b5a;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.red-intense .list-toggle > .badge {\n    color: #e35b5a;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.red-thunderbird {\n  background-color: #D91E18;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red-thunderbird .badge {\n    background-color: #e9403b;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red-thunderbird.ext-1 .badge {\n    background-color: #ab1813; }\n  .mt-element-list .list-default.mt-list-head.red-thunderbird .list-label {\n    color: #fef3f2; }\n  .mt-element-list .list-default.mt-list-head.red-thunderbird .list-date {\n    color: #fef3f2; }\n\n.mt-element-list .list-todo.mt-list-head.red-thunderbird {\n  background-color: #D91E18;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.red-thunderbird {\n  background-color: #D91E18;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.red-thunderbird:hover {\n    background-color: #c21b15; }\n\n.mt-element-list .list-todo .list-todo-line.red-thunderbird {\n  border-color: #D91E18; }\n\n.mt-element-list .list-todo .list-todo-item.red-thunderbird:after {\n  border-right-color: #D91E18 !important; }\n\n.mt-element-list .list-todo .list-todo-item.red-thunderbird .list-toggle {\n  background: #D91E18;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.red-thunderbird .list-toggle > .badge {\n    color: #D91E18;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.red-flamingo {\n  background-color: #EF4836;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red-flamingo .badge {\n    background-color: #f37365;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red-flamingo.ext-1 .badge {\n    background-color: #e02612; }\n  .mt-element-list .list-default.mt-list-head.red-flamingo .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.red-flamingo .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.red-flamingo {\n  background-color: #EF4836;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.red-flamingo {\n  background-color: #EF4836;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.red-flamingo:hover {\n    background-color: #ed321e; }\n\n.mt-element-list .list-todo .list-todo-line.red-flamingo {\n  border-color: #EF4836; }\n\n.mt-element-list .list-todo .list-todo-item.red-flamingo:after {\n  border-right-color: #EF4836 !important; }\n\n.mt-element-list .list-todo .list-todo-item.red-flamingo .list-toggle {\n  background: #EF4836;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.red-flamingo .list-toggle > .badge {\n    color: #EF4836;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.red-soft {\n  background-color: #d05454;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red-soft .badge {\n    background-color: #db7c7c;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red-soft.ext-1 .badge {\n    background-color: #bd3434; }\n  .mt-element-list .list-default.mt-list-head.red-soft .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.red-soft .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.red-soft {\n  background-color: #d05454;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.red-soft {\n  background-color: #d05454;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.red-soft:hover {\n    background-color: #cb4040; }\n\n.mt-element-list .list-todo .list-todo-line.red-soft {\n  border-color: #d05454; }\n\n.mt-element-list .list-todo .list-todo-item.red-soft:after {\n  border-right-color: #d05454 !important; }\n\n.mt-element-list .list-todo .list-todo-item.red-soft .list-toggle {\n  background: #d05454;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.red-soft .list-toggle > .badge {\n    color: #d05454;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.red-haze {\n  background-color: #f36a5a;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red-haze .badge {\n    background-color: #f6958a;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red-haze.ext-1 .badge {\n    background-color: #f03f2a; }\n  .mt-element-list .list-default.mt-list-head.red-haze .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.red-haze .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.red-haze {\n  background-color: #f36a5a;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.red-haze {\n  background-color: #f36a5a;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.red-haze:hover {\n    background-color: #f15542; }\n\n.mt-element-list .list-todo .list-todo-line.red-haze {\n  border-color: #f36a5a; }\n\n.mt-element-list .list-todo .list-todo-item.red-haze:after {\n  border-right-color: #f36a5a !important; }\n\n.mt-element-list .list-todo .list-todo-item.red-haze .list-toggle {\n  background: #f36a5a;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.red-haze .list-toggle > .badge {\n    color: #f36a5a;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.red-mint {\n  background-color: #e43a45;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red-mint .badge {\n    background-color: #ea676f;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.red-mint.ext-1 .badge {\n    background-color: #cf1c28; }\n  .mt-element-list .list-default.mt-list-head.red-mint .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.red-mint .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.red-mint {\n  background-color: #e43a45;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.red-mint {\n  background-color: #e43a45;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.red-mint:hover {\n    background-color: #e12430; }\n\n.mt-element-list .list-todo .list-todo-line.red-mint {\n  border-color: #e43a45; }\n\n.mt-element-list .list-todo .list-todo-item.red-mint:after {\n  border-right-color: #e43a45 !important; }\n\n.mt-element-list .list-todo .list-todo-item.red-mint .list-toggle {\n  background: #e43a45;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.red-mint .list-toggle > .badge {\n    color: #e43a45;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.yellow {\n  background-color: #c49f47;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow .badge {\n    background-color: #d0b36e;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow.ext-1 .badge {\n    background-color: #a48334; }\n  .mt-element-list .list-default.mt-list-head.yellow .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.yellow .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.yellow {\n  background-color: #c49f47;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.yellow {\n  background-color: #c49f47;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.yellow:hover {\n    background-color: #b7923b; }\n\n.mt-element-list .list-todo .list-todo-line.yellow {\n  border-color: #c49f47; }\n\n.mt-element-list .list-todo .list-todo-item.yellow:after {\n  border-right-color: #c49f47 !important; }\n\n.mt-element-list .list-todo .list-todo-item.yellow .list-toggle {\n  background: #c49f47;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.yellow .list-toggle > .badge {\n    color: #c49f47;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.yellow-gold {\n  background-color: #E87E04;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow-gold .badge {\n    background-color: #fb9724;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow-gold.ext-1 .badge {\n    background-color: #b66303; }\n  .mt-element-list .list-default.mt-list-head.yellow-gold .list-label {\n    color: #fff6ec; }\n  .mt-element-list .list-default.mt-list-head.yellow-gold .list-date {\n    color: #fff6ec; }\n\n.mt-element-list .list-todo.mt-list-head.yellow-gold {\n  background-color: #E87E04;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.yellow-gold {\n  background-color: #E87E04;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.yellow-gold:hover {\n    background-color: #cf7004; }\n\n.mt-element-list .list-todo .list-todo-line.yellow-gold {\n  border-color: #E87E04; }\n\n.mt-element-list .list-todo .list-todo-item.yellow-gold:after {\n  border-right-color: #E87E04 !important; }\n\n.mt-element-list .list-todo .list-todo-item.yellow-gold .list-toggle {\n  background: #E87E04;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.yellow-gold .list-toggle > .badge {\n    color: #E87E04;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.yellow-casablanca {\n  background-color: #f2784b;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow-casablanca .badge {\n    background-color: #f59c7b;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow-casablanca.ext-1 .badge {\n    background-color: #ef541b; }\n  .mt-element-list .list-default.mt-list-head.yellow-casablanca .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.yellow-casablanca .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.yellow-casablanca {\n  background-color: #f2784b;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.yellow-casablanca {\n  background-color: #f2784b;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.yellow-casablanca:hover {\n    background-color: #f06633; }\n\n.mt-element-list .list-todo .list-todo-line.yellow-casablanca {\n  border-color: #f2784b; }\n\n.mt-element-list .list-todo .list-todo-item.yellow-casablanca:after {\n  border-right-color: #f2784b !important; }\n\n.mt-element-list .list-todo .list-todo-item.yellow-casablanca .list-toggle {\n  background: #f2784b;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.yellow-casablanca .list-toggle > .badge {\n    color: #f2784b;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.yellow-crusta {\n  background-color: #f3c200;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow-crusta .badge {\n    background-color: #ffd327;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow-crusta.ext-1 .badge {\n    background-color: #c09900; }\n  .mt-element-list .list-default.mt-list-head.yellow-crusta .list-label {\n    color: #fffdf3; }\n  .mt-element-list .list-default.mt-list-head.yellow-crusta .list-date {\n    color: #fffdf3; }\n\n.mt-element-list .list-todo.mt-list-head.yellow-crusta {\n  background-color: #f3c200;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.yellow-crusta {\n  background-color: #f3c200;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.yellow-crusta:hover {\n    background-color: #daae00; }\n\n.mt-element-list .list-todo .list-todo-line.yellow-crusta {\n  border-color: #f3c200; }\n\n.mt-element-list .list-todo .list-todo-item.yellow-crusta:after {\n  border-right-color: #f3c200 !important; }\n\n.mt-element-list .list-todo .list-todo-item.yellow-crusta .list-toggle {\n  background: #f3c200;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.yellow-crusta .list-toggle > .badge {\n    color: #f3c200;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.yellow-lemon {\n  background-color: #F7CA18;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow-lemon .badge {\n    background-color: #f9d549;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow-lemon.ext-1 .badge {\n    background-color: #d5ab07; }\n  .mt-element-list .list-default.mt-list-head.yellow-lemon .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.yellow-lemon .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.yellow-lemon {\n  background-color: #F7CA18;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.yellow-lemon {\n  background-color: #F7CA18;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.yellow-lemon:hover {\n    background-color: #edbf08; }\n\n.mt-element-list .list-todo .list-todo-line.yellow-lemon {\n  border-color: #F7CA18; }\n\n.mt-element-list .list-todo .list-todo-item.yellow-lemon:after {\n  border-right-color: #F7CA18 !important; }\n\n.mt-element-list .list-todo .list-todo-item.yellow-lemon .list-toggle {\n  background: #F7CA18;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.yellow-lemon .list-toggle > .badge {\n    color: #F7CA18;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.yellow-saffron {\n  background-color: #F4D03F;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow-saffron .badge {\n    background-color: #f7dc6f;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow-saffron.ext-1 .badge {\n    background-color: #f1c40f; }\n  .mt-element-list .list-default.mt-list-head.yellow-saffron .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.yellow-saffron .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.yellow-saffron {\n  background-color: #F4D03F;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.yellow-saffron {\n  background-color: #F4D03F;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.yellow-saffron:hover {\n    background-color: #f3ca27; }\n\n.mt-element-list .list-todo .list-todo-line.yellow-saffron {\n  border-color: #F4D03F; }\n\n.mt-element-list .list-todo .list-todo-item.yellow-saffron:after {\n  border-right-color: #F4D03F !important; }\n\n.mt-element-list .list-todo .list-todo-item.yellow-saffron .list-toggle {\n  background: #F4D03F;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.yellow-saffron .list-toggle > .badge {\n    color: #F4D03F;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.yellow-soft {\n  background-color: #c8d046;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow-soft .badge {\n    background-color: #d4da6f;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow-soft.ext-1 .badge {\n    background-color: #adb52e; }\n  .mt-element-list .list-default.mt-list-head.yellow-soft .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.yellow-soft .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.yellow-soft {\n  background-color: #c8d046;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.yellow-soft {\n  background-color: #c8d046;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.yellow-soft:hover {\n    background-color: #c1c933; }\n\n.mt-element-list .list-todo .list-todo-line.yellow-soft {\n  border-color: #c8d046; }\n\n.mt-element-list .list-todo .list-todo-item.yellow-soft:after {\n  border-right-color: #c8d046 !important; }\n\n.mt-element-list .list-todo .list-todo-item.yellow-soft .list-toggle {\n  background: #c8d046;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.yellow-soft .list-toggle > .badge {\n    color: #c8d046;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.yellow-haze {\n  background-color: #c5bf66;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow-haze .badge {\n    background-color: #d3ce8b;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow-haze.ext-1 .badge {\n    background-color: #b4ad44; }\n  .mt-element-list .list-default.mt-list-head.yellow-haze .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.yellow-haze .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.yellow-haze {\n  background-color: #c5bf66;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.yellow-haze {\n  background-color: #c5bf66;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.yellow-haze:hover {\n    background-color: #beb754; }\n\n.mt-element-list .list-todo .list-todo-line.yellow-haze {\n  border-color: #c5bf66; }\n\n.mt-element-list .list-todo .list-todo-item.yellow-haze:after {\n  border-right-color: #c5bf66 !important; }\n\n.mt-element-list .list-todo .list-todo-item.yellow-haze .list-toggle {\n  background: #c5bf66;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.yellow-haze .list-toggle > .badge {\n    color: #c5bf66;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.yellow-mint {\n  background-color: #c5b96b;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow-mint .badge {\n    background-color: #d3ca90;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.yellow-mint.ext-1 .badge {\n    background-color: #b6a747; }\n  .mt-element-list .list-default.mt-list-head.yellow-mint .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.yellow-mint .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.yellow-mint {\n  background-color: #c5b96b;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.yellow-mint {\n  background-color: #c5b96b;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.yellow-mint:hover {\n    background-color: #beb059; }\n\n.mt-element-list .list-todo .list-todo-line.yellow-mint {\n  border-color: #c5b96b; }\n\n.mt-element-list .list-todo .list-todo-item.yellow-mint:after {\n  border-right-color: #c5b96b !important; }\n\n.mt-element-list .list-todo .list-todo-item.yellow-mint .list-toggle {\n  background: #c5b96b;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.yellow-mint .list-toggle > .badge {\n    color: #c5b96b;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.purple {\n  background-color: #8E44AD;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple .badge {\n    background-color: #a563c1;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple.ext-1 .badge {\n    background-color: #703688; }\n  .mt-element-list .list-default.mt-list-head.purple .list-label {\n    color: #f9f5fb; }\n  .mt-element-list .list-default.mt-list-head.purple .list-date {\n    color: #f9f5fb; }\n\n.mt-element-list .list-todo.mt-list-head.purple {\n  background-color: #8E44AD;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.purple {\n  background-color: #8E44AD;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.purple:hover {\n    background-color: #7f3d9b; }\n\n.mt-element-list .list-todo .list-todo-line.purple {\n  border-color: #8E44AD; }\n\n.mt-element-list .list-todo .list-todo-item.purple:after {\n  border-right-color: #8E44AD !important; }\n\n.mt-element-list .list-todo .list-todo-item.purple .list-toggle {\n  background: #8E44AD;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.purple .list-toggle > .badge {\n    color: #8E44AD;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.purple-plum {\n  background-color: #8775a7;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple-plum .badge {\n    background-color: #a294bb;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple-plum.ext-1 .badge {\n    background-color: #6d5b8e; }\n  .mt-element-list .list-default.mt-list-head.purple-plum .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.purple-plum .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.purple-plum {\n  background-color: #8775a7;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.purple-plum {\n  background-color: #8775a7;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.purple-plum:hover {\n    background-color: #79659d; }\n\n.mt-element-list .list-todo .list-todo-line.purple-plum {\n  border-color: #8775a7; }\n\n.mt-element-list .list-todo .list-todo-item.purple-plum:after {\n  border-right-color: #8775a7 !important; }\n\n.mt-element-list .list-todo .list-todo-item.purple-plum .list-toggle {\n  background: #8775a7;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.purple-plum .list-toggle > .badge {\n    color: #8775a7;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.purple-medium {\n  background-color: #BF55EC;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple-medium .badge {\n    background-color: #d083f1;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple-medium.ext-1 .badge {\n    background-color: #ae27e7; }\n  .mt-element-list .list-default.mt-list-head.purple-medium .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.purple-medium .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.purple-medium {\n  background-color: #BF55EC;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.purple-medium {\n  background-color: #BF55EC;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.purple-medium:hover {\n    background-color: #b63ee9; }\n\n.mt-element-list .list-todo .list-todo-line.purple-medium {\n  border-color: #BF55EC; }\n\n.mt-element-list .list-todo .list-todo-item.purple-medium:after {\n  border-right-color: #BF55EC !important; }\n\n.mt-element-list .list-todo .list-todo-item.purple-medium .list-toggle {\n  background: #BF55EC;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.purple-medium .list-toggle > .badge {\n    color: #BF55EC;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.purple-studio {\n  background-color: #8E44AD;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple-studio .badge {\n    background-color: #a563c1;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple-studio.ext-1 .badge {\n    background-color: #703688; }\n  .mt-element-list .list-default.mt-list-head.purple-studio .list-label {\n    color: #f9f5fb; }\n  .mt-element-list .list-default.mt-list-head.purple-studio .list-date {\n    color: #f9f5fb; }\n\n.mt-element-list .list-todo.mt-list-head.purple-studio {\n  background-color: #8E44AD;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.purple-studio {\n  background-color: #8E44AD;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.purple-studio:hover {\n    background-color: #7f3d9b; }\n\n.mt-element-list .list-todo .list-todo-line.purple-studio {\n  border-color: #8E44AD; }\n\n.mt-element-list .list-todo .list-todo-item.purple-studio:after {\n  border-right-color: #8E44AD !important; }\n\n.mt-element-list .list-todo .list-todo-item.purple-studio .list-toggle {\n  background: #8E44AD;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.purple-studio .list-toggle > .badge {\n    color: #8E44AD;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.purple-wisteria {\n  background-color: #9B59B6;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple-wisteria .badge {\n    background-color: #b07cc6;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple-wisteria.ext-1 .badge {\n    background-color: #804399; }\n  .mt-element-list .list-default.mt-list-head.purple-wisteria .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.purple-wisteria .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.purple-wisteria {\n  background-color: #9B59B6;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.purple-wisteria {\n  background-color: #9B59B6;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.purple-wisteria:hover {\n    background-color: #8f4bab; }\n\n.mt-element-list .list-todo .list-todo-line.purple-wisteria {\n  border-color: #9B59B6; }\n\n.mt-element-list .list-todo .list-todo-item.purple-wisteria:after {\n  border-right-color: #9B59B6 !important; }\n\n.mt-element-list .list-todo .list-todo-item.purple-wisteria .list-toggle {\n  background: #9B59B6;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.purple-wisteria .list-toggle > .badge {\n    color: #9B59B6;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.purple-seance {\n  background-color: #9A12B3;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple-seance .badge {\n    background-color: #c217e1;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple-seance.ext-1 .badge {\n    background-color: #720d85; }\n  .mt-element-list .list-default.mt-list-head.purple-seance .list-label {\n    color: #f2cafa; }\n  .mt-element-list .list-default.mt-list-head.purple-seance .list-date {\n    color: #f2cafa; }\n\n.mt-element-list .list-todo.mt-list-head.purple-seance {\n  background-color: #9A12B3;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.purple-seance {\n  background-color: #9A12B3;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.purple-seance:hover {\n    background-color: #86109c; }\n\n.mt-element-list .list-todo .list-todo-line.purple-seance {\n  border-color: #9A12B3; }\n\n.mt-element-list .list-todo .list-todo-item.purple-seance:after {\n  border-right-color: #9A12B3 !important; }\n\n.mt-element-list .list-todo .list-todo-item.purple-seance .list-toggle {\n  background: #9A12B3;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.purple-seance .list-toggle > .badge {\n    color: #9A12B3;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.purple-intense {\n  background-color: #8775a7;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple-intense .badge {\n    background-color: #a294bb;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple-intense.ext-1 .badge {\n    background-color: #6d5b8e; }\n  .mt-element-list .list-default.mt-list-head.purple-intense .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.purple-intense .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.purple-intense {\n  background-color: #8775a7;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.purple-intense {\n  background-color: #8775a7;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.purple-intense:hover {\n    background-color: #79659d; }\n\n.mt-element-list .list-todo .list-todo-line.purple-intense {\n  border-color: #8775a7; }\n\n.mt-element-list .list-todo .list-todo-item.purple-intense:after {\n  border-right-color: #8775a7 !important; }\n\n.mt-element-list .list-todo .list-todo-item.purple-intense .list-toggle {\n  background: #8775a7;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.purple-intense .list-toggle > .badge {\n    color: #8775a7;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.purple-sharp {\n  background-color: #796799;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple-sharp .badge {\n    background-color: #9486ad;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple-sharp.ext-1 .badge {\n    background-color: #61527b; }\n  .mt-element-list .list-default.mt-list-head.purple-sharp .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.purple-sharp .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.purple-sharp {\n  background-color: #796799;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.purple-sharp {\n  background-color: #796799;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.purple-sharp:hover {\n    background-color: #6d5d8a; }\n\n.mt-element-list .list-todo .list-todo-line.purple-sharp {\n  border-color: #796799; }\n\n.mt-element-list .list-todo .list-todo-item.purple-sharp:after {\n  border-right-color: #796799 !important; }\n\n.mt-element-list .list-todo .list-todo-item.purple-sharp .list-toggle {\n  background: #796799;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.purple-sharp .list-toggle > .badge {\n    color: #796799;\n    background: #ffffff; }\n\n.mt-element-list .list-default.mt-list-head.purple-soft {\n  background-color: #8877a9;\n  color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple-soft .badge {\n    background-color: #a396bd;\n    color: #ffffff; }\n  .mt-element-list .list-default.mt-list-head.purple-soft.ext-1 .badge {\n    background-color: #6e5c91; }\n  .mt-element-list .list-default.mt-list-head.purple-soft .list-label {\n    color: white; }\n  .mt-element-list .list-default.mt-list-head.purple-soft .list-date {\n    color: white; }\n\n.mt-element-list .list-todo.mt-list-head.purple-soft {\n  background-color: #8877a9;\n  color: #ffffff; }\n\n.mt-element-list .list-todo .list-count.purple-soft {\n  background-color: #8877a9;\n  color: #ffffff; }\n  .mt-element-list .list-todo .list-count.purple-soft:hover {\n    background-color: #7a679f; }\n\n.mt-element-list .list-todo .list-todo-line.purple-soft {\n  border-color: #8877a9; }\n\n.mt-element-list .list-todo .list-todo-item.purple-soft:after {\n  border-right-color: #8877a9 !important; }\n\n.mt-element-list .list-todo .list-todo-item.purple-soft .list-toggle {\n  background: #8877a9;\n  color: #ffffff !important; }\n  .mt-element-list .list-todo .list-todo-item.purple-soft .list-toggle > .badge {\n    color: #8877a9;\n    background: #ffffff; }\n\n.mt-element-list .list-todo-item.white:after {\n  border-right-color: #ffffff; }\n\n.mt-element-list .list-todo-item.white .list-toggle {\n  background: #ffffff; }\n\n.mt-element-list .list-todo-item.default:after {\n  border-right-color: #e1e5ec; }\n\n.mt-element-list .list-todo-item.default .list-toggle {\n  background: #e1e5ec; }\n\n.mt-element-list .list-todo-item.dark:after {\n  border-right-color: #2f353b; }\n\n.mt-element-list .list-todo-item.dark .list-toggle {\n  background: #2f353b; }\n\n.mt-element-list .list-todo-item.blue:after {\n  border-right-color: #3598dc; }\n\n.mt-element-list .list-todo-item.blue .list-toggle {\n  background: #3598dc; }\n\n.mt-element-list .list-todo-item.blue-madison:after {\n  border-right-color: #578ebe; }\n\n.mt-element-list .list-todo-item.blue-madison .list-toggle {\n  background: #578ebe; }\n\n.mt-element-list .list-todo-item.blue-chambray:after {\n  border-right-color: #2C3E50; }\n\n.mt-element-list .list-todo-item.blue-chambray .list-toggle {\n  background: #2C3E50; }\n\n.mt-element-list .list-todo-item.blue-ebonyclay:after {\n  border-right-color: #22313F; }\n\n.mt-element-list .list-todo-item.blue-ebonyclay .list-toggle {\n  background: #22313F; }\n\n.mt-element-list .list-todo-item.blue-hoki:after {\n  border-right-color: #67809F; }\n\n.mt-element-list .list-todo-item.blue-hoki .list-toggle {\n  background: #67809F; }\n\n.mt-element-list .list-todo-item.blue-steel:after {\n  border-right-color: #4B77BE; }\n\n.mt-element-list .list-todo-item.blue-steel .list-toggle {\n  background: #4B77BE; }\n\n.mt-element-list .list-todo-item.blue-soft:after {\n  border-right-color: #4c87b9; }\n\n.mt-element-list .list-todo-item.blue-soft .list-toggle {\n  background: #4c87b9; }\n\n.mt-element-list .list-todo-item.blue-dark:after {\n  border-right-color: #5e738b; }\n\n.mt-element-list .list-todo-item.blue-dark .list-toggle {\n  background: #5e738b; }\n\n.mt-element-list .list-todo-item.blue-sharp:after {\n  border-right-color: #5C9BD1; }\n\n.mt-element-list .list-todo-item.blue-sharp .list-toggle {\n  background: #5C9BD1; }\n\n.mt-element-list .list-todo-item.green:after {\n  border-right-color: #32c5d2; }\n\n.mt-element-list .list-todo-item.green .list-toggle {\n  background: #32c5d2; }\n\n.mt-element-list .list-todo-item.green-meadow:after {\n  border-right-color: #1BBC9B; }\n\n.mt-element-list .list-todo-item.green-meadow .list-toggle {\n  background: #1BBC9B; }\n\n.mt-element-list .list-todo-item.green-seagreen:after {\n  border-right-color: #1BA39C; }\n\n.mt-element-list .list-todo-item.green-seagreen .list-toggle {\n  background: #1BA39C; }\n\n.mt-element-list .list-todo-item.green-turquoise:after {\n  border-right-color: #36D7B7; }\n\n.mt-element-list .list-todo-item.green-turquoise .list-toggle {\n  background: #36D7B7; }\n\n.mt-element-list .list-todo-item.green-haze:after {\n  border-right-color: #44b6ae; }\n\n.mt-element-list .list-todo-item.green-haze .list-toggle {\n  background: #44b6ae; }\n\n.mt-element-list .list-todo-item.green-jungle:after {\n  border-right-color: #26C281; }\n\n.mt-element-list .list-todo-item.green-jungle .list-toggle {\n  background: #26C281; }\n\n.mt-element-list .list-todo-item.green-soft:after {\n  border-right-color: #3faba4; }\n\n.mt-element-list .list-todo-item.green-soft .list-toggle {\n  background: #3faba4; }\n\n.mt-element-list .list-todo-item.green-dark:after {\n  border-right-color: #4DB3A2; }\n\n.mt-element-list .list-todo-item.green-dark .list-toggle {\n  background: #4DB3A2; }\n\n.mt-element-list .list-todo-item.green-sharp:after {\n  border-right-color: #2ab4c0; }\n\n.mt-element-list .list-todo-item.green-sharp .list-toggle {\n  background: #2ab4c0; }\n\n.mt-element-list .list-todo-item.grey:after {\n  border-right-color: #E5E5E5; }\n\n.mt-element-list .list-todo-item.grey .list-toggle {\n  background: #E5E5E5; }\n\n.mt-element-list .list-todo-item.grey-steel:after {\n  border-right-color: #e9edef; }\n\n.mt-element-list .list-todo-item.grey-steel .list-toggle {\n  background: #e9edef; }\n\n.mt-element-list .list-todo-item.grey-cararra:after {\n  border-right-color: #fafafa; }\n\n.mt-element-list .list-todo-item.grey-cararra .list-toggle {\n  background: #fafafa; }\n\n.mt-element-list .list-todo-item.grey-gallery:after {\n  border-right-color: #555555; }\n\n.mt-element-list .list-todo-item.grey-gallery .list-toggle {\n  background: #555555; }\n\n.mt-element-list .list-todo-item.grey-cascade:after {\n  border-right-color: #95A5A6; }\n\n.mt-element-list .list-todo-item.grey-cascade .list-toggle {\n  background: #95A5A6; }\n\n.mt-element-list .list-todo-item.grey-silver:after {\n  border-right-color: #BFBFBF; }\n\n.mt-element-list .list-todo-item.grey-silver .list-toggle {\n  background: #BFBFBF; }\n\n.mt-element-list .list-todo-item.grey-salsa:after {\n  border-right-color: #ACB5C3; }\n\n.mt-element-list .list-todo-item.grey-salsa .list-toggle {\n  background: #ACB5C3; }\n\n.mt-element-list .list-todo-item.grey-salt:after {\n  border-right-color: #bfcad1; }\n\n.mt-element-list .list-todo-item.grey-salt .list-toggle {\n  background: #bfcad1; }\n\n.mt-element-list .list-todo-item.grey-mint:after {\n  border-right-color: #525e64; }\n\n.mt-element-list .list-todo-item.grey-mint .list-toggle {\n  background: #525e64; }\n\n.mt-element-list .list-todo-item.red:after {\n  border-right-color: #e7505a; }\n\n.mt-element-list .list-todo-item.red .list-toggle {\n  background: #e7505a; }\n\n.mt-element-list .list-todo-item.red-pink:after {\n  border-right-color: #E08283; }\n\n.mt-element-list .list-todo-item.red-pink .list-toggle {\n  background: #E08283; }\n\n.mt-element-list .list-todo-item.red-sunglo:after {\n  border-right-color: #E26A6A; }\n\n.mt-element-list .list-todo-item.red-sunglo .list-toggle {\n  background: #E26A6A; }\n\n.mt-element-list .list-todo-item.red-intense:after {\n  border-right-color: #e35b5a; }\n\n.mt-element-list .list-todo-item.red-intense .list-toggle {\n  background: #e35b5a; }\n\n.mt-element-list .list-todo-item.red-thunderbird:after {\n  border-right-color: #D91E18; }\n\n.mt-element-list .list-todo-item.red-thunderbird .list-toggle {\n  background: #D91E18; }\n\n.mt-element-list .list-todo-item.red-flamingo:after {\n  border-right-color: #EF4836; }\n\n.mt-element-list .list-todo-item.red-flamingo .list-toggle {\n  background: #EF4836; }\n\n.mt-element-list .list-todo-item.red-soft:after {\n  border-right-color: #d05454; }\n\n.mt-element-list .list-todo-item.red-soft .list-toggle {\n  background: #d05454; }\n\n.mt-element-list .list-todo-item.red-haze:after {\n  border-right-color: #f36a5a; }\n\n.mt-element-list .list-todo-item.red-haze .list-toggle {\n  background: #f36a5a; }\n\n.mt-element-list .list-todo-item.red-mint:after {\n  border-right-color: #e43a45; }\n\n.mt-element-list .list-todo-item.red-mint .list-toggle {\n  background: #e43a45; }\n\n.mt-element-list .list-todo-item.yellow:after {\n  border-right-color: #c49f47; }\n\n.mt-element-list .list-todo-item.yellow .list-toggle {\n  background: #c49f47; }\n\n.mt-element-list .list-todo-item.yellow-gold:after {\n  border-right-color: #E87E04; }\n\n.mt-element-list .list-todo-item.yellow-gold .list-toggle {\n  background: #E87E04; }\n\n.mt-element-list .list-todo-item.yellow-casablanca:after {\n  border-right-color: #f2784b; }\n\n.mt-element-list .list-todo-item.yellow-casablanca .list-toggle {\n  background: #f2784b; }\n\n.mt-element-list .list-todo-item.yellow-crusta:after {\n  border-right-color: #f3c200; }\n\n.mt-element-list .list-todo-item.yellow-crusta .list-toggle {\n  background: #f3c200; }\n\n.mt-element-list .list-todo-item.yellow-lemon:after {\n  border-right-color: #F7CA18; }\n\n.mt-element-list .list-todo-item.yellow-lemon .list-toggle {\n  background: #F7CA18; }\n\n.mt-element-list .list-todo-item.yellow-saffron:after {\n  border-right-color: #F4D03F; }\n\n.mt-element-list .list-todo-item.yellow-saffron .list-toggle {\n  background: #F4D03F; }\n\n.mt-element-list .list-todo-item.yellow-soft:after {\n  border-right-color: #c8d046; }\n\n.mt-element-list .list-todo-item.yellow-soft .list-toggle {\n  background: #c8d046; }\n\n.mt-element-list .list-todo-item.yellow-haze:after {\n  border-right-color: #c5bf66; }\n\n.mt-element-list .list-todo-item.yellow-haze .list-toggle {\n  background: #c5bf66; }\n\n.mt-element-list .list-todo-item.yellow-mint:after {\n  border-right-color: #c5b96b; }\n\n.mt-element-list .list-todo-item.yellow-mint .list-toggle {\n  background: #c5b96b; }\n\n.mt-element-list .list-todo-item.purple:after {\n  border-right-color: #8E44AD; }\n\n.mt-element-list .list-todo-item.purple .list-toggle {\n  background: #8E44AD; }\n\n.mt-element-list .list-todo-item.purple-plum:after {\n  border-right-color: #8775a7; }\n\n.mt-element-list .list-todo-item.purple-plum .list-toggle {\n  background: #8775a7; }\n\n.mt-element-list .list-todo-item.purple-medium:after {\n  border-right-color: #BF55EC; }\n\n.mt-element-list .list-todo-item.purple-medium .list-toggle {\n  background: #BF55EC; }\n\n.mt-element-list .list-todo-item.purple-studio:after {\n  border-right-color: #8E44AD; }\n\n.mt-element-list .list-todo-item.purple-studio .list-toggle {\n  background: #8E44AD; }\n\n.mt-element-list .list-todo-item.purple-wisteria:after {\n  border-right-color: #9B59B6; }\n\n.mt-element-list .list-todo-item.purple-wisteria .list-toggle {\n  background: #9B59B6; }\n\n.mt-element-list .list-todo-item.purple-seance:after {\n  border-right-color: #9A12B3; }\n\n.mt-element-list .list-todo-item.purple-seance .list-toggle {\n  background: #9A12B3; }\n\n.mt-element-list .list-todo-item.purple-intense:after {\n  border-right-color: #8775a7; }\n\n.mt-element-list .list-todo-item.purple-intense .list-toggle {\n  background: #8775a7; }\n\n.mt-element-list .list-todo-item.purple-sharp:after {\n  border-right-color: #796799; }\n\n.mt-element-list .list-todo-item.purple-sharp .list-toggle {\n  background: #796799; }\n\n.mt-element-list .list-todo-item.purple-soft:after {\n  border-right-color: #8877a9; }\n\n.mt-element-list .list-todo-item.purple-soft .list-toggle {\n  background: #8877a9; }\n\n.mt-element-ribbon {\n  padding: 25px;\n  position: relative;\n  margin-bottom: 30px; }\n  .mt-element-ribbon .ribbon-content {\n    margin: 0;\n    padding-top: 2.5em; }\n    .mt-element-ribbon .ribbon-content.no-padding {\n      padding-top: 0; }\n  .mt-element-ribbon .ribbon {\n    position: absolute;\n    top: 15px;\n    left: -2px;\n    padding: 0.5em 1em;\n    z-index: 5;\n    background-color: #bac3d0;\n    color: #384353; }\n    .mt-element-ribbon .ribbon.ribbon-right {\n      left: auto;\n      right: -2px; }\n    .mt-element-ribbon .ribbon.ribbon-vertical-left {\n      top: -2px;\n      left: 15px;\n      padding-top: 1em;\n      padding-bottom: 1em; }\n    .mt-element-ribbon .ribbon.ribbon-vertical-right {\n      top: -2px;\n      left: auto;\n      right: 15px;\n      padding-top: 1em;\n      padding-bottom: 1em; }\n    .mt-element-ribbon .ribbon.ribbon-shadow {\n      box-shadow: 2px 2px 7px rgba(0, 0, 0, 0.4); }\n      .mt-element-ribbon .ribbon.ribbon-shadow.ribbon-right, .mt-element-ribbon .ribbon.ribbon-shadow.ribbon-vertical-right {\n        box-shadow: -2px 2px 7px rgba(0, 0, 0, 0.4); }\n    .mt-element-ribbon .ribbon.ribbon-round {\n      border-top-right-radius: 5px !important;\n      border-bottom-right-radius: 5px !important; }\n      .mt-element-ribbon .ribbon.ribbon-round.ribbon-right {\n        border-top-right-radius: 0px !important;\n        border-bottom-right-radius: 0px !important;\n        border-top-left-radius: 5px !important;\n        border-bottom-left-radius: 5px !important; }\n      .mt-element-ribbon .ribbon.ribbon-round.ribbon-vertical-right, .mt-element-ribbon .ribbon.ribbon-round.ribbon-vertical-left {\n        border-top-right-radius: 0px !important;\n        border-bottom-right-radius: 5px !important;\n        border-top-left-radius: 0px !important;\n        border-bottom-left-radius: 5px !important; }\n    .mt-element-ribbon .ribbon.ribbon-border:after {\n      border: 1px solid;\n      content: '';\n      position: absolute;\n      top: 5px;\n      bottom: 5px;\n      left: 5px;\n      right: 5px; }\n    .mt-element-ribbon .ribbon.ribbon-border-vert:after {\n      border-top: none;\n      border-bottom: none;\n      border-left: 1px solid;\n      border-right: 1px solid;\n      content: '';\n      position: absolute;\n      top: 0;\n      bottom: 0;\n      left: 5px;\n      right: 5px; }\n    .mt-element-ribbon .ribbon.ribbon-border-hor:after {\n      border-top: 1px solid;\n      border-bottom: 1px solid;\n      border-left: none;\n      border-right: none;\n      content: '';\n      position: absolute;\n      top: 5px;\n      bottom: 5px;\n      left: 0;\n      right: 0; }\n    .mt-element-ribbon .ribbon.ribbon-border-dash:after {\n      border: 1px solid;\n      border-style: dashed;\n      content: '';\n      position: absolute;\n      top: 5px;\n      bottom: 5px;\n      left: 5px;\n      right: 5px; }\n    .mt-element-ribbon .ribbon.ribbon-border-dash-vert:after {\n      border-top: none;\n      border-bottom: none;\n      border-left: 1px solid;\n      border-right: 1px solid;\n      border-left-style: dashed;\n      border-right-style: dashed;\n      content: '';\n      position: absolute;\n      top: 0;\n      bottom: 0;\n      left: 5px;\n      right: 5px; }\n    .mt-element-ribbon .ribbon.ribbon-border-dash-hor:after {\n      border-top: 1px solid;\n      border-bottom: 1px solid;\n      border-left: none;\n      border-right: none;\n      border-top-style: dashed;\n      border-bottom-style: dashed;\n      content: '';\n      position: absolute;\n      top: 5px;\n      bottom: 5px;\n      left: 0;\n      right: 0; }\n    .mt-element-ribbon .ribbon.ribbon-clip {\n      left: -10px; }\n      .mt-element-ribbon .ribbon.ribbon-clip.ribbon-right {\n        left: auto;\n        right: -10px; }\n    .mt-element-ribbon .ribbon > .ribbon-sub {\n      z-index: -1;\n      position: absolute;\n      padding: 0;\n      width: 100%;\n      height: 100%;\n      top: 0;\n      left: 0; }\n      .mt-element-ribbon .ribbon > .ribbon-sub.ribbon-clip:before, .mt-element-ribbon .ribbon > .ribbon-sub.ribbon-clip:after {\n        content: '';\n        position: absolute;\n        border-style: solid;\n        border-color: transparent !important;\n        bottom: -10px; }\n      .mt-element-ribbon .ribbon > .ribbon-sub.ribbon-clip:before {\n        border-width: 0 10px 10px 0;\n        border-right-color: #222 !important;\n        left: 0; }\n      .mt-element-ribbon .ribbon > .ribbon-sub.ribbon-clip.ribbon-right:before, .mt-element-ribbon .ribbon > .ribbon-sub.ribbon-clip.ribbon-right:after {\n        content: '';\n        position: absolute;\n        border-style: solid;\n        border-color: transparent;\n        bottom: -10px; }\n      .mt-element-ribbon .ribbon > .ribbon-sub.ribbon-clip.ribbon-right:before {\n        border-right-color: transparent !important; }\n      .mt-element-ribbon .ribbon > .ribbon-sub.ribbon-clip.ribbon-right:after {\n        border-width: 0 0 10px 10px;\n        border-left-color: #222 !important;\n        right: 0; }\n      .mt-element-ribbon .ribbon > .ribbon-sub.ribbon-bookmark:after {\n        border-left: 21px solid;\n        border-right: 20px solid;\n        border-bottom: 1em solid transparent !important;\n        bottom: -1em;\n        content: '';\n        height: 0;\n        left: 0;\n        position: absolute;\n        width: 0; }\n    .mt-element-ribbon .ribbon:after {\n      border-color: #62748f; }\n    .mt-element-ribbon .ribbon > .ribbon-sub {\n      background-color: #bac3d0;\n      color: #384353; }\n      .mt-element-ribbon .ribbon > .ribbon-sub:after {\n        border-color: #62748f;\n        border-left-color: #bac3d0;\n        border-right-color: #bac3d0; }\n    .mt-element-ribbon .ribbon.ribbon-color-default {\n      background-color: #bac3d0;\n      color: #384353; }\n      .mt-element-ribbon .ribbon.ribbon-color-default:after {\n        border-color: #9ca8bb; }\n      .mt-element-ribbon .ribbon.ribbon-color-default > .ribbon-sub {\n        background-color: #bac3d0;\n        color: #384353; }\n        .mt-element-ribbon .ribbon.ribbon-color-default > .ribbon-sub:after {\n          border-color: #62748f;\n          border-left-color: #bac3d0;\n          border-right-color: #bac3d0; }\n    .mt-element-ribbon .ribbon.ribbon-color-primary {\n      background-color: #337ab7;\n      color: #fff; }\n      .mt-element-ribbon .ribbon.ribbon-color-primary:after {\n        border-color: #286090; }\n      .mt-element-ribbon .ribbon.ribbon-color-primary > .ribbon-sub {\n        background-color: #337ab7;\n        color: black; }\n        .mt-element-ribbon .ribbon.ribbon-color-primary > .ribbon-sub:after {\n          border-color: #122b40;\n          border-left-color: #337ab7;\n          border-right-color: #337ab7; }\n    .mt-element-ribbon .ribbon.ribbon-color-info {\n      background-color: #659be0;\n      color: #fff; }\n      .mt-element-ribbon .ribbon.ribbon-color-info:after {\n        border-color: #3a80d7; }\n      .mt-element-ribbon .ribbon.ribbon-color-info > .ribbon-sub {\n        background-color: #659be0;\n        color: #0c203a; }\n        .mt-element-ribbon .ribbon.ribbon-color-info > .ribbon-sub:after {\n          border-color: #1d4f8e;\n          border-left-color: #659be0;\n          border-right-color: #659be0; }\n    .mt-element-ribbon .ribbon.ribbon-color-success {\n      background-color: #36c6d3;\n      color: #fff; }\n      .mt-element-ribbon .ribbon.ribbon-color-success:after {\n        border-color: #27a4b0; }\n      .mt-element-ribbon .ribbon.ribbon-color-success > .ribbon-sub {\n        background-color: #36c6d3;\n        color: #020808; }\n        .mt-element-ribbon .ribbon.ribbon-color-success > .ribbon-sub:after {\n          border-color: #14565c;\n          border-left-color: #36c6d3;\n          border-right-color: #36c6d3; }\n    .mt-element-ribbon .ribbon.ribbon-color-danger {\n      background-color: #ed6b75;\n      color: #fff; }\n      .mt-element-ribbon .ribbon.ribbon-color-danger:after {\n        border-color: #e73d4a; }\n      .mt-element-ribbon .ribbon.ribbon-color-danger > .ribbon-sub {\n        background-color: #ed6b75;\n        color: #4f0a0f; }\n        .mt-element-ribbon .ribbon.ribbon-color-danger > .ribbon-sub:after {\n          border-color: #a91520;\n          border-left-color: #ed6b75;\n          border-right-color: #ed6b75; }\n    .mt-element-ribbon .ribbon.ribbon-color-warning {\n      background-color: #F1C40F;\n      color: #010100; }\n      .mt-element-ribbon .ribbon.ribbon-color-warning:after {\n        border-color: #c29d0b; }\n      .mt-element-ribbon .ribbon.ribbon-color-warning > .ribbon-sub {\n        background-color: #F1C40F;\n        color: #010100; }\n        .mt-element-ribbon .ribbon.ribbon-color-warning > .ribbon-sub:after {\n          border-color: #614f06;\n          border-left-color: #F1C40F;\n          border-right-color: #F1C40F; }\n\n.mt-element-card .mt-card-item {\n  border: 1px solid;\n  border-color: #e7ecf1;\n  position: relative;\n  margin-bottom: 30px; }\n  .mt-element-card .mt-card-item .mt-card-avatar {\n    margin-bottom: 15px; }\n  .mt-element-card .mt-card-item .mt-card-content {\n    text-align: center; }\n    .mt-element-card .mt-card-item .mt-card-content .mt-card-name {\n      font-size: 16px;\n      font-weight: 600;\n      margin-bottom: 10px; }\n    .mt-element-card .mt-card-item .mt-card-content .mt-card-desc {\n      font-size: 14px;\n      margin: 0 0 10px 0; }\n    .mt-element-card .mt-card-item .mt-card-content .mt-card-social > ul {\n      padding: 0;\n      margin-bottom: 10px; }\n      .mt-element-card .mt-card-item .mt-card-content .mt-card-social > ul > li {\n        list-style: none;\n        display: inline-block;\n        margin: 0 3px; }\n        .mt-element-card .mt-card-item .mt-card-content .mt-card-social > ul > li > a {\n          color: #000;\n          font-size: 18px; }\n          .mt-element-card .mt-card-item .mt-card-content .mt-card-social > ul > li > a.mt-card-btn {\n            color: #fff; }\n            .mt-element-card .mt-card-item .mt-card-content .mt-card-social > ul > li > a.mt-card-btn:hover {\n              color: #36c6d3; }\n          .mt-element-card .mt-card-item .mt-card-content .mt-card-social > ul > li > a:hover {\n            color: #F1C40F; }\n\n.mt-element-card.mt-card-round .mt-card-item {\n  padding: 40px 40px 10px 40px; }\n  .mt-element-card.mt-card-round .mt-card-item .mt-card-avatar {\n    border-radius: 50% !important;\n    -webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC); }\n    .mt-element-card.mt-card-round .mt-card-item .mt-card-avatar .mt-overlay {\n      -webkit-border-radius: 50%;\n      -moz-border-radius: 50%;\n      -ms-border-radius: 50%;\n      -o-border-radius: 50%;\n      border-radius: 50%; }\n\n.mt-element-overlay .mt-overlay-1 {\n  width: 100%;\n  height: 100%;\n  float: left;\n  overflow: hidden;\n  position: relative;\n  text-align: center;\n  cursor: default; }\n  .mt-element-overlay .mt-overlay-1 img {\n    display: block;\n    position: relative;\n    -webkit-transition: all .4s linear;\n    transition: all .4s linear;\n    width: 100%;\n    height: auto; }\n  .mt-element-overlay .mt-overlay-1 h2 {\n    text-transform: uppercase;\n    color: #fff;\n    text-align: center;\n    position: relative;\n    font-size: 17px;\n    background: rgba(0, 0, 0, 0.6);\n    -webkit-transform: translatey(-100px) translateZ(0);\n    -ms-transform: translatey(-100px) translateZ(0);\n    transform: translatey(-100px) translateZ(0);\n    -webkit-transition: all .2s ease-in-out;\n    transition: all .2s ease-in-out;\n    padding: 10px; }\n  .mt-element-overlay .mt-overlay-1 .mt-info {\n    text-decoration: none;\n    display: inline-block;\n    text-transform: uppercase;\n    color: #fff;\n    background-color: transparent;\n    opacity: 0;\n    filter: alpha(opacity=0);\n    -webkit-transition: all .2s ease-in-out;\n    transition: all .2s ease-in-out;\n    padding: 0;\n    margin: auto;\n    position: absolute;\n    top: 50%;\n    left: 0;\n    right: 0;\n    transform: translateY(-50%) translateZ(0);\n    -webkit-transform: translateY(-50%) translateZ(0);\n    -ms-transform: translateY(-50%) translateZ(0); }\n    .mt-element-overlay .mt-overlay-1 .mt-info > li {\n      list-style: none;\n      display: inline-block;\n      margin: 0 3px; }\n      .mt-element-overlay .mt-overlay-1 .mt-info > li:hover {\n        -webkit-transition: all .2s ease-in-out;\n        transition: all .2s ease-in-out;\n        cursor: pointer; }\n  .mt-element-overlay .mt-overlay-1:hover .mt-overlay {\n    opacity: 1;\n    filter: alpha(opacity=100);\n    -webkit-transform: translateZ(0);\n    -ms-transform: translateZ(0);\n    transform: translateZ(0); }\n  .mt-element-overlay .mt-overlay-1:hover img {\n    -ms-transform: scale(1.2) translateZ(0);\n    -webkit-transform: scale(1.2) translateZ(0);\n    transform: scale(1.2) translateZ(0); }\n  .mt-element-overlay .mt-overlay-1:hover .mt-info {\n    opacity: 1;\n    filter: alpha(opacity=100);\n    -webkit-transition-delay: .2s;\n    transition-delay: .2s; }\n  .mt-element-overlay .mt-overlay-1 .mt-overlay {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    overflow: hidden;\n    top: 0;\n    left: 0;\n    opacity: 0;\n    background-color: rgba(0, 0, 0, 0.7);\n    -webkit-transition: all .4s ease-in-out;\n    transition: all .4s ease-in-out; }\n  .mt-element-overlay .mt-overlay-1.mt-scroll-up:hover .mt-overlay {\n    bottom: 0; }\n  .mt-element-overlay .mt-overlay-1.mt-scroll-up .mt-overlay {\n    bottom: -100%;\n    top: auto; }\n  .mt-element-overlay .mt-overlay-1.mt-scroll-down:hover .mt-overlay {\n    top: 0; }\n  .mt-element-overlay .mt-overlay-1.mt-scroll-down .mt-overlay {\n    top: -100%; }\n  .mt-element-overlay .mt-overlay-1.mt-scroll-left:hover .mt-overlay {\n    right: 0; }\n  .mt-element-overlay .mt-overlay-1.mt-scroll-left .mt-overlay {\n    right: -100%;\n    left: auto; }\n  .mt-element-overlay .mt-overlay-1.mt-scroll-right:hover .mt-overlay {\n    left: 0; }\n  .mt-element-overlay .mt-overlay-1.mt-scroll-right .mt-overlay {\n    left: -100%; }\n\n.mt-element-overlay .mt-overlay-2 {\n  width: 100%;\n  height: 100%;\n  float: left;\n  overflow: hidden;\n  position: relative;\n  text-align: center;\n  cursor: default; }\n  .mt-element-overlay .mt-overlay-2 img {\n    display: block;\n    position: relative;\n    -webkit-transition: all 0.4s ease-in;\n    transition: all 0.4s ease-in;\n    width: 100%;\n    height: auto; }\n  .mt-element-overlay .mt-overlay-2 h2 {\n    text-transform: uppercase;\n    text-align: center;\n    position: relative;\n    font-size: 17px;\n    padding: 10px;\n    background: rgba(0, 0, 0, 0.6); }\n  .mt-element-overlay .mt-overlay-2 .mt-info,\n  .mt-element-overlay .mt-overlay-2 h2 {\n    -webkit-transform: scale(0.7);\n    -ms-transform: scale(0.7);\n    transform: scale(0.7);\n    -webkit-transition: all 0.4s ease-in;\n    transition: all 0.4s ease-in;\n    opacity: 0;\n    filter: alpha(opacity=0);\n    color: #fff;\n    text-transform: uppercase; }\n  .mt-element-overlay .mt-overlay-2 .mt-info {\n    display: inline-block;\n    text-decoration: none;\n    margin: auto;\n    position: absolute;\n    top: 50%;\n    -webkit-transform: scale(0.7) translateY(-50%) translateX(-50%);\n    -ms-transform: scale(0.7) translateY(-50%) translateX(-50%);\n    transform: scale(0.7) translateY(-50%) translateX(-50%); }\n    .mt-element-overlay .mt-overlay-2 .mt-info:hover {\n      box-shadow: 0 0 5px #fff; }\n  .mt-element-overlay .mt-overlay-2:hover img {\n    filter: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\"><filter id=\"filter\"><feColorMatrix type=\"matrix\" color-interpolation-filters=\"sRGB\" values=\"0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0\" /><feGaussianBlur stdDeviation=\"3\" /></filter></svg>#filter');\n    filter: blur(3px);\n    -webkit-filter: blur(3px);\n    -webkit-transform: scale(1.2);\n    -ms-transform: scale(1.2);\n    transform: scale(1.2); }\n  .mt-element-overlay .mt-overlay-2:hover .mt-overlay {\n    opacity: 1;\n    filter: alpha(opacity=100);\n    -webkit-transition-delay: 0s;\n    transition-delay: 0s;\n    -webkit-transform: translate(0px, 0px);\n    -ms-transform: translate(0px, 0px);\n    transform: translate(0px, 0px); }\n  .mt-element-overlay .mt-overlay-2:hover h2 {\n    -webkit-transition-delay: 0.5s;\n    transition-delay: 0.5s; }\n  .mt-element-overlay .mt-overlay-2:hover .mt-info,\n  .mt-element-overlay .mt-overlay-2:hover h2 {\n    opacity: 1;\n    filter: alpha(opacity=100);\n    -webkit-transform: scale(1) translateY(-50%);\n    -ms-transform: scale(1) translateY(-50%);\n    transform: scale(1) translateY(-50%); }\n  .mt-element-overlay .mt-overlay-2:hover .mt-info {\n    -webkit-transform: scale(1) translateY(-50%) translateX(-50%);\n    -ms-transform: scale(1) translateY(-50%) translateX(-50%);\n    transform: scale(1) translateY(-50%) translateX(-50%); }\n  .mt-element-overlay .mt-overlay-2 .mt-overlay {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    overflow: hidden;\n    top: 0;\n    left: 0; }\n  .mt-element-overlay .mt-overlay-2.mt-overlay-2-grey:hover img {\n    filter: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\"><filter id=\"filter\"><feColorMatrix type=\"matrix\" color-interpolation-filters=\"sRGB\" values=\"0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0\" /><feGaussianBlur stdDeviation=\"3\" /></filter></svg>#filter');\n    filter: grayscale(1) blur(3px);\n    -webkit-filter: grayscale(1) blur(3px); }\n  .mt-element-overlay .mt-overlay-2.mt-overlay-2-icons .mt-info {\n    border: none;\n    width: 100%;\n    padding: 0;\n    -webkit-transform: scale(0.7) translateY(-50%) translateX(-50%);\n    -ms-transform: scale(0.7) translateY(-50%) translateX(-50%);\n    transform: scale(0.7) translateY(-50%) translateX(-50%); }\n    .mt-element-overlay .mt-overlay-2.mt-overlay-2-icons .mt-info:hover {\n      box-shadow: none; }\n    .mt-element-overlay .mt-overlay-2.mt-overlay-2-icons .mt-info > li {\n      list-style: none;\n      display: inline-block;\n      margin: 0 3px; }\n      .mt-element-overlay .mt-overlay-2.mt-overlay-2-icons .mt-info > li:hover {\n        -webkit-transition: all .2s ease-in-out;\n        transition: all .2s ease-in-out;\n        cursor: pointer; }\n  .mt-element-overlay .mt-overlay-2.mt-overlay-2-icons:hover .mt-info {\n    -webkit-transform: scale(1) translateY(-50%) translateX(-50%);\n    -ms-transform: scale(1) translateY(-50%) translateX(-50%);\n    transform: scale(1) translateY(-50%) translateX(-50%); }\n\n.mt-element-overlay .mt-overlay-3 {\n  width: 100%;\n  height: 100%;\n  float: left;\n  overflow: hidden;\n  position: relative;\n  text-align: center;\n  cursor: default; }\n  .mt-element-overlay .mt-overlay-3 img {\n    display: block;\n    position: relative;\n    width: 100%;\n    height: auto; }\n  .mt-element-overlay .mt-overlay-3 h2 {\n    text-transform: uppercase;\n    color: #fff;\n    text-align: center;\n    position: relative;\n    font-size: 17px;\n    padding: 10px;\n    background: rgba(0, 0, 0, 0.6);\n    -webkit-transform: translateY(100px);\n    -ms-transform: translateY(100px);\n    transform: translateY(100px);\n    -webkit-transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81);\n    transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81); }\n  .mt-element-overlay .mt-overlay-3 .mt-info {\n    display: inline-block;\n    text-decoration: none;\n    text-transform: uppercase;\n    color: #fff;\n    border: 1px solid #fff;\n    background-color: transparent;\n    opacity: 0;\n    filter: alpha(opacity=0);\n    -webkit-transform: scale(0);\n    -ms-transform: scale(0);\n    transform: scale(0);\n    -webkit-transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81);\n    transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81);\n    font-weight: normal;\n    position: absolute;\n    top: 15px;\n    bottom: 15px;\n    left: 15px;\n    right: 15px;\n    margin: auto;\n    padding: 45% 0 0 0; }\n    .mt-element-overlay .mt-overlay-3 .mt-info:hover {\n      box-shadow: 0 0 5px #fff; }\n  .mt-element-overlay .mt-overlay-3:hover .mt-overlay {\n    background-color: rgba(48, 152, 157, 0.7); }\n  .mt-element-overlay .mt-overlay-3:hover h2 {\n    -webkit-transform: translateY(5px);\n    -ms-transform: translateY(5px);\n    transform: translateY(5px); }\n  .mt-element-overlay .mt-overlay-3:hover .mt-info {\n    opacity: 1;\n    filter: alpha(opacity=100);\n    -webkit-transform: scale(1);\n    -ms-transform: scale(1);\n    transform: scale(1); }\n  .mt-element-overlay .mt-overlay-3 .mt-overlay {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    overflow: hidden;\n    top: 0;\n    left: 0;\n    background-color: rgba(75, 75, 75, 0.7);\n    -webkit-transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81);\n    transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81); }\n  .mt-element-overlay .mt-overlay-3.mt-overlay-3-icons .mt-info {\n    padding: 40% 0 0 0; }\n    .mt-element-overlay .mt-overlay-3.mt-overlay-3-icons .mt-info > li {\n      list-style: none;\n      display: inline-block;\n      margin: 0 3px; }\n      .mt-element-overlay .mt-overlay-3.mt-overlay-3-icons .mt-info > li:hover {\n        -webkit-transition: all .2s ease-in-out;\n        transition: all .2s ease-in-out;\n        cursor: pointer; }\n\n.mt-element-overlay .mt-overlay-4 {\n  width: 100%;\n  height: 100%;\n  float: left;\n  overflow: hidden;\n  position: relative;\n  text-align: center;\n  cursor: default; }\n  .mt-element-overlay .mt-overlay-4 img {\n    display: block;\n    position: relative;\n    -webkit-transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81);\n    transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81);\n    width: 100%;\n    height: auto; }\n  .mt-element-overlay .mt-overlay-4 h2 {\n    text-transform: uppercase;\n    color: #fff;\n    text-align: center;\n    position: relative;\n    font-size: 17px;\n    background: rgba(0, 0, 0, 0.6);\n    -webkit-transform: translatey(-100px);\n    -ms-transform: translatey(-100px);\n    transform: translatey(-100px);\n    -webkit-transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81);\n    transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81);\n    padding: 10px; }\n  .mt-element-overlay .mt-overlay-4 .mt-info {\n    display: inline-block;\n    text-transform: uppercase;\n    opacity: 0;\n    filter: alpha(opacity=0);\n    -webkit-transition: all 0.4s ease;\n    transition: all 0.4s ease;\n    margin: 50px 0 0; }\n  .mt-element-overlay .mt-overlay-4:hover .mt-overlay {\n    opacity: 1;\n    filter: alpha(opacity=100); }\n  .mt-element-overlay .mt-overlay-4:hover h2,\n  .mt-element-overlay .mt-overlay-4:hover .mt-info {\n    opacity: 1;\n    filter: alpha(opacity=100);\n    -ms-transform: translatey(0);\n    -webkit-transform: translatey(0);\n    transform: translatey(0); }\n  .mt-element-overlay .mt-overlay-4:hover .mt-info {\n    -webkit-transition-delay: .2s;\n    transition-delay: .2s; }\n  .mt-element-overlay .mt-overlay-4 .mt-overlay {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    overflow: hidden;\n    top: 0;\n    left: 0;\n    opacity: 0;\n    filter: alpha(opacity=0);\n    background-color: rgba(0, 0, 0, 0.7);\n    -webkit-transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81);\n    transition: all 0.4s cubic-bezier(0.88, -0.99, 0, 1.81); }\n  .mt-element-overlay .mt-overlay-4.mt-overlay-4-icons .mt-info {\n    border: none;\n    position: absolute;\n    padding: 0;\n    top: 50%;\n    left: 0;\n    right: 0;\n    -webkit-transform: translateY(-50%);\n    -ms-transform: translateY(-50%);\n    transform: translateY(-50%);\n    margin: auto; }\n    .mt-element-overlay .mt-overlay-4.mt-overlay-4-icons .mt-info:hover {\n      box-shadow: none; }\n    .mt-element-overlay .mt-overlay-4.mt-overlay-4-icons .mt-info > li {\n      list-style: none;\n      display: inline-block;\n      margin: 0 3px; }\n      .mt-element-overlay .mt-overlay-4.mt-overlay-4-icons .mt-info > li:hover {\n        -webkit-transition: all .2s ease-in-out;\n        transition: all .2s ease-in-out;\n        cursor: pointer; }\n\n.mt-element-overlay .mt-overlay-5 {\n  width: 100%;\n  height: 100%;\n  float: left;\n  overflow: hidden;\n  position: relative;\n  text-align: center;\n  cursor: default;\n  background: -webkit-linear-gradient(45deg, #ff89e9 0%, #05abe0 100%);\n  background: linear-gradient(45deg, #ff89e9 0%, #05abe0 100%); }\n  .mt-element-overlay .mt-overlay-5 .mt-overlay {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    overflow: hidden;\n    top: 0;\n    left: 0;\n    padding: 3em;\n    text-align: left; }\n    .mt-element-overlay .mt-overlay-5 .mt-overlay:before {\n      position: absolute;\n      top: 20px;\n      right: 20px;\n      bottom: 20px;\n      left: 20px;\n      border: 1px solid #fff;\n      content: '';\n      opacity: 0;\n      filter: alpha(opacity=0);\n      -webkit-transition: opacity 0.35s, -webkit-transform 0.45s;\n      transition: opacity 0.35s, transform 0.45s;\n      -webkit-transform: translate3d(-20px, 0, 0);\n      transform: translate3d(-20px, 0, 0); }\n  .mt-element-overlay .mt-overlay-5 img {\n    display: block;\n    position: relative;\n    max-width: none;\n    width: calc(113% + 60px);\n    -webkit-transition: opacity 0.35s, -webkit-transform 0.45s;\n    transition: opacity 0.35s, transform 0.45s;\n    -webkit-transform: translate3d(-40px, 0, 0);\n    transform: translate3d(-40px, 0, 0); }\n  .mt-element-overlay .mt-overlay-5 h2 {\n    text-transform: uppercase;\n    color: #fff;\n    position: relative;\n    font-size: 17px;\n    background-color: transparent;\n    padding: 15% 0 10px 0;\n    text-align: left; }\n  .mt-element-overlay .mt-overlay-5 a,\n  .mt-element-overlay .mt-overlay-5 p {\n    color: #FFF;\n    opacity: 0;\n    filter: alpha(opacity=0);\n    -webkit-transition: opacity 0.35s, -webkit-transform 0.45s;\n    transition: opacity 0.35s, transform 0.45s;\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0); }\n  .mt-element-overlay .mt-overlay-5 a:hover {\n    text-decoration: none;\n    opacity: 0.6;\n    filter: alpha(opacity=60); }\n  .mt-element-overlay .mt-overlay-5:hover img {\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  .mt-element-overlay .mt-overlay-5:hover .mt-overlay:before,\n  .mt-element-overlay .mt-overlay-5:hover a,\n  .mt-element-overlay .mt-overlay-5:hover p {\n    opacity: 1;\n    filter: alpha(opacity=100);\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n\n.mt-element-overlay .mt-overlay-6 {\n  width: 100%;\n  height: 100%;\n  float: left;\n  overflow: hidden;\n  position: relative;\n  text-align: center;\n  cursor: default;\n  background: #42b078; }\n  .mt-element-overlay .mt-overlay-6 .mt-overlay {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    overflow: hidden;\n    top: 0;\n    left: 0;\n    padding: 50px 20px; }\n  .mt-element-overlay .mt-overlay-6 img {\n    display: block;\n    position: relative;\n    max-width: none;\n    width: calc(100% + 20px);\n    -webkit-transition: opacity 0.35s, -webkit-transform 0.35s;\n    transition: opacity 0.35s, transform 0.35s;\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0);\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden; }\n  .mt-element-overlay .mt-overlay-6 h2 {\n    text-transform: uppercase;\n    color: #fff;\n    text-align: center;\n    position: relative;\n    font-size: 17px;\n    overflow: hidden;\n    padding: 0.5em 0;\n    background-color: transparent; }\n    .mt-element-overlay .mt-overlay-6 h2:after {\n      position: absolute;\n      bottom: 0;\n      left: 0;\n      width: 100%;\n      height: 2px;\n      background: #fff;\n      content: '';\n      -webkit-transition: -webkit-transform 0.35s;\n      transition: transform 0.35s;\n      -webkit-transform: translate3d(-100%, 0, 0);\n      transform: translate3d(-100%, 0, 0); }\n  .mt-element-overlay .mt-overlay-6 a,\n  .mt-element-overlay .mt-overlay-6 p {\n    color: #FFF;\n    opacity: 0;\n    filter: alpha(opacity=0);\n    -webkit-transition: opacity 0.35s, -webkit-transform 0.35s;\n    transition: opacity 0.35s, transform 0.35s;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0); }\n  .mt-element-overlay .mt-overlay-6 p {\n    margin-top: 20px; }\n  .mt-element-overlay .mt-overlay-6 .mt-info:hover {\n    text-decoration: none;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n    -webkit-transition: all .2s ease-in-out;\n    transition: all .2s ease-in-out;\n    cursor: pointer; }\n  .mt-element-overlay .mt-overlay-6:hover img {\n    opacity: 0.4;\n    filter: alpha(opacity=40);\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  .mt-element-overlay .mt-overlay-6:hover h2:after {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  .mt-element-overlay .mt-overlay-6:hover a,\n  .mt-element-overlay .mt-overlay-6:hover p {\n    opacity: 1;\n    filter: alpha(opacity=100);\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n\n/***\nCustom color buttons \n***/\n.bg-white {\n  background: #ffffff !important; }\n\n.bg-white-opacity {\n  background: rgba(255, 255, 255, 0.8) !important; }\n\n.bg-hover-white:hover {\n  background: #ffffff !important; }\n\n.font-white {\n  color: #ffffff !important; }\n\n.bg-font-white {\n  color: #666 !important; }\n\n.border-white {\n  border-color: #ffffff !important; }\n\n.border-top-white {\n  border-top-color: #ffffff !important; }\n\n.border-bottom-white {\n  border-bottom-color: #ffffff !important; }\n\n.border-left-white {\n  border-left-color: #ffffff !important; }\n\n.border-right-white {\n  border-right-color: #ffffff !important; }\n\n.bg-before-white:before,\n.bg-after-white:after {\n  background: #ffffff !important; }\n\n.border-before-white:before,\n.border-after-white:after {\n  border-color: #ffffff !important; }\n\n.border-top-before-white:before,\n.border-top-after-white:after {\n  border-top-color: #ffffff !important; }\n\n.border-bottom-before-white:before,\n.border-bottom-after-white:after {\n  border-bottom-color: #ffffff !important; }\n\n.border-left-before-white:before,\n.border-left-after-white:after {\n  border-left-color: #ffffff !important; }\n\n.border-right-before-white:before,\n.border-right-after-white:after {\n  border-right-color: #ffffff !important; }\n\n.bg-default {\n  background: #e1e5ec !important; }\n\n.bg-default-opacity {\n  background: rgba(225, 229, 236, 0.8) !important; }\n\n.bg-hover-default:hover {\n  background: #e1e5ec !important; }\n\n.font-default {\n  color: #e1e5ec !important; }\n\n.bg-font-default {\n  color: #666 !important; }\n\n.border-default {\n  border-color: #e1e5ec !important; }\n\n.border-top-default {\n  border-top-color: #e1e5ec !important; }\n\n.border-bottom-default {\n  border-bottom-color: #e1e5ec !important; }\n\n.border-left-default {\n  border-left-color: #e1e5ec !important; }\n\n.border-right-default {\n  border-right-color: #e1e5ec !important; }\n\n.bg-before-default:before,\n.bg-after-default:after {\n  background: #e1e5ec !important; }\n\n.border-before-default:before,\n.border-after-default:after {\n  border-color: #e1e5ec !important; }\n\n.border-top-before-default:before,\n.border-top-after-default:after {\n  border-top-color: #e1e5ec !important; }\n\n.border-bottom-before-default:before,\n.border-bottom-after-default:after {\n  border-bottom-color: #e1e5ec !important; }\n\n.border-left-before-default:before,\n.border-left-after-default:after {\n  border-left-color: #e1e5ec !important; }\n\n.border-right-before-default:before,\n.border-right-after-default:after {\n  border-right-color: #e1e5ec !important; }\n\n.bg-dark {\n  background: #2f353b !important; }\n\n.bg-dark-opacity {\n  background: rgba(47, 53, 59, 0.8) !important; }\n\n.bg-hover-dark:hover {\n  background: #2f353b !important; }\n\n.font-dark {\n  color: #2f353b !important; }\n\n.bg-font-dark {\n  color: #FFFFFF !important; }\n\n.border-dark {\n  border-color: #2f353b !important; }\n\n.border-top-dark {\n  border-top-color: #2f353b !important; }\n\n.border-bottom-dark {\n  border-bottom-color: #2f353b !important; }\n\n.border-left-dark {\n  border-left-color: #2f353b !important; }\n\n.border-right-dark {\n  border-right-color: #2f353b !important; }\n\n.bg-before-dark:before,\n.bg-after-dark:after {\n  background: #2f353b !important; }\n\n.border-before-dark:before,\n.border-after-dark:after {\n  border-color: #2f353b !important; }\n\n.border-top-before-dark:before,\n.border-top-after-dark:after {\n  border-top-color: #2f353b !important; }\n\n.border-bottom-before-dark:before,\n.border-bottom-after-dark:after {\n  border-bottom-color: #2f353b !important; }\n\n.border-left-before-dark:before,\n.border-left-after-dark:after {\n  border-left-color: #2f353b !important; }\n\n.border-right-before-dark:before,\n.border-right-after-dark:after {\n  border-right-color: #2f353b !important; }\n\n.bg-blue {\n  background: #3598dc !important; }\n\n.bg-blue-opacity {\n  background: rgba(53, 152, 220, 0.8) !important; }\n\n.bg-hover-blue:hover {\n  background: #3598dc !important; }\n\n.font-blue {\n  color: #3598dc !important; }\n\n.bg-font-blue {\n  color: #FFFFFF !important; }\n\n.border-blue {\n  border-color: #3598dc !important; }\n\n.border-top-blue {\n  border-top-color: #3598dc !important; }\n\n.border-bottom-blue {\n  border-bottom-color: #3598dc !important; }\n\n.border-left-blue {\n  border-left-color: #3598dc !important; }\n\n.border-right-blue {\n  border-right-color: #3598dc !important; }\n\n.bg-before-blue:before,\n.bg-after-blue:after {\n  background: #3598dc !important; }\n\n.border-before-blue:before,\n.border-after-blue:after {\n  border-color: #3598dc !important; }\n\n.border-top-before-blue:before,\n.border-top-after-blue:after {\n  border-top-color: #3598dc !important; }\n\n.border-bottom-before-blue:before,\n.border-bottom-after-blue:after {\n  border-bottom-color: #3598dc !important; }\n\n.border-left-before-blue:before,\n.border-left-after-blue:after {\n  border-left-color: #3598dc !important; }\n\n.border-right-before-blue:before,\n.border-right-after-blue:after {\n  border-right-color: #3598dc !important; }\n\n.bg-blue-madison {\n  background: #578ebe !important; }\n\n.bg-blue-madison-opacity {\n  background: rgba(87, 142, 190, 0.8) !important; }\n\n.bg-hover-blue-madison:hover {\n  background: #578ebe !important; }\n\n.font-blue-madison {\n  color: #578ebe !important; }\n\n.bg-font-blue-madison {\n  color: #FFFFFF !important; }\n\n.border-blue-madison {\n  border-color: #578ebe !important; }\n\n.border-top-blue-madison {\n  border-top-color: #578ebe !important; }\n\n.border-bottom-blue-madison {\n  border-bottom-color: #578ebe !important; }\n\n.border-left-blue-madison {\n  border-left-color: #578ebe !important; }\n\n.border-right-blue-madison {\n  border-right-color: #578ebe !important; }\n\n.bg-before-blue-madison:before,\n.bg-after-blue-madison:after {\n  background: #578ebe !important; }\n\n.border-before-blue-madison:before,\n.border-after-blue-madison:after {\n  border-color: #578ebe !important; }\n\n.border-top-before-blue-madison:before,\n.border-top-after-blue-madison:after {\n  border-top-color: #578ebe !important; }\n\n.border-bottom-before-blue-madison:before,\n.border-bottom-after-blue-madison:after {\n  border-bottom-color: #578ebe !important; }\n\n.border-left-before-blue-madison:before,\n.border-left-after-blue-madison:after {\n  border-left-color: #578ebe !important; }\n\n.border-right-before-blue-madison:before,\n.border-right-after-blue-madison:after {\n  border-right-color: #578ebe !important; }\n\n.bg-blue-chambray {\n  background: #2C3E50 !important; }\n\n.bg-blue-chambray-opacity {\n  background: rgba(44, 62, 80, 0.8) !important; }\n\n.bg-hover-blue-chambray:hover {\n  background: #2C3E50 !important; }\n\n.font-blue-chambray {\n  color: #2C3E50 !important; }\n\n.bg-font-blue-chambray {\n  color: #FFFFFF !important; }\n\n.border-blue-chambray {\n  border-color: #2C3E50 !important; }\n\n.border-top-blue-chambray {\n  border-top-color: #2C3E50 !important; }\n\n.border-bottom-blue-chambray {\n  border-bottom-color: #2C3E50 !important; }\n\n.border-left-blue-chambray {\n  border-left-color: #2C3E50 !important; }\n\n.border-right-blue-chambray {\n  border-right-color: #2C3E50 !important; }\n\n.bg-before-blue-chambray:before,\n.bg-after-blue-chambray:after {\n  background: #2C3E50 !important; }\n\n.border-before-blue-chambray:before,\n.border-after-blue-chambray:after {\n  border-color: #2C3E50 !important; }\n\n.border-top-before-blue-chambray:before,\n.border-top-after-blue-chambray:after {\n  border-top-color: #2C3E50 !important; }\n\n.border-bottom-before-blue-chambray:before,\n.border-bottom-after-blue-chambray:after {\n  border-bottom-color: #2C3E50 !important; }\n\n.border-left-before-blue-chambray:before,\n.border-left-after-blue-chambray:after {\n  border-left-color: #2C3E50 !important; }\n\n.border-right-before-blue-chambray:before,\n.border-right-after-blue-chambray:after {\n  border-right-color: #2C3E50 !important; }\n\n.bg-blue-ebonyclay {\n  background: #22313F !important; }\n\n.bg-blue-ebonyclay-opacity {\n  background: rgba(34, 49, 63, 0.8) !important; }\n\n.bg-hover-blue-ebonyclay:hover {\n  background: #22313F !important; }\n\n.font-blue-ebonyclay {\n  color: #22313F !important; }\n\n.bg-font-blue-ebonyclay {\n  color: #FFFFFF !important; }\n\n.border-blue-ebonyclay {\n  border-color: #22313F !important; }\n\n.border-top-blue-ebonyclay {\n  border-top-color: #22313F !important; }\n\n.border-bottom-blue-ebonyclay {\n  border-bottom-color: #22313F !important; }\n\n.border-left-blue-ebonyclay {\n  border-left-color: #22313F !important; }\n\n.border-right-blue-ebonyclay {\n  border-right-color: #22313F !important; }\n\n.bg-before-blue-ebonyclay:before,\n.bg-after-blue-ebonyclay:after {\n  background: #22313F !important; }\n\n.border-before-blue-ebonyclay:before,\n.border-after-blue-ebonyclay:after {\n  border-color: #22313F !important; }\n\n.border-top-before-blue-ebonyclay:before,\n.border-top-after-blue-ebonyclay:after {\n  border-top-color: #22313F !important; }\n\n.border-bottom-before-blue-ebonyclay:before,\n.border-bottom-after-blue-ebonyclay:after {\n  border-bottom-color: #22313F !important; }\n\n.border-left-before-blue-ebonyclay:before,\n.border-left-after-blue-ebonyclay:after {\n  border-left-color: #22313F !important; }\n\n.border-right-before-blue-ebonyclay:before,\n.border-right-after-blue-ebonyclay:after {\n  border-right-color: #22313F !important; }\n\n.bg-blue-hoki {\n  background: #67809F !important; }\n\n.bg-blue-hoki-opacity {\n  background: rgba(103, 128, 159, 0.8) !important; }\n\n.bg-hover-blue-hoki:hover {\n  background: #67809F !important; }\n\n.font-blue-hoki {\n  color: #67809F !important; }\n\n.bg-font-blue-hoki {\n  color: #FFFFFF !important; }\n\n.border-blue-hoki {\n  border-color: #67809F !important; }\n\n.border-top-blue-hoki {\n  border-top-color: #67809F !important; }\n\n.border-bottom-blue-hoki {\n  border-bottom-color: #67809F !important; }\n\n.border-left-blue-hoki {\n  border-left-color: #67809F !important; }\n\n.border-right-blue-hoki {\n  border-right-color: #67809F !important; }\n\n.bg-before-blue-hoki:before,\n.bg-after-blue-hoki:after {\n  background: #67809F !important; }\n\n.border-before-blue-hoki:before,\n.border-after-blue-hoki:after {\n  border-color: #67809F !important; }\n\n.border-top-before-blue-hoki:before,\n.border-top-after-blue-hoki:after {\n  border-top-color: #67809F !important; }\n\n.border-bottom-before-blue-hoki:before,\n.border-bottom-after-blue-hoki:after {\n  border-bottom-color: #67809F !important; }\n\n.border-left-before-blue-hoki:before,\n.border-left-after-blue-hoki:after {\n  border-left-color: #67809F !important; }\n\n.border-right-before-blue-hoki:before,\n.border-right-after-blue-hoki:after {\n  border-right-color: #67809F !important; }\n\n.bg-blue-steel {\n  background: #4B77BE !important; }\n\n.bg-blue-steel-opacity {\n  background: rgba(75, 119, 190, 0.8) !important; }\n\n.bg-hover-blue-steel:hover {\n  background: #4B77BE !important; }\n\n.font-blue-steel {\n  color: #4B77BE !important; }\n\n.bg-font-blue-steel {\n  color: #FFFFFF !important; }\n\n.border-blue-steel {\n  border-color: #4B77BE !important; }\n\n.border-top-blue-steel {\n  border-top-color: #4B77BE !important; }\n\n.border-bottom-blue-steel {\n  border-bottom-color: #4B77BE !important; }\n\n.border-left-blue-steel {\n  border-left-color: #4B77BE !important; }\n\n.border-right-blue-steel {\n  border-right-color: #4B77BE !important; }\n\n.bg-before-blue-steel:before,\n.bg-after-blue-steel:after {\n  background: #4B77BE !important; }\n\n.border-before-blue-steel:before,\n.border-after-blue-steel:after {\n  border-color: #4B77BE !important; }\n\n.border-top-before-blue-steel:before,\n.border-top-after-blue-steel:after {\n  border-top-color: #4B77BE !important; }\n\n.border-bottom-before-blue-steel:before,\n.border-bottom-after-blue-steel:after {\n  border-bottom-color: #4B77BE !important; }\n\n.border-left-before-blue-steel:before,\n.border-left-after-blue-steel:after {\n  border-left-color: #4B77BE !important; }\n\n.border-right-before-blue-steel:before,\n.border-right-after-blue-steel:after {\n  border-right-color: #4B77BE !important; }\n\n.bg-blue-soft {\n  background: #4c87b9 !important; }\n\n.bg-blue-soft-opacity {\n  background: rgba(76, 135, 185, 0.8) !important; }\n\n.bg-hover-blue-soft:hover {\n  background: #4c87b9 !important; }\n\n.font-blue-soft {\n  color: #4c87b9 !important; }\n\n.bg-font-blue-soft {\n  color: #FFFFFF !important; }\n\n.border-blue-soft {\n  border-color: #4c87b9 !important; }\n\n.border-top-blue-soft {\n  border-top-color: #4c87b9 !important; }\n\n.border-bottom-blue-soft {\n  border-bottom-color: #4c87b9 !important; }\n\n.border-left-blue-soft {\n  border-left-color: #4c87b9 !important; }\n\n.border-right-blue-soft {\n  border-right-color: #4c87b9 !important; }\n\n.bg-before-blue-soft:before,\n.bg-after-blue-soft:after {\n  background: #4c87b9 !important; }\n\n.border-before-blue-soft:before,\n.border-after-blue-soft:after {\n  border-color: #4c87b9 !important; }\n\n.border-top-before-blue-soft:before,\n.border-top-after-blue-soft:after {\n  border-top-color: #4c87b9 !important; }\n\n.border-bottom-before-blue-soft:before,\n.border-bottom-after-blue-soft:after {\n  border-bottom-color: #4c87b9 !important; }\n\n.border-left-before-blue-soft:before,\n.border-left-after-blue-soft:after {\n  border-left-color: #4c87b9 !important; }\n\n.border-right-before-blue-soft:before,\n.border-right-after-blue-soft:after {\n  border-right-color: #4c87b9 !important; }\n\n.bg-blue-dark {\n  background: #5e738b !important; }\n\n.bg-blue-dark-opacity {\n  background: rgba(94, 115, 139, 0.8) !important; }\n\n.bg-hover-blue-dark:hover {\n  background: #5e738b !important; }\n\n.font-blue-dark {\n  color: #5e738b !important; }\n\n.bg-font-blue-dark {\n  color: #FFFFFF !important; }\n\n.border-blue-dark {\n  border-color: #5e738b !important; }\n\n.border-top-blue-dark {\n  border-top-color: #5e738b !important; }\n\n.border-bottom-blue-dark {\n  border-bottom-color: #5e738b !important; }\n\n.border-left-blue-dark {\n  border-left-color: #5e738b !important; }\n\n.border-right-blue-dark {\n  border-right-color: #5e738b !important; }\n\n.bg-before-blue-dark:before,\n.bg-after-blue-dark:after {\n  background: #5e738b !important; }\n\n.border-before-blue-dark:before,\n.border-after-blue-dark:after {\n  border-color: #5e738b !important; }\n\n.border-top-before-blue-dark:before,\n.border-top-after-blue-dark:after {\n  border-top-color: #5e738b !important; }\n\n.border-bottom-before-blue-dark:before,\n.border-bottom-after-blue-dark:after {\n  border-bottom-color: #5e738b !important; }\n\n.border-left-before-blue-dark:before,\n.border-left-after-blue-dark:after {\n  border-left-color: #5e738b !important; }\n\n.border-right-before-blue-dark:before,\n.border-right-after-blue-dark:after {\n  border-right-color: #5e738b !important; }\n\n.bg-blue-sharp {\n  background: #5C9BD1 !important; }\n\n.bg-blue-sharp-opacity {\n  background: rgba(92, 155, 209, 0.8) !important; }\n\n.bg-hover-blue-sharp:hover {\n  background: #5C9BD1 !important; }\n\n.font-blue-sharp {\n  color: #5C9BD1 !important; }\n\n.bg-font-blue-sharp {\n  color: #FFFFFF !important; }\n\n.border-blue-sharp {\n  border-color: #5C9BD1 !important; }\n\n.border-top-blue-sharp {\n  border-top-color: #5C9BD1 !important; }\n\n.border-bottom-blue-sharp {\n  border-bottom-color: #5C9BD1 !important; }\n\n.border-left-blue-sharp {\n  border-left-color: #5C9BD1 !important; }\n\n.border-right-blue-sharp {\n  border-right-color: #5C9BD1 !important; }\n\n.bg-before-blue-sharp:before,\n.bg-after-blue-sharp:after {\n  background: #5C9BD1 !important; }\n\n.border-before-blue-sharp:before,\n.border-after-blue-sharp:after {\n  border-color: #5C9BD1 !important; }\n\n.border-top-before-blue-sharp:before,\n.border-top-after-blue-sharp:after {\n  border-top-color: #5C9BD1 !important; }\n\n.border-bottom-before-blue-sharp:before,\n.border-bottom-after-blue-sharp:after {\n  border-bottom-color: #5C9BD1 !important; }\n\n.border-left-before-blue-sharp:before,\n.border-left-after-blue-sharp:after {\n  border-left-color: #5C9BD1 !important; }\n\n.border-right-before-blue-sharp:before,\n.border-right-after-blue-sharp:after {\n  border-right-color: #5C9BD1 !important; }\n\n.bg-green {\n  background: #32c5d2 !important; }\n\n.bg-green-opacity {\n  background: rgba(50, 197, 210, 0.8) !important; }\n\n.bg-hover-green:hover {\n  background: #32c5d2 !important; }\n\n.font-green {\n  color: #32c5d2 !important; }\n\n.bg-font-green {\n  color: #FFFFFF !important; }\n\n.border-green {\n  border-color: #32c5d2 !important; }\n\n.border-top-green {\n  border-top-color: #32c5d2 !important; }\n\n.border-bottom-green {\n  border-bottom-color: #32c5d2 !important; }\n\n.border-left-green {\n  border-left-color: #32c5d2 !important; }\n\n.border-right-green {\n  border-right-color: #32c5d2 !important; }\n\n.bg-before-green:before,\n.bg-after-green:after {\n  background: #32c5d2 !important; }\n\n.border-before-green:before,\n.border-after-green:after {\n  border-color: #32c5d2 !important; }\n\n.border-top-before-green:before,\n.border-top-after-green:after {\n  border-top-color: #32c5d2 !important; }\n\n.border-bottom-before-green:before,\n.border-bottom-after-green:after {\n  border-bottom-color: #32c5d2 !important; }\n\n.border-left-before-green:before,\n.border-left-after-green:after {\n  border-left-color: #32c5d2 !important; }\n\n.border-right-before-green:before,\n.border-right-after-green:after {\n  border-right-color: #32c5d2 !important; }\n\n.bg-green-meadow {\n  background: #1BBC9B !important; }\n\n.bg-green-meadow-opacity {\n  background: rgba(27, 188, 155, 0.8) !important; }\n\n.bg-hover-green-meadow:hover {\n  background: #1BBC9B !important; }\n\n.font-green-meadow {\n  color: #1BBC9B !important; }\n\n.bg-font-green-meadow {\n  color: #FFFFFF !important; }\n\n.border-green-meadow {\n  border-color: #1BBC9B !important; }\n\n.border-top-green-meadow {\n  border-top-color: #1BBC9B !important; }\n\n.border-bottom-green-meadow {\n  border-bottom-color: #1BBC9B !important; }\n\n.border-left-green-meadow {\n  border-left-color: #1BBC9B !important; }\n\n.border-right-green-meadow {\n  border-right-color: #1BBC9B !important; }\n\n.bg-before-green-meadow:before,\n.bg-after-green-meadow:after {\n  background: #1BBC9B !important; }\n\n.border-before-green-meadow:before,\n.border-after-green-meadow:after {\n  border-color: #1BBC9B !important; }\n\n.border-top-before-green-meadow:before,\n.border-top-after-green-meadow:after {\n  border-top-color: #1BBC9B !important; }\n\n.border-bottom-before-green-meadow:before,\n.border-bottom-after-green-meadow:after {\n  border-bottom-color: #1BBC9B !important; }\n\n.border-left-before-green-meadow:before,\n.border-left-after-green-meadow:after {\n  border-left-color: #1BBC9B !important; }\n\n.border-right-before-green-meadow:before,\n.border-right-after-green-meadow:after {\n  border-right-color: #1BBC9B !important; }\n\n.bg-green-seagreen {\n  background: #1BA39C !important; }\n\n.bg-green-seagreen-opacity {\n  background: rgba(27, 163, 156, 0.8) !important; }\n\n.bg-hover-green-seagreen:hover {\n  background: #1BA39C !important; }\n\n.font-green-seagreen {\n  color: #1BA39C !important; }\n\n.bg-font-green-seagreen {\n  color: #FFFFFF !important; }\n\n.border-green-seagreen {\n  border-color: #1BA39C !important; }\n\n.border-top-green-seagreen {\n  border-top-color: #1BA39C !important; }\n\n.border-bottom-green-seagreen {\n  border-bottom-color: #1BA39C !important; }\n\n.border-left-green-seagreen {\n  border-left-color: #1BA39C !important; }\n\n.border-right-green-seagreen {\n  border-right-color: #1BA39C !important; }\n\n.bg-before-green-seagreen:before,\n.bg-after-green-seagreen:after {\n  background: #1BA39C !important; }\n\n.border-before-green-seagreen:before,\n.border-after-green-seagreen:after {\n  border-color: #1BA39C !important; }\n\n.border-top-before-green-seagreen:before,\n.border-top-after-green-seagreen:after {\n  border-top-color: #1BA39C !important; }\n\n.border-bottom-before-green-seagreen:before,\n.border-bottom-after-green-seagreen:after {\n  border-bottom-color: #1BA39C !important; }\n\n.border-left-before-green-seagreen:before,\n.border-left-after-green-seagreen:after {\n  border-left-color: #1BA39C !important; }\n\n.border-right-before-green-seagreen:before,\n.border-right-after-green-seagreen:after {\n  border-right-color: #1BA39C !important; }\n\n.bg-green-turquoise {\n  background: #36D7B7 !important; }\n\n.bg-green-turquoise-opacity {\n  background: rgba(54, 215, 183, 0.8) !important; }\n\n.bg-hover-green-turquoise:hover {\n  background: #36D7B7 !important; }\n\n.font-green-turquoise {\n  color: #36D7B7 !important; }\n\n.bg-font-green-turquoise {\n  color: #FFFFFF !important; }\n\n.border-green-turquoise {\n  border-color: #36D7B7 !important; }\n\n.border-top-green-turquoise {\n  border-top-color: #36D7B7 !important; }\n\n.border-bottom-green-turquoise {\n  border-bottom-color: #36D7B7 !important; }\n\n.border-left-green-turquoise {\n  border-left-color: #36D7B7 !important; }\n\n.border-right-green-turquoise {\n  border-right-color: #36D7B7 !important; }\n\n.bg-before-green-turquoise:before,\n.bg-after-green-turquoise:after {\n  background: #36D7B7 !important; }\n\n.border-before-green-turquoise:before,\n.border-after-green-turquoise:after {\n  border-color: #36D7B7 !important; }\n\n.border-top-before-green-turquoise:before,\n.border-top-after-green-turquoise:after {\n  border-top-color: #36D7B7 !important; }\n\n.border-bottom-before-green-turquoise:before,\n.border-bottom-after-green-turquoise:after {\n  border-bottom-color: #36D7B7 !important; }\n\n.border-left-before-green-turquoise:before,\n.border-left-after-green-turquoise:after {\n  border-left-color: #36D7B7 !important; }\n\n.border-right-before-green-turquoise:before,\n.border-right-after-green-turquoise:after {\n  border-right-color: #36D7B7 !important; }\n\n.bg-green-haze {\n  background: #44b6ae !important; }\n\n.bg-green-haze-opacity {\n  background: rgba(68, 182, 174, 0.8) !important; }\n\n.bg-hover-green-haze:hover {\n  background: #44b6ae !important; }\n\n.font-green-haze {\n  color: #44b6ae !important; }\n\n.bg-font-green-haze {\n  color: #FFFFFF !important; }\n\n.border-green-haze {\n  border-color: #44b6ae !important; }\n\n.border-top-green-haze {\n  border-top-color: #44b6ae !important; }\n\n.border-bottom-green-haze {\n  border-bottom-color: #44b6ae !important; }\n\n.border-left-green-haze {\n  border-left-color: #44b6ae !important; }\n\n.border-right-green-haze {\n  border-right-color: #44b6ae !important; }\n\n.bg-before-green-haze:before,\n.bg-after-green-haze:after {\n  background: #44b6ae !important; }\n\n.border-before-green-haze:before,\n.border-after-green-haze:after {\n  border-color: #44b6ae !important; }\n\n.border-top-before-green-haze:before,\n.border-top-after-green-haze:after {\n  border-top-color: #44b6ae !important; }\n\n.border-bottom-before-green-haze:before,\n.border-bottom-after-green-haze:after {\n  border-bottom-color: #44b6ae !important; }\n\n.border-left-before-green-haze:before,\n.border-left-after-green-haze:after {\n  border-left-color: #44b6ae !important; }\n\n.border-right-before-green-haze:before,\n.border-right-after-green-haze:after {\n  border-right-color: #44b6ae !important; }\n\n.bg-green-jungle {\n  background: #26C281 !important; }\n\n.bg-green-jungle-opacity {\n  background: rgba(38, 194, 129, 0.8) !important; }\n\n.bg-hover-green-jungle:hover {\n  background: #26C281 !important; }\n\n.font-green-jungle {\n  color: #26C281 !important; }\n\n.bg-font-green-jungle {\n  color: #FFFFFF !important; }\n\n.border-green-jungle {\n  border-color: #26C281 !important; }\n\n.border-top-green-jungle {\n  border-top-color: #26C281 !important; }\n\n.border-bottom-green-jungle {\n  border-bottom-color: #26C281 !important; }\n\n.border-left-green-jungle {\n  border-left-color: #26C281 !important; }\n\n.border-right-green-jungle {\n  border-right-color: #26C281 !important; }\n\n.bg-before-green-jungle:before,\n.bg-after-green-jungle:after {\n  background: #26C281 !important; }\n\n.border-before-green-jungle:before,\n.border-after-green-jungle:after {\n  border-color: #26C281 !important; }\n\n.border-top-before-green-jungle:before,\n.border-top-after-green-jungle:after {\n  border-top-color: #26C281 !important; }\n\n.border-bottom-before-green-jungle:before,\n.border-bottom-after-green-jungle:after {\n  border-bottom-color: #26C281 !important; }\n\n.border-left-before-green-jungle:before,\n.border-left-after-green-jungle:after {\n  border-left-color: #26C281 !important; }\n\n.border-right-before-green-jungle:before,\n.border-right-after-green-jungle:after {\n  border-right-color: #26C281 !important; }\n\n.bg-green-soft {\n  background: #3faba4 !important; }\n\n.bg-green-soft-opacity {\n  background: rgba(63, 171, 164, 0.8) !important; }\n\n.bg-hover-green-soft:hover {\n  background: #3faba4 !important; }\n\n.font-green-soft {\n  color: #3faba4 !important; }\n\n.bg-font-green-soft {\n  color: #FFFFFF !important; }\n\n.border-green-soft {\n  border-color: #3faba4 !important; }\n\n.border-top-green-soft {\n  border-top-color: #3faba4 !important; }\n\n.border-bottom-green-soft {\n  border-bottom-color: #3faba4 !important; }\n\n.border-left-green-soft {\n  border-left-color: #3faba4 !important; }\n\n.border-right-green-soft {\n  border-right-color: #3faba4 !important; }\n\n.bg-before-green-soft:before,\n.bg-after-green-soft:after {\n  background: #3faba4 !important; }\n\n.border-before-green-soft:before,\n.border-after-green-soft:after {\n  border-color: #3faba4 !important; }\n\n.border-top-before-green-soft:before,\n.border-top-after-green-soft:after {\n  border-top-color: #3faba4 !important; }\n\n.border-bottom-before-green-soft:before,\n.border-bottom-after-green-soft:after {\n  border-bottom-color: #3faba4 !important; }\n\n.border-left-before-green-soft:before,\n.border-left-after-green-soft:after {\n  border-left-color: #3faba4 !important; }\n\n.border-right-before-green-soft:before,\n.border-right-after-green-soft:after {\n  border-right-color: #3faba4 !important; }\n\n.bg-green-dark {\n  background: #4DB3A2 !important; }\n\n.bg-green-dark-opacity {\n  background: rgba(77, 179, 162, 0.8) !important; }\n\n.bg-hover-green-dark:hover {\n  background: #4DB3A2 !important; }\n\n.font-green-dark {\n  color: #4DB3A2 !important; }\n\n.bg-font-green-dark {\n  color: #FFFFFF !important; }\n\n.border-green-dark {\n  border-color: #4DB3A2 !important; }\n\n.border-top-green-dark {\n  border-top-color: #4DB3A2 !important; }\n\n.border-bottom-green-dark {\n  border-bottom-color: #4DB3A2 !important; }\n\n.border-left-green-dark {\n  border-left-color: #4DB3A2 !important; }\n\n.border-right-green-dark {\n  border-right-color: #4DB3A2 !important; }\n\n.bg-before-green-dark:before,\n.bg-after-green-dark:after {\n  background: #4DB3A2 !important; }\n\n.border-before-green-dark:before,\n.border-after-green-dark:after {\n  border-color: #4DB3A2 !important; }\n\n.border-top-before-green-dark:before,\n.border-top-after-green-dark:after {\n  border-top-color: #4DB3A2 !important; }\n\n.border-bottom-before-green-dark:before,\n.border-bottom-after-green-dark:after {\n  border-bottom-color: #4DB3A2 !important; }\n\n.border-left-before-green-dark:before,\n.border-left-after-green-dark:after {\n  border-left-color: #4DB3A2 !important; }\n\n.border-right-before-green-dark:before,\n.border-right-after-green-dark:after {\n  border-right-color: #4DB3A2 !important; }\n\n.bg-green-sharp {\n  background: #2ab4c0 !important; }\n\n.bg-green-sharp-opacity {\n  background: rgba(42, 180, 192, 0.8) !important; }\n\n.bg-hover-green-sharp:hover {\n  background: #2ab4c0 !important; }\n\n.font-green-sharp {\n  color: #2ab4c0 !important; }\n\n.bg-font-green-sharp {\n  color: #FFFFFF !important; }\n\n.border-green-sharp {\n  border-color: #2ab4c0 !important; }\n\n.border-top-green-sharp {\n  border-top-color: #2ab4c0 !important; }\n\n.border-bottom-green-sharp {\n  border-bottom-color: #2ab4c0 !important; }\n\n.border-left-green-sharp {\n  border-left-color: #2ab4c0 !important; }\n\n.border-right-green-sharp {\n  border-right-color: #2ab4c0 !important; }\n\n.bg-before-green-sharp:before,\n.bg-after-green-sharp:after {\n  background: #2ab4c0 !important; }\n\n.border-before-green-sharp:before,\n.border-after-green-sharp:after {\n  border-color: #2ab4c0 !important; }\n\n.border-top-before-green-sharp:before,\n.border-top-after-green-sharp:after {\n  border-top-color: #2ab4c0 !important; }\n\n.border-bottom-before-green-sharp:before,\n.border-bottom-after-green-sharp:after {\n  border-bottom-color: #2ab4c0 !important; }\n\n.border-left-before-green-sharp:before,\n.border-left-after-green-sharp:after {\n  border-left-color: #2ab4c0 !important; }\n\n.border-right-before-green-sharp:before,\n.border-right-after-green-sharp:after {\n  border-right-color: #2ab4c0 !important; }\n\n.bg-grey {\n  background: #E5E5E5 !important; }\n\n.bg-grey-opacity {\n  background: rgba(229, 229, 229, 0.8) !important; }\n\n.bg-hover-grey:hover {\n  background: #E5E5E5 !important; }\n\n.font-grey {\n  color: #E5E5E5 !important; }\n\n.bg-font-grey {\n  color: #333333 !important; }\n\n.border-grey {\n  border-color: #E5E5E5 !important; }\n\n.border-top-grey {\n  border-top-color: #E5E5E5 !important; }\n\n.border-bottom-grey {\n  border-bottom-color: #E5E5E5 !important; }\n\n.border-left-grey {\n  border-left-color: #E5E5E5 !important; }\n\n.border-right-grey {\n  border-right-color: #E5E5E5 !important; }\n\n.bg-before-grey:before,\n.bg-after-grey:after {\n  background: #E5E5E5 !important; }\n\n.border-before-grey:before,\n.border-after-grey:after {\n  border-color: #E5E5E5 !important; }\n\n.border-top-before-grey:before,\n.border-top-after-grey:after {\n  border-top-color: #E5E5E5 !important; }\n\n.border-bottom-before-grey:before,\n.border-bottom-after-grey:after {\n  border-bottom-color: #E5E5E5 !important; }\n\n.border-left-before-grey:before,\n.border-left-after-grey:after {\n  border-left-color: #E5E5E5 !important; }\n\n.border-right-before-grey:before,\n.border-right-after-grey:after {\n  border-right-color: #E5E5E5 !important; }\n\n.bg-grey-steel {\n  background: #e9edef !important; }\n\n.bg-grey-steel-opacity {\n  background: rgba(233, 237, 239, 0.8) !important; }\n\n.bg-hover-grey-steel:hover {\n  background: #e9edef !important; }\n\n.font-grey-steel {\n  color: #e9edef !important; }\n\n.bg-font-grey-steel {\n  color: #80898e !important; }\n\n.border-grey-steel {\n  border-color: #e9edef !important; }\n\n.border-top-grey-steel {\n  border-top-color: #e9edef !important; }\n\n.border-bottom-grey-steel {\n  border-bottom-color: #e9edef !important; }\n\n.border-left-grey-steel {\n  border-left-color: #e9edef !important; }\n\n.border-right-grey-steel {\n  border-right-color: #e9edef !important; }\n\n.bg-before-grey-steel:before,\n.bg-after-grey-steel:after {\n  background: #e9edef !important; }\n\n.border-before-grey-steel:before,\n.border-after-grey-steel:after {\n  border-color: #e9edef !important; }\n\n.border-top-before-grey-steel:before,\n.border-top-after-grey-steel:after {\n  border-top-color: #e9edef !important; }\n\n.border-bottom-before-grey-steel:before,\n.border-bottom-after-grey-steel:after {\n  border-bottom-color: #e9edef !important; }\n\n.border-left-before-grey-steel:before,\n.border-left-after-grey-steel:after {\n  border-left-color: #e9edef !important; }\n\n.border-right-before-grey-steel:before,\n.border-right-after-grey-steel:after {\n  border-right-color: #e9edef !important; }\n\n.bg-grey-cararra {\n  background: #fafafa !important; }\n\n.bg-grey-cararra-opacity {\n  background: rgba(250, 250, 250, 0.8) !important; }\n\n.bg-hover-grey-cararra:hover {\n  background: #fafafa !important; }\n\n.font-grey-cararra {\n  color: #fafafa !important; }\n\n.bg-font-grey-cararra {\n  color: #333333 !important; }\n\n.border-grey-cararra {\n  border-color: #fafafa !important; }\n\n.border-top-grey-cararra {\n  border-top-color: #fafafa !important; }\n\n.border-bottom-grey-cararra {\n  border-bottom-color: #fafafa !important; }\n\n.border-left-grey-cararra {\n  border-left-color: #fafafa !important; }\n\n.border-right-grey-cararra {\n  border-right-color: #fafafa !important; }\n\n.bg-before-grey-cararra:before,\n.bg-after-grey-cararra:after {\n  background: #fafafa !important; }\n\n.border-before-grey-cararra:before,\n.border-after-grey-cararra:after {\n  border-color: #fafafa !important; }\n\n.border-top-before-grey-cararra:before,\n.border-top-after-grey-cararra:after {\n  border-top-color: #fafafa !important; }\n\n.border-bottom-before-grey-cararra:before,\n.border-bottom-after-grey-cararra:after {\n  border-bottom-color: #fafafa !important; }\n\n.border-left-before-grey-cararra:before,\n.border-left-after-grey-cararra:after {\n  border-left-color: #fafafa !important; }\n\n.border-right-before-grey-cararra:before,\n.border-right-after-grey-cararra:after {\n  border-right-color: #fafafa !important; }\n\n.bg-grey-gallery {\n  background: #555555 !important; }\n\n.bg-grey-gallery-opacity {\n  background: rgba(85, 85, 85, 0.8) !important; }\n\n.bg-hover-grey-gallery:hover {\n  background: #555555 !important; }\n\n.font-grey-gallery {\n  color: #555555 !important; }\n\n.bg-font-grey-gallery {\n  color: #ffffff !important; }\n\n.border-grey-gallery {\n  border-color: #555555 !important; }\n\n.border-top-grey-gallery {\n  border-top-color: #555555 !important; }\n\n.border-bottom-grey-gallery {\n  border-bottom-color: #555555 !important; }\n\n.border-left-grey-gallery {\n  border-left-color: #555555 !important; }\n\n.border-right-grey-gallery {\n  border-right-color: #555555 !important; }\n\n.bg-before-grey-gallery:before,\n.bg-after-grey-gallery:after {\n  background: #555555 !important; }\n\n.border-before-grey-gallery:before,\n.border-after-grey-gallery:after {\n  border-color: #555555 !important; }\n\n.border-top-before-grey-gallery:before,\n.border-top-after-grey-gallery:after {\n  border-top-color: #555555 !important; }\n\n.border-bottom-before-grey-gallery:before,\n.border-bottom-after-grey-gallery:after {\n  border-bottom-color: #555555 !important; }\n\n.border-left-before-grey-gallery:before,\n.border-left-after-grey-gallery:after {\n  border-left-color: #555555 !important; }\n\n.border-right-before-grey-gallery:before,\n.border-right-after-grey-gallery:after {\n  border-right-color: #555555 !important; }\n\n.bg-grey-cascade {\n  background: #95A5A6 !important; }\n\n.bg-grey-cascade-opacity {\n  background: rgba(149, 165, 166, 0.8) !important; }\n\n.bg-hover-grey-cascade:hover {\n  background: #95A5A6 !important; }\n\n.font-grey-cascade {\n  color: #95A5A6 !important; }\n\n.bg-font-grey-cascade {\n  color: #FFFFFF !important; }\n\n.border-grey-cascade {\n  border-color: #95A5A6 !important; }\n\n.border-top-grey-cascade {\n  border-top-color: #95A5A6 !important; }\n\n.border-bottom-grey-cascade {\n  border-bottom-color: #95A5A6 !important; }\n\n.border-left-grey-cascade {\n  border-left-color: #95A5A6 !important; }\n\n.border-right-grey-cascade {\n  border-right-color: #95A5A6 !important; }\n\n.bg-before-grey-cascade:before,\n.bg-after-grey-cascade:after {\n  background: #95A5A6 !important; }\n\n.border-before-grey-cascade:before,\n.border-after-grey-cascade:after {\n  border-color: #95A5A6 !important; }\n\n.border-top-before-grey-cascade:before,\n.border-top-after-grey-cascade:after {\n  border-top-color: #95A5A6 !important; }\n\n.border-bottom-before-grey-cascade:before,\n.border-bottom-after-grey-cascade:after {\n  border-bottom-color: #95A5A6 !important; }\n\n.border-left-before-grey-cascade:before,\n.border-left-after-grey-cascade:after {\n  border-left-color: #95A5A6 !important; }\n\n.border-right-before-grey-cascade:before,\n.border-right-after-grey-cascade:after {\n  border-right-color: #95A5A6 !important; }\n\n.bg-grey-silver {\n  background: #BFBFBF !important; }\n\n.bg-grey-silver-opacity {\n  background: rgba(191, 191, 191, 0.8) !important; }\n\n.bg-hover-grey-silver:hover {\n  background: #BFBFBF !important; }\n\n.font-grey-silver {\n  color: #BFBFBF !important; }\n\n.bg-font-grey-silver {\n  color: #FAFCFB !important; }\n\n.border-grey-silver {\n  border-color: #BFBFBF !important; }\n\n.border-top-grey-silver {\n  border-top-color: #BFBFBF !important; }\n\n.border-bottom-grey-silver {\n  border-bottom-color: #BFBFBF !important; }\n\n.border-left-grey-silver {\n  border-left-color: #BFBFBF !important; }\n\n.border-right-grey-silver {\n  border-right-color: #BFBFBF !important; }\n\n.bg-before-grey-silver:before,\n.bg-after-grey-silver:after {\n  background: #BFBFBF !important; }\n\n.border-before-grey-silver:before,\n.border-after-grey-silver:after {\n  border-color: #BFBFBF !important; }\n\n.border-top-before-grey-silver:before,\n.border-top-after-grey-silver:after {\n  border-top-color: #BFBFBF !important; }\n\n.border-bottom-before-grey-silver:before,\n.border-bottom-after-grey-silver:after {\n  border-bottom-color: #BFBFBF !important; }\n\n.border-left-before-grey-silver:before,\n.border-left-after-grey-silver:after {\n  border-left-color: #BFBFBF !important; }\n\n.border-right-before-grey-silver:before,\n.border-right-after-grey-silver:after {\n  border-right-color: #BFBFBF !important; }\n\n.bg-grey-salsa {\n  background: #ACB5C3 !important; }\n\n.bg-grey-salsa-opacity {\n  background: rgba(172, 181, 195, 0.8) !important; }\n\n.bg-hover-grey-salsa:hover {\n  background: #ACB5C3 !important; }\n\n.font-grey-salsa {\n  color: #ACB5C3 !important; }\n\n.bg-font-grey-salsa {\n  color: #FAFCFB !important; }\n\n.border-grey-salsa {\n  border-color: #ACB5C3 !important; }\n\n.border-top-grey-salsa {\n  border-top-color: #ACB5C3 !important; }\n\n.border-bottom-grey-salsa {\n  border-bottom-color: #ACB5C3 !important; }\n\n.border-left-grey-salsa {\n  border-left-color: #ACB5C3 !important; }\n\n.border-right-grey-salsa {\n  border-right-color: #ACB5C3 !important; }\n\n.bg-before-grey-salsa:before,\n.bg-after-grey-salsa:after {\n  background: #ACB5C3 !important; }\n\n.border-before-grey-salsa:before,\n.border-after-grey-salsa:after {\n  border-color: #ACB5C3 !important; }\n\n.border-top-before-grey-salsa:before,\n.border-top-after-grey-salsa:after {\n  border-top-color: #ACB5C3 !important; }\n\n.border-bottom-before-grey-salsa:before,\n.border-bottom-after-grey-salsa:after {\n  border-bottom-color: #ACB5C3 !important; }\n\n.border-left-before-grey-salsa:before,\n.border-left-after-grey-salsa:after {\n  border-left-color: #ACB5C3 !important; }\n\n.border-right-before-grey-salsa:before,\n.border-right-after-grey-salsa:after {\n  border-right-color: #ACB5C3 !important; }\n\n.bg-grey-salt {\n  background: #bfcad1 !important; }\n\n.bg-grey-salt-opacity {\n  background: rgba(191, 202, 209, 0.8) !important; }\n\n.bg-hover-grey-salt:hover {\n  background: #bfcad1 !important; }\n\n.font-grey-salt {\n  color: #bfcad1 !important; }\n\n.bg-font-grey-salt {\n  color: #FAFCFB !important; }\n\n.border-grey-salt {\n  border-color: #bfcad1 !important; }\n\n.border-top-grey-salt {\n  border-top-color: #bfcad1 !important; }\n\n.border-bottom-grey-salt {\n  border-bottom-color: #bfcad1 !important; }\n\n.border-left-grey-salt {\n  border-left-color: #bfcad1 !important; }\n\n.border-right-grey-salt {\n  border-right-color: #bfcad1 !important; }\n\n.bg-before-grey-salt:before,\n.bg-after-grey-salt:after {\n  background: #bfcad1 !important; }\n\n.border-before-grey-salt:before,\n.border-after-grey-salt:after {\n  border-color: #bfcad1 !important; }\n\n.border-top-before-grey-salt:before,\n.border-top-after-grey-salt:after {\n  border-top-color: #bfcad1 !important; }\n\n.border-bottom-before-grey-salt:before,\n.border-bottom-after-grey-salt:after {\n  border-bottom-color: #bfcad1 !important; }\n\n.border-left-before-grey-salt:before,\n.border-left-after-grey-salt:after {\n  border-left-color: #bfcad1 !important; }\n\n.border-right-before-grey-salt:before,\n.border-right-after-grey-salt:after {\n  border-right-color: #bfcad1 !important; }\n\n.bg-grey-mint {\n  background: #525e64 !important; }\n\n.bg-grey-mint-opacity {\n  background: rgba(82, 94, 100, 0.8) !important; }\n\n.bg-hover-grey-mint:hover {\n  background: #525e64 !important; }\n\n.font-grey-mint {\n  color: #525e64 !important; }\n\n.bg-font-grey-mint {\n  color: #FFFFFF !important; }\n\n.border-grey-mint {\n  border-color: #525e64 !important; }\n\n.border-top-grey-mint {\n  border-top-color: #525e64 !important; }\n\n.border-bottom-grey-mint {\n  border-bottom-color: #525e64 !important; }\n\n.border-left-grey-mint {\n  border-left-color: #525e64 !important; }\n\n.border-right-grey-mint {\n  border-right-color: #525e64 !important; }\n\n.bg-before-grey-mint:before,\n.bg-after-grey-mint:after {\n  background: #525e64 !important; }\n\n.border-before-grey-mint:before,\n.border-after-grey-mint:after {\n  border-color: #525e64 !important; }\n\n.border-top-before-grey-mint:before,\n.border-top-after-grey-mint:after {\n  border-top-color: #525e64 !important; }\n\n.border-bottom-before-grey-mint:before,\n.border-bottom-after-grey-mint:after {\n  border-bottom-color: #525e64 !important; }\n\n.border-left-before-grey-mint:before,\n.border-left-after-grey-mint:after {\n  border-left-color: #525e64 !important; }\n\n.border-right-before-grey-mint:before,\n.border-right-after-grey-mint:after {\n  border-right-color: #525e64 !important; }\n\n.bg-red {\n  background: #e7505a !important; }\n\n.bg-red-opacity {\n  background: rgba(231, 80, 90, 0.8) !important; }\n\n.bg-hover-red:hover {\n  background: #e7505a !important; }\n\n.font-red {\n  color: #e7505a !important; }\n\n.bg-font-red {\n  color: #ffffff !important; }\n\n.border-red {\n  border-color: #e7505a !important; }\n\n.border-top-red {\n  border-top-color: #e7505a !important; }\n\n.border-bottom-red {\n  border-bottom-color: #e7505a !important; }\n\n.border-left-red {\n  border-left-color: #e7505a !important; }\n\n.border-right-red {\n  border-right-color: #e7505a !important; }\n\n.bg-before-red:before,\n.bg-after-red:after {\n  background: #e7505a !important; }\n\n.border-before-red:before,\n.border-after-red:after {\n  border-color: #e7505a !important; }\n\n.border-top-before-red:before,\n.border-top-after-red:after {\n  border-top-color: #e7505a !important; }\n\n.border-bottom-before-red:before,\n.border-bottom-after-red:after {\n  border-bottom-color: #e7505a !important; }\n\n.border-left-before-red:before,\n.border-left-after-red:after {\n  border-left-color: #e7505a !important; }\n\n.border-right-before-red:before,\n.border-right-after-red:after {\n  border-right-color: #e7505a !important; }\n\n.bg-red-pink {\n  background: #E08283 !important; }\n\n.bg-red-pink-opacity {\n  background: rgba(224, 130, 131, 0.8) !important; }\n\n.bg-hover-red-pink:hover {\n  background: #E08283 !important; }\n\n.font-red-pink {\n  color: #E08283 !important; }\n\n.bg-font-red-pink {\n  color: #ffffff !important; }\n\n.border-red-pink {\n  border-color: #E08283 !important; }\n\n.border-top-red-pink {\n  border-top-color: #E08283 !important; }\n\n.border-bottom-red-pink {\n  border-bottom-color: #E08283 !important; }\n\n.border-left-red-pink {\n  border-left-color: #E08283 !important; }\n\n.border-right-red-pink {\n  border-right-color: #E08283 !important; }\n\n.bg-before-red-pink:before,\n.bg-after-red-pink:after {\n  background: #E08283 !important; }\n\n.border-before-red-pink:before,\n.border-after-red-pink:after {\n  border-color: #E08283 !important; }\n\n.border-top-before-red-pink:before,\n.border-top-after-red-pink:after {\n  border-top-color: #E08283 !important; }\n\n.border-bottom-before-red-pink:before,\n.border-bottom-after-red-pink:after {\n  border-bottom-color: #E08283 !important; }\n\n.border-left-before-red-pink:before,\n.border-left-after-red-pink:after {\n  border-left-color: #E08283 !important; }\n\n.border-right-before-red-pink:before,\n.border-right-after-red-pink:after {\n  border-right-color: #E08283 !important; }\n\n.bg-red-sunglo {\n  background: #E26A6A !important; }\n\n.bg-red-sunglo-opacity {\n  background: rgba(226, 106, 106, 0.8) !important; }\n\n.bg-hover-red-sunglo:hover {\n  background: #E26A6A !important; }\n\n.font-red-sunglo {\n  color: #E26A6A !important; }\n\n.bg-font-red-sunglo {\n  color: #ffffff !important; }\n\n.border-red-sunglo {\n  border-color: #E26A6A !important; }\n\n.border-top-red-sunglo {\n  border-top-color: #E26A6A !important; }\n\n.border-bottom-red-sunglo {\n  border-bottom-color: #E26A6A !important; }\n\n.border-left-red-sunglo {\n  border-left-color: #E26A6A !important; }\n\n.border-right-red-sunglo {\n  border-right-color: #E26A6A !important; }\n\n.bg-before-red-sunglo:before,\n.bg-after-red-sunglo:after {\n  background: #E26A6A !important; }\n\n.border-before-red-sunglo:before,\n.border-after-red-sunglo:after {\n  border-color: #E26A6A !important; }\n\n.border-top-before-red-sunglo:before,\n.border-top-after-red-sunglo:after {\n  border-top-color: #E26A6A !important; }\n\n.border-bottom-before-red-sunglo:before,\n.border-bottom-after-red-sunglo:after {\n  border-bottom-color: #E26A6A !important; }\n\n.border-left-before-red-sunglo:before,\n.border-left-after-red-sunglo:after {\n  border-left-color: #E26A6A !important; }\n\n.border-right-before-red-sunglo:before,\n.border-right-after-red-sunglo:after {\n  border-right-color: #E26A6A !important; }\n\n.bg-red-intense {\n  background: #e35b5a !important; }\n\n.bg-red-intense-opacity {\n  background: rgba(227, 91, 90, 0.8) !important; }\n\n.bg-hover-red-intense:hover {\n  background: #e35b5a !important; }\n\n.font-red-intense {\n  color: #e35b5a !important; }\n\n.bg-font-red-intense {\n  color: #ffffff !important; }\n\n.border-red-intense {\n  border-color: #e35b5a !important; }\n\n.border-top-red-intense {\n  border-top-color: #e35b5a !important; }\n\n.border-bottom-red-intense {\n  border-bottom-color: #e35b5a !important; }\n\n.border-left-red-intense {\n  border-left-color: #e35b5a !important; }\n\n.border-right-red-intense {\n  border-right-color: #e35b5a !important; }\n\n.bg-before-red-intense:before,\n.bg-after-red-intense:after {\n  background: #e35b5a !important; }\n\n.border-before-red-intense:before,\n.border-after-red-intense:after {\n  border-color: #e35b5a !important; }\n\n.border-top-before-red-intense:before,\n.border-top-after-red-intense:after {\n  border-top-color: #e35b5a !important; }\n\n.border-bottom-before-red-intense:before,\n.border-bottom-after-red-intense:after {\n  border-bottom-color: #e35b5a !important; }\n\n.border-left-before-red-intense:before,\n.border-left-after-red-intense:after {\n  border-left-color: #e35b5a !important; }\n\n.border-right-before-red-intense:before,\n.border-right-after-red-intense:after {\n  border-right-color: #e35b5a !important; }\n\n.bg-red-thunderbird {\n  background: #D91E18 !important; }\n\n.bg-red-thunderbird-opacity {\n  background: rgba(217, 30, 24, 0.8) !important; }\n\n.bg-hover-red-thunderbird:hover {\n  background: #D91E18 !important; }\n\n.font-red-thunderbird {\n  color: #D91E18 !important; }\n\n.bg-font-red-thunderbird {\n  color: #ffffff !important; }\n\n.border-red-thunderbird {\n  border-color: #D91E18 !important; }\n\n.border-top-red-thunderbird {\n  border-top-color: #D91E18 !important; }\n\n.border-bottom-red-thunderbird {\n  border-bottom-color: #D91E18 !important; }\n\n.border-left-red-thunderbird {\n  border-left-color: #D91E18 !important; }\n\n.border-right-red-thunderbird {\n  border-right-color: #D91E18 !important; }\n\n.bg-before-red-thunderbird:before,\n.bg-after-red-thunderbird:after {\n  background: #D91E18 !important; }\n\n.border-before-red-thunderbird:before,\n.border-after-red-thunderbird:after {\n  border-color: #D91E18 !important; }\n\n.border-top-before-red-thunderbird:before,\n.border-top-after-red-thunderbird:after {\n  border-top-color: #D91E18 !important; }\n\n.border-bottom-before-red-thunderbird:before,\n.border-bottom-after-red-thunderbird:after {\n  border-bottom-color: #D91E18 !important; }\n\n.border-left-before-red-thunderbird:before,\n.border-left-after-red-thunderbird:after {\n  border-left-color: #D91E18 !important; }\n\n.border-right-before-red-thunderbird:before,\n.border-right-after-red-thunderbird:after {\n  border-right-color: #D91E18 !important; }\n\n.bg-red-flamingo {\n  background: #EF4836 !important; }\n\n.bg-red-flamingo-opacity {\n  background: rgba(239, 72, 54, 0.8) !important; }\n\n.bg-hover-red-flamingo:hover {\n  background: #EF4836 !important; }\n\n.font-red-flamingo {\n  color: #EF4836 !important; }\n\n.bg-font-red-flamingo {\n  color: #ffffff !important; }\n\n.border-red-flamingo {\n  border-color: #EF4836 !important; }\n\n.border-top-red-flamingo {\n  border-top-color: #EF4836 !important; }\n\n.border-bottom-red-flamingo {\n  border-bottom-color: #EF4836 !important; }\n\n.border-left-red-flamingo {\n  border-left-color: #EF4836 !important; }\n\n.border-right-red-flamingo {\n  border-right-color: #EF4836 !important; }\n\n.bg-before-red-flamingo:before,\n.bg-after-red-flamingo:after {\n  background: #EF4836 !important; }\n\n.border-before-red-flamingo:before,\n.border-after-red-flamingo:after {\n  border-color: #EF4836 !important; }\n\n.border-top-before-red-flamingo:before,\n.border-top-after-red-flamingo:after {\n  border-top-color: #EF4836 !important; }\n\n.border-bottom-before-red-flamingo:before,\n.border-bottom-after-red-flamingo:after {\n  border-bottom-color: #EF4836 !important; }\n\n.border-left-before-red-flamingo:before,\n.border-left-after-red-flamingo:after {\n  border-left-color: #EF4836 !important; }\n\n.border-right-before-red-flamingo:before,\n.border-right-after-red-flamingo:after {\n  border-right-color: #EF4836 !important; }\n\n.bg-red-soft {\n  background: #d05454 !important; }\n\n.bg-red-soft-opacity {\n  background: rgba(208, 84, 84, 0.8) !important; }\n\n.bg-hover-red-soft:hover {\n  background: #d05454 !important; }\n\n.font-red-soft {\n  color: #d05454 !important; }\n\n.bg-font-red-soft {\n  color: #ffffff !important; }\n\n.border-red-soft {\n  border-color: #d05454 !important; }\n\n.border-top-red-soft {\n  border-top-color: #d05454 !important; }\n\n.border-bottom-red-soft {\n  border-bottom-color: #d05454 !important; }\n\n.border-left-red-soft {\n  border-left-color: #d05454 !important; }\n\n.border-right-red-soft {\n  border-right-color: #d05454 !important; }\n\n.bg-before-red-soft:before,\n.bg-after-red-soft:after {\n  background: #d05454 !important; }\n\n.border-before-red-soft:before,\n.border-after-red-soft:after {\n  border-color: #d05454 !important; }\n\n.border-top-before-red-soft:before,\n.border-top-after-red-soft:after {\n  border-top-color: #d05454 !important; }\n\n.border-bottom-before-red-soft:before,\n.border-bottom-after-red-soft:after {\n  border-bottom-color: #d05454 !important; }\n\n.border-left-before-red-soft:before,\n.border-left-after-red-soft:after {\n  border-left-color: #d05454 !important; }\n\n.border-right-before-red-soft:before,\n.border-right-after-red-soft:after {\n  border-right-color: #d05454 !important; }\n\n.bg-red-haze {\n  background: #f36a5a !important; }\n\n.bg-red-haze-opacity {\n  background: rgba(243, 106, 90, 0.8) !important; }\n\n.bg-hover-red-haze:hover {\n  background: #f36a5a !important; }\n\n.font-red-haze {\n  color: #f36a5a !important; }\n\n.bg-font-red-haze {\n  color: #ffffff !important; }\n\n.border-red-haze {\n  border-color: #f36a5a !important; }\n\n.border-top-red-haze {\n  border-top-color: #f36a5a !important; }\n\n.border-bottom-red-haze {\n  border-bottom-color: #f36a5a !important; }\n\n.border-left-red-haze {\n  border-left-color: #f36a5a !important; }\n\n.border-right-red-haze {\n  border-right-color: #f36a5a !important; }\n\n.bg-before-red-haze:before,\n.bg-after-red-haze:after {\n  background: #f36a5a !important; }\n\n.border-before-red-haze:before,\n.border-after-red-haze:after {\n  border-color: #f36a5a !important; }\n\n.border-top-before-red-haze:before,\n.border-top-after-red-haze:after {\n  border-top-color: #f36a5a !important; }\n\n.border-bottom-before-red-haze:before,\n.border-bottom-after-red-haze:after {\n  border-bottom-color: #f36a5a !important; }\n\n.border-left-before-red-haze:before,\n.border-left-after-red-haze:after {\n  border-left-color: #f36a5a !important; }\n\n.border-right-before-red-haze:before,\n.border-right-after-red-haze:after {\n  border-right-color: #f36a5a !important; }\n\n.bg-red-mint {\n  background: #e43a45 !important; }\n\n.bg-red-mint-opacity {\n  background: rgba(228, 58, 69, 0.8) !important; }\n\n.bg-hover-red-mint:hover {\n  background: #e43a45 !important; }\n\n.font-red-mint {\n  color: #e43a45 !important; }\n\n.bg-font-red-mint {\n  color: #ffffff !important; }\n\n.border-red-mint {\n  border-color: #e43a45 !important; }\n\n.border-top-red-mint {\n  border-top-color: #e43a45 !important; }\n\n.border-bottom-red-mint {\n  border-bottom-color: #e43a45 !important; }\n\n.border-left-red-mint {\n  border-left-color: #e43a45 !important; }\n\n.border-right-red-mint {\n  border-right-color: #e43a45 !important; }\n\n.bg-before-red-mint:before,\n.bg-after-red-mint:after {\n  background: #e43a45 !important; }\n\n.border-before-red-mint:before,\n.border-after-red-mint:after {\n  border-color: #e43a45 !important; }\n\n.border-top-before-red-mint:before,\n.border-top-after-red-mint:after {\n  border-top-color: #e43a45 !important; }\n\n.border-bottom-before-red-mint:before,\n.border-bottom-after-red-mint:after {\n  border-bottom-color: #e43a45 !important; }\n\n.border-left-before-red-mint:before,\n.border-left-after-red-mint:after {\n  border-left-color: #e43a45 !important; }\n\n.border-right-before-red-mint:before,\n.border-right-after-red-mint:after {\n  border-right-color: #e43a45 !important; }\n\n.bg-yellow {\n  background: #c49f47 !important; }\n\n.bg-yellow-opacity {\n  background: rgba(196, 159, 71, 0.8) !important; }\n\n.bg-hover-yellow:hover {\n  background: #c49f47 !important; }\n\n.font-yellow {\n  color: #c49f47 !important; }\n\n.bg-font-yellow {\n  color: #ffffff !important; }\n\n.border-yellow {\n  border-color: #c49f47 !important; }\n\n.border-top-yellow {\n  border-top-color: #c49f47 !important; }\n\n.border-bottom-yellow {\n  border-bottom-color: #c49f47 !important; }\n\n.border-left-yellow {\n  border-left-color: #c49f47 !important; }\n\n.border-right-yellow {\n  border-right-color: #c49f47 !important; }\n\n.bg-before-yellow:before,\n.bg-after-yellow:after {\n  background: #c49f47 !important; }\n\n.border-before-yellow:before,\n.border-after-yellow:after {\n  border-color: #c49f47 !important; }\n\n.border-top-before-yellow:before,\n.border-top-after-yellow:after {\n  border-top-color: #c49f47 !important; }\n\n.border-bottom-before-yellow:before,\n.border-bottom-after-yellow:after {\n  border-bottom-color: #c49f47 !important; }\n\n.border-left-before-yellow:before,\n.border-left-after-yellow:after {\n  border-left-color: #c49f47 !important; }\n\n.border-right-before-yellow:before,\n.border-right-after-yellow:after {\n  border-right-color: #c49f47 !important; }\n\n.bg-yellow-gold {\n  background: #E87E04 !important; }\n\n.bg-yellow-gold-opacity {\n  background: rgba(232, 126, 4, 0.8) !important; }\n\n.bg-hover-yellow-gold:hover {\n  background: #E87E04 !important; }\n\n.font-yellow-gold {\n  color: #E87E04 !important; }\n\n.bg-font-yellow-gold {\n  color: #ffffff !important; }\n\n.border-yellow-gold {\n  border-color: #E87E04 !important; }\n\n.border-top-yellow-gold {\n  border-top-color: #E87E04 !important; }\n\n.border-bottom-yellow-gold {\n  border-bottom-color: #E87E04 !important; }\n\n.border-left-yellow-gold {\n  border-left-color: #E87E04 !important; }\n\n.border-right-yellow-gold {\n  border-right-color: #E87E04 !important; }\n\n.bg-before-yellow-gold:before,\n.bg-after-yellow-gold:after {\n  background: #E87E04 !important; }\n\n.border-before-yellow-gold:before,\n.border-after-yellow-gold:after {\n  border-color: #E87E04 !important; }\n\n.border-top-before-yellow-gold:before,\n.border-top-after-yellow-gold:after {\n  border-top-color: #E87E04 !important; }\n\n.border-bottom-before-yellow-gold:before,\n.border-bottom-after-yellow-gold:after {\n  border-bottom-color: #E87E04 !important; }\n\n.border-left-before-yellow-gold:before,\n.border-left-after-yellow-gold:after {\n  border-left-color: #E87E04 !important; }\n\n.border-right-before-yellow-gold:before,\n.border-right-after-yellow-gold:after {\n  border-right-color: #E87E04 !important; }\n\n.bg-yellow-casablanca {\n  background: #f2784b !important; }\n\n.bg-yellow-casablanca-opacity {\n  background: rgba(242, 120, 75, 0.8) !important; }\n\n.bg-hover-yellow-casablanca:hover {\n  background: #f2784b !important; }\n\n.font-yellow-casablanca {\n  color: #f2784b !important; }\n\n.bg-font-yellow-casablanca {\n  color: #ffffff !important; }\n\n.border-yellow-casablanca {\n  border-color: #f2784b !important; }\n\n.border-top-yellow-casablanca {\n  border-top-color: #f2784b !important; }\n\n.border-bottom-yellow-casablanca {\n  border-bottom-color: #f2784b !important; }\n\n.border-left-yellow-casablanca {\n  border-left-color: #f2784b !important; }\n\n.border-right-yellow-casablanca {\n  border-right-color: #f2784b !important; }\n\n.bg-before-yellow-casablanca:before,\n.bg-after-yellow-casablanca:after {\n  background: #f2784b !important; }\n\n.border-before-yellow-casablanca:before,\n.border-after-yellow-casablanca:after {\n  border-color: #f2784b !important; }\n\n.border-top-before-yellow-casablanca:before,\n.border-top-after-yellow-casablanca:after {\n  border-top-color: #f2784b !important; }\n\n.border-bottom-before-yellow-casablanca:before,\n.border-bottom-after-yellow-casablanca:after {\n  border-bottom-color: #f2784b !important; }\n\n.border-left-before-yellow-casablanca:before,\n.border-left-after-yellow-casablanca:after {\n  border-left-color: #f2784b !important; }\n\n.border-right-before-yellow-casablanca:before,\n.border-right-after-yellow-casablanca:after {\n  border-right-color: #f2784b !important; }\n\n.bg-yellow-crusta {\n  background: #f3c200 !important; }\n\n.bg-yellow-crusta-opacity {\n  background: rgba(243, 194, 0, 0.8) !important; }\n\n.bg-hover-yellow-crusta:hover {\n  background: #f3c200 !important; }\n\n.font-yellow-crusta {\n  color: #f3c200 !important; }\n\n.bg-font-yellow-crusta {\n  color: #ffffff !important; }\n\n.border-yellow-crusta {\n  border-color: #f3c200 !important; }\n\n.border-top-yellow-crusta {\n  border-top-color: #f3c200 !important; }\n\n.border-bottom-yellow-crusta {\n  border-bottom-color: #f3c200 !important; }\n\n.border-left-yellow-crusta {\n  border-left-color: #f3c200 !important; }\n\n.border-right-yellow-crusta {\n  border-right-color: #f3c200 !important; }\n\n.bg-before-yellow-crusta:before,\n.bg-after-yellow-crusta:after {\n  background: #f3c200 !important; }\n\n.border-before-yellow-crusta:before,\n.border-after-yellow-crusta:after {\n  border-color: #f3c200 !important; }\n\n.border-top-before-yellow-crusta:before,\n.border-top-after-yellow-crusta:after {\n  border-top-color: #f3c200 !important; }\n\n.border-bottom-before-yellow-crusta:before,\n.border-bottom-after-yellow-crusta:after {\n  border-bottom-color: #f3c200 !important; }\n\n.border-left-before-yellow-crusta:before,\n.border-left-after-yellow-crusta:after {\n  border-left-color: #f3c200 !important; }\n\n.border-right-before-yellow-crusta:before,\n.border-right-after-yellow-crusta:after {\n  border-right-color: #f3c200 !important; }\n\n.bg-yellow-lemon {\n  background: #F7CA18 !important; }\n\n.bg-yellow-lemon-opacity {\n  background: rgba(247, 202, 24, 0.8) !important; }\n\n.bg-hover-yellow-lemon:hover {\n  background: #F7CA18 !important; }\n\n.font-yellow-lemon {\n  color: #F7CA18 !important; }\n\n.bg-font-yellow-lemon {\n  color: #ffffff !important; }\n\n.border-yellow-lemon {\n  border-color: #F7CA18 !important; }\n\n.border-top-yellow-lemon {\n  border-top-color: #F7CA18 !important; }\n\n.border-bottom-yellow-lemon {\n  border-bottom-color: #F7CA18 !important; }\n\n.border-left-yellow-lemon {\n  border-left-color: #F7CA18 !important; }\n\n.border-right-yellow-lemon {\n  border-right-color: #F7CA18 !important; }\n\n.bg-before-yellow-lemon:before,\n.bg-after-yellow-lemon:after {\n  background: #F7CA18 !important; }\n\n.border-before-yellow-lemon:before,\n.border-after-yellow-lemon:after {\n  border-color: #F7CA18 !important; }\n\n.border-top-before-yellow-lemon:before,\n.border-top-after-yellow-lemon:after {\n  border-top-color: #F7CA18 !important; }\n\n.border-bottom-before-yellow-lemon:before,\n.border-bottom-after-yellow-lemon:after {\n  border-bottom-color: #F7CA18 !important; }\n\n.border-left-before-yellow-lemon:before,\n.border-left-after-yellow-lemon:after {\n  border-left-color: #F7CA18 !important; }\n\n.border-right-before-yellow-lemon:before,\n.border-right-after-yellow-lemon:after {\n  border-right-color: #F7CA18 !important; }\n\n.bg-yellow-saffron {\n  background: #F4D03F !important; }\n\n.bg-yellow-saffron-opacity {\n  background: rgba(244, 208, 63, 0.8) !important; }\n\n.bg-hover-yellow-saffron:hover {\n  background: #F4D03F !important; }\n\n.font-yellow-saffron {\n  color: #F4D03F !important; }\n\n.bg-font-yellow-saffron {\n  color: #ffffff !important; }\n\n.border-yellow-saffron {\n  border-color: #F4D03F !important; }\n\n.border-top-yellow-saffron {\n  border-top-color: #F4D03F !important; }\n\n.border-bottom-yellow-saffron {\n  border-bottom-color: #F4D03F !important; }\n\n.border-left-yellow-saffron {\n  border-left-color: #F4D03F !important; }\n\n.border-right-yellow-saffron {\n  border-right-color: #F4D03F !important; }\n\n.bg-before-yellow-saffron:before,\n.bg-after-yellow-saffron:after {\n  background: #F4D03F !important; }\n\n.border-before-yellow-saffron:before,\n.border-after-yellow-saffron:after {\n  border-color: #F4D03F !important; }\n\n.border-top-before-yellow-saffron:before,\n.border-top-after-yellow-saffron:after {\n  border-top-color: #F4D03F !important; }\n\n.border-bottom-before-yellow-saffron:before,\n.border-bottom-after-yellow-saffron:after {\n  border-bottom-color: #F4D03F !important; }\n\n.border-left-before-yellow-saffron:before,\n.border-left-after-yellow-saffron:after {\n  border-left-color: #F4D03F !important; }\n\n.border-right-before-yellow-saffron:before,\n.border-right-after-yellow-saffron:after {\n  border-right-color: #F4D03F !important; }\n\n.bg-yellow-soft {\n  background: #c8d046 !important; }\n\n.bg-yellow-soft-opacity {\n  background: rgba(200, 208, 70, 0.8) !important; }\n\n.bg-hover-yellow-soft:hover {\n  background: #c8d046 !important; }\n\n.font-yellow-soft {\n  color: #c8d046 !important; }\n\n.bg-font-yellow-soft {\n  color: #ffffff !important; }\n\n.border-yellow-soft {\n  border-color: #c8d046 !important; }\n\n.border-top-yellow-soft {\n  border-top-color: #c8d046 !important; }\n\n.border-bottom-yellow-soft {\n  border-bottom-color: #c8d046 !important; }\n\n.border-left-yellow-soft {\n  border-left-color: #c8d046 !important; }\n\n.border-right-yellow-soft {\n  border-right-color: #c8d046 !important; }\n\n.bg-before-yellow-soft:before,\n.bg-after-yellow-soft:after {\n  background: #c8d046 !important; }\n\n.border-before-yellow-soft:before,\n.border-after-yellow-soft:after {\n  border-color: #c8d046 !important; }\n\n.border-top-before-yellow-soft:before,\n.border-top-after-yellow-soft:after {\n  border-top-color: #c8d046 !important; }\n\n.border-bottom-before-yellow-soft:before,\n.border-bottom-after-yellow-soft:after {\n  border-bottom-color: #c8d046 !important; }\n\n.border-left-before-yellow-soft:before,\n.border-left-after-yellow-soft:after {\n  border-left-color: #c8d046 !important; }\n\n.border-right-before-yellow-soft:before,\n.border-right-after-yellow-soft:after {\n  border-right-color: #c8d046 !important; }\n\n.bg-yellow-haze {\n  background: #c5bf66 !important; }\n\n.bg-yellow-haze-opacity {\n  background: rgba(197, 191, 102, 0.8) !important; }\n\n.bg-hover-yellow-haze:hover {\n  background: #c5bf66 !important; }\n\n.font-yellow-haze {\n  color: #c5bf66 !important; }\n\n.bg-font-yellow-haze {\n  color: #ffffff !important; }\n\n.border-yellow-haze {\n  border-color: #c5bf66 !important; }\n\n.border-top-yellow-haze {\n  border-top-color: #c5bf66 !important; }\n\n.border-bottom-yellow-haze {\n  border-bottom-color: #c5bf66 !important; }\n\n.border-left-yellow-haze {\n  border-left-color: #c5bf66 !important; }\n\n.border-right-yellow-haze {\n  border-right-color: #c5bf66 !important; }\n\n.bg-before-yellow-haze:before,\n.bg-after-yellow-haze:after {\n  background: #c5bf66 !important; }\n\n.border-before-yellow-haze:before,\n.border-after-yellow-haze:after {\n  border-color: #c5bf66 !important; }\n\n.border-top-before-yellow-haze:before,\n.border-top-after-yellow-haze:after {\n  border-top-color: #c5bf66 !important; }\n\n.border-bottom-before-yellow-haze:before,\n.border-bottom-after-yellow-haze:after {\n  border-bottom-color: #c5bf66 !important; }\n\n.border-left-before-yellow-haze:before,\n.border-left-after-yellow-haze:after {\n  border-left-color: #c5bf66 !important; }\n\n.border-right-before-yellow-haze:before,\n.border-right-after-yellow-haze:after {\n  border-right-color: #c5bf66 !important; }\n\n.bg-yellow-mint {\n  background: #c5b96b !important; }\n\n.bg-yellow-mint-opacity {\n  background: rgba(197, 185, 107, 0.8) !important; }\n\n.bg-hover-yellow-mint:hover {\n  background: #c5b96b !important; }\n\n.font-yellow-mint {\n  color: #c5b96b !important; }\n\n.bg-font-yellow-mint {\n  color: #ffffff !important; }\n\n.border-yellow-mint {\n  border-color: #c5b96b !important; }\n\n.border-top-yellow-mint {\n  border-top-color: #c5b96b !important; }\n\n.border-bottom-yellow-mint {\n  border-bottom-color: #c5b96b !important; }\n\n.border-left-yellow-mint {\n  border-left-color: #c5b96b !important; }\n\n.border-right-yellow-mint {\n  border-right-color: #c5b96b !important; }\n\n.bg-before-yellow-mint:before,\n.bg-after-yellow-mint:after {\n  background: #c5b96b !important; }\n\n.border-before-yellow-mint:before,\n.border-after-yellow-mint:after {\n  border-color: #c5b96b !important; }\n\n.border-top-before-yellow-mint:before,\n.border-top-after-yellow-mint:after {\n  border-top-color: #c5b96b !important; }\n\n.border-bottom-before-yellow-mint:before,\n.border-bottom-after-yellow-mint:after {\n  border-bottom-color: #c5b96b !important; }\n\n.border-left-before-yellow-mint:before,\n.border-left-after-yellow-mint:after {\n  border-left-color: #c5b96b !important; }\n\n.border-right-before-yellow-mint:before,\n.border-right-after-yellow-mint:after {\n  border-right-color: #c5b96b !important; }\n\n.bg-purple {\n  background: #8E44AD !important; }\n\n.bg-purple-opacity {\n  background: rgba(142, 68, 173, 0.8) !important; }\n\n.bg-hover-purple:hover {\n  background: #8E44AD !important; }\n\n.font-purple {\n  color: #8E44AD !important; }\n\n.bg-font-purple {\n  color: #ffffff !important; }\n\n.border-purple {\n  border-color: #8E44AD !important; }\n\n.border-top-purple {\n  border-top-color: #8E44AD !important; }\n\n.border-bottom-purple {\n  border-bottom-color: #8E44AD !important; }\n\n.border-left-purple {\n  border-left-color: #8E44AD !important; }\n\n.border-right-purple {\n  border-right-color: #8E44AD !important; }\n\n.bg-before-purple:before,\n.bg-after-purple:after {\n  background: #8E44AD !important; }\n\n.border-before-purple:before,\n.border-after-purple:after {\n  border-color: #8E44AD !important; }\n\n.border-top-before-purple:before,\n.border-top-after-purple:after {\n  border-top-color: #8E44AD !important; }\n\n.border-bottom-before-purple:before,\n.border-bottom-after-purple:after {\n  border-bottom-color: #8E44AD !important; }\n\n.border-left-before-purple:before,\n.border-left-after-purple:after {\n  border-left-color: #8E44AD !important; }\n\n.border-right-before-purple:before,\n.border-right-after-purple:after {\n  border-right-color: #8E44AD !important; }\n\n.bg-purple-plum {\n  background: #8775a7 !important; }\n\n.bg-purple-plum-opacity {\n  background: rgba(135, 117, 167, 0.8) !important; }\n\n.bg-hover-purple-plum:hover {\n  background: #8775a7 !important; }\n\n.font-purple-plum {\n  color: #8775a7 !important; }\n\n.bg-font-purple-plum {\n  color: #ffffff !important; }\n\n.border-purple-plum {\n  border-color: #8775a7 !important; }\n\n.border-top-purple-plum {\n  border-top-color: #8775a7 !important; }\n\n.border-bottom-purple-plum {\n  border-bottom-color: #8775a7 !important; }\n\n.border-left-purple-plum {\n  border-left-color: #8775a7 !important; }\n\n.border-right-purple-plum {\n  border-right-color: #8775a7 !important; }\n\n.bg-before-purple-plum:before,\n.bg-after-purple-plum:after {\n  background: #8775a7 !important; }\n\n.border-before-purple-plum:before,\n.border-after-purple-plum:after {\n  border-color: #8775a7 !important; }\n\n.border-top-before-purple-plum:before,\n.border-top-after-purple-plum:after {\n  border-top-color: #8775a7 !important; }\n\n.border-bottom-before-purple-plum:before,\n.border-bottom-after-purple-plum:after {\n  border-bottom-color: #8775a7 !important; }\n\n.border-left-before-purple-plum:before,\n.border-left-after-purple-plum:after {\n  border-left-color: #8775a7 !important; }\n\n.border-right-before-purple-plum:before,\n.border-right-after-purple-plum:after {\n  border-right-color: #8775a7 !important; }\n\n.bg-purple-medium {\n  background: #BF55EC !important; }\n\n.bg-purple-medium-opacity {\n  background: rgba(191, 85, 236, 0.8) !important; }\n\n.bg-hover-purple-medium:hover {\n  background: #BF55EC !important; }\n\n.font-purple-medium {\n  color: #BF55EC !important; }\n\n.bg-font-purple-medium {\n  color: #ffffff !important; }\n\n.border-purple-medium {\n  border-color: #BF55EC !important; }\n\n.border-top-purple-medium {\n  border-top-color: #BF55EC !important; }\n\n.border-bottom-purple-medium {\n  border-bottom-color: #BF55EC !important; }\n\n.border-left-purple-medium {\n  border-left-color: #BF55EC !important; }\n\n.border-right-purple-medium {\n  border-right-color: #BF55EC !important; }\n\n.bg-before-purple-medium:before,\n.bg-after-purple-medium:after {\n  background: #BF55EC !important; }\n\n.border-before-purple-medium:before,\n.border-after-purple-medium:after {\n  border-color: #BF55EC !important; }\n\n.border-top-before-purple-medium:before,\n.border-top-after-purple-medium:after {\n  border-top-color: #BF55EC !important; }\n\n.border-bottom-before-purple-medium:before,\n.border-bottom-after-purple-medium:after {\n  border-bottom-color: #BF55EC !important; }\n\n.border-left-before-purple-medium:before,\n.border-left-after-purple-medium:after {\n  border-left-color: #BF55EC !important; }\n\n.border-right-before-purple-medium:before,\n.border-right-after-purple-medium:after {\n  border-right-color: #BF55EC !important; }\n\n.bg-purple-studio {\n  background: #8E44AD !important; }\n\n.bg-purple-studio-opacity {\n  background: rgba(142, 68, 173, 0.8) !important; }\n\n.bg-hover-purple-studio:hover {\n  background: #8E44AD !important; }\n\n.font-purple-studio {\n  color: #8E44AD !important; }\n\n.bg-font-purple-studio {\n  color: #ffffff !important; }\n\n.border-purple-studio {\n  border-color: #8E44AD !important; }\n\n.border-top-purple-studio {\n  border-top-color: #8E44AD !important; }\n\n.border-bottom-purple-studio {\n  border-bottom-color: #8E44AD !important; }\n\n.border-left-purple-studio {\n  border-left-color: #8E44AD !important; }\n\n.border-right-purple-studio {\n  border-right-color: #8E44AD !important; }\n\n.bg-before-purple-studio:before,\n.bg-after-purple-studio:after {\n  background: #8E44AD !important; }\n\n.border-before-purple-studio:before,\n.border-after-purple-studio:after {\n  border-color: #8E44AD !important; }\n\n.border-top-before-purple-studio:before,\n.border-top-after-purple-studio:after {\n  border-top-color: #8E44AD !important; }\n\n.border-bottom-before-purple-studio:before,\n.border-bottom-after-purple-studio:after {\n  border-bottom-color: #8E44AD !important; }\n\n.border-left-before-purple-studio:before,\n.border-left-after-purple-studio:after {\n  border-left-color: #8E44AD !important; }\n\n.border-right-before-purple-studio:before,\n.border-right-after-purple-studio:after {\n  border-right-color: #8E44AD !important; }\n\n.bg-purple-wisteria {\n  background: #9B59B6 !important; }\n\n.bg-purple-wisteria-opacity {\n  background: rgba(155, 89, 182, 0.8) !important; }\n\n.bg-hover-purple-wisteria:hover {\n  background: #9B59B6 !important; }\n\n.font-purple-wisteria {\n  color: #9B59B6 !important; }\n\n.bg-font-purple-wisteria {\n  color: #ffffff !important; }\n\n.border-purple-wisteria {\n  border-color: #9B59B6 !important; }\n\n.border-top-purple-wisteria {\n  border-top-color: #9B59B6 !important; }\n\n.border-bottom-purple-wisteria {\n  border-bottom-color: #9B59B6 !important; }\n\n.border-left-purple-wisteria {\n  border-left-color: #9B59B6 !important; }\n\n.border-right-purple-wisteria {\n  border-right-color: #9B59B6 !important; }\n\n.bg-before-purple-wisteria:before,\n.bg-after-purple-wisteria:after {\n  background: #9B59B6 !important; }\n\n.border-before-purple-wisteria:before,\n.border-after-purple-wisteria:after {\n  border-color: #9B59B6 !important; }\n\n.border-top-before-purple-wisteria:before,\n.border-top-after-purple-wisteria:after {\n  border-top-color: #9B59B6 !important; }\n\n.border-bottom-before-purple-wisteria:before,\n.border-bottom-after-purple-wisteria:after {\n  border-bottom-color: #9B59B6 !important; }\n\n.border-left-before-purple-wisteria:before,\n.border-left-after-purple-wisteria:after {\n  border-left-color: #9B59B6 !important; }\n\n.border-right-before-purple-wisteria:before,\n.border-right-after-purple-wisteria:after {\n  border-right-color: #9B59B6 !important; }\n\n.bg-purple-seance {\n  background: #9A12B3 !important; }\n\n.bg-purple-seance-opacity {\n  background: rgba(154, 18, 179, 0.8) !important; }\n\n.bg-hover-purple-seance:hover {\n  background: #9A12B3 !important; }\n\n.font-purple-seance {\n  color: #9A12B3 !important; }\n\n.bg-font-purple-seance {\n  color: #ffffff !important; }\n\n.border-purple-seance {\n  border-color: #9A12B3 !important; }\n\n.border-top-purple-seance {\n  border-top-color: #9A12B3 !important; }\n\n.border-bottom-purple-seance {\n  border-bottom-color: #9A12B3 !important; }\n\n.border-left-purple-seance {\n  border-left-color: #9A12B3 !important; }\n\n.border-right-purple-seance {\n  border-right-color: #9A12B3 !important; }\n\n.bg-before-purple-seance:before,\n.bg-after-purple-seance:after {\n  background: #9A12B3 !important; }\n\n.border-before-purple-seance:before,\n.border-after-purple-seance:after {\n  border-color: #9A12B3 !important; }\n\n.border-top-before-purple-seance:before,\n.border-top-after-purple-seance:after {\n  border-top-color: #9A12B3 !important; }\n\n.border-bottom-before-purple-seance:before,\n.border-bottom-after-purple-seance:after {\n  border-bottom-color: #9A12B3 !important; }\n\n.border-left-before-purple-seance:before,\n.border-left-after-purple-seance:after {\n  border-left-color: #9A12B3 !important; }\n\n.border-right-before-purple-seance:before,\n.border-right-after-purple-seance:after {\n  border-right-color: #9A12B3 !important; }\n\n.bg-purple-intense {\n  background: #8775a7 !important; }\n\n.bg-purple-intense-opacity {\n  background: rgba(135, 117, 167, 0.8) !important; }\n\n.bg-hover-purple-intense:hover {\n  background: #8775a7 !important; }\n\n.font-purple-intense {\n  color: #8775a7 !important; }\n\n.bg-font-purple-intense {\n  color: #ffffff !important; }\n\n.border-purple-intense {\n  border-color: #8775a7 !important; }\n\n.border-top-purple-intense {\n  border-top-color: #8775a7 !important; }\n\n.border-bottom-purple-intense {\n  border-bottom-color: #8775a7 !important; }\n\n.border-left-purple-intense {\n  border-left-color: #8775a7 !important; }\n\n.border-right-purple-intense {\n  border-right-color: #8775a7 !important; }\n\n.bg-before-purple-intense:before,\n.bg-after-purple-intense:after {\n  background: #8775a7 !important; }\n\n.border-before-purple-intense:before,\n.border-after-purple-intense:after {\n  border-color: #8775a7 !important; }\n\n.border-top-before-purple-intense:before,\n.border-top-after-purple-intense:after {\n  border-top-color: #8775a7 !important; }\n\n.border-bottom-before-purple-intense:before,\n.border-bottom-after-purple-intense:after {\n  border-bottom-color: #8775a7 !important; }\n\n.border-left-before-purple-intense:before,\n.border-left-after-purple-intense:after {\n  border-left-color: #8775a7 !important; }\n\n.border-right-before-purple-intense:before,\n.border-right-after-purple-intense:after {\n  border-right-color: #8775a7 !important; }\n\n.bg-purple-sharp {\n  background: #796799 !important; }\n\n.bg-purple-sharp-opacity {\n  background: rgba(121, 103, 153, 0.8) !important; }\n\n.bg-hover-purple-sharp:hover {\n  background: #796799 !important; }\n\n.font-purple-sharp {\n  color: #796799 !important; }\n\n.bg-font-purple-sharp {\n  color: #ffffff !important; }\n\n.border-purple-sharp {\n  border-color: #796799 !important; }\n\n.border-top-purple-sharp {\n  border-top-color: #796799 !important; }\n\n.border-bottom-purple-sharp {\n  border-bottom-color: #796799 !important; }\n\n.border-left-purple-sharp {\n  border-left-color: #796799 !important; }\n\n.border-right-purple-sharp {\n  border-right-color: #796799 !important; }\n\n.bg-before-purple-sharp:before,\n.bg-after-purple-sharp:after {\n  background: #796799 !important; }\n\n.border-before-purple-sharp:before,\n.border-after-purple-sharp:after {\n  border-color: #796799 !important; }\n\n.border-top-before-purple-sharp:before,\n.border-top-after-purple-sharp:after {\n  border-top-color: #796799 !important; }\n\n.border-bottom-before-purple-sharp:before,\n.border-bottom-after-purple-sharp:after {\n  border-bottom-color: #796799 !important; }\n\n.border-left-before-purple-sharp:before,\n.border-left-after-purple-sharp:after {\n  border-left-color: #796799 !important; }\n\n.border-right-before-purple-sharp:before,\n.border-right-after-purple-sharp:after {\n  border-right-color: #796799 !important; }\n\n.bg-purple-soft {\n  background: #8877a9 !important; }\n\n.bg-purple-soft-opacity {\n  background: rgba(136, 119, 169, 0.8) !important; }\n\n.bg-hover-purple-soft:hover {\n  background: #8877a9 !important; }\n\n.font-purple-soft {\n  color: #8877a9 !important; }\n\n.bg-font-purple-soft {\n  color: #ffffff !important; }\n\n.border-purple-soft {\n  border-color: #8877a9 !important; }\n\n.border-top-purple-soft {\n  border-top-color: #8877a9 !important; }\n\n.border-bottom-purple-soft {\n  border-bottom-color: #8877a9 !important; }\n\n.border-left-purple-soft {\n  border-left-color: #8877a9 !important; }\n\n.border-right-purple-soft {\n  border-right-color: #8877a9 !important; }\n\n.bg-before-purple-soft:before,\n.bg-after-purple-soft:after {\n  background: #8877a9 !important; }\n\n.border-before-purple-soft:before,\n.border-after-purple-soft:after {\n  border-color: #8877a9 !important; }\n\n.border-top-before-purple-soft:before,\n.border-top-after-purple-soft:after {\n  border-top-color: #8877a9 !important; }\n\n.border-bottom-before-purple-soft:before,\n.border-bottom-after-purple-soft:after {\n  border-bottom-color: #8877a9 !important; }\n\n.border-left-before-purple-soft:before,\n.border-left-after-purple-soft:after {\n  border-left-color: #8877a9 !important; }\n\n.border-right-before-purple-soft:before,\n.border-right-after-purple-soft:after {\n  border-right-color: #8877a9 !important; }\n\n/***\nColor library demo\n***/\n.color-demo {\n  border: 1px solid #eee;\n  margin: 0 0 20px 0;\n  cursor: pointer; }\n  .color-demo .color-view {\n    padding: 35px 10px;\n    text-align: center;\n    font-size: 18px; }\n  .color-demo .color-info {\n    border-top: 1px solid #eee;\n    padding: 10px 10px;\n    text-align: center; }\n\n.mt-cookie-consent-bar {\n  position: fixed;\n  bottom: 0;\n  z-index: 10101;\n  padding: 10px 25px;\n  width: 100%;\n  background: rgba(0, 0, 0, 0.9);\n  color: #ffffff;\n  left: 0;\n  right: 0; }\n  .mt-cookie-consent-bar .mt-cookie-consent-bar-holder {\n    display: table;\n    width: 100%; }\n    .mt-cookie-consent-bar .mt-cookie-consent-bar-holder .mt-cookie-consent-bar-content {\n      display: table-cell;\n      text-align: left;\n      vertical-align: middle; }\n    .mt-cookie-consent-bar .mt-cookie-consent-bar-holder .mt-cookie-consent-bar-action {\n      display: table-cell;\n      text-align: right;\n      vertical-align: middle; }\n  .mt-cookie-consent-bar.mt-cookie-consent-bar-light {\n    background: rgba(238, 238, 238, 0.9);\n    color: #333; }\n"
  },
  {
    "path": "resources/assets/static/src/themes/global/custom.css",
    "content": "/*\n.page-logo {\n\tline-height: 75px;\n\tfont-size: 18px;\n}\n\n.page-logo a {\n\ttext-decoration:none ;\n}\n*/\n\n.back-btn-row {\n\ttext-align: center;\n\tmargin-top: 30px;\n\tmargin-bottom: 30px;\n}\n\n.fit-img-preview {\n\tdisplay: inline-block;\n}\n\n.fit-img-preview img {\n\tmax-width: 120px;\n\tmin-width: 60px;\n}\n\n.open_album_btn {\n\tmargin-left: 8px;\n}\n\n.fit-loading {\n\tposition: fixed;\n\tfilter: alpha(opacity=80);\n\t-moz-opacity: 0.8;\n\t-khtml-opacity: 0.8;\n\topacity: 0.8;\n\tcolor: #FFF;\n\twidth: 120px;\n\theight: 120px;\n\tborder-radius: 6px;\n\ttext-align: center;\n\tz-index: 13000;\n\tbackground: url(img/loading.gif) no-repeat 50% 50% #000;\n}\n\n.fit-modal {\n\tdisplay: none;\n\tposition: absolute;\n\tfilter: alpha(opacity=30);\n\t-moz-opacity: 0.3;\n\topacity: 0.3;\n\twidth: 100%;\n\theight: 100%;\n\tbackground: #000;\n\tz-index: 11000;\n\ttop: 0;\n}\n\n.fit-alert,\n.fit-confirm {\n\tdisplay: none;\n\tposition: absolute;\n\tfont-family: 'Microsoft YaHei', '黑体', Arial, 'Times New Roman', SimHei !important;\n\tfont-size: 16px;\n\tbackground: #FFFFFF;\n\twidth: 85%;\n\tmax-width: 300px;\n\tborder-radius: 6px;\n\tmin-height: 100px;\n\tz-index: 12000;\n\tbox-shadow: 0 0 10px #424040;\n}\n\n.fit-alert .fit-alert-body,\n.fit-confirm .fit-confirm-body {\n\tcolor: #000000;\n\ttext-align: center;\n\tvertical-align: middle;\n\tpadding: 30px 35px;\n}\n\n.fit-alert .fit-alert_btn,\n.fit-confirm .fit-confirm-btn {\n\theight: 40px;\n\tborder-top: 1px solid #cdcdcd;\n}\n\n.fit-alert .fit-alert-btn button,\n.fit-confirm .fit-confirm-btn button {\n\tdisplay: block;\n\tfloat: left;\n\theight: 40px;\n\twidth: 100%;\n\tcolor: #1282fb;\n\tbackground: #FFFFFF;\n\tfont-weight: bold;\n\tborder: 0;\n\tborder-bottom-left-radius: 6px;\n\tborder-bottom-right-radius: 6px;\n}\n\n.fit-alert .fit-alert-btn .half,\n.fit-confirm .fit-confirm-btn .half {\n\twidth: 50%;\n}\n\n.fit-alert .fit-alert-btn .half:first-child,\n.fit-confirm .fit-confirm-btn .half:first-child {\n\tborder-bottom-left-radius: 6px;\n\tborder-bottom-right-radius: 0;\n}\n\n.fit-alert .fit-alert-btn .half:last-child,\n.fit-confirm .fit-confirm-btn .half:last-child {\n\tborder-bottom-left-radius: 0;\n\tborder-bottom-right-radius: 6px;\n\tborder-left: 1px solid #ddd;\n}\n\n.toast-top-center {\n\tmargin-top: 16px;\n}\n\ntable .sorting {\n\tcursor: pointer;\n\tpadding-right: 20px !important;\n\tbackground: url(\"img/sort_both.png\") 100% 50% no-repeat;\n}\n\ntable .sort_asc {\n\tcursor: pointer;\n\tpadding-right: 20px !important;\n\tbackground: url(\"img/sort_asc.png\") 100% 50% no-repeat;\n}\n\ntable .sort_desc {\n\tcursor: pointer;\n\tpadding-right: 20px !important;\n\tbackground: url(\"img/sort_desc.png\") 100% 50% no-repeat;\n}\n\ntable td {\n\tvertical-align: middle !important;\n}\n\ntable .level-fa {\n\twidth: 20px;\n\tcursor: pointer;\n}\n\ntable .level-1 {\n}\n\ntable .level-2 {\n\tpadding-left: 25px !important;\n}\n\ntable .level-3 {\n\tpadding-left: 50px !important;\n}\n\ntable .level-4 {\n\tpadding-left: 75px !important;\n}\n\ntable .level-5 {\n\tpadding-left: 100px !important;\n}\n\ntable .level-6 {\n\tpadding-left: 125px !important;\n}\n\n/*\n上传相关\n*/\n.uploader-holder-markup {\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tbackground: #000000;\n\tz-index: 60;\n}\n\n.uploader-holder-tracker {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\toverflow: hidden;\n\tborder: 1px dashed #ffffff;\n\tz-index: 620;\n\tcursor: move;\n}\n\n.uploader-holder-tracker-img {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n}\n\n.uploader-holder-img-bg {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\topacity: 0.6;\n\tz-index: 300;\n}\n\n.area-selection {\n\tdisplay: none;\n\tposition: absolute;\n\twidth: 400px;\n\tpadding: 10px;\n\tborder: 1px solid #dddddd;\n\tborder-radius: 3px;\n\tbackground: #ffffff;\n\tz-index: 10055;\n}\n\n.area-selection a {\n\ttext-decoration: none;\n}\n\n.area-selection .list-inline a {\n\tdisplay: inline-block;\n\twidth: 60px;\n\ttext-align: center;\n\tmargin-bottom: 6px;\n}\n\n.tile a:hover {\n\ttext-decoration: none;\n}\n\n.tile .number a {\n\tcolor: #fff;\n}\n\n.tile .number a i {\n\twidth: 20px;\n\tfont-size: 18px;\n}\n\n.tile .number a:hover {\n\tcolor: #ccc;\n\ttext-underline: none;\n}\n\n.thumbnail.album_item {\n\tmargin-bottom: 6px;\n}\n\n.thumbnail.album_item img {\n\tdisplay: block;\n\tmax-height: 180px;\n\twidth: 100%;\n}\n\n.caption.album_item {\n\ttext-align: center;\n\tmargin-bottom: 16px;\n}\n\n.code-text {\n\t-moz-tab-size: 2;\n\tbackground: #f5f2f0 none repeat scroll 0 0;\n\tbox-sizing: border-box;\n\tcolor: black;\n\tfont: 100% Consolas, Monaco, monospace;\n\theight: 10em;\n\tmargin: 0.5em 0;\n\tpadding: 1em;\n\twhite-space: pre;\n\twidth: 100%;\n\tword-wrap: normal;\n}\n\n.permission {\n\tpadding: 8px 16px;\n\tmargin: 0px;\n\tlist-style: none;\n}\n\n.permission li {\n\tpadding: 0px;\n\tmargin: 0px;\n\tpadding-bottom: 16px;\n\tlist-style: none;\n}\n\n.permission .func-node {\n\tmargin-bottom: 8px;\n}\n\n.permission .func-node .func {\n\tdisplay: inline-block;\n\twidth: 100px;\n\tmargin-right: 20px;\n\tcursor: pointer;\n\tfont-weight: bold;\n\tcolor: #000;\n}\n\n.permission .func-node .func.active {\n\tcolor: #000;\n}\n\n.permission .func-node .func.notall {\n\tcolor: #888;\n}\n\n.permission .func-node .func.disabled {\n\tcolor: #CCCCCC;\n}\n\n.permission .func-node .func-opt {\n\tdisplay: inline-block;\n\tmin-width: 60px;\n\tmargin-right: 8px;\n\tcursor: pointer;\n\tcolor: #000;\n}\n\n.permission .func-node .func-opt.active {\n\tcolor: #000;\n}\n\n.permission .func-node .func-opt.notall {\n\tcolor: #888;\n}\n\n.permission .func-node .func-opt.disabled {\n\tcolor: #CCCCCC;\n}\n\n.permission .func-node .func-opt i {\n\twidth: 12px;\n}\n\n.permission .func-tree .sub-permission {\n\tmargin: 0px;\n\tpadding: 0px;\n\tpadding-left: 26px;\n}\n\n.permission .func-tree .sub-permission li {\n\tpadding: 0px;\n}\n\n"
  },
  {
    "path": "resources/assets/static/src/themes/global/darkblue.css",
    "content": "/* Cubic Bezier Transition */\n/*********** \n    Page Header\n    ***********/\n/* Header search bar, toggler button & top menu */\n.page-header.navbar {\n  background-color: #2b3643;\n  /* Top notification menu/bar */\n  /* Header seaech box */\n  /* Toggler button for sidebar expand/collapse and responsive sidebar menu */ }\n  .page-header.navbar .top-menu .navbar-nav {\n    /* Extended Dropdowns */\n    /* Notification */\n    /* Inbox */\n    /* Tasks */\n    /* User */\n    /* Language */\n    /* Dark version */ }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle > i {\n      color: #79869a; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle .badge.badge-default {\n      background-color: #36c6d3;\n      color: #ffffff; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle:hover {\n      background-color: #3f4f62; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle:hover > i {\n        color: #a4aebb; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown.open .dropdown-toggle {\n      background-color: #3f4f62; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown.open .dropdown-toggle > i {\n        color: #a4aebb; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu {\n      border-color: #e7eaf0; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu:after {\n        border-bottom-color: #eaedf2; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external {\n        background: #eaedf2; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > h3 {\n          color: #62878f; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > a {\n          color: #337ab7; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > a:hover {\n            color: #23527c;\n            text-decoration: none; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li > a {\n        border-bottom: 1px solid #EFF2F6 !important;\n        color: #888888; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li > a:hover {\n          background: #f8f9fa; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li > a .time {\n      background: #f1f1f1; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li > a:hover .time {\n      background: #e4e4e4; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-toggle > .circle {\n      background-color: #36c6d3;\n      color: #ffffff; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-toggle > .corner {\n      border-color: transparent transparent transparent #36c6d3; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox .dropdown-menu .dropdown-menu-list .subject .from {\n      color: #5b9bd1; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list .progress {\n      background-color: #dfe2e9; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-user > .dropdown-toggle > .username {\n      color: #c6cfda; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-user > .dropdown-toggle > i {\n      color: #c6cfda; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-user > .dropdown-menu {\n      width: 195px; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-toggle > .langname {\n      color: #c6cfda; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu {\n      background: #3f4f62;\n      border: 0; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu:after {\n        border-bottom-color: #3f4f62; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu > li.external {\n        background: #2f3b49; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu > li.external > h3 {\n          color: #adbaca; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu > li.external > a:hover {\n          color: #5496cf; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li a,\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu .dropdown-menu-list > li a {\n        color: #bcc7d4;\n        border-bottom: 1px solid #4b5e75 !important; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li a > i,\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu .dropdown-menu-list > li a > i {\n          color: #9dadc0; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li a:hover,\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu .dropdown-menu-list > li a:hover {\n          background: #47596e; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li a {\n        border-bottom: 0 !important; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li.divider {\n        background: #4b5e75; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification.dropdown-dark .dropdown-menu .dropdown-menu-list > li > a .time {\n      background: #354353; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification.dropdown-dark .dropdown-menu .dropdown-menu-list > li > a:hover .time {\n      background: #2b3643; }\n  .page-header.navbar .search-form {\n    background: #232c37; }\n    .page-header.navbar .search-form:hover {\n      background: #3f4f62; }\n    .page-header.navbar .search-form .input-group .form-control {\n      color: #959fad; }\n      .page-header.navbar .search-form .input-group .form-control::-moz-placeholder {\n        color: #929cab;\n        opacity: 1; }\n      .page-header.navbar .search-form .input-group .form-control:-ms-input-placeholder {\n        color: #929cab; }\n      .page-header.navbar .search-form .input-group .form-control::-webkit-input-placeholder {\n        color: #929cab; }\n    .page-header.navbar .search-form .input-group .input-group-btn .btn.submit > i {\n      color: #959fad; }\n    .page-header.navbar .search-form.open {\n      background: #3f4f62; }\n  .page-header.navbar .menu-toggler > span,\n  .page-header.navbar .menu-toggler > span:before,\n  .page-header.navbar .menu-toggler > span:after {\n    background: #a7b5c6; }\n  .page-header.navbar .menu-toggler > span:hover {\n    background: #a7b5c6; }\n    .page-header.navbar .menu-toggler > span:hover:before, .page-header.navbar .menu-toggler > span:hover:after {\n      background: #a7b5c6; }\n  .page-header.navbar .menu-toggler.th-toggle-exit > span {\n    background-color: transparent !important; }\n\n/* Default Horizontal Menu */\n.page-header.navbar {\n  /* Default Mega Menu */\n  /* Light Mega Menu */ }\n  .page-header.navbar .hor-menu .navbar-nav {\n    /* Mega menu content */\n    /* Classic menu */ }\n    .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu {\n      box-shadow: 5px 5px rgba(63, 79, 98, 0.2); }\n      .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > h3 {\n        color: #c6cfda; }\n    .page-header.navbar .hor-menu .navbar-nav > li > a {\n      color: #c6cfda; }\n      .page-header.navbar .hor-menu .navbar-nav > li > a > i {\n        color: #788ea8; }\n    .page-header.navbar .hor-menu .navbar-nav > li:hover > a,\n    .page-header.navbar .hor-menu .navbar-nav > li.open > a,\n    .page-header.navbar .hor-menu .navbar-nav > li > a:hover {\n      color: #d5dce4;\n      background: #3f4f62 !important; }\n      .page-header.navbar .hor-menu .navbar-nav > li:hover > a > i,\n      .page-header.navbar .hor-menu .navbar-nav > li.open > a > i,\n      .page-header.navbar .hor-menu .navbar-nav > li > a:hover > i {\n        color: #889bb2; }\n    .page-header.navbar .hor-menu .navbar-nav > li.active > a,\n    .page-header.navbar .hor-menu .navbar-nav > li.active > a, .page-header.navbar .hor-menu .navbar-nav > li.current > a,\n    .page-header.navbar .hor-menu .navbar-nav > li.current > a {\n      color: white;\n      background: #36c6d3 !important; }\n      .page-header.navbar .hor-menu .navbar-nav > li.active > a > i,\n      .page-header.navbar .hor-menu .navbar-nav > li.active > a > i, .page-header.navbar .hor-menu .navbar-nav > li.current > a > i,\n      .page-header.navbar .hor-menu .navbar-nav > li.current > a > i {\n        color: #788ea8; }\n    .page-header.navbar .hor-menu .navbar-nav > li.active .selected, .page-header.navbar .hor-menu .navbar-nav > li.current .selected {\n      border-top: 6px solid #36c6d3; }\n    .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu {\n      box-shadow: 5px 5px rgba(63, 79, 98, 0.2);\n      background: #3f4f62; }\n      .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a {\n        color: #c6cfda; }\n        .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a > i {\n          color: #c6cfda; }\n      .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li:hover > a {\n        color: #f1f3f6;\n        background: #47596e; }\n        .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li:hover > a > i {\n          color: #f1f3f6; }\n      .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.active > a,\n      .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.active > a:hover, .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.current > a,\n      .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.current > a:hover {\n        color: #f1f3f6;\n        background: #47596e; }\n        .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.active > a > i,\n        .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.active > a:hover > i, .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.current > a > i,\n        .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.current > a:hover > i {\n          color: #f1f3f6; }\n      .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.divider {\n        background-color: #495c72; }\n    .page-header.navbar .hor-menu .navbar-nav > li .dropdown-submenu > a:after {\n      color: #c6cfda; }\n  .page-header.navbar .hor-menu.hor-menu-light .navbar-nav {\n    /* Mega menu content */\n    /* Classic menu */ }\n    .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.mega-menu-dropdown > .dropdown-menu {\n      box-shadow: 5px 5px rgba(102, 102, 102, 0.1); }\n      .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > h3 {\n        color: #666; }\n    .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > a {\n      color: #c6cfda; }\n      .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > a > i {\n        color: #788ea8; }\n    .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li:hover > a,\n    .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > a:hover {\n      color: #d5dce4;\n      background: #3f4f62; }\n      .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li:hover > a > i,\n      .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > a:hover > i {\n        color: #889bb2; }\n    .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.open > a {\n      color: #333 !important;\n      background: white !important; }\n      .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.open > a > i {\n        color: #333 !important; }\n    .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.active > a,\n    .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.active > a:hover, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.current > a,\n    .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.current > a:hover {\n      color: white;\n      background: #36c6d3; }\n      .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.active > a > i,\n      .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.active > a:hover > i, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.current > a > i,\n      .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.current > a:hover > i {\n        color: #788ea8; }\n    .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu {\n      box-shadow: 5px 5px rgba(102, 102, 102, 0.1);\n      background: white; }\n      .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li > a {\n        color: #000; }\n        .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li > a > i {\n          color: #888; }\n      .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li:hover > a {\n        color: #000;\n        background: whitesmoke; }\n        .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li:hover > a > i {\n          color: #666; }\n      .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.active > a,\n      .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.active > a:hover, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.current > a,\n      .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.current > a:hover {\n        color: #000;\n        background: whitesmoke; }\n        .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.active > a > i,\n        .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.active > a:hover > i, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.current > a > i,\n        .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.current > a:hover > i {\n          color: #666; }\n      .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.divider {\n        background-color: whitesmoke; }\n    .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu {\n      border: 1px solid #f2f2f2; }\n    .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > .dropdown-menu {\n      border-top: 0; }\n\n/* Page sidebar */\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover,\n.page-sidebar {\n  background-color: #364150;\n  /* Default sidebar */\n  /* light sidebar */\n  /* Sidebar search */ }\n  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu,\n  .page-sidebar .page-sidebar-menu {\n    /* 1st level links */\n    /* All links */ }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a,\n    .page-sidebar .page-sidebar-menu > li > a {\n      border-top: 1px solid #3d4957;\n      color: #b4bcc8; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i,\n      .page-sidebar .page-sidebar-menu > li > a > i {\n        color: #606C7D; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i[class^=\"icon-\"],\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i[class*=\"icon-\"],\n      .page-sidebar .page-sidebar-menu > li > a > i[class^=\"icon-\"],\n      .page-sidebar .page-sidebar-menu > li > a > i[class*=\"icon-\"] {\n        color: #6b788b; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > .arrow.open:before,\n      .page-sidebar .page-sidebar-menu > li > a > .arrow:before,\n      .page-sidebar .page-sidebar-menu > li > a > .arrow.open:before {\n        color: #606C7D; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.heading > h3,\n    .page-sidebar .page-sidebar-menu > li.heading > h3 {\n      color: #708096; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:hover > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a,\n    .page-sidebar .page-sidebar-menu > li:hover > a,\n    .page-sidebar .page-sidebar-menu > li.open > a {\n      background: #2C3542;\n      color: #b4bcc8; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:hover > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a > i,\n      .page-sidebar .page-sidebar-menu > li:hover > a > i,\n      .page-sidebar .page-sidebar-menu > li.open > a > i {\n        color: #606C7D; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:hover > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:hover > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a > .arrow.open:before,\n      .page-sidebar .page-sidebar-menu > li:hover > a > .arrow:before,\n      .page-sidebar .page-sidebar-menu > li:hover > a > .arrow.open:before,\n      .page-sidebar .page-sidebar-menu > li.open > a > .arrow:before,\n      .page-sidebar .page-sidebar-menu > li.open > a > .arrow.open:before {\n        color: #606C7D; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a,\n    .page-sidebar .page-sidebar-menu > li.active > a,\n    .page-sidebar .page-sidebar-menu > li.active.open > a {\n      background: #36c6d3;\n      border-top-color: transparent;\n      color: #ffffff; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a:hover, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a:hover,\n      .page-sidebar .page-sidebar-menu > li.active > a:hover,\n      .page-sidebar .page-sidebar-menu > li.active.open > a:hover {\n        background: #36c6d3; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a > i,\n      .page-sidebar .page-sidebar-menu > li.active > a > i,\n      .page-sidebar .page-sidebar-menu > li.active.open > a > i {\n        color: #ffffff; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a > .arrow.open:before,\n      .page-sidebar .page-sidebar-menu > li.active > a > .arrow:before,\n      .page-sidebar .page-sidebar-menu > li.active > a > .arrow.open:before,\n      .page-sidebar .page-sidebar-menu > li.active.open > a > .arrow:before,\n      .page-sidebar .page-sidebar-menu > li.active.open > a > .arrow.open:before {\n        color: #ffffff; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active + li > a,\n    .page-sidebar .page-sidebar-menu > li.active + li > a {\n      border-top-color: transparent; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open + li > a,\n    .page-sidebar .page-sidebar-menu > li.active.open + li > a {\n      border-top-color: #3d4957; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:last-child > a,\n    .page-sidebar .page-sidebar-menu > li:last-child > a {\n      border-bottom: 1px solid transparent !important; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .arrow.open:before,\n    .page-sidebar .page-sidebar-menu li > a > .arrow:before,\n    .page-sidebar .page-sidebar-menu li > a > .arrow.open:before {\n      color: #606C7D; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li:hover > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li:hover > a > .arrow.open:before,\n    .page-sidebar .page-sidebar-menu li:hover > a > .arrow:before,\n    .page-sidebar .page-sidebar-menu li:hover > a > .arrow.open:before {\n      color: #606C7D; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li.active > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li.active > a > .arrow.open:before,\n    .page-sidebar .page-sidebar-menu li.active > a > .arrow:before,\n    .page-sidebar .page-sidebar-menu li.active > a > .arrow.open:before {\n      color: #ffffff; }\n    .page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu:hover .sub-menu, .page-sidebar-closed\n    .page-sidebar .page-sidebar-menu:hover .sub-menu {\n      background-color: #364150; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a,\n    .page-sidebar .page-sidebar-menu .sub-menu > li > a {\n      color: #b4bcc8; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > i,\n      .page-sidebar .page-sidebar-menu .sub-menu > li > a > i {\n        color: #606C7D; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > i[class^=\"icon-\"],\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > i[class*=\"icon-\"],\n      .page-sidebar .page-sidebar-menu .sub-menu > li > a > i[class^=\"icon-\"],\n      .page-sidebar .page-sidebar-menu .sub-menu > li > a > i[class*=\"icon-\"] {\n        color: #6b788b; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > .arrow.open:before,\n      .page-sidebar .page-sidebar-menu .sub-menu > li > a > .arrow:before,\n      .page-sidebar .page-sidebar-menu .sub-menu > li > a > .arrow.open:before {\n        color: #606C7D; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li:hover > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.open > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.active > a,\n    .page-sidebar .page-sidebar-menu .sub-menu > li:hover > a,\n    .page-sidebar .page-sidebar-menu .sub-menu > li.open > a,\n    .page-sidebar .page-sidebar-menu .sub-menu > li.active > a {\n      background: #3e4b5c !important; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li:hover > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.open > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.active > a > i,\n      .page-sidebar .page-sidebar-menu .sub-menu > li:hover > a > i,\n      .page-sidebar .page-sidebar-menu .sub-menu > li.open > a > i,\n      .page-sidebar .page-sidebar-menu .sub-menu > li.active > a > i {\n        color: #606C7D;\n        color: #959fae; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li:hover > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li:hover > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.open > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.open > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.active > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.active > a > .arrow.open:before,\n      .page-sidebar .page-sidebar-menu .sub-menu > li:hover > a > .arrow:before,\n      .page-sidebar .page-sidebar-menu .sub-menu > li:hover > a > .arrow.open:before,\n      .page-sidebar .page-sidebar-menu .sub-menu > li.open > a > .arrow:before,\n      .page-sidebar .page-sidebar-menu .sub-menu > li.open > a > .arrow.open:before,\n      .page-sidebar .page-sidebar-menu .sub-menu > li.active > a > .arrow:before,\n      .page-sidebar .page-sidebar-menu .sub-menu > li.active > a > .arrow.open:before {\n        color: #606C7D; }\n  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light,\n  .page-sidebar .page-sidebar-menu.page-sidebar-menu-light {\n    /* 1st level links */ }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li:hover > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.open > a,\n    .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li:hover > a,\n    .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.open > a {\n      background: #3a4656; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a,\n    .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a,\n    .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a {\n      background: #3e4b5c;\n      border-left: 4px solid #36c6d3;\n      color: #f1f1f1; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a:hover, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a:hover,\n      .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a:hover,\n      .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a:hover {\n        border-left: 4px solid #36c6d3;\n        background: #3a4656; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > i,\n      .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a > i,\n      .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > i {\n        color: #eeeeee; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > .arrow.open:before,\n      .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a > .arrow:before,\n      .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a > .arrow.open:before,\n      .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > .arrow:before,\n      .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > .arrow.open:before {\n        color: #eeeeee; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu,\n    .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu {\n      background: #3a4656; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li:hover > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.open > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.active > a,\n      .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li:hover > a,\n      .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.open > a,\n      .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.active > a {\n        background: #3e4b5c !important; }\n  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler,\n  .page-sidebar .sidebar-toggler {\n    background: #2c3541; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:before,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:after,\n    .page-sidebar .sidebar-toggler > span,\n    .page-sidebar .sidebar-toggler > span:before,\n    .page-sidebar .sidebar-toggler > span:after {\n      background: #a7b5c6; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:hover,\n    .page-sidebar .sidebar-toggler > span:hover {\n      background: #a7b5c6; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:hover:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:hover:after,\n      .page-sidebar .sidebar-toggler > span:hover:before,\n      .page-sidebar .sidebar-toggler > span:hover:after {\n        background: #a7b5c6; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler.th-toggle-exit > span,\n    .page-sidebar .sidebar-toggler.th-toggle-exit > span {\n      background-color: transparent !important; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler:hover,\n    .page-sidebar .sidebar-toggler:hover {\n      background: #212832; }\n  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group,\n  .page-sidebar .sidebar-search .input-group {\n    border-bottom: 1px solid #435060; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control,\n    .page-sidebar .sidebar-search .input-group .form-control {\n      background-color: #364150;\n      color: #4e5d6f; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control::-moz-placeholder,\n      .page-sidebar .sidebar-search .input-group .form-control::-moz-placeholder {\n        color: #4e5d6f;\n        opacity: 1; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control:-ms-input-placeholder,\n      .page-sidebar .sidebar-search .input-group .form-control:-ms-input-placeholder {\n        color: #4e5d6f; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control::-webkit-input-placeholder,\n      .page-sidebar .sidebar-search .input-group .form-control::-webkit-input-placeholder {\n        color: #4e5d6f; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .input-group-btn .btn > i,\n    .page-sidebar .sidebar-search .input-group .input-group-btn .btn > i {\n      color: #4e5d6f; }\n  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered .input-group,\n  .page-sidebar .sidebar-search.sidebar-search-bordered .input-group {\n    border: 1px solid #435060; }\n  .page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.open .input-group, .page-sidebar-closed\n  .page-sidebar .sidebar-search.open .input-group {\n    background-color: #364150; }\n  .page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.open .remove > i, .page-sidebar-closed\n  .page-sidebar .sidebar-search.open .remove > i {\n    color: #4e5d6f; }\n  .page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid .input-group, .page-sidebar-closed\n  .page-sidebar .sidebar-search.sidebar-search-solid .input-group {\n    background: none; }\n  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid .input-group,\n  .page-sidebar .sidebar-search.sidebar-search-solid .input-group {\n    border: 1px solid #2c3541;\n    background: #2c3541; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid .input-group .form-control,\n    .page-sidebar .sidebar-search.sidebar-search-solid .input-group .form-control {\n      background: #2c3541; }\n  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid.open .input-group,\n  .page-sidebar .sidebar-search.sidebar-search-solid.open .input-group {\n    border: 1px solid #364150;\n    background: #364150; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid.open .input-group .form-control,\n    .page-sidebar .sidebar-search.sidebar-search-solid.open .input-group .form-control {\n      background: #364150; }\n\n.page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light {\n  /* 1st level links */ }\n  .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light > li.active > a, .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a {\n    border-left: 0;\n    border-right: 4px solid #36c6d3; }\n    .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light > li.active > a:hover, .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a:hover {\n      border-left: 0;\n      border-right: 4px solid #36c6d3; }\n\n/******\n    Page Footer \n    ******/\n.page-footer .page-footer-inner {\n  color: #98a6ba; }\n\n.page-footer-fixed .page-footer {\n  background-color: #28303b; }\n\n@media (min-width: 992px) {\n  /* 992px */\n  /* Sidebar menu closed */\n  .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu {\n    box-shadow: 5px 5px rgba(44, 53, 66, 0.2); }\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu.sidebar-toggler-wrapper, .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu.sidebar-search-wrapper {\n      box-shadow: none; }\n  .page-sidebar-menu.page-sidebar-menu-closed > li:hover {\n    box-shadow: 5px 5px rgba(44, 53, 66, 0.2); }\n    .page-sidebar-menu.page-sidebar-menu-closed > li:hover.sidebar-toggler-wrapper, .page-sidebar-menu.page-sidebar-menu-closed > li:hover.sidebar-search-wrapper {\n      box-shadow: none; }\n    .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu {\n      box-shadow: 5px 5px rgba(44, 53, 66, 0.2); }\n      .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu.sidebar-toggler-wrapper, .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu.sidebar-search-wrapper {\n        box-shadow: none; }\n  /* Light sidebar menu */\n  .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-closed > li.heading {\n    padding: 0;\n    margin-top: 15px;\n    margin-bottom: 15px;\n    border-top: 1px solid #3d4957 !important; }\n  /* Fixed Sidebar */\n  .page-sidebar-fixed:not(.page-footer-fixed) .page-content {\n    border-bottom: 0; }\n  .page-sidebar-fixed:not(.page-footer-fixed) .page-footer {\n    background-color: #fff; }\n    .page-sidebar-fixed:not(.page-footer-fixed) .page-footer .page-footer-inner {\n      color: #333; }\n  /* Boxed Layout */\n  .page-boxed {\n    background-color: #303a47 !important;\n    /* Page container */\n    /* Page sidebar */\n    /* Page footer */ }\n    .page-boxed .page-container {\n      background-color: #364150;\n      border-left: 1px solid #3d4957;\n      border-bottom: 1px solid #3d4957; }\n    .page-boxed.page-sidebar-reversed .page-container {\n      border-left: 0;\n      border-right: 1px solid #3d4957; }\n    .page-boxed.page-sidebar-fixed .page-container {\n      border-left: 0;\n      border-bottom: 0; }\n    .page-boxed.page-sidebar-reversed.page-sidebar-fixed .page-container {\n      border-left: 0;\n      border-right: 0;\n      border-bottom: 0; }\n    .page-boxed.page-sidebar-fixed .page-sidebar {\n      border-left: 1px solid #3d4957; }\n    .page-boxed.page-sidebar-reversed.page-sidebar-fixed .page-sidebar {\n      border-right: 1px solid #3d4957;\n      border-left: 0; }\n    .page-boxed.page-sidebar-fixed.page-footer-fixed .page-footer {\n      background-color: #303a47 !important; }\n      .page-boxed.page-sidebar-fixed.page-footer-fixed .page-footer .page-footer-inner {\n        color: #98a6ba; }\n  /* Sidebar Menu Wirh Hoverable Submenu */\n  .page-sidebar-menu-hover-submenu li:hover a > .arrow {\n    border-right: 8px solid #323c4b; }\n    .page-sidebar-reversed .page-sidebar-menu-hover-submenu li:hover a > .arrow {\n      border-left: 8px solid #323c4b; }\n  .page-sidebar-menu-hover-submenu li:hover > .sub-menu {\n    background: #323c4b !important; } }\n\n@media (max-width: 991px) {\n  /* 991px */\n  /* Page sidebar */\n  .page-sidebar {\n    background-color: #28303b;\n    /* light sidebar */ }\n    .page-sidebar .page-sidebar-menu > li > a {\n      border-top: 1px solid #364150; }\n    .page-sidebar .page-sidebar-menu > li:hover > a, .page-sidebar .page-sidebar-menu > li.open > a {\n      background: #2e3744; }\n    .page-sidebar .page-sidebar-menu > li:last-child > a {\n      border-bottom: 0 !important; }\n    .page-sidebar .page-sidebar-menu > li .sub-menu {\n      background-color: #28303b !important; }\n    .page-sidebar .page-sidebar-menu .sidebar-search input {\n      background-color: #28303b !important; }\n    .page-sidebar .page-sidebar-menu.page-sidebar-menu-light {\n      /* 1st level links */ }\n      .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li:hover > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.open > a {\n        background: #2e3744; }\n      .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a {\n        background: #2e3744; }\n        .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a:hover, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a:hover {\n          background: #2e3744; }\n      .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu {\n        background: #28303b !important; }\n        .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li:hover > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.open > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.active > a {\n          background: #2e3744 !important; } }\n\n@media (max-width: 480px) {\n  /* 480px */\n  .page-header.navbar {\n    /* Top menu */ }\n    .page-header.navbar .top-menu {\n      background-color: #364150; }\n      .page-header-fixed-mobile .page-header.navbar .top-menu {\n        background-color: #2b3643; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle {\n        background-color: #415265; }\n        .page-header-fixed-mobile .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle {\n          background: none; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle:hover {\n          background-color: #3f4f62; } }\n\n/****\n    Boby\n    ****/\nbody {\n  background-color: #364150; }\n\n/****\n CSS3 Spinner Bar\n****/\n.page-spinner-bar > div,\n.block-spinner-bar > div {\n  background: #4bccd8; }\n"
  },
  {
    "path": "resources/assets/static/src/themes/global/error.css",
    "content": "/* Cubic Bezier Transition */\n/***\nError Pages\n***/\n/* 404 page option #1 */\n.page-404 {\n  text-align: center; }\n\n.page-404 .number {\n  position: relative;\n  top: 35px;\n  display: inline-block;\n  letter-spacing: -10px;\n  margin-top: 0px;\n  margin-bottom: 10px;\n  line-height: 128px;\n  font-size: 128px;\n  font-weight: 300;\n  color: #7bbbd6;\n  text-align: right; }\n\n.page-404 .details {\n  margin-left: 40px;\n  display: inline-block;\n  padding-top: 0px;\n  text-align: left; }\n\n/* 500 page option #1 */\n.page-500 {\n  text-align: center; }\n\n.page-500 .number {\n  display: inline-block;\n  letter-spacing: -10px;\n  line-height: 128px;\n  font-size: 128px;\n  font-weight: 300;\n  color: #ec8c8c;\n  text-align: right; }\n\n.page-500 .details {\n  margin-left: 40px;\n  display: inline-block;\n  text-align: left; }\n\n/* 404 page option #2*/\n.page-404-full-page {\n  overflow-x: hidden;\n  padding: 20px;\n  margin-bottom: 20px;\n  background-color: #fafafa !important; }\n\n.page-404-full-page .details input {\n  background-color: #ffffff; }\n\n.page-404-full-page .page-404 {\n  margin-top: 100px; }\n\n/* 500 page option #2*/\n.page-500-full-page {\n  overflow-x: hidden;\n  padding: 20px;\n  background-color: #fafafa !important; }\n\n.page-500-full-page .details input {\n  background-color: #ffffff; }\n\n.page-500-full-page .page-500 {\n  margin-top: 100px; }\n\n/* 404 page option #3*/\n.page-404-3 {\n  background: #000 !important; }\n\n.page-404-3 .page-inner img {\n  right: 0;\n  bottom: 0;\n  z-index: -1;\n  position: absolute; }\n\n.page-404-3 .error-404 {\n  color: #fff;\n  text-align: left;\n  padding: 70px 20px 0; }\n\n.page-404-3 h1 {\n  color: #fff;\n  font-size: 130px;\n  line-height: 160px; }\n\n.page-404-3 h2 {\n  color: #fff;\n  font-size: 30px;\n  margin-bottom: 30px; }\n\n.page-404-3 p {\n  color: #fff;\n  font-size: 16px; }\n\n@media (max-width: 480px) {\n  .page-404 .number,\n  .page-500 .number,\n  .page-404 .details,\n  .page-500 .details {\n    text-align: center;\n    margin-left: 0px; }\n  .page-404-full-page .page-404 {\n    margin-top: 30px; }\n  .page-404-3 .error-404 {\n    text-align: left;\n    padding-top: 10px; }\n  .page-404-3 .page-inner img {\n    right: 0;\n    bottom: 0;\n    z-index: -1;\n    position: fixed; } }\n"
  },
  {
    "path": "resources/assets/static/src/themes/global/img/flags/readme.txt",
    "content": "Flag icons - http://www.famfamfam.com\n\nThese icons are public domain, and as such are free for any use (attribution appreciated but not required).\n\nNote that these flags are named using the ISO3166-1 alpha-2 country codes where appropriate. A list of codes can be found at http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\n\nIf you find these icons useful, please donate via paypal to mjames@gmail.com (or click the donate button available at http://www.famfamfam.com/lab/icons/silk)\n\nContact: mjames@gmail.com"
  },
  {
    "path": "resources/assets/static/src/themes/global/layout.css",
    "content": "@charset \"UTF-8\";\n/* Cubic Bezier Transition */\n@media print {\n  body {\n    background-color: #fff !important; }\n  .page-bar {\n    display: none; }\n  .page-sidebar-wrapper {\n    display: none; }\n  .page-quick-sidebar-wrapper {\n    display: none; }\n  .theme-panel {\n    display: none; }\n  .hidden-print {\n    display: none; }\n  .page-footer {\n    display: none; }\n  .no-page-break {\n    page-break-after: avoid; }\n  .page-container {\n    margin: 0px !important;\n    padding: 0px !important; }\n  .page-content {\n    padding: 0 !important;\n    min-height: 300px !important;\n    padding: 0px 20px 20px !important;\n    margin: 0 !important; } }\n\n/***\nPage Header\n***/\n.page-header.navbar {\n  width: 100%;\n  padding: 0 20px 0 20px;\n  margin: 0;\n  border: 0px;\n  padding: 0px;\n  box-shadow: none;\n  height: 50px;\n  min-height: 50px;\n  filter: none;\n  background-image: none;\n  /* Fixed header */\n  /* Header logo */\n  /* Search box */\n  /* Menu Toggler */\n  /* Top menu */ }\n  .page-header.navbar.navbar-fixed-top {\n    z-index: 9995; }\n  .page-header.navbar.navbar-static-top {\n    z-index: 9995; }\n  .page-header.navbar .page-logo {\n    float: left;\n    display: block;\n    width: 235px;\n    height: 50px;\n    padding-left: 20px;\n    padding-right: 20px; }\n    .page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo {\n      padding: 0; }\n    .page-header.navbar .page-logo > .logo-image,\n    .page-header.navbar .page-logo > a {\n      display: inline-block;\n      float: left; }\n    .page-header.navbar .page-logo .logo-default {\n      margin: 18px 0 0 0; }\n    .page-header.navbar .page-logo .logo-mini {\n      display: none;\n      margin-left: 5px; }\n    .page-header.navbar .page-logo .text-logo {\n      padding-left: 20px;\n      padding-top: 12px; }\n  .page-header.navbar .search-form {\n    display: inline-block;\n    width: 50px;\n    position: relative;\n    float: left;\n    transition: all 0.6s; }\n    .page-header.navbar .search-form .input-group .form-control {\n      height: 50px;\n      border: 0;\n      background: transparent !important;\n      font-size: 13px;\n      padding-left: 0;\n      margin-left: 12px;\n      text-indent: -150000px; }\n      .page-header.navbar .search-form .input-group .form-control:hover {\n        cursor: pointer; }\n    .page-header.navbar .search-form .input-group .input-group-btn {\n      height: 50px; }\n      .page-header.navbar .search-form .input-group .input-group-btn .btn.submit {\n        margin-left: -24px;\n        padding: 0;\n        width: 50px;\n        background: none;\n        margin-top: 4px;\n        display: block; }\n        .page-header.navbar .search-form .input-group .input-group-btn .btn.submit > i {\n          font-size: 15px; }\n    .page-header.navbar .search-form.open {\n      transition: all 0.6s;\n      width: 300px !important; }\n      .page-header.navbar .search-form.open .input-group .form-control {\n        text-indent: 0; }\n        .page-header.navbar .search-form.open .input-group .form-control:hover {\n          cursor: text; }\n      .page-header.navbar .search-form.open .input-group .input-group-btn .btn.submit {\n        margin-left: 0; }\n  .page-header.navbar .menu-toggler {\n    cursor: pointer;\n    opacity: 0.7 ;\n    filter: alpha(opacity=70) ;\n    display: block;\n    webkit-transition: opacity 0.3s;\n    -moz-transition: opacity 0.3s;\n    -ms-transition: opacity 0.3s;\n    -o-transition: opacity 0.3s;\n    transition: opacity 0.3s; }\n    .page-header.navbar .menu-toggler > span {\n      outline: none !important; }\n      .page-header.navbar .menu-toggler > span:hover {\n        background: #ffffff; }\n        .page-header.navbar .menu-toggler > span:hover:before, .page-header.navbar .menu-toggler > span:hover:after {\n          background: #ffffff; }\n    .page-header.navbar .menu-toggler > span,\n    .page-header.navbar .menu-toggler > span:before,\n    .page-header.navbar .menu-toggler > span:after {\n      display: inline-block;\n      width: 16px;\n      height: 1px;\n      background: #ffffff;\n      position: relative;\n      top: -5px;\n      transition: all ease .3s; }\n    .page-header.navbar .menu-toggler > span:before,\n    .page-header.navbar .menu-toggler > span:after {\n      position: absolute;\n      left: 0;\n      content: ''; }\n    .page-header.navbar .menu-toggler > span:before {\n      top: 5px; }\n    .page-header.navbar .menu-toggler > span:after {\n      top: -5px; }\n    .page-header.navbar .menu-toggler.th-toggle-exit > span {\n      background-color: transparent !important; }\n    .page-header.navbar .menu-toggler.th-toggle-exit > span:after {\n      webkit-transform: translateY(5px) rotateZ(45deg);\n      -moz-transform: translateY(5px) rotateZ(45deg);\n      -ms-transform: translateY(5px) rotateZ(45deg);\n      -o-transform: translateY(5px) rotateZ(45deg);\n      transform: translateY(5px) rotateZ(45deg); }\n    .page-header.navbar .menu-toggler.th-toggle-exit > span:before {\n      webkit-transform: translateY(-5px) rotateZ(-45deg);\n      -moz-transform: translateY(-5px) rotateZ(-45deg);\n      -ms-transform: translateY(-5px) rotateZ(-45deg);\n      -o-transform: translateY(-5px) rotateZ(-45deg);\n      transform: translateY(-5px) rotateZ(-45deg); }\n    .page-header.navbar .menu-toggler:hover {\n      webkit-transition: opacity 0.3s;\n      -moz-transition: opacity 0.3s;\n      -ms-transition: opacity 0.3s;\n      -o-transition: opacity 0.3s;\n      transition: opacity 0.3s;\n      opacity: 1 ;\n      filter: alpha(opacity=100) ; }\n    .page-header.navbar .menu-toggler.sidebar-toggler {\n      float: right;\n      margin: 15.5px 0 0 0; }\n      .page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .menu-toggler.sidebar-toggler {\n        margin-right: 13px; }\n    .page-header.navbar .menu-toggler.responsive-toggler {\n      display: none;\n      float: right;\n      margin: 15.5px 6px 0 6px; }\n  .page-header.navbar .top-menu {\n    margin: 0;\n    padding: 0;\n    float: right; }\n    .page-header.navbar .top-menu .navbar-nav {\n      padding: 0;\n      margin-right: 20px;\n      display: block;\n      /* Extended Dropdowns */\n      /* Notification */\n      /* Inbox */\n      /* Tasks */\n      /* User */\n      /* Language */\n      /* Dark version */ }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown {\n        margin: 0px;\n        padding: 0px 4px;\n        height: 50px;\n        display: inline-block; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown:last-child {\n          padding-right: 0px; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle {\n          margin: 0px;\n          padding: 19px 10px 10px 10px; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle:last-child {\n            padding-right: 0; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle > i {\n            font-size: 17px; }\n            .page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle > i.glyphicon {\n              font-size: 16px; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle > .badge {\n            font-family: \"Open Sans\", sans-serif;\n            position: absolute;\n            top: 10px;\n            right: 20px;\n            font-weight: 300;\n            padding: 3px 6px; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle:focus {\n            background: none; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-menu {\n          margin-top: 3px;\n          -webkit-border-radius: 4px;\n          -moz-border-radius: 4px;\n          -ms-border-radius: 4px;\n          -o-border-radius: 4px;\n          border-radius: 4px; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-menu:before {\n            position: absolute;\n            top: -7px;\n            right: 9px;\n            display: inline-block !important;\n            border-right: 7px solid transparent;\n            border-bottom: 7px solid #eee;\n            border-left: 7px solid transparent;\n            border-bottom-color: rgba(0, 0, 0, 0.2);\n            content: ''; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-menu:after {\n            position: absolute;\n            top: -6px;\n            right: 10px;\n            display: inline-block !important;\n            border-right: 6px solid transparent;\n            border-bottom: 6px solid #fff;\n            border-left: 6px solid transparent;\n            content: ''; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-menu > li > a {\n            color: #555; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu {\n        min-width: 160px;\n        max-width: 275px;\n        width: 275px;\n        z-index: 9995;\n        /* header notifications dropdowns */ }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external {\n          display: block;\n          overflow: hidden;\n          padding: 15px 15px;\n          letter-spacing: 0.5px;\n          -webkit-border-radius: 4px 4px 0 0;\n          -moz-border-radius: 4px 4px 0 0;\n          -ms-border-radius: 4px 4px 0 0;\n          -o-border-radius: 4px 4px 0 0;\n          border-radius: 4px 4px 0 0; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > h3 {\n            margin: 0;\n            padding: 0;\n            float: left;\n            font-size: 13px;\n            display: inline-block; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > a {\n            display: inline-block;\n            padding: 0;\n            background: none;\n            clear: inherit;\n            font-size: 13px;\n            font-weight: 300;\n            position: absolute;\n            right: 10px;\n            border: 0;\n            margin-top: -1px; }\n            .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > a:hover {\n              text-decoration: none; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list {\n          padding-right: 0 !important;\n          padding-left: 0;\n          list-style: none; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li > a {\n            display: block;\n            clear: both;\n            font-weight: 300;\n            line-height: 20px;\n            white-space: normal;\n            font-size: 13px;\n            padding: 16px 15px 18px;\n            text-shadow: none; }\n            .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li > a:hover {\n              opacity: 1 ;\n              filter: alpha(opacity=100) ;\n              text-decoration: none; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li:first-child a {\n            border-top: none; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .details {\n        overflow: hidden; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .details .label-icon {\n          margin-right: 10px;\n          -webkit-border-radius: 50%;\n          -moz-border-radius: 50%;\n          -ms-border-radius: 50%;\n          -o-border-radius: 50%;\n          border-radius: 50%; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .details .label-icon i {\n            margin-right: 2px;\n            margin-left: 1px; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .details .label-icon .badge {\n            right: 15px; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .time {\n        float: right;\n        max-width: 75px;\n        font-size: 11px;\n        font-weight: 400;\n        opacity: 0.7 ;\n        filter: alpha(opacity=70) ;\n        text-align: right;\n        padding: 1px 5px; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .photo {\n        float: left;\n        margin: 0 6px 6px 0; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .photo img {\n          height: 40px;\n          width: 40px;\n          -webkit-border-radius: 50% !important;\n          -moz-border-radius: 50% !important;\n          -ms-border-radius: 50% !important;\n          -o-border-radius: 50% !important;\n          border-radius: 50% !important; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .subject {\n        display: block;\n        margin-left: 46px; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .subject .from {\n          font-size: 13px;\n          font-weight: 600; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .subject .time {\n          font-size: 12px;\n          font-weight: 400;\n          opacity: 0.5 ;\n          filter: alpha(opacity=50) ;\n          float: right; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .message {\n        display: block !important;\n        font-size: 12px;\n        line-height: 1.3;\n        margin-left: 46px; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .task {\n        margin-bottom: 5px; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .task .desc {\n          font-size: 13px;\n          font-weight: 300; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .task .percent {\n          float: right;\n          font-weight: 600;\n          display: inline-block; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .progress {\n        display: block;\n        height: 8px;\n        margin: 8px 0 2px; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .progress .progress-bar {\n          box-shadow: none; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle {\n        padding: 16px 6px 13px 8px; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle > .username {\n          display: inline-block;\n          font-size: 13px;\n          font-weight: 300; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle > img {\n          float: left;\n          margin-top: -5px;\n          margin-right: 5px;\n          height: 29px;\n          display: inline-block; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle > i {\n          display: inline-block;\n          margin-top: 5px;\n          margin: 0;\n          font-size: 13px; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-menu {\n        width: 175px; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-menu > li > a {\n          font-size: 14px;\n          font-weight: 300; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-menu > li > a i {\n            width: 15px;\n            display: inline-block;\n            margin-right: 9px; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-menu > li > a .badge {\n            margin-right: 10px; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-language {\n        padding-left: 0;\n        padding-right: 0;\n        margin: 0; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-toggle {\n          padding: 16px 3px 13px 7px; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-toggle > img {\n            margin-bottom: 2px; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-toggle > i {\n            font-size: 14px; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-menu > li > a {\n          font-size: 13px; }\n          .page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-menu > li > a > img {\n            margin-bottom: 2px;\n            margin-right: 5px; }\n      .page-header.navbar .top-menu .navbar-nav li.dropdown-dark .dropdown-menu:before {\n        border-left: none;\n        border-right: none; }\n      .page-header.navbar .top-menu .navbar-nav li.dropdown-dark .dropdown-menu .dropdown-menu-list > li.external a {\n        background: none !important;\n        border: none !important; }\n\n/* Allow expanded search for above 768px */\n@media (min-width: 768px) {\n  /* 768px */\n  .page-header.navbar {\n    /* Search box */ }\n    .page-header.navbar .search-form.search-form-expanded {\n      width: 200px; }\n      .page-header.navbar .search-form.search-form-expanded .input-group .form-control {\n        text-indent: 0; }\n        .page-header.navbar .search-form.search-form-expanded .input-group .form-control:hover {\n          cursor: text; }\n      .page-header.navbar .search-form.search-form-expanded .input-group .input-group-btn .btn.submit {\n        margin-left: 0; } }\n\n/*** \nHorizontal Menu \n***/\n.page-header.navbar {\n  /* Header container */\n  /* Mega menu */ }\n  .page-header.navbar .container {\n    position: relative; }\n  .page-header.navbar .hor-menu {\n    margin: 0 0 0 -17px;\n    margin: 0;\n    float: left; }\n    .page-header.navbar .hor-menu .navbar-nav {\n      position: static;\n      /* Mega menu */\n      /* Mega Menu Dropdown */\n      /* Classic menu */ }\n      .page-header.navbar .hor-menu .navbar-nav.navbar-right .dropdown-menu {\n        left: auto;\n        right: 0; }\n      .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown {\n        position: static; }\n        .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu {\n          left: auto;\n          width: auto; }\n          .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content {\n            font-family: \"Open Sans\", sans-serif;\n            padding: 15px;\n            margin: 0; }\n            .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content.mega-menu-responsive-content {\n              padding: 10px 18px 10px 45px; }\n            .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu {\n              padding: 0;\n              margin: 0; }\n              .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu:last-child {\n                border-right: 0; }\n              .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li {\n                margin: 0 !important;\n                list-style: none; }\n                .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > h3 {\n                  margin-top: 5px;\n                  padding-left: 6px;\n                  font-size: 15px;\n                  font-weight: 400; }\n                .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a {\n                  display: block;\n                  white-space: normal;\n                  font-family: \"Open Sans\", sans-serif;\n                  padding: 7px;\n                  margin: 0;\n                  font-size: 14px;\n                  font-weight: 300; }\n                  .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a:hover {\n                    text-decoration: none; }\n                  .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a.iconify {\n                    padding: 7px 7px 7px 30px; }\n                    .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a.iconify > i {\n                      position: absolute;\n                      top: auto !important;\n                      margin-left: -24px;\n                      font-size: 15px;\n                      margin-top: 3px !important; }\n                  .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a .badge,\n                  .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a .label {\n                    margin-left: 5px; }\n        .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown.mega-menu-full .dropdown-menu {\n          left: 20px;\n          right: 20px; }\n        .page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown:hover > .dropdown-menu {\n          display: block; }\n      .page-header.navbar .hor-menu .navbar-nav > li.menu-dropdown .dropdown-menu:after, .page-header.navbar .hor-menu .navbar-nav > li.menu-dropdown .dropdown-menu:before {\n        display: none !important; }\n      .page-header.navbar .hor-menu .navbar-nav > li > a {\n        font-size: 14px;\n        font-weight: 400;\n        padding: 13px 13px; }\n        .page-header.navbar .hor-menu .navbar-nav > li > a:focus {\n          background: none !important; }\n      .page-header.navbar .hor-menu .navbar-nav > li.current .selected, .page-header.navbar .hor-menu .navbar-nav > li.active .selected {\n        left: 50%;\n        bottom: 0;\n        position: absolute;\n        border-left: 6px solid transparent;\n        border-right: 6px solid transparent;\n        border-top: 6px solid transparent;\n        display: inline-block;\n        margin: 0;\n        width: 0;\n        height: 0px;\n        margin-left: -7px;\n        margin-bottom: -6px; }\n      .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu {\n        margin-top: 0;\n        border: none; }\n        .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a {\n          font-family: \"Open Sans\", sans-serif;\n          font-size: 14px;\n          font-weight: 300;\n          padding: 9px 10px;\n          white-space: normal; }\n          .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a .label,\n          .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a .badge {\n            font-weight: 300; }\n      .page-header.navbar .hor-menu .navbar-nav > li.classic-menu-dropdown .dropdown-menu {\n        min-width: 195px;\n        max-width: 235px; }\n      .page-header.navbar .hor-menu .navbar-nav > li.classic-menu-dropdown:hover > .dropdown-menu {\n        display: block; }\n      .page-header.navbar .hor-menu .navbar-nav > li .dropdown-submenu > .dropdown-menu {\n        top: 0; }\n      .page-header.navbar .hor-menu .navbar-nav > li .dropdown-submenu > a:after {\n        top: 9px;\n        right: 10px; }\n\n/* Form medium devices upto large devices */\n@media (min-width: 992px) and (max-width: 1200px) {\n  /* 992px 1200px */\n  /* Boxed layout */\n  .page-boxed .page-header.navbar {\n    /* Top menu */ }\n    .page-boxed .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle .username.username-hide-on-mobile {\n      display: none; }\n    .page-boxed .page-header.navbar .top-menu .navbar-nav > li.dropdown-language .dropdown-toggle .langname {\n      display: none; } }\n\n@media (min-width: 992px) {\n  /* 992px */\n  /* Page header */\n  .page-header.navbar {\n    /* Header logo */ }\n    .page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo {\n      padding: 0; }\n    .page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo {\n      width: 45px; }\n      .page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo .logo-default {\n        display: none; }\n  /* Boxed Layout */\n  .page-boxed .page-header.navbar {\n    /* Page logo */\n    /* Top menu */ }\n    .page-boxed .page-header.navbar .page-logo {\n      width: 236px; }\n    .page-boxed .page-header.navbar .top-menu .navbar-nav {\n      margin-right: 0px; }\n  /* Sidebar closed & logo hidden */\n  .page-sidebar-closed.page-sidebar-closed-hide-logo.page-boxed .page-header.navbar {\n    /* Page logo */ }\n    .page-sidebar-closed.page-sidebar-closed-hide-logo.page-boxed .page-header.navbar .page-logo {\n      width: 46px; }\n  /* Boxed layout & page sidebar fixed layout */\n  .page-boxed.page-sidebar-fixed .page-header.navbar {\n    /* Page logo */ }\n    .page-boxed.page-sidebar-fixed .page-header.navbar .page-logo {\n      width: 235px; } }\n\n@media (max-width: 991px) {\n  /* 991px */\n  /* Page header */\n  .page-header.navbar {\n    padding: 0 20px 0 20px;\n    position: relative;\n    clear: both;\n    /* Page logo */\n    /* Menu Toggler */\n    /* Top Menu */ }\n    .page-header.navbar .page-logo {\n      width: auto;\n      padding: 0;\n      margin-right: 10px;\n      margin-left: 0px !important;\n      padding-left: 0px !important; }\n      .page-header.navbar .page-logo img {\n        margin-left: 4px !important; }\n    .page-header.navbar .menu-toggler.sidebar-toggler {\n      display: none !important; }\n    .page-header.navbar .menu-toggler.responsive-toggler {\n      display: inline-block; }\n    .page-header.navbar .top-menu .navbar-nav {\n      display: inline-block;\n      margin: 0 10px 0 0; }\n      .page-header.navbar .top-menu .navbar-nav > li {\n        float: left; }\n      .page-header.navbar .top-menu .navbar-nav .nav li.dropdown i {\n        display: inline-block;\n        position: relative;\n        top: 1px;\n        right: 0px; }\n      .page-header.navbar .top-menu .navbar-nav .open .dropdown-menu {\n        position: absolute; }\n  /* Fixed header for mobile */\n  .page-header-fixed.page-header-fixed-mobile .navbar-fixed-top {\n    position: fixed; }\n  /* Boxed Layout */\n  .page-boxed .page-header.navbar > .container {\n    max-width: none !important;\n    margin: 0 !important;\n    padding: 0 !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  /* 768px & 991px */\n  /* Boxed Layout */\n  .page-boxed .page-header.navbar {\n    margin: auto !important;\n    padding: 0; }\n    .page-boxed .page-header.navbar > .container {\n      margin: auto !important; } }\n\n@media (max-width: 767px) {\n  /* 767px */\n  /* Page header */\n  .page-header.navbar {\n    padding: 0 10px 0 10px;\n    /* Header logo */\n    /* Search box */\n    /* Top navigation menu*/ }\n    .page-header.navbar .page-logo {\n      width: auto; }\n    .page-header.navbar .search-form.open {\n      z-index: 3;\n      left: 10px;\n      right: 10px;\n      position: absolute;\n      width: auto !important; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended > .dropdown-menu {\n      max-width: 255px;\n      width: 255px; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu {\n      margin-right: -190px; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu:after, .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu:before {\n        margin-right: 190px; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox .dropdown-menu {\n      margin-right: -150px; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox .dropdown-menu:after, .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox .dropdown-menu:before {\n        margin-right: 150px; }\n    .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu {\n      margin-right: -110px; }\n      .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu:after, .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu:before {\n        margin-right: 110px; } }\n\n@media (max-width: 580px) {\n  /* Page header */\n  .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle .username.username-hide-on-mobile {\n    display: none; }\n  .page-header.navbar .top-menu .navbar-nav > li.dropdown-language .dropdown-toggle .langname {\n    display: none; } }\n\n@media (max-width: 480px) {\n  /* 480px */\n  /* Fixed header for mobile */\n  .page-header-fixed.page-header-fixed-mobile .page-header.navbar {\n    height: 100px; }\n  .page-header.navbar {\n    /* Top menu */ }\n    .page-header.navbar .top-menu {\n      display: block;\n      clear: both;\n      float: none; }\n      .page-header.navbar .top-menu .navbar-nav {\n        margin-right: 0; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle {\n          padding: 19px 6px 10px 6px; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-language .dropdown-toggle {\n          padding: 16px 4px 13px 2px; }\n        .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle {\n          padding: 16px 0px 13px 2px; } }\n\n/***\nPace - Page Progress\n***/\n.pace .pace-progress {\n  z-index: 10005;\n  top: 50px;\n  height: 2px;\n  box-shadow: none; }\n\n.pace .pace-progress-inner {\n  box-shadow: none; }\n\n.pace .pace-inactive {\n  display: none; }\n\n.pace .pace-activity {\n  top: 54px;\n  z-index: 10005;\n  right: 20px;\n  border-radius: 10px !important; }\n\n@media (max-width: 480px) {\n  /* 480px */\n  .page-header-fixed .pace .pace-progress {\n    top: 100px; }\n  .page-header-fixed .pace .pace-activity {\n    top: 104px; } }\n\n/***\nPage container\n***/\n.page-container {\n  margin: 0px;\n  padding: 0px;\n  position: relative;\n  /* Fixed header */\n  /* Fixed footer for mobile */ }\n  .page-container:before, .page-container:after {\n    content: \" \";\n    display: table; }\n  .page-container:after {\n    clear: both; }\n  .page-header-fixed .page-container {\n    margin-top: 50px; }\n  .page-footer-fixed.page-footer-fixed-mobile .page-container {\n    margin-bottom: 20px !important; }\n\n@media (min-width: 992px) {\n  /* Page container in fixed footer */\n  .page-footer-fixed .page-container {\n    margin-bottom: 20px !important; } }\n\n@media (max-width: 991px) {\n  /* Page container */\n  .page-container {\n    margin: 0 !important;\n    padding: 0 !important; }\n    .page-header-fixed.page-header-fixed-mobile .page-container {\n      margin-top: 50px !important; } }\n\n@media (max-width: 480px) {\n  /* Page container */\n  .page-header-fixed.page-header-fixed-mobile .page-container {\n    margin-top: 100px !important; } }\n\n/***\nPage sidebar\n***/\n/* Page Sidebar */\n.page-sidebar,\n.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover {\n  /* Default sidebar menu */\n  /* light sidebar menu */ }\n  .page-sidebar.navbar-collapse,\n  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover.navbar-collapse {\n    padding: 0;\n    box-shadow: none; }\n  .page-sidebar .page-sidebar-menu,\n  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    /* 1st level links */\n    /* all links */ }\n    .page-sidebar .page-sidebar-menu > li,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li {\n      display: block;\n      margin: 0;\n      padding: 0;\n      border: 0px; }\n      .page-sidebar .page-sidebar-menu > li.sidebar-toggler-wrapper, .page-sidebar .page-sidebar-menu > li.sidebar-search-wrapper,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-toggler-wrapper,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-search-wrapper {\n        border: 0 !important; }\n        .page-sidebar .page-sidebar-menu > li.sidebar-toggler-wrapper:before, .page-sidebar .page-sidebar-menu > li.sidebar-toggler-wrapper:after, .page-sidebar .page-sidebar-menu > li.sidebar-search-wrapper:before, .page-sidebar .page-sidebar-menu > li.sidebar-search-wrapper:after,\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-toggler-wrapper:before,\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-toggler-wrapper:after,\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-search-wrapper:before,\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-search-wrapper:after {\n          content: \" \";\n          display: table; }\n        .page-sidebar .page-sidebar-menu > li.sidebar-toggler-wrapper:after, .page-sidebar .page-sidebar-menu > li.sidebar-search-wrapper:after,\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-toggler-wrapper:after,\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-search-wrapper:after {\n          clear: both; }\n      .page-sidebar .page-sidebar-menu > li.start > a,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.start > a {\n        border-top-color: transparent !important; }\n      .page-sidebar .page-sidebar-menu > li.last > a,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.last > a {\n        border-bottom-color: transparent !important; }\n      .page-sidebar .page-sidebar-menu > li > a,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a {\n        display: block;\n        position: relative;\n        margin: 0;\n        border: 0px;\n        padding: 10px 15px;\n        text-decoration: none;\n        font-size: 14px;\n        font-weight: 300; }\n        .page-sidebar .page-sidebar-menu > li > a > i,\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i {\n          font-size: 16px;\n          margin-right: 5px;\n          text-shadow: none; }\n        .page-sidebar .page-sidebar-menu > li > a > i.glyphicon,\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i.glyphicon {\n          margin-left: 1px;\n          margin-right: 4px; }\n        .page-sidebar .page-sidebar-menu > li > a > [class^=\"icon-\"],\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > [class^=\"icon-\"] {\n          margin-left: 1px;\n          margin-right: 4px; }\n        .page-sidebar-fixed .page-sidebar .page-sidebar-menu > li > a, .page-sidebar-fixed\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a {\n          transition: all 0.2s ease; }\n        .page-sidebar-reversed.page-sidebar-fixed .page-sidebar .page-sidebar-menu > li > a, .page-sidebar-reversed.page-sidebar-fixed\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a {\n          transition: none; }\n      .page-sidebar .page-sidebar-menu > li.heading,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.heading {\n        padding: 15px 15px 15px 15px; }\n        .page-sidebar .page-sidebar-menu > li.heading > h3,\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.heading > h3 {\n          margin: 0;\n          padding: 0;\n          font-size: 14px;\n          font-weight: 300; }\n      .page-sidebar .page-sidebar-menu > li.heading + li > a,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.heading + li > a {\n        border-top: 0; }\n      .page-sidebar .page-sidebar-menu > li.open > a,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a {\n        font-size: 14px; }\n      .page-sidebar .page-sidebar-menu > li.active > a,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a {\n        border: none;\n        text-shadow: none;\n        font-size: 14px; }\n        .page-sidebar .page-sidebar-menu > li.active > a > .selected,\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .selected {\n          display: block;\n          background-image: none;\n          /* will be set in a theme css file*/\n          float: right;\n          position: absolute;\n          right: 0px;\n          top: 8px;\n          background: none;\n          width: 0;\n          height: 0;\n          border-top: 12px solid transparent;\n          border-bottom: 12px solid transparent;\n          border-right: 12px solid #ffffff; }\n          .page-sidebar-reversed .page-sidebar .page-sidebar-menu > li.active > a > .selected, .page-sidebar-reversed\n          .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .selected {\n            right: auto;\n            left: 0;\n            border-right: 0;\n            border-left: 8px solid #ffffff; }\n          .page-container-bg-solid .page-sidebar .page-sidebar-menu > li.active > a > .selected, .page-container-bg-solid\n          .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .selected {\n            border-color: transparent #eef1f5 transparent transparent; }\n          .page-container-bg-solid.page-sidebar-reversed .page-sidebar .page-sidebar-menu > li.active > a > .selected, .page-container-bg-solid.page-sidebar-reversed\n          .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .selected {\n            border-color: transparent transparent transparent #eef1f5; }\n    .page-sidebar .page-sidebar-menu li > a,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a {\n      position: relative; }\n      .page-sidebar .page-sidebar-menu li > a > .arrow:before,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .arrow:before {\n        float: right;\n        width: 20px;\n        text-align: center;\n        display: inline;\n        font-size: 16px;\n        font-family: FontAwesome;\n        height: auto;\n        content: \"\\f104\";\n        font-weight: 300;\n        text-shadow: none;\n        position: absolute;\n        top: 4px;\n        right: 14px; }\n      .page-sidebar .page-sidebar-menu li > a > .arrow.open:before,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .arrow.open:before {\n        content: \"\\f107\"; }\n      .page-sidebar .page-sidebar-menu li > a > .badge,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .badge {\n        float: right;\n        margin-top: 1px;\n        margin-right: 0px;\n        position: absolute;\n        right: 14px;\n        top: 6px; }\n    .page-sidebar .page-sidebar-menu > li > a > .arrow:before,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > .arrow:before {\n      top: 8px; }\n    .page-sidebar .page-sidebar-menu .sub-menu,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu {\n      list-style: none;\n      display: none;\n      padding: 0;\n      margin: 8px 0px 8px 0px; }\n      .page-sidebar .page-sidebar-menu .sub-menu li,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li {\n        background: none;\n        margin: 0px;\n        padding: 0px;\n        margin-top: 1px !important;\n        /* 2nd level sub menu */ }\n        .page-sidebar .page-sidebar-menu .sub-menu li > a,\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > a {\n          display: block;\n          margin: 0;\n          padding: 6px 15px 6px 43px;\n          text-decoration: none;\n          font-size: 14px;\n          font-weight: 300;\n          background: none; }\n          .page-sidebar .page-sidebar-menu .sub-menu li > a > i,\n          .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > a > i {\n            font-size: 14px; }\n        .page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu,\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu {\n          margin: 0; }\n          .page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu > li,\n          .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu > li {\n            /* 3rd level sub menu */ }\n            .page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu > li > a,\n            .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu > li > a {\n              padding-left: 60px; }\n            .page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu > li > .sub-menu,\n            .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu > li > .sub-menu {\n              margin: 0; }\n              .page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu > li > .sub-menu > li > a,\n              .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu > li > .sub-menu > li > a {\n                padding-left: 80px; }\n      .page-sidebar .page-sidebar-menu .sub-menu.always-open,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu.always-open {\n        display: block; }\n    .page-sidebar .page-sidebar-menu li.active > .sub-menu,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li.active > .sub-menu {\n      display: block; }\n  .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li > a,\n  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li > a {\n    border: 0;\n    margin: 0;\n    padding-left: 11px;\n    border-left: 4px solid transparent; }\n  .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu,\n  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu {\n    margin: 0;\n    padding: 1px 0; }\n    .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu li > a,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu li > a {\n      padding-top: 8px;\n      padding-bottom: 8px; }\n    .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu li:first-child,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu li:first-child {\n      margin-top: 0 !important; }\n  .page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li > a, .page-sidebar-reversed\n  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li > a {\n    padding-left: 15px;\n    padding-right: 11px;\n    border-left: 0;\n    border-right: 4px solid transparent; }\n  .page-sidebar .sidebar-toggler,\n  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler {\n    webkit-transition: opacity 0.3s;\n    -moz-transition: opacity 0.3s;\n    -ms-transition: opacity 0.3s;\n    -o-transition: opacity 0.3s;\n    transition: opacity 0.3s;\n    display: block;\n    cursor: pointer;\n    opacity: 0.7 ;\n    filter: alpha(opacity=70) ;\n    padding: 6px 8px;\n    margin-top: 15px;\n    margin-right: 16px;\n    float: right;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    -ms-border-radius: 4px;\n    -o-border-radius: 4px;\n    border-radius: 4px; }\n    .page-sidebar .sidebar-toggler > span,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span {\n      outline: none !important; }\n      .page-sidebar .sidebar-toggler > span:hover,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:hover {\n        background: #ffffff; }\n        .page-sidebar .sidebar-toggler > span:hover:before, .page-sidebar .sidebar-toggler > span:hover:after,\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:hover:before,\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:hover:after {\n          background: #ffffff; }\n    .page-sidebar .sidebar-toggler > span,\n    .page-sidebar .sidebar-toggler > span:before,\n    .page-sidebar .sidebar-toggler > span:after,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:before,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:after {\n      display: inline-block;\n      width: 16px;\n      height: 1px;\n      background: #ffffff;\n      position: relative;\n      top: -5px;\n      transition: all ease .3s; }\n    .page-sidebar .sidebar-toggler > span:before,\n    .page-sidebar .sidebar-toggler > span:after,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:before,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:after {\n      position: absolute;\n      left: 0;\n      content: ''; }\n    .page-sidebar .sidebar-toggler > span:before,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:before {\n      top: 5px; }\n    .page-sidebar .sidebar-toggler > span:after,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler > span:after {\n      top: -5px; }\n    .page-sidebar .sidebar-toggler.th-toggle-exit > span,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler.th-toggle-exit > span {\n      background-color: transparent !important; }\n    .page-sidebar .sidebar-toggler.th-toggle-exit > span:after,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler.th-toggle-exit > span:after {\n      webkit-transform: translateY(5px) rotateZ(45deg);\n      -moz-transform: translateY(5px) rotateZ(45deg);\n      -ms-transform: translateY(5px) rotateZ(45deg);\n      -o-transform: translateY(5px) rotateZ(45deg);\n      transform: translateY(5px) rotateZ(45deg); }\n    .page-sidebar .sidebar-toggler.th-toggle-exit > span:before,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler.th-toggle-exit > span:before {\n      webkit-transform: translateY(-5px) rotateZ(-45deg);\n      -moz-transform: translateY(-5px) rotateZ(-45deg);\n      -ms-transform: translateY(-5px) rotateZ(-45deg);\n      -o-transform: translateY(-5px) rotateZ(-45deg);\n      transform: translateY(-5px) rotateZ(-45deg); }\n    .page-sidebar .sidebar-toggler:hover,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler:hover {\n      webkit-transition: opacity 0.3s;\n      -moz-transition: opacity 0.3s;\n      -ms-transition: opacity 0.3s;\n      -o-transition: opacity 0.3s;\n      transition: opacity 0.3s;\n      opacity: 1 ;\n      filter: alpha(opacity=100) ; }\n  .page-sidebar .sidebar-search,\n  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search {\n    padding: 0;\n    margin: 22px 18px 22px 18px; }\n    .page-sidebar .sidebar-search .remove,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .remove {\n      display: none; }\n      .page-sidebar .sidebar-search .remove > i,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .remove > i {\n        font-size: 16px; }\n    .page-sidebar .sidebar-search .input-group,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group {\n      -webkit-border-radius: 4px;\n      -moz-border-radius: 4px;\n      -ms-border-radius: 4px;\n      -o-border-radius: 4px;\n      border-radius: 4px; }\n      .page-sidebar .sidebar-search .input-group .form-control,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control {\n        border: 0;\n        font-size: 14px;\n        padding: 0;\n        height: auto;\n        line-height: auto;\n        -webkit-border-radius: 4px;\n        -moz-border-radius: 4px;\n        -ms-border-radius: 4px;\n        -o-border-radius: 4px;\n        border-radius: 4px; }\n      .page-sidebar .sidebar-search .input-group .input-group-btn .btn,\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .input-group-btn .btn {\n        padding: 2px 0 0 0;\n        background-color: transparent;\n        background-repeat: no-repeat;\n        background-position: 100% 3px; }\n        .page-sidebar .sidebar-search .input-group .input-group-btn .btn > i,\n        .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .input-group-btn .btn > i {\n          font-size: 15px; }\n  .page-sidebar .sidebar-search.sidebar-search-bordered,\n  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered {\n    margin: 25px 18px 25px 18px; }\n    .page-sidebar .sidebar-search.sidebar-search-bordered .input-group .form-control,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered .input-group .form-control {\n      font-size: 13px;\n      padding: 6px 8px; }\n    .page-sidebar .sidebar-search.sidebar-search-bordered .input-group .input-group-btn .btn,\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered .input-group .input-group-btn .btn {\n      margin-right: 6px; }\n\n@media (min-width: 992px) {\n  /* 992px */\n  .page-sidebar {\n    width: 235px;\n    float: left;\n    position: relative;\n    margin-right: -100%; }\n    .page-full-width .page-sidebar {\n      display: none !important; }\n    .page-sidebar.collapse {\n      display: block;\n      max-height: none !important; }\n  .page-sidebar-reversed .page-sidebar {\n    float: right;\n    margin-right: 0;\n    margin-left: -100%; }\n  .page-sidebar-reversed.page-sidebar-fixed .page-sidebar {\n    margin-left: -235px; }\n  .page-sidebar-reversed.page-sidebar-fixed .page-sidebar-wrapper {\n    position: relative;\n    float: right; }\n  .page-sidebar-fixed .page-sidebar {\n    position: fixed !important;\n    margin-left: 0;\n    top: 50px; }\n  .page-sidebar-fixed .page-sidebar-menu > li.last {\n    margin-bottom: 15px !important; }\n  .page-sidebar-fixed .page-sidebar-menu .sub-menu {\n    height: auto !important; }\n  /* Sidebar Closed */\n  .page-sidebar-closed .page-sidebar {\n    width: 45px !important; }\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed {\n      /* sidebar */\n      width: 45px !important;\n      /* sidebar toggler */\n      /* sidebar search */\n      /* sidebar bordered search */\n      /* sidebar search expanded */\n      /* sidebar bordered search expanded */ }\n      .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li {\n        /* hide opened sub menu */ }\n        .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.open > .sub-menu,\n        .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > .sub-menu {\n          display: none !important; }\n        .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover {\n          width: 256px !important;\n          position: relative !important;\n          z-index: 10000;\n          display: block !important; }\n          .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a {\n            -webkit-border-radius: 0 4px 0 0;\n            -moz-border-radius: 0 4px 0 0;\n            -ms-border-radius: 0 4px 0 0;\n            -o-border-radius: 0 4px 0 0;\n            border-radius: 0 4px 0 0; }\n            .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > i {\n              margin-right: 10px; }\n            .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > .title {\n              display: inline !important;\n              padding-left: 15px; }\n            .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > .badge {\n              display: block !important; }\n            .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > .selected {\n              display: none; }\n          .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover.heading {\n            width: 45px !important;\n            box-shadow: none; }\n          .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu {\n            width: 210px;\n            position: absolute;\n            z-index: 2000;\n            left: 46px;\n            margin-top: 0;\n            top: 100%;\n            display: block !important;\n            -webkit-border-radius: 0 0 4px 4px;\n            -moz-border-radius: 0 0 4px 4px;\n            -ms-border-radius: 0 0 4px 4px;\n            -o-border-radius: 0 0 4px 4px;\n            border-radius: 0 0 4px 4px; }\n            .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu > li > a {\n              padding-left: 15px !important; }\n            .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu > li > .sub-menu > li > a {\n              padding-left: 30px !important; }\n            .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu > li > .sub-menu > li > .sub-menu > li > a {\n              padding-left: 45px !important; }\n        .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.heading > h3 {\n          display: none; }\n        .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-toggler-wrapper .sidebar-toggler {\n          margin-right: 8px; }\n        .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-toggler-wrapper:hover {\n          width: 45px !important; }\n        .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-search-wrapper:hover {\n          width: 45px !important; }\n        .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a {\n          padding-left: 11px; }\n          .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a .selected {\n            right: -3px !important; }\n          .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a > .badge,\n          .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a > .title,\n          .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a > .arrow {\n            display: none !important; }\n      .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-toggler {\n        margin-left: 3px;\n        margin-right: 3px; }\n      .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search .input-group {\n        border-color: transparent;\n        margin-left: -4px; }\n        .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search .input-group .form-control {\n          display: none; }\n        .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search .input-group .input-group-btn .btn {\n          display: block; }\n      .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.sidebar-search-bordered .input-group {\n        padding: 5px 0 3px 0; }\n      .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open {\n        height: 40px;\n        margin-top: 15px;\n        margin-bottom: 14px; }\n        .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group {\n          width: 210px;\n          position: relative;\n          z-index: 1;\n          margin-left: 24px;\n          padding: 0; }\n          .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group .form-control {\n            background: none;\n            border: 0;\n            display: block;\n            padding: 8px 8px; }\n          .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group .input-group-btn .btn {\n            display: block;\n            margin-right: 8px;\n            margin-top: 1px; }\n        .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .remove {\n          background-repeat: no-repeat;\n          width: 11px;\n          height: 11px;\n          margin: 10px -5px 8px -7px;\n          display: block;\n          float: left; }\n      .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open.sidebar-search-bordered {\n        height: 38px;\n        margin-top: 23px;\n        margin-bottom: 23px; }\n        .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open.sidebar-search-bordered .input-group {\n          padding: 0; }\n    .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-closed > li > a {\n      padding-right: 11px;\n      padding-left: 7px; }\n  .page-sidebar-closed.page-sidebar-reversed .page-sidebar {\n    margin-left: -45px;\n    width: 45px; }\n    .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed {\n      /* sidebar */\n      /* sidebar search */ }\n      .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > .sub-menu {\n        left: auto;\n        right: 46px; }\n      .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover {\n        margin-left: -211px; }\n        .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a {\n          -webkit-border-radius: 4px 0 0 0;\n          -moz-border-radius: 4px 0 0 0;\n          -ms-border-radius: 4px 0 0 0;\n          -o-border-radius: 4px 0 0 0;\n          border-radius: 4px 0 0 0; }\n          .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > .title {\n            padding-left: 0;\n            padding-right: 15px; }\n          .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > i {\n            margin-right: 0;\n            margin-left: 2px; }\n      .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-search-wrapper:hover, .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-toggler-wrapper:hover {\n        margin-left: 0; }\n      .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group {\n        margin-left: -227px; }\n        .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group .input-group-btn .btn {\n          margin-right: 10px !important; }\n      .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .remove {\n        margin: 9px 4px 12px -16px  !important;\n        float: right !important; }\n    .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-closed > li > a {\n      padding-right: 7px;\n      padding-left: 11px; }\n  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover {\n    width: 235px !important;\n    display: block;\n    z-index: 10000; }\n    .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu {\n      width: 235px !important; }\n      .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .selected {\n        display: none !important; }\n  .page-sidebar-closed.page-sidebar-fixed.page-sidebar-reversed .page-sidebar:hover {\n    width: 235px !important;\n    z-index: 10000;\n    margin-left: -235px !important; }\n    .page-sidebar-closed.page-sidebar-fixed.page-sidebar-reversed .page-sidebar:hover .page-sidebar-menu {\n      width: 235px !important; }\n  .page-sidebar-closed.page-sidebar-hide .page-sidebar {\n    display: none !important; }\n  /* Sidebar Menu Wirh Hoverable Submenu */\n  .page-sidebar-menu.page-sidebar-menu-hover-submenu li .sub-menu {\n    display: none;\n    width: 210px;\n    z-index: 2000;\n    position: absolute;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    -ms-border-radius: 4px;\n    -o-border-radius: 4px;\n    border-radius: 4px; }\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu li .sub-menu > li > a {\n      margin: 3px; }\n  .page-sidebar-menu.page-sidebar-menu-hover-submenu li.active .sub-menu, .page-sidebar-menu.page-sidebar-menu-hover-submenu li.open .sub-menu {\n    display: none !important; }\n  .page-sidebar-menu.page-sidebar-menu-hover-submenu li a > .arrow {\n    display: none; }\n  .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > a > .arrow {\n    display: block;\n    float: right;\n    position: absolute;\n    right: 0;\n    margin-top: -20px;\n    background: none;\n    width: 0;\n    height: 0;\n    border-style: solid;\n    border-top: 12px double transparent;\n    border-bottom: 12px double transparent;\n    border-left: 0; }\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > a > .arrow:after, .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > a > .arrow:before {\n      display: none; }\n    .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > a > .arrow {\n      right: auto;\n      left: 0;\n      border-right: 0; }\n  .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > .sub-menu {\n    display: inline-block !important; }\n  .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > a > .arrow {\n    z-index: 1;\n    right: 0px;\n    margin-top: -23px; }\n  .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > a > .selected {\n    display: none; }\n  .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu {\n    margin-left: 235px;\n    margin-top: -40px; }\n    .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu {\n      margin-left: -210px !important; }\n    .page-sidebar-closed .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu {\n      margin-left: 0; }\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu > li > a {\n      padding-left: 15px; }\n    .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu > li .sub-menu {\n      margin-left: 210px;\n      margin-top: -38px !important; }\n      .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu > li .sub-menu {\n        margin-left: -210px !important; }\n      .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu > li .sub-menu > li > a {\n        padding-left: 10px;\n        padding-right: 10px; }\n  .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-hover-submenu li:hover > .sub-menu {\n    margin-top: -41px; }\n    .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-hover-submenu li:hover > .sub-menu > li > .sub-menu {\n      margin-top: -41px; } }\n\n@media (max-width: 991px) {\n  /* 991px */\n  .page-sidebar {\n    border-top: 0 !important;\n    margin: 20px; }\n    .page-sidebar .sidebar-toggler {\n      display: none; }\n    .page-sidebar .selected {\n      display: none !important; }\n    .page-sidebar.navbar-collapse {\n      max-height: none;\n      /* set some max height to have a scrollable menu on mobile devices */ }\n      .page-sidebar.navbar-collapse.collapse {\n        display: none !important; }\n      .page-sidebar.navbar-collapse.in {\n        border-top: 0 !important;\n        margin: 20px;\n        position: relative;\n        overflow: hidden !important;\n        overflow-y: auto !important;\n        display: block !important; }\n      .page-sidebar.navbar-collapse.navbar-no-scroll {\n        max-height: none !important; }\n    .page-sidebar .mega-menu-responsive-content {\n      padding: 10px 18px 10px 45px; }\n  .page-full-width .page-sidebar-menu {\n    display: block; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  /* 768px & 991px */\n  .page-sidebar .btn-navbar.collapsed .arrow {\n    display: none; }\n  .page-sidebar .btn-navbar .arrow {\n    position: absolute;\n    right: 25px;\n    width: 0;\n    height: 0;\n    top: 50px;\n    border-bottom: 15px solid #5f646b;\n    border-left: 15px solid transparent;\n    border-right: 15px solid transparent; } }\n\n@media (max-width: 480px) {\n  /* 480px */\n  /* Page sidebar */\n  .page-sidebar,\n  .page-sidebar.in {\n    margin: 0 10px 10px 10px !important; }\n    .page-header-fixed.page-header-fixed-mobile .page-sidebar, .page-header-fixed.page-header-fixed-mobile\n    .page-sidebar.in {\n      margin-top: 10px !important; } }\n\n/***\nPage content\n***/\n/* Page title */\n.page-title {\n  padding: 0px;\n  font-size: 28px;\n  letter-spacing: -1px;\n  display: block;\n  color: #666;\n  margin: 0px 0px 15px 0px;\n  font-weight: 300;\n  /* subtitle */ }\n  .page-title small {\n    font-size: 14px;\n    letter-spacing: 0px;\n    font-weight: 300;\n    color: #888; }\n  .page-content-white .page-title,\n  .page-container-bg-solid .page-title {\n    color: #666;\n    margin-bottom: 20px;\n    margin-top: 20px; }\n    .page-content-white .page-title small,\n    .page-container-bg-solid .page-title small {\n      color: #666; }\n  .page-content-white .page-title {\n    margin: 25px 0;\n    font-size: 24px; }\n\n/* Page breadcrumb */\n.page-bar {\n  padding: 0px;\n  background-color: #f1f4f7;\n  margin-bottom: 25px;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  -ms-border-radius: 4px;\n  -o-border-radius: 4px;\n  border-radius: 4px; }\n  .page-bar:before, .page-bar:after {\n    content: \" \";\n    display: table; }\n  .page-bar:after {\n    clear: both; }\n  .page-bar .page-breadcrumb {\n    display: inline-block;\n    float: left;\n    padding: 8px;\n    margin: 0;\n    list-style: none; }\n    .page-bar .page-breadcrumb > li {\n      display: inline-block; }\n      .ie8 .page-bar .page-breadcrumb > li {\n        margin-right: 1px; }\n      .page-bar .page-breadcrumb > li > a,\n      .page-bar .page-breadcrumb > li > span {\n        color: #888;\n        font-size: 14px;\n        text-shadow: none; }\n      .page-bar .page-breadcrumb > li > i {\n        color: #aaa;\n        font-size: 14px;\n        text-shadow: none; }\n      .page-bar .page-breadcrumb > li > i[class^=\"icon-\"],\n      .page-bar .page-breadcrumb > li > i[class*=\"icon-\"] {\n        color: gray; }\n  .page-bar .page-toolbar {\n    display: inline-block;\n    float: right;\n    padding: 0; }\n    .page-bar .page-toolbar .btn-fit-height {\n      -webkit-border-radius: 0 4px 4px 0;\n      -moz-border-radius: 0 4px 4px 0;\n      -ms-border-radius: 0 4px 4px 0;\n      -o-border-radius: 0 4px 4px 0;\n      border-radius: 0 4px 4px 0;\n      padding-top: 8px;\n      padding-bottom: 8px; }\n      .page-md .page-bar .page-toolbar .btn-fit-height {\n        padding-top: 9px;\n        padding-bottom: 9px;\n        box-shadow: none !important; }\n  .page-content-white .page-bar,\n  .page-container-bg-solid .page-bar {\n    background-color: #ffffff;\n    position: relative;\n    padding: 0px 20px;\n    margin: -25px -20px 0 -20px; }\n    .page-content-white .page-bar .page-breadcrumb,\n    .page-container-bg-solid .page-bar .page-breadcrumb {\n      padding: 11px 0; }\n      .page-content-white .page-bar .page-breadcrumb > li > a,\n      .page-content-white .page-bar .page-breadcrumb > li > span,\n      .page-container-bg-solid .page-bar .page-breadcrumb > li > a,\n      .page-container-bg-solid .page-bar .page-breadcrumb > li > span {\n        color: #888; }\n      .page-content-white .page-bar .page-breadcrumb > li > i,\n      .page-container-bg-solid .page-bar .page-breadcrumb > li > i {\n        color: #aaa; }\n        .page-content-white .page-bar .page-breadcrumb > li > i.fa-circle,\n        .page-container-bg-solid .page-bar .page-breadcrumb > li > i.fa-circle {\n          font-size: 5px;\n          margin: 0 5px;\n          position: relative;\n          top: -3px;\n          opacity: 0.4 ;\n          filter: alpha(opacity=40) ; }\n      .page-content-white .page-bar .page-breadcrumb > li > i[class^=\"icon-\"],\n      .page-content-white .page-bar .page-breadcrumb > li > i[class*=\"icon-\"],\n      .page-container-bg-solid .page-bar .page-breadcrumb > li > i[class^=\"icon-\"],\n      .page-container-bg-solid .page-bar .page-breadcrumb > li > i[class*=\"icon-\"] {\n        color: #8c8c8c; }\n    .page-content-white .page-bar .page-toolbar,\n    .page-container-bg-solid .page-bar .page-toolbar {\n      padding: 6px 0; }\n      .page-content-white .page-bar .page-toolbar .btn,\n      .page-container-bg-solid .page-bar .page-toolbar .btn {\n        margin-top: -2px; }\n        .page-content-white .page-bar .page-toolbar .btn.btn-sm,\n        .page-container-bg-solid .page-bar .page-toolbar .btn.btn-sm {\n          margin-top: 0px; }\n\n/* Page content */\n.page-content {\n  margin-top: 0px;\n  padding: 0px;\n  background-color: #fff; }\n  .page-container-bg-solid .page-content {\n    background: #eef1f5; }\n  .page-content-white .page-content .page-bar {\n    border-bottom: 1px solid #e7ecf1; }\n  .page-content-white.page-md .page-content .page-bar,\n  .page-container-bg-solid.page-md .page-content .page-bar {\n    border-radius: 0 !important; }\n  .page-full-width .page-content {\n    margin-left: 0px !important; }\n\n@media (min-width: 992px) {\n  /* 992px */\n  /* Page content */\n  .page-content-wrapper {\n    float: left;\n    width: 100%; }\n    .page-content-wrapper .page-content {\n      margin-left: 235px;\n      margin-top: 0px;\n      min-height: 600px;\n      padding: 25px 20px 10px 20px; }\n      .page-content-wrapper .page-content.no-min-height {\n        min-height: auto; }\n      .page-sidebar-fixed.page-sidebar-hover-on .page-content-wrapper .page-content {\n        margin-left: 45px; }\n      .page-sidebar-reversed .page-content-wrapper .page-content {\n        margin-left: 0 !important;\n        margin-right: 235px !important; }\n      .page-sidebar-reversed.page-sidebar-fixed.page-sidebar-hover-on .page-content-wrapper .page-content {\n        margin-left: 0;\n        margin-right: 45px; }\n      .page-sidebar-reversed.page-sidebar-closed .page-content-wrapper .page-content {\n        margin-left: 0 !important;\n        margin-right: 45px !important; }\n      .page-sidebar-closed .page-content-wrapper .page-content {\n        margin-left: 45px !important; }\n      .page-sidebar-closed.page-sidebar-hide .page-content-wrapper .page-content {\n        margin-left: 0 !important; }\n      .page-sidebar-closed.page-sidebar-reversed.page-sidebar-hide .page-content-wrapper .page-content {\n        margin-right: 0 !important; }\n      .page-full-width .page-content-wrapper .page-content {\n        margin-left: 0px !important; } }\n\n@media (max-width: 991px) {\n  /* 991px */\n  /* Bg solid content's breadcrumb */\n  .page-content-white .page-bar,\n  .page-container-bg-solid .page-bar {\n    margin-top: -20px; }\n  /* Boxed page container  */\n  .page-boxed > .container {\n    max-width: none !important;\n    margin: 0 !important;\n    padding: 0 !important; }\n  /* Page content */\n  .page-content-wrapper .page-content {\n    margin: 0px !important;\n    padding: 20px 20px 20px 20px !important;\n    min-height: 280px; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  /*  768px & 991px */\n  /* Boxed page container */\n  .page-boxed > .container {\n    margin: auto !important; } }\n\n@media (max-width: 767px) {\n  /* 767px */\n  /* Page content */\n  .page-content-wrapper .page-content {\n    padding: 20px 10px 10px 10px !important;\n    overflow: hidden;\n    /* Page title */ }\n    .page-content-wrapper .page-content .page-title {\n      margin-bottom: 20px;\n      font-size: 18px; }\n      .page-content-wrapper .page-content .page-title small {\n        font-size: 13px;\n        padding-top: 3px; } }\n\n@media (max-width: 480px) {\n  /* 480px */\n  /* Dashboard date range panel */\n  .page-content-wrapper .page-content .page-title small {\n    display: block;\n    clear: both; } }\n\n/***\nPage footer\n***/\n.page-footer {\n  padding: 8px 20px 5px 20px;\n  font-size: 13px;\n  height: 33px; }\n  .page-footer:before, .page-footer:after {\n    content: \" \";\n    display: table; }\n  .page-footer:after {\n    clear: both; }\n  .page-footer .page-footer-inner {\n    float: left;\n    display: inline-block; }\n  .page-footer-fixed.page-footer-fixed-mobile .page-footer {\n    position: fixed;\n    left: 0;\n    right: 0;\n    z-index: 10000;\n    bottom: 0; }\n  .page-footer-fixed.page-footer-fixed-mobile.page-sidebar-fixed .page-footer {\n    margin-left: 0 !important; }\n\n@media (min-width: 992px) {\n  /* 992px */\n  /* Default footer */\n  .page-footer {\n    clear: left; }\n  /* Fixed footer */\n  .page-footer-fixed .page-footer {\n    position: fixed;\n    left: 0;\n    right: 0;\n    z-index: 10000;\n    bottom: 0; }\n  /* Footer with footer sidebar */\n  .page-sidebar-fixed.page-sidebar-closed .page-footer {\n    margin-left: 45px; }\n  .page-sidebar-fixed.page-footer-fixed .page-footer {\n    margin-left: 0 !important; }\n  /* Fixed Sidebar */\n  .page-sidebar-fixed .page-footer {\n    margin-left: 235px;\n    padding: 8px 20px 5px 20px; }\n  /* Boxed page */\n  .page-boxed .page-footer {\n    padding: 8px 0 5px 0; }\n  .page-boxed.page-sidebar-fixed .page-footer {\n    padding-right: 20px;\n    padding-left: 20px; }\n  /* Page sidebar reversed */\n  .page-sidebar-reversed.page-sidebar-fixed .page-footer {\n    margin-left: 0;\n    margin-right: 235px;\n    padding: 8px 20px 5px 20px; }\n  .page-sidebar-reversed.page-sidebar-fixed.page-footer-fixed .page-footer {\n    margin-left: 0;\n    margin-right: 0; }\n  .page-sidebar-reversed.page-sidebar-fixed.page-sidebar-closed .page-footer {\n    margin-right: 45px; } }\n\n@media (max-width: 991px) {\n  /* 991px */\n  /* Boxed Layout */\n  .page-boxed .page-footer {\n    padding-left: 0px;\n    padding-right: 0px; } }\n\n@media (max-width: 767px) {\n  /* 767px */\n  /* Default footer & boxed footer */\n  .page-footer,\n  .page-boxed .page-footer {\n    padding-left: 10px;\n    padding-right: 10px; }\n  /* Fixed footer */\n  .page-footer-fixed .page-footer .container {\n    padding-left: 0;\n    padding-right: 0; } }\n\n/* Scroll Top Top */\n.scroll-to-top {\n  display: inline-block;\n  padding: 1px;\n  text-align: center;\n  position: fixed;\n  bottom: 10px;\n  z-index: 10001;\n  display: none;\n  right: 10px; }\n  .scroll-to-top > i {\n    display: inline-block;\n    color: #687991;\n    font-size: 30px;\n    opacity: 0.6 ;\n    filter: alpha(opacity=60) ; }\n  .scroll-to-top:hover {\n    cursor: pointer; }\n    .scroll-to-top:hover > i {\n      opacity: 1 ;\n      filter: alpha(opacity=100) ; }\n\n@media (min-width: 992px) {\n  /* 992px */\n  .scroll-to-top {\n    right: 20px; } }\n\n@media (max-width: 991px) {\n  /* 991px */\n  .scroll-to-top {\n    bottom: 10px;\n    right: 10px; }\n    .scroll-to-top > i {\n      font-size: 28px; } }\n\n/***\nTheme Panel\n***/\n.theme-panel {\n  width: 420px;\n  margin-top: -13px;\n  margin-right: 0px;\n  z-index: 100;\n  float: right;\n  position: relative;\n  /* content solid bg color */ }\n  .theme-panel > .toggler {\n    top: 4px;\n    right: 0;\n    padding: 20px;\n    cursor: pointer;\n    position: absolute;\n    background: #536881 url(img/icon-color.png) center no-repeat;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    -ms-border-radius: 4px;\n    -o-border-radius: 4px;\n    border-radius: 4px; }\n    .theme-panel > .toggler:hover {\n      background-color: #3f4f62 !important; }\n  .theme-panel > .toggler-close {\n    display: none;\n    top: 4px;\n    right: 0;\n    padding: 20px;\n    z-index: 101;\n    cursor: pointer;\n    position: absolute;\n    background: #2b3643 url(img/icon-color-close.png) center no-repeat !important;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    -ms-border-radius: 4px;\n    -o-border-radius: 4px;\n    border-radius: 4px; }\n    .theme-panel > .toggler-close:hover {\n      background-color: #212933 !important; }\n  .theme-panel > .theme-options {\n    top: 4px;\n    right: 0;\n    display: none;\n    position: absolute;\n    z-index: 100;\n    background: #2b3643;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    -ms-border-radius: 4px;\n    -o-border-radius: 4px;\n    border-radius: 4px; }\n    .theme-panel > .theme-options > .theme-option {\n      color: #c6cfda;\n      padding: 15px;\n      border-top: 1px solid #354353;\n      margin-top: 0px;\n      margin-bottom: 0px; }\n      .theme-panel > .theme-options > .theme-option > span {\n        text-transform: uppercase;\n        display: inline-block;\n        width: 145px;\n        font-size: 13px;\n        font-weight: 300; }\n      .theme-panel > .theme-options > .theme-option > select.form-control {\n        display: inline;\n        width: 135px;\n        padding: 2px;\n        text-transform: lowercase; }\n      .theme-panel > .theme-options > .theme-option.theme-colors {\n        border-top: 0; }\n        .theme-panel > .theme-options > .theme-option.theme-colors > span {\n          display: block;\n          width: auto; }\n        .theme-panel > .theme-options > .theme-option.theme-colors > ul {\n          list-style: none;\n          padding: 0;\n          display: block;\n          margin-bottom: 10px !important;\n          margin-top: 15px; }\n          .theme-panel > .theme-options > .theme-option.theme-colors > ul > li {\n            width: 40px;\n            height: 40px;\n            margin: 0 4px;\n            cursor: pointer;\n            list-style: none;\n            float: left;\n            border: solid 1px #707070;\n            /* theme colors */ }\n            .theme-panel > .theme-options > .theme-option.theme-colors > ul > li:first-child {\n              margin-left: 0; }\n            .theme-panel > .theme-options > .theme-option.theme-colors > ul > li:hover, .theme-panel > .theme-options > .theme-option.theme-colors > ul > li.current {\n              border: solid 2px #d64635; }\n            .theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-default {\n              background: #333438; }\n            .theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-darkblue {\n              background: #2b3643; }\n            .theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-blue {\n              background: #2D5F8B; }\n            .theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-grey {\n              background: #697380; }\n            .theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-light {\n              background: #F9FAFD; }\n            .theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-light2 {\n              background: #F1F1F1; }\n  .page-content-white .theme-panel,\n  .page-container-bg-solid .theme-panel {\n    position: absolute;\n    margin-top: 30px;\n    margin-right: 20px;\n    right: 0; }\n    .page-content-white .theme-panel > .toggler1,\n    .page-container-bg-solid .theme-panel > .toggler1 {\n      background: #BFCAD1 url(img/icon-color.png) center no-repeat; }\n  .page-content-white.page-sidebar-reversed .theme-panel,\n  .page-container-bg-solid.page-sidebar-reversed .theme-panel {\n    margin-right: 255px; }\n  .page-content-white.page-sidebar-reversed.page-sidebar-closed .theme-panel,\n  .page-container-bg-solid.page-sidebar-reversed.page-sidebar-closed .theme-panel {\n    margin-right: 65px; }\n\n/******************\nPage Quick Sidebar\n******************/\n/* Quick sidebar toggler */\n.page-header .top-menu .dropdown-quick-sidebar-toggler > .dropdown-toggle {\n  padding: 19px 10px 10px 10px !important; }\n  .page-header .top-menu .dropdown-quick-sidebar-toggler > .dropdown-toggle i {\n    top: 0px; }\n    .page-header .top-menu .dropdown-quick-sidebar-toggler > .dropdown-toggle i:before {\n      content: \"\"/*rtl:\"\"*/; }\n    .page-quick-sidebar-open .page-header .top-menu .dropdown-quick-sidebar-toggler > .dropdown-toggle i:before {\n      content: \"\"/*rtl:\"\"*/; }\n\n/* Page Portlet Fullscreen */\n.page-portlet-fullscreen .page-quick-sidebar-wrapper,\n.page-portlet-fullscreen .page-quick-sidebar-toggler {\n  z-index: -1; }\n\n/* Quick sidebar toggler */\n.page-quick-sidebar-toggler {\n  overflow: hidden;\n  z-index: 99999;\n  display: none;\n  width: 28px;\n  height: 27px;\n  position: fixed;\n  top: 10px;\n  right: 15px;\n  text-align: center;\n  padding-top: 6px; }\n  .page-quick-sidebar-toggler:hover {\n    background: #303a43; }\n  .page-quick-sidebar-open .page-quick-sidebar-toggler {\n    display: inline-block; }\n    .page-quick-sidebar-open .page-quick-sidebar-toggler:hover {\n      background: none; }\n  .page-quick-sidebar-toggler > i {\n    color: #99a8b5;\n    font-size: 17px; }\n    .page-quick-sidebar-toggler > i:hover {\n      color: #fff !important; }\n    .page-quick-sidebar-open .page-quick-sidebar-toggler > i:before {\n      content: \"\"/*rtl:\"\"*/; }\n\n/* Quick sidebar wrapper */\n.page-quick-sidebar-wrapper {\n  transition: right 0.3s;\n  z-index: 10500;\n  position: fixed;\n  top: 0;\n  bottom: 0;\n  width: 320px;\n  right: -320px;\n  overflow: hidden;\n  color: #99a8b5;\n  background: #21282e; }\n  .page-quick-sidebar-open .page-quick-sidebar-wrapper {\n    transition: right 0.3s;\n    right: 0; }\n  .page-quick-sidebar-wrapper .page-quick-sidebar {\n    background: #21282e;\n    /* Quick sidebar tabs content */\n    /* Quick sidebar general list heading */\n    /* Quick sidebar general list-items */\n    /* Inner content */\n    /* Quick sidebar list */\n    /* Quick sidebar list item */\n    /* Quick sidebar list item shown */\n    /* Quick sidebar chat */\n    /* Quick sidebar alerts */\n    /* Quick sidebar settings */ }\n    .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs {\n      margin: 0;\n      padding: 0;\n      border: 0; }\n      .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li {\n        display: table-cell !important;\n        width: 1%  !important;\n        padding: 0;\n        margin: 0;\n        float: none; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li > a {\n          position: relative;\n          display: block;\n          text-align: center;\n          border: 0;\n          height: auto;\n          font-size: 14px;\n          padding: 45px 15px 8px;\n          text-transform: uppercase;\n          background: none;\n          margin-right: 0;\n          color: #90a1af;\n          border: 0;\n          border-bottom: 3px solid rgba(243, 86, 93, 0.3);\n          -webkit-border-radius: 0;\n          -moz-border-radius: 0;\n          -ms-border-radius: 0;\n          -o-border-radius: 0;\n          border-radius: 0;\n          outline: none !important; }\n          .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li > a > .badge {\n            position: absolute;\n            top: 45px;\n            right: 3px; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li.active > a, .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li:hover > a {\n          border: 0;\n          border-bottom: 3px solid #f3565d;\n          background: none;\n          color: #fff;\n          text-decoration: none; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu {\n          border: 0;\n          background: #36424c;\n          box-shadow: 5px 5px rgba(97, 117, 135, 0.1);\n          margin-top: 8px;\n          margin-right: 20px; }\n          .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu:before {\n            position: absolute;\n            top: -7px;\n            right: 19px;\n            display: inline-block !important;\n            border-right: 7px solid transparent;\n            border-left: 7px solid transparent;\n            border-bottom: 7px solid #36424c;\n            content: ''; }\n          .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu:after {\n            position: absolute;\n            top: -6px;\n            right: 20px;\n            display: inline-block !important;\n            border-right: 6px solid transparent;\n            border-left: 6px solid transparent;\n            border-bottom: 7px solid #36424c;\n            content: ''; }\n          .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu > li > a {\n            padding: 10px 15px;\n            color: #99a8b5; }\n            .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu > li > a > i {\n              color: #93a3b1; }\n          .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu > li:hover > a {\n            background: #3d4a55;\n            color: #99a8b5; }\n            .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu > li:hover > a > i {\n              color: #9babb8; }\n          .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu > li.active > a {\n            background: #38444f;\n            color: #99a8b5; }\n          .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li .dropdown-menu > li.divider {\n            background-color: #3d4a55; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .nav-tabs > li.open > a.dropdown-toggle {\n          border-bottom: 3px solid #f3565d;\n          background: none;\n          text-decoration: none;\n          color: #90a1af; }\n    .page-quick-sidebar-wrapper .page-quick-sidebar .tab-content {\n      margin: 0;\n      padding: 0; }\n    .page-quick-sidebar-wrapper .page-quick-sidebar .list-heading {\n      font-size: 16px;\n      margin: 10px 10px;\n      color: #6c8296; }\n    .page-quick-sidebar-wrapper .page-quick-sidebar .list-items {\n      margin: 0;\n      padding: 0;\n      list-style: none; }\n      .page-quick-sidebar-wrapper .page-quick-sidebar .list-items > li {\n        margin: 0;\n        padding: 15px;\n        background: none;\n        border-bottom-width: 1px;\n        border-bottom-style: solid;\n        border-bottom-color: #273037; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .list-items > li:hover {\n          background: #273037; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .list-items > li:last-child {\n          border-bottom: 0; }\n      .page-quick-sidebar-wrapper .page-quick-sidebar .list-items.borderless li {\n        border: 0; }\n    .page-quick-sidebar-wrapper .page-quick-sidebar .inner-content {\n      margin: 10px 10px; }\n    .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-list {\n      position: absolute !important;\n      width: 320px !important;\n      transition: margin 0.3s; }\n    .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item {\n      width: 320px;\n      position: absolute !important;\n      width: 320px !important;\n      transition: margin 0.3s;\n      margin-left: 320px; }\n      .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item .page-quick-sidebar-nav {\n        padding: 15px 10px 0px 10px; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item .page-quick-sidebar-nav .page-quick-sidebar-back-to-list {\n          vertical-align: middle;\n          display: inline-block;\n          font-size: 14px;\n          color: #90a1af; }\n          .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item .page-quick-sidebar-nav .page-quick-sidebar-back-to-list:hover {\n            text-decoration: none; }\n          .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item .page-quick-sidebar-nav .page-quick-sidebar-back-to-list > i {\n            font-size: 17px;\n            line-height: 17px;\n            vertical-align: top;\n            margin-right: 3px; }\n    .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-list {\n      transition: margin 0.3s;\n      margin-left: -320px; }\n      .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-list .slimScrollBar,\n      .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-list .slimScrollRail {\n        display: none !important; }\n    .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-item {\n      transition: margin 0.3s;\n      margin-left: 0; }\n    .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users {\n      padding: 10px 0;\n      position: relative; }\n      .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media {\n        padding: 15px 15px; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object {\n          border-radius: 50% !important;\n          width: 45.71429px;\n          opacity: 0.8;\n          filter: alpha(opacity=80);\n          float: left;\n          margin-right: 10px; }\n          .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object:before, .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object:after {\n            content: \" \";\n            display: table; }\n          .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object:after {\n            clear: both; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media:hover {\n          cursor: pointer; }\n          .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media:hover .media-object {\n            opacity: 1;\n            filter: alpha(opacity=100); }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading {\n          margin: 5px 0 0 0;\n          font-size: 14px; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading-sub {\n          font-size: 11px;\n          text-transform: uppercase;\n          color: #657b8d; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading-small {\n          font-size: 10px;\n          color: #5d7081; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-status {\n          margin-top: 10px;\n          right: 10px;\n          position: absolute;\n          display: inline-block; }\n    .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages {\n      padding: 0px 10px;\n      position: relative; }\n      .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post {\n        transition: display 0.3s;\n        padding: 5px 0;\n        margin: 10px auto;\n        font-size: 13px; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .body {\n          color: #c3c3c3;\n          display: block; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .avatar {\n          width: 45.71429px;\n          border-radius: 50% !important; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .avatar {\n          float: left;\n          margin-right: 10px; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .avatar {\n          float: right;\n          margin-left: 10px; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .name {\n          font-size: 12px;\n          font-weight: 300;\n          color: #8496a7; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .datetime {\n          font-size: 12px;\n          font-weight: 300;\n          color: #8496a7; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .message {\n          display: block;\n          padding: 5px;\n          position: relative;\n          color: #90a1af;\n          background: #36424c; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .message {\n          text-align: left;\n          margin-left: 55px; }\n          .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .message .arrow {\n            display: block;\n            position: absolute;\n            top: 9px;\n            left: -6px;\n            width: 0;\n            height: 0;\n            border-top: 6px solid transparent;\n            border-bottom: 6px solid transparent;\n            border-right-width: 6px;\n            border-right-style: solid;\n            border-right-color: #36424c; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .message {\n          margin-right: 55px;\n          text-align: right; }\n          .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .message .arrow {\n            display: block;\n            position: absolute;\n            top: 9px;\n            right: -6px;\n            border-top: 6px solid transparent;\n            border-bottom: 6px solid transparent;\n            border-left-width: 6px;\n            border-left-style: solid;\n            border-left-color: #36424c; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .name,\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .datetime {\n          text-align: right; }\n    .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-form {\n      padding: 20px 10px 15px 10px; }\n    .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list {\n      padding: 10px 0;\n      position: relative; }\n      .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li a {\n        color: #7e91a2; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li a .label {\n          margin-top: 5px; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li a .desc {\n          text-decoration: underline;\n          padding: 0;\n          color: #788c9e; }\n        .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li a .date {\n          color: #5d7081; }\n    .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list {\n      padding: 10px 0;\n      position: relative; }\n      .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list .list-items li .bootstrap-switch {\n        margin-top: -3px;\n        float: right;\n        border: 0;\n        min-width: 59px; }\n      .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list .list-items li .form-control {\n        width: 75px !important;\n        padding: 4px 4px !important;\n        float: right;\n        border: 0;\n        margin-top: -4px; }\n      .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list .list-items li select.form-control {\n        padding: 4px 0px !important; }\n\n/***  \nPage Loading       \n***/\n.page-on-load {\n  background: #fefefe; }\n  .page-on-load .page-header,\n  .page-on-load .page-container,\n  .page-on-load .page-footer,\n  .page-on-load > .clearfix {\n    display: none;\n    transition: all 2s; }\n"
  },
  {
    "path": "resources/assets/static/src/themes/global/plugins.css",
    "content": "@charset \"UTF-8\";\n/******************************\n 3RD PARTY PLUGIN CUSTOMIZATION\n******************************/\n/* Cubic Bezier Transition */\n/***\nSELECT2\n***/\n\n.select2-container--bootstrap .select2-search--dropdown .select2-search__field,\n.select2-container--bootstrap .select2-selection,\n.select2-container--bootstrap.select2-container--focus .select2-selection,\n.select2-container--bootstrap.select2-container--open .select2-selection {\n\t-webkit-box-shadow: none;\n\tbox-shadow: none;\n}\n\n.select2-container--bootstrap .select2-selection--multiple .select2-selection__choice__remove {\n\tcursor: pointer;\n\tdisplay: inline-block;\n\tfont-weight: 700;\n\tmargin-right: 3px;\n}\n\n.select2-container--bootstrap .select2-results__group {\n\tdisplay: block;\n\tfont-size: 12px;\n\twhite-space: nowrap;\n\tfont-weight: 600;\n\tfont-family: \"Open Sans\", sans-serif;\n}\n\n.select2-container--bootstrap .select2-selection {\n\tfont-family: \"Open Sans\", sans-serif;\n}\n\n.modal-open .select2-dropdown {\n\tz-index: 10060;\n}\n\n.modal-open .select2-close-mask {\n\tz-index: 10055;\n}\n\n.modal-open .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field {\n\twidth: auto !important;\n}\n\n.select2-result-repository {\n\tpadding-top: 4px;\n\tpadding-bottom: 3px;\n}\n\n.select2-result-repository__avatar {\n\tfloat: left;\n\twidth: 60px;\n\tmargin-right: 10px;\n}\n\n.select2-result-repository__avatar img {\n\twidth: 100%;\n\theight: auto;\n\tborder-radius: 2px;\n}\n\n.select2-result-repository__meta {\n\tmargin-left: 70px;\n}\n\n.select2-result-repository__title {\n\tcolor: black;\n\tfont-weight: bold;\n\tword-wrap: break-word;\n\tline-height: 1.1;\n\tmargin-bottom: 4px;\n}\n\n.select2-result-repository__forks, .select2-result-repository__stargazers {\n\tmargin-right: 1em;\n}\n\n.select2-result-repository__forks, .select2-result-repository__stargazers, .select2-result-repository__watchers {\n\tdisplay: inline-block;\n\tcolor: #aaa;\n\tfont-size: 11px;\n}\n\n.select2-result-repository__description {\n\tfont-size: 13px;\n\tcolor: #777;\n\tmargin-top: 4px;\n}\n\n.select2-results__option--highlighted .select2-result-repository__title {\n\tcolor: white;\n}\n\n.select2-results__option--highlighted .select2-result-repository__forks, .select2-results__option--highlighted .select2-result-repository__stargazers, .select2-results__option--highlighted .select2-result-repository__description, .select2-results__option--highlighted .select2-result-repository__watchers {\n\tcolor: #c1d7e9;\n}\n\n\n"
  },
  {
    "path": "resources/assets/static/themes/global/login.css",
    "content": "/* Cubic Bezier Transition */\n/***\nLogin page\n***/\n/* logo page */\n.login {\n  background-color: #666 !important; }\n\n.login .logo {\n  margin: 60px auto 20px auto;\n  padding: 15px;\n  text-align: center; }\n\n.login .content {\n  background: url(./img/bg-white-lock.png) repeat;\n  width: 360px;\n  margin: 0 auto;\n  margin-bottom: 0px;\n  padding: 30px;\n  padding-top: 20px;\n  padding-bottom: 15px;\n  -webkit-border-radius: 7px;\n  -moz-border-radius: 7px;\n  -ms-border-radius: 7px;\n  -o-border-radius: 7px;\n  border-radius: 7px; }\n\n.login .content h3 {\n  color: #eee; }\n\n.login .content h4 {\n  color: #eee; }\n\n.login .content p,\n.login .content label {\n  color: #fff; }\n\n.login .mt-checkbox > span:after {\n  border-color: #eee; }\n\n.login .content .login-form,\n.login .content .forget-form {\n  padding: 0px;\n  margin: 0px; }\n\n.login .content .form-control {\n  background-color: #fff; }\n\n.login .content .forget-form {\n  display: none; }\n\n.login .content .register-form {\n  display: none; }\n\n.login .content .form-title {\n  font-weight: 300;\n  margin-bottom: 25px; }\n\n.login .content .form-actions {\n  background-color: transparent;\n  clear: both;\n  border: 0px;\n  padding: 0px 30px 25px 30px;\n  margin-left: -30px;\n  margin-right: -30px; }\n\n.login .content .forget-form .form-actions {\n  border: 0;\n  margin-bottom: 0;\n  padding-bottom: 20px; }\n\n.login .content .register-form .form-actions {\n  border: 0;\n  margin-bottom: 0;\n  padding-bottom: 0px; }\n\n.login .content .form-actions .rememberme {\n  margin-top: 8px;\n  display: inline-block; }\n\n.login .content .form-actions .btn {\n  margin-top: 1px; }\n\n.login .content .forget-password {\n  border-top: 1px dotted #eee;\n  margin-top: 25px; }\n\n.login .content .create-account {\n  border-top: 1px dotted #eee;\n  padding-top: 10px;\n  margin-top: 15px; }\n\n.login .content .create-account a {\n  display: inline-block;\n  margin-top: 5px; }\n\n/* select2 dropdowns */\n.login .content .select2-container i {\n  display: inline-block;\n  position: relative;\n  color: #ccc;\n  z-index: 1;\n  top: 1px;\n  margin: 4px 4px 0px -1px;\n  width: 16px;\n  height: 16px;\n  font-size: 16px;\n  text-align: center; }\n\n.login .content .has-error .select2-container i {\n  color: #b94a48; }\n\n.login .content .select2-container a span {\n  font-size: 13px; }\n\n.login .content .select2-container a span img {\n  margin-left: 4px; }\n\n/* footer copyright */\n.login .copyright {\n  text-align: center;\n  margin: 0 auto;\n  padding: 10px;\n  color: #eee;\n  font-size: 13px; }\n\n@media (max-width: 480px) {\n  /***\n  Login page\n  ***/\n  .login .logo {\n    margin-top: 10px; }\n  .login .content {\n    padding: 30px;\n    width: 222px; }\n  .login .content h3 {\n    font-size: 22px; }\n  .login .checkbox {\n    font-size: 13px; } }\n"
  },
  {
    "path": "resources/assets/static/themes/index/app.css",
    "content": "/** global start **/\nbody {\n\tfont-family: \"Open Sans\", sans-serif;\n\tfont-weight: 300;\n}\n\npre {\n\ttab-size: 4;\n\t-moz-tab-size: 4;\n}\n\n.page-container {\n\twidth: 100%;\n}\n\n.page-container > .page-cover {\n\tposition: absolute;\n\twidth: 25%;\n}\n\n.page-container > .page-content {\n\tposition: absolute;\n\twidth: 100%;\n\tpadding-left: 25%;\n\toverflow: auto;\n}\n\n.page-container > .page-content > .page-content-body {\n\tmargin-top: 55px;\n}\n\n.navbar-home {\n\tmargin-left: 25%;\n}\n\n.navbar-default {\n\tborder: 0;\n\tbackground: #fff;\n\tborder-bottom: 2px solid #efefef;\n}\n\n.navbar-default .navbar-nav > .active > a {\n\tbackground: #fff;\n\tborder-bottom: 2px solid #333;\n}\n\n.navbar-default .navbar-nav > .active > a:hover {\n\tbackground: #fff;\n}\n\n.navbar-default .navbar-form .header-search {\n\tborder-radius: 18px;\n}\n\n.navbar-default .header-user-icon {\n\tpadding: 8px;\n}\n\n.navbar-default .header-user-icon > img {\n\twidth: 36px;\n\tborder-radius: 18px;\n}\n\n.page-container > .page-cover .web-name {\n\tposition: absolute;\n\tleft: 16px;\n\tbottom: 32px;\n\tfont-size: 24px;\n\tcolor: #fff;\n}\n\n.page-content-body {\n\toverflow: auto;\n}\n\n.inner-page-content {\n\tmax-width: 640px;\n\tmargin-top: 75px;\n}\n\n.footer {\n}\n\n.footer .footer-inner {\n\tpadding: 0 30px 30px;\n}\n\n@media (max-width: 768px ) {\n\t.page-cover {\n\t\tdisplay: none;\n\t}\n\n\t.page-container > .page-content {\n\t\tpadding-left: 0;\n\t}\n\n\t.navbar-home {\n\t\tmargin-left: 0;\n\t}\n}\n\n/** global end **/\n\n/** home page start **/\n.page-content-body .tags {\n\tmargin: 16px 0 32px;\n}\n\n.page-content-body .tags .tag-item {\n\tdisplay: inline-block;\n\tpadding: 4px 8px;\n\tcolor: #333;\n\tbackground: #fff;\n\tborder: 1px solid #ccc;\n\tborder-radius: 16px;\n\tfont-size: 13px;\n\tmargin-right: 8px;\n\tmargin-bottom: 8px;\n\ttext-align: center;\n\tvertical-align: middle;\n\twhite-space: nowrap;\n\ttext-decoration: none;\n}\n\n.page-content-body .tags .tag-item:hover {\n\tbackground: #e6e6e6;\n\tborder-color: #adadad;\n\ttext-decoration: none;\n}\n\n.page-content-body .tags .tag-item.active {\n\tcolor: #fff;\n\tbackground: #5cb85c;\n\tborder-color: #4cae4c;\n}\n\n.page-content-body .tags .tag-item.active:hover,\n.page-content-body .tags .tag-item.active:active,\n.page-content-body .tags .tag-item.active:visited {\n\tcolor: #fff;\n\tbackground: #449d44;\n\tborder-color: #398439;\n}\n\n.page-content-body .list-item {\n\tborder-bottom: 1px dashed #cdcdcd;\n\tmargin-bottom: 16px;\n}\n\n.page-content-body .list-item > .list-item-row {\n\tmargin-bottom: 12px;\n}\n\n.page-content-body .list-item > .list-item-row.list-sub {\n\tfont-size: 12px;\n}\n\n.page-content-body .list-item > .list-item-row > .list-title {\n\tfont-size: 16px;\n\tfont-weight: 400;\n\tcolor: #666;\n}\n\n.page-content-body .list-item > .list-item-row > .list-title:hover {\n\ttext-decoration: none;\n\tcolor: #000;\n}\n\n.page-content-body .list-item > .list-item-row .link {\n\n}\n\n.page-content-body .list-item > .list-item-row .link:hover {\n\ttext-decoration: none;\n}\n\n/** home page end **/\n\n/** detail page start **/\n.like-section button {\n\tcolor: red;\n}\n\n.comments-section {\n\tposition: relative;\n}\n\n.comments-section .comments-list {\n\tlist-style: none;\n\tmargin: 0;\n\tpadding: 0 0 16px;\n}\n\n.comments-section .comments-list li {\n\tmargin: 6px 0;\n\tpadding-bottom: 6px;\n\tborder-bottom: 1px solid #eee;\n}\n\n.comments-section .comments-list li .user-info {\n\tpadding: 6px 0 0;\n}\n\n.comments-section .comments-list li .content {\n\tpadding: 16px 0;\n}\n\n.comments-section .comments-list blockquote {\n\tfont-size: 13px;\n}\n\n.send-answer-section {\n\tposition: relative;\n}\n\n .send-answer-content {\n\tmin-height: 120px;\n\tresize: none;\n\tpadding-bottom: 30px;\n}\n\n .send-answer-btn {\n\tbottom: 6px;\n\tright: 6px;\n}\n\n .send-answer-length {\n\tposition: absolute;\n\tbottom: 6px;\n\tleft: 6px;\n}\n\n.send-comment-section {\n\tposition: relative;\n}\n\n.send-comment-section .send-comment-content {\n\tmin-height: 120px;\n\tresize: none;\n\tpadding-bottom: 30px;\n}\n\n.send-comment-section .send-comment-btn {\n\tposition: absolute;\n\tbottom: 6px;\n\tright: 6px;\n}\n\n.send-comment-section .send-comment-length {\n\tposition: absolute;\n\tbottom: 6px;\n\tleft: 6px;\n}\n\n/** detail page end **/\n\n/** auth page start **/\n.auth > .auth-left {\n\tposition: inherit;\n}\n\n.auth > .auth-right {\n\tposition: inherit;\n}\n\n.auth > .auth-right > .auth-content {\n\tmargin-top: 35%;\n}\n\n.auth-sns-logo {\n\tfont-size: 26px;\n\tborder-top: 1px dashed #e3e3e3;\n\tpadding-top: 16px;\n}\n\n.auth-sns-logo a {\n\tdisplay: inline-block;\n\tmargin: 0 6px;\n\tcolor: #cdcdcd;\n}\n\n.auth-sns-logo a:hover {\n\tcolor: #666;\n}\n\n@media (max-width: 992px ) {\n\t.auth-left {\n\t\tposition: absolute !important;\n\t\tbottom: 0;\n\t}\n\n\t.auth-right {\n\t\tposition: absolute !important;\n\t\ttop: 0;\n\t}\n\n\t.auth-content {\n\t\tmargin-top: 0 !important;\n\t}\n}\n\n/** auth page end **/\n\n"
  },
  {
    "path": "resources/assets/static/themes/index/articles.css",
    "content": ".article-content {\n\tfont-size: 16px;\n\tline-height: 26px;\n\tpadding-bottom: 100px;\n}\n\n.article-content img {\n\twidth: 98%;\n}"
  },
  {
    "path": "resources/npm/package.json",
    "content": "{\n  \"name\": \"laravel-smart\",\n  \"version\": \"1.0.0\",\n  \"description\": \"smart + laravel\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"keywords\": [\n    \"smart\",\n    \"laravel-admin\"\n  ],\n  \"author\": \"Zix\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git@git.coding.net:HBWYCM/php-whlz.git\"\n  },\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"block-ui\": \"^2.70.1\",\n    \"bootpag\": \"^1.0.7\",\n    \"bootstrap\": \"^3.3.7\",\n    \"bootstrap-datetime-picker\": \"^2.4.4\",\n    \"bootstrap-hover-dropdown\": \"^2.2.1\",\n    \"bootstrap-switch\": \"^3.3.4\",\n    \"echarts\": \"^3.7.2\",\n    \"font-awesome\": \"^4.7.0\",\n    \"jcrop-0.9.12\": \"^0.9.12\",\n    \"jquery\": \"^3.2.1\",\n    \"jquery-slimscroll\": \"^1.3.8\",\n    \"jquery.backstretch\": \"^2.1.15\",\n    \"jquery.counterup\": \"^2.1.0\",\n    \"js-cookie\": \"^2.1.4\",\n    \"kindeditor\": \"^4.1.10\",\n    \"markdown\": \"^0.5.0\",\n    \"moment\": \"^2.19.1\",\n    \"normalize.css\": \"^4.2.0\",\n    \"owl.carousel\": \"^2.2.0\",\n    \"select2\": \"^4.0.5\",\n    \"simple-line-icons-webfont\": \"^4.0.3\",\n    \"simplemde\": \"^1.11.2\",\n    \"toastr\": \"^2.1.2\",\n    \"waypoints\": \"^4.0.1\"\n  },\n  \"devDependencies\": {\n    \"del\": \"^2.2.0\",\n    \"fancybox\": \"^3.0.0\",\n    \"gulp\": \"^3.9.1\",\n    \"gulp-clean-css\": \"^2.0.6\",\n    \"gulp-concat\": \"^2.6.0\",\n    \"gulp-rename\": \"^1.2.2\",\n    \"gulp-uglify\": \"^1.5.3\"\n  }\n}\n"
  },
  {
    "path": "resources/views/auth/login.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n<div class=\"container\">\n    <div class=\"row\">\n        <div class=\"col-md-8 col-md-offset-2\">\n            <div class=\"panel panel-default\">\n                <div class=\"panel-heading\">Login</div>\n\n                <div class=\"panel-body\">\n                    <form class=\"form-horizontal\" method=\"POST\" action=\"{{ route('login') }}\">\n                        {{ csrf_field() }}\n\n                        <div class=\"form-group{{ $errors->has('email') ? ' has-error' : '' }}\">\n                            <label for=\"email\" class=\"col-md-4 control-label\">E-Mail Address</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"email\" type=\"email\" class=\"form-control\" name=\"email\" value=\"{{ old('email') }}\" required autofocus>\n\n                                @if ($errors->has('email'))\n                                    <span class=\"help-block\">\n                                        <strong>{{ $errors->first('email') }}</strong>\n                                    </span>\n                                @endif\n                            </div>\n                        </div>\n\n                        <div class=\"form-group{{ $errors->has('password') ? ' has-error' : '' }}\">\n                            <label for=\"password\" class=\"col-md-4 control-label\">Password</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"password\" type=\"password\" class=\"form-control\" name=\"password\" required>\n\n                                @if ($errors->has('password'))\n                                    <span class=\"help-block\">\n                                        <strong>{{ $errors->first('password') }}</strong>\n                                    </span>\n                                @endif\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <div class=\"col-md-6 col-md-offset-4\">\n                                <div class=\"checkbox\">\n                                    <label>\n                                        <input type=\"checkbox\" name=\"remember\" {{ old('remember') ? 'checked' : '' }}> Remember Me\n                                    </label>\n                                </div>\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <div class=\"col-md-8 col-md-offset-4\">\n                                <button type=\"submit\" class=\"btn btn-primary\">\n                                    Login\n                                </button>\n\n                                <a class=\"btn btn-link\" href=\"{{ route('password.request') }}\">\n                                    Forgot Your Password?\n                                </a>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection\n"
  },
  {
    "path": "resources/views/auth/passwords/email.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n<div class=\"container\">\n    <div class=\"row\">\n        <div class=\"col-md-8 col-md-offset-2\">\n            <div class=\"panel panel-default\">\n                <div class=\"panel-heading\">Reset Password</div>\n\n                <div class=\"panel-body\">\n                    @if (session('status'))\n                        <div class=\"alert alert-success\">\n                            {{ session('status') }}\n                        </div>\n                    @endif\n\n                    <form class=\"form-horizontal\" method=\"POST\" action=\"{{ route('password.email') }}\">\n                        {{ csrf_field() }}\n\n                        <div class=\"form-group{{ $errors->has('email') ? ' has-error' : '' }}\">\n                            <label for=\"email\" class=\"col-md-4 control-label\">E-Mail Address</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"email\" type=\"email\" class=\"form-control\" name=\"email\" value=\"{{ old('email') }}\" required>\n\n                                @if ($errors->has('email'))\n                                    <span class=\"help-block\">\n                                        <strong>{{ $errors->first('email') }}</strong>\n                                    </span>\n                                @endif\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <div class=\"col-md-6 col-md-offset-4\">\n                                <button type=\"submit\" class=\"btn btn-primary\">\n                                    Send Password Reset Link\n                                </button>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection\n"
  },
  {
    "path": "resources/views/auth/passwords/reset.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n<div class=\"container\">\n    <div class=\"row\">\n        <div class=\"col-md-8 col-md-offset-2\">\n            <div class=\"panel panel-default\">\n                <div class=\"panel-heading\">Reset Password</div>\n\n                <div class=\"panel-body\">\n                    <form class=\"form-horizontal\" method=\"POST\" action=\"{{ route('password.request') }}\">\n                        {{ csrf_field() }}\n\n                        <input type=\"hidden\" name=\"token\" value=\"{{ $token }}\">\n\n                        <div class=\"form-group{{ $errors->has('email') ? ' has-error' : '' }}\">\n                            <label for=\"email\" class=\"col-md-4 control-label\">E-Mail Address</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"email\" type=\"email\" class=\"form-control\" name=\"email\" value=\"{{ $email or old('email') }}\" required autofocus>\n\n                                @if ($errors->has('email'))\n                                    <span class=\"help-block\">\n                                        <strong>{{ $errors->first('email') }}</strong>\n                                    </span>\n                                @endif\n                            </div>\n                        </div>\n\n                        <div class=\"form-group{{ $errors->has('password') ? ' has-error' : '' }}\">\n                            <label for=\"password\" class=\"col-md-4 control-label\">Password</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"password\" type=\"password\" class=\"form-control\" name=\"password\" required>\n\n                                @if ($errors->has('password'))\n                                    <span class=\"help-block\">\n                                        <strong>{{ $errors->first('password') }}</strong>\n                                    </span>\n                                @endif\n                            </div>\n                        </div>\n\n                        <div class=\"form-group{{ $errors->has('password_confirmation') ? ' has-error' : '' }}\">\n                            <label for=\"password-confirm\" class=\"col-md-4 control-label\">Confirm Password</label>\n                            <div class=\"col-md-6\">\n                                <input id=\"password-confirm\" type=\"password\" class=\"form-control\" name=\"password_confirmation\" required>\n\n                                @if ($errors->has('password_confirmation'))\n                                    <span class=\"help-block\">\n                                        <strong>{{ $errors->first('password_confirmation') }}</strong>\n                                    </span>\n                                @endif\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <div class=\"col-md-6 col-md-offset-4\">\n                                <button type=\"submit\" class=\"btn btn-primary\">\n                                    Reset Password\n                                </button>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection\n"
  },
  {
    "path": "resources/views/auth/register.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n<div class=\"container\">\n    <div class=\"row\">\n        <div class=\"col-md-8 col-md-offset-2\">\n            <div class=\"panel panel-default\">\n                <div class=\"panel-heading\">Register</div>\n\n                <div class=\"panel-body\">\n                    <form class=\"form-horizontal\" method=\"POST\" action=\"{{ route('register') }}\">\n                        {{ csrf_field() }}\n\n                        <div class=\"form-group{{ $errors->has('name') ? ' has-error' : '' }}\">\n                            <label for=\"name\" class=\"col-md-4 control-label\">Name</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"name\" type=\"text\" class=\"form-control\" name=\"name\" value=\"{{ old('name') }}\" required autofocus>\n\n                                @if ($errors->has('name'))\n                                    <span class=\"help-block\">\n                                        <strong>{{ $errors->first('name') }}</strong>\n                                    </span>\n                                @endif\n                            </div>\n                        </div>\n\n                        <div class=\"form-group{{ $errors->has('email') ? ' has-error' : '' }}\">\n                            <label for=\"email\" class=\"col-md-4 control-label\">E-Mail Address</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"email\" type=\"email\" class=\"form-control\" name=\"email\" value=\"{{ old('email') }}\" required>\n\n                                @if ($errors->has('email'))\n                                    <span class=\"help-block\">\n                                        <strong>{{ $errors->first('email') }}</strong>\n                                    </span>\n                                @endif\n                            </div>\n                        </div>\n\n                        <div class=\"form-group{{ $errors->has('password') ? ' has-error' : '' }}\">\n                            <label for=\"password\" class=\"col-md-4 control-label\">Password</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"password\" type=\"password\" class=\"form-control\" name=\"password\" required>\n\n                                @if ($errors->has('password'))\n                                    <span class=\"help-block\">\n                                        <strong>{{ $errors->first('password') }}</strong>\n                                    </span>\n                                @endif\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <label for=\"password-confirm\" class=\"col-md-4 control-label\">Confirm Password</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"password-confirm\" type=\"password\" class=\"form-control\" name=\"password_confirmation\" required>\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <div class=\"col-md-6 col-md-offset-4\">\n                                <button type=\"submit\" class=\"btn btn-primary\">\n                                    Register\n                                </button>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection\n"
  },
  {
    "path": "resources/views/generate/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n\n    <!-- BEGIN PAGE BAR -->\n    <div class=\"page-bar\">\n        <ul class=\"page-breadcrumb\">\n            <li> <a href=\"<?= $param['uri']['base']?>\">首页</a> <i class=\"fa fa-circle\"></i> </li>\n            <li> <span><?= $param['pageTitle'] ?></span> </li>\n        </ul>\n    </div>\n    <!-- END PAGE BAR -->\n\n    <!-- BEGIN PAGE CONTENT INNER -->\n    <div class=\"row\" id=\"gridPortlet\" style=\"margin-top: 16px\">\n        <div class=\"col-md-12 col-md-12\">\n            <!-- BEGIN PORTLET-->\n            <div class=\"portlet light\">\n                <div class=\"portlet-title\">\n                    <div class=\"caption caption-md\">\n                        <i class=\"icon-settings font-dark\"></i>\n                        <span class=\"caption-subject font-dark bold uppercase\"><?= $param['pageTitle'] ?></span>\n                        <!-- <span class=\"caption-helper hide\">weekly stats...</span>-->\n                    </div>\n                    <div class=\"actions\">\n\n                    </div>\n                </div>\n\n                <div class=\"portlet-body\">\n                    <div class=\"row\">\n                        <div class=\"col-md-12\">\n                            <ul class=\"nav nav-tabs\" id=\"type_tabs\">\n                                <li class=\"active\">\n                                    <a data-toggle=\"tab\" href=\"#system\" data-type=\"system\" aria-expanded=\"true\">管理模块</a>\n                                </li>\n                                <li>\n                                    <a data-toggle=\"tab\" href=\"#api\" data-type=\"api\" aria-expanded=\"false\">API接口</a>\n                                </li>\n                            </ul>\n                            <div class=\"tab-content\" style=\"margin-top: 32px\">\n                                <div id=\"system\" class=\"tab-pane fade active in\">\n                                    <form id=\"systemForm\" class=\"form-horizontal\">\n                                        <div class=\"form-body\">\n\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">模块</label>\n                                                <div class=\"col-md-7\">\n                                                    {!! form_radios('module',$param['module']) !!}\n\n                                                </div>\n                                            </div><!-- end item -->\n\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">表名</label>\n                                                <div class=\"col-md-7\">\n                                                    <select name=\"tableName\" class=\"form-control input-inline input-medium\">\n                                                        <?= form_options_rows( $tables , 'tableName', 'tableName' ) ?>\n                                                    </select>\n\n                                                    <div class=\"help-inline\">\n                                                        <button class=\"btn default\" id=\"getSystemInfoBtn\" type=\"button\">\n                                                            <i class=\"fa fa-search\"></i> 查询\n                                                        </button>\n                                                    </div>\n                                                </div>\n                                            </div><!-- end item -->\n                                        </div>\n                                    </form>\n\n                                    <form id=\"systemComponentsForm\" class=\"form-horizontal\">\n                                        {!! csrf_field() !!}\n                                        <div class=\"form-body\">\n                                            <hr>\n                                            <h5><i class=\"fa fa-cubes\"></i> 选择组件</h5>\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">表类型</label>\n                                                <div class=\"col-md-7\">\n                                                    <?= form_radios(\"tableType\" , $param['tableType'] ) ?>\n                                                </div>\n                                            </div><!-- end item -->\n\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">视图类型</label>\n                                                <div class=\"col-md-7\">\n                                                    <?= form_radios('viewType' , $param['viewType']) ?>\n                                                </div>\n                                            </div><!-- end item -->\n\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">上传字段</label>\n                                                <div class=\"col-md-7\">\n                                                    <select name=\"upload\" class=\"form-control select2\" multiple\n                                                            data-placeholder=\"选择上传字段\" ></select>\n                                                </div>\n                                            </div><!-- end item -->\n\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">编辑框字段</label>\n                                                <div class=\"col-md-7\">\n                                                    <select name=\"editor\" class=\"form-control select2\" multiple\n                                                            data-placeholder=\"选择编辑框字段\" style=\"width: 100%\"></select>\n                                                </div>\n                                            </div><!-- end item -->\n\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">select2字段</label>\n                                                <div class=\"col-md-7\">\n                                                    <select name=\"select2\" class=\"form-control select2\" multiple\n                                                            data-placeholder=\"选择select2字段字段\" style=\"width: 100%\"></select>\n                                                </div>\n                                            </div><!-- end item -->\n\n                                            <div class=\"form-actions\" style=\"margin-bottom: 16px\">\n                                                <div class=\"row\">\n                                                    <div class=\"col-md-offset-3 col-md-7\">\n                                                        <button class=\"btn red createSystemBtn\" data-temp=\"all\" type=\"button\">\n                                                            <i class=\"fa fa-code\"></i> 生成全部\n                                                        </button>\n                                                    </div>\n                                                </div>\n                                            </div>\n\n                                            <hr>\n                                            <h5><i class=\"fa fa-code\"></i> 单个生成</h5>\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">模型(Model)</label>\n                                                <div class=\"col-md-7\">\n                                                    <button class=\"btn default createSystemBtn\" data-temp=\"model\" disabled>\n                                                        <i class=\"fa fa-cog\"></i> 生成\n                                                    </button>\n                                                    <button class=\"btn red deleteSystemBtn\" data-temp=\"model\" disabled>\n                                                        <i class=\"fa fa-trash\"></i> 删除\n                                                    </button>\n                                                </div>\n                                            </div><!-- end item -->\n\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">服务(Service)</label>\n                                                <div class=\"col-md-7\">\n                                                    <button class=\"btn default createSystemBtn\" data-temp=\"service\" disabled>\n                                                        <i class=\"fa fa-cog\"></i> 生成\n                                                    </button>\n                                                    <button class=\"btn red deleteSystemBtn\" data-temp=\"service\" disabled>\n                                                        <i class=\"fa fa-trash\"></i> 删除\n                                                    </button>\n                                                </div>\n                                            </div><!-- end item -->\n\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">控制器(Controller)</label>\n                                                <div class=\"col-md-7\">\n                                                    <button class=\"btn default createSystemBtn\" data-temp=\"controller\" disabled>\n                                                        <i class=\"fa fa-cog\"></i> 生成\n                                                    </button>\n                                                    <button class=\"btn red deleteSystemBtn\" data-temp=\"controller\" disabled>\n                                                        <i class=\"fa fa-trash\"></i> 删除\n                                                    </button>\n                                                </div>\n                                            </div><!-- end item -->\n\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">视图(View)</label>\n                                                <div class=\"col-md-7\">\n                                                    <button class=\"btn default createSystemBtn\" data-temp=\"view\" disabled>\n                                                        <i class=\"fa fa-cog\"></i> 生成\n                                                    </button>\n                                                    <button class=\"btn red deleteSystemBtn\" data-temp=\"view\" disabled>\n                                                        <i class=\"fa fa-trash\"></i> 删除\n                                                    </button>\n                                                </div>\n                                            </div><!-- end item -->\n\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">Javascript</label>\n                                                <div class=\"col-md-7\">\n                                                    <button class=\"btn default createSystemBtn\" data-temp=\"js\" disabled>\n                                                        <i class=\"fa fa-cog\"></i> 生成\n                                                    </button>\n                                                    <button class=\"btn red deleteSystemBtn\" data-temp=\"js\" disabled>\n                                                        <i class=\"fa fa-trash\"></i> 删除\n                                                    </button>\n                                                </div>\n                                            </div><!-- end item -->\n\n                                        </div>\n                                    </form><!-- end sys_form -->\n                                </div>\n                                <div id=\"api\" class=\"tab-pane fade\">\n                                    <!-- start api form -->\n                                    <form id=\"apiForm\" class=\"form-horizontal\">\n                                        <div class=\"form-body\">\n\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">描述</label>\n                                                <div class=\"col-md-7\">\n                                                    <input type=\"text\" name=\"desc\" placeholder=\"描述\" class=\"form-control input-inline\">\n                                                    <span class=\"help-inline\">如: 用户登录 </span>\n                                                </div>\n                                            </div><!-- end item -->\n\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">目录</label>\n                                                <div class=\"col-md-7\">\n                                                    <input type=\"text\" name=\"directory\" placeholder=\"目录\" class=\"form-control input-inline\">\n                                                    <span class=\"help-inline\">如: auth </span>\n                                                </div>\n                                            </div><!-- end item -->\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">名称</label>\n                                                <div class=\"col-md-7\">\n                                                    <input type=\"text\" name=\"name\" placeholder=\"名称\" class=\"form-control input-inline\">\n                                                    <span class=\"help-inline\">如: Login </span>\n                                                </div>\n                                            </div><!-- end item -->\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">接口版本</label>\n                                                <div class=\"col-md-7\">\n                                                    <?= form_radios('apiVersion' , $param['apiVer']) ?>\n                                                </div>\n                                            </div><!-- end item -->\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">是否验证用户</label>\n                                                <div class=\"col-md-7\">\n                                                    <?= form_radios( 'authUser' , $param['apiAuthUser'] ) ?>\n                                                </div>\n                                            </div><!-- end item -->\n                                            <!-- start item -->\n                                            <div class=\"form-group\">\n                                                <label class=\"col-md-3 control-label\">参数</label>\n                                                <div class=\"col-md-7\">\n                                                    <?php foreach( $param['apiParams'] as $key => $item ) :?>\n                                                    <div class=\"checkbox-list\">\n                                                        <label>\n                                                            <input type=\"checkbox\" name=\"params[]\" value=\"<?= $key ?>\">\n                                                            <?= $item ?>\n                                                        </label>\n                                                    </div>\n                                                    <?php endforeach ; ?>\n                                                </div>\n                                            </div><!-- end item -->\n                                            <hr>\n\n                                            <div class=\"form-actions\" style=\"margin-bottom: 60px;\">\n                                                <div class=\"row\">\n                                                    <div class=\"col-md-offset-3 col-md-7\">\n                                                        <button class=\"btn red btn-lg\" id=\"createApiBtn\" type=\"button\">\n                                                            <i class=\"fa fa-code\"></i> 创建\n                                                        </button>\n                                                    </div>\n                                                </div>\n                                            </div>\n                                        </div>\n                                    </form><!-- end api form -->\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n\n                </div>\n            </div>\n            <!-- END PORTLET-->\n        </div>\n    </div>\n    <!-- END PAGE CONTENT INNER -->\n</div><!-- END CONTENT BODY -->\n    @stop"
  },
  {
    "path": "resources/views/home.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n<div class=\"container\">\n    <div class=\"row\">\n        <div class=\"col-md-8 col-md-offset-2\">\n            <div class=\"panel panel-default\">\n                <div class=\"panel-heading\">Dashboard</div>\n\n                <div class=\"panel-body\">\n                    @if (session('status'))\n                        <div class=\"alert alert-success\">\n                            {{ session('status') }}\n                        </div>\n                    @endif\n\n                    You are logged in!\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection\n"
  },
  {
    "path": "resources/views/index/index.blade.php",
    "content": "@extends('backend::public.layout')\n\n@section('content')\n\n\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n    <!-- BEGIN PAGE HEADER-->\n    <!-- BEGIN PAGE BAR -->\n    <div class=\"page-bar\">\n        <ul class=\"page-breadcrumb\">\n            <li><a href=\"{{ $param['uri']['module'] }}\">首页</a> <i class=\"fa fa-circle\"></i></li>\n            <li>\n                <span>控制台 & 统计</span>\n            </li>\n        </ul>\n    </div>\n    <!-- END PAGE BAR -->\n\n    <!-- BEGIN PAGE TITLE-->\n    <h3 class=\"page-title\"> 首页  \n        <small>控制台 & 统计</small>\n    \n    \n    </h3>\n    <!-- END PAGE TITLE-->\n\n    <div class=\"row\">\n        <div class=\"col-lg-3 col-md-3 col-sm-6 col-xs-12\">\n            <a href=\"#\" class=\"dashboard-stat dashboard-stat-v2 blue\">\n                <div class=\"visual\">\n                    <i class=\"fa fa-file-text\"></i>\n                </div>\n                <div class=\"details\">\n                    <div class=\"number\">\n                        <span data-counter=\"counterup\">{{ isset($stat['articles']) ?: 0 }}</span> 篇\n                    </div>\n                    <div class=\"desc\"> 文章</div>\n                </div>\n            </a>\n        </div>\n        <div class=\"col-lg-3 col-md-3 col-sm-6 col-xs-12\">\n            <a href=\"#\" class=\"dashboard-stat dashboard-stat-v2 red\">\n                <div class=\"visual\">\n                    <i class=\"fa fa-users\"></i>\n                </div>\n                <div class=\"details\">\n                    <div class=\"number\">\n                        <span data-counter=\"counterup\">{{ isset($stat['users']) ?: 0 }}</span> 个\n                    </div>\n                    <div class=\"desc\"> 注册用户</div>\n                </div>\n            </a>\n        </div>\n        <div class=\"col-lg-3 col-md-3 col-sm-6 col-xs-12\">\n            <a href=\"#\" class=\"dashboard-stat dashboard-stat-v2 green\">\n                <div class=\"visual\">\n                    <i class=\"fa fa-wifi\"></i>\n                </div>\n                <div class=\"details\">\n                    <div class=\"number\">\n                        <span data-counter=\"counterup\">{{ isset($stat['api']) ?: 0 }}</span> 次\n                    </div>\n                    <div class=\"desc\"> 今日访问</div>\n                </div>\n            </a>\n        </div>\n        <div class=\"col-lg-3 col-md-3 col-sm-6 col-xs-12\">\n            <a href=\"#\" class=\"dashboard-stat dashboard-stat-v2 purple\">\n                <div class=\"visual\">\n                    <i class=\"fa fa-globe\"></i>\n                </div>\n                <div class=\"details\">\n                    <div class=\"number\">\n                        <span data-counter=\"counterup\">{{ isset($stat['download']) ?: 0 }}</span> 次\n                    </div>\n                    <div class=\"desc\"> 下载</div>\n                </div>\n            </a>\n        </div>\n    </div>\n\n    <div class=\"row\">\n        <div class=\"col-md-6 col-xs-12\">\n            <div class=\"portlet light bordered\">\n                <div class=\"portlet-title\">\n                    <div class=\"caption\">\n                        <i class=\"icon-graph font-dark\"></i>\n                        <span class=\"caption-subject font-dark bold uppercase\">用户统计</span>\n                        <span class=\"caption-helper\">每日注册</span>\n                    </div>\n                    <div class=\"actions\"></div>\n                </div>\n                <div class=\"portlet-body\">\n                    <div id=\"userChart\" style=\"width: 100% ; height: 400px\"></div>\n                </div>\n            </div>\n        </div>\n        <div class=\"col-md-6 col-xs-12\">\n            <div class=\"portlet light bordered\">\n                <div class=\"portlet-title\">\n                    <div class=\"caption\">\n                        <i class=\"icon-bar-chart font-dark\"></i>\n                        <span class=\"caption-subject font-dark bold uppercase\">接口访问</span>\n                        <span class=\"caption-helper\">每日</span>\n                    </div>\n                    <div class=\"actions\"></div>\n                </div>\n                <div class=\"portlet-body\">\n                    <div id=\"apiChart\" style=\"width: 100% ; height: 400px\"></div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n</div> \n<!-- END CONTENT BODY -->\n@stop\n"
  },
  {
    "path": "resources/views/layouts/app.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"{{ app()->getLocale() }}\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n    <!-- CSRF Token -->\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n\n    <title>{{ config('app.name', 'Laravel') }}</title>\n\n    <!-- Styles -->\n    <link href=\"{{ asset('css/app.css') }}\" rel=\"stylesheet\">\n</head>\n<body>\n    <div id=\"app\">\n        <nav class=\"navbar navbar-default navbar-static-top\">\n            <div class=\"container\">\n                <div class=\"navbar-header\">\n\n                    <!-- Collapsed Hamburger -->\n                    <button type=\"button\" class=\"navbar-toggle collapsed\" data-toggle=\"collapse\" data-target=\"#app-navbar-collapse\">\n                        <span class=\"sr-only\">Toggle Navigation</span>\n                        <span class=\"icon-bar\"></span>\n                        <span class=\"icon-bar\"></span>\n                        <span class=\"icon-bar\"></span>\n                    </button>\n\n                    <!-- Branding Image -->\n                    <a class=\"navbar-brand\" href=\"{{ url('/') }}\">\n                        {{ config('app.name', 'Laravel') }}\n                    </a>\n                </div>\n\n                <div class=\"collapse navbar-collapse\" id=\"app-navbar-collapse\">\n                    <!-- Left Side Of Navbar -->\n                    <ul class=\"nav navbar-nav\">\n                        &nbsp;\n                    </ul>\n\n                    <!-- Right Side Of Navbar -->\n                    <ul class=\"nav navbar-nav navbar-right\">\n                        <!-- Authentication Links -->\n                        @guest\n                            <li><a href=\"{{ route('login') }}\">Login</a></li>\n                            <li><a href=\"{{ route('register') }}\">Register</a></li>\n                        @else\n                            <li class=\"dropdown\">\n                                <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\" role=\"button\" aria-expanded=\"false\">\n                                    {{ Auth::user()->name }} <span class=\"caret\"></span>\n                                </a>\n\n                                <ul class=\"dropdown-menu\" role=\"menu\">\n                                    <li>\n                                        <a href=\"{{ route('logout') }}\"\n                                            onclick=\"event.preventDefault();\n                                                     document.getElementById('logout-form').submit();\">\n                                            Logout\n                                        </a>\n\n                                        <form id=\"logout-form\" action=\"{{ route('logout') }}\" method=\"POST\" style=\"display: none;\">\n                                            {{ csrf_field() }}\n                                        </form>\n                                    </li>\n                                </ul>\n                            </li>\n                        @endguest\n                    </ul>\n                </div>\n            </div>\n        </nav>\n\n        @yield('content')\n    </div>\n\n    <!-- Scripts -->\n    <script src=\"{{ asset('js/app.js') }}\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/meralbum/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT -->\n<div class=\"page-content-wrapper\">\n    <div class=\"page-content\">\n        <!-- BEGIN PAGE BREADCRUMB -->\n        <ul class=\"page-breadcrumb breadcrumb\">\n            <li><a href=\"javascript:;\">首页</a><i class=\"fa fa-circle\"></i></li>\n            <li class=\"active\"></li>\n        </ul>\n        <!-- END PAGE BREADCRUMB -->\n\n        <!-- BEGIN PAGE CONTENT INNER -->\n        <div class=\"row\" id=\"grid_portlet\">\n            <div class=\"col-md-12 col-md-12\">\n                <!-- BEGIN PORTLET-->\n                <div class=\"portlet light\">\n                    <div class=\"portlet-title\">\n                        <div class=\"caption caption-md\">\n                            <i class=\"icon-settings font-dark\"></i>\n                            <span class=\"caption-subject font-dark bold uppercase\"></span>\n                            <!-- <span class=\"caption-helper hide\">weekly stats...</span>-->\n                        </div>\n                        <div class=\"actions\">\n                            <button id=\"uri_upload_btn\"></button>\n                            <a class=\"btn btn-danger btn-circle\" id=\"delete_select_btn\" href=\"javascript:;\">\n                                <i class=\"fa fa-trash\"></i> 删除选中\n                            </a>\n                        </div>\n                    </div>\n                    <div class=\"portlet-body\">\n                        <!-- search form start -->\n                        <div class=\"row\">\n                            <div class=\"col-md-12\">\n                                <form id=\"search_form\" class=\"form-inline\">\n                                    <!-- 查询关键字 start -->\n                                    <div class=\"form-group\">\n                                        <label>关键字: </label>\n                                        <input type=\"text\" placeholder=\"查询关键字\" id=\"keyword\" class=\"form-control\">\n                                    </div>\n                                    <!-- 查询关键字 end -->\n                                    <!-- 查询状态 start -->\n                                    <div class=\"form-group\">\n                                        <label>状态: </label>\n                                        <select id=\"status\" class=\"form-control\">\n                                            <option value=\"\" selected>不限</option>\n                                            <?= form_options($param['status']) ?>\n                                        </select>\n                                    </div>\n                                    <!-- 查询状态 end -->\n                                    <button id=\"search_btn\" class=\"btn default\" type=\"submit\"><i class=\"fa fa-search\"></i> 查询</button>\n                                </form>\n                            </div>\n                        </div>\n                        <!-- search form end -->\n\n                        <div class=\"table-scrollable\">\n                            <table id=\"data_grid\" class=\"table table-hover\">\n                                <tr>\n                                    <th width=\"40\" data-field=\"id\">ID</th>\n                                    <th width=\"40\" data-field=\"sort\">排序</th>\n                                    <th width=\"80\" data-field=\"uri\" data-formatter=\"formatIcon\">图片</th>\n                                    <th width=\"80\" data-field=\"size\" data-formatter=\"format_file_size\">文件大小</th>\n                                    <th width=\"80\" data-field=\"mimes\">mime类型</th>\n                                    <th width=\"80\" data-field=\"img_size\">图片尺寸</th>\n                                    <th width=\"180\" data-field=\"desc\">描述</th>\n                                    <th width=\"80\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n                                    <th width=\"60\" data-formatter=\"optEdit\"></th>\n                                    <th width=\"60\" data-formatter=\"optDelete\"></th>\n                                    <th>&nbsp;</th>\n                                </tr>\n                            </table>\n                        </div>\n\n                        <div class=\"back-btn-row\">\n                            <hr>\n                            <a href=\"javascript:history.go(-1);\" class=\"btn btn-lg default \"><i class=\"icon-arrow-left\"></i> 返回</a>\n                        </div>\n                    </div>\n                </div>\n                <!-- END PORTLET-->\n            </div>\n        </div>\n        <!-- END PAGE CONTENT INNER -->\n\n\n    </div>\n</div>\n<!-- END CONTENT -->\n\n<!-- START ADD EDIT MODAL -->\n<div class=\"modal fade\" id=\"add_edit_modal\">\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span\n                            aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title caption-subject\">Modal title</h4>\n            </div>\n            <div class=\"modal-body\">\n                <!-- start add edit form  -->\n                <div class=\"row\">\n                    <div class=\"col-md-12\">\n                        <!-- start form -->\n                        <form id=\"add_edit_form\" class=\"form-horizontal\">\n                            <div class=\"form-body\">\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">描述</label>\n                                    <div class=\"col-md-7\">\n                                        <div class=\"input-icon right\">\n                                            <input type=\"text\" name=\"desc\" placeholder=\"描述\" class=\"form-control\">\n                                        </div>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">排序</label>\n                                    <div class=\"col-md-7\">\n                                        <div class=\"input-icon right\">\n                                            <input type=\"text\" name=\"sort\" placeholder=\"排序\" class=\"form-control\"\n                                                   data-valid=\"required\" data-tips=\"请输入正确的排序\">\n                                        </div>\n                                    </div>\n                                </div><!-- end item -->\n\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">状态</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('status' , $param['status'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                            </div>\n                        </form><!-- end form -->\n                    </div>\n                </div>\n                <!-- end add edit form-->\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n                <button type=\"button\" class=\"btn red\" id=\"submit_form_btn\"><i class=\"fa fa-save\"></i> 保存</button>\n            </div>\n        </div><!-- /.modal-content -->\n    </div><!-- /.modal-dialog -->\n</div><!-- /.END ADD EDIT MODAL -->\n    @stop\n"
  },
  {
    "path": "resources/views/meralbumcatalog/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT -->\n<div class=\"page-content-wrapper\">\n\t<div class=\"page-content\">\n\t\t<!-- BEGIN PAGE BREADCRUMB -->\n\t\t<ul class=\"page-breadcrumb breadcrumb\">\n\t\t\t<li><a href=\"javascript:;\">首页</a><i class=\"fa fa-circle\"></i></li>\n\t\t\t<li class=\"active\"></li>\n\t\t</ul>\n\t\t<!-- END PAGE BREADCRUMB -->\n\n\t\t<!-- BEGIN PAGE CONTENT INNER -->\n\t\t<div class=\"row\" id=\"grid_portlet\">\n\t\t\t<div class=\"col-md-12 col-md-12\">\n\t\t\t\t<!-- BEGIN PORTLET-->\n\t\t\t\t<div class=\"portlet light\">\n\t\t\t\t\t<div class=\"portlet-title\">\n\t\t\t\t\t\t<div class=\"caption caption-md\">\n\t\t\t\t\t\t\t<i class=\"icon-settings font-dark\"></i>\n\t\t\t\t\t\t\t<span class=\"caption-subject font-dark bold uppercase\"></span>\n\t\t\t\t\t\t\t<!-- <span class=\"caption-helper hide\">weekly stats...</span>-->\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t\t\t<a class=\"btn btn-primary btn-circle\" id=\"add_new_btn\" href=\"javascript:;\">\n\t\t\t\t\t\t\t\t<i class=\"fa fa-plus\"></i> 新建\n\t\t\t\t\t\t\t</a>\n\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"portlet-body\">\n\t\t\t\t\t\t<div id=\"tiles\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- END PORTLET-->\n\t\t\t</div>\n\t\t</div>\n\t\t<!-- END PAGE CONTENT INNER -->\n\n\n\t</div>\n</div>\n<!-- END CONTENT -->\n\n<!-- START ADD EDIT MODAL -->\n<div class=\"modal fade\" id=\"add_edit_modal\">\n\t<div class=\"modal-dialog\">\n\t\t<div class=\"modal-content\">\n\t\t\t<div class=\"modal-header\">\n\t\t\t\t<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span\n\t\t\t\t\taria-hidden=\"true\">&times;</span></button>\n\t\t\t\t<h4 class=\"modal-title caption-subject\">Modal title</h4>\n\t\t\t</div>\n\t\t\t<div class=\"modal-body\">\n\t\t\t\t<!-- start add edit form  -->\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-md-12\">\n\t\t\t\t\t\t<!-- start form -->\n\t\t\t\t\t\t<form id=\"add_edit_form\" class=\"form-horizontal\">\n\t\t\t\t\t\t\t<div class=\"form-body\">\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">目录名称</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"input-icon right\">\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"text\" name=\"tag\" placeholder=\"名称\" class=\"form-control\"\n\t\t\t\t\t\t\t\t\t\t\t       data-valid=\"required\" data-tips=\"请输入正确的目录名称\">\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">排序</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"input-icon right\">\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"text\" name=\"sort\" placeholder=\"排序\" class=\"form-control\"\n\t\t\t\t\t\t\t\t\t\t\t       data-valid=\"required\" data-tips=\"请输入正确的排序\">\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">封面</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<div id=\"icon_preview\" class=\"fit-img-preview\"></div>\n\t\t\t\t\t\t\t\t\t\t<button id=\"icon_upload_btn\"></button>\n\t\t\t\t\t\t\t\t\t\t<input type=\"text\" name=\"icon\" class=\"hide\">\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</form><!-- end form -->\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- end add edit form-->\n\t\t\t</div>\n\t\t\t<div class=\"modal-footer\">\n\t\t\t\t<button type=\"button\" class=\"btn default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n\t\t\t\t<button type=\"button\" class=\"btn red\" id=\"submit_form_btn\"><i class=\"fa fa-save\"></i> 保存</button>\n\t\t\t</div>\n\t\t</div><!-- /.modal-content -->\n\t</div><!-- /.modal-dialog -->\n</div><!-- /.END ADD EDIT MODAL -->\n\t@stop"
  },
  {
    "path": "resources/views/merfunc/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n    <!-- BEGIN PAGE BAR -->\n    <div class=\"page-bar\">\n        <ul class=\"page-breadcrumb\">\n            <li><a href=\"<?= $param['uri']['module'] ?>\">首页</a> <i class=\"fa fa-circle\"></i></li>\n            <li><span><?= $param['pageTitle'] ?></span></li>\n        </ul>\n    </div>\n    <!-- END PAGE BAR -->\n\n    <div class=\"row\" style=\"margin-top: 16px\">\n        <!-- Main Portlet Start -->\n        <div class=\"portlet light bordered\" id=\"tablePortlet\">\n            <div class=\"portlet-title\">\n                <div class=\"caption\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-subject uppercase\"><?= $param['pageTitle'] ?></span>\n                </div>\n                <div class=\"actions\">\n                    <a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n                        <i class=\"fa fa-plus\"></i> 新增\n                    </a>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n\n                <!-- Start Search Form -->\n                <form class=\"form-inline\" id=\"searchForm\">\n                    <!-- 查询关键字 start -->\n                    <div class=\"form-group\">\n                        <label>关键字: </label>\n                        <input type=\"text\" class=\"form-control\" name=\"keyword\" placeholder=\"查询关键字\">\n                    </div>\n                    <!-- 查询关键字 end -->\n                    <!-- 查询状态 start -->\n                    <div class=\"form-group\">\n                        <label>模块: </label>\n                        <select class=\"form-control\" name=\"module\">\n                            <option selected=\"\" value=\"\">不限</option>\n                            <?= form_options($param['modules']) ?>\n                        </select>\n                    </div>\n                    <!-- 查询状态 end -->\n                    <button type=\"submit\" class=\"btn default\" id=\"searchBtn\"><i class=\"fa fa-search\"></i> 查询</button>\n                </form> <!-- End Search Form -->\n\n                <div class=\"table-scrollable\">\n                    <table id=\"treeGrid\" class=\"table table-hover\">\n                        <tr>\n                            <th width=\"40\" data-field=\"id\">ID</th>\n                            <th width=\"280\" data-field=\"name\" data-formatter=\"formatName\">名称</th>\n                            <th width=\"40\" data-field=\"module\">模块</th>\n                            <th width=\"40\" data-field=\"sort\">排序</th>\n                            <th width=\"80\" data-field=\"is_menu\" data-formatter=\"formatIsFunc\">是否菜单</th>\n                            <th width=\"80\" data-field=\"is_func\" data-formatter=\"formatIsMenu\">是否功能</th>\n                            <th width=\"80\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n                            <th width=\"60\" data-formatter=\"optPrivilege\"></th>\n                            <th width=\"60\" data-formatter=\"optEdit\"></th>\n                            <th width=\"60\" data-formatter=\"optDelete\"></th>\n                            <th>&nbsp;</th>\n                        </tr>\n                    </table>\n                </div>\n\n            </div>\n        </div> <!-- Main Portlet Start -->\n    </div>\n</div>\n<!-- END CONTENT BODY -->\n\n<!-- START ADD EDIT MODAL -->\n<div class=\"modal fade\" id=\"addEditModal\">\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n                    <span aria-hidden=\"true\">&times;</span>\n                </button>\n                <h4 class=\"modal-title caption-subject\"></h4>\n            </div>\n            <div class=\"modal-body\">\n                <!-- start add edit form  -->\n                <div class=\"row\">\n                    <div class=\"col-md-12\">\n                        <!-- start form -->\n                        <form id=\"addEditForm\" class=\"form-horizontal\">\n                            <div class=\"form-body\">\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">模块</label>\n                                    <div class=\"col-md-7\">\n                                        {!! form_radios('module',$param['modules']) !!}\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">名称</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"name\" placeholder=\"名称\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的名称\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">URI</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"uri\" placeholder=\"URI\" class=\"form-control\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">上级</label>\n                                    <div class=\"col-md-7\">\n                                        <select name=\"pid\" class=\"form-control\">\n                                        </select>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">排序</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"sort\" placeholder=\"排序\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的排序\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">状态</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('status' , $param['status'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">是否菜单</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('is_menu' , $param['isMenu'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <!--<div class=\"form-group\">-->\n                                <!--<label class=\"col-md-3 control-label\">是否功能</label>-->\n                                <!--<div class=\"col-md-7\">-->\n                            <!--<?= form_radios('is_func' , $param['isFunc'] ) ?>-->\n                                <!--</div>-->\n                                <!--</div>-->\n                                <!-- end item -->\n\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">图标</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"icon\" placeholder=\"图标\" class=\"form-control\">\n                                    </div>\n                                </div><!-- end item -->\n                            </div>\n                        </form><!-- end form -->\n                    </div>\n                </div>\n                <!-- end add edit form-->\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n                <button type=\"button\" class=\"btn red\" id=\"submitFormBtn\"><i class=\"fa fa-save\"></i> 保存</button>\n            </div>\n        </div><!-- /.modal-content -->\n    </div><!-- /.modal-dialog -->\n</div><!-- /.END ADD EDIT MODAL -->\n\n\n<!-- START PRIVILEGE MODAL -->\n<div class=\"modal fade\" id=\"privilegeModal\">\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span\n                            aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title caption-subject\">权限</h4>\n            </div>\n            <div class=\"modal-body\">\n                <!-- start add edit form  -->\n                <div class=\"row\">\n                    <div class=\"col-md-12\">\n                        <!-- start form -->\n                        <form id=\"privilegeForm\" class=\"form-horizontal\">\n                            {!! csrf_field() !!}\n                            <div class=\"form-body\">\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <div class=\"col-md-10 col-md-offset-2\">\n                                        <?php foreach( $param['privilege'] as $key => $val ) :?>\n                                        <div class=\"checkbox\">\n                                            <label>\n                                                <input type=\"checkbox\" name=\"name[]\" value=\"<?= $key ?>\">\n                                                <?= $val ?> ( <?= implode( '&nbsp;&nbsp;,&nbsp;&nbsp;' , $param['alias'][$key]) ?> )\n                                            </label>\n                                        </div>\n                                        <?php endforeach; ?>\n                                    </div>\n                                </div><!-- end item -->\n                            </div>\n                        </form><!-- end form -->\n                    </div>\n                </div>\n                <!-- end add edit form-->\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n                <button type=\"button\" class=\"btn red\" id=\"submitPrivilegeFormBtn\"><i class=\"fa fa-save\"></i> 保存</button>\n            </div>\n        </div><!-- /.modal-content -->\n    </div><!-- /.modal-dialog -->\n</div><!-- /.END PRIVILEGE MODAL -->\n    @stop"
  },
  {
    "path": "resources/views/mergoodscatalog/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n    <!-- BEGIN PAGE BAR -->\n    <div class=\"page-bar\">\n        <ul class=\"page-breadcrumb\">\n            <li><a href=\"<?= $param['uri']['module'] ?>\">首页</a> <i class=\"fa fa-circle\"></i></li>\n            <li><span><?= $param['pageTitle'] ?></span></li>\n        </ul>\n    </div>\n    <!-- END PAGE BAR -->\n\n    <div class=\"row\" style=\"margin-top: 16px\">\n        <!-- Main Portlet Start -->\n        <div class=\"portlet light bordered\" id=\"tablePortlet\">\n            <div class=\"portlet-title\">\n                <div class=\"caption\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-subject uppercase\"><?= $param['pageTitle'] ?></span>\n                </div>\n                <div class=\"actions\">\n                    <a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n                        <i class=\"fa fa-plus\"></i> 新增\n                    </a>\n                    <a href=\"javascript:;\" class=\"btn btn-circle red\" id=\"destroySelectBtn\">\n                        <i class=\"fa fa-trash\"></i> 删除\n                    </a>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <!-- Start Search Form -->\n                <form class=\"form-inline\" id=\"searchForm\">\n                    {!! csrf_field() !!}\n                    <!-- 查询关键字 start -->\n                    <div class=\"form-group\">\n                        <label>关键字: </label>\n                        <input type=\"text\" class=\"form-control\" name=\"keyword\" placeholder=\"查询关键字\">\n                    </div>\n                    <!-- 查询关键字 end -->\n                    <!-- 查询状态 start -->\n                    <div class=\"form-group\">\n                        <label>状态: </label>\n                        <select class=\"form-control\" name=\"status\">\n                            <option selected=\"\" value=\"\">不限</option>\n                            <?= form_options($param['status']) ?>\n                        </select>\n                    </div>\n                    <!-- 查询状态 end -->\n                    <button type=\"submit\" class=\"btn default\" id=\"searchBtn\"><i class=\"fa fa-search\"></i> 查询</button>\n                </form> <!-- End Search Form -->\n\n\n                <div class=\"table-scrollable\">\n                    <table id=\"treeGrid\" class=\"table table-hover\">\n                        <tr>\n                            <th width=\"40\" data-field=\"id\">ID</th>\n                            <th width=\"40\" data-field=\"sort\">排序</th>\n                            <th width=\"80\" data-field=\"type\" data-formatter=\"formatType\">类型</th>\n                            <th width=\"80\" data-field=\"pid\">上级</th>\n                            <th width=\"200\" data-field=\"text\">名称</th>\n                            <th width=\"80\" data-field=\"icon\" data-formatter=\"formatIcon\">图标</th>\n                            <th width=\"80\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n                            <th width=\"60\" data-formatter=\"optEdit\"></th>\n                            <th width=\"60\" data-formatter=\"optDelete\"></th>\n                            <th>&nbsp;</th>\n                        </tr>\n                    </table>\n                </div>\n\n            </div>\n        </div> <!-- Main Portlet Start -->\n\n        <!-- BEGIN ADD EDIT PORTLET -->\n        <div class=\"portlet box green-meadow\" id=\"addEditPortlet\" style=\"display: none;\">\n            <div class=\"portlet-title\">\n                <div class=\"caption caption-md\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-subject uppercase\"></span>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <!-- start add edit form  -->\n                <div class=\"row\">\n                    <div class=\"col-md-12\">\n                        <!-- start form -->\n                        <form id=\"addEditForm\" class=\"form-horizontal\">\n                            <div class=\"form-body\">\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">排序</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"sort\" placeholder=\"排序\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的排序\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">类型</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('type' , $param['type'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">上级</label>\n                                    <div class=\"col-md-7\">\n                                        <select name=\"pid\" class=\"form-control\">\n                                        </select>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">名称</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"text\" placeholder=\"名称\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的名称\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">图标</label>\n                                    <div class=\"col-md-7\">\n                                        <div id=\"iconPreview\" class=\"fit-img-preview\"></div>\n                                        <button id=\"iconUploadBtn\"></button>\n                                        <input type=\"text\" name=\"icon\" class=\"hide\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">描述</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"desc\" placeholder=\"描述\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的描述\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">状态</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('status' , $param['status'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                            </div>\n                            <div class=\"form-actions\" style=\"margin-bottom: 60px;\">\n                                <hr>\n                                <div class=\"row\">\n                                    <div class=\"col-md-offset-3 col-md-7\">\n                                        <button class=\"btn default btn-lg\" id=\"closePortletBtn\" type=\"button\"><i\n                                                    class=\"fa fa-arrow-left\"></i> 返回\n                                        </button>\n                                        <button class=\"btn red btn-lg\" id=\"submitFormBtn\" type=\"button\"><i class=\"fa fa-check\"></i> 提交\n                                        </button>\n                                    </div>\n                                </div>\n                            </div>\n                        </form><!-- END ADD EDIT FORM -->\n                    </div>\n                </div>\n            </div><!-- END ADD EDIT PORTLET BODY -->\n        </div><!-- END ADD EDIT PORTLET  -->\n\n    </div>\n</div>\n\n\n<!-- END CONTENT BODY -->\n    @stop"
  },
  {
    "path": "resources/views/merrole/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n    <!-- BEGIN PAGE BAR -->\n    <div class=\"page-bar\">\n        <ul class=\"page-breadcrumb\">\n            <li><a href=\"<?= $param['uri']['module'] ?>\">首页</a> <i class=\"fa fa-circle\"></i></li>\n            <li><span><?= $param['pageTitle'] ?></span></li>\n        </ul>\n    </div>\n    <!-- END PAGE BAR -->\n\n    <div class=\"row\" style=\"margin-top: 16px\">\n        <!-- Main Portlet Start -->\n        <div class=\"portlet light bordered\" id=\"tablePortlet\">\n            <div class=\"portlet-title\">\n                <div class=\"caption\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-subject uppercase\"><?= $param['pageTitle'] ?></span>\n                </div>\n                <div class=\"actions\">\n                    <a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n                        <i class=\"fa fa-plus\"></i> 新增\n                    </a>\n                    <a href=\"javascript:;\" class=\"btn btn-circle red\" id=\"destroySelectBtn\">\n                        <i class=\"fa fa-trash\"></i> 删除\n                    </a>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <!-- Start Search Form -->\n                <form class=\"form-inline\" id=\"searchForm\">\n                    <!-- 查询关键字 start -->\n                    <div class=\"form-group\">\n                        <label>关键字: </label>\n                        <input type=\"text\" class=\"form-control\" name=\"keyword\" placeholder=\"查询关键字\">\n                    </div>\n                    <!-- 查询关键字 end -->\n                    <!-- 查询状态 start -->\n                    <div class=\"form-group\">\n                        <label>模块: </label>\n                        <select class=\"form-control\" name=\"module\">\n                            <option selected=\"\" value=\"\">不限</option>\n                            <?= form_options($param['modules']) ?>\n                        </select>\n                    </div>\n                    <!-- 查询状态 end -->\n                    <button type=\"submit\" class=\"btn default\" id=\"searchBtn\"><i class=\"fa fa-search\"></i> 查询</button>\n                </form> <!-- End Search Form -->\n\n                <div class=\"table-scrollable\">\n                    <table id=\"dataGrid\" class=\"table table-hover\">\n                        <tr>\n                            <th width=\"40\" data-field=\"id\">ID</th>\n                            <th width=\"40\" data-field=\"sort\">排序</th>\n                            <th width=\"180\" data-field=\"name\">名称</th>\n                            <th width=\"80\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n                            <th width=\"80\" data-field=\"rank\">等级</th>\n                            <th width=\"60\" data-formatter=\"optPermission\"></th>\n                            <th width=\"60\" data-formatter=\"optEdit\"></th>\n                            <th width=\"60\" data-formatter=\"optDelete\"></th>\n                            <th>&nbsp;</th>\n                        </tr>\n                    </table>\n                </div>\n\n\n            </div>\n        </div> <!-- Main Portlet Start -->\n\n\n    </div>\n</div>\n\n<!-- START ADD EDIT MODAL -->\n<div class=\"modal fade\" id=\"addEditModal\">\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n                    <span aria-hidden=\"true\">&times;</span>\n                </button>\n                <h4 class=\"modal-title caption-subject\"></h4>\n            </div>\n            <div class=\"modal-body\">\n                <!-- start add edit form  -->\n                <div class=\"row\">\n                    <div class=\"col-md-12\">\n                        <!-- start form -->\n                        <form id=\"addEditForm\" class=\"form-horizontal\">\n                            {!! csrf_field() !!}\n                            <div class=\"form-body\">\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">模块</label>\n                                    <div class=\"col-md-7\">\n                                        {!! form_radios('module',$param['modules']) !!}\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">名称</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"name\" placeholder=\"名称\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的名称\">\n                                    </div>\n                                </div><!-- end item -->\n\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">排序</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"sort\" placeholder=\"排序\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的排序\">\n                                    </div>\n                                </div><!-- end item -->\n\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">状态</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('status' , $param['status'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">描述</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"desc\" placeholder=\"描述\" class=\"form-control\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">等级</label>\n                                    <div class=\"col-md-7\">\n                                        <select class=\"form-control\" name=\"rank\">\n                                            <?= form_options( $param['rank'] ) ?>\n                                        </select>\n                                    </div>\n                                </div><!-- end item -->\n                            </div>\n                        </form><!-- end form -->\n                    </div>\n                </div>\n                <!-- end add edit form-->\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n                <button type=\"button\" class=\"btn red\" id=\"submitFormBtn\"><i class=\"fa fa-save\"></i> 保存</button>\n            </div>\n        </div><!-- /.modal-content -->\n    </div><!-- /.modal-dialog -->\n</div><!-- /.END ADD EDIT MODAL -->\n<!-- END CONTENT BODY -->\n\n<!-- START PERMISSION MODAL -->\n<div class=\"modal fade\" id=\"permissionModal\">\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\" id=\"permissionLabel\"></h4>\n            </div>\n            <div class=\"modal-body\" id=\"permissionBody\">\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n                <button type=\"button\" class=\"btn btn-primary\" id=\"permissionSubmitBtn\"><i class=\"fa fa-check\"></i> 提交</button>\n            </div>\n        </div>\n        <!-- /.modal-content -->\n    </div>\n    <!-- /.modal-dialog -->\n</div>\n<!-- /#END PERMISSION MODAL -->\n    @stop"
  },
  {
    "path": "resources/views/merrole/permission.blade.php",
    "content": "\n<ul class=\"permission\">\n    <?php foreach( $funcData as $row ) :?>\n    <li class=\"func-tree\">\n        <div class=\"func-node\" data-func-id=\"<?= $row['id']?>\">\n            <span class=\"func\" data-id=\"<?= $row['id']?>\"><?= $row['name'] ?></span>\n            <span class=\"func-opt-row\" >\n        <?php foreach( $row['privilege'] as $p ) :?>\n                <span class=\"func-opt\" data-id=\"<?= $p['id']?>\"><i class=\"fa fa-square-o\"></i> <?= $privilegeName[$p['name']] ?></span>\n                <?php endforeach ; ?>\n      </span>\n        </div>\n        <?php if ( isset( $row['children'] ) ) :?>\n        <ul class=\"sub-permission\">\n            <?php foreach( $row['children'] as $children ) :?>\n            <li class=\"func-tree\">\n                <div class=\"func-node\" data-func-id=\"<?= $children['id']?>\">\n                    <span class=\"func\" data-id=\"<?= $children['id']?>\"><?= $children['name'] ?></span>\n                    <span class=\"func-opt-row\">\n            <?php foreach( $children['privilege'] as $p ) :?>\n                        <span class=\"func-opt\" data-id=\"<?= $p['id']?>\"><i class=\"fa fa-square-o\"></i> <?= $privilegeName[$p['name']] ?></span>\n                        <?php endforeach ; ?>\n          </span>\n                </div>\n                <?php if ( isset( $children['children'] ) ) :?>\n                <ul class=\"sub-permission\">\n                    <?php foreach( $children['children'] as $row ) :?>\n                    <li class=\"func-tree\">\n                        <div class=\"func-node\" data-func-id=\"<?= $row['id']?>\">\n                            <span class=\"func\" data-id=\"<?= $row['id']?>\"><?= $row['name'] ?></span>\n                            <span class=\"func-opt-row\">\n                <?php foreach( $row['privilege'] as $p) :?>\n                                <span class=\"func-opt\" data-id=\"<?= $p['id']?>\"><i class=\"fa fa-square-o\"></i> <?= $privilegeName[$p['name']] ?></span>\n                                <?php endforeach ; ?>\n              </span>\n                        </div>\n                    </li>\n                    <?php endforeach ; ?>\n                </ul>\n                <?php endif ;?>\n            </li>\n            <?php endforeach ; ?>\n        </ul>\n        <?php endif ; ?>\n    </li>\n    <?php endforeach ; ?>\n</ul>\n"
  },
  {
    "path": "resources/views/mersysuser/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n    <!-- BEGIN PAGE HEADER-->\n    <!-- BEGIN PAGE BAR -->\n    <div class=\"page-bar\">\n        <ul class=\"page-breadcrumb\">\n            <li><a href=\"<?= $param['uri']['base']?>\">首页</a> <i class=\"fa fa-circle\"></i></li>\n            <li><span>系统设置</span></li>\n        </ul>\n    </div>\n    <!-- END PAGE BAR -->\n\n    <div class=\"row\" style=\"margin-top: 16px\">\n        <!-- Main Portlet Start -->\n        <div class=\"portlet light bordered\" id=\"tablePortlet\">\n            <div class=\"portlet-title\">\n                <div class=\"caption\">\n                    <i class=\"icon-settings font-dark\"></i>\n                    <span class=\"caption-subject font-dark bold uppercase\"><?= $param['pageTitle'] ?></span>\n                </div>\n                <div class=\"actions\">\n                    <a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n                        <i class=\"fa fa-plus\"></i> 新增\n                    </a>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n\n                <!-- Start Search Form -->\n                <form class=\"form-inline\" id=\"searchForm\">\n                    <!-- 查询关键字 start -->\n                    <div class=\"form-group\">\n                        <label>关键字: </label>\n                        <input type=\"text\" class=\"form-control\" name=\"keyword\" placeholder=\"查询关键字\">\n                    </div>\n                    <!-- 查询关键字 end -->\n                    <!-- 查询状态 start -->\n                    <div class=\"form-group\">\n                        <label>状态: </label>\n                        <select class=\"form-control\" name=\"status\">\n                            <option selected=\"\" value=\"\">不限</option>\n                            <option value=\"0\">禁用</option>\n                            <option value=\"1\">启用</option>\n                        </select>\n                    </div>\n                    <!-- 查询状态 end -->\n                    <button type=\"submit\" class=\"btn default\" id=\"searchBtn\"><i class=\"fa fa-search\"></i> 查询</button>\n                </form> <!-- End Search Form -->\n\n                <!-- Start DateGrid -->\n                <div class=\"table-scrollable\">\n                    <table id=\"dataGrid\" class=\"table table-hover\">\n                        <tr>\n                            <th width=\"40\" data-field=\"id\">ID</th>\n                            <th width=\"80\" data-field=\"icon\" data-formatter=\"formatIcon\">头像</th>\n                            <th width=\"160\" data-field=\"username\" data-formatter=\"formatUsername\">用户名</th>\n                            <th width=\"80\" data-field=\"phone\">手机号码</th>\n                            <th width=\"80\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n                            <th width=\"100\" data-field=\"created_at\" data-formatter=\"formatDate\">创建时间</th>\n                            <th width=\"160\" data-field=\"signed_at\" data-formatter=\"formatDatetime\">最后登录</th>\n                            <th width=\"60\" data-formatter=\"optResetPwd\"></th>\n                            <th width=\"60\" data-formatter=\"optEdit\"></th>\n                            <th width=\"60\" data-formatter=\"optDelete\"></th>\n                            <th>&nbsp;</th>\n                        </tr>\n                    </table>\n                </div><!-- End DateGrid -->\n\n                <div class=\"back-btn-row\">\n                    <hr>\n                    <a href=\"javascript:history.go(-1);\" class=\"btn btn-lg default \"><i class=\"icon-arrow-left\"></i> 返回</a>\n                </div>\n\n            </div>\n        </div> <!-- Main Portlet Start -->\n\n        <div class=\"portlet box red\" id=\"addEditPortlet\" style=\"display: none\">\n            <div class=\"portlet-title\">\n                <div class=\"caption caption-md\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-title uppercase\"></span>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <!-- start form -->\n                <form id=\"addEditForm\" class=\"form-horizontal\">\n                    {!! csrf_field() !!}\n                    <div class=\"form-body\">\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">用户名</label>\n                            <div class=\"col-md-7\">\n                                <input type=\"text\" name=\"username\" placeholder=\"用户名\" class=\"form-control\"\n                                       data-valid=\"required\" data-tips=\"请输入正确的用户名\">\n                            </div>\n                        </div><!-- end item -->\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">头像</label>\n                            <div class=\"col-md-7\">\n                                <div id=\"iconPreview\" class=\"fit-img-preview\"></div>\n                                <button id=\"iconUploadBtn\"></button>\n                                <input type=\"text\" name=\"icon\" class=\"hide\">\n                            </div>\n                        </div><!-- end item -->\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">手机号码</label>\n                            <div class=\"col-md-7\">\n                                <input type=\"text\" name=\"phone\" placeholder=\"手机号码\" class=\"form-control\">\n                            </div>\n                        </div><!-- end item -->\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">账号状态</label>\n                            <div class=\"col-md-7\">\n                                <?= form_radios('status' , $param['status'] ) ?>\n                            </div>\n                        </div><!-- end item -->\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">Token</label>\n                            <div class=\"col-md-7\">\n                                <input type=\"text\" name=\"token\" placeholder=\"登录Token\" class=\"form-control\" disabled>\n                            </div>\n                        </div><!-- end item -->\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">角色</label>\n                            <div class=\"col-md-7\">\n                                <?= form_checkbox_rows( 'roles' , $param['roles']  ) ?>\n                            </div>\n                        </div><!-- end item -->\n                    </div>\n                    <div class=\"form-actions\" style=\"margin-bottom: 60px;\">\n                        <hr>\n                        <div class=\"row\">\n                            <div class=\"col-md-offset-3 col-md-7\">\n                                <button class=\"btn default btn-lg\" id=\"closePortletBtn\" type=\"button\">\n                                    <i class=\"fa fa-arrow-left\"></i> 返回\n                                </button>\n                                <button class=\"btn red btn-lg\" id=\"submitFormBtn\" type=\"button\">\n                                    <i class=\"fa fa-check\"></i> 提交\n                                </button>\n                            </div>\n                        </div>\n                    </div>\n                </form><!-- END ADD EDIT FORM -->\n            </div>\n        </div>\n\n    </div>\n\n</div>\n<!-- END CONTENT BODY -->\n    @stop"
  },
  {
    "path": "resources/views/meruser/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n    <!-- BEGIN PAGE HEADER-->\n    <!-- BEGIN PAGE BAR -->\n    <div class=\"page-bar\">\n        <ul class=\"page-breadcrumb\">\n            <li> <a href=\"<?=$param['uri']['base']?>\">首页</a> <i class=\"fa fa-circle\"></i> </li>\n            <li> <span>系统设置</span> </li>\n        </ul>\n    </div>\n    <!-- END PAGE BAR -->\n\n    <div class=\"row\" style=\"margin-top: 16px\">\n        <!-- Main Portlet Start -->\n        <div class=\"portlet light bordered\" id=\"tablePortlet\">\n            <div class=\"portlet-title\">\n                <div class=\"caption\">\n                    <i class=\"icon-settings font-dark\"></i>\n                    <span class=\"caption-subject font-dark bold uppercase\"><?=$param['pageTitle']?></span>\n                </div>\n                <div class=\"actions\">\n                    <a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n                        <i class=\"fa fa-plus\"></i> 新增\n                    </a>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n\n                <!-- Start Search Form -->\n                <form class=\"form-inline\" id=\"searchForm\">\n                    <!-- 查询关键字 start -->\n                    <div class=\"form-group\">\n                        <label>关键字: </label>\n                        <input type=\"text\" class=\"form-control\" name=\"keyword\" id=\"keyword\" placeholder=\"查询关键字\">\n                    </div>\n                    <!-- 查询关键字 end -->\n                     <!-- 查询状态 start -->\n                    <div class=\"form-group\">\n                        <label>模块: </label>\n                        <select class=\"form-control\" name=\"module\"  id=\"module\">\n                            <option selected=\"\" value=\"\">不限</option>\n                            <?= form_options($param['modules']) ?>\n                        </select>\n                    </div>\n                    <!-- 查询状态 end -->\n                    <!-- 查询状态 start -->\n                    <div class=\"form-group\">\n                        <label>状态: </label>\n                        <select class=\"form-control\" name=\"status\" id=\"status\">\n                            <option selected=\"\" value=\"\">不限</option>\n                            <option value=\"0\">禁用</option>\n                            <option value=\"1\">启用</option>\n                        </select>\n                    </div>\n\n                    <!-- 查询状态 end -->\n                    <button type=\"submit\" class=\"btn default\" id=\"searchBtn\"><i class=\"fa fa-search\"></i> 查询</button>\n                </form> <!-- End Search Form -->\n\n                <!-- Start DateGrid -->\n                <div class=\"table-scrollable\">\n                    <table id=\"dataGrid\" class=\"table table-hover\">\n                        <tr>\n                            <th width=\"40\" data-field=\"id\">ID</th>\n                            <th width=\"80\" data-field=\"icon\" data-formatter=\"formatIcon\">头像</th>\n                            <th width=\"160\" data-field=\"username\" data-formatter=\"formatUsername\">用户名</th>\n                            <th width=\"80\" data-field=\"module\">模块</th>\n                            <th width=\"80\" data-field=\"phone\">手机号码</th>\n                            <th width=\"80\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n                            <th width=\"100\" data-field=\"created_at\" data-formatter=\"formatDate\">创建时间</th>\n                            <th width=\"160\" data-field=\"signed_at\" data-formatter=\"formatDatetime\">最后登录</th>\n                            <th width=\"160\" data-field=\"user_device\" data-formatter=\"formatTest\">测试</th>\n                            <th width=\"60\" data-formatter=\"optResetPwd\"></th>\n                            <th width=\"60\" data-formatter=\"optEdit\"></th>\n                            <th width=\"60\" data-formatter=\"optDelete\"></th>\n                            <th>&nbsp;</th>\n                        </tr>\n                    </table>\n                </div><!-- End DateGrid -->\n\n            </div>\n        </div> <!-- Main Portlet Start -->\n\n        <div class=\"portlet box red\" id=\"addEditPortlet\" style=\"display: none\">\n            <div class=\"portlet-title\">\n                <div class=\"caption caption-md\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-title uppercase\"></span>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <!-- start form -->\n                <form id=\"addEditForm\" class=\"form-horizontal\">\n                    {!! csrf_field() !!}\n                    <div class=\"form-body\">\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">用户名</label>\n                            <div class=\"col-md-7\">\n                                <input type=\"text\" name=\"username\" placeholder=\"用户名\" class=\"form-control\"\n                                       data-valid=\"required\" data-tips=\"请输入正确的用户名\">\n                            </div>\n                        </div><!-- end item -->\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">头像</label>\n                            <div class=\"col-md-7\">\n                                <div id=\"iconPreview\" class=\"fit-img-preview\"></div>\n                                <button id=\"iconUploadBtn\"></button>\n                                <input type=\"text\" name=\"icon\" class=\"hide\">\n                            </div>\n                        </div><!-- end item -->\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">手机号码</label>\n                            <div class=\"col-md-7\">\n                                <input type=\"text\" name=\"phone\" placeholder=\"手机号码\" class=\"form-control\">\n                            </div>\n                        </div><!-- end item -->\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">账号状态</label>\n                            <div class=\"col-md-7\">\n                                <?=form_radios('status', $param['status'])?>\n                            </div>\n                        </div><!-- end item -->\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">Token</label>\n                            <div class=\"col-md-7\">\n                                <input type=\"text\" name=\"token\" placeholder=\"登录Token\" class=\"form-control\" disabled>\n                            </div>\n                        </div><!-- end item -->\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">角色</label>\n                            <div class=\"col-md-7\" id=\"roleForm\">\n                                <?=form_checkbox_rows('roles', $param['roles'])?>\n                            </div>\n                        </div><!-- end item -->\n\n                         <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">api测试账户</label>\n                            <div class=\"col-md-7\">\n                                <?=form_radios('for_test', $param['for_test'])?>\n                            </div>\n                        </div><!-- end item -->\n                    </div>\n                    <div class=\"form-actions\" style=\"margin-bottom: 60px;\">\n                        <hr>\n                        <div class=\"row\">\n                            <div class=\"col-md-offset-3 col-md-7\">\n                                <button class=\"btn default btn-lg\" id=\"closePortletBtn\" type=\"button\">\n                                    <i class=\"fa fa-arrow-left\"></i> 返回\n                                </button>\n                                <button class=\"btn red btn-lg\" id=\"submitFormBtn\" type=\"button\">\n                                    <i class=\"fa fa-check\"></i> 提交\n                                </button>\n                            </div>\n                        </div>\n                    </div>\n                </form><!-- END ADD EDIT FORM -->\n            </div>\n        </div>\n\n    </div>\n\n</div>\n\n<!-- END CONTENT BODY -->\n    @stop"
  },
  {
    "path": "resources/views/modulefunc/index.blade.php",
    "content": "@extends('backend::public.layout')\n\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n    <!-- BEGIN PAGE BAR -->\n    <div class=\"page-bar\">\n        <ul class=\"page-breadcrumb\">\n            <li><a href=\"<?=$param['uri']['module']?>\">首页</a> <i class=\"fa fa-circle\"></i></li>\n            <li><span><?=$param['pageTitle']?></span></li>\n        </ul>\n    </div>\n    <!-- END PAGE BAR -->\n\n    <div class=\"row\" style=\"margin-top: 16px\">\n        <!-- Main Portlet Start -->\n        <div class=\"portlet light bordered\" id=\"tablePortlet\">\n            <div class=\"portlet-title\">\n                <div class=\"caption\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-subject uppercase\"> {{ $param['pageTitle'] }}</span>\n                </div>\n                <div class=\"actions\">\n                    <a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n                        <i class=\"fa fa-plus\"></i> 新增\n                    </a>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <nav class=\"navbar navbar-default\" role=\"navigation\">\n                    <div class=\"container-fluid\">\n\n                        <ul class=\"nav navbar-nav\">\n                            <li id='diy_nav' data-nav='backend.modulerole.index' ><a href=\"{{ $param['role_uri'] }}\">角色</a></li>\n                            <li data-nav='backend.modulefunc.index'><a href=\"{{ $param['func_uri'] }}\">功能</a></li>\n\n                        </ul>\n\n                    </div>\n                </nav>\n                <div class=\"table-scrollable\">\n                    <table id=\"treeGrid\" class=\"table table-hover\">\n                        <tr>\n                            <th width=\"40\" data-field=\"id\">ID</th>\n                            <th width=\"280\" data-field=\"name\" data-formatter=\"formatName\">名称</th>\n                            <th width=\"40\" data-field=\"sort\">排序</th>\n                            <th width=\"80\" data-field=\"is_menu\" data-formatter=\"formatIsFunc\">是否菜单</th>\n                            <th width=\"80\" data-field=\"is_func\" data-formatter=\"formatIsMenu\">是否功能</th>\n                            <th width=\"80\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n                            <th width=\"60\" data-formatter=\"optPrivilege\"></th>\n                            <th width=\"60\" data-formatter=\"optEdit\"></th>\n                            <th width=\"60\" data-formatter=\"optDelete\"></th>\n                            <th>&nbsp;</th>\n                        </tr>\n                    </table>\n                </div>\n\n            </div>\n        </div> <!-- Main Portlet Start -->\n    </div>\n</div>\n<!-- END CONTENT BODY -->\n\n<!-- START ADD EDIT MODAL -->\n<div class=\"modal fade\" id=\"addEditModal\">\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n                    <span aria-hidden=\"true\">&times;</span>\n                </button>\n                <h4 class=\"modal-title caption-subject\"></h4>\n            </div>\n            <div class=\"modal-body\">\n                <!-- start add edit form  -->\n                <div class=\"row\">\n                    <div class=\"col-md-12\">\n                        <!-- start form -->\n                        <form id=\"addEditForm\" class=\"form-horizontal\">\n                            {!! csrf_field() !!}\n                            <div class=\"form-body\">\n                                <input type=\"hidden\" name='module' value='{{ $param['module_name'] }}' />\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">名称</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"name\" placeholder=\"名称\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的名称\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">URI</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"uri\" placeholder=\"URI\" class=\"form-control\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">上级</label>\n                                    <div class=\"col-md-7\">\n                                        <select name=\"pid\" class=\"form-control\">\n                                        </select>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">排序</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"sort\" placeholder=\"排序\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的排序\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">状态</label>\n                                    <div class=\"col-md-7\">\n                                        <?=form_radios('status', $param['status'])?>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">是否菜单</label>\n                                    <div class=\"col-md-7\">\n                                        <?=form_radios('is_menu', $param['isMenu'])?>\n                                    </div>\n                                </div><!-- end item -->\n\n\n                                <!-- start item -->\n                                <!--<div class=\"form-group\">-->\n                                <!--<label class=\"col-md-3 control-label\">是否功能</label>-->\n                                <!--<div class=\"col-md-7\">-->\n                            <!--<?=form_radios('is_func', $param['isFunc'])?>-->\n                                <!--</div>-->\n                                <!--</div>-->\n                                <!-- end item -->\n\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">图标</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"icon\" placeholder=\"图标\" class=\"form-control\">\n                                    </div>\n                                </div><!-- end item -->\n                            </div>\n                        </form><!-- end form -->\n                    </div>\n                </div>\n                <!-- end add edit form-->\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n                <button type=\"button\" class=\"btn red\" id=\"submitFormBtn\"><i class=\"fa fa-save\"></i> 保存</button>\n            </div>\n        </div><!-- /.modal-content -->\n    </div><!-- /.modal-dialog -->\n</div><!-- /.END ADD EDIT MODAL -->\n\n\n<!-- START PRIVILEGE MODAL -->\n<div class=\"modal fade\" id=\"privilegeModal\">\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span\n                            aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title caption-subject\">权限</h4>\n            </div>\n            <div class=\"modal-body\">\n                <!-- start add edit form  -->\n                <div class=\"row\">\n                    <div class=\"col-md-12\">\n                        <!-- start form -->\n                        <form id=\"privilegeForm\" class=\"form-horizontal\">\n                            {!! csrf_field() !!}\n                            <div class=\"form-body\">\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <div class=\"col-md-10 col-md-offset-2\">\n\n                                        <?php foreach ($param['privilege'] as $key => $val): ?>\n                                        <div class=\"checkbox\">\n                                            <label>\n                                                <input type=\"checkbox\" name=\"name[]\" value=\"<?=$key?>\">\n                                                <?=$val?> ( <?=implode('&nbsp;&nbsp;,&nbsp;&nbsp;', $param['alias'][$key])?> )\n                                            </label>\n                                        </div>\n                                        <?php endforeach;?>\n                                    </div>\n                                </div><!-- end item -->\n                            </div>\n                        </form><!-- end form -->\n                    </div>\n                </div>\n                <!-- end add edit form-->\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n                <button type=\"button\" class=\"btn red\" id=\"submitPrivilegeFormBtn\"><i class=\"fa fa-save\"></i> 保存</button>\n            </div>\n        </div><!-- /.modal-content -->\n    </div><!-- /.modal-dialog -->\n</div><!-- /.END PRIVILEGE MODAL -->\n@stop"
  },
  {
    "path": "resources/views/modulerole/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n\t<!-- BEGIN PAGE BAR -->\n\t<div class=\"page-bar\">\n\t\t<ul class=\"page-breadcrumb\">\n\t\t\t<li><a href=\"<?=$param['uri']['module']?>\">首页</a> <i class=\"fa fa-circle\"></i></li>\n\t\t\t<li><span><?=$param['pageTitle']?></span></li>\n\t\t</ul>\n\t</div>\n\t<!-- END PAGE BAR -->\n\n\t<div class=\"row\" style=\"margin-top: 16px\">\n\t\t<!-- Main Portlet Start -->\n\t\t<div class=\"portlet light bordered\" id=\"tablePortlet\">\n\t\t\t<div class=\"portlet-title\">\n\t\t\t\t<div class=\"caption\">\n\t\t\t\t\t<i class=\"icon-settings\"></i>\n\t\t\t\t\t<span class=\"caption-subject uppercase\"><?=$param['pageTitle']?></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t<a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n\t\t\t\t\t\t<i class=\"fa fa-plus\"></i> 新增\n\t\t\t\t\t</a>\n\t\t\t\t\t<a href=\"javascript:;\" class=\"btn btn-circle red\" id=\"destroySelectBtn\">\n\t\t\t\t\t\t<i class=\"fa fa-trash\"></i> 删除\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"portlet-body\">\n\t\t\t\t<nav class=\"navbar navbar-default\" role=\"navigation\">\n                    <div class=\"container-fluid\">\n\n                        <ul class=\"nav navbar-nav\">\n                            <li id='diy_nav' data-nav='backend.modulerole.index' ><a href=\"{{ $param['role_uri'] }}\">角色</a></li>\n                            <li data-nav='backend.modulefunc.index'><a href=\"{{ $param['func_uri'] }}\">功能</a></li>\n\n                        </ul>\n\n                    </div>\n                </nav>\n\t\t\t\t<div class=\"table-scrollable\">\n\t\t\t\t\t<table id=\"dataGrid\" class=\"table table-hover\">\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th width=\"40\" data-field=\"id\">ID</th>\n\t\t\t\t\t\t\t<th width=\"40\" data-field=\"sort\">排序</th>\n\t\t\t\t\t\t\t<th width=\"180\" data-field=\"name\">名称</th>\n\t\t\t\t\t\t\t<th width=\"80\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n\t\t\t\t\t\t\t<th width=\"80\" data-field=\"rank\">等级</th>\n\t\t\t\t\t\t\t<th width=\"60\" data-formatter=\"optPermission\"></th>\n\t\t\t\t\t\t\t<th width=\"60\" data-formatter=\"optEdit\"></th>\n\t\t\t\t\t\t\t<th width=\"60\" data-formatter=\"optDelete\"></th>\n\t\t\t\t\t\t\t<th>&nbsp;</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</table>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div> <!-- Main Portlet Start -->\n\t</div>\n</div>\n\n<!-- START ADD EDIT MODAL -->\n<div class=\"modal fade\" id=\"addEditModal\">\n\t<div class=\"modal-dialog\">\n\t\t<div class=\"modal-content\">\n\t\t\t<div class=\"modal-header\">\n\t\t\t\t<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n\t\t\t\t\t<span aria-hidden=\"true\">&times;</span>\n\t\t\t\t</button>\n\t\t\t\t<h4 class=\"modal-title caption-subject\"></h4>\n\t\t\t</div>\n\t\t\t<div class=\"modal-body\">\n\t\t\t\t<!-- start add edit form  -->\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-md-12\">\n\t\t\t\t\t\t<!-- start form -->\n\t\t\t\t\t\t<form id=\"addEditForm\" class=\"form-horizontal\">\n\t\t\t\t\t\t\t{!! csrf_field() !!}\n\t\t\t\t\t\t\t<div class=\"form-body\">\n\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">名称</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<input type=\"text\" name=\"name\" placeholder=\"名称\" class=\"form-control\"\n\t\t\t\t\t\t\t\t\t\t       data-valid=\"required\" data-tips=\"请输入正确的名称\">\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">排序</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<input type=\"text\" name=\"sort\" placeholder=\"排序\" class=\"form-control\"\n\t\t\t\t\t\t\t\t\t\t       data-valid=\"required\" data-tips=\"请输入正确的排序\">\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">状态</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<?=form_radios('status', $param['status'])?>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">描述</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<input type=\"text\" name=\"desc\" placeholder=\"描述\" class=\"form-control\">\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">等级</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<select class=\"form-control\" name=\"rank\">\n\t\t\t\t\t\t\t\t\t\t\t<?=form_options($param['rank'])?>\n\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</form><!-- end form -->\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- end add edit form-->\n\t\t\t</div>\n\t\t\t<div class=\"modal-footer\">\n\t\t\t\t<button type=\"button\" class=\"btn default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n\t\t\t\t<button type=\"button\" class=\"btn red\" id=\"submitFormBtn\"><i class=\"fa fa-save\"></i> 保存</button>\n\t\t\t</div>\n\t\t</div><!-- /.modal-content -->\n\t</div><!-- /.modal-dialog -->\n</div><!-- /.END ADD EDIT MODAL -->\n<!-- END CONTENT BODY -->\n\n<!-- START PERMISSION MODAL -->\n<div class=\"modal fade\" id=\"permissionModal\">\n\t<input type=\"hidden\" name='module' value='{{ $param['module_name'] }}' />\n\t<div class=\"modal-dialog\">\n\t\t<div class=\"modal-content\">\n\t\t\t<div class=\"modal-header\">\n\t\t\t\t<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n\t\t\t\t<h4 class=\"modal-title\" id=\"permissionLabel\"></h4>\n\t\t\t</div>\n\t\t\t<div class=\"modal-body\" id=\"permissionBody\">\n\t\t\t</div>\n\t\t\t<div class=\"modal-footer\">\n\t\t\t\t<button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n\t\t\t\t<button type=\"button\" class=\"btn btn-primary\" id=\"permissionSubmitBtn\"><i class=\"fa fa-check\"></i> 提交</button>\n\t\t\t</div>\n\t\t</div>\n\t\t<!-- /.modal-content -->\n\t</div>\n\t<!-- /.modal-dialog -->\n</div>\n<!-- /#END PERMISSION MODAL -->\n\t@stop"
  },
  {
    "path": "resources/views/modulerole/permission.blade.php",
    "content": "<ul class=\"permission\">\n  <?php foreach( $funcData as $row ) :?>\n  <li class=\"func-tree\">\n    <div class=\"func-node\" data-func-id=\"<?= $row['id']?>\">\n      <span class=\"func\" data-id=\"<?= $row['id']?>\"><?= $row['name'] ?></span>\n      <span class=\"func-opt-row\" >\n        <?php foreach( $row['privilege'] as $p ) :?>\n        <span class=\"func-opt\" data-id=\"<?= $p['id']?>\"><i class=\"fa fa-square-o\"></i> <?= $privilegeName[$p['name']] ?></span>\n        <?php endforeach ; ?>\n      </span>\n    </div>\n    <?php if ( isset( $row['children'] ) ) :?>\n    <ul class=\"sub-permission\">\n      <?php foreach( $row['children'] as $children ) :?>\n      <li class=\"func-tree\">\n        <div class=\"func-node\" data-func-id=\"<?= $children['id']?>\">\n          <span class=\"func\" data-id=\"<?= $children['id']?>\"><?= $children['name'] ?></span>\n          <span class=\"func-opt-row\">\n            <?php foreach( $children['privilege'] as $p ) :?>\n            <span class=\"func-opt\" data-id=\"<?= $p['id']?>\"><i class=\"fa fa-square-o\"></i> <?= $privilegeName[$p['name']] ?></span>\n            <?php endforeach ; ?>\n          </span>\n        </div>\n        <?php if ( isset( $children['children'] ) ) :?>\n        <ul class=\"sub-permission\">\n          <?php foreach( $children['children'] as $row ) :?>\n          <li class=\"func-tree\">\n            <div class=\"func-node\" data-func-id=\"<?= $row['id']?>\">\n              <span class=\"func\" data-id=\"<?= $row['id']?>\"><?= $row['name'] ?></span>\n              <span class=\"func-opt-row\">\n                <?php foreach( $row['privilege'] as $p) :?>\n                <span class=\"func-opt\" data-id=\"<?= $p['id']?>\"><i class=\"fa fa-square-o\"></i> <?= $privilegeName[$p['name']] ?></span>\n                <?php endforeach ; ?>\n              </span>\n            </div>\n          </li>\n          <?php endforeach ; ?>\n        </ul>\n        <?php endif ;?>\n      </li>\n      <?php endforeach ; ?>\n    </ul>\n    <?php endif ; ?>\n  </li>\n  <?php endforeach ; ?>\n</ul>"
  },
  {
    "path": "resources/views/public/footer.blade.php",
    "content": "<div class=\"page-footer\">\n    <div class=\"page-footer-inner\">\n        2016-2017 &copy; Smart2 by Dark Matter Group.\n    </div>\n    <div class=\"scroll-to-top\" style=\"display: none;\">\n        <i class=\"icon-arrow-up\"></i>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/public/header.blade.php",
    "content": "\n<div class=\"page-header navbar navbar-fixed-top\">\n    <!-- BEGIN HEADER INNER -->\n    <div class=\"page-header-inner \">\n        <!-- BEGIN LOGO -->\n        <div class=\"page-logo\">\n            <a href=\"#\">\n                <img class=\"logo-default\" alt=\"logo\" src=\"static/themes/global/img/logo.png\"> </a>\n            <div class=\"menu-toggler sidebar-toggler\">\n                <span></span>\n            </div>\n        </div>\n        <!-- END LOGO -->\n        <!-- BEGIN RESPONSIVE MENU TOGGLER -->\n        <a data-target=\".navbar-collapse\" data-toggle=\"collapse\" class=\"menu-toggler responsive-toggler\" href=\"javascript:;\">\n            <span></span>\n        </a>\n        <!-- END RESPONSIVE MENU TOGGLER -->\n        <!-- BEGIN TOP NAVIGATION MENU -->\n        <div class=\"top-menu\">\n            <ul class=\"nav navbar-nav pull-right\">\n                <!-- BEGIN USER LOGIN DROPDOWN -->\n                <!-- DOC: Apply \"dropdown-dark\" class after below \"dropdown-extended\" to change the dropdown styte -->\n                <li class=\"dropdown dropdown-user\">\n                    <a data-close-others=\"true\" data-hover=\"dropdown\" data-toggle=\"dropdown\" class=\"dropdown-toggle\" href=\"javascript:;\">\n                        <img src=\"{{ isset($user['icon']) ? $user['icon'] : '无图标' }}\" class=\"img-circle\" alt=\"\">\n                        <span class=\"username username-hide-on-mobile\"> {{ isset($user['username']) ? $user['username'] : '游客' }}</span>\n                        <i class=\"fa fa-angle-down\"></i>\n                    </a>\n                    <ul class=\"dropdown-menu dropdown-menu-default\">\n                        <li>\n                            <a href=\"javascript:;\">\n                                <i class=\"icon-user\"></i> {{ isset($user['roles']['role_name']) ? $user['roles']['role_name'] : '角色名' }}\n                            </a>\n                        </li>\n                        <li>\n                            <a href=\"javascript:;\" id=\"chPwdBtn\">\n                                <i class=\"icon-lock\"></i> 修改密码 </a>\n                        </li>\n                        <li class=\"divider\"> </li>\n                        <li>\n                            <a href=\"{{ full_uri('backend/logout') }}\" onclick=\"event.preventDefault();\n                                                     document.getElementById('logout-form').submit();\">\n                                <i class=\"icon-logout\"></i> 退出 </a>\n\n                            <form id=\"logout-form\" action=\"{{ route('logout') }}\" method=\"POST\" style=\"display: none;\">\n                                {{ csrf_field() }}\n                            </form>\n                        </li>\n                    </ul>\n                </li>\n                <!-- END USER LOGIN DROPDOWN -->\n\n            </ul>\n        </div>\n        <!-- END TOP NAVIGATION MENU -->\n    </div>\n    <!-- END HEADER INNER -->\n</div>\n<div class=\"clearfix\"> </div>\n"
  },
  {
    "path": "resources/views/public/layout.blade.php",
    "content": "\n<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\">\n    <meta content=\"\" name=\"description\" />\n    <meta content=\"\" name=\"author\" />\n    <base href=\"{{ $param['uri']['base'] }}\">\n    <title>{{ $param['pageTitle'] }} - {{ config('moduleName') }}</title>\n\n    <!-- Set render engine for 360 browser -->\n    <meta name=\"renderer\" content=\"webkit\">\n    <!-- No Baidu Site App-->\n    <meta http-equiv=\"Cache-Control\" content=\"no-siteapp\"/>\n    <!-- Site Logo -->\n    <link rel=\"icon\" type=\"image/png\" href=\"static/favicon.png\">\n\n    <!-- Core CSS Start -->\n    <link href=\"https://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700&subset=all\" rel=\"stylesheet\" type=\"text/css\">\n    <link href=\"node_modules/font-awesome/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"node_modules/simple-line-icons-webfont/dist/css/simple-line-icons.css\" rel=\"stylesheet\">\n    <link href=\"node_modules/bootstrap/dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"node_modules/bootstrap-switch/dist/css/bootstrap3/bootstrap-switch.min.css\" rel=\"stylesheet\">\n\n    <link href=\"static/themes/global/app.min.css\" rel=\"stylesheet\">\n    <link href=\"static/themes/global/custom.min.css\" rel=\"stylesheet\">\n    <!-- Core CSS End -->\n\n    <!-- Custom CSS Start -->\n{!! $css !!}\n<!-- Custom CSS End -->\n</head>\n<body class=\"page-header-fixed page-sidebar-closed-hide-logo page-container-bg-solid\">\n\n<!-- Header Start -->\n@include('backend::public.header')\n<!-- Header End  -->\n\n<!-- Body Start -->\n<div class=\"page-container\">\n    <!-- BEGIN SIDEBAR -->\n    <div class=\"page-sidebar-wrapper\">\n        <!-- BEGIN SIDEBAR -->\n        <div class=\"page-sidebar navbar-collapse collapse\">\n            @include('backend::public.sidebar_menu')\n        </div>\n        <!-- END SIDEBAR -->\n    </div>\n    <!-- END SIDEBAR -->\n    <!-- BEGIN CONTENT -->\n    <div class=\"page-content-wrapper\">\n@yield('content')\n    </div>\n    <!-- END CONTENT -->\n</div>\n\n<!-- 修改密码 Start -->\n<div id=\"chPwdModal\" class=\"modal fade\">\n    <div class=\"modal-dialog modal-sm\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button aria-hidden=\"true\" data-dismiss=\"modal\" class=\"close\" type=\"button\"></button>\n                <h4 class=\"modal-title\">修改密码</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form id=\"chPwdForm\" class=\"form-horizontal\">\n                    {{ csrf_field() }}\n                    <div class=\"form-body\">\n                        <div class=\"form-group\">\n                            <div class=\"col-md-12\">\n                                <input type=\"password\" name=\"oldPwd\" placeholder=\"原密码\" class=\"form-control\">\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <div class=\"col-md-12\">\n                                <input type=\"password\" name=\"pwd\" placeholder=\"新密码\" class=\"form-control\">\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <div class=\"col-md-12\">\n                                <input type=\"password\" name=\"pwdConfirm\" placeholder=\"密码确认\" class=\"form-control\">\n                            </div>\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button data-dismiss=\"modal\" class=\"btn dark btn-outline\" type=\"button\">关闭</button>\n                <button class=\"btn red\" type=\"button\" id=\"submitChPwdForm\">修改</button>\n            </div>\n        </div>\n        <!-- /.modal-content -->\n    </div>\n    <!-- /.modal-dialog -->\n</div> <!-- 修改密码 End -->\n\n<!-- Body End -->\n\n<!-- Footer Start -->\n@include('backend::public.footer')\n<!-- Footer End -->\n\n<!-- Core Javascript Start -->\n<script src=\"node_modules/jquery/dist/jquery.min.js\" type=\"text/javascript\"></script>\n<script src=\"node_modules/bootstrap/dist/js/bootstrap.min.js\" type=\"text/javascript\"></script>\n<script src=\"node_modules/js-cookie/src/js.cookie.js\" type=\"text/javascript\"></script>\n<script src=\"node_modules/bootstrap-hover-dropdown/bootstrap-hover-dropdown.min.js\" type=\"text/javascript\"></script>\n<script src=\"node_modules/jquery-slimscroll/jquery.slimscroll.min.js\" type=\"text/javascript\"></script>\n<script src=\"node_modules/block-ui/jquery.blockUI.js\" type=\"text/javascript\"></script>\n<script src=\"node_modules/bootstrap-switch/dist/js/bootstrap-switch.min.js\" type=\"text/javascript\"></script>\n<script src=\"node_modules/bootpag/lib/jquery.bootpag.min.js\" type=\"text/javascript\"></script>\n<!-- Core Javascript End  -->\n\n<!-- Layout Javascript End-->\n<!--<script src=\"static/src/js/global/app.js\" type=\"text/javascript\"></script>-->\n<!--<script src=\"static/src/js/global/layout.js\" type=\"text/javascript\"></script>-->\n<script src=\"static/js/global/app.min.js\" type=\"text/javascript\"></script>\n<script src=\"static/js/global/custom.min.js\" type=\"text/javascript\"></script>\n<!-- Layout Javascript End  -->\n\n<!-- Custom Javascript Start -->\n{!! $js !!}\n<!-- Custom Javascript End  -->\n\n</body>\n</html>"
  },
  {
    "path": "resources/views/public/layout1.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\">\n    <meta content=\"\" name=\"description\" />\n    <meta content=\"\" name=\"author\" />\n    <base href=\"{{ $param['uri']['base'] }}\">\n    <title>{{ $param['pageTitle'] }} - {{ config('moduleName') }}</title>\n\n    <!-- Set render engine for 360 browser -->\n    <meta name=\"renderer\" content=\"webkit\">\n    <!-- No Baidu Site App-->\n    <meta http-equiv=\"Cache-Control\" content=\"no-siteapp\"/>\n    <!-- Site Logo -->\n    <link rel=\"icon\" type=\"image/png\" href=\"static/favicon.png\">\n\n    <!-- Core CSS Start -->\n    <link href=\"https://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700&subset=all\" rel=\"stylesheet\" type=\"text/css\">\n    <link href=\"node_modules/font-awesome/css/font-awesome.min.css\" rel=\"stylesheet\">\n    <link href=\"node_modules/simple-line-icons-webfont/dist/css/simple-line-icons.css\" rel=\"stylesheet\">\n    <link href=\"node_modules/bootstrap/dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <link href=\"node_modules/bootstrap-switch/dist/css/bootstrap3/bootstrap-switch.min.css\" rel=\"stylesheet\">\n\n    <link href=\"static/themes/global/app.min.css\" rel=\"stylesheet\">\n    <link href=\"static/themes/global/custom.min.css\" rel=\"stylesheet\">\n    <!-- Core CSS End -->\n\n    <!-- Custom CSS Start -->\n    @yield('css' , 'css样式')\n<!-- Custom CSS End -->\n</head>\n<body class=\"page-header-fixed page-sidebar-closed-hide-logo page-container-bg-solid\">\n\n<!-- Header Start -->\n@yield('header' , '头部')\n<!-- Header End  -->\n\n<!-- Body Start -->\n<div class=\"page-container\">\n    <!-- BEGIN SIDEBAR -->\n    <div class=\"page-sidebar-wrapper\">\n        <!-- BEGIN SIDEBAR -->\n        <div class=\"page-sidebar navbar-collapse collapse\">\n            {{ $sidebarMenu }}\n        </div>\n        <!-- END SIDEBAR -->\n    </div>\n    <!-- END SIDEBAR -->\n    <!-- BEGIN CONTENT -->\n    <div class=\"page-content-wrapper\">\n        {{ $body }}\n    </div>\n    <!-- END CONTENT -->\n</div>\n\n<!-- 修改密码 Start -->\n<div id=\"chPwdModal\" class=\"modal fade\">\n    <div class=\"modal-dialog modal-sm\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button aria-hidden=\"true\" data-dismiss=\"modal\" class=\"close\" type=\"button\"></button>\n                <h4 class=\"modal-title\">修改密码</h4>\n            </div>\n            <div class=\"modal-body\">\n                <form id=\"chPwdForm\" class=\"form-horizontal\">\n                    <div class=\"form-body\">\n                        <div class=\"form-group\">\n                            <div class=\"col-md-12\">\n                                <input type=\"password\" name=\"oldPwd\" placeholder=\"原密码\" class=\"form-control\">\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <div class=\"col-md-12\">\n                                <input type=\"password\" name=\"pwd\" placeholder=\"新密码\" class=\"form-control\">\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <div class=\"col-md-12\">\n                                <input type=\"password\" name=\"pwdConfirm\" placeholder=\"密码确认\" class=\"form-control\">\n                            </div>\n                        </div>\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button data-dismiss=\"modal\" class=\"btn dark btn-outline\" type=\"button\">关闭</button>\n                <button class=\"btn red\" type=\"button\" id=\"submitChPwdForm\">修改</button>\n            </div>\n        </div>\n        <!-- /.modal-content -->\n    </div>\n    <!-- /.modal-dialog -->\n</div> <!-- 修改密码 End -->\n\n<!-- Body End -->\n\n<!-- Footer Start -->\n@yield('footer' , '底部')\n<!-- Footer End -->\n\n<!-- Core Javascript Start -->\n<script src=\"node_modules/jquery/dist/jquery.min.js\" type=\"text/javascript\"></script>\n<script src=\"node_modules/bootstrap/dist/js/bootstrap.min.js\" type=\"text/javascript\"></script>\n<script src=\"node_modules/js-cookie/src/js.cookie.js\" type=\"text/javascript\"></script>\n<script src=\"node_modules/bootstrap-hover-dropdown/bootstrap-hover-dropdown.min.js\" type=\"text/javascript\"></script>\n<script src=\"node_modules/jquery-slimscroll/jquery.slimscroll.min.js\" type=\"text/javascript\"></script>\n<script src=\"node_modules/block-ui/jquery.blockUI.js\" type=\"text/javascript\"></script>\n<script src=\"node_modules/bootstrap-switch/dist/js/bootstrap-switch.min.js\" type=\"text/javascript\"></script>\n<script src=\"node_modules/bootpag/lib/jquery.bootpag.min.js\" type=\"text/javascript\"></script>\n<!-- Core Javascript End  -->\n\n<!-- Layout Javascript End-->\n<!--<script src=\"static/src/js/global/app.js\" type=\"text/javascript\"></script>-->\n<!--<script src=\"static/src/js/global/layout.js\" type=\"text/javascript\"></script>-->\n<script src=\"static/js/global/app.min.js\" type=\"text/javascript\"></script>\n<script src=\"static/js/global/custom.min.js\" type=\"text/javascript\"></script>\n<!-- Layout Javascript End  -->\n\n<!-- Custom Javascript Start -->\n@yield('js' , 'js引入')\n<!-- Custom Javascript End  -->\n\n</body>\n</html>"
  },
  {
    "path": "resources/views/public/sidebar_menu.blade.php",
    "content": "<!-- BEGIN SIDEBAR MENU -->\n<ul style=\"padding-top: 20px\" data-slide-speed=\"200\"\n    data-auto-scroll=\"true\" data-keep-expanded=\"false\" class=\"page-sidebar-menu  page-header-fixed\">\n    <!-- DOC: To remove the sidebar toggler from the sidebar you just need to completely remove the below \"sidebar-toggler-wrapper\" LI element -->\n    <li class=\"sidebar-toggler-wrapper hide\">\n        <!-- BEGIN SIDEBAR TOGGLER BUTTON -->\n        <div class=\"sidebar-toggler\">\n            <span></span>\n        </div>\n        <!-- END SIDEBAR TOGGLER BUTTON -->\n    </li>\n    <li class=\"sidebar-search-wrapper\">\n        <!-- BEGIN RESPONSIVE QUICK SEARCH FORM -->\n        <form method=\"POST\" action=\"#\" class=\"sidebar-search\">\n            <a class=\"remove\" href=\"javascript:;\">\n                <i class=\"icon-close\"></i>\n            </a>\n            <div class=\"input-group\">\n                <input type=\"text\" placeholder=\"搜索...\" class=\"form-control\">\n                <span class=\"input-group-btn\">\n            <a class=\"btn submit\" href=\"javascript:;\">\n                <i class=\"icon-magnifier\"></i>\n            </a>\n        </span>\n            </div>\n        </form>\n        <!-- END RESPONSIVE QUICK SEARCH FORM -->\n    </li>\n   @foreach( $menuData as $item )\n   @if ( $item['name'] == '首页' )\n    <li class=\"nav-item start\">\n        <a class=\"nav-link nav-toggle\" href=\"/{{  $item['uri']  }}\" data-uri=\"/{{  $item['uri']  }}\">\n            <i class=\"{{ $item['icon'] }}\"></i>\n            <span class=\"title\">首页</span>\n            <span class=\"selected\"></span>\n        </a>\n    </li>\n    @else\n    <li class=\"nav-item  \">\n        <a class=\"nav-link nav-toggle\" href=\"javascript:;\">\n            <i class=\"{{ $item['icon'] }}\"></i>\n            <span class=\"title\">{{ $item['name'] }}</span>\n            <span class=\"arrow\"></span>\n        </a>\n        @if( isset( $item['children'] ) )\n        <ul class=\"sub-menu\">\n            @foreach( $item['children'] as $i )\n            <li class=\"nav-item  \">\n                <a class=\"nav-link \" href=\"/{{  $i['uri']  }}\" data-uri=\"/{{  $i['uri']  }}\">\n                    <span class=\"title\">{{ $i['name'] }}</span>\n                </a>\n            </li>\n            @endforeach\n        </ul>\n       @endif\n    </li>\n    @endif\n   @endforeach\n</ul>\n<!-- END SIDEBAR MENU -->"
  },
  {
    "path": "resources/views/simulator/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n<!-- BEGIN PAGE BAR -->\n<div class=\"page-bar\">\n<ul class=\"page-breadcrumb\">\n<li><a href=\"<?= $param['uri']['module'] ?>\">首页</a> <i class=\"fa fa-circle\"></i></li>\n<li><span><?= $param['pageTitle'] ?></span></li>\n</ul>\n</div>\n<!-- END PAGE BAR -->\n<div class=\"row\" style=\"margin-top: 16px\">\n    <!-- Main Portlet Start -->\n    <div class=\"portlet light bordered\" id=\"tablePortlet\">\n        <div class=\"portlet-title\">\n            <div class=\"caption\">\n                <i class=\"icon-settings\"></i>\n                <span class=\"caption-subject uppercase\"><?= $param['pageTitle'] ?></span>\n            </div>\n            <div class=\"actions\">\n                <a href=\"<?= $param['uri']['readme'] ?>\" class=\"btn btn-circle btn-sm btn-primary\"><i class=\"fa fa-file\"></i>\n                    接口说明</a>\n            </div>\n        </div>\n\n        <div class=\"portlet-body\">\n            <!-- uri start -->\n            <div class=\"row\">\n                <div class=\"col-md-12\">\n                    <h4 class=\"block\">Uri</h4>\n                    <hr>\n                    <form id=\"uriForm\" class=\"form-horizontal\">\n                        <div class=\"form-body\">\n                            <!-- start item -->\n                            <div class=\"form-group\">\n                                <label class=\"col-md-2 control-label\">接口uri</label>\n                                <div class=\"col-md-6\">\n                                    <span class=\"help-inline\"> <?= $param['uri']['api'] ?> </span>\n                                    <select name=\"version\" id=\"version\" class=\"form-control input-inline input-mini\"></select>\n                                    <select name=\"actions\" id=\"actions\" class=\"form-control input-inline input-medium\"></select>\n                                </div>\n                                <div class=\"col-md-3\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"help-inline\">\n\t\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-sm default\" type=\"button\" id=\"selectActionBtn\">\n\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-check\"></i> 选择接口</button>\n\t\t\t\t\t\t\t\t\t\t</span>\n                                </div>\n                            </div><!-- end item -->\n                        </div>\n                    </form>\n                </div>\n            </div><!-- uri end -->\n\n            <!-- header start -->\n            <div class=\"row\">\n                <div class=\"col-md-12\">\n                    <h4>\n                        Header\n                        <button id=\"showOrHideHeader\" type=\"button\" class=\"btn btn-sm green\">显示</button>\n                    </h4>\n                    <hr>\n                    <form id=\"headerForm\" class=\"form-horizontal\" style=\"display: none;\">\n                        <div class=\"form-body\">\n                            <!-- start item -->\n                            <div class=\"form-group\">\n                                <label class=\"col-md-2 control-label\">客户端系统类型</label>\n                                <div class=\"col-md-6\">\n                                    <input type=\"text\" name=\"device\" placeholder=\"设备类型( 品牌 + 型号)\" class=\"form-control \"\n                                           value=\"Apple iPhone 7\">\n                                </div>\n                                <div class=\"col-md-3\">\n                                    <span class=\"help-inline\"> device </span>\n                                </div>\n                            </div><!-- end item -->\n\n                            <!-- start item -->\n                            <div class=\"form-group\">\n                                <label class=\"col-md-2 control-label\">客户端系统版本号</label>\n                                <div class=\"col-md-6\">\n                                    <input type=\"text\" name=\"device-os-version\" placeholder=\"操作系统版本号\" class=\"form-control \"\n                                           value=\"9.3.2\">\n                                </div>\n                                <div class=\"col-md-3\">\n                                    <span class=\"help-inline\"> device-os-version </span>\n                                </div>\n                            </div><!-- end item -->\n\n                            <!-- start item -->\n                            <div class=\"form-group\">\n                                <label class=\"col-md-2 control-label\">客户端版本号</label>\n                                <div class=\"col-md-6\">\n                                    <input type=\"text\" name=\"app-version\" placeholder=\"客户端版本号\" class=\"form-control\"\n                                           value=\"1.0.0\">\n                                </div>\n                                <div class=\"col-md-3\">\n                                    <span class=\"help-inline\"> app-version </span>\n                                </div>\n                            </div><!-- end item -->\n\n                            <!-- start item -->\n                            <div class=\"form-group\">\n                                <label class=\"col-md-2 control-label\">时间戳</label>\n                                <div class=\"col-md-6\">\n                                    <input type=\"text\" name=\"timestamp\" id=\"timestamp\" placeholder=\"时间戳\" class=\"form-control\">\n                                </div>\n                                <div class=\"col-md-3\">\n                                    <span class=\"help-inline\"> timestamp </span>\n                                </div>\n                            </div><!-- end item -->\n                            <!-- start item -->\n                            <div class=\"form-group\">\n                                <label class=\"col-md-2 control-label\">签名</label>\n                                <div class=\"col-md-6\">\n                                    <input type=\"text\" name=\"signature\" id=\"signatureInp\" placeholder=\"签名\" class=\"form-control\">\n                                </div>\n                                <div class=\"col-md-3\">\n                                    <span class=\"help-inline\"> signature </span>\n                                </div>\n                            </div><!-- end item -->\n\n                            \n\n                            <!-- start item -->\n                            <div class=\"form-group\">\n                                <label class=\"col-md-2 control-label\">签名密钥(secret)</label>\n                                <div class=\"col-md-6\">\n                                    <span class=\"help-inline\"> <?= $param['secret'] ?> </span>\n                                </div>\n                            </div><!-- end item -->\n                        </div>\n                    </form>\n                </div>\n            </div><!-- header end -->\n\n            <!-- Params start -->\n            <div class=\"row\">\n                <div class=\"col-md-12\">\n                    <h4 class=\"block\">Params</h4>\n                    <hr>\n                    <div id=\"params\">\n\n                    </div>\n                </div>\n            </div><!-- Params end -->\n\n            <!-- response start-->\n            <div class=\"row\">\n                <div class=\"col-md-12\">\n                    <h4 class=\"block\">返回结果</h4>\n                    <hr>\n                    <form class=\"form-horizontal\">\n                        <div class=\"form-body\">\n                            <!-- start item -->\n                            <div class=\"form-group\">\n                                <label class=\"col-md-2 control-label\">签名字符串</label>\n                                <div class=\"col-md-6\">\n                                    <pre id=\"signatureStr\"></pre>\n                                </div>\n                            </div><!-- end item -->\n                            <!-- start item -->\n                            <div class=\"form-group\">\n                                <label class=\"col-md-2 control-label\">返回结果</label>\n                                <div class=\"col-md-6\">\n                                    <pre id=\"apiResponse\"></pre>\n                                </div>\n                            </div><!-- end item -->\n                        </div>\n                    </form>\n\n                </div>\n            </div><!-- response end -->\n\n        </div>\n    </div> <!-- Main Portlet Start -->\n</div>\n<!-- END PAGE CONTENT INNER -->\n</div>\n\n@stop\n"
  },
  {
    "path": "resources/views/simulator/params.blade.php",
    "content": "<form id=\"requestMethodForm\" class=\"form-horizontal\">\n    <div class=\"form-body\">\n        <!-- start item -->\n        <div class=\"form-group\">\n            <label class=\"col-md-2 control-label\">请求类型</label>\n            <div class=\"col-md-6\">\n                <?= form_radios('requestMethod' , $allowRequestMethod , $method ) ?>\n            </div>\n        </div><!-- end item -->\n    </div>\n</form>\n<form id=\"paramsForm\" class=\"form-horizontal\">\n    <div class=\"form-body\">\n\n    <?php foreach( $defaultParams as $name => $item ) :?>\n    <!-- start item -->\n        <div class=\"form-group\">\n            <label class=\"col-md-2 control-label\"><?= $name ?></label>\n            <div class=\"col-md-6\">\n                <?php if ( isset( $item[2] ) && is_array( $item[2] ) ) : ?>\n                <select name=\"<?= $name ?>\" class=\"form-control\">\n                    <?php foreach( $item[2] as $key => $val) :?>\n                    <option value=\"<?= $key ?>\"><?= $key ?> - ( <?= $val ?> )</option>\n                    <?php endforeach;?>\n                </select>\n                <?php elseif ( isset( $item[2] ) && $item[2] == 'password' ) :?>\n                <input type=\"password\" name=\"<?= $name ?>\" placeholder=\"<?= $item[0] ?>\" class=\"form-control\"\n                       value=\"<?= $item[1] ?>\">\n                <?php elseif ( isset( $item[2] ) && $item[2] == 'file' ) : ?>\n                <input type=\"file\" name=\"<?= $name ?>\">\n                <?php elseif ( isset( $item[2] ) && $item[2] == 'array' ) : ?>\n                <div class=\"row\">\n                    <div class=\"for_copy\">\n                        <?php foreach($item[1] as $key => $row ) :?>\n                        <div class=\"col-sm-3\">\n                            <input type=\"text\" name=\"<?= $name?>[0][<?= $key ?>]\" placeholder='<?= $key . \"($row)\" ?>'\n                                   class=\"form-control input-xs\">\n                        </div>\n                        <?php endforeach ; ?>\n                    </div>\n                    <div class=\"col-sm-3\">\n                        <button class=\"btn default addMoreBtn\" id=\"\"><i class=\"fa fa-plus\"></i></button>\n                    </div>\n                </div>\n                <?php else :?>\n                <input type=\"text\" name=\"<?= $name ?>\" placeholder=\"<?= $item[0] ?>\" class=\"form-control\"\n                       value=\"<?= $item[1] ?>\">\n                <?php endif ; ?>\n            </div>\n            <div class=\"col-md-3\">\n                <span class=\"help-inline\"> <?= $item[0] ?> <?= !isset( $item[2] ) ? '(可选)' : '' ; ?></span>\n            </div>\n        </div><!-- end item -->\n        <?php endforeach; ?>\n        <div class=\"form-actions\" style=\"margin-bottom: 60px;\">\n            <hr>\n            <div class=\"row\">\n                <div class=\"col-md-offset-2 col-md-7\">\n                    <button class=\"btn red\" id=\"submitBtn\" type=\"button\"><i class=\"fa fa-send\"></i> 发送</button>\n                    <button class=\"btn default\" id=\"responseBtn\" type=\"button\"><i class=\"fa fa-code\"></i> 返回结果示例</button>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"form-actions\"\n             id=\"responseExample\"\n             data-json='<?= $defaultResponse ?>'\n             style=\"display: none;\">\n            <h4>返回结果示例</h4>\n            <hr>\n            <label class=\"col-md-2 control-label\">&nbsp;</label>\n            <div class=\"col-md-6\">\n                <pre></pre>\n            </div>\n        </div><!-- end item -->\n\n    </div>\n</form>"
  },
  {
    "path": "resources/views/sysapilog/index.blade.php",
    "content": "@extend('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n{!! csrf_field() !!}\n<div class=\"page-content\">\n\t<!-- BEGIN PAGE BAR -->\n\t<div class=\"page-bar\">\n\t\t<ul class=\"page-breadcrumb\">\n\t\t\t<li> <a href=\"<?= $param['uri']['module'] ?>\">首页</a> <i class=\"fa fa-circle\"></i> </li>\n\t\t\t<li> <span><?= $param['pageTitle'] ?></span> </li>\n\t\t</ul>\n\t</div>\n\t<!-- END PAGE BAR -->\n\n\t<div class=\"row\" style=\"margin-top: 16px\">\n\t\t<!-- Main Portlet Start -->\n\t\t<div class=\"portlet light bordered\" id=\"tablePortlet\">\n\t\t\t<div class=\"portlet-title\">\n\t\t\t\t<div class=\"caption\">\n\t\t\t\t\t<i class=\"icon-settings\"></i>\n\t\t\t\t\t<span class=\"caption-subject uppercase\"><?= $param['pageTitle'] ?></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t<a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n\t\t\t\t\t  <i class=\"fa fa-plus\"></i> 新增\n\t\t\t\t\t</a>\n\t\t\t\t\t<a href=\"javascript:;\" class=\"btn btn-circle red\" id=\"destroySelectBtn\">\n\t\t\t\t\t\t<i class=\"fa fa-trash\"></i> 删除\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"portlet-body\">\n\t\t\t\t<!-- Start Search Form -->\n\t\t\t\t<form class=\"form-inline\" id=\"searchForm\">\n\t\t\t\t\t<!-- 查询关键字 start -->\n\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t<label>关键字: </label>\n\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" name=\"keyword\" placeholder=\"查询关键字\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<!-- 查询关键字 end -->\n\t\t\t\t\t<!-- 查询状态 start -->\n\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t<label>状态: </label>\n\t\t\t\t\t\t<select class=\"form-control\" name=\"status\">\n\t\t\t\t\t\t\t<option selected=\"\" value=\"\">不限</option>\n\t\t\t\t\t\t\t<?= form_options($param['status']) ?>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<!-- 查询状态 end -->\n\t\t\t\t\t<button type=\"submit\" class=\"btn default\" id=\"searchBtn\"><i class=\"fa fa-search\"></i> 查询</button>\n\t\t\t\t</form> <!-- End Search Form -->\n\n        <div class=\"table-scrollable\">\n  <table id=\"dataGrid\" class=\"table table-hover\">\n    <tr>\n      <th width=\"40\" data-field=\"id\" ></th>\n<th width=\"80\" data-field=\"device\" ></th>\n<th width=\"80\" data-field=\"device_os_version\" ></th>\n<th width=\"80\" data-field=\"app_version\" ></th>\n<th width=\"80\" data-field=\"api_version\" ></th>\n<th width=\"80\" data-field=\"uri\" ></th>\n<th width=\"80\" data-field=\"ip\" ></th>\n<th width=\"180\" data-field=\"created_at\" data-formatter=\"formatDatetime\"></th>\n\n      <th width=\"60\" data-formatter=\"optEdit\"></th>\n      <th width=\"60\" data-formatter=\"optDelete\"></th>\n      <th>&nbsp;</th>\n    </tr>\n  </table>\n</div>\n        \n\n\t\t\t</div>\n\t\t</div> <!-- Main Portlet Start -->\n\n\t\t<!-- BEGIN ADD EDIT PORTLET -->\n<div class=\"portlet box green-meadow\" id=\"addEditPortlet\" style=\"display: none;\">\n  <div class=\"portlet-title\">\n    <div class=\"caption caption-md\">\n      <i class=\"icon-settings\"></i>\n      <span class=\"caption-subject uppercase\"></span>\n    </div>\n  </div>\n  <div class=\"portlet-body\">\n    <!-- start add edit form  -->\n    <div class=\"row\">\n      <div class=\"col-md-12\">\n        <!-- start form -->\n        <form id=\"addEditForm\" class=\"form-horizontal\">\n          <div class=\"form-body\">\n            <!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\"></label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"device\" placeholder=\"\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的\" >\n\t</div>\n</div><!-- end item -->\n<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\"></label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"device_os_version\" placeholder=\"\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的\" >\n\t</div>\n</div><!-- end item -->\n<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\"></label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"app_version\" placeholder=\"\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的\" >\n\t</div>\n</div><!-- end item -->\n<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\"></label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"api_version\" placeholder=\"\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的\" >\n\t</div>\n</div><!-- end item -->\n<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\"></label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"uri\" placeholder=\"\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的\" >\n\t</div>\n</div><!-- end item -->\n<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\"></label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"ip\" placeholder=\"\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的\" >\n\t</div>\n</div><!-- end item -->\n\n          </div>\n          <div class=\"form-actions\" style=\"margin-bottom: 60px;\">\n            <hr>\n            <div class=\"row\">\n              <div class=\"col-md-offset-3 col-md-7\">\n                <button class=\"btn default btn-lg\" id=\"closePortletBtn\" type=\"button\" ><i class=\"fa fa-arrow-left\"></i> 返回</button>\n                <button class=\"btn red btn-lg\" id=\"submitFormBtn\" type=\"button\"><i class=\"fa fa-check\"></i> 提交</button>\n              </div>\n            </div>\n          </div>\n        </form><!-- END ADD EDIT FORM -->\n      </div>\n    </div>\n\t</div><!-- END ADD EDIT PORTLET BODY -->\n</div><!-- END ADD EDIT PORTLET  -->\n\n\t</div>\n</div>\n\n\n<!-- END CONTENT BODY -->\n@stop"
  },
  {
    "path": "resources/views/sysappversion/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n    <!-- BEGIN PAGE BAR -->\n    <div class=\"page-bar\">\n        <ul class=\"page-breadcrumb\">\n            <li><a href=\"<?= $param['uri']['module'] ?>\">首页</a> <i class=\"fa fa-circle\"></i></li>\n            <li><span><?= $param['pageTitle'] ?></span></li>\n        </ul>\n    </div>\n    <!-- END PAGE BAR -->\n\n    <div class=\"row\" style=\"margin-top: 16px\">\n        <!-- Main Portlet Start -->\n        <div class=\"portlet light bordered\" id=\"tablePortlet\">\n            <div class=\"portlet-title\">\n                <div class=\"caption\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-subject uppercase\"><?= $param['pageTitle'] ?></span>\n                </div>\n                <div class=\"actions\">\n                    <a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n                        <i class=\"fa fa-plus\"></i> 新增\n                    </a>\n                    <a href=\"javascript:;\" class=\"btn btn-circle red\" id=\"destroySelectBtn\">\n                        <i class=\"fa fa-trash\"></i> 删除\n                    </a>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <!-- Start Search Form -->\n                <form class=\"form-inline\" id=\"searchForm\">\n                    <!-- 查询关键字 start -->\n                    <div class=\"form-group\">\n                        <label>关键字: </label>\n                        <input type=\"text\" class=\"form-control\" name=\"keyword\" placeholder=\"查询关键字\">\n                    </div>\n                    <!-- 查询关键字 end -->\n                    <!-- 查询状态 start -->\n                    <div class=\"form-group\">\n                        <label>状态: </label>\n                        <select class=\"form-control\" name=\"status\">\n                            <option selected=\"\" value=\"\">不限</option>\n                            <?= form_options($param['status']) ?>\n                        </select>\n                    </div>\n                    <!-- 查询状态 end -->\n                    <button type=\"submit\" class=\"btn default\" id=\"searchBtn\"><i class=\"fa fa-search\"></i> 查询</button>\n                </form> <!-- End Search Form -->\n\n                <div class=\"table-scrollable\">\n                    <table id=\"dataGrid\" class=\"table table-hover\">\n                        <tr>\n                            <th width=\"40\" data-field=\"id\">ID</th>\n                            <th width=\"60\" data-field=\"device\" data-formatter=\"formatDevice\">设备</th>\n                            <th width=\"80\" data-field=\"version\" data-sort=\"true\">版本</th>\n                            <th width=\"180\" data-field=\"uri\" data-formatter=\"formatUri\">下载地址</th>\n                            <th width=\"290\" data-field=\"description\">更新描述</th>\n                            <th width=\"60\" data-field=\"is_force\" data-formatter=\"formatYes\">强制更新</th>\n                            <th width=\"60\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n                            <th width=\"160\" data-field=\"created_at\" data-formatter=\"formatDatetime\">创建时间</th>\n                            <th width=\"60\" data-formatter=\"optEdit\"></th>\n                            <th width=\"60\" data-formatter=\"optDelete\"></th>\n                            <th>&nbsp;</th>\n                        </tr>\n                    </table>\n                </div>\n\n\n            </div>\n        </div> <!-- Main Portlet Start -->\n\n        <!-- BEGIN ADD EDIT PORTLET -->\n        <div class=\"portlet box green-meadow\" id=\"addEditPortlet\" style=\"display: none;\">\n            <div class=\"portlet-title\">\n                <div class=\"caption caption-md\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-subject uppercase\"></span>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <!-- start add edit form  -->\n                <div class=\"row\">\n                    <div class=\"col-md-12\">\n                        <!-- start form -->\n                        <form id=\"addEditForm\" class=\"form-horizontal\">\n                            {!! csrf_field() !!}\n                            <div class=\"form-body\">\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">设备类型</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('device' , $param['device'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">软件版本</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"version\" placeholder=\"软件版本\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的软件版本\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">下载地址</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"uri\" placeholder=\"下载地址\" class=\"form-control\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">更新描述</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"description\" placeholder=\"更新描述\" class=\"form-control\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">强制更新</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('is_force' , ['否', '是'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">状态</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('status' , $param['status'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                            </div>\n                            <div class=\"form-actions\" style=\"margin-bottom: 60px;\">\n                                <hr>\n                                <div class=\"row\">\n                                    <div class=\"col-md-offset-3 col-md-7\">\n                                        <button class=\"btn default btn-lg\" id=\"closePortletBtn\" type=\"button\"><i\n                                                    class=\"fa fa-arrow-left\"></i> 返回\n                                        </button>\n                                        <button class=\"btn red btn-lg\" id=\"submitFormBtn\" type=\"button\"><i class=\"fa fa-check\"></i> 提交\n                                        </button>\n                                    </div>\n                                </div>\n                            </div>\n                        </form><!-- END ADD EDIT FORM -->\n                    </div>\n                </div>\n            </div><!-- END ADD EDIT PORTLET BODY -->\n        </div><!-- END ADD EDIT PORTLET  -->\n\n    </div>\n</div>\n\n\n<!-- END CONTENT BODY -->\n@stop"
  },
  {
    "path": "resources/views/sysarea/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n    <!-- BEGIN PAGE BAR -->\n    <div class=\"page-bar\">\n        <ul class=\"page-breadcrumb\">\n            <li><a href=\"<?= $param['uri']['module'] ?>\">首页</a> <i class=\"fa fa-circle\"></i></li>\n            <li><span><?= $param['pageTitle'] ?></span></li>\n        </ul>\n    </div>\n    <!-- END PAGE BAR -->\n\n    <div class=\"row\" style=\"margin-top: 16px\">\n        <!-- Main Portlet Start -->\n        <div class=\"portlet light bordered\" id=\"tablePortlet\">\n            <div class=\"portlet-title\">\n                <div class=\"caption\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-subject uppercase\"><?= $param['pageTitle'] ?></span>\n                </div>\n                <div class=\"actions\">\n                    <a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n                        <i class=\"fa fa-plus\"></i> 新增\n                    </a>\n                    <a href=\"javascript:;\" class=\"btn btn-circle red\" id=\"destroySelectBtn\">\n                        <i class=\"fa fa-trash\"></i> 删除\n                    </a>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <!-- Start Search Form -->\n                <form class=\"form-inline\" id=\"searchForm\">\n                    <!-- 查询关键字 start -->\n                    <div class=\"form-group\">\n                        <label>关键字: </label>\n                        <input type=\"text\" class=\"form-control\" name=\"keyword\" placeholder=\"查询关键字\">\n                    </div>\n                    <!-- 查询关键字 end -->\n                    <!-- 查询状态 start -->\n                    <div class=\"form-group\">\n                        <label>状态: </label>\n                        <select class=\"form-control\" name=\"status\">\n                            <option selected=\"\" value=\"\">不限</option>\n                            <?= form_options($param['status']) ?>\n                        </select>\n                    </div>\n                    <!-- 查询状态 end -->\n                    <button type=\"submit\" class=\"btn default\" id=\"searchBtn\"><i class=\"fa fa-search\"></i> 查询</button>\n                </form> <!-- End Search Form -->\n\n                <div class=\"table-scrollable\">\n                    <table id=\"dataGrid\" class=\"table table-hover\">\n                        <tr>\n                            <th width=\"40\" data-field=\"id\">ID</th>\n                            <th width=\"200\" data-field=\"text\">名称</th>\n                            <th width=\"80\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n                            <th width=\"60\" data-formatter=\"optChildren\"></th>\n                            <th width=\"60\" data-formatter=\"optEdit\"></th>\n                            <th width=\"60\" data-formatter=\"optDelete\"></th>\n                            <th>&nbsp;</th>\n                        </tr>\n                    </table>\n                </div>\n\n                <div class=\"back-btn-row\">\n                    <hr>\n                    <a href=\"javascript:history.go(-1);\" class=\"btn btn-lg default \"><i class=\"icon-arrow-left\"></i> 返回</a>\n                </div>\n            </div>\n        </div> <!-- Main Portlet Start -->\n\n\n    </div>\n</div>\n\n<!-- START ADD EDIT MODAL -->\n<div class=\"modal fade\" id=\"addEditModal\">\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n                    <span aria-hidden=\"true\">&times;</span>\n                </button>\n                <h4 class=\"modal-title caption-subject\"></h4>\n            </div>\n            <div class=\"modal-body\">\n                <!-- start add edit form  -->\n                <div class=\"row\">\n                    <div class=\"col-md-12\">\n                        <!-- start form -->\n                        <form id=\"addEditForm\" class=\"form-horizontal\">\n                            {!! csrf_field() !!}\n                            <div class=\"form-body\">\n\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">名称</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"text\" placeholder=\"名称\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的名称\">\n                                    </div>\n                                </div><!-- end item -->\n\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">状态</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('status' , $param['status'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                            </div>\n                        </form><!-- end form -->\n                    </div>\n                </div>\n                <!-- end add edit form-->\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n                <button type=\"button\" class=\"btn red\" id=\"submitFormBtn\"><i class=\"fa fa-save\"></i> 保存</button>\n            </div>\n        </div><!-- /.modal-content -->\n    </div><!-- /.modal-dialog -->\n</div><!-- /.END ADD EDIT MODAL -->\n<!-- END CONTENT BODY -->\n    @stop"
  },
  {
    "path": "resources/views/sysfunc/index.blade.php",
    "content": "@extends('backend::public.layout')\n\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n    <!-- BEGIN PAGE BAR -->\n    <div class=\"page-bar\">\n        <ul class=\"page-breadcrumb\">\n            <li><a href=\"<?= $param['uri']['module'] ?>\">首页</a> <i class=\"fa fa-circle\"></i></li>\n            <li><span><?= $param['pageTitle'] ?></span></li>\n        </ul>\n    </div>\n    <!-- END PAGE BAR -->\n\n    <div class=\"row\" style=\"margin-top: 16px\">\n        <!-- Main Portlet Start -->\n        <div class=\"portlet light bordered\" id=\"tablePortlet\">\n            <div class=\"portlet-title\">\n                <div class=\"caption\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-subject uppercase\"><?= $param['pageTitle'] ?></span>\n                </div>\n                <div class=\"actions\">\n                    <a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n                        <i class=\"fa fa-plus\"></i> 新增\n                    </a>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n\n                <div class=\"table-scrollable\">\n                    <table id=\"treeGrid\" class=\"table table-hover\">\n                        <tr>\n                            <th width=\"40\" data-field=\"id\">ID</th>\n                            <th width=\"280\" data-field=\"name\" data-formatter=\"formatName\">名称</th>\n                            <th width=\"40\" data-field=\"sort\">排序</th>\n                            <th width=\"80\" data-field=\"is_menu\" data-formatter=\"formatIsFunc\">是否菜单</th>\n                            <th width=\"80\" data-field=\"is_func\" data-formatter=\"formatIsMenu\">是否功能</th>\n                            <th width=\"80\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n                            <th width=\"60\" data-formatter=\"optPrivilege\"></th>\n                            <th width=\"60\" data-formatter=\"optEdit\"></th>\n                            <th width=\"60\" data-formatter=\"optDelete\"></th>\n                            <th>&nbsp;</th>\n                        </tr>\n                    </table>\n                </div>\n\n            </div>\n        </div> <!-- Main Portlet Start -->\n    </div>\n</div>\n<!-- END CONTENT BODY -->\n\n<!-- START ADD EDIT MODAL -->\n<div class=\"modal fade\" id=\"addEditModal\">\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n                    <span aria-hidden=\"true\">&times;</span>\n                </button>\n                <h4 class=\"modal-title caption-subject\"></h4>\n            </div>\n            <div class=\"modal-body\">\n                <!-- start add edit form  -->\n                <div class=\"row\">\n                    <div class=\"col-md-12\">\n                        <!-- start form -->\n                        <form id=\"addEditForm\" class=\"form-horizontal\">\n                            {!! csrf_field() !!}\n                            <div class=\"form-body\">\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">名称</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"name\" placeholder=\"名称\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的名称\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">URI</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"uri\" placeholder=\"URI\" class=\"form-control\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">上级</label>\n                                    <div class=\"col-md-7\">\n                                        <select name=\"pid\" class=\"form-control\">\n                                        </select>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">排序</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"sort\" placeholder=\"排序\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的排序\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">状态</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('status' , $param['status'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">是否菜单</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('is_menu' , $param['isMenu'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <!--<div class=\"form-group\">-->\n                                <!--<label class=\"col-md-3 control-label\">是否功能</label>-->\n                                <!--<div class=\"col-md-7\">-->\n                            <!--<?= form_radios('is_func' , $param['isFunc'] ) ?>-->\n                                <!--</div>-->\n                                <!--</div>-->\n                                <!-- end item -->\n\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">图标</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"icon\" placeholder=\"图标\" class=\"form-control\">\n                                    </div>\n                                </div><!-- end item -->\n                            </div>\n                        </form><!-- end form -->\n                    </div>\n                </div>\n                <!-- end add edit form-->\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n                <button type=\"button\" class=\"btn red\" id=\"submitFormBtn\"><i class=\"fa fa-save\"></i> 保存</button>\n            </div>\n        </div><!-- /.modal-content -->\n    </div><!-- /.modal-dialog -->\n</div><!-- /.END ADD EDIT MODAL -->\n\n\n<!-- START PRIVILEGE MODAL -->\n<div class=\"modal fade\" id=\"privilegeModal\">\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span\n                            aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title caption-subject\">权限</h4>\n            </div>\n            <div class=\"modal-body\">\n                <!-- start add edit form  -->\n                <div class=\"row\">\n                    <div class=\"col-md-12\">\n                        <!-- start form -->\n                        <form id=\"privilegeForm\" class=\"form-horizontal\">\n                            {!! csrf_field() !!}\n                            <div class=\"form-body\">\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <div class=\"col-md-10 col-md-offset-2\">\n\n                                        <?php foreach( $param['privilege'] as $key => $val ) :?>\n                                        <div class=\"checkbox\">\n                                            <label>\n                                                <input type=\"checkbox\" name=\"name[]\" value=\"<?= $key ?>\">\n                                                <?= $val ?> ( <?= implode( '&nbsp;&nbsp;,&nbsp;&nbsp;' , $param['alias'][$key]) ?> )\n                                            </label>\n                                        </div>\n                                        <?php endforeach; ?>\n                                    </div>\n                                </div><!-- end item -->\n                            </div>\n                        </form><!-- end form -->\n                    </div>\n                </div>\n                <!-- end add edit form-->\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n                <button type=\"button\" class=\"btn red\" id=\"submitPrivilegeFormBtn\"><i class=\"fa fa-save\"></i> 保存</button>\n            </div>\n        </div><!-- /.modal-content -->\n    </div><!-- /.modal-dialog -->\n</div><!-- /.END PRIVILEGE MODAL -->\n@stop"
  },
  {
    "path": "resources/views/sysmail/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n    <!-- BEGIN PAGE BAR -->\n    <div class=\"page-bar\">\n        <ul class=\"page-breadcrumb\">\n            <li><a href=\"<?= $param['uri']['module'] ?>\">首页</a> <i class=\"fa fa-circle\"></i></li>\n            <li><span><?= $param['pageTitle'] ?></span></li>\n        </ul>\n    </div>\n    <!-- END PAGE BAR -->\n\n    <div class=\"row\" style=\"margin-top: 16px\">\n        <!-- Main Portlet Start -->\n        <div class=\"portlet light bordered\" id=\"tablePortlet\">\n            <div class=\"portlet-title\">\n                <div class=\"caption\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-subject uppercase\"><?= $param['pageTitle'] ?></span>\n                </div>\n                <div class=\"actions\">\n                    <a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n                        <i class=\"fa fa-plus\"></i> 新增\n                    </a>\n                    <a href=\"javascript:;\" class=\"btn btn-circle red\" id=\"destroySelectBtn\">\n                        <i class=\"fa fa-trash\"></i> 删除\n                    </a>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <!-- Start Search Form -->\n                <form class=\"form-inline\" id=\"searchForm\">\n                    <!-- 查询关键字 start -->\n                    <div class=\"form-group\">\n                        <label>关键字: </label>\n                        <input type=\"text\" class=\"form-control\" name=\"keyword\" placeholder=\"查询关键字\">\n                    </div>\n                    <!-- 查询关键字 end -->\n                    <!-- 查询状态 start -->\n                    <div class=\"form-group\">\n                        <label>状态: </label>\n                        <select class=\"form-control\" name=\"status\">\n                            <option selected=\"\" value=\"\">不限</option>\n                            <?= form_options($param['status']) ?>\n                        </select>\n                    </div>\n                    <!-- 查询状态 end -->\n                    <button type=\"submit\" class=\"btn default\" id=\"searchBtn\"><i class=\"fa fa-search\"></i> 查询</button>\n                </form> <!-- End Search Form -->\n\n                <div class=\"table-scrollable\">\n                    <table id=\"dataGrid\" class=\"table table-hover\">\n                        <tr>\n                            <th width=\"40\" data-field=\"id\">ID</th>\n                            <th width=\"80\" data-field=\"type\" data-formatter=\"formatType\">类型</th>\n                            <th width=\"100\" data-field=\"name\">收信人</th>\n                            <th width=\"100\" data-field=\"address\">收信地址</th>\n                            <th width=\"280\" data-field=\"subject\">主题</th>\n                            <th width=\"180\" data-field=\"captcha\">验证码</th>\n                            <th width=\"80\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n                            <th width=\"180\" data-field=\"created_at\" data-formatter=\"formatDatetime\">创建时间</th>\n                            <th width=\"80\" data-field=\"sent_at\">发送时间</th>\n                            <th width=\"60\" data-formatter=\"optSend\"></th>\n                            <th width=\"60\" data-formatter=\"optEdit\"></th>\n                            <th width=\"60\" data-formatter=\"optDelete\"></th>\n                            <th>&nbsp;</th>\n                        </tr>\n                    </table>\n                </div>\n\n\n            </div>\n        </div> <!-- Main Portlet Start -->\n\n        <!-- BEGIN ADD EDIT PORTLET -->\n        <div class=\"portlet box green-meadow\" id=\"addEditPortlet\" style=\"display: none;\">\n            <div class=\"portlet-title\">\n                <div class=\"caption caption-md\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-subject uppercase\"></span>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <!-- start add edit form  -->\n                <div class=\"row\">\n                    <div class=\"col-md-12\">\n                        <!-- start form -->\n                        <form id=\"addEditForm\" class=\"form-horizontal\">\n                            <div class=\"form-body\">\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">类型</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('type' , $param['type'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">收信人</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"name\" placeholder=\"收信人\" class=\"form-control\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">收信地址</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"address\" placeholder=\"收信地址\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的收信地址\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">主题</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"subject\" placeholder=\"主题\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的主题\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">内容</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"content\" placeholder=\"内容\" class=\"form-control\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">验证码</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"captcha\" placeholder=\"验证码\" class=\"form-control\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">状态</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('status' , $param['status'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                            </div>\n                            <div class=\"form-actions\" style=\"margin-bottom: 60px;\">\n                                <hr>\n                                <div class=\"row\">\n                                    <div class=\"col-md-offset-3 col-md-7\">\n                                        <button class=\"btn default btn-lg\" id=\"closePortletBtn\" type=\"button\"><i\n                                                    class=\"fa fa-arrow-left\"></i> 返回\n                                        </button>\n                                        <button class=\"btn red btn-lg\" id=\"submitFormBtn\" type=\"button\"><i class=\"fa fa-check\"></i> 提交\n                                        </button>\n                                    </div>\n                                </div>\n                            </div>\n                        </form><!-- END ADD EDIT FORM -->\n                    </div>\n                </div>\n            </div><!-- END ADD EDIT PORTLET BODY -->\n        </div><!-- END ADD EDIT PORTLET  -->\n\n    </div>\n</div>\n\n\n<!-- END CONTENT BODY -->\n    @stop"
  },
  {
    "path": "resources/views/sysmerchant/detail.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<div class=\"page-content\">\n    <!-- BEGIN PAGE BAR -->\n    <div class=\"page-bar\">\n        <ul class=\"page-breadcrumb\">\n            <li><a href=\"<?= $param['uri']['module'] ?>\">首页</a> <i class=\"fa fa-circle\"></i></li>\n            <li><span><?= $param['pageTitle'] ?></span></li>\n        </ul>\n    </div>\n    <!-- END PAGE BAR -->\n\n    <div class=\"row\" style=\"margin-top: 16px\">\n        <!-- Main Portlet Start -->\n        <div class=\"portlet light bordered\" id=\"tablePortlet\">\n            <div class=\"portlet-title\">\n                <div class=\"caption\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-subject uppercase\"><?= $param['pageTitle'] ?></span>\n                </div>\n                <div class=\"actions\">\n\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <div class=\"tiles\">\n                    <a href=\"<?= full_uri('backend/Mersysuser/index' , ['merId' => $merId ]) ?>\">\n                        <div class=\"tile bg-blue-hoki\">\n                            <div class=\"tile-body\">\n                                <i class=\"fa fa-users\"></i>\n                            </div>\n                            <div class=\"tile-object\">\n                                <div class=\"name\">\n                                    系统用户\n                                </div>\n                            </div>\n                        </div>\n                    </a>\n                    <!--\n                    <div class=\"tile bg-red-sunglo\">\n                        <div class=\"tile-body\">\n                            <i class=\"fa fa-shopping-bag\"></i>\n                        </div>\n                        <div class=\"tile-object\">\n                            <div class=\"name\">\n                                订单\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"tile bg-green-turquoise\">\n                        <div class=\"tile-body\">\n                            <i class=\"fa fa-wechat\"></i>\n                        </div>\n                        <div class=\"tile-object\">\n                            <div class=\"name\">\n                                微信设置\n                            </div>\n                        </div>\n                    </div>\n                    -->\n                </div>\n\n                <div class=\"back-btn-row\">\n                    <hr>\n                    <a href=\"javascript:history.go(-1);\" class=\"btn btn-lg default \"><i class=\"icon-arrow-left\"></i> 返回</a>\n                </div>\n            </div>\n        </div> <!-- Main Portlet Start -->\n    </div>\n\n</div><!-- END CONTENT -->\n\n@stop"
  },
  {
    "path": "resources/views/sysmerchant/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n    <!-- BEGIN PAGE BAR -->\n    <div class=\"page-bar\">\n        <ul class=\"page-breadcrumb\">\n            <li><a href=\"<?= $param['uri']['module'] ?>\">首页</a> <i class=\"fa fa-circle\"></i></li>\n            <li><span><?= $param['pageTitle'] ?></span></li>\n        </ul>\n    </div>\n    <!-- END PAGE BAR -->\n\n    <div class=\"row\" style=\"margin-top: 16px\">\n        <!-- Main Portlet Start -->\n        <div class=\"portlet light bordered\" id=\"tablePortlet\">\n            <div class=\"portlet-title\">\n                <div class=\"caption\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-subject uppercase\"><?= $param['pageTitle'] ?></span>\n                </div>\n                <div class=\"actions\">\n                    <a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n                        <i class=\"fa fa-plus\"></i> 新增\n                    </a>\n                    <a href=\"javascript:;\" class=\"btn btn-circle red\" id=\"destroySelectBtn\">\n                        <i class=\"fa fa-trash\"></i> 删除\n                    </a>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <!-- Start Search Form -->\n                <form class=\"form-inline\" id=\"searchForm\">\n                    {!! csrf_field() !!}\n                    <!-- 查询关键字 start -->\n                    <div class=\"form-group\">\n                        <label>关键字: </label>\n                        <input type=\"text\" class=\"form-control\" name=\"keyword\" placeholder=\"查询关键字\">\n                    </div>\n                    <!-- 查询关键字 end -->\n                    <!-- 查询状态 start -->\n                    <div class=\"form-group\">\n                        <label>状态: </label>\n                        <select class=\"form-control\" name=\"status\">\n                            <option selected=\"\" value=\"\">不限</option>\n                            <?= form_options($param['status']) ?>\n                        </select>\n                    </div>\n                    <!-- 查询状态 end -->\n                    <button type=\"submit\" class=\"btn default\" id=\"searchBtn\"><i class=\"fa fa-search\"></i> 查询</button>\n                </form> <!-- End Search Form -->\n\n                <div class=\"table-scrollable\">\n                    <table id=\"dataGrid\" class=\"table table-hover\">\n                        <tr>\n                            <th width=\"40\" data-field=\"id\" data-sorting=\"true\">ID</th>\n                            <th width=\"60\" data-field=\"sort\">排序</th>\n                            <th width=\"60\" data-field=\"icon\" data-formatter=\"formatIcon\">LOGO</th>\n                            <th width=\"200\" data-field=\"name\" data-sorting=\"true\">名称</th>\n                            <th width=\"100\" data-field=\"phone\">电话</th>\n                            <th width=\"100\" data-field=\"contact\">联系人</th>\n                            <th width=\"40\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n                            <th width=\"60\" data-formatter=\"optUserOrDetail\"></th>\n                            <th width=\"60\" data-formatter=\"optEdit\"></th>\n                            <th width=\"60\" data-formatter=\"optDelete\"></th>\n                            <th>&nbsp;</th>\n                        </tr>\n                    </table>\n                </div>\n\n\n            </div>\n        </div> <!-- Main Portlet Start -->\n\n        <!-- BEGIN ADD EDIT PORTLET -->\n\n        <div class=\"portlet box green-meadow\" id=\"addEditPortlet\" style=\"display: none;\">\n            <div class=\"portlet-title\">\n                <div class=\"caption caption-md\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-subject uppercase\"></span>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <!-- start add edit form  -->\n                <div class=\"row\">\n                    <div class=\"col-md-12\">\n                        <!-- start form -->\n                        <form id=\"addEditForm\" class=\"form-horizontal\">\n                            <div class=\"form-body\">\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">名称</label>\n                                    <div class=\"col-md-7\">\n                                        <div class=\"input-icon right\">\n                                            <input type=\"text\" name=\"name\" placeholder=\"请输入名称\" class=\"form-control\"\n                                                   data-valid=\"required\" data-tips=\"请输入正确的名称\">\n                                        </div>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">LOGO</label>\n                                    <div class=\"col-md-7\">\n                                        <div id=\"iconPreview\" class=\"fit-img-preview\"></div>\n                                        <button id=\"iconUploadBtn\"></button>\n                                        <input type=\"text\" name=\"icon\" class=\"hide\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">排序</label>\n                                    <div class=\"col-md-7\">\n                                        <div class=\"input-icon right\">\n                                            <input type=\"text\" name=\"sort\" placeholder=\"排序\" class=\"form-control input-inline input-medium\"\n                                                   data-valid=\"number\" data-tips=\"请输入正确的排序\">\n                                        </div>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">电话</label>\n                                    <div class=\"col-md-7\">\n                                        <div class=\"input-icon right\">\n                                            <input type=\"text\" name=\"phone\" placeholder=\"电话\" class=\"form-control\"\n                                                   data-valid=\"number\" data-tips=\"请输入正确的电话\">\n                                        </div>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">联系人</label>\n                                    <div class=\"col-md-7\">\n                                        <div class=\"input-icon right\">\n                                            <input type=\"text\" name=\"contact\" placeholder=\"联系人\" class=\"form-control\"\n                                                   data-valid=\"required\" data-tips=\"请输入正确的联系人\">\n                                        </div>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">区域</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"hidden\" name=\"area\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">详细地址</label>\n                                    <div class=\"col-md-7\">\n                                        <div class=\"input-icon right\">\n                                            <input type=\"text\" name=\"address\" placeholder=\"详细地址\" class=\"form-control\">\n                                        </div>\n                                    </div>\n                                </div><!-- end item -->\n\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">状态</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('status' , $param['status'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">是否测试</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('for_test' , $param['forTest'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n\n                            </div>\n                            <div class=\"form-actions\" style=\"margin-bottom: 60px;\">\n                                <hr>\n                                <div class=\"row\">\n                                    <div class=\"col-md-offset-3 col-md-7\">\n                                        <button class=\"btn default btn-lg\" id=\"closePortletBtn\" type=\"button\"><i\n                                                    class=\"fa fa-arrow-left\"></i> 返回\n                                        </button>\n                                        <button class=\"btn red btn-lg\" id=\"submitFormBtn\" type=\"button\"><i class=\"fa fa-check\"></i> 提交\n                                        </button>\n                                    </div>\n                                </div>\n                            </div>\n                        </form><!-- END ADD EDIT FORM -->\n                    </div>\n                </div>\n            </div><!-- END PORTLET BODY -->\n        </div><!-- END ADD EDIT PORTLET  -->\n    </div>\n</div>\n\n\n<!-- END CONTENT BODY -->\n    @stop"
  },
  {
    "path": "resources/views/sysmodules/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n{!! csrf_field() !!}\n<div class=\"page-content\">\n\t<!-- BEGIN PAGE BAR -->\n\t<div class=\"page-bar\">\n\t\t<ul class=\"page-breadcrumb\">\n\t\t\t<li> <a href=\"<?=$param['uri']['module']?>\">首页</a> <i class=\"fa fa-circle\"></i> </li>\n\t\t\t<li> <span><?=$param['pageTitle']?></span> </li>\n\t\t</ul>\n\t</div>\n\t<!-- END PAGE BAR -->\n\n\t<div class=\"row\" style=\"margin-top: 16px\">\n\t\t<!-- Main Portlet Start -->\n\t\t<div class=\"portlet light bordered\" id=\"tablePortlet\">\n\t\t\t<div class=\"portlet-title\">\n\t\t\t\t<div class=\"caption\">\n\t\t\t\t\t<i class=\"icon-settings\"></i>\n\t\t\t\t\t<span class=\"caption-subject uppercase\"><?=$param['pageTitle']?></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t<a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n\t\t\t\t\t  <i class=\"fa fa-plus\"></i> 新增\n\t\t\t\t\t</a>\n\t\t\t\t\t<a href=\"javascript:;\" class=\"btn btn-circle red\" id=\"destroySelectBtn\">\n\t\t\t\t\t\t<i class=\"fa fa-trash\"></i> 删除\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"portlet-body\">\n\t\t\t\t<!-- Start Search Form -->\n\t\t\t\t<form class=\"form-inline\" id=\"searchForm\">\n\t\t\t\t\t<!-- 查询关键字 start -->\n\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t<label>关键字: </label>\n\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" name=\"keyword\" placeholder=\"查询关键字\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<!-- 查询关键字 end -->\n\t\t\t\t\t<!-- 查询状态 start -->\n\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t<label>状态: </label>\n\t\t\t\t\t\t<select class=\"form-control\" name=\"status\">\n\t\t\t\t\t\t\t<option selected=\"\" value=\"\">不限</option>\n\t\t\t\t\t\t\t<?=form_options($param['status'])?>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<!-- 查询状态 end -->\n\t\t\t\t\t<button type=\"submit\" class=\"btn default\" id=\"searchBtn\"><i class=\"fa fa-search\"></i> 查询</button>\n\t\t\t\t</form> <!-- End Search Form -->\n\n        <div class=\"table-scrollable\">\n  <table id=\"dataGrid\" class=\"table table-hover\">\n    <tr>\n\n\n<th width=\"40\" data-field=\"id\" >ID</th>\n<th width=\"200\" data-field=\"name\" >模块名称</th>\n<th width=\"80\" data-field=\"symbol\" >标识</th>\n<th width=\"80\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n<th width=\"80\" data-field=\"thumb\" >缩略图</th>\n<th width=\"80\" data-field=\"updated_at\" ></th>\n<th width=\"80\" data-field=\"version\" >版本号</th>\n<th width=\"80\" data-field=\"author\" >作者</th>\n<th width=\"80\" data-field=\"displayorder\" >排序序号</th>\n<th width=\"180\" data-field=\"created_at\" data-formatter=\"formatDatetime\"></th>\n<th width=\"60\" data-formatter=\"formatIcon\"></th>\n \t<th width=\"60\" data-formatter=\"optIncome\"></th>\n      <th width=\"60\" data-formatter=\"optEdit\"></th>\n      <th width=\"60\" data-formatter=\"optDelete\"></th>\n      <th>&nbsp;</th>\n    </tr>\n  </table>\n</div>\n\n\n\t\t\t</div>\n\t\t</div> <!-- Main Portlet Start -->\n\n\t\t<!-- BEGIN ADD EDIT PORTLET -->\n<div class=\"portlet box green-meadow\" id=\"addEditPortlet\" style=\"display: none;\">\n  <div class=\"portlet-title\">\n    <div class=\"caption caption-md\">\n      <i class=\"icon-settings\"></i>\n      <span class=\"caption-subject uppercase\"></span>\n    </div>\n  </div>\n  <div class=\"portlet-body\">\n    <!-- start add edit form  -->\n    <div class=\"row\">\n      <div class=\"col-md-12\">\n        <!-- start form -->\n        <form id=\"addEditForm\" class=\"form-horizontal\">\n          <div class=\"form-body\">\n\n          \t<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">模块名称</label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"name\" placeholder=\"模块名称\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的模块名称\" >\n\t</div>\n</div><!-- end item -->\n<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">标识</label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"symbol\" placeholder=\"标识\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的标识\" >\n\t</div>\n</div><!-- end item -->\n            <!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">描述</label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"desc\" placeholder=\"描述\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的描述\" >\n\t</div>\n</div><!-- end item -->\n<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">排序序号</label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"displayorder\" placeholder=\"排序序号\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的排序序号\" >\n\t</div>\n</div><!-- end item -->\n\n<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">状态</label>\n\t<div class=\"col-md-7\">\n\t\t<?=form_radios('status', $param['status'])?>\n\t</div>\n</div><!-- end item -->\n\n<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">缩略图</label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"thumb\" placeholder=\"缩略图\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的缩略图\" >\n\t</div>\n</div><!-- end item -->\n<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">版本号</label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"version\" placeholder=\"版本号\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的版本号\" >\n\t</div>\n</div><!-- end item -->\n<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">作者</label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"author\" placeholder=\"作者\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的作者\" >\n\t</div>\n</div><!-- end item -->\n          </div>\n          <div class=\"form-actions\" style=\"margin-bottom: 60px;\">\n            <hr>\n            <div class=\"row\">\n              <div class=\"col-md-offset-3 col-md-7\">\n                <button class=\"btn default btn-lg\" id=\"closePortletBtn\" type=\"button\" ><i class=\"fa fa-arrow-left\"></i> 返回</button>\n                <button class=\"btn red btn-lg\" id=\"submitFormBtn\" type=\"button\"><i class=\"fa fa-check\"></i> 提交</button>\n              </div>\n            </div>\n          </div>\n        </form><!-- END ADD EDIT FORM -->\n      </div>\n    </div>\n\t</div><!-- END ADD EDIT PORTLET BODY -->\n</div><!-- END ADD EDIT PORTLET  -->\n\n\t</div>\n</div>\n\n\n<!-- END CONTENT BODY -->\n@stop"
  },
  {
    "path": "resources/views/sysmodules/role.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n\t<!-- BEGIN PAGE BAR -->\n\t<div class=\"page-bar\">\n\t\t<ul class=\"page-breadcrumb\">\n\t\t\t<li><a href=\"<?=$param['uri']['module']?>\">首页</a> <i class=\"fa fa-circle\"></i></li>\n\t\t\t<li><span><?=$param['pageTitle']?></span></li>\n\t\t</ul>\n\t</div>\n\t<!-- END PAGE BAR -->\n\n\t<div class=\"row\" style=\"margin-top: 16px\">\n\t\t<!-- Main Portlet Start -->\n\t\t<div class=\"portlet light bordered\" id=\"tablePortlet\">\n\t\t\t<div class=\"portlet-title\">\n\t\t\t\t<div class=\"caption\">\n\t\t\t\t\t<i class=\"icon-settings\"></i>\n\t\t\t\t\t<span class=\"caption-subject uppercase\"><?=$param['pageTitle']?></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t<a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n\t\t\t\t\t\t<i class=\"fa fa-plus\"></i> 新增\n\t\t\t\t\t</a>\n\t\t\t\t\t<a href=\"javascript:;\" class=\"btn btn-circle red\" id=\"destroySelectBtn\">\n\t\t\t\t\t\t<i class=\"fa fa-trash\"></i> 删除\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"portlet-body\">\n\n\t\t\t\t<div class=\"table-scrollable\">\n\t\t\t\t\t<table id=\"dataGrid\" class=\"table table-hover\">\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th width=\"40\" data-field=\"id\">ID</th>\n\t\t\t\t\t\t\t<th width=\"40\" data-field=\"sort\">排序</th>\n\t\t\t\t\t\t\t<th width=\"180\" data-field=\"name\">名称</th>\n\t\t\t\t\t\t\t<th width=\"80\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n\t\t\t\t\t\t\t<th width=\"80\" data-field=\"rank\">等级</th>\n\t\t\t\t\t\t\t<th width=\"60\" data-formatter=\"optPermission\"></th>\n\t\t\t\t\t\t\t<th width=\"60\" data-formatter=\"optEdit\"></th>\n\t\t\t\t\t\t\t<th width=\"60\" data-formatter=\"optDelete\"></th>\n\t\t\t\t\t\t\t<th>&nbsp;</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</table>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div> <!-- Main Portlet Start -->\n\t</div>\n</div>\n\n<!-- START ADD EDIT MODAL -->\n<div class=\"modal fade\" id=\"addEditModal\">\n\t<div class=\"modal-dialog\">\n\t\t<div class=\"modal-content\">\n\t\t\t<div class=\"modal-header\">\n\t\t\t\t<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n\t\t\t\t\t<span aria-hidden=\"true\">&times;</span>\n\t\t\t\t</button>\n\t\t\t\t<h4 class=\"modal-title caption-subject\"></h4>\n\t\t\t</div>\n\t\t\t<div class=\"modal-body\">\n\t\t\t\t<!-- start add edit form  -->\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-md-12\">\n\t\t\t\t\t\t<!-- start form -->\n\t\t\t\t\t\t<form id=\"addEditForm\" class=\"form-horizontal\">\n\t\t\t\t\t\t\t{!! csrf_field() !!}\n\t\t\t\t\t\t\t<div class=\"form-body\">\n\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">名称</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<input type=\"text\" name=\"name\" placeholder=\"名称\" class=\"form-control\"\n\t\t\t\t\t\t\t\t\t\t       data-valid=\"required\" data-tips=\"请输入正确的名称\">\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">排序</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<input type=\"text\" name=\"sort\" placeholder=\"排序\" class=\"form-control\"\n\t\t\t\t\t\t\t\t\t\t       data-valid=\"required\" data-tips=\"请输入正确的排序\">\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">状态</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<?=form_radios('status', $param['status'])?>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">描述</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<input type=\"text\" name=\"desc\" placeholder=\"描述\" class=\"form-control\">\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">等级</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<select class=\"form-control\" name=\"rank\">\n\t\t\t\t\t\t\t\t\t\t\t<?=form_options($param['rank'])?>\n\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</form><!-- end form -->\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- end add edit form-->\n\t\t\t</div>\n\t\t\t<div class=\"modal-footer\">\n\t\t\t\t<button type=\"button\" class=\"btn default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n\t\t\t\t<button type=\"button\" class=\"btn red\" id=\"submitFormBtn\"><i class=\"fa fa-save\"></i> 保存</button>\n\t\t\t</div>\n\t\t</div><!-- /.modal-content -->\n\t</div><!-- /.modal-dialog -->\n</div><!-- /.END ADD EDIT MODAL -->\n<!-- END CONTENT BODY -->\n\n<!-- START PERMISSION MODAL -->\n<div class=\"modal fade\" id=\"permissionModal\">\n\t<div class=\"modal-dialog\">\n\t\t<div class=\"modal-content\">\n\t\t\t<div class=\"modal-header\">\n\t\t\t\t<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n\t\t\t\t<h4 class=\"modal-title\" id=\"permissionLabel\"></h4>\n\t\t\t</div>\n\t\t\t<div class=\"modal-body\" id=\"permissionBody\">\n\t\t\t</div>\n\t\t\t<div class=\"modal-footer\">\n\t\t\t\t<button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n\t\t\t\t<button type=\"button\" class=\"btn btn-primary\" id=\"permissionSubmitBtn\"><i class=\"fa fa-check\"></i> 提交</button>\n\t\t\t</div>\n\t\t</div>\n\t\t<!-- /.modal-content -->\n\t</div>\n\t<!-- /.modal-dialog -->\n</div>\n<!-- /#END PERMISSION MODAL -->\n\t@stop"
  },
  {
    "path": "resources/views/syspush/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n    <!-- BEGIN PAGE BAR -->\n    <div class=\"page-bar\">\n        <ul class=\"page-breadcrumb\">\n            <li><a href=\"<?= $param['uri']['module'] ?>\">首页</a> <i class=\"fa fa-circle\"></i></li>\n            <li><span><?= $param['pageTitle'] ?></span></li>\n        </ul>\n    </div>\n    <!-- END PAGE BAR -->\n\n    <div class=\"row\" style=\"margin-top: 16px\">\n        <!-- Main Portlet Start -->\n        <div class=\"portlet light bordered\" id=\"tablePortlet\">\n            <div class=\"portlet-title\">\n                <div class=\"caption\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-subject uppercase\"><?= $param['pageTitle'] ?></span>\n                </div>\n                <div class=\"actions\">\n                    <a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n                        <i class=\"fa fa-plus\"></i> 新增\n                    </a>\n                    <a href=\"javascript:;\" class=\"btn btn-circle red\" id=\"destroySelectBtn\">\n                        <i class=\"fa fa-trash\"></i> 删除\n                    </a>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <!-- Start Search Form -->\n                <form class=\"form-inline\" id=\"searchForm\">\n                    <!-- 查询关键字 start -->\n                    <div class=\"form-group\">\n                        <label>关键字: </label>\n                        <input type=\"text\" class=\"form-control\" name=\"keyword\" placeholder=\"查询关键字\">\n                    </div>\n                    <!-- 查询关键字 end -->\n                    <!-- 查询状态 start -->\n                    <div class=\"form-group\">\n                        <label>状态: </label>\n                        <select class=\"form-control\" name=\"status\">\n                            <option selected=\"\" value=\"\">不限</option>\n                            <?= form_options($param['status']) ?>\n                        </select>\n                    </div>\n                    <!-- 查询状态 end -->\n                    <button type=\"submit\" class=\"btn default\" id=\"searchBtn\"><i class=\"fa fa-search\"></i> 查询</button>\n                </form> <!-- End Search Form -->\n\n                <div class=\"table-scrollable\">\n                    <table id=\"dataGrid\" class=\"table table-hover\">\n                        <tr>\n                            <th width=\"40\" data-field=\"id\">ID</th>\n                            <th width=\"80\" data-field=\"catalog\" data-formatter=\"formatCatalog\">分类</th>\n                            <th width=\"200\" data-field=\"title\" data-formatter=\"formatTitle\">标题</th>\n                            <th width=\"80\" data-field=\"platform\" data-formatter=\"formatPlatform\">设备类型</th>\n                            <th width=\"80\" data-field=\"alias\">别名</th>\n                            <th width=\"80\" data-field=\"tags\">标签</th>\n                            <th width=\"80\" data-field=\"registration_id\">激光ID</th>\n                            <th width=\"80\" data-field=\"extras\">附加参数</th>\n                            <th width=\"80\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n                            <th width=\"80\" data-field=\"sent_at\">发送时间</th>\n                            <th width=\"180\" data-field=\"created_at\" data-formatter=\"formatDatetime\">创建时间</th>\n                            <th width=\"60\" data-formatter=\"optSend\"></th>\n                            <th width=\"60\" data-formatter=\"optEdit\"></th>\n                            <th width=\"60\" data-formatter=\"optDelete\"></th>\n                            <th>&nbsp;</th>\n                        </tr>\n                    </table>\n                </div>\n\n\n            </div>\n        </div> <!-- Main Portlet Start -->\n\n        <!-- BEGIN ADD EDIT PORTLET -->\n        <div class=\"portlet box green-meadow\" id=\"addEditPortlet\" style=\"display: none;\">\n            <div class=\"portlet-title\">\n                <div class=\"caption caption-md\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-subject uppercase\"></span>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <!-- start add edit form  -->\n                <div class=\"row\">\n                    <div class=\"col-md-12\">\n                        <!-- start form -->\n                        <form id=\"addEditForm\" class=\"form-horizontal\">\n                            {!! csrf_field() !!}\n                            <div class=\"form-body\">\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">标题(仅Android)</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"title\" placeholder=\"标题(仅Android)\" class=\"form-control\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">内容</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"alert\" placeholder=\"内容\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的内容\">\n                                    </div>\n                                </div><!-- end item -->\n\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">消息类型</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('catalog' , $param['catalog'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">设备类型</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('platform' , $param['platform'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">别名(用户id)</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"alias\" placeholder=\"请输入正确的别名(用户id) 多个用,分隔\" class=\"form-control\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">标签</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"tags\" placeholder=\"用户分组 多个用,分隔\" class=\"form-control\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">激光ID</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"registration_id\" placeholder=\"激光ID 多个用,分隔\" class=\"form-control\">\n                                    </div>\n                                </div><!-- end item -->\n\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">附加参数</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"extras\" placeholder='附加参数 json字符串{\"key1\":\"value1\",\"key2\":value2\"}' class=\"form-control\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">状态</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('status' , $param['status'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                            </div>\n                            <div class=\"form-actions\" style=\"margin-bottom: 60px;\">\n                                <hr>\n                                <div class=\"row\">\n                                    <div class=\"col-md-offset-3 col-md-7\">\n                                        <button class=\"btn default btn-lg\" id=\"closePortletBtn\" type=\"button\"><i\n                                                    class=\"fa fa-arrow-left\"></i> 返回\n                                        </button>\n                                        <button class=\"btn red btn-lg\" id=\"submitFormBtn\" type=\"button\"><i class=\"fa fa-check\"></i> 提交\n                                        </button>\n                                    </div>\n                                </div>\n                            </div>\n                        </form><!-- END ADD EDIT FORM -->\n                    </div>\n                </div>\n            </div><!-- END ADD EDIT PORTLET BODY -->\n        </div><!-- END ADD EDIT PORTLET  -->\n\n    </div>\n</div>\n\n\n<!-- END CONTENT BODY -->\n@stop"
  },
  {
    "path": "resources/views/sysrole/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n\t<!-- BEGIN PAGE BAR -->\n\t<div class=\"page-bar\">\n\t\t<ul class=\"page-breadcrumb\">\n\t\t\t<li><a href=\"<?=$param['uri']['module']?>\">首页</a> <i class=\"fa fa-circle\"></i></li>\n\t\t\t<li><span><?=$param['pageTitle']?></span></li>\n\t\t</ul>\n\t</div>\n\t<!-- END PAGE BAR -->\n\n\t<div class=\"row\" style=\"margin-top: 16px\">\n\t\t<!-- Main Portlet Start -->\n\t\t<div class=\"portlet light bordered\" id=\"tablePortlet\">\n\t\t\t<div class=\"portlet-title\">\n\t\t\t\t<div class=\"caption\">\n\t\t\t\t\t<i class=\"icon-settings\"></i>\n\t\t\t\t\t<span class=\"caption-subject uppercase\"><?=$param['pageTitle']?></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t<a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n\t\t\t\t\t\t<i class=\"fa fa-plus\"></i> 新增\n\t\t\t\t\t</a>\n\t\t\t\t\t<a href=\"javascript:;\" class=\"btn btn-circle red\" id=\"destroySelectBtn\">\n\t\t\t\t\t\t<i class=\"fa fa-trash\"></i> 删除\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"portlet-body\">\n\n\t\t\t\t<div class=\"table-scrollable\">\n\t\t\t\t\t<table id=\"dataGrid\" class=\"table table-hover\">\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th width=\"40\" data-field=\"id\">ID</th>\n\t\t\t\t\t\t\t<th width=\"40\" data-field=\"sort\">排序</th>\n\t\t\t\t\t\t\t<th width=\"180\" data-field=\"name\">名称</th>\n\t\t\t\t\t\t\t<th width=\"80\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n\t\t\t\t\t\t\t<th width=\"80\" data-field=\"rank\">等级</th>\n\t\t\t\t\t\t\t<th width=\"60\" data-formatter=\"optPermission\"></th>\n\t\t\t\t\t\t\t<th width=\"60\" data-formatter=\"optEdit\"></th>\n\t\t\t\t\t\t\t<th width=\"60\" data-formatter=\"optDelete\"></th>\n\t\t\t\t\t\t\t<th>&nbsp;</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</table>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div> <!-- Main Portlet Start -->\n\t</div>\n</div>\n\n<!-- START ADD EDIT MODAL -->\n<div class=\"modal fade\" id=\"addEditModal\">\n\t<div class=\"modal-dialog\">\n\t\t<div class=\"modal-content\">\n\t\t\t<div class=\"modal-header\">\n\t\t\t\t<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n\t\t\t\t\t<span aria-hidden=\"true\">&times;</span>\n\t\t\t\t</button>\n\t\t\t\t<h4 class=\"modal-title caption-subject\"></h4>\n\t\t\t</div>\n\t\t\t<div class=\"modal-body\">\n\t\t\t\t<!-- start add edit form  -->\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-md-12\">\n\t\t\t\t\t\t<!-- start form -->\n\t\t\t\t\t\t<form id=\"addEditForm\" class=\"form-horizontal\">\n\t\t\t\t\t\t\t{!! csrf_field() !!}\n\t\t\t\t\t\t\t<div class=\"form-body\">\n\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">名称</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<input type=\"text\" name=\"name\" placeholder=\"名称\" class=\"form-control\"\n\t\t\t\t\t\t\t\t\t\t       data-valid=\"required\" data-tips=\"请输入正确的名称\">\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">排序</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<input type=\"text\" name=\"sort\" placeholder=\"排序\" class=\"form-control\"\n\t\t\t\t\t\t\t\t\t\t       data-valid=\"required\" data-tips=\"请输入正确的排序\">\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">状态</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<?=form_radios('status', $param['status'])?>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">描述</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<input type=\"text\" name=\"desc\" placeholder=\"描述\" class=\"form-control\">\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\t\t\t\t\t\t\t\t<!-- start item -->\n\t\t\t\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t\t\t\t<label class=\"col-md-3 control-label\">等级</label>\n\t\t\t\t\t\t\t\t\t<div class=\"col-md-7\">\n\t\t\t\t\t\t\t\t\t\t<select class=\"form-control\" name=\"rank\">\n\t\t\t\t\t\t\t\t\t\t\t<?=form_options($param['rank'])?>\n\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div><!-- end item -->\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</form><!-- end form -->\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- end add edit form-->\n\t\t\t</div>\n\t\t\t<div class=\"modal-footer\">\n\t\t\t\t<button type=\"button\" class=\"btn default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n\t\t\t\t<button type=\"button\" class=\"btn red\" id=\"submitFormBtn\"><i class=\"fa fa-save\"></i> 保存</button>\n\t\t\t</div>\n\t\t</div><!-- /.modal-content -->\n\t</div><!-- /.modal-dialog -->\n</div><!-- /.END ADD EDIT MODAL -->\n<!-- END CONTENT BODY -->\n\n<!-- START PERMISSION MODAL -->\n<div class=\"modal fade\" id=\"permissionModal\">\n\t<div class=\"modal-dialog\">\n\t\t<div class=\"modal-content\">\n\t\t\t<div class=\"modal-header\">\n\t\t\t\t<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n\t\t\t\t<h4 class=\"modal-title\" id=\"permissionLabel\"></h4>\n\t\t\t</div>\n\t\t\t<div class=\"modal-body\" id=\"permissionBody\">\n\t\t\t</div>\n\t\t\t<div class=\"modal-footer\">\n\t\t\t\t<button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n\t\t\t\t<button type=\"button\" class=\"btn btn-primary\" id=\"permissionSubmitBtn\"><i class=\"fa fa-check\"></i> 提交</button>\n\t\t\t</div>\n\t\t</div>\n\t\t<!-- /.modal-content -->\n\t</div>\n\t<!-- /.modal-dialog -->\n</div>\n<!-- /#END PERMISSION MODAL -->\n\t@stop"
  },
  {
    "path": "resources/views/sysrole/permission.blade.php",
    "content": "<ul class=\"permission\">\n  <?php foreach( $funcData as $row ) :?>\n  <li class=\"func-tree\">\n    <div class=\"func-node\" data-func-id=\"<?= $row['id']?>\">\n      <span class=\"func\" data-id=\"<?= $row['id']?>\"><?= $row['name'] ?></span>\n      <span class=\"func-opt-row\" >\n        <?php foreach( $row['privilege'] as $p ) :?>\n        <span class=\"func-opt\" data-id=\"<?= $p['id']?>\"><i class=\"fa fa-square-o\"></i> <?= $privilegeName[$p['name']] ?></span>\n        <?php endforeach ; ?>\n      </span>\n    </div>\n    <?php if ( isset( $row['children'] ) ) :?>\n    <ul class=\"sub-permission\">\n      <?php foreach( $row['children'] as $children ) :?>\n      <li class=\"func-tree\">\n        <div class=\"func-node\" data-func-id=\"<?= $children['id']?>\">\n          <span class=\"func\" data-id=\"<?= $children['id']?>\"><?= $children['name'] ?></span>\n          <span class=\"func-opt-row\">\n            <?php foreach( $children['privilege'] as $p ) :?>\n            <span class=\"func-opt\" data-id=\"<?= $p['id']?>\"><i class=\"fa fa-square-o\"></i> <?= $privilegeName[$p['name']] ?></span>\n            <?php endforeach ; ?>\n          </span>\n        </div>\n        <?php if ( isset( $children['children'] ) ) :?>\n        <ul class=\"sub-permission\">\n          <?php foreach( $children['children'] as $row ) :?>\n          <li class=\"func-tree\">\n            <div class=\"func-node\" data-func-id=\"<?= $row['id']?>\">\n              <span class=\"func\" data-id=\"<?= $row['id']?>\"><?= $row['name'] ?></span>\n              <span class=\"func-opt-row\">\n                <?php foreach( $row['privilege'] as $p) :?>\n                <span class=\"func-opt\" data-id=\"<?= $p['id']?>\"><i class=\"fa fa-square-o\"></i> <?= $privilegeName[$p['name']] ?></span>\n                <?php endforeach ; ?>\n              </span>\n            </div>\n          </li>\n          <?php endforeach ; ?>\n        </ul>\n        <?php endif ;?>\n      </li>\n      <?php endforeach ; ?>\n    </ul>\n    <?php endif ; ?>\n  </li>\n  <?php endforeach ; ?>\n</ul>"
  },
  {
    "path": "resources/views/syssettings/index.blade.php",
    "content": "@extends('Backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n{!! csrf_field() !!}\n<div class=\"page-content\">\n\t<!-- BEGIN PAGE BAR -->\n\t<div class=\"page-bar\">\n\t\t<ul class=\"page-breadcrumb\">\n\t\t\t<li> <a href=\"<?=$param['uri']['module']?>\">首页</a> <i class=\"fa fa-circle\"></i> </li>\n\t\t\t<li> <span><?=$param['pageTitle']?></span> </li>\n\t\t</ul>\n\t</div>\n\t<!-- END PAGE BAR -->\n\n\t<div class=\"row\" style=\"margin-top: 16px\">\n\t\t<!-- Main Portlet Start -->\n\t\t<div class=\"portlet light bordered\" id=\"tablePortlet\">\n\t\t\t<div class=\"portlet-title\">\n\t\t\t\t<div class=\"caption\">\n\t\t\t\t\t<i class=\"icon-settings\"></i>\n\t\t\t\t\t<span class=\"caption-subject uppercase\"><?=$param['pageTitle']?></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t<a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n\t\t\t\t\t  <i class=\"fa fa-plus\"></i> 新增\n\t\t\t\t\t</a>\n\t\t\t\t\t<a href=\"javascript:;\" class=\"btn btn-circle red\" id=\"destroySelectBtn\">\n\t\t\t\t\t\t<i class=\"fa fa-trash\"></i> 删除\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"portlet-body\">\n\t\t\t\t<!-- Start Search Form -->\n\t\t\t\t<form class=\"form-inline\" id=\"searchForm\">\n\t\t\t\t\t<!-- 查询关键字 start -->\n\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t<label>关键字: </label>\n\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" name=\"keyword\" placeholder=\"查询关键字\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<!-- 查询关键字 end -->\n\t\t\t\t\t<!-- 查询状态 start -->\n\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t<label>状态: </label>\n\t\t\t\t\t\t<select class=\"form-control\" name=\"status\">\n\t\t\t\t\t\t\t<option selected=\"\" value=\"\">不限</option>\n\t\t\t\t\t\t\t<?=form_options($param['status'])?>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<!-- 查询状态 end -->\n\t\t\t\t\t<button type=\"submit\" class=\"btn default\" id=\"searchBtn\"><i class=\"fa fa-search\"></i> 查询</button>\n\t\t\t\t</form> <!-- End Search Form -->\n\n        <div class=\"table-scrollable\">\n  <table id=\"dataGrid\" class=\"table table-hover\">\n    <tr>\n\n<th width=\"80\" data-field=\"group\" >配置分组</th>\n<th width=\"40\" data-field=\"id\" ></th>\n<th width=\"80\" data-field=\"key\" >名称</th>\n<th width=\"80\" data-field=\"type\" >配置类型</th>\n<th width=\"80\" data-field=\"updated_at\" ></th>\n<th width=\"80\" data-field=\"value\" >配置值</th>\n <th width=\"180\" data-field=\"created_at\" data-formatter=\"formatDatetime\">创建时间</th>\n      <th width=\"60\" data-formatter=\"optEdit\"></th>\n      <th width=\"60\" data-formatter=\"optDelete\"></th>\n      <th>&nbsp;</th>\n    </tr>\n  </table>\n</div>\n\n\n\t\t\t</div>\n\t\t</div> <!-- Main Portlet Start -->\n\n\t\t<!-- BEGIN ADD EDIT PORTLET -->\n<div class=\"portlet box green-meadow\" id=\"addEditPortlet\" style=\"display: none;\">\n  <div class=\"portlet-title\">\n    <div class=\"caption caption-md\">\n      <i class=\"icon-settings\"></i>\n      <span class=\"caption-subject uppercase\"></span>\n    </div>\n  </div>\n  <div class=\"portlet-body\">\n    <!-- start add edit form  -->\n    <div class=\"row\">\n      <div class=\"col-md-12\">\n        <!-- start form -->\n        <form id=\"addEditForm\" class=\"form-horizontal\">\n        \t{!! csrf_field() !!}\n          <div class=\"form-body\">\n            <!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">排序</label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"desc\" placeholder=\"排序\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的排序\" >\n\t</div>\n</div><!-- end item -->\n<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">配置分组</label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"group\" placeholder=\"配置分组\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的配置分组\" >\n\t</div>\n</div><!-- end item -->\n<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">名称</label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"key\" placeholder=\"名称\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的名称\" >\n\t</div>\n</div><!-- end item -->\n<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">配置类型</label>\n\t<div class=\"col-md-7\">\n\t\t<input type=\"text\" name=\"type\" placeholder=\"配置类型\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的类型\" >\n\t</div>\n</div><!-- end item -->\n<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">配置值</label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"value\" placeholder=\"配置值\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的配置值\" >\n\t</div>\n</div><!-- end item -->\n          </div>\n          <div class=\"form-actions\" style=\"margin-bottom: 60px;\">\n            <hr>\n            <div class=\"row\">\n              <div class=\"col-md-offset-3 col-md-7\">\n                <button class=\"btn default btn-lg\" id=\"closePortletBtn\" type=\"button\" ><i class=\"fa fa-arrow-left\"></i> 返回</button>\n                <button class=\"btn red btn-lg\" id=\"submitFormBtn\" type=\"button\"><i class=\"fa fa-check\"></i> 提交</button>\n              </div>\n            </div>\n          </div>\n        </form><!-- END ADD EDIT FORM -->\n      </div>\n    </div>\n\t</div><!-- END ADD EDIT PORTLET BODY -->\n</div><!-- END ADD EDIT PORTLET  -->\n\n\t</div>\n</div>\n\n\n<!-- END CONTENT BODY -->\n@stop"
  },
  {
    "path": "resources/views/syssettings/sms.blade.php",
    "content": "@extends('Backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n{!! csrf_field() !!}\n<div class=\"page-content\">\n\t<!-- BEGIN PAGE BAR -->\n\t<div class=\"page-bar\">\n\t\t<ul class=\"page-breadcrumb\">\n\t\t\t<li> <a href=\"<?=$param['uri']['module']?>\">首页</a> <i class=\"fa fa-circle\"></i> </li>\n\t\t\t<li> <span><?=$param['pageTitle']?></span> </li>\n\t\t</ul>\n\t</div>\n\t<!-- END PAGE BAR -->\n<div class=\"row\" style=\"margin-top: 16px\">\n    <!-- Main Portlet Start -->\n    <div class=\"portlet light bordered\" id=\"tablePortlet\">\n        <div class=\"portlet-title\">\n            <div class=\"caption\">\n                <i class=\"icon-settings\"></i>\n                <span class=\"caption-subject uppercase\"><?=$param['pageTitle']?></span>\n            </div>\n            <div class=\"actions\">\n                <a href=\"\" class=\"btn btn-circle btn-sm btn-primary\"><i class=\"fa fa-file\"></i>\n                    接口说明</a>\n            </div>\n        </div>\n\n        <div class=\"portlet-body\">\n            <!-- uri start -->\n\n\n\n\n        </div>\n    </div> <!-- Main Portlet Start -->\n</div>\n\n</div>\n\n\n<!-- END CONTENT BODY -->\n@stop"
  },
  {
    "path": "resources/views/syssms/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n    <!-- BEGIN PAGE BAR -->\n    <div class=\"page-bar\">\n        <ul class=\"page-breadcrumb\">\n            <li><a href=\"<?= $param['uri']['module'] ?>\">首页</a> <i class=\"fa fa-circle\"></i></li>\n            <li><span><?= $param['pageTitle'] ?></span></li>\n        </ul>\n    </div>\n    <!-- END PAGE BAR -->\n\n    <div class=\"row\" style=\"margin-top: 16px\">\n        <!-- Main Portlet Start -->\n        <div class=\"portlet light bordered\" id=\"tablePortlet\">\n            <div class=\"portlet-title\">\n                <div class=\"caption\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-subject uppercase\"><?= $param['pageTitle'] ?></span>\n                </div>\n                <div class=\"actions\">\n                    <a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n                        <i class=\"fa fa-plus\"></i> 新增\n                    </a>\n                    <a href=\"javascript:;\" class=\"btn btn-circle red\" id=\"destroySelectBtn\">\n                        <i class=\"fa fa-trash\"></i> 删除\n                    </a>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <!-- Start Search Form -->\n                <form class=\"form-inline\" id=\"searchForm\">\n                    <!-- 查询关键字 start -->\n                    <div class=\"form-group\">\n                        <label>关键字: </label>\n                        <input type=\"text\" class=\"form-control\" name=\"keyword\" placeholder=\"查询关键字\">\n                    </div>\n                    <!-- 查询关键字 end -->\n                    <!-- 查询状态 start -->\n                    <div class=\"form-group\">\n                        <label>状态: </label>\n                        <select class=\"form-control\" name=\"status\">\n                            <option selected=\"\" value=\"\">不限</option>\n                            <?= form_options($param['status']) ?>\n                        </select>\n                    </div>\n                    <!-- 查询状态 end -->\n                    <button type=\"submit\" class=\"btn default\" id=\"searchBtn\"><i class=\"fa fa-search\"></i> 查询</button>\n                </form> <!-- End Search Form -->\n\n                <div class=\"table-scrollable\">\n                    <table id=\"dataGrid\" class=\"table table-hover\">\n                        <tr>\n                            <th width=\"40\" data-field=\"id\">ID</th>\n                            <th width=\"80\" data-field=\"type\" data-formatter=\"formatType\">短信类型</th>\n                            <th width=\"80\" data-field=\"phone\">手机号</th>\n                            <th width=\"80\" data-field=\"content\">发送内容</th>\n                            <th width=\"80\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n                            <th width=\"160\" data-field=\"created_at\">创建时间</th>\n                            <th width=\"160\" data-field=\"verified_at\">验证时间</th>\n                            <th width=\"160\" data-field=\"sent_at\">发送时间</th>\n                            <th width=\"60\" data-formatter=\"optEdit\"></th>\n                            <th width=\"60\" data-formatter=\"optDelete\"></th>\n                            <th>&nbsp;</th>\n                        </tr>\n                    </table>\n                </div>\n\n\n            </div>\n        </div> <!-- Main Portlet Start -->\n\n\n    </div>\n</div>\n\n<!-- START ADD EDIT MODAL -->\n<div class=\"modal fade\" id=\"addEditModal\">\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n                    <span aria-hidden=\"true\">&times;</span>\n                </button>\n                <h4 class=\"modal-title caption-subject\"></h4>\n            </div>\n            <div class=\"modal-body\">\n                <!-- start add edit form  -->\n                <div class=\"row\">\n                    <div class=\"col-md-12\">\n                        <!-- start form -->\n                        <form id=\"addEditForm\" class=\"form-horizontal\">\n                            <div class=\"form-body\">\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">短信类型</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('type' , $param['type'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">手机号</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"phone\" placeholder=\"手机号\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的手机号\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">发送内容</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"content\" placeholder=\"发送内容\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的发送内容\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">模板编号</label>\n                                    <div class=\"col-md-7\">\n                                        <input type=\"text\" name=\"temp_id\" placeholder=\"模板编号\" class=\"form-control\"\n                                               data-valid=\"required\" data-tips=\"请输入正确的模板编号\">\n                                    </div>\n                                </div><!-- end item -->\n                                <!-- start item -->\n                                <div class=\"form-group\">\n                                    <label class=\"col-md-3 control-label\">状态</label>\n                                    <div class=\"col-md-7\">\n                                        <?= form_radios('status' , $param['status'] ) ?>\n                                    </div>\n                                </div><!-- end item -->\n                            </div>\n                        </form><!-- end form -->\n                    </div>\n                </div>\n                <!-- end add edit form-->\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n                <button type=\"button\" class=\"btn red\" id=\"submitFormBtn\"><i class=\"fa fa-save\"></i> 保存</button>\n            </div>\n        </div><!-- /.modal-content -->\n    </div><!-- /.modal-dialog -->\n</div><!-- /.END ADD EDIT MODAL -->\n<!-- END CONTENT BODY -->\n    @stop"
  },
  {
    "path": "resources/views/sysuser/index.blade.php",
    "content": "@extends('backend::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n<div class=\"page-content\">\n    <!-- BEGIN PAGE HEADER-->\n    <!-- BEGIN PAGE BAR -->\n    <div class=\"page-bar\">\n        <ul class=\"page-breadcrumb\">\n            <li> <a href=\"<?=$param['uri']['base']?>\">首页</a> <i class=\"fa fa-circle\"></i> </li>\n            <li> <span>系统设置</span> </li>\n        </ul>\n    </div>\n    <!-- END PAGE BAR -->\n\n    <div class=\"row\" style=\"margin-top: 16px\">\n        <!-- Main Portlet Start -->\n        <div class=\"portlet light bordered\" id=\"tablePortlet\">\n            <div class=\"portlet-title\">\n                <div class=\"caption\">\n                    <i class=\"icon-settings font-dark\"></i>\n                    <span class=\"caption-subject font-dark bold uppercase\"><?=$param['pageTitle']?></span>\n                </div>\n                <div class=\"actions\">\n                    <a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n                        <i class=\"fa fa-plus\"></i> 新增\n                    </a>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n\n                <!-- Start Search Form -->\n                <form class=\"form-inline\" id=\"searchForm\">\n                    <!-- 查询关键字 start -->\n                    <div class=\"form-group\">\n                        <label>关键字: </label>\n                        <input type=\"text\" class=\"form-control\" name=\"keyword\" id=\"keyword\" placeholder=\"查询关键字\">\n                    </div>\n                    <!-- 查询关键字 end -->\n                    <!-- 查询状态 start -->\n                    <div class=\"form-group\">\n                        <label>状态: </label>\n                        <select class=\"form-control\" name=\"status\" id=\"status\">\n                            <option selected=\"\" value=\"\">不限</option>\n                            <option value=\"0\">禁用</option>\n                            <option value=\"1\">启用</option>\n                        </select>\n                    </div>\n\n                    <!-- 查询状态 end -->\n                    <button type=\"submit\" class=\"btn default\" id=\"searchBtn\"><i class=\"fa fa-search\"></i> 查询</button>\n                </form> <!-- End Search Form -->\n\n                <!-- Start DateGrid -->\n                <div class=\"table-scrollable\">\n                    <table id=\"dataGrid\" class=\"table table-hover\">\n                        <tr>\n                            <th width=\"40\" data-field=\"id\">ID</th>\n                            <th width=\"80\" data-field=\"icon\" data-formatter=\"formatIcon\">头像</th>\n                            <th width=\"160\" data-field=\"username\" data-formatter=\"formatUsername\">用户名</th>\n                            <th width=\"80\" data-field=\"phone\">手机号码</th>\n                            <th width=\"80\" data-field=\"status\" data-formatter=\"formatStatus\">状态</th>\n                            <th width=\"100\" data-field=\"created_at\" data-formatter=\"formatDate\">创建时间</th>\n                            <th width=\"160\" data-field=\"signed_at\" data-formatter=\"formatDatetime\">最后登录</th>\n                            <th width=\"160\" data-field=\"user_device\" data-formatter=\"formatTest\">测试</th>\n                            <th width=\"60\" data-formatter=\"optResetPwd\"></th>\n                            <th width=\"60\" data-formatter=\"optEdit\"></th>\n                            <th width=\"60\" data-formatter=\"optDelete\"></th>\n                            <th>&nbsp;</th>\n                        </tr>\n                    </table>\n                </div><!-- End DateGrid -->\n\n            </div>\n        </div> <!-- Main Portlet Start -->\n\n        <div class=\"portlet box red\" id=\"addEditPortlet\" style=\"display: none\">\n            <div class=\"portlet-title\">\n                <div class=\"caption caption-md\">\n                    <i class=\"icon-settings\"></i>\n                    <span class=\"caption-title uppercase\"></span>\n                </div>\n            </div>\n            <div class=\"portlet-body\">\n                <!-- start form -->\n                <form id=\"addEditForm\" class=\"form-horizontal\">\n                    {!! csrf_field() !!}\n                    <div class=\"form-body\">\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">用户名</label>\n                            <div class=\"col-md-7\">\n                                <input type=\"text\" name=\"username\" placeholder=\"用户名\" class=\"form-control\"\n                                       data-valid=\"required\" data-tips=\"请输入正确的用户名\">\n                            </div>\n                        </div><!-- end item -->\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">头像</label>\n                            <div class=\"col-md-7\">\n                                <div id=\"iconPreview\" class=\"fit-img-preview\"></div>\n                                <button id=\"iconUploadBtn\"></button>\n                                <input type=\"text\" name=\"icon\" class=\"hide\">\n                            </div>\n                        </div><!-- end item -->\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">手机号码</label>\n                            <div class=\"col-md-7\">\n                                <input type=\"text\" name=\"phone\" placeholder=\"手机号码\" class=\"form-control\">\n                            </div>\n                        </div><!-- end item -->\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">账号状态</label>\n                            <div class=\"col-md-7\">\n                                <?=form_radios('status', $param['status'])?>\n                            </div>\n                        </div><!-- end item -->\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">Token</label>\n                            <div class=\"col-md-7\">\n                                <input type=\"text\" name=\"token\" placeholder=\"登录Token\" class=\"form-control\" disabled>\n                            </div>\n                        </div><!-- end item -->\n                        <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">角色</label>\n                            <div class=\"col-md-7\">\n                                <?=form_checkbox_rows('roles', $param['roles'])?>\n                            </div>\n                        </div><!-- end item -->\n\n                         <!-- start item -->\n                        <div class=\"form-group\">\n                            <label class=\"col-md-3 control-label\">api测试账户</label>\n                            <div class=\"col-md-7\">\n                                <?=form_radios('for_test', $param['for_test'])?>\n                            </div>\n                        </div><!-- end item -->\n                    </div>\n                    <div class=\"form-actions\" style=\"margin-bottom: 60px;\">\n                        <hr>\n                        <div class=\"row\">\n                            <div class=\"col-md-offset-3 col-md-7\">\n                                <button class=\"btn default btn-lg\" id=\"closePortletBtn\" type=\"button\">\n                                    <i class=\"fa fa-arrow-left\"></i> 返回\n                                </button>\n                                <button class=\"btn red btn-lg\" id=\"submitFormBtn\" type=\"button\">\n                                    <i class=\"fa fa-check\"></i> 提交\n                                </button>\n                            </div>\n                        </div>\n                    </div>\n                </form><!-- END ADD EDIT FORM -->\n            </div>\n        </div>\n\n    </div>\n\n</div>\n\n<!-- END CONTENT BODY -->\n    @stop"
  },
  {
    "path": "resources/views/welcome.blade.php",
    "content": "<!doctype html>\n<html lang=\"{{ app()->getLocale() }}\">\n    <head>\n        <meta charset=\"utf-8\">\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n        <title>Laravel</title>\n\n        <!-- Fonts -->\n        <link href=\"https://fonts.googleapis.com/css?family=Raleway:100,600\" rel=\"stylesheet\" type=\"text/css\">\n\n        <!-- Styles -->\n        <style>\n            html, body {\n                background-color: #fff;\n                color: #636b6f;\n                font-family: 'Raleway', sans-serif;\n                font-weight: 100;\n                height: 100vh;\n                margin: 0;\n            }\n\n            .full-height {\n                height: 100vh;\n            }\n\n            .flex-center {\n                align-items: center;\n                display: flex;\n                justify-content: center;\n            }\n\n            .position-ref {\n                position: relative;\n            }\n\n            .top-right {\n                position: absolute;\n                right: 10px;\n                top: 18px;\n            }\n\n            .content {\n                text-align: center;\n            }\n\n            .title {\n                font-size: 84px;\n            }\n\n            .links > a {\n                color: #636b6f;\n                padding: 0 25px;\n                font-size: 12px;\n                font-weight: 600;\n                letter-spacing: .1rem;\n                text-decoration: none;\n                text-transform: uppercase;\n            }\n\n            .m-b-md {\n                margin-bottom: 30px;\n            }\n        </style>\n    </head>\n    <body>\n        <div class=\"flex-center position-ref full-height\">\n            @if (Route::has('login'))\n                <div class=\"top-right links\">\n                    @auth\n                        <a href=\"{{ url('/home') }}\">Home</a>\n                    @else\n                        <a href=\"{{ route('login') }}\">Login</a>\n                        <a href=\"{{ route('register') }}\">Register</a>\n                    @endauth\n                </div>\n            @endif\n\n            <div class=\"content\">\n                <div class=\"title m-b-md\">\n                    Laravel\n                </div>\n\n                <div class=\"links\">\n                    <a href=\"https://laravel.com/docs\">Documentation</a>\n                    <a href=\"https://laracasts.com\">Laracasts</a>\n                    <a href=\"https://laravel-news.com\">News</a>\n                    <a href=\"https://forge.laravel.com\">Forge</a>\n                    <a href=\"https://github.com/laravel/laravel\">GitHub</a>\n                </div>\n            </div>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "resources/views/widget/Checkbox.blade.php",
    "content": ""
  },
  {
    "path": "resources/views/widget/File.blade.php",
    "content": ""
  },
  {
    "path": "resources/views/widget/Hidden.blade.php",
    "content": ""
  },
  {
    "path": "resources/views/widget/Image.blade.php",
    "content": ""
  },
  {
    "path": "resources/views/widget/Radio.blade.php",
    "content": "<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">{{ $title }}</label>\n\t<div class=\"col-md-7\">\n\n\t\t@foreach($data as $k=>$v)\n\t\t<label class=\"radio-inline\"><input name=\"{{ $name }}\" type=\"radio\" value=\"{{ $k }}\"\n\t\t\t@if($value == $k)\n\t\t\t\tchecked=true\n\t\t\t@endif\n\t\t\t>{{ $v }}</label>\n\t\t@endforeach\n\n\t</div>\n</div>"
  },
  {
    "path": "resources/views/widget/Text.blade.php",
    "content": "<div class=\"form-group\">\n    <label class=\"col-md-2 control-label\">{{ $title }}}</label>\n    <div class=\"col-md-6\">\n        <input type=\"text\" name=\"{{ $name }}\" placeholder=\"{{ $placeholder }}\" class=\"form-control \"\n                                           value=\"{{ $value }}\">\n    </div>\n\t<div class=\"col-md-3\">\n        <span class=\"help-inline\"> {{ $help }} </span>\n    </div>\n</div>"
  },
  {
    "path": "resources/views/widget/Textarea.blade.php",
    "content": ""
  },
  {
    "path": "router/routes.php",
    "content": "<?php\n\nuse Illuminate\\Routing\\Router;\nRoute::group([\n    'prefix'=>strtolower('Backend' ),\n    'namespace' => 'Smart\\\\Controllers\\\\Backend' ,\n    'middleware'=> ['web']\n],function(Router $router ){\n\t$router->group(['prefix' => 'auth','middleware' => ['auth.resetPassword']],function($router){\n\t\t$router->post('changepassword' , 'AuthController@changePassword');\n\t});\n\t\n});\n\nRoute::group(['prefix' => 'backend/index', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\tRoute::get('index', 'Index@index');\n});\n\n\n\n//系统功能\nRoute::group(['prefix' => 'backend/sysfunc', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index', 'SysFunc@index');\n\n\tRoute::get('read', 'SysFunc@read');\n\n\tRoute::post('update_privilege/{funcId}', 'SysFunc@update_privilege');\n\n\tRoute::post('update/{id}', 'SysFunc@update');\n\n\tRoute::post('insert', 'SysFunc@insert');\n\n\tRoute::post('destroy', 'SysFunc@destroy');\n\n});\n\n//系统角色\nRoute::group(['prefix' => 'backend/sysrole', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index', 'SysRole@index');\n\n\tRoute::get('read', 'SysRole@read');\n\n\tRoute::post('get_permission', 'SysRole@get_permission');\n\n\tRoute::post('get_privilegedata', 'SysRole@get_privilegeData');\n\n\tRoute::post('update_permission', 'SysRole@update_permission');\n\n\tRoute::post('update/{id}', 'SysRole@update');\n\n\tRoute::post('insert', 'SysRole@insert');\n\n\tRoute::post('destroy', 'SysRole@destroy');\n\n});\n\n//系统用户\nRoute::group(['prefix' => 'backend/sysuser', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index', 'SysUser@index');\n\n\tRoute::get('read', 'SysUser@read');\n\n\tRoute::post('get_permission', 'SysUser@get_permission');\n\n\tRoute::post('get_privilegedata', 'SysUser@get_privilegeData');\n\n\tRoute::post('update_permission', 'SysUser@update_permission');\n\n\tRoute::post('update/{id}', 'SysUser@update');\n\n\tRoute::post('insert', 'SysUser@insert');\n\n\tRoute::post('destroy', 'SysUser@destroy');\n\n\tRoute::get('reset_pwd/{id}', 'SysUser@reset_pwd');\n\n\tRoute::get('read_album_catalog', 'SysUser@read_album_catalog');\n\n\tRoute::get('read_album', 'SysUser@read_album');\n\n\tRoute::post('upload', 'SysUser@upload');\n\n\tRoute::post('test', 'SysUser@test');\n\n});\n\n//区域管理\nRoute::group(['prefix' => 'backend/sysarea', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index', 'SysArea@index');\n\n\tRoute::get('read', 'SysArea@read');\n\n\tRoute::post('get_permission', 'SysArea@get_permission');\n\n\tRoute::post('get_privilegedata', 'SysArea@get_privilegeData');\n\n\tRoute::post('update_permission', 'SysArea@update_permission');\n\n\tRoute::post('update/{id}', 'SysArea@update');\n\n\tRoute::post('insert', 'SysArea@insert');\n\n\tRoute::post('destroy', 'SysArea@destroy');\n\n});\n\n//商品分类\nRoute::group(['prefix' => 'backend/mergoodscatalog', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index', 'MerGoodsCatalog@index');\n\n\tRoute::get('read', 'MerGoodsCatalog@read');\n\n\tRoute::post('get_permission', 'MerGoodsCatalog@get_permission');\n\n\tRoute::post('get_privilegedata', 'MerGoodsCatalog@get_privilegeData');\n\n\tRoute::post('update_permission', 'MerGoodsCatalog@update_permission');\n\n\tRoute::post('update/{id}', 'MerGoodsCatalog@update');\n\n\tRoute::post('insert', 'MerGoodsCatalog@insert');\n\n\tRoute::post('destroy', 'MerGoodsCatalog@destroy');\n\n});\n\n//机构管理\nRoute::group(['prefix' => 'backend/sysmerchant', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index', 'SysMerchant@index');\n\n\tRoute::get('read', 'SysMerchant@read');\n\n\tRoute::get('read_detail/{id}', 'SysMerchant@read_detail');\n\n\tRoute::get('read_area/{pid}', 'SysMerchant@read_area');\n\n\tRoute::post('update/{id}', 'SysMerchant@update');\n\n\tRoute::post('insert', 'SysMerchant@insert');\n\n\tRoute::post('destroy', 'SysMerchant@destroy');\n\n\tRoute::post('upload', 'SysMerchant@upload');\n\n\tRoute::get('read_album_catalog','SysMerchant@read_album_catalog');\n\n});\n\n//机构功能\nRoute::group(['prefix' => 'backend/merfunc', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index', 'MerFunc@index');\n\n\tRoute::get('read', 'MerFunc@read');\n\n\tRoute::post('update/{id}', 'MerFunc@update');\n\n\tRoute::post('insert', 'MerFunc@insert');\n\n\tRoute::post('destroy', 'MerFunc@destroy');\n\n\tRoute::post('update_privilege/{funcId}', 'MerFunc@update_privilege');\n\n});\n\n//机构角色\nRoute::group(['prefix' => 'backend/merrole', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index', 'MerRole@index');\n\n\tRoute::get('read', 'MerRole@read');\n\n\tRoute::post('update/{id}', 'MerRole@update');\n\n\tRoute::post('insert', 'MerRole@insert');\n\n\tRoute::post('destroy', 'MerRole@destroy');\n\n\tRoute::post('get_permission', 'MerRole@get_permission');\n\n\tRoute::post('get_privilegedata', 'MerRole@get_privilegeData');\n\n\tRoute::post('update_permission', 'MerRole@update_permission');\n\n});\n\n//系统用户\nRoute::group(['prefix' => 'backend/mersysuser', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index/{merId?}', 'MerSysUser@index');\n\n\tRoute::get('read', 'MerSysUser@read');\n\n\tRoute::post('update/{id}', 'MerSysUser@update');\n\n\tRoute::post('insert/{merId}', 'MerSysUser@insert');\n\n\tRoute::post('destroy/{merId}', 'MerSysUser@destroy');\n\n\tRoute::get('reset_pwd/{id}', 'MerSysUser@reset_pwd');\n\n});\n\nRoute::group(['prefix' => 'backend/meruser', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index', 'MerUser@index');\n\n\tRoute::get('read', 'MerUser@read');\n\n\tRoute::post('get_permission', 'MerUser@get_permission');\n\n\tRoute::post('get_privilegedata', 'MerUser@get_privilegeData');\n\n\tRoute::post('update_permission', 'MerUser@update_permission');\n\n\tRoute::post('update/{id}', 'MerUser@update');\n\n\tRoute::post('insert', 'MerUser@insert');\n\n\tRoute::post('destroy', 'MerUser@destroy');\n\n\tRoute::get('reset_pwd/{id}', 'MerUser@reset_pwd');\n\n\tRoute::get('read_album_catalog', 'MerUser@read_album_catalog');\n\n\tRoute::post('upload', 'MerUser@upload');\n\n\tRoute::get('read_album', 'MerUser@read_album');\n\n});\n\n//APP版本管理\nRoute::group(['prefix' => 'backend/sysappversion', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index', 'SysAppVersion@index');\n\n\tRoute::get('read', 'SysAppVersion@read');\n\n\tRoute::post('update/{id}', 'SysAppVersion@update');\n\n\tRoute::post('insert', 'SysAppVersion@insert');\n\n\tRoute::post('destroy', 'SysAppVersion@destroy');\n\n});\n\n//消息推送\nRoute::group(['prefix' => 'backend/syspush', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index', 'SysPush@index');\n\n\tRoute::get('read', 'SysPush@read');\n\n\tRoute::post('update/{id}', 'SysPush@update');\n\n\tRoute::post('insert', 'SysPush@insert');\n\n\tRoute::post('destroy', 'SysPush@destroy');\n\n});\n\n//短信\nRoute::group(['prefix' => 'backend/syssms', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index', 'SysSms@index');\n\n\tRoute::get('read', 'SysSms@read');\n\n\tRoute::post('update/{id}', 'SysSms@update');\n\n\tRoute::post('insert', 'SysSms@insert');\n\n\tRoute::post('destroy', 'SysSms@destroy');\n\n});\n\n//邮件\nRoute::group(['prefix' => 'backend/sysmail', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index', 'SysMail@index');\n\n\tRoute::get('read', 'SysMail@read');\n\n\tRoute::post('update/{id}', 'SysMail@update');\n\n\tRoute::post('insert', 'SysMail@insert');\n\n\tRoute::post('destroy', 'SysMail@destroy');\n\n\tRoute::post('send', 'SysMail@send');\n\n});\n\n//代码生成\nRoute::group(['prefix' => 'backend/generate', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index', 'Generate@index');\n\n\tRoute::get('get_system_info', 'Generate@get_system_info');\n\n\tRoute::post('create_system', 'Generate@create_system');\n\n\tRoute::post('create_api', 'Generate@create_api');\n\n\tRoute::get('destroy_system_file', 'Generate@destroy_system_file');\n\n});\n\nRoute::group(['prefix' => 'backend/meralbum', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index/{id?}', 'MerAlbum@index');\n\n\tRoute::get('read', 'MerAlbum@read');\n\n});\n\nRoute::group(['prefix' => 'backend/meralbumcatalog', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index', 'MerAlbumCatalog@index');\n\n\tRoute::get('read', 'MerAlbumCatalog@read');\n\n\tRoute::get('read_album/{id}', 'MerAlbumCatalog@read_album');\n\n});\n\nRoute::group([\n\t'prefix' => strtolower('Backend'),\n\t'namespace' => 'Smart\\\\Controllers\\\\Backend',\n\t'middleware' => ['web', 'auth.permission'],\n], function () {\n\tRoute::group(['prefix' => 'sysmodules'], function () {\n\n\t\tRoute::get('index', 'SysModule@index')->name('backend.sysmodules.index');\n\n\t\tRoute::get('read_album_catalog', 'SysModule@read_album_catalog');\n\n\t\tRoute::get('read', 'SysModule@read')->name('backend.sysmodules.read');\n\n\t\tRoute::post('insert', 'SysModule@insert')->name('backend.sysmodules.insert');\n\n\t\tRoute::post('update/{id}', 'SysModule@update')->name('backend.sysmodules.update');\n\n\t\tRoute::post('destroy', 'SysModule@destroy')->name('backend.sysmodules.destory');\n\n\t\tRoute::post('upload', 'SysModule@upload');\n\n\t\tRoute::get('read_album', 'SysModule@read_album');\n\n\t\tRoute::get('income', 'SysModule@income');\n\n\t});\n\n\tRoute::group(['prefix' => 'modulefunc'], function () {\n\t\tRoute::get('index', 'ModuleFunc@index')->name('backend.modulefunc.index');\n\n\t\tRoute::get('read', 'ModuleFunc@read')->name('backend.modulefunc.read');\n\n\t\tRoute::post('insert', 'ModuleFunc@insert')->name('backend.modulefunc.insert');\n\n\t\tRoute::post('update/{id}', 'ModuleFunc@update')->name('backend.modulefunc.update');\n\n\t\tRoute::post('destroy', 'ModuleFunc@destroy')->name('backend.modulefunc.destroy');\n\t});\n\n\tRoute::group(['prefix' => 'modulerole'], function () {\n\t\tRoute::get('index', 'ModuleRole@index')->name('backend.modulerole.index')->middleware('auth.permission');\n\n\t\tRoute::get('read', 'ModuleRole@read')->name('backend.modulerole.read');\n\n\t\tRoute::post('insert', 'ModuleRole@insert')->name('backend.modulerole.insert');\n\n\t\tRoute::post('update/{id}', 'ModuleRole@update')->name('backend.modulerole.update');\n\n\t\tRoute::post('destroy', 'ModuleRole@destroy')->name('backend.modulerole.destroy');\n\t});\n});\n\n//接口模拟器\nRoute::group(['prefix' => 'backend/simulator', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index', 'Simulator@index');\n\n\tRoute::get('read_api', 'Simulator@read_api');\n\n\tRoute::get('read_params', 'Simulator@read_params');\n\n});\n\n//设置配置\nRoute::group(['prefix' => 'backend/syssettings', 'namespace' => 'Smart\\Controllers\\Backend', 'middleware' => ['web']], function () {\n\n\tRoute::get('index', 'SysSettings@index');\n\n\tRoute::get('read', 'SysSettings@read');\n\n\tRoute::post('insert', 'SysSettings@insert');\n\n\tRoute::post('update/{id}', 'SysSettings@update');\n\n\tRoute::post('destroy', 'SysSettings@destroy');\n\n\tRoute::get('group/{group}', 'SysSettings@indexGroup');\n\n});\n\n//接口路由\nRoute::group(['prefix' => 'api/{version}', 'namespace' => 'App\\Http\\Controllers\\Api', 'middleware' => ['api','auth.cors']], function () {\n\n\tRoute::any('{direction}/{action}', 'Index@index');\n\n});\n"
  },
  {
    "path": "src/Auth/Database/seeds/AdminTableSeeder.php",
    "content": "<?php\nnamespace Smart\\Auth\\Database;\n\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Support\\Carbon;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass AdminTableSeeder extends Seeder {\n\t/**\n\t * Run the database seeds.\n\t *\n\t * @return void\n\t */\n\tpublic function run() {\n\t\t//新增管理员\n\t\t$user_id = DB::table('sys_user')->insertGetId(\n\t\t\t[\n\t\t\t\t'module' => 'backend',\n\t\t\t\t'username' => config('backend.defaultAdmin'),\n\t\t\t\t'password' => bcrypt(config('backend.defaultPwd')),\n\t\t\t\t'status' => 1,\n\t\t\t\t'name' => 'admin',\n\t\t\t\t'email' => config('backend.defaultEmail'),\n\t\t\t\t'icon' => '',\n\t\t\t\t'phone' => '',\n\t\t\t\t'api_token' => '',\n\t\t\t\t'signed_at' => Carbon::now(),\n\t\t\t\t'signed_ip' => '',\n\t\t\t]\n\t\t);\n\n\t\t$role_id = DB::table('sys_role')->insertGetId(\n\t\t\t[\n\t\t\t\t'sort' => 10,\n\t\t\t\t'module' => 'backend',\n\t\t\t\t'name' => '系统管理员',\n\t\t\t\t'status' => 1,\n\t\t\t\t'rank' => 5,\n\t\t\t\t'mer_id' => 0,\n\t\t\t\t'desc' => '',\n\n\t\t\t]\n\t\t);\n\n\t\tDB::table('sys_user_role')->insert([\n\t\t\t[\n\t\t\t\t'user_id' => $user_id,\n\t\t\t\t'role_id' => $role_id,\n\t\t\t],\n\t\t]);\n\n\t\t//默认功能菜单模板\n\t\t$default_func = [\n\t\t\t'pid' => 0,\n\t\t\t'module' => 'backend',\n\t\t\t'is_menu' => 1,\n\t\t\t'is_func' => 0,\n\t\t\t'color' => 'default',\n\t\t\t'level' => 1,\n\t\t\t'status' => 1,\n\t\t\t'uri' => '',\n\t\t\t'icon' => '',\n\t\t\t'name' => '',\n\t\t\t'sort' => 1,\n\t\t\t'desc' => '',\n\t\t];\n\n\t\t//新增权限\n\t\tDB::table('sys_func')->insert([\n\t\t\t//一级菜单\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '首页',\n\t\t\t\t'icon' => 'icon-home',\n\t\t\t\t'uri' => 'backend/index/index',\n\t\t\t]),\n\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '系统',\n\t\t\t\t'icon' => 'icon-settings',\n\t\t\t]),\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '平台用户',\n\t\t\t\t'icon' => 'icon-users',\n\t\t\t]),\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '机构',\n\t\t\t\t'icon' => 'icon-globe',\n\t\t\t]),\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '工具',\n\t\t\t\t'icon' => 'icon-wrench',\n\t\t\t]),\n\n\t\t\t//二级菜单 系统\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '系统功能',\n\t\t\t\t'icon' => '',\n\t\t\t\t'uri' => 'backend/sysfunc/index',\n\t\t\t\t'pid' => 2,\n\t\t\t\t'level' => 2,\n\t\t\t]),\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '系统角色',\n\t\t\t\t'icon' => '',\n\t\t\t\t'uri' => 'backend/sysrole/index',\n\t\t\t\t'pid' => 2,\n\t\t\t\t'level' => 2,\n\t\t\t]),\n\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '系统用户',\n\t\t\t\t'icon' => '',\n\t\t\t\t'uri' => 'backend/sysuser/index',\n\t\t\t\t'pid' => 2,\n\t\t\t\t'level' => 2,\n\t\t\t]),\n\t\t\t/*extend($default_func , [\n\t\t\t\t                    'name' => '系统用户组',\n\t\t\t\t                    'icon'  => '',\n\t\t\t\t                    'uri'   => 'backend/sysgroup/index',\n\t\t\t\t                    'pid'   => 2,\n\t\t\t\t                    'level' => 2\n\t\t\t*/\n\n\t\t\t//二级菜单 工具\n\t\t\textend($default_func, [\n\t\t\t\t'name' => 'APP版本管理',\n\t\t\t\t'icon' => '',\n\t\t\t\t'uri' => 'backend/sysappversion/index',\n\t\t\t\t'pid' => 5,\n\t\t\t\t'level' => 2,\n\t\t\t]),\n\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '消息推送',\n\t\t\t\t'icon' => '',\n\t\t\t\t'uri' => 'backend/syspush/index',\n\t\t\t\t'pid' => 5,\n\t\t\t\t'level' => 2,\n\t\t\t]),\n\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '短信',\n\t\t\t\t'icon' => '',\n\t\t\t\t'uri' => 'backend/syssms/index',\n\t\t\t\t'pid' => 5,\n\t\t\t\t'level' => 2,\n\t\t\t]),\n\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '邮件',\n\t\t\t\t'icon' => '',\n\t\t\t\t'uri' => 'backend/sysmail/index',\n\t\t\t\t'pid' => 5,\n\t\t\t\t'level' => 2,\n\t\t\t]),\n\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '代码生成',\n\t\t\t\t'icon' => '',\n\t\t\t\t'uri' => 'backend/generate/index',\n\t\t\t\t'pid' => 5,\n\t\t\t\t'level' => 2,\n\t\t\t]),\n\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '接口模拟器',\n\t\t\t\t'icon' => '',\n\t\t\t\t'uri' => 'backend/simulator/index',\n\t\t\t\t'pid' => 5,\n\t\t\t\t'level' => 2,\n\t\t\t]),\n\n\t\t\t//机构\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '机构管理',\n\t\t\t\t'icon' => '',\n\t\t\t\t'uri' => 'backend/sysmerchant/index',\n\t\t\t\t'pid' => 4,\n\t\t\t\t'level' => 2,\n\t\t\t]),\n\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '机构功能',\n\t\t\t\t'icon' => '',\n\t\t\t\t'uri' => 'backend/merfunc/index',\n\t\t\t\t'pid' => 4,\n\t\t\t\t'level' => 2,\n\t\t\t]),\n\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '机构角色',\n\t\t\t\t'icon' => '',\n\t\t\t\t'uri' => 'backend/merrole/index',\n\t\t\t\t'pid' => 4,\n\t\t\t\t'level' => 2,\n\t\t\t]),\n\n\t\t\t//平台用户\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '平台用户管理',\n\t\t\t\t'icon' => '',\n\t\t\t\t'uri' => 'backend/meruser/index',\n\t\t\t\t'pid' => 3,\n\t\t\t\t'level' => 2,\n\t\t\t]),\n\n\t\t\textend($default_func, [\n\t\t\t\t'name' => '模块管理',\n\t\t\t\t'icon' => '',\n\t\t\t\t'uri' => 'backend/sysmodules/index',\n\t\t\t\t'pid' => 5,\n\t\t\t\t'level' => 2,\n\t\t\t]),\n\n\t\t]\n\t\t);\n\t}\n}\n"
  },
  {
    "path": "src/Console/InstallCommand.php",
    "content": "<?php\n\nnamespace Smart\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Smart\\Auth\\Database\\AdminTableSeeder;\nuse Smart\\Models\\SysUser;\nuse Smart\\Models\\SysModule;\n\nclass InstallCommand extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'smart:install {module?}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'install the CMF Command';\n\n    protected $directory = '';\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return mixed\n     */\n    public function handle()\n    {\n        $module = ucfirst($this->input->getArgument('module'));\n        if($module){\n            $this->initDirectory($module);\n            $this->initView( $module );\n            $this->initRoutes($module);\n            $this->initConfig($module);\n            $this->initController($module);\n            $this->initExampleController($module);\n            $this->initMigration($module);\n            $this->initMiddleware($module);\n            $this->initProviders($module);\n        }else{\n\n         $this->initData($module);\n        }\n        //\n        $this->info('laravel-smart install success!');\n    }\n\n    /**\n     * 初始化数据\n     */\n    public function initData($module){\n\n\n            //默认安装基础数据\n            $this->call('migrate');\n            if( SysUser::count() == 0){\n                $this->call('db:seed' , [ '--class' => AdminTableSeeder::class]);\n            }\n\n        $this->line('initData success!');\n\n    }\n\n    /**\n     * 初始化模块目录\n     * @param $module\n     */\n    public function initDirectory($module){\n        if($module){\n            SysModule::FirstOrCreate(['name'=>$module , 'symbol'=>strtolower($module),'displayorder'=>0,'version'=>'1.0','author'=>'MR.Z','status'=>1]);\n        }else{\n            $this->makeDir($module);\n            $this->line('initDirectory success!');\n        }\n        \n    }\n\n    /**\n     * 初始化控制器\n     * @param $module\n     */\n    public function initController($module){\n        //基类\n        $this->directory = app_path($module);\n        $base_path = 'Controllers/module.txt';\n        $content = $this->getContent($base_path ,['module' => $module]);\n        $this->makeDir('Controllers');\n        $this->laravel['files']->put( app_path($module).'/Controllers/'.$module.'.php' , $content);\n        $this->line('initController success!');\n\n    }\n\n    public function initExampleController($module){\n        $example_path = 'Controllers/index.txt';\n        $content = $this->getContent($example_path , ['module' => $module]);\n        $this->laravel['files']->put( app_path($module).'/Controllers/IndexController.php' , $content);\n        $this->line('initExampleController success!');\n    }\n\n    public function initMigration($module){\n        $this->makeDir('migrations');\n        $this->line('init migration success!');\n    }\n\n    public function initMiddleware($module){\n        $this->makeDir('middlewares');\n        $this->line('init middlewares success!');\n    }\n\n    public function initProviders($module){\n        $this->directory = app_path($module);\n        $this->makeDir('Providers');\n        $providers_path = 'providers/mainproviders.txt';\n        $content = $this->getContent($providers_path , ['module' =>  $module]);\n        $this->laravel['files']->put( app_path($module).'/Providers/MainProvider.php' , $content);\n        $this->line('init providers success!');\n    }\n\n\n    /**\n     * 初始化视图\n     * @param $module\n     */\n    public function initView($module){\n        $this->directory = app_path($module);\n        $this->makeDir('views');\n        $view_path = 'views/Index/index.txt';\n        $this->makeDir('views/Index');\n        $content = $this->getContent($view_path , ['module' =>  $module]);\n\n        $this->laravel['files']->put( app_path($module).'/views/Index/index.blade.php' , $content);\n        $this->line('initView success!');\n    }\n\n    /**\n     * 初始化模块路由文件\n     * @param $module\n     */\n    public function initRoutes($module){\n        $route_path = 'routes.txt';\n        $content  = $this->getContent($route_path , ['module' => $module]);\n        $this->laravel['files']->put(app_path($module).'/routes.php' , $content);\n        $this->line('initRoutes success!');\n\n    }\n\n    public function initConfig($module){\n        $config_path = 'config.txt';\n        $content  = $this->getContent($config_path , ['module' => $module]);\n        $this->laravel['files']->put(app_path($module).'/config.php' , $content);\n        $this->line('initConfig success!');\n    }\n\n    protected  function getContent($path , $param){\n        $template_path = __DIR__.'/../../templates/module/'.$path;\n        $tmp_content = $this->laravel['files']->get($template_path);\n        $param_keys = array_keys($param);\n        $param_keys = array_map(function($i){ return '{'.$i.'}';},$param_keys );\n\n        return str_replace( $param_keys , array_values($param) ,$tmp_content );\n\n\n    }\n\n    /**\n     * Make new directory.\n     *\n     * @param string $path\n     */\n    protected function makeDir($path = '')\n    {\n        $this->laravel['files']->makeDirectory(\"{$this->directory}/$path\", 0755, true, true);\n    }\n}\n\n"
  },
  {
    "path": "src/Console/UninstallCommand.php",
    "content": "<?php\n\nnamespace Smart\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\n\nclass UninstallCommand extends Command {\n\t/**\n\t * The name and signature of the console command.\n\t *\n\t * @var string\n\t */\n\tprotected $signature = 'smart:uninstall';\n\n\t/**\n\t * The console command description.\n\t *\n\t * @var string\n\t */\n\tprotected $description = '卸载laravel-smart !';\n\n\t/**\n\t * Create a new command instance.\n\t *\n\t * @return void\n\t */\n\tpublic function __construct() {\n\t\tparent::__construct();\n\t}\n\n\t/**\n\t * Execute the console command.\n\t *\n\t * @return mixed\n\t */\n\tpublic function handle() {\n\t\tif (!$this->confirm('你确认要卸载laravel-smart吗?')) {\n\t\t\treturn;\n\t\t}\n\n\t\tarray_map(function ($file) {\n\t\t\t$this->call('migrate:rollback');\n\t\t\t$this->laravel['files']->deleteDirectory(app_path($file));\n\t\t}, config('backend.directory'));\n\n\t\t$this->laravel['files']->deleteDirectory(public_path('smart'));\n\t\t$this->laravel['files']->delete(config_path('backend.php'));\n\t\t$this->info('卸载laravel-smart 成功!');\n\t\t//\n\t}\n}\n"
  },
  {
    "path": "src/Controllers/Backend/AuthController.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/16\n * Time: 13:31\n */\n\nnamespace Smart\\Controllers\\Backend;\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Http\\Request;\nuse Smart\\Service\\SysUserService;\nuse Illuminate\\Foundation\\Auth\\ResetsPasswords;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass AuthController extends Backend {\n\n\tuse ResetsPasswords;\n\n\tprotected $autoload_service = 0;\n\n\tpublic function __construct(Request $request){\n\t\tparent::__construct($request);\n\t\t$this->service = ServiceManager::make( SysUserService::class );\n\n\t}\n\n\tpublic function changePassword(Request $request){\n\t\t$password = $request->password;\n\t\t$id = Auth::id();\n\t\t$result = $this->service->resetPwd($id, $password);\n\n\t\treturn json($result);\n\t}\n}\n"
  },
  {
    "path": "src/Controllers/Backend/Backend.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: sl\n * Date: 2017/9/14\n * Time: 09:45\n */\nnamespace Smart\\Controllers\\Backend;\n\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\View\\View;\nuse Smart\\Service\\SysFuncService;\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Mp\\Facades\\Widget;\n\nclass Backend extends SysBase{\n\n    \n\n    public function __construct(Request $request)\n    {   \n        parent::__construct($request);\n        $this->middleware('auth');\n\n    }\n\n    \n\n    public function _init($pageTitle = '新页面'){\n        \n        parent::_init($pageTitle);\n\n        \n        $SysFuncService = ServiceManager::make(SysFuncService::class );\n\n\n      $this->user = Auth::user();\n    \n        $sysRole = $this->user->sysRole;\n        $roles = $sysRole->pluck('id')->toArray();\n\n        $menuData = [];\n\n        if(Auth::id() == config('backend.superAdminId')){\n            $menuData = $SysFuncService->getByCond(['isMenu' => 1, 'status' => 1, 'module' => $this->module]);\n        }else{\n            $menuData = $SysFuncService->getMenuByRole(\n                $roles,\n                ucfirst($this->module) );\n        }\n        $this->_addData('menuData',$menuData);\n        $this->_addData( 'user', $this->user );\n\n    }\n\n    public function _displayWithLayout( $view = 'index'){\n\n        return view($view)->with($this->data)->with('js' , $this->_makeJs())->with('css' , $this->_makeCss());\n    }\n}"
  },
  {
    "path": "src/Controllers/Backend/Generate.php",
    "content": "<?php\n/**\n * 代码生成 Controller\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/25\n * Time: 14:45\n */\n\nnamespace Smart\\Controllers\\Backend;\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Http\\Request;\nuse Smart\\Service\\GenerateService;\n\nclass Generate extends Backend {\n\t/**\n\t * 构造函数\n\t * Generate constructor.\n\t */\n\n\n\tpublic function index() {\n\n\t\t$this->_init('代码生成');\n\n\t\t$this->_addData('tables', $this->service->getTables());\n\n\t\t//uri\n\t\t$this->_addParam('uri', [\n\t\t\t'getSystemInfo' => full_uri('Backend/Generate/get_system_info'),\n\t\t\t'createSystem' => full_uri('Backend/Generate/create_system'),\n\t\t\t'createApi' => full_uri('Backend/Generate/create_api'),\n\t\t\t'destroySystemFile' => full_uri('Backend/Generate/destroy_system_file'),\n\t\t]);\n\t\t$modules = explode(',',config('backend.module_ext'));\n        $modules = array_combine($modules, $modules);\n\n\t\t$this->_addParam([\n\t\t\t'type' => $this->service->type,\n\t\t\t'module' => $this->service->module,\n\t\t\t'viewType' => $this->service->viewType,\n\t\t\t'tableType' => $this->service->tableType,\n\t\t\t'apiVer' => $this->service->apiVer,\n\t\t\t'apiParams' => $this->service->apiParams,\n\t\t\t'apiAuthUser' => $this->service->apiAuthUser,\n\t\t//\t'modules' => $modules,\n\t\t\t'systemDefault' => [\n\t\t\t\t'module' => 'Backend',\n\t\t\t\t'tableName' => $this->data['tables'][0]->tableName,\n\t\t\t],\n\t\t\t'systemComponentsDefault' => [\n\t\t\t\t'tableType' => 'grid',\n\t\t\t\t'viewType' => 'portlet',\n\t\t\t],\n\t\t\t'apiDefault' => [\n\t\t\t\t'apiVersion' => 'v1',\n\t\t\t\t'authUser' => '1',\n\t\t\t],\n\t\t]);\n\n\t\t//需要引入的 css 和 js\n\t\t$this->_addCssLib('node_modules/select2/dist/css/select2.min.css');\n\t\t$this->_addJsLib('node_modules/select2/dist/js/select2.min.js');\n\t\t$this->_addJsLib('node_modules/select2/dist/js/i18n/zh-CN.js');\n\n\t\treturn $this->_displayWithLayout('backend::generate.index');\n\t}\n\n\tfunction get_system_info(Request $request) {\n\t\t$type = $request->input('type');\n\t\t$tableName = $request->input('tableName');\n\t\t$module = $request->input('module');\n\n\t\t$Generate = GenerateService::instance();\n\n\t\t$result = [];\n\t\tif ($type == 'system') {\n\t\t\t$result = $Generate->getSystemInfo($tableName, $module, TRUE);\n\t\t}\n\n\t\treturn json($result);\n\t}\n\n\tfunction create_system(Request $request) {\n\t\t$data = $request->except('components._token');\n\n\t\t$result = $this->service->createSystem($data);\n\n\t\treturn json($result);\n\t} \n\n\tfunction create_api(Request $request) {\n\t\t$data = [\n\t\t\t'name' => $request->input('name'),\n\t\t\t'directory' => $request->input('directory'),\n\t\t\t'params' => $request->input('params'),\n\t\t\t'desc' => $request->input('desc'),\n\t\t\t'apiVersion' => $request->input('apiVersion'),\n\t\t\t'authUser' => $request->input('authUser'),\n\t\t];\n\n\t\t$result = $this->service->createApi($data);\n\n\t\treturn json($result);\n\t}\n\n\tfunction destroy_system_file(Request $request) {\n\t\t$temp = $request->input('temp');\n\t\t$tableName = $request->input('tableName');\n\t\t$module = $request->input('module');\n\n\t\t$result = $this->service->deleteSystemFile($module, $tableName, $temp);\n\n\t\treturn json($result);\n\t}\n\n}\n"
  },
  {
    "path": "src/Controllers/Backend/Index.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: sl\n * Date: 2017/9/14\n * Time: 10:18\n */\nnamespace Smart\\Controllers\\Backend;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\DB;\n\n\nclass Index extends Backend {\n\t\n\tprotected $autoload_service = 0;\n\n\tpublic function __construct(Request $request) {\n\t\tparent::__construct($request);\n\t\t\n            $jsCode = <<<EOF\n            {$this->controller}.init();\nEOF;\n\n            $this->_addJsCode($jsCode);\n\n\t}\n\n\tpublic function index(Request $request) {\n\t\t$this->_init('首页');\n \n\t\t$this->_addJsLib('node_modules/waypoints/lib/jquery.waypoints.min.js');\n\t\t$this->_addJsLib('node_modules/jquery.counterup/jquery.counterup.min.js');\n\t\t$this->_addJsLib('node_modules/echarts/dist/echarts.min.js');\n\n\t\t$stat = cache('stat');\n\t\tif (!$stat) {\n\t\t\t$stat = [\n\t\t\t\t'articles' => DB::table('mer_articles')->count(),\n\t\t\t\t'users' => DB::table('mer_user')->count('id'),\n\t\t\t\t'api' => DB::table('sys_api_log')->whereTime('created_at', '>', date('Y-m-d'))->count(),\n\t\t\t\t'download' => 0,\n\t\t\t];\n\t\t\tcache('stat', $stat, 300);\n\t\t}\n\n\t\t$charts = $this->_getCharts($stat);\n\n\t\t$this->_addData('stat', $stat);\n\t\t$this->_addParam('charts', $charts);\n\n\t\t$this->_addParam( 'uri', [\n\t\t\t\n\t\t\t'chPwd'       => full_uri( 'backend/auth/changepassword' ),\n\t\t\t\n\t\t] );\n\n\t\treturn $this->_displayWithLayout('backend::index.index');\n\n\t}\n\n\t/**\n\t * 获取图表数据\n\t *\n\t * @param $stat\n\t *\n\t * @return array\n\t */\n\tprivate function _getCharts($stat) {\n\t\t$data = DB::table('sys_statistics')->orderBy('created_at', 'ASC')->take(29)->get()->toArray();\n\n\t\t$period = [];\n\t\t$users = [];\n\t\t$api = [];\n\t\tforeach ($data as $item) {\n\t\t\t$item = get_object_vars($item);\n\t\t\t$period[] = substr($item['created_at'], 5, 5);\n\t\t\t$users[] = $item['users_today'];\n\t\t\t$api[] = $item['api'];\n\t\t}\n\n\t\t$period[] = date('m-d');\n\t\t$users[] = DB::table('mer_user')->whereDate('reg_at', '>', date('Y-m-d'))->count();\n\t\t$api[] = $stat['api'];\n\n\t\treturn [\n\t\t\t'users' => [\n\t\t\t\t'period' => $period,\n\t\t\t\t'data' => $users,\n\t\t\t],\n\t\t\t'api' => [\n\t\t\t\t'period' => $period,\n\t\t\t\t'data' => $api,\n\t\t\t],\n\t\t];\n\t}\n\n}"
  },
  {
    "path": "src/Controllers/Backend/MerAlbum.php",
    "content": "<?php namespace Smart\\Controllers\\Backend;\n/**\n * MerAlbum Controller\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2017-11-28\n */\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Http\\Request;\nuse Smart\\Service\\MerAlbumService;\nuse Smart\\Service\\MerAlbumCatalogService;\nuse Smart\\Controllers\\Backend\\Backend;\n\n\nclass MerAlbum extends Backend{\n\n\t/**\n\t * MerAlbum constructor.\n\t */\n\n\n\t//页面入口\n\tpublic function index(Request $request ) {\n        $id = $request->route('id');\n        $albums = $this->service->getModel()->find($id);\n\t\t$this->_init( 'MerAlbum' );\n\n\t\t//uri\n\t\t$this->_addParam( 'uri', [\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t] );\n\n\t\t//查询参数\n\t\t$this->_addParam( 'query', [\n\t\t\t'keyword'  => $request->input( 'keyword', '' ),\n\t\t\t'status'   => $request->input( 'status', '' ),\n\t\t\t'page'     => $request->input( 'page', 1 ),\n\t\t\t'pageSize' => $request->input( 'pageSize', 10 ),\n            'sort'     => $request->input( 'sort', 'id' ),\n            'order'    => $request->input( 'order', 'DESC' ),\n\t\t] );\n\n    \n\n\t\t//其他参数\n\t\t$this->_addParam( [\n\t\t\t'defaultRow' => $this->service->getDefaultRow() ,\n\t\t\t'status' => $this->service->status ,\n\t\t] );\n\n\t\t//需要引入的 css 和 js\n\t\t\n\t\t\n\t\t\n\t\t\n\n\t\t$this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' );\n        $this->_addJsLib( 'static/plugins/dmg-ui/Uploader.js' );\n\n\t\treturn $this->_displayWithLayout('backend::MerAlbum.index');\n\t}\n\n    /**\n     * 读取\n     * @return response->Json\n     */\n    public function read(Request $request) {\n      $config = [\n        'status'   => $request->input( 'status', '' ),\n        'keyword'  => $request->input( 'keyword', '' ),\n        'page'     => $request->input( 'page', 1 ),\n        'pageSize' => $request->input( 'pageSize', 10 ),\n        'sort'     => $request->input( 'sort', 'id' ),\n        'order'    => $request->input( 'order', 'DESC' ),\n      ];\n\n      $data['rows']    = $this->service->getByCond( $config );\n      $config['count'] = TRUE;\n      $data['total']   = $this->service->getByCond( $config );\n\n      return json(ajax_arr( '查询成功', 0, $data ) );\n    }\n\n\n    public function upload(Request $request){\n        $param          = $request->all( );\n        $param['isKE']  = $request->input( 'isKE' , 0 );\n        $param['merId'] = $this->merId;\n\n        $Upload = ServiceManager::make( UploadService::class );\n\n        return json( $Upload->doUpload( $param ) );\n    }\n\n    public function read_album(Request $request){\n        $MerAlbum = MerAlbumService::instance();\n\n        $config = [\n            'field'    => [ 'id' , 'uri' , 'mimes' , 'desc' , 'img_size' ] ,\n            'merId'    => $this->merId ,\n            'catalog'  => $request->input( 'catalog' , '' ) ,\n            'sort'     => 'id' ,\n            'order'    => 'DESC' ,\n            'status'   => 1 ,\n            'page'     => $request->input( 'page' , 1 ) ,\n            'pageSize' => $request->input( 'pageSize' , 12 ) ,\n        ];\n\n        $result['rows']  = $MerAlbum->getByCond( $config );\n        $config['count'] = TRUE;\n        $result['total'] = $MerAlbum->getByCond( $config );\n\n        return json( $result );\n    }\n\n    /**\n     * 取相册分类\n     *\n     * @return Json\n     */\n    public function read_album_catalog() {\n        $MerAlbumCatalog = MerAlbumCatalogService::instance();\n        $result          = $MerAlbumCatalog->getByCond( [\n            'field'  => [ 'id' , 'tag' ] ,\n            'merId'  => $this->merId ,\n            'sort'   => 'sort' ,\n            'order'  => 'ASC' ,\n            'status' => 1 ,\n            'getAll' => TRUE\n        ] );\n\n        return  json( $result );\n    }\n\n\n\n\t\n\n}"
  },
  {
    "path": "src/Controllers/Backend/MerAlbumCatalog.php",
    "content": "<?php namespace Smart\\Controllers\\Backend;\n/**\n * MerAlbumCatalog Controller\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2017-11-28\n */\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Http\\Request;\nuse Smart\\Service\\MerAlbumCatalogService;\nuse Smart\\Controllers\\Backend\\Backend;\n\nclass MerAlbumCatalog extends Backend {\n\n\t/**\n\t * MerAlbumCatalog constructor.\n\t */\n\n\n\t//页面入口\n\tpublic function index(Request $request) {\n\t\t$this->_init( 'MerAlbumCatalog' );\n\n\t\t//uri\n\t\t$this->_addParam( 'uri', [\n\t\t\t'upload'       => full_uri( 'backend/meralbumcatalog/upload' ),\n'albumCatalog' => full_uri( 'backend/meralbumcatalog/read_album_catalog' ),\n'album'        => full_uri( 'backend/meralbum/index' ),\n\t\t\t\n\t\t\t\n\t\t] );\n\n\t\t//查询参数\n\t\t$this->_addParam( 'query', [\n\t\t\t'keyword'  => $request->input( 'keyword', '' ),\n\t\t\t'status'   => $request->input( 'status', '' ),\n\t\t\t'page'     => $request->input( 'page', 1 ),\n\t\t\t'pageSize' => $request->input( 'pageSize', 10 ),\n            'sort'     => $request->input( 'sort', 'id' ),\n            'order'    => $request->input( 'order', 'DESC' ),\n\t\t] );\n\n    //上传参数\n$this->_addParam('uploadParam' , [\n  'width'       => 300 ,\n  'height'      => 300 ,\n  'saveAsAlbum' => TRUE,\n  'albumTag'    => '默认相册',\n]);\n\n//相册参数\n$this->_addParam( 'albumParam', [\n  'defaultTag' => '默认相册',\n  'pageSize'   => 12,\n] );\n\n\t\t//其他参数\n\t\t$this->_addParam( [\n\t\t\t'defaultRow' => $this->service->getDefaultRow() ,\n\t\t\t'status' => $this->service->status ,\n\t\t] );\n\n\t\t//需要引入的 css 和 js\n\t\t\n\t\t\n\t\t$this->_addCssLib('node_modules/jcrop-0.9.12/css/jquery.Jcrop.min.css');\n$this->_addJsLib('node_modules/jcrop-0.9.12/js/jquery.Jcrop.min.js');\n$this->_addJsLib( 'static/plugins/dmg-ui/Uploader.js' );\n\t\t\n\n\t\t$this->_addJsLib( 'static/plugins/dmg-ui/tiles.js' );\n    \n\n\t\treturn $this->_displayWithLayout('backend::MerAlbumCatalog.index');\n\t}\n\n\t/**\n * 读取\n * @return response->Json\n */\npublic function read(Request $request) {\n  $config = [\n    'status'   => $request->input( 'status', '' ),\n    'keyword'  => $request->input( 'keyword', '' ),\n    'page'     => $request->input( 'page', 1 ),\n    'pageSize' => $request->input( 'pageSize', 10 ),\n    'sort'     => $request->input( 'sort', 'id' ),\n    'order'    => $request->input( 'order', 'DESC' ),\n  ];\n\n  $data['rows']    = $this->service->getByCond( $config );\n  $config['count'] = TRUE;\n  $data['total']   = $this->service->getByCond( $config );\n\n  return json(ajax_arr( '查询成功', 0, $data ) );\n}\n\n\n\n\n}"
  },
  {
    "path": "src/Controllers/Backend/MerAlbumTag.php",
    "content": "<?php namespace Smart\\Controllers\\Backend;\n/**\n * MerAlbumTag Controller\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2017-11-28\n */\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Http\\Request;\nuse Smart\\Service\\MerAlbumTagService;\nuse Smart\\Controllers\\Backend\\Backend;\n\nclass MerAlbumTag extends Backend {\n\n\t/**\n\t * MerAlbumTag constructor.\n\t */\n\n\n\t//页面入口\n\tpublic function index(Request $request) {\n\t\t$this->_init( 'MerAlbumTag' );\n\n\t\t//uri\n\t\t$this->_addParam( 'uri', [\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t] );\n\n\t\t//查询参数\n\t\t$this->_addParam( 'query', [\n\t\t\t'keyword'  => $request->input( 'keyword', '' ),\n\t\t\t'status'   => $request->input( 'status', '' ),\n\t\t\t'page'     => $request->input( 'page', 1 ),\n\t\t\t'pageSize' => $request->input( 'pageSize', 10 ),\n            'sort'     => $request->input( 'sort', 'id' ),\n            'order'    => $request->input( 'order', 'DESC' ),\n\t\t] );\n\n    \n\n\t\t//其他参数\n\t\t$this->_addParam( [\n\t\t\t'defaultRow' => $this->service->getDefaultRow() ,\n\t\t\t'status' => $this->service->status ,\n\t\t] );\n\n\t\t//需要引入的 css 和 js\n\t\t\n\t\t\n\t\t\n\t\t\n\n\t\t$this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' );\n    \n\n\t\treturn $this->_displayWithLayout('Backend::MerAlbumTag.index');\n\t}\n\n\t/**\n * 读取\n * @return response->Json\n */\npublic function read(Request $request) {\n  $config = [\n    'status'   => $request->input( 'status', '' ),\n    'keyword'  => $request->input( 'keyword', '' ),\n    'page'     => $request->input( 'page', 1 ),\n    'pageSize' => $request->input( 'pageSize', 10 ),\n    'sort'     => $request->input( 'sort', 'id' ),\n    'order'    => $request->input( 'order', 'DESC' ),\n  ];\n\n  $data['rows']    = $this->service->getByCond( $config );\n  $config['count'] = TRUE;\n  $data['total']   = $this->service->getByCond( $config );\n\n  return json(ajax_arr( '查询成功', 0, $data ) );\n}\n\t\n\n}"
  },
  {
    "path": "src/Controllers/Backend/MerFunc.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/21\n * Time: 15:49\n */\n\nnamespace Smart\\Controllers\\Backend;\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Smart\\Service\\SysFuncPrivilegeService;\nuse Smart\\Service\\SysFuncService;\nuse Illuminate\\Http\\Request;\n\nclass MerFunc extends Backend {\n    \n    /**\n     * MerFunc constructor.\n     */\n\n    public $autoload_service = 0;\n\n    public $controller = 'SysFunc';\n\n    public function __construct(Request $request){\n        parent::__construct($request);\n        $this->service = ServiceManager::make( \\Smart\\Service\\SysFuncService::class );\n\n        $jsCode = <<<EOF\n            {$this->controller}.init();\nEOF;\n\n            $this->_addJsCode($jsCode);\n    }\n\n    //页面入口\n    public function index(Request $request) {\n        $this->_init( '机构功能' );\n\n        //uri\n        $this->_addParam( 'uri', [\n            'updatePrivilege' => full_uri( 'Backend/MerFunc/update_privilege', [ 'funcId' => '' ] ),\n        ] );\n\n        $modules = explode(',',config('backend.module_ext'));\n        $modules = array_combine($modules, $modules);\n\n        //查询参数\n        $this->_addParam( 'query', [\n            'keyword'  => $request->input( 'keyword', '' ),\n            'status'   => $request->input( 'status', '' ),\n            'page'     => $request->input( 'page', 1 ),\n            'pageSize' => $request->input( 'pageSize', 10 ),\n            'sort'     => $request->input( 'sort', 'id' ),\n            'order'    => $request->input( 'order', 'DESC' ),\n        ] );\n\n        //其他参数\n        $SysFuncPrivilege = ServiceManager::make( SysFuncPrivilegeService::class );\n        $this->_addParam( [\n            'defaultRow' => $this->service->getDefaultRow(),\n            'module'     => '',\n            'status'     => $this->service->status,\n            'isMenu'     => $this->service->isMenu,\n            'isFunc'     => $this->service->isFunc,\n            'privilege'  => $SysFuncPrivilege->name,\n            'alias'      => $SysFuncPrivilege->alias,\n            'modules'     => $modules,\n\n        ] );\n\n        //需要引入的 css 和 js\n        $this->_addJsLib( 'static/plugins/dmg-ui/TreeGrid.js' );\n\n        return $this->_displayWithLayout('backend::merfunc.index');\n    }\n\n\n    /**\n     * 读取\n     * @return \\Json\n     */\n    function read(Request $request) {\n        $module = $request->module ?: explode(',',config('backend.module_ext'));\n        \n        $config = [\n            'module'        => $module ,\n            'page'     => $request->input( 'page', 1 ),\n            'pageSize' => $request->input( 'pageSize', 10 ),\n            'sort'          => $request->input( 'sort', 'id' ),\n            'order'         => $request->input( 'order', 'DESC' ),\n            'withPrivilege' => TRUE\n        ];\n\n        $data['rows']    = $this->service->getByCond( $config );\n        $config['count'] = TRUE;\n        $data['total']   = $this->service->getByCond( $config );\n\n        return json( ajax_arr( '查询成功', 0, $data ) );\n    }\n\n    /**\n     * 更新权限\n     *\n     * @return \\Json\n     */\n    function update_privilege(Request $request , $funcId) {\n\n        $data   = $request->except( '_token' );\n\n        $SysFuncPrivilege = SysFuncPrivilegeService::instance();\n        $ret              = $SysFuncPrivilege->updateByFunc( $funcId, $data );\n\n        return json( $ret );\n    }\n\n}"
  },
  {
    "path": "src/Controllers/Backend/MerGoodsCatalog.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/21\n * Time: 09:33\n */\n\nnamespace Smart\\Controllers\\Backend;\n\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Smart\\Service\\MerGoodsCatalogService;\nuse Illuminate\\Http\\Request;\n\nclass MerGoodsCatalog extends Backend {\n\n    /**\n     * MerGoodsCatalog constructor.\n     */\n\n\n    //页面入口\n    public function index(Request $request) {\n        $this->_init( 'MerGoodsCatalog' );\n\n        //uri\n        $this->_addParam( 'uri' , [\n            'upload'       => full_uri( 'backend/mergoodscatalog/upload' ) ,\n            'albumCatalog' => full_uri( 'backend/mergoodscatalog/read_album_catalog' ) ,\n            'album'        => full_uri( 'backend/mergoodscatalog/read_album' ) ,\n\n\n        ] );\n\n        //查询参数\n        $this->_addParam( 'query' , [\n            'keyword'  => $request->input( 'keyword' , '' ) ,\n            'status'   => $request->input( 'status' , '' ) ,\n            'page'     => $request->input( 'page' , 1 ) ,\n            'pageSize' => $request->input( 'pageSize' , 10 ) ,\n            'sort'     => $request->input( 'sort' , 'id' ) ,\n            'order'    => $request->input( 'order' , 'DESC' ) ,\n        ] );\n\n        //上传参数\n        $this->_addParam( 'uploadParam' , [\n            'width'       => 300 ,\n            'height'      => 300 ,\n            'saveAsAlbum' => TRUE ,\n            'albumTag'    => '图标' ,\n        ] );\n\n//相册参数\n        $this->_addParam( 'albumParam' , [\n            'defaultTag' => '图标' ,\n            'pageSize'   => 12 ,\n        ] );\n\n        //其他参数\n        $this->_addParam( [\n            'defaultRow' => $this->service->getDefaultRow() ,\n            'status'     => $this->service->status ,\n            'type'       => $this->service->type\n        ] );\n\n        //需要引入的 css 和 js\n\n\n        $this->_addCssLib( 'node_modules/jcrop-0.9.12/css/jquery.Jcrop.min.css' );\n        $this->_addJsLib( 'node_modules/jcrop-0.9.12/js/jquery.Jcrop.min.js' );\n        $this->_addJsLib( 'static/plugins/dmg-ui/Uploader.js' );\n\n\n        $this->_addJsLib( 'static/plugins/dmg-ui/TreeGrid.js' );\n\n        return $this->_displayWithLayout('backend::mergoodscatalog.index');\n    }\n\n\n    /**\n     * 读取\n     * @return \\Json\n     */\n    public function read(Request $request) {\n        $config = [\n            'status'  => $request->input( 'status' , '' ) ,\n            'keyword' => $request->input( 'keyword' , '' ) ,\n            'sort'    => $request->input( 'sort' , 'id' ) ,\n            'order'   => $request->input( 'order' , 'DESC' ) ,\n        ];\n\n        $data['rows'] = $this->service->getByCond( $config );\n\n        return json( ajax_arr( '查询成功' , 0 , $data ) );\n    }\n\n}"
  },
  {
    "path": "src/Controllers/Backend/MerRole.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/21\n * Time: 15:49\n */\n namespace Smart\\Controllers\\Backend;\n\n\n use Facades\\Smart\\Service\\ServiceManager;\nuse Smart\\Service\\SysFuncPrivilegeService;\nuse Smart\\Service\\SysFuncService;\nuse Smart\\Service\\SysRolePermissionService;\nuse Smart\\Service\\SysRoleService;\nuse Illuminate\\Http\\Request;\n\n\nclass MerRole extends Backend {\n\n    /**\n     * SysRole constructor.\n     */\n    protected $autoload_service = false;\n\n    public $controller = 'SysRole';\n\n    public function __construct(Request $request){\n        parent::__construct($request);\n        $this->service = ServiceManager::make( \\Smart\\Service\\SysRoleService::class );\n        $jsCode = <<<EOF\n            {$this->controller}.init();\nEOF;\n\n            $this->_addJsCode($jsCode);\n    }\n\n    //页面入口\n    public function index(Request $request) {\n        $this->_init( '机构角色管理' );\n\n        //uri\n        $this->_addParam( 'uri', [\n            'getPermission'    => full_uri( 'backend/merrole/get_permission' ),\n            'getPrivilegeData' => full_uri( 'backend/merrole/get_privilegeData'),\n            'updatePermission' => full_uri( 'backend/merrole/update_permission' )\n        ] );\n\n        $modules = explode(',',config('backend.module_ext'));\n        $modules = array_combine($modules, $modules);\n\n        //查询参数\n        $this->_addParam( 'query', [\n            'keyword'  => $request->input( 'keyword', '' ),\n            'status'   => $request->input( 'status', '' ),\n            'page'     => $request->input( 'page', 1 ),\n            'pageSize' => $request->input( 'pageSize', 10 ),\n            'sort'     => $request->input( 'sort', 'id' ),\n            'order'    => $request->input( 'order', 'DESC' ),\n        ] );\n\n\n        //其他参数\n        $this->_addParam( [\n            'defaultRow' => $this->service->getDefaultRow(),\n            'status'     => $this->service->status,\n            'rank'       => $this->service->rank,\n            'modules'    => $modules,   \n        ] );\n\n        //需要引入的 css 和 js\n        $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' );\n\n\n        return $this->_displayWithLayout('backend::merrole.index');\n    }\n\n    //读取\n    function read(Request $request) {\n        $param = [\n            'status'   => $request->input( 'status', '' ),\n            'keyword'  => $request->input( 'keyword', '' ),\n            'page'     => $request->input( 'page', 1 ),\n            'pageSize' => $request->input( 'pageSize', 10 ),\n            'sort'     => $request->input( 'sort', 'id' ),\n            'order'    => $request->input( 'order', 'DESC' ),\n            'module'   => $request->input( 'module', '' ),\n        ];\n\n        $data['rows']   = $this->service->getByCond( $param );\n        $param['count'] = TRUE;\n        $data['total']  = $this->service->getByCond( $param );\n\n        return json( ajax_arr( '查询成功', 0, $data ) );\n    }\n\n    /**\n     * 新建\n     *\n     * @return \\Json\n     */\n    public function insert(Request $request) {\n        $data = $request->except( '_token' );\n        $data['module'] = $request->module;\n\n        return json( $this->service->insert( $data ) );\n    }\n\n    function get_permission(Request $request) {\n        $roleId = $request->input( 'roleId' );\n        $role = $this->service->getById($roleId);\n\n        $SysFuncPrivilege      = SysFuncPrivilegeService::instance();\n        $data['privilegeName'] = $SysFuncPrivilege->name;\n        //取角色操作权限\n        $SysRolePermission    = SysRolePermissionService::instance();\n        $ret['privilegeData'] = $SysRolePermission->getByRole( $roleId );\n\n        //取所有功能与操作\n        $SysFunc          = SysFuncService::instance();\n        $data['funcData'] = $SysFunc->getByCond( [\n            'module'        => $role->module,\n            'status'        => 1,\n            'withPrivilege' => TRUE,\n        ] );\n\n        return view('backend::merrole.permission')->with($data);\n    }\n\n    function get_privilegeData(Request $request){\n        $roleId = $request->input( 'roleId' );\n        $SysRolePermission    = SysRolePermissionService::instance();\n        return response()->json($SysRolePermission->getByRole( $roleId ));\n    }\n\n    //更新授权\n    function update_permission(Request $request) {\n        $roleId       = $request->input( 'roleId' );\n        $privilegeArr = $request->input( 'privilegeArr' );\n\n        $SysRolePermission = SysRolePermissionService::instance();\n        $ret               = $SysRolePermission->updateRolePermission( $roleId, $privilegeArr );\n\n        return json( $ret );\n    }\n\n\n}"
  },
  {
    "path": "src/Controllers/Backend/MerSysUser.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/21\n * Time: 13:31\n */\n\nnamespace Smart\\Controllers\\Backend;\n\nuse Smart\\Service\\MerSysUserService;\nuse Smart\\Service\\SysRoleService;\nuse Smart\\Service\\SysUserService;\nuse Illuminate\\Http\\Request;\nuse Facades\\Smart\\Service\\ServiceManager;\n\nclass MerSysUser extends Backend {\n\n    /**\n     * SysMerUser constructor.\n     */\n\n\n    /**\n     * 页面显示接口\n     *\n     * @return string\n     */\n    public function index(Request $request , $merId = 0) {\n        $merId = $merId ?: $request->input('merId');\n        $this->_init( '系统用户' );\n\n        $this->_addParam( 'uri' , [\n            'menu'         => '/backend/sysmerchant/index' ,\n            'insert'       => full_uri( 'backend/mersysuser/insert' , [ 'merId' => $merId ] ) ,\n            'destroy'      => full_uri( 'backend/mersysuser/destroy' , [ 'merId' => $merId ] ) ,\n            'upload'       => full_uri( 'backend/mersysuser/upload' ) ,\n            'resetPwd'     => full_uri( 'backend/mersysuser/reset_pwd' , [ 'id' => '' ] ) ,\n            'albumCatalog' => full_uri( 'backend/mersysuser/read_album_catalog' ) ,\n            'album'        => full_uri( 'backend/mersysuser/read_album' ) ,\n        ] );\n\n        //上传参数\n        $this->_addParam( 'uploadParam' , [\n            'width'       => 300 ,\n            'height'      => 300 ,\n            'saveAsAlbum' => TRUE ,\n            'albumTag'    => '头像' ,\n        ] );\n\n        //相册参数\n        $this->_addParam( 'albumParam' , [\n            'defaultTag' => '头像' ,\n            'pageSize'   => 12 ,\n        ] );\n\n        //查询参数\n        $this->_addParam( 'query' , [\n            'merId'    => $merId ,\n            'keyword'  => $request->input( 'keyword' , '' ) ,\n            'status'   => $request->input( 'status' , '' ) ,\n            'page'     => $request->input( 'page' , 1 ) ,\n            'pageSize' => $request->input( 'pageSize' , 10 ) ,\n        ] );\n\n        $SysRole = SysRoleService::instance();\n        //附加参数\n        $this->_addParam( [\n            'defaultRow' => $this->service->getDefaultRow() ,\n            'defaultPwd' => config( 'backend.defaultPwd' ) ,\n            'status'     => $this->service->status ,\n            'roles'      => $SysRole->getByModule( 'mp' )\n        ] );\n\n        $this->_addCssLib( 'node_modules/jcrop-0.9.12/css/jquery.Jcrop.min.css' );\n        $this->_addJsLib( 'node_modules/jcrop-0.9.12/js/jquery.Jcrop.min.js' );\n        $this->_addJsLib( 'static/plugins/dmg-ui/Uploader.js' );\n        $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' );\n\n        return $this->_displayWithLayout('backend::mersysuser.index');\n    }\n\n    /**\n     * 读取\n     */\n    public function read(Request $request) {\n        $config = [\n            'module'    => 'mp' ,\n            'merId'     => $request->input( 'merId' , '' ) ,\n            'keyword'   => $request->input( 'keyword' , '' ) ,\n            'status'    => $request->input( 'status' , '' ) ,\n            'page'      => $request->input( 'page' , 1 ) ,\n            'pageSize'  => $request->input( 'pageSize' , 10 ) ,\n            'withRoles' => TRUE ,\n            'merchant'  => TRUE\n        ];\n\n        $data['rows']    = $this->service->getByCond( $config );\n        $config['count'] = TRUE;\n        $data['total']   = $this->service->getByCond( $config );\n\n        return json( ajax_arr( '查询成功' , 0 , $data ) );\n    }\n\n    public function insert(Request $request) {\n        $merId          = $request->route('merId');\n        $data           = $request->except( '_token' );\n        $data['module'] = 'mp';\n        $MerSysUser     = MerSysUserService::instance();\n        $result         = $MerSysUser->insert( $merId , $data );\n\n        return json( $result );\n    }\n\n\n    public function update(Request $request , $id) {\n\n        $data = $request->except( '_token' );\n\n        $MerSysUser = MerSysUserService::instance();\n        $result     = $MerSysUser->update( $id , $data );\n\n        return json( $result );\n    }\n\n    public function destroy(Request $request) {\n        $merId = $request->route( 'merId' );\n        $ids   = $request->input( 'ids' );\n\n        $MerSysUser = MerSysUserService::instance();\n        $result     = $MerSysUser->destroy( $merId , $ids );\n\n        return json( $result );\n    }\n\n    /**\n     * 重置密码\n     *\n     * @return Json\n     */\n    public function reset_pwd(Request $request , $id) {\n\n        $result = $this->service->resetPwd( $id , config( 'backend.defaultPwd' ) );\n\n        return json( $result );\n    }\n}\n"
  },
  {
    "path": "src/Controllers/Backend/MerUser.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/16\n * Time: 13:31\n */\n\nnamespace Smart\\Controllers\\Backend;\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Http\\Request;\nuse Smart\\Models\\SysUser as SysUserModel;\nuse Smart\\Service\\SysRoleService;\nuse Smart\\Service\\SysUserService;\nuse Smart\\Service\\SysUserDeviceService;\n\nclass MerUser extends Backend {\n\n    /**\n     * SysUser constructor.\n     */\n\n\n    /**\n     * 页面显示接口\n     *\n     * @return string\n     */\n    public function index(Request $request) {\n        $this->_init('系统用户');\n\n        $this->_addParam('uri', [\n            'upload' => full_uri('backend/meruser/upload'),\n            'resetPwd' => full_uri('backend/meruser/reset_pwd', ['id' => '']),\n            'albumCatalog' => full_uri('backend/meruser/read_album_catalog'),\n            'album' => full_uri('backend/meruser/read_album'),\n            'test' => full_uri('backend/meruser/test'),\n\n            'merRoleRead' => full_uri('backend/merrole/read'),\n        ]);\n\n        $modules = explode(',',config('backend.module_ext'));\n        $modules = array_combine($modules, $modules);\n\n        //上传参数\n        $this->_addParam('uploadParam', [\n            'width' => 300,\n            'height' => 300,\n            'saveAsAlbum' => TRUE,\n            'albumTag' => '头像',\n        ]);\n\n        //相册参数\n        $this->_addParam('albumParam', [\n            'defaultTag' => '头像',\n            'pageSize' => 12,\n        ]);\n\n        //查询参数\n        $this->_addParam('query', [\n            'module'    => $request->input('module', ''),\n            'keyword' => $request->input('keyword', ''),\n            'status' => $request->input('status', ''),\n            'page' => $request->input('page', 1),\n            'pageSize' => $request->input('pageSize', 10),\n        ]);\n\n\n        $SysRole = SysRoleService::instance();\n        $sysUserDevice = SysUserDeviceService::instance();\n        $module = $request->input('module') ?? 'backend';\n        \n        //附加参数\n        $this->_addParam([\n            'defaultRow' => $this->service->getDefaultRow(),\n            'defaultPwd' => config('backend.defaultPwd'),\n            'status' => $this->service->status,\n            'roles' => $SysRole->getByModule($module),\n            'for_test' => $sysUserDevice->for_test,\n            'modules'    => $modules,  \n\n        ]);\n\n\n        $this->_addCssLib('node_modules/jcrop-0.9.12/css/jquery.Jcrop.min.css');\n        $this->_addJsLib('node_modules/jcrop-0.9.12/js/jquery.Jcrop.min.js');\n        $this->_addJsLib('static/plugins/dmg-ui/Uploader.js');\n        $this->_addJsLib('static/plugins/dmg-ui/TableGrid.js');\n\n        return $this->_displayWithLayout('backend::meruser.index');\n    }\n\n    /**\n     * 读取\n     */\n    public function read(Request $request) {\n        $config = [\n            'module' => $request->input('module', ''),\n            'keyword' => $request->input('keyword', ''),\n            'status' => $request->input('status', ''),\n            'page' => $request->input('page', 1),\n            'pageSize' => $request->input('pageSize', 10),\n            'withRoles' => TRUE,\n            'withTest' => TRUE,\n        ];\n\n        $data['rows'] = $this->service->getByCond($config);\n        $config['count'] = TRUE;\n        $data['total'] = $this->service->getByCond($config);\n\n        return response()->json(ajax_arr('查询成功', 0, $data));\n    }\n\n    public function test(Request $request) {\n        $id = $request->id;\n        $sysuser = SysUserModel::with('UserDevice')->find($id);\n        $for_test = $request->input('for_test');\n        if ($for_test) {\n            $sysuser->api_token = md5(http_build_query($request->all()) . json_encode(['created_at' => time()]));\n            $sysuser->save();\n        }\n\n        $data = [\n            'device' => 'iphone',\n            'api_version' => 'v1',\n            'for_test' => $for_test,\n        ];\n\n        if (empty($sysuser->UserDevice)) {\n            $result = $sysuser->UserDevice()->create($data);\n            $msg = '新增成功';\n        } else {\n            $sysuser->UserDevice->for_test = $for_test;\n            $sysuser->UserDevice->save();\n            $msg = '更新成功';\n        }\n        return json(ajax_arr($msg, 0));\n    }\n\n    /**\n     * 重置密码\n     *\n     * @return json\n     */\n    public function reset_pwd($id) {\n\n        $result = $this->service->resetPwd($id, config('backend.defaultPwd'));\n\n        return json($result);\n    }\n}\n"
  },
  {
    "path": "src/Controllers/Backend/ModuleFunc.php",
    "content": "<?php namespace Smart\\Controllers\\Backend;\n/**\n * SysFunc Controller\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2018-06-15\n */\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Route;\nuse Smart\\Service\\SysFuncPrivilegeService;\nuse Smart\\Service\\SysFuncService;\nuse Smart\\Service\\SysModuleService;\n\nclass ModuleFunc extends Backend {\n\n\t/**\n\t * SysFunc constructor.\n\t */\n\n\n\t//页面入口\n\tpublic function index(Request $request) {\n\n\t\t$this->_init('系统功能');\n\n\t\t//uri\n\t\t$this->_addParam('uri', [\n\t\t\t'updatePrivilege' => full_uri('Backend/SysFunc/update_privilege', ['funcId' => '']),\n\t\t]);\n\t\t//查询参数\n\t\t$this->_addParam('query', [\n\t\t\t'id' => $request->input('id', ''),\n\t\t\t'keyword' => $request->input('keyword', ''),\n\t\t\t'status' => $request->input('status', ''),\n\t\t\t'page' => $request->input('page', 1),\n\t\t\t'pageSize' => $request->input('pageSize', 10),\n\t\t\t'sort' => $request->input('sort', 'id'),\n\t\t\t'order' => $request->input('order', 'DESC'),\n\t\t]);\n\n\t\t$sysModule = ServiceManager::make(SysModuleService::class);\n\t\t$module = $sysModule->getById($request->input('id', ''));\n\t\t//其他参数\n\t\t$SysFuncPrivilege = SysFuncPrivilegeService::instance();\n\t\t$this->_addParam([\n\t\t\t'defaultRow' => array_merge($this->service->getDefaultRow(), ['module' => $module->symbol]),\n\t\t\t'status' => $this->service->status,\n\t\t\t'isMenu' => $this->service->isMenu,\n\t\t\t'isFunc' => $this->service->isFunc,\n\t\t\t'privilege' => $SysFuncPrivilege->name,\n\t\t\t'alias' => $SysFuncPrivilege->alias,\n\t\t\t'module_name' => $module->symbol,\n\t\t\t'nav' => Route::currentRouteName(),\n\t\t\t'func_uri' => route('backend.modulefunc.index', ['id' => $request->input('id', '')]),\n\t\t\t'role_uri' => route('backend.modulerole.index', ['id' => $request->input('id', '')]),\n\t\t]);\n\n\t\t//需要引入的 css 和 js\n\t\t$this->_addJsLib('static/plugins/dmg-ui/TreeGrid.js');\n\n\t\treturn $this->_displayWithLayout('backend::ModuleFunc.index');\n\t}\n\n\t/**\n\t * 读取\n\t * @return response->Json\n\t */\n\tpublic function read(Request $request) {\n\t\t$module_name = ServiceManager::make(SysModuleService::class)->getById($request->input('id'))->symbol;\n\t\t$config = [\n\t\t\t'module' => $module_name,\n\t\t\t'status' => $request->input('status', ''),\n\t\t\t'keyword' => $request->input('keyword', ''),\n\t\t\t'sort' => $request->input('sort', 'id'),\n\t\t\t'order' => $request->input('order', 'DESC'),\n\t\t\t'withPrivilege' => TRUE,\n\t\t];\n\n\t\t$data['rows'] = $this->service->getByCond($config);\n\n\t\treturn json(ajax_arr('查询成功', 0, $data));\n\t}\n\n}"
  },
  {
    "path": "src/Controllers/Backend/ModuleRole.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: sl\n * Date: 2017/9/14\n * Time: 10:18\n */\nnamespace Smart\\Controllers\\Backend;\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Route;\nuse Smart\\Service\\SysFuncPrivilegeService;\nuse Smart\\Service\\SysFuncService;\nuse Smart\\Service\\SysModuleService;\nuse Smart\\Service\\SysRolePermissionService;\nuse Smart\\Service\\SysRoleService;\n\nclass ModuleRole extends Backend {\n\t/**\n\t * SysRole constructor.\n\t */\n\n\n\t//页面入口\n\tpublic function index(Request $request) {\n\t\t$this->_init('模块角色管理');\n\n\t\t//uri\n\t\t$this->_addParam('uri', [\n\t\t\t'getPermission' => full_uri('backend/sysrole/get_permission'),\n\t\t\t'getPrivilegeData' => full_uri('backend/sysrole/get_privilegeData'),\n\t\t\t'updatePermission' => full_uri('backend/sysrole/update_permission'),\n\t\t]);\n\n\t\t//查询参数\n\t\t$this->_addParam('query', [\n\t\t\t'id' => $request->input('id', ''),\n\t\t\t'keyword' => $request->input('keyword', ''),\n\t\t\t'status' => $request->input('status', ''),\n\t\t\t'page' => $request->input('page', 1),\n\t\t\t'pageSize' => $request->input('pageSize', 10),\n\t\t\t'sort' => $request->input('sort', 'id'),\n\t\t\t'order' => $request->input('order', 'DESC'),\n\t\t]);\n\t\t$sysModule = ServiceManager::make(SysModuleService::class);\n\t\t$module = $sysModule->getById($request->input('id', ''));\n\t\t//其他参数\n\t\t$this->_addParam([\n\t\t\t'defaultRow' => $this->service->getDefaultRow(),\n\t\t\t'status' => $this->service->status,\n\t\t\t'rank' => $this->service->rank,\n\t\t\t'module_name' => $module->symbol,\n\t\t\t'nav' => Route::currentRouteName(),\n\t\t\t'func_uri' => route('backend.modulefunc.index', ['id' => $request->input('id', '')]),\n\t\t\t'role_uri' => route('backend.modulerole.index', ['id' => $request->input('id', '')]),\n\t\t]);\n\n\t\t//需要引入的 css 和 js\n\t\t$this->_addJsLib('static/plugins/dmg-ui/TableGrid.js');\n\n\t\treturn $this->_displayWithLayout('backend::modulerole.index');\n\t}\n\n\t//读取\n\tfunction read(Request $request) {\n\t\t$module_name = ServiceManager::make(SysModuleService::class)->getById($request->input('id'))->symbol;\n\t\t$param = [\n\t\t\t'module' => $module_name,\n\t\t\t'status' => $request->input('status', ''),\n\t\t\t'keyword' => $request->input('keyword', ''),\n\t\t\t'page' => $request->input('page', 1),\n\t\t\t'pageSize' => $request->input('pageSize', 10),\n\t\t\t'sort' => $request->input('sort', 'id'),\n\t\t\t'order' => $request->input('order', 'DESC'),\n\t\t];\n\n\t\t$data['rows'] = $this->service->getByCond($param);\n\t\t$param['count'] = TRUE;\n\t\t$data['total'] = $this->service->getByCond($param);\n\n\t\treturn response()->json(ajax_arr('查询成功', 0, $data));\n\t}\n\n\tfunction get_permission(Request $request) {\n\t\t$roleId = $request->input('roleId');\n\t\t$SysFuncPrivilege = SysFuncPrivilegeService::instance();\n\t\t$data['privilegeName'] = $SysFuncPrivilege->name;\n\t\t//取角色操作权限\n\n\t\t//取所有功能与操作\n\t\t$SysFunc = SysFuncService::instance();\n\t\t$data['funcData'] = $SysFunc->getByCond([\n\t\t\t'module' => 'backend',\n\t\t\t'status' => 1,\n\t\t\t'withPrivilege' => TRUE,\n\t\t]);\n\n//var_dump(view( 'sysrole/index' ));\n\t\t//   var_dump($data);\n\t\t//return view( 'sysrole/permission' )->with($data);\n\n\t\treturn view('backend::sysrole/permission')->with($data);\n\n\t\t//  return $ret;\n\t}\n\n\tfunction get_privilegeData(Request $request) {\n\t\t$roleId = $request->input('roleId');\n\t\t$SysRolePermission = SysRolePermissionService::instance();\n\t\treturn response()->json($SysRolePermission->getByRole($roleId));\n\t}\n\n\t//更新授权\n\tfunction update_permission(Request $request) {\n\t\t$roleId = $request->input('roleId');\n\t\t$privilegeArr = $request->input('privilegeArr');\n\n\t\t$SysRolePermission = SysRolePermissionService::instance();\n\t\t$ret = $SysRolePermission->updateRolePermission($roleId, $privilegeArr);\n\n\t\treturn response()->json($ret);\n\t}\n\n}"
  },
  {
    "path": "src/Controllers/Backend/Simulator.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/18\n * Time: 16:41\n */\n\nnamespace Smart\\Controllers\\Backend;\n\nuse cebe\\markdown\\MarkdownExtra;\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Http\\Request;\nuse Smart\\Service\\SimulatorService;\nuse Smart\\Service\\SysMerchantService;\nuse Smart\\Service\\SysUserService;\nuse Smart\\Lib\\Discover;\n\nclass Simulator extends Backend {\n\n\tpublic $deviceOsVersion = '10.0.0';\n\tpublic $apiVersion = 'v1';\n\n\t/**\n\t * Simulator constructor.\n\t */\n\tpublic function __construct(Request $request) {\n\t\tparent::__construct($request);\n\n\t\t$this->apiVersion = config('backend.api.apiVersion');\n\t}\n\n\t//页面入口\n\tpublic function index() {\n\t\t$this->_init('接口模拟器');\n\t\t\n\t//\tvar_dump($services);exit;\n\t\t//uri\n\t\t$this->_addParam('uri', [\n\t\t\t'readApi' => full_uri('backend/simulator/read_api'),\n\t\t\t'readParams' => full_uri('backend/simulator/read_params'),\n\t\t\t'api' => $this->baseUri . \"api/\",\n\t\t\t'readme' => full_uri('backend/simulator/read_me'),\n\t\t]);\n\n\t\t$SysUser = SysUserService::instance();\n\t\t$SysMerchant = SysMerchantService::instance();\n\n/*\t\t$versions = [\n\t\t\t'v1' => [\n\t\t\t\t[\n\t\t\t\t\t'version' => 'v1',\n\t\t\t\t\t'text' => 'v1',\n\t\t\t\t]\n\t\t\t],\n\t\t\t'v2' => [\n\t\t\t\t[\n\t\t\t\t\t'version' => 'v2',\n\t\t\t\t\t'text' => 'v2',\n\t\t\t\t]\n\t\t\t],\n\t\t];*/\n\n\t\t$discover = new Discover;\n        $versions = $discover->version();\n\t\t//其他参数\n\t\t$this->_addParam([\n\t\t\t'deviceOsVersion' => $this->deviceOsVersion,\n\t\t\t'apiVersion' => $this->apiVersion,\n\t\t\t'secret' => config('backend.secret'),\n\t\t\t'testToken' => $SysUser->getForTest(),\n\t\t\t'testMer' => $SysMerchant->getForTest(),\n\t\t\t'versions' => $versions,\n\t\t\t'defaultValue' => [\n\t\t\t\t'token' => '', //取一个token\n\t\t\t\t'merId' => 1,\n\t\t\t],\n\t\t]); \n\n\t\t//需要引入的 css 和 js\n\t\t$this->_addJsLib('static/plugins/jquery-md5/jQuery.md5.js');\n\n\t\treturn $this->_displayWithLayout('backend::simulator.index');\n\t}\n\n\t//读取结果\n\tfunction read_api(Request $request) {\n\t\tif($request->filled('version')){\n\t\t\t$apiVersion = $request->input('version');\n\t\t}else{\n\t\t\t$apiVersion =  $this->apiVersion;\n\t\t}\n\t\t\n\t\t//   $Simulator = SimulatorService::instance();\n\t\t\n\t\t$ret = $this->service->readApi($apiVersion);\n\n\t\treturn json($ret);\n\t}\n\n\tpublic function read_version(){  //TODO 版本控制未完成\n\t\t$ret = $this->service->readVersion();\n\t\treturn json($ret);\n\t}\n\n\tfunction read_params(Request $request) {\n\t\t$directory = $request->input('directory');\n\t\t$action = $request->input('action');\n\t\t$action = ucfirst($action);\n\t\t$method = $request->input('method', '');\n\t\t$version = $request->input('version',$this->apiVersion);\n\n\t\t$service = \"App\\\\Api\\\\Service\\\\{$version}\\\\{$directory}\\\\{$action}Service\";\n\n\t\t$instance = $service::instance();\n\n\t\tif (empty($method)) {\n\t\t\t$key = array_keys($instance->allowRequestMethod);\n\t\t\t$method = $key[0];\n\t\t}\n\n\t\t$data['method'] = $method;\n\t\t$data['allowRequestMethod'] = $instance->allowRequestMethod;\n\t\t$data['defaultParams'] = $instance->defaultParams[$method];\n\n\t\t$data['defaultResponse'] = $this->_fixDefaultResponse($instance->defaultResponse[$method]);\n\n\t\treturn view('backend::simulator.params')->with($data);\n\n\t}\n\n\t/**\n\t * 优化前台显示 default response\n\t *\n\t * @param $defaultResponse\n\t *\n\t * @return string\n\t */\n\tprivate function _fixDefaultResponse($defaultResponse) {\n\t\tforeach ($defaultResponse as $key => &$item) {\n\t\t\tif (is_array($item)) {\n\t\t\t\tif (isset($item[0])) {\n\t\t\t\t\t$item = $item[0];\n\t\t\t\t} else {\n\t\t\t\t\tforeach ($item as $k => &$i) {\n\t\t\t\t\t\tif (is_array($i)) {\n\t\t\t\t\t\t\tif (isset($i[0])) {\n\t\t\t\t\t\t\t\t$i = $i[0];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn json_encode($defaultResponse, JSON_UNESCAPED_UNICODE);\n\t}\n\n\t//文档\n\tfunction read_me() {\n\t\t$this->_init('文档');\n\t\t$parser = new MarkdownExtra();\n\t\t$readme = $parser->parse(file_get_contents(base_path() . './README.md'));\n\n\t\t$this->_addData('readme', $readme);\n\n\t\t$this->_addParam('uri', [\n\t\t\t'menu' => '/backend/simulator/index',\n\t\t]);\n\n\t\t$this->_addJsLib('static/js/backend/SimulatorReadme.js');\n\t\t$this->data['initPageJs'] = FALSE;\n\t\t$this->data['jsCode'][] = 'SimulatorReadme.init()';\n\n\t\treturn $this->_displayWithLayout('backend::readme');\n\t}\n\n}"
  },
  {
    "path": "src/Controllers/Backend/SysApiLog.php",
    "content": "<?php namespace Smart\\Controllers\\Backend;\n/**\n * SysApiLog Controller\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2017-09-25\n */\n\n\nuse Illuminate\\Http\\Request;\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Smart\\Service\\SysApiLogService;\n\nclass SysApiLog extends Backend {\n\n\t/**\n\t * SysApiLog constructor.\n\t */\n\n\n\t//页面入口\n\tpublic function index(Request $request) {\n\t\t$this->_init( 'SysApiLog' );\n\n\t\t//uri\n\t\t$this->_addParam( 'uri', [\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t] );\n\n\t\t//查询参数\n\t\t$this->_addParam( 'query', [\n\t\t\t'keyword'  => $request->input( 'keyword', '' ),\n\t\t\t'status'   => $request->input( 'status', '' ),\n\t\t\t'page'     => $request->input( 'page', 1 ),\n\t\t\t'pageSize' => $request->input( 'pageSize', 10 ),\n            'sort'     => $request->input( 'sort', 'id' ),\n            'order'    => $request->input( 'order', 'DESC' ),\n\t\t] );\n\n    \n\n\t\t//其他参数\n\t\t$this->_addParam( [\n\t\t\t'defaultRow' => $this->service->getDefaultRow() ,\n\t\t\t'status' => $this->service->status ,\n\t\t] );\n\n\t\t//需要引入的 css 和 js\n\t\t\n\t\t\n\t\t\n\t\t\n\n\t\t$this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' );\n    \n\n\t\treturn $this->_displayWithLayout();\n\t}\n\n\t/**\n * 读取\n * @return response->Json\n */\npublic function read(Request $request) {\n  $config = [\n    'status'   => $request->input( 'status', '' ),\n    'keyword'  => $request->input( 'keyword', '' ),\n    'page'     => $request->input( 'page', 1 ),\n    'pageSize' => $request->input( 'pageSize', 10 ),\n    'sort'     => $request->input( 'sort', 'id' ),\n    'order'    => $request->input( 'order', 'DESC' ),\n  ];\n\n  $data['rows']    = $this->service->getByCond( $config );\n  $config['count'] = TRUE;\n  $data['total']   = $this->service->getByCond( $config );\n\n  return json(ajax_arr( '查询成功', 0, $data ) );\n}\n\t\n\n}"
  },
  {
    "path": "src/Controllers/Backend/SysAppVersion.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/22\n * Time: 16:55\n */\n\nnamespace Smart\\Controllers\\Backend;\n\nuse Smart\\Service\\SysAppVersionService;\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Http\\Request;\n\n\nclass SysAppVersion extends Backend {\n\n    /**\n     * SysAppVersion constructor.\n     */\n\n\n    //页面入口\n    public function index(Request $request) {\n        $this->_init( 'APP版本管理' );\n\n        //uri\n        $this->_addParam( 'uri' , [\n\n\n        ] );\n\n        //查询参数\n        $this->_addParam( 'query' , [\n            'keyword'  => $request->input( 'keyword' , '' ) ,\n            'status'   => $request->input( 'status' , '' ) ,\n            'page'     => $request->input( 'page' , 1 ) ,\n            'pageSize' => $request->input( 'pageSize' , 10 ) ,\n            'sort'     => $request->input( 'sort' , 'id' ) ,\n            'order'    => $request->input( 'order' , 'DESC' ) ,\n        ] );\n\n\n        //其他参数\n        $this->_addParam( [\n            'defaultRow' => $this->service->getDefaultRow() ,\n            'status'     => $this->service->status ,\n            'device'     => $this->service->device\n        ] );\n\n        //需要引入的 css 和 js\n\n\n        $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' );\n\n\n        return $this->_displayWithLayout('backend::sysappversion.index');\n    }\n\n    /**\n     * 读取\n     * @return  Json\n     */\n    public function read(Request $request) {\n        $config = [\n            'status'   => $request->input( 'status' , '' ) ,\n            'keyword'  => $request->input( 'keyword' , '' ) ,\n            'page'     => $request->input( 'page' , 1 ) ,\n            'pageSize' => $request->input( 'pageSize' , 10 ) ,\n            'sort'     => $request->input( 'sort' , 'id' ) ,\n            'order'    => $request->input( 'order' , 'DESC' ) ,\n        ];\n\n        $data['rows']    = $this->service->getByCond( $config );\n        $config['count'] = TRUE;\n        $data['total']   = $this->service->getByCond( $config );\n\n        return json( ajax_arr( '查询成功' , 0 , $data ) );\n    }\n\n\n}"
  },
  {
    "path": "src/Controllers/Backend/SysArea.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/18\n * Time: 15:29\n */\nnamespace Smart\\Controllers\\Backend;\n\n\nuse Smart\\Service\\SysAreaService;\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Http\\Request;\n\nclass SysArea extends Backend {\n\n    /**\n     * SysArea constructor.\n     */\n\n\n    //页面入口\n    public function index(Request $request) {\n        $pid = $request->input( 'pid', 0 );\n\n        $title = '区域管理';\n        if ( $pid > 0 ) {\n            $parentData = $this->service->getById( $pid );\n            $title = $parentData['text'] . ' 的下级区域';\n        }\n\n        $this->_init( $title );\n        //uri\n        $this->_addParam( 'uri', [\n\n\n        ] );\n\n        //查询参数\n        $this->_addParam( 'query', [\n            'pid'      => $pid,\n            'keyword'  => $request->input( 'keyword', '' ),\n            'status'   => $request->input( 'status', '' ),\n            'page'     => $request->input( 'page', 1 ),\n            'pageSize' => $request->input( 'pageSize', 50 ),\n            'sort'     => $request->input( 'sort', 'id' ),\n            'order'    => $request->input( 'order', 'DESC' ),\n            'getAll'    => false,\n        ] );\n\n\n        //其他参数\n        $this->_addParam( [\n            'defaultRow' => $this->service->getDefaultRow(),\n            'status'     => $this->service->status,\n        ] );\n\n        //需要引入的 css 和 js\n\n\n        $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' );\n\n\n        return $this->_displayWithLayout('backend::sysarea.index');\n    }\n\n    /**\n     * 读取\n     * @return Json\n     */\n    public function read(Request $request) {\n        $config = [\n            'pid'      => $request->input( 'pid', 0 ),\n            'status'   => $request->input( 'status', '' ),\n            'keyword'  => $request->input( 'keyword', '' ),\n            'page'     => $request->input( 'page', 1 ),\n            'pageSize' => $request->input( 'pageSize', 50 ),\n            'sort'     => $request->input( 'sort', 'id' ),\n            'order'    => $request->input( 'order', 'DESC' ),\n        ];\n\n        $data['rows']    = $this->service->getByCond( $config );\n        $config['count'] = TRUE;\n        $data['total']   = $this->service->getByCond( $config );\n\n        return response()->json( ajax_arr( '查询成功', 0, $data ) );\n    }\n\n\n\n\n}"
  },
  {
    "path": "src/Controllers/Backend/SysBase.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: sl\n * Date: 2017/9/14\n * Time: 09:49\n */\nnamespace Smart\\Controllers\\Backend;\n\nuse Smart\\Controllers\\Controller;\nuse Smart\\Service\\MerAlbumCatalogService;\nuse Smart\\Service\\MerAlbumService;\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Smart\\Service\\SysAreaService;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Route;\nuse Smart\\Service\\UploadService;\nuse Illuminate\\Support\\Str;\n\nclass SysBase extends  Controller{\n\n    public $user       = NULL;\n    public $merId      = 0 ;\n    public $baseUri    = '';\n    public $module     = ''; //功能 不分大小写\n    public $controller = ''; //控制器\n    public $className  = ''; //控制器 区分大小写\n    public $action     = ''; //操作\n    public $service    = NULL;\n\n    public $classJs = '';\n\n    protected $autoload_service = 1;\n\n    public $data = [\n        'pageTitle'  => '' , //页面title\n        'jsLib'      => [] , //自定义js uri\n        'cssLib'     => [] , //自定义css uri\n        'param'      => [   //页面需要用到的参数\n            'uri' => [] ,\n        ] ,\n        'initPageJs' => TRUE , //是否加载本页面 js\n        'jsCode'     => [ //其余js代码\n            //\"Layout.setSidebarMenuActiveLink('match');\"\n        ] ,\n    ];\n\n\n    public function __construct(Request $request)\n    {\n\n        $routeAction = Route::currentRouteAction();\n        $routes = $this->parseRouteAction($routeAction);\n        $this->baseUri = config('backend.baseUri');\n        $this->module = strtolower($routes['module']);\n        $this->controller = $routes['controller'];\n        $this->action = $routes['action'];\n        $this->_initClassJs();\n\n        if($this->autoload_service){\n\n            $this->_initService();\n            $jsCode = <<<EOF\n            {$this->controller}.init();\nEOF;\n\n            $this->_addJsCode($jsCode);\n        }\n\n    }\n\n    private function _initService(){\n       if(class_exists('App\\\\'.ucfirst($this->module).'\\\\Service\\\\'.$this->controller.'Service')){\n            $this->service = ServiceManager::make( 'App\\\\'.$this->module.'\\\\Service\\\\'.$this->controller.'Service');\n       }elseif(class_exists('App\\\\Service\\\\'.$this->controller.'Service')){\n            $this->service = ServiceManager::make( 'App\\\\Service\\\\'.$this->controller.'Service');\n       }elseif(class_exists('Smart\\\\Service\\\\'.$this->controller.'Service')){\n            $this->service = ServiceManager::make( 'Smart\\\\Service\\\\'.$this->controller.'Service');\n       }\n        \n    }\n\n\n    private function parseRouteAction($routeAction){\n       // $routeAction = 'App\\Http\\Controllers\\Backend\\SysFunc@index';\n        preg_match('/^Smart\\\\\\Controllers\\\\\\(?P<module>\\w+)\\\\\\(?P<controller>\\w+)@(?P<action>\\w+)/', $routeAction, $matches);\n\n        if( empty($matches) ){\n            preg_match('/^App\\\\\\(?P<module>\\w+)\\\\\\Controllers\\\\\\(?P<controller>\\w+)@(?P<action>\\w+)/', $routeAction, $matches);\n        }\n\n        return $matches;\n    }\n\n    public function _init($pageTitle = '新页面'){\n        $currentBaseUri = \"{$this->baseUri}{$this->module}/{$this->controller}/\";\n\n        $this->data['param']['pageTitle'] = $pageTitle;\n        $this->data['param']['uri']       = [\n            'base'    => $this->baseUri ,\n            'module'  => \"{$this->baseUri}{$this->module}/index/index\" ,\n            'img'     => config( 'backend.image.imgUri' ) ,\n            'menu'    => \"\" ,\n            'this'    => full_uri( $currentBaseUri . $this->action ) ,\n            'chPwd'   => full_uri( \"backend/auth/changePassword\" ) ,\n            'read'    => full_uri( $currentBaseUri . 'read' ) ,\n            'insert'  => full_uri( $currentBaseUri . 'insert' ) ,\n            'update'  => full_uri( $currentBaseUri . 'update' , [ 'id' => '' ] ) ,\n            'destroy' => full_uri( $currentBaseUri . 'destroy' ) ,\n        ];\n\n        \n    }\n\n    public function _initClassJs( ){\n\n        $this->classJs = $this->classJs ?: $this->controller;\n        \n\n    }\n\n\n    /**\n     * 生成页面js uri\n     *\n     * @return string\n     */\n    public function _getPageJsPath() {\n\n        return \"static/js/{$this->module}/{$this->classJs}.js\";\n    }\n\n    public function _addJsLib($uri){\n        $this->data['jsLib'][] = $uri;\n    }\n\n    public function _addJsCode($code = ''){\n        $this->data['jsCode'][] = $code;\n    }\n\n    public function _addCssLib($uri){\n        $this->data['cssLib'][] = $uri;\n    }\n\n    public function _addCssCode($code){\n        $this->data['jsCode'][] = $code;\n    }\n\n    public function _addParam( $key , $value = '' ){\n        if ( is_array( $key ) ) {\n            foreach ( $key as $k => $v ) {\n                $this->data['param'][ $k ] = $v;\n            }\n        } else {\n            if ( is_array( $value ) ) {\n                if ( isset( $this->data['param'][ $key ] ) ) {\n                    $this->data['param'][ $key ] = array_merge( $this->data['param'][ $key ] , $value );\n                } else {\n                    $this->data['param'][ $key ] = $value;\n                }\n            } else {\n                $this->data['param'][ $key ] = $value;\n            }\n        }\n    }\n\n    public function _addData($key ,$value){\n        if ( is_array( $key ) ) {\n            foreach ( $key as $k => $v ) {\n                $this->data[ $k ] = $v;\n            }\n        } else {\n            if ( is_array( $value ) ) {\n                if ( isset( $this->data[ $key ] ) ) {\n                    $this->data[ $key ] = array_merge( $this->data[ $key ] , $value );\n                } else {\n                    $this->data[ $key ] = $value;\n                }\n            } else {\n                $this->data[ $key ] = $value;\n            }\n        }\n    }\n\n    public function _makeJs(){\n        $html = [];\n\n        //引用页面JS文件\n        if ( $this->data['initPageJs'] ) {\n            $this->data['jsLib'][]  = $this->_getPageJsPath();\n            $this->className && $this->data['jsCode'][] = $this->className . '.init();';\n        }\n        foreach ( $this->data['jsLib'] as $item ) {\n            $html[] = '<script src=\"' . $item . '\" type=\"text/javascript\"></script>';\n        }\n        if($this->data['jsCode']){\n\n            $html[] = '<script type=\"text/javascript\">';\n            $html[] = 'var Param = ' . json_encode( $this->data['param'] );\n            $html[] = '$(function(){';\n\n            foreach ( $this->data['jsCode'] as $row ) {\n                $html[] = $row;\n            }\n\n            $html[] = '});';\n            $html[] = '</script>';\n        }\n        return join( \"\\n\" , $html );\n    }\n\n    public function _makeCss(){\n        $html = [];\n        foreach ( $this->data['cssLib'] as $item ) {\n            $html[] = '<link href=\"' . $item . '\" rel=\"stylesheet\">';\n        }\n\n        return join( \"\\n\" , $html );\n    }\n\n    public function _empty(){\n\n    }\n\n    public function upload(Request $request){\n        $param          = $request->all( );\n        $param['isKE']  = $request->input( 'isKE' , 0 );\n        $param['merId'] = $this->merId;\n\n        $Upload = ServiceManager::make( UploadService::class );\n\n        return json( $Upload->doUpload( $param ) );\n    }\n\n    public function read_album(Request $request){\n        $MerAlbum = MerAlbumService::instance();\n\n        $config = [\n            'field'    => [ 'id' , 'uri' , 'mimes' , 'desc' , 'img_size' ] ,\n            'merId'    => $this->merId ,\n            'catalog'  => $request->input( 'catalog' , '' ) ,\n            'sort'     => 'id' ,\n            'order'    => 'DESC' ,\n            'status'   => 1 ,\n            'page'     => $request->input( 'page' , 1 ) ,\n            'pageSize' => $request->input( 'pageSize' , 12 ) ,\n        ];\n\n        $result['rows']  = $MerAlbum->getByCond( $config );\n        $config['count'] = TRUE;\n        $result['total'] = $MerAlbum->getByCond( $config );\n\n        return json( $result );\n    }\n\n    /**\n     * 取相册分类\n     *\n     * @return Json\n     */\n    public function read_album_catalog() {\n        $MerAlbumCatalog = MerAlbumCatalogService::instance();\n        $result          = $MerAlbumCatalog->getByCond( [\n            'field'  => [ 'id' , 'tag' ] ,\n            'merId'  => $this->merId ,\n            'sort'   => 'sort' ,\n            'order'  => 'ASC' ,\n            'status' => 1 ,\n            'getAll' => TRUE\n        ] );\n\n        return  json( $result );\n    }\n\n    public function read_area($pid){\n        $SysArea = SysAreaService::instance();\n\n\n        $cacheName = config( 'backend.areaCachePrefix' ) . $pid;\n\n        $data = cache( $cacheName );\n        if ( empty( $data ) ) {\n            $data = $SysArea->getByCond( [\n                'pid'    => $pid ,\n                'getAll' => TRUE\n            ] );\n            cache( $cacheName , $data , 86400 );\n        }\n\n        return json( ajax_arr( '查询成功' , 0 , $data ) );\n    }\n\n    public function insert(Request $request){\n        $data = $request->except('_token');\n        return  json($this->service->insert($data));\n    }\n\n    public function update(Request $request ,$id){\n\n        $data = $request->except('_token' );\n\n        return json( $this->service->update( $id , $data ) );\n    }\n\n    public function destroy(Request $request){\n        $data = $request->all();\n        return json( $this->service->destroy( $data['ids']));\n    }\n\n\n}"
  },
  {
    "path": "src/Controllers/Backend/SysFunc.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: sl\n * Date: 2017/9/14\n * Time: 10:18\n */\nnamespace Smart\\Controllers\\Backend;\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Http\\Request;\nuse Smart\\Service\\SysFuncPrivilegeService;\nuse Smart\\Service\\SysFuncService;\n\nclass SysFunc extends Backend {\n\n\n\tpublic function index(Request $request) {\n\t\t$this->_init('系统功能'); \n\n\t\t//uri\n\t\t$this->_addParam('uri', [\n\t\t\t'updatePrivilege' => full_uri('Backend/SysFunc/update_privilege', ['funcId' => '']),\n\t\t]);\n\t\t//查询参数\n\t\t$this->_addParam('query', [\n\t\t\t'module' => 'backend',\n\t\t\t'keyword' => $request->input('keyword', ''),\n\t\t\t'status' => $request->input('status', ''),\n\t\t\t'page' => $request->input('page', 1),\n\t\t\t'pageSize' => $request->input('pageSize', 10),\n\t\t\t'sort' => $request->input('sort', 'id'),\n\t\t\t'order' => $request->input('order', 'DESC'),\n\t\t]);\n\n\t\t//其他参数\n\t\t$SysFuncPrivilege = SysFuncPrivilegeService::instance();\n\t\t$this->_addParam([\n\t\t\t'defaultRow' => $this->service->getDefaultRow(),\n\t\t\t'status' => $this->service->status,\n\t\t\t'isMenu' => $this->service->isMenu,\n\t\t\t'isFunc' => $this->service->isFunc,\n\t\t\t'privilege' => $SysFuncPrivilege->name,\n\t\t\t'alias' => $SysFuncPrivilege->alias,\n\t\t]);\n\n\t\t//需要引入的 css 和 js\n\t\t$this->_addJsLib('static/plugins/dmg-ui/TreeGrid.js');\n\n\t\t//  var_dump($request->server());exit;\n\t\treturn $this->_displayWithLayout('backend::sysfunc/index');\n\n\t}\n\n\t/**\n\t * 读取\n\t */\n\tfunction read(Request $request) {\n\t\t$config = [\n\t\t\t'module' => $request->input('module',''),\n\t\t\t'status' => $request->input('status', ''),\n\t\t\t'keyword' => $request->input('keyword', ''),\n\t\t\t'page'     => $request->input( 'page', 1 ),\n\t    \t'pageSize' => $request->input( 'pageSize', 10 ),\n\t\t\t'sort' => $request->input('sort', 'id'),\n\t\t\t'order' => $request->input('order', 'DESC'),\n\t\t\t'module' => 'backend',\n\t\t\t'withPrivilege' => TRUE,\n\t\t];\n\n\t\t$data['rows']    = $this->service->getByCond( $config );\n\t\t$config['count'] = TRUE;\n\t\t$data['total']   = $this->service->getByCond( $config );\n\n\t\treturn response()->json(ajax_arr('查询成功', 0, $data));\n\t}\n\n\t/**\n\t * 更新权限\n\t *\n\t */\n\tfunction update_privilege(Request $request) {\n\t\t$funcId = $request->funcId;\n\t\t$data = $request->all();\n\n\t\t$SysFuncPrivilege = SysFuncPrivilegeService::instance();\n\t\t$ret = $SysFuncPrivilege->updateByFunc($funcId, $data);\n\n\t\treturn response()->json($ret);\n\t}\n\n}"
  },
  {
    "path": "src/Controllers/Backend/SysMail.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/25\n * Time: 14:22\n */\nnamespace Smart\\Controllers\\Backend;\n\n\n\nuse Smart\\Service\\SysMailService;\nuse Illuminate\\Http\\Request;\nuse Facades\\Smart\\Service\\ServiceManager;\nclass SysMail extends Backend {\n\n\n\n    //页面入口\n    public function index(Request $request) {\n        $this->_init( '邮件' );\n\n        //uri\n        $this->_addParam( 'uri' , [\n            'send' => full_uri( 'backend/sysmail/send' )\n\n        ] );\n\n        //查询参数\n        $this->_addParam( 'query' , [\n            'keyword'  => $request->input( 'keyword' , '' ) ,\n            'status'   => $request->input( 'status' , '' ) ,\n            'page'     => $request->input( 'page' , 1 ) ,\n            'pageSize' => $request->input( 'pageSize' , 10 ) ,\n            'sort'     => $request->input( 'sort' , 'id' ) ,\n            'order'    => $request->input( 'order' , 'DESC' ) ,\n        ] );\n\n        //其他参数\n        $this->_addParam( [\n            'defaultRow' => $this->service->getDefaultRow() ,\n            'status'     => $this->service->status ,\n            'type'       => $this->service->type\n        ] );\n\n        //需要引入的 css 和 js\n        $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' );\n\n        return $this->_displayWithLayout('backend::sysmail.index');\n    }\n\n    /**\n     * 读取\n     * @return \\Json\n     */\n    public function read(Request  $request) {\n        $config = [\n            'status'   => $request->input( 'status' , '' ) ,\n            'keyword'  => $request->input( 'keyword' , '' ) ,\n            'page'     => $request->input( 'page' , 1 ) ,\n            'pageSize' => $request->input( 'pageSize' , 10 ) ,\n            'sort'     => $request->input( 'sort' , 'id' ) ,\n            'order'    => $request->input( 'order' , 'DESC' ) ,\n        ];\n\n        $data['rows']    = $this->service->getByCond( $config );\n        $config['count'] = TRUE;\n        $data['total']   = $this->service->getByCond( $config );\n\n        return json( ajax_arr( '查询成功' , 0 , $data ) );\n    }\n\n    public function send(Request  $request) {\n        $id = $request->input('id');\n        $result = $this->service->sendById( $id );\n\n        return json( $result );\n    }\n}"
  },
  {
    "path": "src/Controllers/Backend/SysMerchant.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/18\n * Time: 17:40\n */\nnamespace Smart\\Controllers\\Backend;\n\nuse Smart\\Service\\SysMerchantService;\nuse Illuminate\\Http\\Request;\nuse Facades\\Smart\\Service\\ServiceManager;\n\nclass SysMerchant extends Backend {\n\n\n\n    //页面入口\n    public function index(Request $request) {\n        $this->_init( '机构管理' );\n\n        //uri\n        $this->_addParam( 'uri' , [\n            'area'         => full_uri( 'backend/sysmerchant/read_area' , [ 'pid' => '' ] ) ,\n            'upload'       => full_uri( 'backend/sysmerchant/upload' ) ,\n            'albumCatalog' => full_uri( 'backend/sysmerchant/read_album_catalog' ) ,\n            'album'        => full_uri( 'backend/sysmerchant/read_album' ) ,\n            'detail'       => full_uri( 'backend/Sysmerchant/read_detail' , [ 'id' => '' ] )\n        ] );\n\n        //查询参数\n        $this->_addParam( 'query' , [\n            'keyword'  => $request->input( 'keyword' , '' ) ,\n            'status'   => $request->input( 'status' , '' ) ,\n            'page'     => $request->input( 'page' , 1 ) ,\n            'pageSize' => $request->input( 'pageSize' , 10 ) ,\n            'sort'     => $request->input( 'sort' , 'id' ) ,\n            'order'    => $request->input( 'order' , 'DESC' ) ,\n        ] );\n\n        //上传参数\n        $this->_addParam( 'uploadParam' , [\n            'width'       => 300 ,\n            'height'      => 300 ,\n            'saveAsAlbum' => TRUE ,\n            'albumTag'    => '图标' ,\n        ] );\n\n        //相册参数\n        $this->_addParam( 'albumParam' , [\n            'defaultTag' => '图标' ,\n            'pageSize'   => 12 ,\n        ] );\n\n        //其他参数\n        $this->_addParam( [\n            'defaultRow' => $this->service->getDefaultRow() ,\n            'status'     => $this->service->status ,\n            'forTest'    => $this->service->forTest ,\n        ] );\n\n        //需要引入的 css 和 js\n\n\n        $this->_addCssLib( 'node_modules/jcrop-0.9.12/css/jquery.Jcrop.min.css' );\n        $this->_addJsLib( 'node_modules/jcrop-0.9.12/js/jquery.Jcrop.min.js' );\n        $this->_addJsLib( 'static/plugins/dmg-ui/Uploader.js' );\n        $this->_addJsLib( 'static/plugins/dmg-ui/AreaSelection.js' );\n\n        $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' );\n\n\n        return $this->_displayWithLayout('backend::sysmerchant.index');\n    }\n\n    /**\n     * 读取\n     * @return \\Json\n     */\n    function read(Request $request) {\n        $config = [\n            'status'      => $request->input( 'status' , '' ) ,\n            'keyword'     => $request->input( 'keyword' , '' ) ,\n            'page'        => $request->input( 'page' , 1 ) ,\n            'pageSize'    => $request->input( 'pageSize' , 10 ) ,\n            'sort'        => $request->input( 'sort' , 'id' ) ,\n            'order'       => $request->input( 'order' , 'DESC' ) ,\n            'withSysUser' => TRUE\n        ];\n\n        $data['rows']    = $this->service->getByCond( $config );\n        $config['count'] = TRUE;\n        $data['total']   = $this->service->getByCond( $config );\n\n        return json( ajax_arr( '查询成功' , 0 , $data ) );\n    }\n\n    function read_detail($id) {\n\n\n        $merData = $this->service->getById( $id );\n\n        $this->_init( \"机构 \" . $merData['name'] . ' 管理页' );\n        $this->_addParam( 'uri' , [\n            'menu' => '/backend/sysmerchant/index' ,\n        ] );\n\n        $this->_addData( 'merId' , $id );\n        $this->_addData( 'initPageJs' , FALSE );\n        $this->_addJsLib( 'static/js/backend/SysMerchantDetail.js' );\n        $this->_addJsCode( 'SysMerchantDetail.init()' );\n\n        return $this->_displayWithLayout( 'backend::sysmerchant.detail' );\n    }\n\n\n}"
  },
  {
    "path": "src/Controllers/Backend/SysModule.php",
    "content": "<?php\nnamespace Smart\\Controllers\\Backend;\n/**\n * SysModule Controller\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2018-06-13\n */\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Http\\Request;\nuse Smart\\Service\\SysModuleService;\n\nclass SysModule extends Backend {\n\n\n\n\t//页面入口\n\tpublic function index(Request $request) {\n\t\t$this->_init('模块列表');\n\n\t\t//uri\n\t\t$this->_addParam('uri', [\n\t\t\t'modulefunc' => 'backend/modulefunc/index',\n\t\t]);\n\n\t\t//查询参数\n\t\t$this->_addParam('query', [\n\t\t\t'keyword' => $request->input('keyword', ''),\n\t\t\t'status' => $request->input('status', ''),\n\t\t\t'page' => $request->input('page', 1),\n\t\t\t'pageSize' => $request->input('pageSize', 10),\n\t\t\t'sort' => $request->input('sort', 'id'),\n\t\t\t'order' => $request->input('order', 'DESC'),\n\t\t]);\n\n\t\t//其他参数\n\t\t$this->_addParam([\n\t\t\t'defaultRow' => $this->service->getDefaultRow(),\n\t\t\t'status' => $this->service->status,\n\t\t]);\n\n\t\t//需要引入的 css 和 js\n\t\t$this->_addJsLib( 'static/plugins/dmg-ui/Uploader.js' );\n\t\t$this->_addJsLib( 'static/plugins/dmg-ui/AreaSelection.js' );\n\t\t$this->_addJsLib('static/plugins/dmg-ui/TableGrid.js');\n\t\t\n\n\t\treturn $this->_displayWithLayout('backend::sysmodules.index');\n\t}\n\n\t/**\n\t * 读取\n\t * @return response->Json\n\t */\n\tpublic function read(Request $request) {\n\t\t$config = [\n\t\t\t'status' => $request->input('status', ''),\n\t\t\t'keyword' => $request->input('keyword', ''),\n\t\t\t'page' => $request->input('page', 1),\n\t\t\t'pageSize' => $request->input('pageSize', 10),\n\t\t\t'sort' => $request->input('sort', 'id'),\n\t\t\t'order' => $request->input('order', 'DESC'),\n\t\t];\n\n\t\t$data['rows'] = $this->service->getByCond($config);\n\t\t$config['count'] = TRUE;\n\t\t$data['total'] = $this->service->getByCond($config);\n\n\t\treturn json(ajax_arr('查询成功', 0, $data));\n\t}\n\n}"
  },
  {
    "path": "src/Controllers/Backend/SysPush.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/22\n * Time: 17:20\n */\n namespace Smart\\Controllers\\Backend;\n\n\n\nuse Smart\\Service\\SysPushService;\nuse Illuminate\\Http\\Request;\nuse Facades\\Smart\\Service\\ServiceManager;\n\nclass SysPush extends Backend {\n\n\n\n    //页面入口\n    public function index(Request $request , SysPushService $sysPushService) {\n        $this->_init( '消息推送' );\n\n        //uri\n        $this->_addParam( 'uri', [\n            'send' => full_uri( 'backend/syspush/send' )\n\n        ] );\n\n        //查询参数\n        $this->_addParam( 'query', [\n            'keyword'  => $request->input( 'keyword', '' ),\n            'status'   => $request->input( 'status', '' ),\n            'page'     => $request->input( 'page', 1 ),\n            'pageSize' => $request->input( 'pageSize', 10 ),\n            'sort'     => $request->input( 'sort', 'id' ),\n            'order'    => $request->input( 'order', 'DESC' ),\n        ] );\n\n\n        //其他参数\n        $this->_addParam( [\n            'defaultRow' => $this->service->getDefaultRow(),\n            'status'     => $this->service->status,\n            'catalog'    => $this->service->catalog,\n            'platform'   => $this->service->platform\n        ] );\n\n\n\n        //需要引入的 css 和 js\n\n\n        $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' );\n\n\n        return $this->_displayWithLayout('backend::syspush.index');\n    }\n\n    /**\n     * 读取\n     * @return \\Json\n     */\n    function read(Request $request) {\n        $config = [\n            'status'   => $request->input( 'status', '' ),\n            'keyword'  => $request->input( 'keyword', '' ),\n            'page'     => $request->input( 'page', 1 ),\n            'pageSize' => $request->input( 'pageSize', 10 ),\n            'sort'     => $request->input( 'sort', 'id' ),\n            'order'    => $request->input( 'order', 'DESC' ),\n        ];\n\n        $data['rows']    = $this->service->getByCond( $config );\n        $config['count'] = TRUE;\n        $data['total']   = $this->service->getByCond( $config );\n\n        return json( ajax_arr( '查询成功', 0, $data ) );\n    }\n\n    function send(Request $request) {\n        $id = $request->input( 'id' );\n\n        $result = $this->service->sendById( $id );\n\n        return json( $result );\n    }\n\n\n}"
  },
  {
    "path": "src/Controllers/Backend/SysRole.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: sl\n * Date: 2017/9/14\n * Time: 10:18\n */\nnamespace Smart\\Controllers\\Backend;\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Http\\Request;\nuse Smart\\Service\\SysFuncPrivilegeService;\nuse Smart\\Service\\SysFuncService;\nuse Smart\\Service\\SysRolePermissionService;\nuse Smart\\Service\\SysRoleService;\n\nclass SysRole extends Backend {\n\t/**\n\t * SysRole constructor.\n\t */\n\n\n\t//页面入口\n\tpublic function index(Request $request) {\n\t\t$this->_init('系统角色管理');\n\n\t\t//uri\n\t\t$this->_addParam('uri', [\n\t\t\t'getPermission' => full_uri('backend/sysrole/get_permission'),\n\t\t\t'getPrivilegeData' => full_uri('backend/sysrole/get_privilegeData'),\n\t\t\t'updatePermission' => full_uri('backend/sysrole/update_permission'),\n\t\t]);\n\n\t\t//查询参数\n\t\t$this->_addParam('query', [\n\t\t\t'keyword' => $request->input('keyword', ''),\n\t\t\t'status' => $request->input('status', ''),\n\t\t\t'page' => $request->input('page', 1),\n\t\t\t'pageSize' => $request->input('pageSize', 10),\n\t\t\t'sort' => $request->input('sort', 'id'),\n\t\t\t'order' => $request->input('order', 'DESC'),\n\t\t]);\n\n\t\t//其他参数\n\t\t$this->_addParam([\n\t\t\t'defaultRow' => $this->service->getDefaultRow(),\n\t\t\t'status' => $this->service->status,\n\t\t\t'rank' => $this->service->rank,\n\t\t]);\n\n\t\t//需要引入的 css 和 js\n\t\t$this->_addJsLib('static/plugins/dmg-ui/TableGrid.js');\n\n\t\treturn $this->_displayWithLayout('backend::sysrole/index');\n\t}\n\n\t//读取\n\tfunction read(Request $request) {\n\t\t$param = [\n\t\t\t'status' => $request->input('status', ''),\n\t\t\t'keyword' => $request->input('keyword', ''),\n\t\t\t'page' => $request->input('page', 1),\n\t\t\t'pageSize' => $request->input('pageSize', 10),\n\t\t\t'sort' => $request->input('sort', 'id'),\n\t\t\t'order' => $request->input('order', 'DESC'),\n\t\t];\n\n\t\t$data['rows'] = $this->service->getByCond($param);\n\t\t$param['count'] = TRUE;\n\t\t$data['total'] = $this->service->getByCond($param);\n\n\t\treturn response()->json(ajax_arr('查询成功', 0, $data));\n\t}\n\n\tfunction get_permission(Request $request) {\n\t\t$roleId = $request->input('roleId');\n\t\t$SysFuncPrivilege = SysFuncPrivilegeService::instance();\n\t\t$data['privilegeName'] = $SysFuncPrivilege->name;\n\t\t//取角色操作权限\n\n\t\t//取所有功能与操作\n\t\t$SysFunc = SysFuncService::instance();\n\t\t$data['funcData'] = $SysFunc->getByCond([\n\t\t\t'module' => $request->input('module', 'backend'),\n\t\t\t'status' => 1,\n\t\t\t'withPrivilege' => TRUE,\n\t\t]);\n\n//var_dump(view( 'sysrole/index' ));\n\t\t//   var_dump($data);\n\t\t//return view( 'sysrole/permission' )->with($data);\n\n\t\treturn view('backend::sysrole/permission')->with($data);\n\n\t\t//  return $ret;\n\t}\n\n\tfunction get_privilegeData(Request $request) {\n\t\t$roleId = $request->input('roleId');\n\t\t$SysRolePermission = SysRolePermissionService::instance();\n\t\treturn response()->json($SysRolePermission->getByRole($roleId));\n\t}\n\n\t//更新授权\n\tfunction update_permission(Request $request) {\n\t\t$roleId = $request->input('roleId');\n\t\t$privilegeArr = $request->input('privilegeArr');\n\n\t\t$SysRolePermission = SysRolePermissionService::instance();\n\t\t$ret = $SysRolePermission->updateRolePermission($roleId, $privilegeArr);\n\n\t\treturn response()->json($ret);\n\t}\n\n}"
  },
  {
    "path": "src/Controllers/Backend/SysSettings.php",
    "content": "<?php namespace Smart\\Controllers\\Backend;\n/**\n * SysSettings Controller\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2018-06-25\n */\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Http\\Request;\nuse Smart\\Service\\SysSettingsService;\n\nclass SysSettings extends Backend {\n\n\n\n\t//页面入口\n\tpublic function index(Request $request) {\n\t\t$this->_init('SysSettings');\n\n\t\t//uri\n\t\t$this->_addParam('uri', [\n\n\t\t]);\n\n\t\t//查询参数\n\t\t$this->_addParam('query', [\n\t\t\t'keyword' => $request->input('keyword', ''),\n\t\t\t'status' => $request->input('status', ''),\n\t\t\t'page' => $request->input('page', 1),\n\t\t\t'pageSize' => $request->input('pageSize', 10),\n\t\t\t'sort' => $request->input('sort', 'id'),\n\t\t\t'order' => $request->input('order', 'DESC'),\n\t\t]);\n\n\t\t//其他参数\n\t\t$this->_addParam([\n\t\t\t'defaultRow' => $this->service->getDefaultRow(),\n\t\t\t'status' => $this->service->status,\n\t\t]);\n\n\t\t//需要引入的 css 和 js\n\n\t\t$this->_addJsLib('static/plugins/dmg-ui/TableGrid.js');\n\n\t\treturn $this->_displayWithLayout('backend::SysSettings.index');\n\t}\n\n\t//设置相关组的配置参数\n\tpublic function indexGroup(Request $request, $group) {\n\t\t$this->_init($group);\n\t\treturn $this->_displayWithLayout('backend::SysSettings.' . $group);\n\t}\n\n\t/**\n\t * 读取\n\t * @return response->Json\n\t */\n\tpublic function read(Request $request) {\n\t\t$config = [\n\t\t\t'status' => $request->input('status', ''),\n\t\t\t'keyword' => $request->input('keyword', ''),\n\t\t\t'page' => $request->input('page', 1),\n\t\t\t'pageSize' => $request->input('pageSize', 10),\n\t\t\t'sort' => $request->input('sort', 'id'),\n\t\t\t'order' => $request->input('order', 'DESC'),\n\t\t];\n\n\t\t$data['rows'] = $this->service->getByCond($config);\n\t\t$config['count'] = TRUE;\n\t\t$data['total'] = $this->service->getByCond($config);\n\n\t\treturn json(ajax_arr('查询成功', 0, $data));\n\t}\n\n}"
  },
  {
    "path": "src/Controllers/Backend/SysSms.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/25\n * Time: 10:20\n */\nnamespace Smart\\Controllers\\Backend;\n\n\n\nuse Smart\\Service\\SysSmsService;\nuse Illuminate\\Http\\Request;\nuse Facades\\Smart\\Service\\ServiceManager;\n\nclass SysSms extends Backend {\n\n\n\n    //页面入口\n    public function index(Request $request) {\n        $this->_init( '短信' );\n\n        //uri\n        $this->_addParam( 'uri', [\n\n\n        ] );\n\n        //查询参数\n        $this->_addParam( 'query', [\n                'keyword'  => $request->input( 'keyword', '' ),\n                'status'   => $request->input( 'status', '' ),\n                'page'     => $request->input( 'page', 1 ),\n                'pageSize' => $request->input( 'pageSize', 10 ),\n                'sort'     => $request->input( 'sort', 'id' ),\n                'order'    => $request->input( 'order', 'DESC' ),\n        ] );\n\n\n        //其他参数\n        $this->_addParam( [\n                'defaultRow' => $this->service->getDefaultRow(),\n                'status'     => $this->service->status,\n                'type'       => $this->service->type\n        ] );\n\n        //需要引入的 css 和 js\n        $this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' );\n\n\n        return $this->_displayWithLayout('backend::syssms.index');\n    }\n\n    /**\n     * 读取\n     * @return \\Json\n     */\n    function read(Request $request) {\n        $config = [\n                'status'   => $request->input( 'status', '' ),\n                'keyword'  => $request->input( 'keyword', '' ),\n                'page'     => $request->input( 'page', 1 ),\n                'pageSize' => $request->input( 'pageSize', 10 ),\n                'sort'     => $request->input( 'sort', 'id' ),\n                'order'    => $request->input( 'order', 'DESC' ),\n        ];\n\n        $data['rows']    = $this->service->getByCond( $config );\n        $config['count'] = TRUE;\n        $data['total']   = $this->service->getByCond( $config );\n\n        return json( ajax_arr( '查询成功', 0, $data ) );\n    }\n\n\n}"
  },
  {
    "path": "src/Controllers/Backend/SysUser.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/16\n * Time: 13:31\n */\n\nnamespace Smart\\Controllers\\Backend;\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Http\\Request;\nuse Smart\\Models\\SysUser as SysUserModel;\nuse Smart\\Service\\SysRoleService;\nuse Smart\\Service\\SysUserService;\nuse Smart\\Service\\SysUserDeviceService;\n\nclass SysUser extends Backend {\n\n\t/**\n\t * SysUser constructor.\n\t */\n\n\n\t/**\n\t * 页面显示接口\n\t *\n\t * @return string\n\t */\n\tpublic function index(Request $request) {\n\t\t$this->_init('系统用户');\n\n\t\t$this->_addParam('uri', [\n\t\t\t'upload' => full_uri('backend/sysuser/upload'),\n\t\t\t'resetPwd' => full_uri('backend/sysuser/reset_pwd', ['id' => '']),\n\t\t\t'albumCatalog' => full_uri('backend/sysuser/read_album_catalog'),\n\t\t\t'album' => full_uri('backend/sysuser/read_album'),\n\t\t\t'test' => full_uri('backend/sysuser/test'),\n\t\t]);\n\n\t\t//上传参数\n\t\t$this->_addParam('uploadParam', [\n\t\t\t'width' => 300,\n\t\t\t'height' => 300,\n\t\t\t'saveAsAlbum' => TRUE,\n\t\t\t'albumTag' => '头像',\n\t\t]);\n\n\t\t//相册参数\n\t\t$this->_addParam('albumParam', [\n\t\t\t'defaultTag' => '头像',\n\t\t\t'pageSize' => 12,\n\t\t]);\n\n\t\t//查询参数\n\t\t$this->_addParam('query', [\n\t\t\t'keyword' => $request->input('keyword', ''),\n\t\t\t'status' => $request->input('status', ''),\n\t\t\t'page' => $request->input('page', 1),\n\t\t\t'pageSize' => $request->input('pageSize', 10),\n\t\t]);\n\n\t\t$SysRole = SysRoleService::instance();\n\t\t$sysUserDevice = SysUserDeviceService::instance();\n\n\t\t//附加参数\n\t\t$this->_addParam([\n\t\t\t'defaultRow' => $this->service->getDefaultRow(),\n\t\t\t'defaultPwd' => config('backend.defaultPwd'),\n\t\t\t'status' => $this->service->status,\n\t\t\t'roles' => $SysRole->getByModule($this->module),\n\t\t\t'for_test' => $sysUserDevice->for_test,\n\t\t]);\n\n\t\t$this->_addCssLib('node_modules/jcrop-0.9.12/css/jquery.Jcrop.min.css');\n\t\t$this->_addJsLib('node_modules/jcrop-0.9.12/js/jquery.Jcrop.min.js');\n\t\t$this->_addJsLib('static/plugins/dmg-ui/Uploader.js');\n\t\t$this->_addJsLib('static/plugins/dmg-ui/TableGrid.js');\n\n\t\treturn $this->_displayWithLayout('backend::sysuser.index');\n\t}\n\n\t/**\n\t * 读取\n\t */\n\tpublic function read(Request $request) {\n\t\t$config = [\n\t\t\t'module' => 'backend',\n\t\t\t'keyword' => $request->input('keyword', ''),\n\t\t\t'status' => $request->input('status', ''),\n\t\t\t'page' => $request->input('page', 1),\n\t\t\t'pageSize' => $request->input('pageSize', 10),\n\t\t\t'withRoles' => TRUE,\n\t\t\t'withTest' => TRUE,\n\t\t];\n\n\t\t$data['rows'] = $this->service->getByCond($config);\n\t\t$config['count'] = TRUE;\n\t\t$data['total'] = $this->service->getByCond($config);\n\n\t\treturn response()->json(ajax_arr('查询成功', 0, $data));\n\t}\n\n\tpublic function test(Request $request) {\n\t\t$id = $request->id;\n\t\t$sysuser = SysUserModel::with('UserDevice')->find($id);\n\t\t$for_test = $request->input('for_test');\n\t\tif ($for_test) {\n\t\t\t$sysuser->api_token = md5(http_build_query($request->all()) . json_encode(['created_at' => time()]));\n\t\t\t$sysuser->save();\n\t\t}\n\n\t\t$data = [\n\t\t\t'device' => 'iphone',\n\t\t\t'api_version' => 'v1',\n\t\t\t'for_test' => $for_test,\n\t\t];\n\n\t\tif (empty($sysuser->UserDevice)) {\n\t\t\t$result = $sysuser->UserDevice()->create($data);\n\t\t\t$msg = '新增成功';\n\t\t} else {\n\t\t\t$sysuser->UserDevice->for_test = $for_test;\n\t\t\t$sysuser->UserDevice->save();\n\t\t\t$msg = '更新成功';\n\t\t}\n\t\treturn json(ajax_arr($msg, 0));\n\t}\n\n\t/**\n\t * 重置密码\n\t *\n\t * @return json\n\t */\n\tpublic function reset_pwd($id) {\n\n\t\t$result = $this->service->resetPwd($id, config('backend.defaultPwd'));\n\n\t\treturn json($result);\n\t}\n}\n"
  },
  {
    "path": "src/Controllers/Controller.php",
    "content": "<?php\n\nnamespace Smart\\Controllers;\n\nuse Illuminate\\Foundation\\Bus\\DispatchesJobs;\nuse Illuminate\\Routing\\Controller as BaseController;\nuse Illuminate\\Foundation\\Validation\\ValidatesRequests;\nuse Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests;\n\nclass Controller extends BaseController\n{\n    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;\n\n}\n"
  },
  {
    "path": "src/Extensions/EloquentUserProvider.php",
    "content": "<?php\nnamespace Smart\\Extentions;\n\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Auth\\EloquentUserProvider as BaseUserProvider;\n\nclass EloquentUserProvider extends BaseUserProvider\n{\n    /**\n     * Retrieve a user by the given credentials.\n     *\n     * @param  array  $credentials\n     * @return \\Illuminate\\Contracts\\Auth\\Authenticatable|null\n     */\n    public function retrieveByCredentials(array $credentials)\n    {\n        if (empty($credentials) ||\n            (count($credentials) === 1 &&\n                array_key_exists('password', $credentials))) {\n            return;\n        }\n\n        // First we will add each credential element to the query as a where clause.\n        // Then we can execute the query and, if we found a user, return it in a\n        // Eloquent User \"model\" that will be utilized by the Guard instances.\n        $query = $this->createModel()->newQuery();\n\n        // 用于标识是否是第一个登录字段，如果包含多个登录字段，使用 OR 查询\n        $flag = false;\n        foreach ($credentials as $key => $value) {\n            if (Str::contains($key, 'password')) {\n                continue;\n            }\n\n            if ($flag) {\n                $query->orWhere($key, $value);\n            } else {\n                $query->where($key, $value);\n                $flag = true;\n            }\n\n        }\n\n        return $query->first();\n    }\n}"
  },
  {
    "path": "src/Interfaces/TokenService.php",
    "content": "<?php\nnamespace Smart\\Interfaces;\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/30\n * Time: 15:29\n */\n\ninterface TokenService{\n\n}"
  },
  {
    "path": "src/Lib/Discover.php",
    "content": "<?php\nnamespace Smart\\Lib;\n\nuse Illuminate\\Filesystem\\Filesystem;\nuse Illuminate\\Support\\Str;\nuse ReflectionClass;\n\nclass Discover{\n\t\n\tprivate $root_dir;\n\n\tprivate $filesystem;\n\n\tpublic function __construct(){\n\t\t$this->root_dir = app_path().'/Api';\n\t\t$this->filesystem = resolve('files');\n\t}\n\n\t//获取版本\n\tpublic function version(){\n\t\t$dir = $this->root_dir.'/Service';\n\n\t\t$dirs = $this->filesystem->directories($dir);\n\t\t$data = [];\n\t\tforeach($dirs as $dir_children){\n\t\t\t$version = substr($dir_children, strrpos($dir_children,'/')+1);\n\t\t\t$data[$version ] = [\n\t\t\t\t[\n\t\t\t\t\t'version' => $version,\n\t\t\t\t\t'text'\t  => $version,\t\n\t\t\t\t]\n\t\t\t];\n\t\t}\n\n\t\treturn $data;\n\t\t\n\t}\n\n\t//获取版本所在目录\n\tpublic function dir($version){\n\t\t//列出版本下的目录\n\n\t}\n\n\t//获取服务类\n\tpublic function service($version){\n\n\t\t$dir   = app_path('Api') . '/Service/' . $version;\n\t\t$files = $this->filesystem->allFiles($dir);\n\t\t\n\t\t$class_func = function($file_path){\n\t\t\t$class_tmp = Str::after($file_path, base_path());\n\t\t\t$class_arr = explode('/' ,$class_tmp);\n\t\t\t$class_arr = array_filter($class_arr);\n\t\t\t$class_arr = array_map(function($val){\n\t\t\t\treturn Str::studly($val);\n\t\t\t}, $class_arr);\n\t\t\treturn Str::before( join('\\\\', $class_arr), '.php');\n\t\t};\n\t\t$data = [];\n\t\tforeach($files as $file){\n\t\t\t$filename = $file->getRelativePathname();\n            $class = substr( $filename, 0, strripos($filename , 'Service.php'));\n\n\t\t\t$class = $class_func($file);\n\t\t\t$name = $this->_parser($class);\n\t\t\t$directory = $this->filesystem->dirname($file);\n\t\t\t\n\t\t\t$dir = substr($directory , strrpos($directory,'/')+1);\n\t\t\t$action = strtolower(Str::before($this->filesystem->name($file),'Service'));\n\t\t\t\n\t\t\t$data[$dir][] = ['directory' => $dir, 'action' =>$action , 'text'=> $name];\n\t\t\t\n\t\t}\n\t\treturn $data;\n\n\t\t/*$discover_path = function ($dir) use (&$discover_path, $filesystem){\n\t\t\t$dirs = $filesystem->directories($dir);\n\n\t\t\tforeach($dirs as $dir_children){\n\t\t\t\t$version = substr($dir_children, strrpos($dir_children,'/')+1);\n\t\t\t//\tsubstr($dir_children,)\n\t\t\t\t$files = $filesystem->allFiles($dir_children);\n\n\t\t\t\tforeach($files as $file){\n\t\t\t\t\t$service = $filesystem->name($file);\n\t\t\t\t//\techo $service.\"\\n\";\n\t\t\t\t}\n\t\t\t\t \n\t\t\t\t$discover_path($dir_children);\t\t \n\t\t\t}\n\t\t\t\n\t\t};\n\t\t$tmp = $discover_path($dir);\n\t\t//获取到版本号目录\n\t\t$dirs = $filesystem->directories($dir);\n\n\t\t$version = [];\n\t\tforeach($dirs as $version){\n\t\t\tarray_push($version, $filesystem->name($dir));\n\t\t}\n\t\treturn $version;*/\n\t}\n\n\tprivate function _parser($class){\n\t\t$ref = new ReflectionClass( $class );\n        $doc = $ref->getDocComment();\n        preg_match( '#^/\\*\\*(.*)\\*/#s', $doc, $comment );\n        $comment = trim( $comment [1] );\n        preg_match_all( '#^\\s*\\*(.*)#m', $comment, $lines );\n\n        $name = trim( $lines[1][0] );\n        preg_match_all( '/@deprecated([^@]*)/', $comment, $matches );\n\n        if ( empty( $matches[0] ) ) {\n            return $name;\n        } else {\n            return FALSE;\n        }\n\t}\n\n}"
  },
  {
    "path": "src/Middleware/CheckToken.php",
    "content": "<?php\n\nnamespace Smart\\Middleware;\n\nuse Closure;\nuse App\\Api\\Service\\v1\\ApiService;\n\nclass CheckToken\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @param  \\Closure  $next\n     * @return mixed\n     */\n\n    protected $api = NULL;\n\n\n\n    public function __construct()\n    {\n        $this->api = ApiService::instance();\n        $this->api->debug = false;\n    }\n\n    public function handle($request, Closure $next)\n    {\n        $api = $this->api;\n\n        $timestamp = $request->header( 'timestamp' );\n        $signature = $request->header( 'signature' );\n\n        if ( ! $api->validTimestamp( $timestamp ) ) {\n             json( $api->getError( 405 ) )->send();\n        }\n        $params = $request->all();\n        $api->log( 'params' , $params );\n\n        //取时间戳\n        $params['timestamp'] = $timestamp;\n\n        //检查签名\n        if ( ! $api->validSignature( $params , $signature ) ) {\n           json( $api->getError( 406 ) )->send() ;\n        }\n\n\n\n        // 参数错误\n        if ( ! is_array( $params ) || empty( $params ) ) {\n            json( $api->getError( 400 ) )->send() ;\n        }\n\n        return $next($request);\n    }\n\n    public function terminate($request , $response){\n        $header = [\n            'timestamp'       => $request->header( 'timestamp' ) ,\n            'signature'       => $request->header( 'signature' ) ,\n            'device'          => $request->header( 'device' ) ,\n            'deviceOsVersion' => $request->header( 'device-os-version' ) ,\n            'appVersion'      => $request->header( 'app-version' ) ,\n            'apiVersion'      => $request->input('version') ,\n        ];\n        $this->api->logStat( $header );\n        $this->api->log( 'headerData' , $header );\n\n\n    }\n}\n"
  },
  {
    "path": "src/Middleware/Cors.php",
    "content": "<?php\n\nnamespace Smart\\Middleware;\n\nuse Closure;\n\n\nclass Cors\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @param  \\Closure  $next\n     * @return mixed\n     */\n\n\n\n    public function handle($request, Closure $next)\n    {\n        $response = $next($request);\n        \n        $response->header('Access-Control-Allow-Origin', '*');\n        $response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, Accept, multipart/form-data, application/json');\n        $response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS');\n        $response->header('Access-Control-Allow-Credentials', 'false');\n        return $response;\n\n    }\n\n    \n}\n"
  },
  {
    "path": "src/Middleware/Permission.php",
    "content": "<?php\n\nnamespace Smart\\Middleware;\n\nuse Closure;\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Route;\nuse Smart\\Service\\SysFuncService;\nuse Smart\\Service\\SysRoleService;\nuse Smart\\Service\\SysUserService;\n\nclass Permission {\n\t/**\n\t * Handle an incoming request.\n\t *\n\t * @param  \\Illuminate\\Http\\Request  $request\n\t * @param  \\Closure  $next\n\t * @return mixed\n\t */\n\tpublic function handle($request, Closure $next) {\n\n\t\t// 获取当前路由名称  module.func.permission\n\t\t$name = Route::currentRouteName();\n\t\t$route = explode('.', $name);\n\t\tlist($module, $func, $privilege) = $route;\n\t\t$sysUserService = ServiceManager::make(SysUserService::class);\n\t\t$roles = $sysUserService->getById(Auth::id())->with('sysRole')->get();\n\n\t\t$role = $roles->firstWhere('id', config('backend.superAdminId'));\n\t\tif ($role) {\n\t\t\treturn $next($request);\n\t\t}\n\n\t\tif (empty($privilege)) {\n\t\t\treturn response()->json(['msg' => '校验权限必填', 'code' => 422]);\n\t\t}\n\t\t//当前操作对应的id\n\n\t\t$funcUri = $module . '/' . $func . '/index';\n\n\t\t$sysFuncService = ServiceManager::make(SysFuncService::class);\n\t\t$sysFunc = $sysFuncService->getByUri($funcUri);\n\n\t\t$data = $sysFunc->sysFuncPrivileges()->where('name', $privilege == 'index' ? 'read' : $privilege)->first();\n\n\t\t//当前\n\t\tif (empty($data)) {\n\t\t\treturn response()->json(['msg' => '当前用户未设置任何权限', 'code' => 422]);\n\t\t}\n\n\t\t$privilege_id = $data->id;\n\t\t$sysRoleService = ServiceManager::make(SysRoleService::class);\n\n\t\t//筛选出符合条件的角色\n\t\tforeach ($roles as $role) {\n\n\t\t\t//从角色中筛选出含该功能的角色\n\t\t\t$sysRole = $sysRoleService->getById($role->id);\n\t\t\t$data = $sysRole::with('sysFuncPrivileges')->get();\n\n\t\t\tforeach ($data as $d) {\n\t\t\t\t//只要有一个角色符合条件,就说明验证通过\n\t\t\t\t$result = $d->sysFuncPrivileges->firstWhere('id', $privilege_id);\n\n\t\t\t\tif ($result) {\n\t\t\t\t\treturn $next($request);\n\t\t\t\t}\n\t\t\t}\n\t\t\t//从符合条件的角色中筛选出符号当前操作的角色\n\n\t\t}\n\n\t\treturn response()->json(['msg' => '无此权限', 'code' => 422]);\n\t}\n}\n"
  },
  {
    "path": "src/Middleware/ResetPassword.php",
    "content": "<?php\n\nnamespace Smart\\Middleware;\n\nuse Closure;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Hash;\n\nclass ResetPassword\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @param  \\Closure  $next\n     * @return mixed\n     */\n\n\n\n    public function handle($request, Closure $next)\n    {\n        $user = $request->user();\n\n        if($request->pwd != $request->pwdConfirm){\n            \n            return response()->json(ajax_arr('两次输入的新密码不一致', 500));\n        }\n        $oldPwd = Hash::make($request->oldPwd);\n\n        if(!Auth::guard()->attempt(\n            ['username' => $request->user()->username , 'email' => $request->user()->username, 'password' => $request->oldPwd]\n        )){\n\n            return response()->json(ajax_arr('原密码错误', 500));\n        }\n        $request->offsetSet('password', $request->pwd);\n\n        return $next($request);\n\n    }\n\n    \n}\n"
  },
  {
    "path": "src/Models/MerAlbum.php",
    "content": "<?php namespace Smart\\Models;\n/**\n * MerAlbum Model\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2017-09-26\n */\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass MerAlbum extends Model {\n    public $table =  'mer_album';\n\n    public $primaryKey = 'id';\n\n    public $timestamps = FALSE;\n\n    use \\Smart\\Traits\\Service\\Scope;\n\n    protected $fillable = ['mer_id','sort','uri','size','mimes','img_size','desc','status'];\n\n    public function scopeKeyword( $query , $param){\n        if($param)\n            return $query->where('name' , 'like' , \"%{$param}%\");\n    }\n\n    public function tag(){\n        return $this->belongsToMany( MerAlbumCatalog::class , 'mer_album_tag' , 'album_id' , 'catalog_id' );\n    }\n}\n"
  },
  {
    "path": "src/Models/MerAlbumCatalog.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass MerAlbumCatalog extends Model\n{\n    public $table = 'mer_album_catalog';\n\n    public $primaryKey = 'id';\n\n    public $timestamps = FALSE;\n\n    public $fillable = ['tag','mer_id','sort','icon','totals'];\n\n    use \\Smart\\Traits\\Service\\Scope;\n\n    public function scopeKeyword( $query , $param){\n        if($param)\n            return $query->where('name' , 'like' , \"%{$param}%\");\n    }\n\n    public function scopeMerId( $query , $param){\n        if($param === ''){\n            return $query->whereNull('mer_id');\n        }else{\n            return $query->where('mer_id' , $param);\n        }\n    }\n\n    public function album(){\n        return $this->belongsToMany( MerAlbum::class , 'mer_album_tag' , 'catalog_id' , 'album_id' );\n    }\n    //\n}\n"
  },
  {
    "path": "src/Models/MerAlbumTag.php",
    "content": "<?php namespace Smart\\Models;\n/**\n * MerAlbumTag Model\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2017-09-26\n */\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass MerAlbumTag extends Model {\n    public $table =  'mer_album_tag';\n\n    public $primaryKey = 'id';\n\n    public $timestamps = FALSE;\n\n    use \\Smart\\Traits\\Service\\Scope;\n\n    public function scopeKeyword( $query , $param){\n        if($param)\n            return $query->where('name' , 'like' , \"%{$param}%\");\n    }\n}\n"
  },
  {
    "path": "src/Models/MerGoodsCatalog.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass MerGoodsCatalog extends Model\n{\n    public $table = 'mer_goods_catalog';\n\n    public $primaryKey = 'id';\n\n    public $timestamps = false;\n\n    use \\Smart\\Traits\\Service\\Scope,\\Smart\\Traits\\Service\\ScopeMer;\n\n    public function scopeKeyword($query , $param){\n        if($param !== '')\n            return $query->where('text' , 'like' , \"%{$param}%\");\n    }\n    //\n}\n"
  },
  {
    "path": "src/Models/MerSysUser.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass MerSysUser extends Model\n{\n    public $table = 'mer_sys_user';\n\n    public $primaryKey  = 'id';\n\n    public $timestamps = false;\n\n    use \\Smart\\Traits\\Service\\Scope;\n    //\n\n    public function scopeKeyword($query ,$param){\n        if($param)\n            return $query->where('name' , 'like', \"%{$param}%\");\n    }\n\n\n}\n"
  },
  {
    "path": "src/Models/MerUser.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass MerUser extends Model\n{\n    public $table = 'mer_user';\n\n    public $primaryKey = 'id';\n\n    public $timestamps = false;\n\n    /*public function UserDevice(){\n        return $this->hasOne('Smart\\Models\\MerUserDevice');\n    }*/\n\n    public function scopeKeyword($query , $param){\n        if($param)\n            return $query->where(function($query) use ($param){\n                $query->orWhere('username' , 'like' , \"%{$param}%\")->orWhere('nickname' , 'like' , \"%{$param}%\")->orWhere( 'phone' , 'like' , \"%{$param}%\");\n\n                });\n    }\n\n    public function scopeMerId($query , $param){\n        if($param)\n            return $query->where('mer_id' , $param);\n    }\n\n    public function scopePhone($query , $param){\n        if($param)\n            return $query->where('phone' , $param);\n    }\n\n    public function scopeUsername($query , $param){\n        if($param)\n            return $query->where( 'username' , $param);\n    }\n\n    public function scopeNickname($query , $param){\n        if($param)\n            return $query->where( 'nickname' , $param);\n    }\n\n    public function scopeEmail($query , $param){\n        if($param)\n            return $query->where('email' , $param );\n    }\n\n    public function scopeStatus($query , $param){\n        if($param !== '')\n            return $query->where('status' , $param);\n    }\n\n    public function scopeExcludeId($query , $param){\n        if($param)\n            return $query->where('id' , '<>' , $param);\n    }\n\n    public function scopeGetAll($query , $params = ['getAll'=>false]){\n        if(!$params['getAll'])\n            return $query->skip(($params['page']-1) * $params['pageSize'] )->take($params['pageSize'] );\n\n\n    }\n\n}\n"
  },
  {
    "path": "src/Models/MerUserDevice.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass MerUserDevice extends Model\n{\n    public function User(){\n        return $this->belongsTo('Smart\\Models\\MerUser');\n    }\n    //\n}\n"
  },
  {
    "path": "src/Models/SysApiLog.php",
    "content": "<?php namespace Smart\\Models;\n/**\n * SysApiLog Model\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2017-09-25\n */\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SysApiLog extends Model {\n    public $table =  'sys_api_log';\n\n    public $primaryKey = 'id';\n\n    public $timestamps = FALSE;\n\n    use \\Smart\\Traits\\Service\\Scope;\n}\n"
  },
  {
    "path": "src/Models/SysAppVersion.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SysAppVersion extends Model\n{\n    public $table = 'sys_app_version';\n\n    public $timestamps = false;\n\n    use \\Smart\\Traits\\Service\\Scope;\n\n    public function scopeKeyword($query , $param){\n        if($param !== '')\n            return $query->where('description' , 'like' , \"%{$param}%\");\n    }\n    //\n}\n"
  },
  {
    "path": "src/Models/SysArea.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SysArea extends Model\n{\n    public $table = 'sys_area';\n\n    public $primaryKey = 'id';\n\n    public $timestamps = FALSE;\n\n    use \\Smart\\Traits\\Service\\Scope;\n\n    public function scopePid($query ,$param){\n        if($param !== '')\n            return $query->where('pid',$param);\n    }\n}\n"
  },
  {
    "path": "src/Models/SysFunc.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SysFunc extends Model {\n\tpublic $table = 'sys_func';\n\n\tpublic $primaryKey = 'id';\n\n\tpublic $timestamps = false;\n\n\tuse \\Smart\\Traits\\Service\\Scope;\n\n\tpublic function scopeIsMenu($query, $param) {\n\t\tif ($param) {\n\t\t\treturn $query->where('is_menu', $param);\n\t\t}\n\n\t}\n\n\tpublic function scopeModule($query, $param = '') {\n\t\tif ($param) {\n\t\t\treturn $query->whereIn('module', (array)$param);\n\t\t}\n\t}\n\n\tpublic function sysRolePermissions() {\n\t\treturn $this->belongsToMany(\\Smart\\Models\\SysRolePermission::class, 'sys_func_privilege', 'id', 'func_id');\n\t}\n\n\tpublic function privilege() {\n\t\treturn $this->hasMany(\\Smart\\Models\\SysFuncPrivilege::class, 'func_id');\n\t}\n\n\tpublic function children(){\n        return $this->hasMany( SysFunc::class , 'pid');\n    }\n\n}\n"
  },
  {
    "path": "src/Models/SysFuncPrivilege.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SysFuncPrivilege extends Model {\n\tpublic $table = 'sys_func_privilege';\n\n\tpublic $primaryKey = 'id';\n\n\tpublic $timestamps = false;\n\t//\n\n\tpublic function sysFunc() {\n\t\treturn $this->belongsTo(\\Smart\\Models\\SysFunc::class, 'func_id');\n\t}\n}\n"
  },
  {
    "path": "src/Models/SysMail.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SysMail extends Model\n{\n    protected  $table = 'sys_mail';\n\n    public $primaryKey = 'id';\n\n    public $timestamps = false;\n\n    use \\Smart\\Traits\\Service\\Scope;\n\n    public function scopeKeyword($query , $param){\n        if($param)\n            return $query->where('keyword' , 'like' , \"%{$param}%\");\n    }\n    //\n}\n"
  },
  {
    "path": "src/Models/SysMerchant.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SysMerchant extends Model\n{\n    public $table = 'sys_merchant';\n\n    public $primaryKey = 'id';\n\n    public $timestamps = false;\n    \n    use \\Smart\\Traits\\Service\\Scope;\n\n    public function scopeKeyword($query , $param){\n        if($param !== '')\n            return $query->where('name' , 'like' , \"%{$param}%\");\n    }\n\n    public function sysUsers(){\n        return $this->belongsToMany('Smart\\Models\\SysUser' , 'mer_sys_user' , 'mer_id' , 'sys_user_id');\n    }\n\n}\n"
  },
  {
    "path": "src/Models/SysModule.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SysModule extends Model\n{\n    public $table = 'sys_modules';\n\n    public $timestamps = true;\n\n    protected  $fillable = ['name','symbol','displayorder','version','author','status','thumb','desc'];\n\n    use \\Smart\\Traits\\Service\\Scope;\n\n   \n}\n"
  },
  {
    "path": "src/Models/SysPush.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SysPush extends Model\n{\n    public $table = 'sys_push';\n\n    public $timestamps = false;\n\n    use \\Smart\\Traits\\Service\\Scope;\n\n    public function scopeKeyword( $query ,$param){\n        if($param !== '')\n            return $query->where('name' , 'like' , \"%{$param}%\");\n    }\n    //\n}\n"
  },
  {
    "path": "src/Models/SysRole.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SysRole extends Model {\n\tpublic $table = 'sys_role';\n\n\tpublic $primaryKey = 'id';\n\n\tpublic $timestamps = false;\n\n\tuse \\Smart\\Traits\\Service\\Scope;\n\n\tpublic function sysFuncPrivileges() {\n\t\treturn $this->belongsToMany(SysFuncPrivilege::class, 'sys_role_permission', 'role_id', 'privilege_id');\n\t}\n}\n"
  },
  {
    "path": "src/Models/SysRolePermission.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SysRolePermission extends Model {\n\tpublic $table = 'sys_role_permission';\n\n\tpublic $primaryKey = 'id';\n\n\tpublic $timestamps = false;\n\n\tuse \\Smart\\Traits\\Service\\Scope;\n\n\tpublic function sysFuncs() {\n\t\treturn $this->belongsToMany(Smart\\Models\\SysFunc::class, 'sys_func_privilege', 'func_id', 'id');\n\t}\n}\n"
  },
  {
    "path": "src/Models/SysSettings.php",
    "content": "<?php namespace Smart\\Models;\n/**\n * SysSettings Model\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2018-06-25\n */\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SysSettings extends Model {\n\tpublic $table = 'sys_settings';\n\n\tpublic $primaryKey = 'id';\n\n\tpublic $timestamps = True;\n\n\tuse \\Smart\\Traits\\Service\\Scope;\n}\n"
  },
  {
    "path": "src/Models/SysSms.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SysSms extends Model\n{\n    protected $table = 'sys_sms';\n\n    public $primaryKey = 'id';\n\n    public $timestamps = FALSE;\n\n    use \\Smart\\Traits\\Service\\Scope;\n\n    public function scopeKeyword($query  , $param){\n        if($param !== '')\n            return $query->where( 'name' , 'like' , \"%{$param}%\");\n    }\n}\n"
  },
  {
    "path": "src/Models/SysStatistics.php",
    "content": "<?php namespace Smart\\Models;\n/**\n * SysStatistics Model\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2017-09-25\n */\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SysStatistics extends Model {\n    public $table =  'sys_statistics';\n\n    public $primaryKey = 'id';\n\n    public $timestamps = FALSE;\n\n    use \\Smart\\Traits\\Service\\Scope;\n}\n"
  },
  {
    "path": "src/Models/SysUser.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Illuminate\\Notifications\\Notifiable;\nuse Spatie\\Permission\\Traits\\HasRoles;\n\nclass SysUser extends Authenticatable {\n\tuse Notifiable;\n\tuse HasRoles;\n\tprotected $table = 'sys_user';\n\n\tpublic $primaryKey = 'id';\n\n\tpublic $timestamps = FALSE;\n\n\tprotected $fillable = ['id','module','username','password','icon','email','phone','status','api_token','signed_at','signed_ip','remember_token','name'];\n\n\tuse \\Smart\\Traits\\Service\\Scope;\n\n\tpublic function sysMerchants() {\n\t\treturn $this->belongsToMany('Smart\\Models\\SysMerchant', 'mer_sys_user', 'sys_user_id', 'mer_id');\n\t}\n\n\tpublic function scopeModule($query , $param = ''){\n\t\tif($param)\n            return $query->where('module' ,  $param);\n\t}\n\n\tpublic function sysRole() {\n\t\treturn $this->belongsToMany(SysRole::class, 'sys_user_role', 'user_id', 'role_id');\n\t}\n\n\tpublic function UserDevice() {\n\t\treturn $this->hasOne(\\Smart\\Models\\SysUserDevice::class, 'user_id');\n\t}\n\n\tpublic function scopeKeyword($query, $param) {\n\t\tif ($param) {\n\t\t\treturn $query->where(function ($query) use ($param) {\n\t\t\t\t$query->orWhere('username', 'like', \"%{$param}%\")->orWhere('phone', 'like', \"%{$param}%\");\n\n\t\t\t});\n\t\t}\n\n\t}\n\n\tpublic function username() {\n\t\treturn 'username';\n\t}\n}\n"
  },
  {
    "path": "src/Models/SysUserDevice.php",
    "content": "<?php namespace Smart\\Models;\n/**\n * SysUserDevice Model\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , 2018-06-18\n */\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SysUserDevice extends Model {\n\tpublic $table = 'sys_user_device';\n\n\tpublic $primaryKey = 'id';\n\n\tpublic $timestamps = FALSE;\n\n\tprotected $fillable = ['user_id','for_test', 'token', 'device', 'api_version'];\n\n\tuse \\Smart\\Traits\\Service\\Scope;\n\n\tpublic function user() {\n\t\treturn $this->belongsTo(\\Smart\\Models\\SysUser::class, 'user_id');\n\t}\n}\n"
  },
  {
    "path": "src/Models/SysUserRole.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SysUserRole extends Model\n{\n    public $table = 'sys_user_role';\n\n    public $primaryKey = 'id';\n    \n    public $timestamps = false;\n    //\n    \n    use \\Smart\\Traits\\Service\\Scope;\n\n    public function scopeName( $query ,$param){\n        if($param)\n            return $query->where('name' , 'like' , \"%{$param}%\");\n    }\n}\n"
  },
  {
    "path": "src/Models/User.php",
    "content": "<?php\n\nnamespace Smart\\Models;\n\nuse Illuminate\\Notifications\\Notifiable;\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\n\nclass User extends Authenticatable\n{\n    protected $table = 'sys_user';\n    use Notifiable;\n\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'name', 'email', 'password',\n    ];\n\n    /**\n     * The attributes that should be hidden for arrays.\n     *\n     * @var array\n     */\n    protected $hidden = [\n        'password', 'remember_token',\n    ];\n}\n"
  },
  {
    "path": "src/Service/BaseService.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: sl\n * Date: 2017/9/14\n * Time: 22:09\n */\nnamespace Smart\\Service;\n\nclass BaseService{\n\n\n\n}"
  },
  {
    "path": "src/Service/GenerateService.php",
    "content": "<?php\n/**\n * 自动生成代码 Service\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/25\n * Time: 14:46\n */\n\nnamespace Smart\\Service;\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Support\\Facades\\DB;\nuse Smart\\Service\\SysModuleService;\nuse Illuminate\\Support\\Str;\n\ndefine('SYSTEM_TEMP_BASE_PATH', __DIR__ . '/../../templates/generate/system/');\ndefine('API_TEMP_BASE_PATH', __DIR__ . '/../../templates/generate/api');\ndefine('APP_PATH', app_path());\ndefine('BASE_PATH', base_path());\n\nclass GenerateService {\n\n\tpublic $type = [\n\t\t'system' => '管理模块',\n\t\t'api' => 'API 接口',\n\t];\n\n\t//模块\n\tpublic $module = [];\n\n\tpublic $apiVer = [\n\t\t'v1' => 'v1',\n\t\t'v2' => 'v2',\n\n\t];\n\n\tvar $apiParams = [\n\t\t'api_token' => 'api_token (用户Token)',\n\t\t'phone' => 'phone (手机号)',\n\t\t'status' => 'status (状态)',\n\t\t'merId' => 'mer_id (机构ID)',\n\t\t'orderId' => 'orderId (订单ID)',\n\t\t'goodsId' => 'goodsId (商品ID)',\n\t\t'page' => 'page (页码)',\n\t\t'pageSize' => 'pageSize (每面行数)',\n\t];\n\n\tvar $apiAuthUser = [\n\t\t0 => '否',\n\t\t1 => '是',\n\t];\n\n\t//表类型\n\tvar $tableType = [\n\t\t'grid' => 'Grid',\n\t\t'treeGrid' => 'Tree Grid',\n\t];\n\n\t//视图类型\n\tvar $viewType = [\n\t\t'portlet' => '层 (Portlet)',\n\t\t'modal' => '弹窗 (Modal)',\n\t];\n\n\t//文件存储路径 \t\tucfirst()\n\tprotected $filePath = [\n\t\t//   'model'      => base_path('common/model/{func}.php'),\n\t\t'model' => APP_PATH . '/{module}/Models/{func}.php',\n\t\t'service' => APP_PATH . '/{module}/Service/{func}Service.php',\n\t\t'controller' => APP_PATH . '/{moduleLower}/controllers/{func}.php',\n\t\t'js' => 'static/js/{moduleLower}/{func}.js',\n\t\t//   'view'       => BASE_PATH . '/resources/views/{module}/{funcLower}/index.html',\n\t\t'view' => APP_PATH . '/{moduleLower}/views/{funcLower}/index.blade.php',\n\t\t'api' => APP_PATH . '/Api/Service/',\n\t];\n\n\t//字段识别\n\tvar $fieldIdentify = [\n\t\t//上传字段\n\t\t'upload' => ['icon', 'icon_2x', 'icon_3x', 'img', 'image', 'pic'],\n\t\t//editor\n\t\t'editor' => ['content'],\n\t\t'tableType' => ['pid', 'level'],\n\t\t//radio\n\t\t'radio' => ['status', 'type', 'catalog'],\n\t\t//select\n\t\t'select' => ['pid'],\n\t\t//form 排除字段\n\t\t'formExclusion' => ['id', 'mer_id', 'created_at', 'level', 'updated_at'],\n\t\t//th 排除字段\n\t\t'thExclusion' => ['mer_id', 'desc', 'content', 'level'],\n\t\t//th 格式化方法\n\t\t'thFormatter' => [\n\t\t\t'catalog' => 'data-formatter=\"formatCatalog\"',\n\t\t\t'icon' => 'data-formatter=\"formatIcon\"',\n\t\t\t'status' => 'data-formatter=\"formatStatus\"',\n\t\t\t'type' => 'data-formatter=\"formatType\"',\n\t\t\t'created_at' => 'data-formatter=\"formatDatetime\"',\n\t\t],\n\t\t//th 宽度\n\t\t'thWidth' => [\n\t\t\t'id' => '40',\n\t\t\t'sort' => '40',\n\t\t\t'text' => '200',\n\t\t\t'name' => '200',\n\t\t\t'title' => '200',\n\t\t\t'created_at' => '180',\n\t\t],\n\t];\n\n\t//模板\n\tvar $systemTemps = [\n\t\t'model' => 'model.txt',\n\t\t'service' => 'service.txt',\n\t\t'controller' => 'controller.txt',\n\t\t'view' => 'view.txt',\n\t\t'js' => 'js.txt',\n\n\t];\n\n\tvar $systemComponents = [\n\t\t'traits' => [\n\t\t\t'instanceTrait' => 'component/traits/instance_trait.txt',\n\t\t],\n\t\t'editor' => [\n\t\t\t'controller' => [\n\t\t\t\t'editorDecode' => 'component/editor/controller/editor_decode.txt',\n\t\t\t\t'editorJs' => 'component/editor/controller/editor_js.txt',\n\t\t\t\t'editorUri' => 'component/editor/controller/editor_uri.txt',\n\t\t\t],\n\t\t\t'js' => [\n\t\t\t\t'editorClear' => 'component/editor/js/editor_clear.txt',\n\t\t\t\t'editorInit' => 'component/editor/js/editor_init.txt',\n\t\t\t\t'editorReload' => 'component/editor/js/editor_reload.txt',\n\t\t\t\t'editorUploadUri' => 'component/editor/js/editor_upload_uri.txt',\n\t\t\t],\n\t\t],\n\t\t'field' => [\n\t\t\t'view' => [\n\t\t\t\t'editor' => 'component/field/view/editor.txt',\n\t\t\t\t'input' => 'component/field/view/input.txt',\n\t\t\t\t'radio' => 'component/field/view/radio.txt',\n\t\t\t\t'select' => 'component/field/view/select.txt',\n\t\t\t\t'select2' => 'component/field/view/select2.txt',\n\t\t\t\t'upload' => 'component/field/view/upload.txt',\n\t\t\t],\n\t\t],\n\t\t'select2' => [\n\t\t\t'controller' => [\n\t\t\t\t'select2Css' => 'component/select2/controller/select2_css.txt',\n\t\t\t\t'select2Js' => 'component/select2/controller/select2_js.txt',\n\t\t\t\t'select2Uri' => 'component/select2/controller/select2_uri.txt',\n\t\t\t],\n\t\t\t'js' => [\n\t\t\t\t'select2Clear' => 'component/select2/js/select2_clear.txt',\n\t\t\t\t'select2Init' => 'component/select2/js/select2_init.txt',\n\t\t\t\t'select2Set' => 'component/select2/js/select2_set.txt',\n\t\t\t],\n\t\t],\n\t\t'tableType' => [\n\t\t\t'controller' => [\n\t\t\t\t'grid' => [\n\t\t\t\t\t'gridJs' => 'component/table_type/controller/grid_js.txt',\n\t\t\t\t\t'gridRead' => 'component/table_type/controller/grid_read.txt',\n\t\t\t\t],\n\t\t\t\t'treeGrid' => [\n\t\t\t\t\t'treeGridJs' => 'component/table_type/controller/tree_grid_js.txt',\n\t\t\t\t\t'treeGridRead' => 'component/table_type/controller/tree_grid_read.txt',\n\t\t\t\t],\n\t\t\t],\n\t\t\t'js' => [\n\t\t\t\t'grid' => [\n\t\t\t\t\t'gridInit' => 'component/table_type/js/grid_init.txt',\n\t\t\t\t\t'gridPlugin' => 'component/table_type/js/grid_plugin.txt',\n\t\t\t\t\t'gridId' => 'component/table_type/js/grid_id.txt',\n\t\t\t\t],\n\t\t\t\t'treeGrid' => [\n\t\t\t\t\t'treeGridInit' => 'component/table_type/js/tree_grid_init.txt',\n\t\t\t\t\t'treeGridPlugin' => 'component/table_type/js/tree_grid_plugin.txt',\n\t\t\t\t\t'treeGridId' => 'component/table_type/js/tree_grid_id.txt',\n\t\t\t\t],\n\t\t\t],\n\t\t\t'service' => [\n\t\t\t\t'grid' => [\n\t\t\t\t\t'grid' => 'component/table_type/service/grid.txt',\n\t\t\t\t\t'gridTrait' => 'component/table_type/service/grid_trait.txt',\n\t\t\t\t],\n\t\t\t\t'treeGrid' => [\n\t\t\t\t\t'treeGrid' => 'component/table_type/service/tree_grid.txt',\n\t\t\t\t\t'treeGridTrait' => 'component/table_type/service/tree_grid_trait.txt',\n\t\t\t\t],\n\t\t\t],\n\t\t\t'view' => [\n\t\t\t\t'grid' => 'component/table_type/view/grid.txt',\n\t\t\t\t'treeGrid' => 'component/table_type/view/tree_grid.txt',\n\t\t\t],\n\t\t],\n\t\t'upload' => [\n\t\t\t'controller' => [\n\t\t\t\t'uploadJs' => 'component/upload/controller/upload_js.txt',\n\t\t\t\t'uploadUri' => 'component/upload/controller/upload_uri.txt',\n\t\t\t\t'uploadParam' => 'component/upload/controller/upload_param.txt',\n\t\t\t],\n\t\t\t'js' => [\n\t\t\t\t'uploadButton' => 'component/upload/js/upload_button.txt',\n\t\t\t\t'uploadPreviewClear' => 'component/upload/js/upload_preview_clear.txt',\n\t\t\t\t'uploadPreviewSet' => 'component/upload/js/upload_preview_set.txt',\n\t\t\t],\n\t\t],\n\t\t'viewType' => [\n\t\t\t'js' => [\n\t\t\t\t'modal' => 'component/view_type/js/modal.txt',\n\t\t\t\t'portlet' => 'component/view_type/js/portlet.txt',\n\t\t\t],\n\t\t\t'view' => [\n\t\t\t\t'modal' => 'component/view_type/view/modal.txt',\n\t\t\t\t'portlet' => 'component/view_type/view/portlet.txt',\n\t\t\t],\n\t\t],\n\t];\n\n\tvar $apiTemp = [\n\t\t'tmp' => API_TEMP_BASE_PATH . '/api.txt',\n\t\t'authUser' => API_TEMP_BASE_PATH . '/auth_user.txt',\n\t];\n\n\tprivate static $instance;\n\n\tpublic static function instance() {\n\t\tif (self::$instance == NULL) {\n\t\t\tself::$instance = new GenerateService();\n\t\t}\n\t\tself::$instance->_init();\n\t\treturn self::$instance;\n\t}\n\n\tprivate function _init() {\n\t\t//初始化Module\n\t\t$sysModuleService = ServiceManager::make(SysModuleService::class);\n\t//\t$modules = $sysModuleService->getByCond(['status' => 1]);\n\t\t\n\t/*\tforeach ($modules as $m) {\n\t\t\t$this->module = array_merge($this->module, [ucfirst($m['symbol']) => $m['symbol']]);\n\t\t}*/\n\t\t$modules = explode(',',config('backend.module_ext'));\n        $modules = array_combine($modules, $modules);\n        $this->module = $modules;\n\n\t\t//初始化api版本号\n\t\t$apiVersion = config('backend.api.apiVersion');\n\t//\t$this->apiVer = [$apiVersion => $apiVersion];\n\n\t}\n\n\t/**\n\t * 取所有表\n\t * @return \\Collection\n\t */\n\tpublic function getTables() {\n\t\t$connection_name = config('database.default');\n\t\t$connections = config('database.connections');\n\t\t$data = DB::table('information_schema.tables')\n\t\t\t->where('TABLE_SCHEMA', $connections[$connection_name]['database'])\n\t\t\t->get(['table_name as tableName'])->toArray();\n\n\t\treturn $data ? $data : [];\n\t}\n\n\tprivate function getSystemComponents() {\n\t\t$component = [];\n\n\t\tforeach ($this->systemComponents as $key => $item) {\n\t\t\t$component[] = $key;\n\t\t}\n\n\t\treturn $component;\n\t}\n\n\tprivate function getTableField($tableName) {\n\n\t\t$db = DB::table('information_schema.columns')\n\t\t\t->where('TABLE_NAME', $tableName)\n\t\t\t->where('TABLE_SCHEMA', config('database.connections.mysql.database'));\n\n\t\treturn $db->get([\n\t\t\t'COLUMN_NAME AS fieldName',\n\t\t\t'DATA_TYPE AS fieldType',\n\t\t\t'COLUMN_DEFAULT AS fieldDefault',\n\t\t\t'COLUMN_COMMENT AS fieldComment',\n\t\t])->toArray();\n\t}\n\n\t//取单个表信息\n\tpublic function getSystemInfo($tableName, $module, $returnFieldInfo = FALSE) {\n\t\t$module = ucfirst($module);\n\t\t$fieldInfo = $this->getTableField($tableName);\n\n\t\tif (!$fieldInfo || empty($fieldInfo)) {\n\t\t\treturn ajax_arr('表不存在', 500);\n\t\t}\n\n\t\t$components = $this->getSystemComponents();\n\n\t\t$identify = [];\n\n\t\tforeach ($components as $component) {\n\t\t\tif (isset($this->fieldIdentify[$component])) {\n\t\t\t\tforeach ($fieldInfo as $item) {\n\t\t\t\t\tif (in_array($item->fieldName, $this->fieldIdentify[$component])) {\n\t\t\t\t\t\t$identify[$component] = $item->fieldName;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!isset($identify[$component])) {\n\t\t\t\t\t$identify[$component] = '';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$identify[$component] = '';\n\t\t\t}\n\t\t}\n\n\t\tif (!empty($identify['tableType'])) {\n\t\t\t$identify['tableType'] = 'treeGrid';\n\t\t} else {\n\t\t\t$identify['tableType'] = 'grid';\n\t\t}\n\t\t$identify['viewType'] = 'portlet';\n\t\tunset($identify['field']);\n\n\t\t$func = $this->getFuncName($tableName);\n\n\t\t$replaceData = [\n\t\t\t'tableName' => $tableName,\n\t\t\t'func' => $func,\n\t\t\t'funcLower' => strtolower($func),\n\t\t\t'funcUcfirst' => ucfirst(strtolower($func)),\n\t\t\t'module' => $this->module[$module],\n\t\t\t'moduleLower' => strtolower($this->module[$module]),\n\t\t];\n\n\t\t$filePath = [\n\t\t\t'model' => $this->replaceTmp($this->filePath['model'], $replaceData),\n\t\t\t'service' => $this->replaceTmp($this->filePath['service'], $replaceData),\n\t\t\t'controller' => $this->replaceTmp($this->filePath['controller'], $replaceData),\n\t\t\t'view' => $this->replaceTmp($this->filePath['view'], $replaceData),\n\t\t\t'js' => $this->replaceTmp($this->filePath['js'], $replaceData),\n\t\t];\n\n\t\t$fileExists = [];\n\t\t//检查是否存在\n\t\tforeach ($filePath as $key => $row) {\n\t\t\t$fileExists[$key] = file_exists($row);\n\t\t}\n\n\t\t$data = [\n\t\t\t'tableName' => $tableName,\n\t\t\t'module' => $module,\n\t\t\t'func' => $func,\n\t\t\t'funcName' => $func,\n\t\t\t'filePath' => $filePath,\n\t\t\t'fileExists' => $fileExists,\n\t\t\t'components' => $identify,\n\t\t\t//'field_info'  => $field_info,\n\t\t];\n\n\t\tif ($returnFieldInfo) {\n\t\t\t$data['fieldInfo'] = $fieldInfo;\n\t\t}\n\n\t\treturn ajax_arr('查询成功', 0, $data);\n\t}\n\n\t//表名转功能名\n\tprivate function getFuncName($tableName) {\n\t\t$tmp = explode('_', $tableName);\n\n\t\t$name = '';\n\t\tforeach ($tmp as $s) {\n\t\t\t$name .= ucfirst($s);\n\t\t}\n\t\t$name = Str::singular($name);\n\t\treturn $name;\n\t}\n\n\t//模板替换\n\tfunction replaceTmp($tmpContent, $data) {\n\t\tforeach ($data as $key => $value) {\n\t\t\t$tmpContent = str_replace('{' . $key . '}', $value, $tmpContent);\n\t\t}\n\n\t\treturn $tmpContent;\n\t}\n\n\t//生成全部\n\tpublic function createSystem($data) {\n\t\t$temp = $data['temp'];\n\t\t$systemInfo = $this->getSystemInfo($data['tableName'], $data['module'], TRUE)['data'];\n\n\t\t$data['filePath'] = $systemInfo['filePath'];\n\t\t$data['func'] = $systemInfo['func'];\n\t\t$data['funcName'] = $systemInfo['funcName'];\n\t\t$data['fieldInfo'] = $systemInfo['fieldInfo'];\n\t\t$data['date'] = date('Y-m-d');\n\n\t\tforeach ($systemInfo['components'] as $c => $v) {\n\t\t\tif (!isset($data['components'][$c])) {\n\t\t\t\t$data['components'][$c] = '';\n\t\t\t}\n\t\t}\n\t\t//$data['components'] = extend( $system_info['components'], $data['components'] );\n\n\t\t$ret = ajax_arr('正在创建', 500);\n\n\t\tif ($temp == 'all') {\n\t\t\t$files = 0;\n\t\t\tforeach ($systemInfo['fileExists'] as $key => $value) {\n\t\t\t\t//文件不存在就创建\n\t\t\t\tif (!$value) {\n\t\t\t\t\t$files++;\n\t\t\t\t\t$method = \"create\" . ucfirst($key);\n\t\t\t\t\t$data['temp'] = $key;\n\t\t\t\t\t$ret = $this->$method($data);\n\t\t\t\t\tif ($ret['code'] != 0) {\n\t\t\t\t\t\treturn ajax_arr($ret['msg'], 500);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($files == 0) {\n\t\t\t\treturn ajax_arr(\"文件都存在了\", 0);\n\t\t\t}\n\n\t\t\treturn ajax_arr(\"创建成功\", 0);\n\t\t} else {\n\t\t\t$method = \"create\" . ucfirst($temp);\n\t\t\t$ret = $this->$method($data);\n\n\t\t\treturn $ret;\n\t\t}\n\t}\n\n\tprivate function createComponentTraits($temp, $tempContent, $value){\n\t\t$component = 'traits';\n\t\tif (!isset($this->systemComponents[$component])) {\n\t\t\treturn $tempContent;\n\t\t}\n\t\t$replaceData = [];\n\t\tforeach($this->systemComponents[$component] as $keyword => $filePaths){\n\n\t\t\tif ($keyword == $value) {\n\t\t\t\t$replaceData[$keyword] = file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePaths);\n\t\t\t} else {\n\t\t\t\t$replaceData[$keyword] = '';\n\t\t\t}\n\n\t\t}\n\n\t\treturn $this->replaceTmp($tempContent , $replaceData);\n\t}\n\n\t//table_type 组件\n\tprivate function createComponentTableType($temp, $tempContent, $value) {\n\t\t$component = 'tableType';\n\t\tif (!isset($this->systemComponents[$component][$temp])) {\n\t\t\treturn $tempContent;\n\t\t}\n\n\t\t$replaceData = [];\n\t\tforeach ($this->systemComponents[$component][$temp] as $keyword => $filePaths) {\n//\t\t\techo $filePaths . '----';\n\t\t\tif (is_array($filePaths)) {\n\t\t\t\tforeach ($filePaths as $key => $filePath) {\n\t\t\t\t\tif ($keyword == $value) {\n\t\t\t\t\t\t$replaceData[$key] = file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePath);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$replaceData[$key] = '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($keyword == $value) {\n\t\t\t\t\t$replaceData[$keyword] = file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePaths);\n\t\t\t\t} else {\n\t\t\t\t\t$replaceData[$keyword] = '';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn $this->replaceTmp($tempContent, $replaceData);\n\t}\n\n\tprivate function createComponentViewType($temp, $tempContent, $value) {\n\t\t$component = 'viewType';\n\t\tif (!isset($this->systemComponents[$component][$temp])) {\n\t\t\treturn $tempContent;\n\t\t}\n\n\t\t$replaceData = [];\n\t\tforeach ($this->systemComponents[$component][$temp] as $keyword => $filePaths) {\n\t\t\tif ($value == $keyword) {\n\t\t\t\t$replaceData[$keyword] = file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePaths);\n\t\t\t} else {\n\t\t\t\t$replaceData[$keyword] = '';\n\t\t\t}\n\t\t}\n\n\t\t//print_r($replaceData);\n\t\treturn $this->replaceTmp($tempContent, $replaceData);\n\t}\n\n\t//upload 组件\n\tprivate function createComponentUpload($temp, $tempContent, $value, $data) {\n\n\t\t$component = 'upload';\n\t\tif (!isset($this->systemComponents[$component][$temp])) {\n\t\t\treturn $tempContent;\n\t\t}\n\n\t\t$replaceData = [];\n\n\t\tforeach ($this->systemComponents[$component][$temp] as $keyword => $filePaths) {\n\t\t\tif (!empty($data['components'][$component])) {\n\t\t\t\t$content = '';\n\t\t\t\t$multi = ['uploadButton', 'uploadPreviewClear', 'uploadPreviewSet'];\n\t\t\t\tif (in_array($keyword, $multi)) {\n\t\t\t\t\tif (!is_array($value)) {\n\t\t\t\t\t\t$values[] = $value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$values = $value;\n\t\t\t\t\t}\n\n\t\t\t\t\tforeach ($values as $v) {\n\t\t\t\t\t\t$field['field'] = $v;\n\t\t\t\t\t\t$content .= $this->replaceTmp(file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePaths), $field) . \"\\r\";\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$content = file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePaths);\n\t\t\t\t}\n\n\t\t\t\t$replaceData[$keyword] = $content;\n\t\t\t} else {\n\t\t\t\t$replaceData[$keyword] = '';\n\t\t\t}\n\t\t}\n\n\t\t//print_r($replaceData);\n\t\treturn $this->replaceTmp($tempContent, $replaceData);\n\t}\n\n\n\n\tprivate function createComponentEditor($temp, $tempContent, $value, $data) {\n\t\t$component = 'editor';\n\t\tif (!isset($this->systemComponents[$component][$temp])) {\n\t\t\treturn $tempContent;\n\t\t}\n\n\t\t$replaceData = [];\n\t\tforeach ($this->systemComponents[$component][$temp] as $keyword => $filePaths) {\n\t\t\tif (!empty($data['components'][$component])) {\n\t\t\t\t$content = '';\n\t\t\t\t$multi = ['editorDecode', 'editorInit', 'editorClear', 'editorReload'];\n\t\t\t\tif (in_array($keyword, $multi)) {\n\t\t\t\t\tif (!is_array($value)) {\n\t\t\t\t\t\t$value = [$value];\n\t\t\t\t\t}\n\t\t\t\t\tforeach ($value as $v) {\n\t\t\t\t\t\t$field['field'] = $v;\n\t\t\t\t\t\t$content .= $this->replaceTmp(file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePaths), $field) . \"\\r\";\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$content = file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePaths);\n\t\t\t\t}\n\n\t\t\t\t$replaceData[$keyword] = $content;\n\t\t\t} else {\n\t\t\t\t$replaceData[$keyword] = '';\n\t\t\t}\n\t\t}\n\n\t\treturn $this->replaceTmp($tempContent, $replaceData);\n\t}\n\n\tprivate function createComponentSelect2($temp, $tempContent, $value, $data) {\n\t\t$component = 'select2';\n\t\tif (!isset($this->systemComponents[$component][$temp])) {\n\t\t\treturn $tempContent;\n\t\t}\n\n\t\t$replaceData = [];\n\t\tforeach ($this->systemComponents[$component][$temp] as $keyword => $filePaths) {\n\t\t\tif (!empty($data['components'][$component])) {\n\t\t\t\t$replaceData[$keyword] = file_get_contents(SYSTEM_TEMP_BASE_PATH . $filePaths);\n\t\t\t} else {\n\t\t\t\t$replaceData[$keyword] = '';\n\t\t\t}\n\t\t}\n\n\t\treturn $this->replaceTmp($tempContent, $replaceData);\n\t}\n\n\tprivate function createComponentFormField($temp, $components, $field, $comment) {\n\t\t$form_content = '';\n\t\tif (in_array($field, $this->fieldIdentify['formExclusion'])) {\n\t\t\treturn $form_content;\n\t\t}\n\n\t\t$field_type = '';\n\t\tforeach ($components as $component => $fields) {\n\t\t\tif (empty($fields)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!is_array($fields)) {\n\t\t\t\t$fields = [$fields];\n\t\t\t}\n\t\t\tif (in_array($field, $fields)) {\n\t\t\t\t$field_type = $component;\n\t\t\t}\n\t\t}\n\n\t\tif (empty($field_type) && in_array($field, $this->fieldIdentify['radio'])) {\n\t\t\t$field_type = 'radio';\n\t\t}\n\n\t\tif (empty($field_type) && in_array($field, $this->fieldIdentify['select'])) {\n\t\t\t$field_type = 'select';\n\t\t}\n\t\tif (empty($field_type)) {\n\t\t\t$field_type = 'input';\n\t\t}\n\n\t\t$field_replace = [\n\t\t\t'field' => $field,\n\t\t\t'comment' => $comment,\n\t\t];\n\n\t\t$content = file_get_contents(SYSTEM_TEMP_BASE_PATH . $this->systemComponents['field'][$temp][$field_type]);\n\n\t\treturn $this->replaceTmp($content, $field_replace);\n\t}\n\n\tprivate function saveFile($temp, $filePath, $fileContent) {\n\t\t$dir = dirname($filePath);\n\t\tif (!file_exists($dir)) {\n\t\t\tmkdir($dir, 0777, true);\n\t\t\tchmod($dir, 0777);\n\t\t}\n\n\t\t$ret = file_put_contents($filePath, $fileContent);\n\t\tif ($ret === FALSE) {\n\t\t\treturn ajax_arr($temp . ' 创建失败', 500);\n\t\t}\n\t\tchmod($filePath, 0777);\n\n\t\treturn ajax_arr($temp . ' 创建成功', 0);\n\t}\n\n\t//创建 model\n\tprivate function createModel($data) {\n\t\t$temp = $data['temp'];\n\n\t\t//文件路径\n\t\t$filePath = $data['filePath'][$temp];\n\t\tif (file_exists($filePath)) {\n\t\t\treturn ajax_arr($temp . ' 已经存在', 500);\n\t\t}\n\n\t\t//替换的数据\n\t\t$replaceData = [\n\t\t\t'module' => $data['module'],\n\t\t\t'func' => $data['func'],\n\t\t\t'date' => $data['date'],\n\t\t\t'funcName' => $data['funcName'],\n\t\t\t'tableName' => $data['tableName'],\n\t\t];\n\n\t\t//文件模板\n\t\t$tempContent = file_get_contents(SYSTEM_TEMP_BASE_PATH . $this->systemTemps[$temp]);\n\n\t\t$fileContent = $this->replaceTmp($tempContent, $replaceData);\n\n\t\t//保存文件\n\t\treturn $this->saveFile($temp, $filePath, $fileContent);\n\t}\n\n\t//创建 service\n\tprivate function createService($data) {\n\t\t $data['components']['traits'] = 'instanceTrait';\n\t\t$temp = $data['temp'];\n\t\t//文件模板\n\t\t$tempContent = file_get_contents(SYSTEM_TEMP_BASE_PATH . $this->systemTemps[$temp]);\n\n\t\t//文件路径\n\t\t$filePath = $data['filePath'][$temp];\n\t\tif (file_exists($filePath)) {\n\t\t\treturn ajax_arr($temp . '已经存在', 500);\n\t\t}\n\n\t\t//替换的数据\n\t\t$replaceData = [\n\t\t\t'module' => $data['module'],\n\t\t\t'func' => $data['func'],\n\t\t\t'date' => $data['date'],\n\t\t\t'funcName' => $data['funcName'],\n\t\t\t'tableName' => $data['tableName'],\n\t\t];\n\n\t\t//字段默认值\n\t\t$fieldDefault = [];\n\t\tforeach ($data['fieldInfo'] as $item) {\n\t\t\t$val = ($item->fieldDefault == 'CURRENT_TIMESTAMP') ? \"date('Y-m-d H:i:s')\" : \"'{$item->fieldDefault}'\";\n\n\t\t\t$fieldDefault[] = \"'{$item->fieldName}' => $val , \";\n\t\t}\n\n\t\t$replaceData['fieldDefault'] = implode(\"\\r\", $fieldDefault);\n\n\t\t//加载组件\n\t\tforeach ($data['components'] as $component => $value) {\n\t\t\t$componentMethod = \"createComponent\" . ucfirst($component);\n\t\t\t$tempContent = $this->$componentMethod($temp, $tempContent, $value, $data);\n\t\t}\n\t\t$fileContent = $this->replaceTmp($tempContent, $replaceData);\n\n\t\t//保存文件\n\t\treturn $this->saveFile($temp, $filePath, $fileContent);\n\t}\n\n\t//创建 controller\n\tprivate function createController($data) {\n\t\t$temp = $data['temp'];\n\t\t//文件模板\n\t\t$tempContent = file_get_contents(SYSTEM_TEMP_BASE_PATH . $this->systemTemps[$temp]);\n\n\t\t//文件路径\n\t\t$filePath = $data['filePath'][$temp];\n\t\tif (file_exists($filePath)) {\n\t\t\treturn ajax_arr($temp . '已经存在', 500);\n\t\t}\n\n\t\t//替换的数据\n\t\t$replaceData = [\n\t\t\t'module' => $data['module'],\n\t\t\t'moduleLower' => strtolower($data['module']),\n\t\t\t'func' => $data['func'],\n\t\t\t'funcLower' => strtolower($data['func']),\n\t\t\t'date' => $data['date'],\n\t\t\t'funcName' => $data['funcName'],\n\t\t\t'tableName' => $data['tableName'],\n\t\t\t'funcNameLower' => strtolower($data['funcName']),\n\t\t];\n\t\t\n\t\t//加载组件\n\t\tforeach ($data['components'] as $component => $value) {\n\t\t\t$componentMethod = \"createComponent\" . ucfirst($component);\n\n\t\t\t$tempContent = $this->$componentMethod($temp, $tempContent, $value, $data);\n\t\t}\n\t\t$fileContent = $this->replaceTmp($tempContent, $replaceData);\n\n\t\t//print_r( $fileContent );\n\t\t//保存文件\n\t\treturn $this->saveFile($temp, $filePath, $fileContent);\n\t}\n\n\t//创建 view\n\tprivate function createView($data) {\n\t\t$temp = $data['temp'];\n\t\t//文件模板\n\t\t$tempContent = file_get_contents(SYSTEM_TEMP_BASE_PATH . $this->systemTemps[$temp]);\n\n\t\t//文件路径\n\t\t$filePath = $data['filePath'][$temp];\n\t\tif (file_exists($filePath)) {\n\t\t\treturn ajax_arr($temp . '已经存在', 500);\n\t\t}\n\n\t\t//替换的数据\n\t\t$replaceData = [\n\t\t\t'module' => $data['module'],\n\t\t\t'moduleLower' => strtolower($data['module']),\n\t\t\t'func' => $data['func'],\n\t\t\t'funcLower' => strtolower($data['func']),\n\t\t\t'date' => $data['date'],\n\t\t\t'funcName' => $data['funcName'],\n\t\t\t'tableName' => $data['tableName'],\n\t\t];\n\n\t\t//加载组件\n\t\tforeach ($data['components'] as $component => $value) {\n\t\t\t$componentMethod = \"createComponent\" . ucfirst($component);\n\t\t\t$tempContent = $this->$componentMethod($temp, $tempContent, $value, $data);\n\t\t}\n\t\t$fileContent = $this->replaceTmp($tempContent, $replaceData);\n\n\t\t$replaceField = [\n\t\t\t'tableTh' => '',\n\t\t\t'formItems' => '',\n\t\t];\n\n\t\tforeach ($data['fieldInfo'] as $item) {\n\t\t\t$field = $item->fieldName;\n\t\t\t$comment = $item->fieldComment;\n\t\t\t//th 排除字段\n\t\t\tif (!in_array($field, $this->fieldIdentify['thExclusion'])) {\n\t\t\t\t$formatter = '';\n\t\t\t\tif (isset($this->fieldIdentify['thFormatter'][$field])) {\n\t\t\t\t\t$formatter = $this->fieldIdentify['thFormatter'][$field];\n\t\t\t\t}\n\t\t\t\t$width = '80';\n\t\t\t\tif (isset($this->fieldIdentify['thWidth'][$field])) {\n\t\t\t\t\t$width = $this->fieldIdentify['thWidth'][$field];\n\t\t\t\t}\n\n\t\t\t\t$replaceField['tableTh'] .= '<th width=\"' . $width . '\" data-field=\"' . $item->fieldName . '\" ' . $formatter . '>' .\n\t\t\t\t\t$comment . '</th>' . \"\\r\";\n\t\t\t}\n\t\t\tif (!in_array($field, $this->fieldIdentify['formExclusion'])) {\n\t\t\t\t$replaceField['formItems'] .= $this->createComponentFormField($temp, $data['components'], $field, $comment) . \"\\r\";\n\t\t\t}\n\t\t}\n\n\t\t$fileContent = $this->replaceTmp($fileContent, $replaceField);\n\n\t\t//保存文件\n\t\treturn $this->saveFile($temp, $filePath, $fileContent);\n\t}\n\n\t//创建 js\n\tprivate function createJs($data) {\n\t\t$temp = $data['temp'];\n\t\t//文件模板\n\t\t$tempContent = file_get_contents(SYSTEM_TEMP_BASE_PATH . $this->systemTemps[$temp]);\n\n\t\t//文件路径\n\t\t$filePath = $data['filePath'][$temp];\n\t\tif (file_exists($filePath)) {\n\t\t\treturn ajax_arr($temp . '已经存在', 500);\n\t\t}\n\n\t\t//替换的数据\n\t\t$replaceData = [\n\t\t\t'module' => $data['module'],\n\t\t\t'moduleLower' => strtolower($data['module']),\n\t\t\t'func' => $data['func'],\n\t\t\t'date' => $data['date'],\n\t\t\t'funcName' => $data['funcName'],\n\t\t\t'tableName' => $data['tableName'],\n\t\t];\n\n\t\t//加载组件\n\t\tforeach ($data['components'] as $component => $value) {\n\t\t\t$componentMethod = \"createComponent\" . ucfirst($component);\n\t\t\t$tempContent = $this->$componentMethod($temp, $tempContent, $value, $data);\n\t\t}\n\t\t$fileContent = $this->replaceTmp($tempContent, $replaceData);\n\n\t\t//保存文件\n\t\treturn $this->saveFile($temp, $filePath, $fileContent);\n\t}\n\n\t//创建Api\n\tpublic function createApi($data) {\n\t\t$data['directory'] = strtolower($data['directory']);\n\t\t$data['name'] = ucfirst(strtolower($data['name']));\n\t\t$data['date'] = date('Y-m-d');\n\t\t$filePath = $this->filePath['api'] . \"{$data['apiVersion']}/{$data['directory']}\";\n\t\t$filename = $filePath . \"/{$data['name']}Service.php\";\n\n\t\tif (file_exists($filename)) {\n\t\t\treturn ajax_arr(\"$filename 已经存在\", 505);\n\t\t}\n\n\t\tif (!file_exists($filePath)) {\n\t\t\tmkdir($filePath, 0777, true) or die('创建失败');\n\t\t\tchmod($filePath, 0777);\n\t\t}\n\n\t\t//是否有参数\n\t\t$params = '';\n\t\tif (isset($data['params'])) {\n\t\t\tforeach ($data['params'] as $param) {\n\t\t\t\t$params .= file_get_contents(API_TEMP_BASE_PATH . \"/params/{$param}.txt\") . \"\\r\";\n\t\t\t}\n\t\t}\n\t\t$data['params'] = $params;\n\n\t\t//是否验证用户\n\t\tif ($data['authUser'] == 1) {\n\t\t\t$data['authUser'] = file_get_contents($this->apiTemp['authUser']);\n\t\t} else {\n\t\t\t$data['authUser'] = '';\n\t\t}\n\n\t\t$fileContent = file_get_contents($this->apiTemp['tmp']);\n\t\t$fileContent = $this->replaceTmp($fileContent, $data);\n\n\t\t$ret = file_put_contents($filename, $fileContent);\n\t\tif ($ret === FALSE) {\n\t\t\treturn ajax_arr(\"创建Api[ $filename ]失败\", 500);\n\t\t} else {\n\t\t\tchmod($filename, 0777);\n\n\t\t\treturn ajax_arr(\"创建Api[ $filename ]成功\", 0);\n\t\t}\n\t}\n\n\tpublic function deleteSystemFile($module, $tableName, $temp) {\n\t\t$replaceData = [\n\t\t\t'module' => $module,\n\t\t\t'moduleLower' => strtolower($module),\n\t\t\t'func' => $this->getFuncName($tableName),\n\t\t\t'funcLower' => strtolower($this->getFuncName($tableName)),\n\t\t\t'funcUcfirst' => ucfirst(strtolower($this->getFuncName($tableName))),\n\t\t\t'tableName' => $tableName,\n\t\t];\n\n\t\t$filePath = $this->replaceTmp($this->filePath[$temp], $replaceData);\n\n\t\tif (file_exists($filePath)) {\n\t\t\tunlink($filePath);\n\n\t\t\treturn ajax_arr(\"删除[$temp]文件成功\", 0);\n\t\t}\n\n\t\treturn ajax_arr(\"[$temp] 文件不存在\", 500);\n\t}\n}\n"
  },
  {
    "path": "src/Service/MerAlbumCatalogService.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/26\n * Time: 16:56\n */\nnamespace Smart\\Service;\nuse Smart\\Models\\MerAlbumCatalog;\nuse think\\image\\Exception;\n\n\n\nclass MerAlbumCatalogService extends BaseService {\n    //引入 GridTable trait\n    use \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n    protected $model_class = MerAlbumCatalog::class;\n    //状态\n    var $status = [\n        0 => '禁用',\n        1 => '启用',\n    ];\n\n    \n\n    //取默认值\n    function getDefaultRow() {\n        return [\n            'id'         => '',\n            'mer_id'     => '',\n            'sort'       => '999',\n            'text'       => '',\n            'icon'       => '',\n            'is_default' => 0,\n        ];\n    }\n\n    //根据条件查询\n    function getByCond( $param ) {\n        $default = [\n            'field'    => ['*'],\n            'merId'    => 0,\n            'keyword'  => '',\n            'status'   => '',\n            'page'     => 1,\n            'pageSize' => 10,\n            'sort'     => 'id',\n            'order'    => 'DESC',\n            'count'    => FALSE,\n            'getAll'   => FALSE,\n        ];\n\n        $param = extend( $default, $param );\n\n        $model = $this->getModel()->keyword($param['keyword'])->merId($param['merId']);\n\n\n        if ( $param['count'] ) {\n            return $model->count();\n        } else {\n\n           $data = $model->getAll($param)->orderBy($param['sort'], $param['order'])->get( $param['field'])->toArray();\n\n        }\n\n        return $data ? $data : [];\n    }\n\n    function getByTag( $mer_id, $tag, $icon = '', $create_when_not_found = FALSE ) {\n        $where['tag'] = $tag;\n        if ( empty( $mer_id ) ) {\n            $where['mer_id'] = [ 'exp', 'is null' ];\n        }\n\n        $data = $this->getModel()->where( $where )->first();\n\n        if ( empty( $data ) ) {\n            if ( $create_when_not_found ) {\n                $new_data = [\n                    'mer_id' => $mer_id,\n                    'tag'    => $tag,\n                    'icon'   => $icon\n                ];\n\n                if ( empty( $mer_id ) ) {\n                    unset( $new_data['mer_id'] );\n                }\n\n                $ret_create = $this->insert( $new_data );\n                if ( $ret_create['code'] == 0 ) {\n                    $new_data['id'] = $ret_create['data']['id'];\n\n                    return $new_data;\n                }\n            }\n\n            return FALSE;\n        }\n\n        return $data;\n    }\n\n    //根据根据多个tag 取分类\n    function saveByTags( $mer_id, $tags, $album_id, $icon ) {\n        if ( ! is_array( $tags ) ) {\n            $tags = explode( ',', trim( $tags ) );\n        }\n\n        $new_tag = [];\n        foreach ( $tags as $tag ) {\n            $tag_data = $this->getByTag( $mer_id, $tag, $icon, TRUE );\n            if ( ! $tag_data ) {\n                return ajax_arr( '系统繁忙, 请稍后再试', 500 );\n            }\n\n            $new_tag[] = [\n                'album_id'   => $album_id,\n                'catalog_id' => $tag_data['id']\n            ];\n        }\n\n        if ( empty( $new_tag ) ) {\n            return ajax_arr( '没有要添加的数据', 500 );\n        }\n\n        $MerAlbumTag = db( 'MerAlbumTag' );\n        $ret         = $MerAlbumTag->insertAll( $new_tag );\n\n        if ( $ret === FALSE ) {\n            return ajax_arr( '系统繁忙, 请稍后再试', 500 );\n        } else {\n            return ajax_arr( '保存成功', 0 );\n        }\n    }\n\n    function destroyOne( $id ) {\n        $MerAlbum  = MerAlbumService::instance();\n        $albumData = $MerAlbum->getByCond( [\n            'catalogId' => $id\n        ] );\n\n\n        try {\n            if ( ! empty( $albumData ) ) {\n                throw new Exception( '目录下还有图片, 不能删除' );\n            }\n\n            $this->getModel()->delete( $id );\n\n            return ajax_arr( '删除成功', 0 );\n        } catch ( Exception $e ) {\n            return ajax_arr( '删除失败', 500 );\n        }\n    }\n\n\n}"
  },
  {
    "path": "src/Service/MerAlbumService.php",
    "content": "<?php namespace Smart\\Service;\n/**\n * MerAlbum Service\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 2017-09-26\n */\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Smart\\Models\\MerAlbum;\nuse Smart\\Models\\MerAlbumCatalog;\n\nclass MerAlbumService extends BaseService {\n\n  \t//引入 GridTable trait\n\tuse \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n  protected $model_class = MerAlbum::class;\n\n    public $albumCatalog;\n\n    public $albumTag;\n\n  //状态\n\tpublic $status = [\n\t\t0 => '禁用',\n\t\t1 => '启用',\n\t];\n\n    public function __construct()\n    {\n        $this->albumCatalog = ServiceManager::make( MerAlbumCatalogService::class );\n        $this->albumTag = ServiceManager::make( MerAlbumTagService::class );\n    }\n\n\n\n  //取默认值\n\tfunction getDefaultRow() {\n\t\treturn [\n\t\t\t'id' => '' , \n'mer_id' => '' , \n'sort' => '999' , \n'uri' => '' , \n'size' => '' , \n'mimes' => '' , \n'img_size' => '' , \n'desc' => '' , \n'status' => '1' , \n'created_at' => date('Y-m-d H:i:s') , \n\t\t];\n\t}\n\n  /**\n * 根据条件查询\n *\n * @param $param\n *\n * @return array|number\n */\npublic function getByCond( $param ) {\n  $default = [\n    'field'    => [ '*'],\n    'keyword'  => '',\n    'status'   => '',\n    'page'     => 1,\n    'pageSize' => 10,\n    'sort'     => 'id',\n    'order'    => 'DESC',\n    'count'    => FALSE,\n    'getAll'   => FALSE\n  ];\n\n  $param = extend( $default, $param );\n\n  $model = $this->getModel()->keyword($param['keyword'])->status($param['status']);\n\n  if ( $param['count'] ) {\n    return $model->count();\n  }\n\n\n   $data =  $model->getAll($param)->orderBy($param['sort'], $param['order'])->get($param['field'])->toArray();\n\n  return $data ? $data : [ ];\n}\n\n    public function insert( $data, $tags = '' ){\n\n        $mer_id = isset( $data['mer_id'] ) ? $data['mer_id'] : '';\n\n        if ( empty( $mer_id ) ) {\n            unset( $data['mer_id'] );\n        }\n        $merAlbum = $this->getmodel()->create( $data );\n\n        $tags     = empty( $tags ) ? '默认相册' : $tags;\n        if ( ! is_array( $tags ) ) {\n            $tags = explode( ',', trim( $tags ) );\n        }\n        $data_tag  = [];\n        foreach( $tags as $tag){\n            array_push( $data_tag , new MerAlbumCatalog([\n              'tag' => $tag ,\n              'mer_id' => 0,\n              'sort' => 1,\n              'icon' => '',\n              'totals' => 1,\n            ]));\n        }\n\n        $ret_save = $merAlbum->tag()->saveMany($data_tag);\n        //saveByTags( $mer_id, $tags, $id, $data['uri'] );\n\n        if ( !$ret_save ) {\n            throw new \\Exception( $ret_save['msg'] );\n        }\n\n\n\n            return ajax_arr( '添加成功', 0, [ 'id' => $merAlbum->id ] );\n\n    }\n\n}"
  },
  {
    "path": "src/Service/MerAlbumTagService.php",
    "content": "<?php namespace Smart\\Service;\n/**\n * MerAlbumTag Service\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 2017-09-26\n */\n\nuse Smart\\Models\\MerAlbumTag;\n\nclass MerAlbumTagService extends BaseService {\n\n  \t//引入 GridTable trait\n\tuse \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n  protected $model_class = MerAlbumTag::class;\n  \n\n  //状态\n\tpublic $status = [\n\t\t0 => '禁用',\n\t\t1 => '启用',\n\t];\n\n  \n\n  //取默认值\n\tfunction getDefaultRow() {\n\t\treturn [\n\t\t\t'id' => '' , \n'catalog_id' => '' , \n'album_id' => '' , \n\t\t];\n\t}\n\n  /**\n * 根据条件查询\n *\n * @param $param\n *\n * @return array|number\n */\npublic function getByCond( $param ) {\n  $default = [\n    'field'    => [ '*'],\n    'keyword'  => '',\n    'status'   => '',\n    'page'     => 1,\n    'pageSize' => 10,\n    'sort'     => 'id',\n    'order'    => 'DESC',\n    'count'    => FALSE,\n    'getAll'   => FALSE\n  ];\n\n  $param = extend( $default, $param );\n\n  $model = $this->getModel()->keyword($param['keyword'])->status($param['status']);\n\n  if ( $param['count'] ) {\n    return $model->count();\n  }\n\n\n   $data =  $model->getAll($param)->orderBy($param['sort'], $param['order'])->get($param['field'])->toArray();\n\n  return $data ? $data : [ ];\n}\n  \n}"
  },
  {
    "path": "src/Service/MerGoodsCatalogService.php",
    "content": "<?php\n/**\n * MerGoodsCatalog Service\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/21\n * Time: 09:35\n */\n\nnamespace Smart\\Service;\n\n\n\nuse Smart\\Models\\MerGoodsCatalog;\n\nclass MerGoodsCatalogService extends BaseService {\n\n    //引入 TreeTable trait\n    use \\Smart\\Traits\\Service\\TreeTable,\\Smart\\Traits\\Service\\Instance;\n\n    protected $model_class = MerGoodsCatalog::class;\n\n    public $type = [\n        'goods'   => '商品' ,\n        'virtual' => '虚拟道具' ,\n        'service' => '服务'\n    ];\n\n    //状态\n    public $status = [\n        0 => '禁用' ,\n        1 => '启用' ,\n    ];\n\n   \n\n    //取默认值\n    function getDefaultRow() {\n        return [\n            'id'     => '' ,\n            'mer_id' => '' ,\n            'sort'   => '99' ,\n            'type'   => 'goods' ,\n            'pid'    => '0' ,\n            'text'   => '' ,\n            'icon'   => '' ,\n            'desc'   => '' ,\n            'level'  => '1' ,\n            'status' => '1' ,\n        ];\n    }\n\n\n    //根据条件查询\n    public function getByCond( $param ) {\n        $default = [\n            'field'        => [ '*'] ,\n            'keyword'       => '',\n            'pid'          => 0 ,\n            'merId'        => '' ,\n            'status'       => '' ,\n            'withTypeText' => FALSE ,\n            'key'          => 'children'\n        ];\n        $param   = extend( $default , $param );\n        $model = $this->getModel()->merId($param['merId'])->status($param['status'])->keyword($param['keyword']);\n\n\n        $data = $model\n            ->orderBy( 'level','ASC' )\n            ->orderBy( 'sort','ASC')\n            ->get($param['field'])->toArray();\n\n        if ( $param['withTypeText'] ) {\n            foreach ( $data as &$item ) {\n                $item['type_text'] = $this->type[ $item['type'] ];\n            }\n        }\n\n\n        $result = [];\n        $index  = [];\n\n        foreach ( $data as $row ) {\n            if ( $row['pid'] == $param['pid'] ) {\n                $result[ $row['id'] ] = $row;\n                $index[ $row['id'] ]  = &$result[ $row['id'] ];\n            } else {\n                $index[ $row['pid'] ][ $param['key'] ][ $row['id'] ] = $row;\n                $index[ $row['id'] ]                                 = &$index[ $row['pid'] ][ $param['key'] ][ $row['id'] ];\n            }\n        }\n\n        return $this->treeToArray( $result , $param['key'] );\n    }\n\n}"
  },
  {
    "path": "src/Service/MerSysUserService.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/21\n * Time: 11:22\n */\n\nnamespace Smart\\Service;\n\n\n\nuse Smart\\Models\\MerSysUser;\n\nclass MerSysUserService extends BaseService {\n\n    //引入 GridTable trait\n    use \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n    protected $model_class = MerSysUser::class;\n\n    //状态\n    public $status = [\n        0 => '禁用' ,\n        1 => '启用' ,\n    ];\n\n\n    //取默认值\n    function getDefaultRow() {\n        return [\n            'id'          => '' ,\n            'mer_id'      => '' ,\n            'sys_user_id' => '' ,\n        ];\n    }\n\n    /**\n     * 根据条件查询\n     *\n     * @param $param\n     *\n     * @return array|number\n     */\n    public function getByCond( $param ) {\n        $default = [\n            'field'    => [] ,\n            'keyword'  => '' ,\n            'status'   => '' ,\n            'page'     => 1 ,\n            'pageSize' => 10 ,\n            'sort'     => 'id' ,\n            'order'    => 'DESC' ,\n            'count'    => FALSE ,\n            'getAll'   => FALSE\n        ];\n\n        $param = extend( $default , $param );\n        $model = $this->getModel()->keyword($param['keyword'])->status();\n\n\n        if ( $param['count'] ) {\n            return $model->count();\n        }\n\n        $data = $model->getAll($param)->get($param['field'])->orderBy($param['sort'] , $param['order'])->get($param['field'])->toArray();\n        \n\n        return $data ? $data : [];\n    }\n\n    /**\n     * 新增机构管理员\n     *\n     * @param $merId\n     * @param $data\n     *\n     * @return array\n     */\n    function insert( $merId , $data ) {\n        try {\n            $SysUser = SysUserService::instance();\n            $result  = $SysUser->insert( $data );\n\n            if ( $result['code'] != 0 ) {\n                throw new \\Exception( $result['msg'] );\n            }\n\n            $newData = [\n                'mer_id'      => $merId ,\n                'sys_user_id' => $result['data']['id']\n            ];\n\n            $this->getModel()->insert( $newData );\n\n\n            return ajax_arr( '创建系统管理用户成功' , 0 );\n        } catch ( \\Exception $e ) {\n\n            return ajax_arr( $e->getMessage() , 500 );\n        }\n    }\n\n    /**\n     * 根据ID 更新数据\n     *\n     * @param $id\n     * @param $data\n     *\n     * @return array\n     */\n    public function update( $id , $data ) {\n        try {\n\n            $SysUser = SysUserService::instance();\n            $result  = $SysUser->update( $id , $data );\n\n            if ( $result['code'] != 0 ) {\n                throw new \\Exception( $result['msg'] );\n            }\n\n            return $result;\n        } catch ( \\Exception $e ) {\n            return ajax_arr( $e->getMessage() , 500 );\n        }\n    }\n\n    /**\n     * 删除机构管理用户\n     *\n     * @param $merId\n     * @param $sys_user_id\n     *\n     * @return array\n     */\n    public function destroy( $merId , $sys_user_id ) {\n        try {\n            $this->getModel()\n                ->where( 'mer_id' , $merId )\n                ->where( 'sys_user_id' , $sys_user_id )\n                ->delete();\n\n            $SysUser = SysUserService::instance();\n            $result  = $SysUser->destroy( $sys_user_id );\n\n            if ( $result['code'] != 0 ) {\n                throw new \\Exception( $result['msg'] );\n            }\n\n            return $result;\n        } catch ( \\Exception $e ) {\n            return ajax_arr( $e->getMessage() , 500 );\n        }\n    }\n\n}"
  },
  {
    "path": "src/Service/MerUserService.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/16\n * Time: 13:34\n */\n\nnamespace Smart\\Service;\n\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Traits\\Macroable;\nuse Smart\\Models\\SysUser;\nuse Smart\\Models\\SysUserRole;\nuse Smart\\Models\\SysUserDevice;\n\nclass MerUserService extends BaseService {\n\n    //引入 GridTable trait\n    use \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n    use Macroable;\n\n    protected $model_class = SysUser::class;\n\n    //状态\n    public $status = [\n        0 => '禁用',\n        1 => '启用',\n    ];\n\n\n    \n\n    public $user = null;\n\n    /**\n     * 取默认值\n     *\n     * @return array\n     */\n    function getDefaultRow() {\n        return [\n            'id' => '',\n            'module' => 'backend',\n            'username' => '',\n            'password' => '',\n            'icon' => '',\n            'email' => '',\n            'phone' => '',\n            'status' => '1',\n            'token' => '',\n            'created_at' => date('Y-m-d H:i:s'),\n        ];\n    }\n\n    /**\n     * 根据条件查询\n     *\n     * @param $params\n     *\n     * @return array|number\n     */\n    public function getByCond($params) {\n\n        $default = [\n            'field' => ['*'],\n            'module' => '',\n            'keyword' => '',\n            'status' => '',\n            'merId' => '',\n            'page' => 1,\n            'pageSize' => 10,\n            'sort' => 'id',\n            'order' => 'DESC',\n            'getAll' => FALSE,\n            'count' => FALSE,\n            'withPwd' => FALSE,\n            'withRoles' => FALSE,\n            'withTest' => FALSE,\n            'merchant' => FALSE,\n        ];\n\n        $params = extend($default, $params);\n\n        if ($params['merchant']) {\n            return $this->getMerSysUserByCond($params);\n        }\n        $model = self::instance()->getModel();\n\n        if ($params['withTest']) {\n            $model = $model->with('UserDevice');\n        }\n\n        $model = $model->status($params['status'])->module($params['module'])->keyword($params['keyword']);\n\n        if ($params['count']) {\n            return $model->count();\n        } else {\n            $data = $model\n                ->orderBy($params['sort'], $params['order'])->get()->toArray();\n\n        }\n\n        if (!$params['withPwd']) {\n            foreach ($data as &$item) {\n                unset($item['password']);\n            }\n        }\n\n        if ($params['withRoles']) {\n            $data = $this->getRoles($data);\n        }\n\n        return $data ? $data : [];\n    }\n\n    /**\n     * todo 需要优化\n     *\n     * @param $data\n     *\n     * @return mixed\n     */\n    private function getRoles($data) {\n        $SysUserRole = SysUserRoleService::instance();\n\n        foreach ($data as &$item) {\n            $item['roles'] = $SysUserRole->getByUser($item['id']);\n        }\n\n        return $data;\n    }\n\n    /**\n     * 获取 MP 平台用户\n     *\n     * @param $params\n     *\n     * @return array\n     */\n    private function getMerSysUserByCond($params) {\n        $sysMerchant = SysMerchantService::instance();\n        $model = $sysMerchant->getModel()->find($params['merId'])->sysUsers()->status($params['status']);\n\n        if ($params['count']) {\n            return $model->count();\n        } else {\n            //    $model->field( 'u.*' );\n            $data = $model->getAll($params)->orderBy($params['sort'], $params['order'])->get()->toArray();\n\n        }\n\n        if (!$params['withPwd']) {\n            foreach ($data as &$item) {\n                unset($item['password']);\n            }\n        }\n\n        if ($params['withRoles']) {\n            $data = $this->getRoles($data);\n        }\n\n        return $data ? $data : [];\n\n    }\n\n    /**\n     * 更新密码\n     *\n     * @param $id\n     * @param $data\n     *\n     * @return array\n     */\n    function uploadPwd($id, $data) {\n        try {\n            self::instance()->getModel()->where('id', $id)->update($data);\n\n            return ajax_arr('更新成功', 0);\n        } catch (\\Exception $e) {\n\n            return ajax_arr($e->getMessage(), 500);\n        }\n    }\n\n    /**\n     * 添加数据\n     *\n     * @param $data\n     *\n     * @return array\n     */\n    public function insert($data) {\n        DB::beginTransaction();\n        try {\n            if (empty($data)) {\n                throw new \\Exception('数据不能为空');\n            }\n\n            if (isset($data['for_test'])) {\n                $for_test = $data['for_test'];\n                unset($data['for_test']);\n            }\n\n            $roles = isset($data['roles']) ? $data['roles'] : [];\n            unset($data['roles']);\n            $data['password'] = str2pwd(config('defaultPwd'));\n\n            $id = self::instance()->getModel()->insertGetId($data);\n            SysUserDevice::firstOrCreate(['user_id'=>$id]);\n            if ($id <= 0) {\n                throw new \\Exception('创建用户失败');\n            }\n\n            if($for_test){\n                $token = md5(http_build_query($data) . json_encode(['created_at' => time()]));\n                self::instance()->getModel()->api_token = $token;\n                self::instance()->getModel()->save();\n\n            }\n\n            //更新用户角色\n            if (!empty($roles)) {\n                $SysUserRole = SysUserRoleService::instance();\n                $RoleResult = $SysUserRole->updateByUser($id, $roles);\n                if ($RoleResult['code'] > 0) {\n                    throw new \\Exception($RoleResult['msg']);\n                }\n            }\n\n            DB::commit();\n\n            return ajax_arr('创建用户成功', 0, ['id' => $id]);\n        } catch (\\Exception $e) {\n            DB::rollback();\n\n            return ajax_arr($e->getMessage(), 500);\n        }\n    }\n\n    //更新\n    function update($id, $data) {\n\n        DB::beginTransaction();\n        try {\n            $roles = [];\n            if (isset($data['roles'])) {\n                $roles = $data['roles'];\n                unset($data['roles']);\n            }\n            if (isset($data['for_test'])) {\n                $for_test = $data['for_test'];\n                unset($data['for_test']);\n            }\n\n            \n            $ret = self::instance()->getModel()->where('id', $id)->update($data);\n            $sysUserDevice = SysUserDevice::firstOrCreate(['user_id'=>$id]);\n            $sysUserDevice->for_test = $for_test;\n            $sysUserDevice->save();\n            //更新用户角色\n            $SysUserRole = SysUserRoleService::instance();\n            $RoleResult = $SysUserRole->updateByUser($id, $roles);\n            if ($RoleResult['code'] > 0) {\n                throw new \\Exception($RoleResult['msg']);\n            }\n            if($for_test){\n                $token = md5(http_build_query($data) . json_encode(['created_at' => time()]));\n                $sysUser = SysUser::find($id);\n                $sysUser->api_token = $token;\n                $sysUser->save();\n\n            }\n\n            DB::commit();\n\n            return ajax_arr('更新成功', 0);\n        } catch (\\Exception $e) {\n            DB::rollback();\n\n            return ajax_arr($e->getMessage(), 500);\n        }\n    }\n\n    /**\n     * 删除系统用户\n     *\n     * @param $id\n     *\n     * @return array\n     */\n    public function destroy($id) {\n        $model = self::instance()->getModel();\n        try {\n            if ($id <= 2) {\n                throw new \\Exception('系统用户不能删除');\n            }\n            $model_user_role = new SysUserRole();\n            //删除用户角色\n            $model_user_role->destroy($id);\n\n            //删除用户\n            $model->destroy($id);\n\n            return ajax_arr('删除成功', 0);\n        } catch (\\Exception $e) {\n            return ajax_arr($e->getMessage(), 500);\n        }\n    }\n\n    /**\n     * 重置密码\n     *\n     * @param $id\n     * @param $pwd\n     *\n     * @return array\n     */\n    public function resetPwd($id, $pwd) {\n        try {\n            //  $data['password'] = str2pwd( $pwd );\n            $data['password'] = Hash::make($pwd);\n            $row = self::instance()->getModel()->where('id', $id)->update($data);\n            if ($row <= 0) {\n                return ajax_arr('未修改任何记录', 500);\n            }\n\n            return ajax_arr('重置密码成功', 0);\n        } catch (\\Exception $e) {\n            return ajax_arr($e->getMessage(), 500);\n        }\n    }\n\n    \n\n    public function setUser($id) {\n        self::instance()->user = self::instance()->getModel()->find($id);\n    }\n\n    /**\n     * 查询测试用户\n     *\n     * @return mixed\n     */\n    public function getForTest() {\n        $data = DB::table('sys_user as su')->leftJoin('sys_user_device as sud', 'su.id', '=', 'sud.user_id')->where('sud.for_test', 1)->get()->toArray();\n        return $data;\n    }\n\n}"
  },
  {
    "path": "src/Service/ServiceManager.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/11/4\n * Time: 14:51\n */\nnamespace Smart\\Service;\n\nclass ServiceManager {\n\n\tpublic function __construct() {\n\n\t}\n\n\t/**\n\t * 注册Service\n\t * @param $classPath\n\t *\n\t */\n\tpublic function register($classPath) {\n\n\t}\n\n\t/**\n\t * 实例化service\n\t *\n\t */\n\tpublic function make($serviceName) {\n\n\t\treturn $serviceName::instance();\n\n\t}\n\n\t/**\n\t * 销毁service实例\n\t * @param $serviceName\n\t */\n\tpublic function destroy($serviceName) {\n\n\t}\n\n}"
  },
  {
    "path": "src/Service/SimulatorService.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/18\n * Time: 17:06\n */\nnamespace Smart\\Service;\nuse Smart\\Lib\\Discover;\n\n/**\n * 接口模拟器 Service\n *\n * @author Zix\n * @version 2.0 2016-09-13\n */\n\nuse Illuminate\\Filesystem\\Filesystem;\nuse ReflectionClass;\n\nclass SimulatorService extends BaseService {\n\n    use \\Smart\\Traits\\Service\\Instance;\n\n    private $apiVer = [\n        'v1' => 'v1',\n        'v2' => 'v2',\n    ];\n\n    function readApi( $apiVersion ) {\n        $discover = new Discover;\n        $services = $discover->service($apiVersion);\n        return $services;\n        \n    }\n\n    public function readVersion(){\n        return $this->apiVer;\n    }\n\n    \n}"
  },
  {
    "path": "src/Service/SysApiLogService.php",
    "content": "<?php namespace Smart\\Service;\n/**\n * SysApiLog Service\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 2017-09-25\n */\n\nuse Smart\\Models\\SysApiLog;\n\nclass SysApiLogService extends BaseService {\n\n  \t//引入 GridTable trait\n\tuse \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n  \n  protected $model_class = SysApiLog::class;\n\n  //状态\n\tpublic $status = [\n\t\t0 => '禁用',\n\t\t1 => '启用',\n\t];\n\n \n\n  //取默认值\n\tfunction getDefaultRow() {\n\t\treturn [\n\t\t\t'id' => '' , \n'device' => '' , \n'device_os_version' => '' , \n'app_version' => '' , \n'api_version' => '' , \n'uri' => '' , \n'ip' => '' , \n'created_at' => date('Y-m-d H:i:s') , \n\t\t];\n\t}\n\n  /**\n * 根据条件查询\n *\n * @param $param\n *\n * @return array|number\n */\npublic function getByCond( $param ) {\n  $default = [\n    'field'    => [ '*'],\n    'keyword'  => '',\n    'status'   => '',\n    'page'     => 1,\n    'pageSize' => 10,\n    'sort'     => 'id',\n    'order'    => 'DESC',\n    'count'    => FALSE,\n    'getAll'   => FALSE\n  ];\n\n  $param = extend( $default, $param );\n\n  $model = $this->getModel()->keyword($param['keyword'])->status($param['status']);\n\n  if ( $param['count'] ) {\n    return $model->count();\n  }\n\n\n   $data =  $model->getAll($param)->orderBy($param['sort'], $param['order'])->get($param['field'])->toArray();\n\n  return $data ? $data : [ ];\n}\n  \n}"
  },
  {
    "path": "src/Service/SysAppVersionService.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/22\n * Time: 16:59\n */\nnamespace Smart\\Service;\n\n\nuse Smart\\Models\\SysAppVersion;\n\nclass SysAppVersionService extends BaseService {\n\n    //引入 GridTable trait\n    use \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n    protected $model_class = SysAppVersion::class;\n\n    public $device = [\n        'ios'     => 'iOS' ,\n        'android' => '安卓'\n    ];\n\n    //状态\n    public $status = [\n        0 => '禁用' ,\n        1 => '启用' ,\n    ];\n\n    \n\n    //取默认值\n    function getDefaultRow() {\n        return [\n            'id'              => '' ,\n            'device'          => 'android' ,\n            'version'         => '' ,\n            'uri'             => '' ,\n            'description'     => '' ,\n            'is_force_update' => '0' ,\n            'environment'     => 'production' ,\n            'status'          => '1' ,\n            'created_at'      => date( 'Y-m-d H:i:s' ) ,\n        ];\n    }\n\n    /**\n     * 根据条件查询\n     *\n     * @param $param\n     *\n     * @return array|number\n     */\n    public function getByCond( $param ) {\n        $default = [\n            'field'    => [ '*'] ,\n            'keyword'  => '' ,\n            'status'   => '' ,\n            'page'     => 1 ,\n            'pageSize' => 10 ,\n            'sort'     => 'id' ,\n            'order'    => 'DESC' ,\n            'count'    => FALSE ,\n            'getAll'   => FALSE\n        ];\n\n        $param = extend( $default , $param );\n        $model = $this->getModel()->keyword($param['keyword'])->status($param['status']);\n\n\n        if ( $param['count'] ) {\n            return $model->count();\n        }\n\n\n\n        $data = $model->getAll($param)->orderBy($param['sort'] , $param['order'] )->get($param['field'])->toArray();\n\n\n\n\n\n        return $data ? $data : [];\n    }\n\n}"
  },
  {
    "path": "src/Service/SysAreaService.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/18\n * Time: 15:34\n */\nnamespace Smart\\Service;\n\n\n\nuse Smart\\Models\\SysArea;\n\nclass SysAreaService extends BaseService {\n\n    //引入 GridTable trait\n    use \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n    protected $model_class = SysArea::class;\n    //状态\n    public $status = [\n        0 => '禁用',\n        1 => '启用',\n    ];\n\n    \n\n    //取默认值\n    function getDefaultRow() {\n        return [\n            'id'     => '',\n            'pid'    => '',\n            'text'   => '',\n            'tip'    => '',\n            'status' => '0',\n            'level'  => '0',\n        ];\n    }\n\n    /**\n     * 根据条件查询\n     *\n     * @param $param\n     *\n     * @return array|number\n     */\n    function getByCond( $param ) {\n        $default = [\n            'field'    => [],\n            'keyword'  => '',\n            'pid'      => '',\n            'status'   => '',\n            'page'     => 1,\n            'pageSize' => 10,\n            'sort'     => 'id',\n            'order'    => 'ASC',\n            'count'    => FALSE,\n            'getAll'   => FALSE\n        ];\n\n        $param = extend( $default, $param );\n        $model = $this->getModel()->keyword( $param['keyword'])->status($param['status'])->pid($param['pid'])->getAll($param);\n\n\n        if ( $param['count'] ) {\n            return $model->count();\n        }\n\n\n        $data =  $model->orderBy( $param['sort'] ,  $param['order'])->get()->toArray();\n\n\n        return $data ? $data : [];\n    }\n\n}"
  },
  {
    "path": "src/Service/SysFuncPrivilegeService.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: sl\n * Date: 2017/9/14\n * Time: 17:35\n */\nnamespace Smart\\Service;\nuse Smart\\Models\\SysFuncPrivilege;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass SysFuncPrivilegeService extends BaseService{\n\n    use \\Smart\\Traits\\Service\\TreeTable,\\Smart\\Traits\\Service\\Instance;\n\n    protected $model_class = SysFuncPrivilege::class;\n\n    public $name = [\n        'read'   => '查看' ,\n        'create' => '创建' ,\n        'update' => '更新' ,\n        'delete' => '删除'\n    ];\n\n    //默认操作\n    public $default = [\n        [ 'sort' => '10' , 'name' => 'read' ] ,\n        [ 'sort' => '20' , 'name' => 'create' ] ,\n        [ 'sort' => '30' , 'name' => 'update' ] ,\n        [ 'sort' => '40' , 'name' => 'delete' ] ,\n    ];\n\n    //操作别名\n    public $alias = [\n        'read'   => [ 'index' , 'read' , 'get' , 'search' , 'load' , 'download' , 'export' , 'preview' ] ,\n        'create' => [ 'insert' , 'create' , 'add' , 'upload' , 'post' , 'import' , 'copy' ] ,\n        'update' => [ 'update' , 'set' , 'reset' , 'save' , 'send' , 'change' , 'send' ] ,\n        'delete' => [ 'destroy' , 'delete' , 'remove' ] ,\n    ];\n\n    public function getDefaultRow(){\n        \n    }\n\n\n    public function getByCond($param){\n        $default = [\n            'field' => [ '*' ],\n            'module'=> 'backend',\n            'isMenu'=> '',\n            'pid'   => 0 ,\n            'status'=> '',\n            'withPrivilege' => FALSE ,\n            'key'   => self::DEFAULT_KEY ,\n        ];\n        $param = extend( $default , $param);\n\n        $data = $this->getModel()\n            ->where(function ($query) use ($param) {\n                if( $param['status'] !== '') {\n                    $query->where('status',$param['status']);\n                }\n            })\n            ->where(function ($query) use ($param) {\n                if( $param['module'] !== ''){\n                    $query->where('module',$param['module']);\n                }\n            })\n            ->where(function ($query) use ($param) {\n                if($param['isMenu'] !== ''){\n                    $query->where('is_menu',$param['isMenu']);\n                }\n            })\n            ->orderBy( 'level', 'ASC')\n            ->orderBy( 'sort', 'ASC')\n            ->get()\n            ->toArray();\n\n        if( $param['withPrivilege']){\n            $data = $this->withPrivilege($data);\n        }\n\n        $result = [];\n        $index = [];\n\n        foreach( $data as $row){\n            if( $row['pid'] == $param['pid']){\n                $result[ $row['id']] = $row;\n                $index[ $row['id']] = & $result[ $row['id']];\n            }else{\n                $index[ $row['pid']][ $param['key'] ][ $row['id'] ] = $row;\n                $index[ $row['id'] ] = &$index[ $row['pid'] ][ $param['key'] ][ $row['id'] ];\n            }\n        }\n        $tree_data = $this->treeToArray( $result , $param['key'] );\n        return $tree_data;\n    }\n\n    /**\n     * 更新\n     *\n     * @param $funcId\n     * @param $data\n     *\n     * @return array\n     */\n    public function updateByFunc( $funcId  , $data = [] ) {\n\n        $oldData = $this->getByFunc( $funcId );\n        $p       = [];\n        foreach ( $oldData as $item ) {\n            $p[] = $item['name'];\n        }\n\n        $data['name'] = isset($data['name']) ? $data['name'] : [];\n        $needAdd    = array_diff( $data['name'] , $p );\n        $needDelete = array_diff( $p , $data['name'] );\n\n        DB::beginTransaction();\n        try {\n            //如果有要添加的\n            if ( ! empty( $needAdd ) ) {\n                $addData = [];\n                foreach ( $needAdd as $name ) {\n                    $addData[] = [\n                        'func_id' => $funcId ,\n                        'name'    => $name\n                    ];\n\n                }\n                DB::table('sys_func_privilege')->insert($addData);\n\n            }\n\n            //如果有要删除的\n            if ( ! empty( $needDelete ) ) {\n                DB::table('sys_func_privilege')\n                    ->where( 'func_id' , $funcId )\n                    ->whereIn( 'name' ,  $needDelete )\n                    ->delete();\n\n            }\n\n            DB::commit();\n\n            return ajax_arr( '成功' , 0 );\n        } catch ( \\Exception $e ) {\n            DB::rollback();\n\n            return ajax_arr( $e->getMessage() , 500 );\n        }\n    }\n\n    /**\n     * 根据功能取权限\n     *\n     * @param $funcId\n     *\n     * @return array\n     */\n    public function getByFunc( $funcId ) {\n        $data = $this->getModel()->where( 'func_id' , $funcId )->get()->toArray();\n\n        return $data ? $data : [];\n    }\n\n    public function getByFuncs( $funcIds){\n        $data = $this->getModel()->whereIn('func_id' , $funcIds)->get()->toArray();\n        $newData = [];\n        foreach ( $data as $item ) {\n            $newData[ $item['func_id'] ][] = $item;\n        }\n\n        return $newData;\n    }\n\n}"
  },
  {
    "path": "src/Service/SysFuncService.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: sl\n * Date: 2017/9/14\n * Time: 17:35\n */\nnamespace Smart\\Service;\nuse Illuminate\\Support\\Facades\\DB;\nuse Smart\\Models\\SysFunc;\n\nclass SysFuncService extends BaseService {\n\n\tuse \\Smart\\Traits\\Service\\TreeTable,\\Smart\\Traits\\Service\\Instance;\n\n\tprotected $model_class = SysFunc::class;\n\n\tconst DEFAULT_KEY = 'children';\n\n\tpublic $isFunc = [\n\t\t0 => '否',\n\t\t1 => '是',\n\t];\n\n\tpublic $isMenu = [\n\t\t0 => '否',\n\t\t1 => '是',\n\t];\n\n\t//状态\n\tpublic $status = [\n\t\t0 => '禁用',\n\t\t1 => '启用',\n\t];\n\n\tpublic $privilege = null;\n\n\t\n\n\t//默认行\n\tpublic function getDefaultRow() {\n\t\treturn [\n\t\t\t'sort' => '99',\n\t\t\t'module' => 'backend',\n\t\t\t'isMenu' => '1',\n\t\t\t'isFunc' => '0',\n\t\t\t'color' => 'default',\n\t\t\t'name' => '',\n\t\t\t'icon' => '',\n\t\t\t'uri' => '',\n\t\t\t'desc' => '',\n\t\t\t'level' => '1',\n\t\t\t'status' => '1',\n\t\t];\n\t}\n\n\t/**\n\t * 根据角色取菜单    取名错误,等废弃\n\t *\n\t * @param $roleIds\n\t * @param $module\n\t *\n\t * @return array\n\t */\n\tpublic function getMenuByRoles($roleIds, $module) {\n\t\t$roleIds = explode(',', $roleIds);\n\t\tif ($roleIds == config('backend.superAdminId') || in_array(config('backend.superAdminId'), $roleIds)) {\n\t\t\t$result = $this->getByCond(['isMenu' => 1, 'status' => 1, 'module' => $module]);\n\t\t\t\n\t\t\t//如果是系统管理员\n\t\t\treturn $result;\n\t\t} else {\n\t\t\t//如果是普通用户\n\t\t\treturn $this->_getMenuByRoles($roleIds, $module);\n\t\t}\n\t}\n\n\tpublic function getMenuByRole($roleIds, $module){\n\t\treturn $this->_getMenuByRoles($roleIds, $module);\n\t}\n\n\tpublic function getByUri($uri) {\n\t\treturn $this->getModel()->where('uri', $uri)->first();\n\t} \n\n\tpublic function getByCond($param) {\n\t\t$default = [\n\t\t\t'field' => ['*'],\n\t\t//\t'module' => 'backend',\n\t\t\t'isMenu' => '',\n\t\t\t'pid' => 0,\n\t\t\t'status' => '',\n\t\t\t'page'     => 1 ,\n            'pageSize' => 10 ,\n\t\t\t'withPrivilege' => FALSE,\n\t\t\t'key' => self::DEFAULT_KEY,\n\t\t\t'getAll' => FALSE,\n\t\t];\n\t\t$func = function (&$arr) use (&$func){\n          foreach($arr as &$val){\n            if(isset($val['children'])){\n\n              if( empty($val['children'])){\n                unset($val['children']);\n              }else{\n                $func($val['children']);\n              }\n            }\n          }\n          return $arr;\n          \n        };\n\n        $param = extend( $default , $param );\n        $model = $this->getModel()->where('pid',0);\n        if($param['module']){\n        \t$model = $model->whereIn('module',(array)$param['module']);\n        }\n    //    echo $model->find(1)->level;\n        if ( isset($param['count']) && $param['count'] ) {\n            return $model->count();\n        }\n\n        if($param['getAll'] === FALSE){\n          $model = $model->with('children.privilege','privilege')->get()->forPage($param['page'] , $param['pageSize'])->values();\n        }else{\n          $model = $model->with('children.privilege','privilege')->get()->values();\n        }\n        $data = $model->toArray();\n\n\n\n        $data = $func($data);\n        \n\n        return $data ? $data : [];\n\t}\n\n\t/**\n\t * 查找除非超级管理员的菜单\n\t *\n\t * @param $roleIds\n\t * @param $module\n\t *\n\t * @return array\n\t */\n\tprivate function _getMenuByRoles($roleIds, $module) {\n\t\t$key = self::DEFAULT_KEY;\n\n\t\t$data = DB::table('sys_func AS f')\n\t\t\t->where('f.is_menu', 1)\n\t\t\t->where('f.status', 1)\n\t\t\t->where('f.module', \"$module\")\n\t\t\t->whereIn('rp.role_id', $roleIds)\n\t\t\t->where('fp.name', \"read\")\n\t\t\t->leftJoin('sys_func_privilege AS fp', 'fp.func_id', '=', 'f.id')\n\t\t\t->leftJoin('sys_role_permission AS rp', 'rp.privilege_id', '=', 'fp.id')\n\t\t\t->orderBy('f.level', 'ASC')->orderBy('f.sort', 'ASC')->get(['f.id', 'f.sort', 'f.pid', 'f.name', 'f.icon', 'f.uri', 'f.level'])->toArray();\n\n\t\t$result = [];\n\t\t$index = [];\n\t\t$func_ids = [];\n\n\t\tforeach ($data as $row) {\n\t\t\tif (in_array($row->id, $func_ids)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ($row->pid == 0) {\n\t\t\t\t$result[$row->id] = get_object_vars($row);\n\t\t\t\t$index[$row->id] = &$result[$row->id];\n\t\t\t} else {\n\t\t\t\t$index[$row->pid][$key][$row->id] = get_object_vars($row);\n\n\t\t\t\t$index[$row->id] = &$index[$row->pid][$key][$row->id];\n\t\t\t}\n\t\t\t$func_ids[] = $row->id;\n\t\t}\n\n\t\treturn $this->treeToArray($result, self::DEFAULT_KEY);\n\t}\n\n\tpublic function withPrivilege($data) {\n\t\t$allId = [];\n\t\tforeach ($data as $item) {\n\t\t\t$allId[] = $item['id'];\n\t\t}\n\n\t\t$SysFuncPrivilege = SysFuncPrivilegeService::instance();\n\t\t$allPrivileges = $SysFuncPrivilege->getByFuncs($allId);\n\n\t\tforeach ($data as &$item) {\n\t\t\tif (isset($allPrivileges[$item['id']])) {\n\t\t\t\t$item['privilege'] = $allPrivileges[$item['id']];\n\t\t\t} else {\n\t\t\t\t$item['privilege'] = [];\n\t\t\t}\n\t\t}\n\n\t\treturn $data;\n\t}\n\n\tpublic function getPrivilege($uri) {\n\t\t$func = SysFunc::where('uri', $uri)->first();\n\t\tif (empty($func)) {\n\t\t\treturn false;\n\t\t}\n\t\t$this->privilege = $func;\n\t\treturn true;\n\t}\n\n\tpublic function accept(SysUserService $sysUserService) {\n\n\t\t$klass = get_called_class();\n\t\tpreg_match('#([^\\\\\\\\]+)$#', $klass, $extract);\n\t\t$method = 'visit' . $extract[1];\n\n\t\tSysUserService::macro($method, function (SysFuncService $sysFuncService) {\n\t\t\tif ($this->user->id == config('backend.superAdminId')) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t$roles = $this->user->sysRole;\n\t\t\tforeach ($roles as $k => $role) {\n\t\t\t\tforeach ($role->rolePermission as $key => $privilege) {\n\t\t\t\t\tif ($privilege->uri == $sysFuncService->privilege->uri) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\n\t\treturn $sysUserService->$method($this);\n\n\t}\n\n}"
  },
  {
    "path": "src/Service/SysMailService.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/25\n * Time: 14:11\n */\n\nnamespace Smart\\Service;\n\n\nuse Illuminate\\Support\\Facades\\Mail;\nuse Smart\\Models\\SysMail;\n\nuse App\\Mail\\Captcha;\n\nclass SysMailService extends BaseService {\n\n    //引入 GridTable trait\n    use \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n    protected $model_class = SysMail::class;\n\n    private $timeCap = 600;\n\n    public $type = [\n        'captcha' => '验证码' ,\n    ];\n\n\n    public $type2mail = [\n        'captcha' => 'member' ,\n    ];\n\n    //状态\n    public $status = [\n        0 => '未发送' ,\n        1 => '已发送' ,\n    ];\n\n    public $error = '';\n\n\n    public function setError( $error ) {\n        $this->error = $error;\n    }\n\n    public function getError() {\n        return $this->error;\n    }\n\n    //取默认值\n    function getDefaultRow() {\n        return [\n            'id'         => '' ,\n            'type'       => 'captcha' ,\n            'name'       => '' ,\n            'address'    => '' ,\n            'subject'    => '' ,\n            'content'    => '' ,\n            'captcha'    => '' ,\n            'status'     => '0' ,\n            'created_at' => date( 'Y-m-d H:i:s' ) ,\n            'sent_at'    => '' ,\n        ];\n    }\n\n    /**\n     * 根据条件查询\n     *\n     * @param $param\n     *\n     * @return array|number\n     */\n    public function getByCond( $param ) {\n        $default = [\n            'field'    => [ '*'] ,\n            'keyword'  => '' ,\n            'status'   => '' ,\n            'page'     => 1 ,\n            'pageSize' => 10 ,\n            'sort'     => 'id' ,\n            'order'    => 'DESC' ,\n            'count'    => FALSE ,\n            'getAll'   => FALSE\n        ];\n\n        $param = extend( $default , $param );\n\n        $model = $this->getModel()->keyword($param['keyword'])->status($param['status']);\n\n\n        if ( $param['count'] ) {\n            return $model->count();\n        }\n\n\n        $data = $model->getAll($param)->orderBy( $param['sort'] , $param['order'])->get($param['field'])->toArray();\n\n\n        return $data ? $data : [];\n    }\n\n    public function sendById( $id ) {\n        $data = $this->getById( $id );\n\n        if ( ! $data || empty( $data ) ) {\n            return ajax_arr( '邮件未找到' , 0 );\n        }\n\n        switch ( $data['type'] ) {\n            case 'captcha' :\n                return $this->sendCaptcha( '' , $data );\n            case 'notification':\n            case 'ad':\n                return ajax_arr( '暂未开通' , 500 );\n            default:\n                return ajax_arr( '位置类型' , 500 );\n        }\n    }\n\n    /**\n     * 创建新邮件对象\n     *\n     * @param string $type\n     *\n     * @return PHPMailer\n     */\n    /*private function makeMail( $type = 'captcha' ) {\n\n\n        //$mail->SMTPDebug = 3;                               // Enable verbose debug output\n        $from         = $this->type2mail[ $type ];\n        $mailConfig   = config( 'mail' );\n        $memberConfig = $mailConfig[ $from ];\n\n        /*$mail->isSMTP();  // Set mailer to use SMTP\n        $mail->Host       = $mailConfig['smtp'];  // Specify main and backup SMTP servers\n        $mail->SMTPAuth   = TRUE;                 // Enable SMTP authentication\n        $mail->Username   = $memberConfig['username'];  // SMTP username\n        $mail->Password   = $memberConfig['password'];  // SMTP password\n        $mail->SMTPSecure = 'tls';               // Enable TLS encryption, `ssl` also accepted\n        $mail->Port       = $mailConfig['port']; // TCP port to connect to\n        $mail->CharSet    = 'utf-8';\n        $mail->setFrom( $memberConfig['username'] , $memberConfig['desc'] );\n        $mail->isHTML( TRUE );  // Set email format to HTML\n\n        return $mail;\n    }*/\n\n    /**\n     * 发送验证码\n     *\n     * @param $address\n     * @param $data\n     *\n     * @return array\n     */\n    public function sendCaptcha( $address = '' , $data = [] ) {\n        if ( empty( $data ) ) {\n            if ( ! filter_var( $address , FILTER_VALIDATE_EMAIL ) ) {\n                return ajax_arr( '请填写正确的email' . $address , 500 );\n            }\n\n\n            $data = [\n                'address' => $address ,\n                'subject' => '来自' . config( 'backend.projectName' ) . '的验证码' ,\n                'captcha' => $this->getCaptcha() ,\n            ];\n\n            //保存邮件到数据库\n            $result = $this->insert( $data );\n            if ( $result['code'] != 0 ) {\n                return $result;\n            }\n            $id = $result['data']['id'];\n        } else {\n            $address = $data['address'];\n            $id      = $data['id'];\n        }\n\n      /*  $mail = $this->makeMail( 'captcha' );\n        $mail->addAddress( $address );     // Add a recipient\n        $mail->Subject = $data['subject'];*/\n\n\n        $captcha = new Captcha($data['subject']);\n        $captcha->captcha =  $data['captcha'] ;\n         Mail::send($captcha);\n\n        //保存验证码到 数据库\n        /*if ( ! $mail->send() ) {\n            $this->setError( $mail->ErrorInfo );\n\n            return ajax_arr( '发送失败'.$data['captcha'] , 500 );\n        }*/\n        //修改状态\n        $this->setMailSent( $id );\n\n        return ajax_arr( '发送成功' , 0 );\n    }\n\n    /**\n     * 设置邮件已发送\n     *\n     * @param $id\n     *\n     * @return array\n     */\n    private function setMailSent( $id ) {\n        return $this->update( $id , [\n            'status'  => 1 ,\n            'sent_at' => date( 'Y-m-d H:i:s' )\n        ] );\n    }\n\n    /**\n     * 生成验证码\n     *\n     * @param int $len\n     *\n     * @return int\n     */\n    private function getCaptcha( $len = 4 ) {\n        if ( $len == 6 ) {\n            return mt_rand( 100000 , 999999 );\n        }\n\n        return mt_rand( 1000 , 9999 );\n    }\n\n    public function validCaptcha( $address , $captcha ) {\n        $this->error = '';\n\n        $data = $this->getModel()\n            ->where( 'address' , $address )\n            ->where( 'captcha' , $captcha )\n            ->order( 'id DESC' )\n            ->limit( 1 )\n            ->find();\n\n//    echo $this->model->getLastSql();\n        //验证数据是否找到\n        if ( ! $data ) {\n            $this->setError( '验证码未找到' );\n\n            return FALSE;\n        }\n\n        //验证是否超时\n        /*if ( time() - strtotime( $data['sent_at'] ) > $this->timeCap ) {\n          $this->setError( '验证码超时' );\n\n          return FALSE;\n        }\n        */\n        return TRUE;\n    }\n\n//  public function sendResetPwd( $address ) {\n//    $data = [\n//      'address' => $address ,\n//      'subject' => '重置 ' . config( 'custom.projectName' ) . '的用户密码' ,\n//      'content' => $this->getCaptcha() ,\n//    ];\n//\n//    //保存邮件到数据库\n//    $result = $this->insert( $data );\n//    if ( $result['code'] != 0 ) {\n//      return $result;\n//    }\n//\n//    $mail = $this->newMail( 'captcha' );\n//    $mail->addAddress( $address );     // Add a recipient\n//    $mail->Subject = $data['subject'];\n//    $mail->Body = '<p>您请访问</p>';\n//    $mail->Body    = \"验证码为 <b>\" . $data['captcha'] . \"</b> 请于10分钟内验证\";\n//\n//    //保存验证码到 数据库\n//    if ( ! $mail->send() ) {\n//      $this->setError( $mail->ErrorInfo );\n//\n//      return ajax_arr( '发送失败' , 500 );\n//    }\n//    //修改状态\n//    $this->setMailSent( $result['data']['id'] );\n//\n//    return ajax_arr( '发送成功' , 500 );\n//  }\n\n}"
  },
  {
    "path": "src/Service/SysMerchantService.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/18\n * Time: 17:43\n */\n namespace Smart\\Service;\n\n\n\nuse Smart\\Models\\SysMerchant;\n\nclass SysMerchantService extends BaseService {\n\n    //引入 GridTable trait\n    use \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n    protected $model_class = SysMerchant::class;    \n\n    public $forTest = [\n        0 => '否' ,\n        1 => '是'\n    ];\n\n    //状态\n    public $status = [\n        0 => '禁用',\n        1 => '启用',\n    ];\n\n    \n\n    //取默认值\n    function getDefaultRow() {\n        return [\n            'id'              => '',\n            'sort'            => '999',\n            'name'            => '',\n            'icon'            => '',\n            'phone'           => '',\n            'contact'         => '',\n            'email'           => '',\n            'id_card'         => '',\n            'status'          => '0',\n            'area'            => '',\n            'address'         => '',\n            'settled_amount'  => '0.00',\n            'balance'         => '0.00',\n            'withdraw_amount' => '0.00',\n            'create_time'     => date( 'Y-m-d H:i:s' ),\n            'apply_user_id'   => '',\n            'for_test'        => '0',\n        ];\n    }\n\n    /**\n     * 根据条件查询\n     *\n     * @param $param\n     *\n     * @return array|number\n     */\n    function getByCond( $param ) {\n        $default = [\n            'field'       => [],\n            'keyword'     => '',\n            'status'      => '',\n            'page'        => 1,\n            'pageSize'    => 10,\n            'sort'        => 'id',\n            'order'       => 'DESC',\n            'count'       => FALSE,\n            'getAll'      => FALSE,\n            'withSysUser' => FALSE\n        ];\n\n        $param = extend( $default, $param );\n        $model = $this->getModel()->keyword($param['keyword'])->status();\n\n\n        if ( $param['count'] ) {\n            return $model->count();\n        }\n\n        $param['field'] = ['*' ];\n\n        $data = $model->getAll($param)->orderBy( $param['sort'] , $param['order'])->get($param['field'])->toArray();\n\n\n        if ( $param['withSysUser'] ) {\n            $data = $this->withSysUser( $data );\n        }\n\n\n        return $data ? $data : [];\n    }\n\n    /**\n     * 查询 商户的管理用户\n     * @param $data\n     *\n     * @return mixed\n     */\n    private function withSysUser( $data ) {\n        if ( empty( $data ) ) {\n            return $data ;\n        }\n        $merIds = [];\n        foreach ( $data as $item ) {\n            $merIds[] = $item['id'];\n        }\n\n        $SysMerchant = SysMerchantService::instance();\n        $sysMerchantData =  $SysMerchant->getModel()->whereIn('id' ,$merIds);\n\n        $newUserData = [];\n        foreach($sysMerchantData as $sm){\n            $tmp_user = $sm->sysUsers()->toArray();\n            foreach($tmp_user as $u){\n                 $newUserData[$sm->mer_id][] =  $u;\n            }\n        }\n\n\n       /* foreach ( $userData as $item ) {\n            $newUserData[$item['mer_id']][] = $item ;\n        }*/\n\n        foreach ( $data as &$row ) {\n            if( isset( $newUserData[$row['id']] ) ) {\n                $row['sys_user'] = $newUserData[$row['id']] ;\n            } else {\n                $row['sys_user'] = '';\n            }\n        }\n\n        return $data ;\n    }\n\n    /**\n     * 查询测试商户\n     * @return mixed\n     */\n    public function getForTest() {\n        return $this->getModel()->where( 'for_test', 1 )->select();\n    }\n\n    /**\n     * 根据管理员查询 商户\n     *\n     * @param $userId\n     *\n     * @return array\n     */\n    public function getBySysUser( $userId ) {\n        $data = DB::table( 'MerSysUser as su' )\n            ->where( 'su.sys_user_id', $userId )\n            ->leftJoin( 'sys_merchant as m', 'm.id = su.mer_id' )\n            ->first();\n\n        return $data ? $data : [];\n    }\n\n}"
  },
  {
    "path": "src/Service/SysModulesService.php",
    "content": "<?php\nnamespace Smart\\Service;\n/**\n * SysModule Service\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 2018-06-13\n */\n\nuse Smart\\Models\\SysModule;\nuse Smart\\Service\\BaseService;\n\nclass SysModuleService extends BaseService {\n\n\t//引入 GridTable trait\n\tuse \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n\tprotected $model_class = SysModule::class;\n\n\t//状态\n\tpublic $status = [\n\t\t0 => '禁用',\n\t\t1 => '启用',\n\t];\n\n\t\n\n\t//取默认值\n\tfunction getDefaultRow() {\n\t\treturn [\n\t\t\t'created_at' => '',\n\t\t\t'desc' => '',\n\t\t\t'displayorder' => '',\n\t\t\t'id' => '',\n\t\t\t'name' => '',\n\t\t\t'status' => '',\n\t\t\t'symbol' => '',\n\t\t\t'thumb' => '',\n\t\t\t'updated_at' => '',\n\t\t\t'version' => '1.0',\n\t\t\t'作者' => '',\n\t\t];\n\t}\n\n\t/**\n\t * 根据条件查询\n\t *\n\t * @param $param\n\t *\n\t * @return array|number\n\t */\n\tpublic function getByCond($param) {\n\t\t$default = [\n\t\t\t'field' => ['*'],\n\t\t\t'keyword' => '',\n\t\t\t'status' => '',\n\t\t\t'page' => 1,\n\t\t\t'pageSize' => 10,\n\t\t\t'sort' => 'id',\n\t\t\t'order' => 'DESC',\n\t\t\t'count' => FALSE,\n\t\t\t'getAll' => FALSE,\n\t\t];\n\n\t\t$param = extend($default, $param);\n\n\t\t$model = $this->getModel()->keyword($param['keyword'])->status($param['status']);\n\n\t\tif ($param['count']) {\n\t\t\treturn $model->count();\n\t\t}\n\n\t\t$data = $model->getAll($param)->orderBy($param['sort'], $param['order'])->get($param['field'])->toArray();\n\n\t\treturn $data ? $data : [];\n\t}\n\n\tpublic function getById($id) {\n\t\treturn $this->getModel()->find($id);\n\t}\n\n}"
  },
  {
    "path": "src/Service/SysPushService.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/22\n * Time: 17:24\n */\n namespace Smart\\Service;\n\n\nuse Smart\\Models\\SysPush;\n\n\nuse JPush;\n\n\n\nclass SysPushService extends BaseService {\n\n    //引入 GridTable trait\n    use \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n    protected $model_class = SysPush::class;\n\n    public $catalog = [\n        'alert' => '通知',\n        'order' => '订单',\n        'event' => '活动'\n    ];\n\n    public $platform = [\n        'all'     => '全部',\n        'ios'     => 'iOS',\n        'android' => '安卓',\n    ];\n\n    //状态\n    public $status = [\n        0 => '未发送',\n        1 => '已发送',\n    ];\n\n    private $jpush;\n    //类实例\n    \n\n    /**\n     * 初始化 jpush 接口\n     *\n     * @param string $appKey\n     * @param string $secret\n     */\n    public function initJPush( $appKey = '', $secret = '' ) {\n        $appKey = empty( $appKey ) ? config( 'backend.JPush.appKey' ) : '';\n        $secret = empty( $secret ) ? config( 'backend.JPush.secret' ) : '';\n\n     //   $this->jpush = new JPush( $appKey, $secret );\n    }\n\n    //取默认值\n    public function getDefaultRow() {\n        return [\n            'id'              => '',\n            'mer_id'          => '',\n            'catalog'         => 'alert',\n            'platform'        => 'all',\n            'registration_id' => '',\n            'alias'           => '',\n            'tags'            => '',\n            'title'           => '',\n            'content'         => '',\n            'param'           => '',\n            'status'          => '0',\n            'sent_at'         => '',\n            'created_at'      => date( 'Y-m-d H:i:s' ),\n        ];\n    }\n\n    /**\n     * 根据条件查询\n     *\n     * @param $param\n     *\n     * @return array|number\n     */\n    function getByCond( $param ) {\n        $default = [\n            'field'    => ['*'],\n            'keyword'  => '',\n            'status'   => '',\n            'page'     => 1,\n            'pageSize' => 10,\n            'sort'     => 'id',\n            'order'    => 'DESC',\n            'count'    => FALSE,\n            'getAll'   => FALSE\n        ];\n\n        $param = extend( $default, $param );\n\n        $model = $this->getModel()->keyword($param['keyword'])->status($param['status']);\n\n\n        if ( $param['count'] ) {\n            return $model->count();\n        }\n\n\n\n        $data = $model->getAll($param)->orderBy($param['sort'] , $param['order'])->get()->toArray($param['field']);\n\n        return $data ? $data : [];\n    }\n\n    /**\n     * 绑定用户ID\n     *\n     * @param $registrationId\n     * @param $userId\n     *\n     * @return array\n     */\n    public function bindByUserId( $registrationId, $userId ) {\n        try {\n            $result = $this->jpush->device()->updateDevice( $registrationId, (string) $userId );\n\n            return ajax_arr( '成功', 0, json_decode( json_encode( $result ), TRUE ) );\n        } catch ( \\Exception $e ) {\n            return ajax_arr( $e->getMessage(), 500 );\n        }\n    }\n\n    public function sendById( $id ) {\n        $data = $this->getById( $id );\n        if ( empty( $data ) ) {\n            return ajax_arr( '推送消息未找到', 500 );\n        }\n\n        if ( ! empty( $data['alias'] ) ) {\n            $data['alias'] = explode( ',', $data['alias'] );\n        }\n\n        if ( ! empty( $data['tags'] ) ) {\n            $data['tags'] = explode( ',', $data['tags'] );\n        }\n\n        if ( ! empty( $data['registrationId'] ) ) {\n            $data['registrationId'] = explode( ',', $data['registrationId'] );\n        }\n\n        if ( ! empty( $data['extras'] ) ) {\n            $data['extras'] = json_decode( $data['extras'], TRUE );\n        }\n\n        $result = $this->sendByCond( $data );\n        if ( $result['code'] != 0 ) {\n            return $result;\n        }\n\n        //更新数据\n        try {\n            $this->getModel()->where( 'id', $id )->update( [\n                'status'  => 1,\n                'sent_at' => date( 'Y-m-d H:i:s' )\n            ] );\n\n            return ajax_arr( '推送成功', 0 );\n        } catch ( \\Exception $e ) {\n            return ajax_arr( '发送失败 ,' . $e->getMessage(), 500 );\n        }\n    }\n\n    /**\n     * 根据条件发送\n     *\n     * @param $params\n     *\n     * @return array\n     */\n    public function sendByCond( $params ) {\n        $default = [\n            'alias'          => [],\n            'tags'           => [],\n            'registrationId' => [],\n            'title'          => '',\n            'alert'          => '',\n            'platform'       => 'all',\n            'extras'         => [],\n        ];\n\n        $params = extend( $default, $params );\n\n        try {\n\n            $push = $this->jpush->push();\n\n            $push->setPlatform( $params['platform'] );\n\n            if ( ! empty( $params['alias'] ) ) {\n                $push->addAlias( $params['alias'] );\n            }\n\n            if ( ! empty( $params['tags'] ) ) {\n                $push->addTag( $params['tags'] );\n            }\n\n            if ( ! empty( $params['registrationId'] ) ) {\n                $push->addRegistrationId( $params['registrationId'] );\n            }\n\n\n            if ( $params['platform'] == 'all' ) {\n                //发送到所有平台\n                if ( empty( $params['extras'] ) ) {\n                    $push->setNotificationAlert( $params['alert'] );\n                } else {\n                    $push->addIosNotification( $params['alert'], 'sound', '+1', NULL, NULL, $params['extras'] )\n                        ->addAndroidNotification( $params['alert'], $params['title'], NULL, $params['extras'] );\n                }\n            } else if ( $params['platform'] == 'ios' ) {\n                //仅发 ios\n                if ( empty( $params['extras'] ) ) {\n                    $push->addIosNotification( $params['alert'] );\n                } else {\n                    $push->addIosNotification( $params['alert'], 'sound', '+1' );\n                }\n            } else if ( $params['platform'] == 'android' ) {\n                //仅发 android\n                if ( empty( $params['extras'] ) ) {\n                    $push->androidNotification( $params['alert'], $params['title'] );\n                } else {\n                    $push->androidNotification( $params['alert'], $params['title'], NULL, $params['extras'] );\n                }\n            }\n\n            $response = $push->send();\n\n            return ajax_arr( '发送成功', 0, $response );\n        } catch ( \\APIConnectionException $e ) {\n            // try something here\n            return ajax_arr( $e->getMessage(), 500 );\n        } catch ( \\APIRequestException $e ) {\n            // try something here\n            return ajax_arr( $e->getMessage(), 500 );\n        }\n    }\n\n    public function insert( $data, $sendImmediately = TRUE ) {\n\n\n    }\n\n}"
  },
  {
    "path": "src/Service/SysRolePermissionService.php",
    "content": "<?php\n/**\n * SysRolePermission Service\n *\n * @author Zix\n * @version 2.0 2016-05-11\n */\n\nnamespace Smart\\Service;\n\n\n\nuse Smart\\Models\\SysRolePermission;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass SysRolePermissionService extends BaseService {\n\n    //引入 GridTable trait\n    use \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n    protected $model_class = SysRolePermission::class;\n\n    //状态\n    public $status = [\n        0 => '禁用',\n        1 => '启用',\n    ];\n\n    \n\n    //根据条件查询\n    function getByCond( $param ) {\n        $default = [\n            'field'    => '',\n            'keyword'  => '',\n            'status'   => '',\n            'page'     => 1,\n            'pageSize' => 10,\n            'sort'     => 'id',\n            'order'    => 'DESC',\n            'count'    => FALSE,\n            'getAll'   => FALSE\n        ];\n\n        $param = extend( $default, $param );\n\n        $model = $this->getModel()->keyword($param['keyword'])->status($param['status']);\n\n\n        if ( $param['count'] ) {\n            return $model->count();\n        }\n\n     //   $this->getModel()->field( $param['field'] );\n        if ( ! $param['getAll'] ) {\n          $model =  $model->getAll($param);\n        }\n\n\n        $data  = $model->orderBy($param['sort'] , $param['order'])->get()->toArray();\n\n\n\n        return $data ? $data : [];\n    }\n\n    /**\n     * 根据角色获取 权限\n     *\n     * @param $roleId\n     *\n     * @return array\n     */\n    public function getPrivilegeByRole( $roleId ) {\n        $data = $this->getModel()->where( 'role_id', $roleId )->get()->toArray();\n\n        if ( empty( $data ) ) {\n            return $data;\n        }\n\n        $newData = [];\n        foreach ( $data as $row ) {\n            $newData[] = $row['privilege_id'];\n        }\n\n        return $newData;\n    }\n\n    /**\n     * 根据角色获取 授权\n     *\n     * @param $roleId\n     *\n     * @return mixed\n     */\n    function getByRole( $roleId ) {\n        return $this->getModel()->where( 'role_id', $roleId )->get()->toArray();\n    }\n\n    /**\n     * 检查角色权限\n     *\n     * @param $roleId\n     * @param $module\n     * @param $func\n     * @param $privilege\n     *\n     * @return array|bool\n     */\n    function checkRoleFuncPrivilege( $roleId, $module, $func, $privilege ) {\n        if ( $roleId == config( 'superAdminId' ) ) {\n            return TRUE;\n        }\n\n        if ( empty( $privilege ) ) {\n            return FALSE;\n        }\n\n        $funcUri = \"$module/$func/index\";\n\n        $data = $this->getModel()\n            ->field( 'DISTINCT fp.name' )\n            ->alias( 'rp' )\n            ->where( 'rp.role_id', 'in', $roleId )\n            ->where( 'f.uri', $funcUri )\n            ->join( 'sys_func_privilege fp', 'fp.id = rp.privilege_id' )\n            ->join( 'sys_func f', 'f.id = fp.func_id' )\n            ->select();\n\n\n        if ( empty( $data ) ) {\n            return FALSE;\n        }\n\n        $fixData = [];\n        foreach ( $data as $row ) {\n            $fixData [] = $row ['name'];\n        }\n        //echo $privilege_name;\n        if ( ! in_array( $privilege, $fixData ) ) {\n            return FALSE;\n        }\n\n        return $fixData;\n    }\n\n    /**\n     * 根据功能删除\n     *\n     * @param $funcId\n     *\n     * @return array\n     */\n    function destroyByFunc( $funcId ) {\n        try {\n            $sql = db( 'sys_func_privilege' )->where( 'func_id', $funcId )->buildSql();\n            $this->getModel()->where( 'privilege_id', 'in', $sql );\n            $this->getModel()->delete();\n\n            return ajax_arr( '删除成功', 0 );\n        } catch ( \\Exception $e ) {\n            return ajax_arr( $e->getMessage(), 500 );\n        }\n    }\n\n    /**\n     * 更新角色授权\n     *\n     * @param $roleId\n     * @param $privilegeArr\n     *\n     * @return array\n     */\n    function updateRolePermission( $roleId, $privilegeArr ) {\n\n        DB::beginTransaction();\n        try {\n            $oldPrivilegeData = $this->getPrivilegeByRole( $roleId );\n\n            $needAdd    = array_diff( $privilegeArr, $oldPrivilegeData );\n            $needDelete = array_diff( $oldPrivilegeData, $privilegeArr );\n\n            if ( ! empty( $needDelete ) ) {\n                $this->getModel()\n                    ->where( 'role_id', $roleId )\n                    ->whereIn( 'privilege_id',  $needDelete )\n                    ->delete();\n             //   echo $this->getModel()->toSql();\n            }\n            if ( ! empty( $needAdd ) ) {\n                $addData = [];\n                foreach ( $needAdd as $privilegeId ) {\n                    $addData[] = [\n                        'role_id'      => $roleId,\n                        'privilege_id' => $privilegeId\n                    ];\n                }\n                $this->getModel()->insert( $addData );\n            }\n\n            DB::commit();\n\n            return ajax_arr( '修改权限成功了', 0 );\n        } catch ( \\Exception $e ) {\n            DB::rollback();\n\n            return ajax_arr( $e->getMessage() . '--- here', 500 );\n        }\n    }\n\n}"
  },
  {
    "path": "src/Service/SysRoleService.php",
    "content": "<?php\n/**\n * SysRole Service\n *\n * @author MR.Z << zsh2088@gmail.com >>\n * @version 2.0 2017-09-15\n */\n\nnamespace Smart\\Service;\n\nuse Smart\\Models\\SysRole;\n\nclass SysRoleService extends BaseService {\n\n\t//引入 GridTable trait\n\tuse \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n\tprotected $model_class = SysRole::class;\n\t//状态\n\tvar $status = [\n\t\t0 => '禁用',\n\t\t1 => '启用',\n\t];\n\n\tvar $rank = [\n\t\t1 => '1级',\n\t\t2 => '2级',\n\t\t3 => '3级',\n\t\t4 => '4级',\n\t\t5 => '5级',\n\t\t6 => '6级',\n\t\t7 => '7级',\n\t\t8 => '8级',\n\t\t9 => '9级',\n\t\t10 => '10级',\n\t];\n\n\tvar $mp_rank = [\n\t\t1 => '1级',\n\t\t2 => '2级',\n\t\t3 => '3级',\n\t\t4 => '4级',\n\t\t5 => '5级',\n\t];\n\n\n\t//生成类单例\n\t\n\n\t//取默认值\n\tfunction getDefaultRow() {\n\t\treturn [\n\t\t\t'id' => '',\n\t\t\t'sort' => '99',\n\t\t\t'type' => 'backend',\n\t\t\t'mer_id' => '0',\n\t\t\t'name' => '',\n\t\t\t'status' => '1',\n\t\t\t'desc' => '',\n\t\t\t'expand' => '',\n\t\t\t'rank' => '1',\n\t\t];\n\t}\n\n\t//根据条件查询\n\tfunction getByCond($param) {\n\t\t$default = [\n\t\t\t'field' => '',\n\t\t\t'keyword' => '',\n\t\t\t'status' => '',\n\t\t\t'module' => 'backend',\n\t\t\t'page' => 1,\n\t\t\t'pageSize' => 10,\n\t\t\t'sort' => 'id',\n\t\t\t'order' => 'DESC',\n\t\t\t'count' => FALSE,\n\t\t\t'getAll' => FALSE,\n\t\t];\n\n\t\t$param = extend($default, $param);\n\n\t\t$model = $this->getModel()->keyword($param['keyword'])->module($param['module'])->status($param['status'])\n\t\t\t->where('rank', '<', 10);\n\n\t\tif ($param['count']) {\n\t\t\treturn $model->count();\n\t\t} else {\n\t\t\t//     $this->getModel() = $this->getModel()->select( $param['field'] );\n\t\t\t$data = $model->getAll($param)\n\t\t\t\t->orderBy($param['order'], $param['sort'])->get()->toArray();\n\n\t\t\treturn $data;\n\n\t\t}\n\t}\n\n\t/**\n\t * 根据角色id获取角色信息\n\t *\n\t *\n\t */\n\tfunction getById($id) {\n\t\treturn $this->getModel()->find($id);\n\t}\n\n\t/**\n\t * 根据模块获取角色\n\t *\n\t * @param $module\n\t *\n\t * @return mixed\n\t */\n\tfunction getByModule($module) {\n\n\t\t$data = $this->getModel()\n\t\t\t->where('id', '<>', config('backend.superAdminId'))\n\t\t\t->module($module)\n\t\t\t->orderBy('rank', 'desc')\n\t\t\t->get()->toArray();\n\n\t\treturn $data;\n\t}\n}"
  },
  {
    "path": "src/Service/SysSettingsService.php",
    "content": "<?php namespace Smart\\Service;\n/**\n * SysSettings Service\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 2018-06-25\n */\n\nuse Smart\\Models\\SysSettings;\nuse Smart\\Service\\BaseService;\n\nclass SysSettingsService extends BaseService {\n\n\t//引入 GridTable trait\n\tuse \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n\tprotected $model_class = SysSettings::class;\n\n\t//状态\n\tpublic $status = [\n\t\t0 => '禁用',\n\t\t1 => '启用',\n\t];\n\n\t\n\n\t//取默认值\n\tfunction getDefaultRow() {\n\t\treturn [\n\t\t\t'created_at' => '',\n\t\t\t'desc' => '99',\n\t\t\t'group' => 'default',\n\t\t\t'id' => '',\n\t\t\t'key' => '',\n\t\t\t'type' => 'text',\n\t\t\t'updated_at' => '',\n\t\t\t'value' => '',\n\t\t];\n\t}\n\n\t/**\n\t * 根据条件查询\n\t *\n\t * @param $param\n\t *\n\t * @return array|number\n\t */\n\tpublic function getByCond($param) {\n\t\t$default = [\n\t\t\t'field' => ['*'],\n\t\t\t'keyword' => '',\n\t\t\t'status' => '',\n\t\t\t'page' => 1,\n\t\t\t'pageSize' => 10,\n\t\t\t'sort' => 'id',\n\t\t\t'order' => 'DESC',\n\t\t\t'count' => FALSE,\n\t\t\t'getAll' => FALSE,\n\t\t];\n\n\t\t$param = extend($default, $param);\n\n\t\t$model = $this->getModel()->keyword($param['keyword'])->status($param['status']);\n\n\t\tif ($param['count']) {\n\t\t\treturn $model->count();\n\t\t}\n\n\t\t$data = $model->getAll($param)->orderBy($param['sort'], $param['order'])->get($param['field'])->toArray();\n\n\t\treturn $data ? $data : [];\n\t}\n\n}"
  },
  {
    "path": "src/Service/SysSmsService.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/25\n * Time: 10:23\n */\n\nnamespace Smart\\Service;\n\n\nuse Smart\\Models\\SysSms;\nuse Toplan\\PhpSms\\Sms;\n\nclass SysSmsService extends BaseService {\n\n    public $error = '';\n\n    const CaptchaVerifyPeriod = 15; //验证码 验证有效期 单位:分钟\n\n    //引入 GridTable trait\n    use \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n    protected $model_class = SysSms::class;\n\n    public $type = [\n        'captcha' => '验证码'\n    ];\n\n    //状态\n    public $status = [\n        -1 => '未发送',\n        0   => '未验证',\n        1   => '已验证',\n    ];\n\n    \n\n    //取默认值\n    function getDefaultRow() {\n        return [\n            'id'          => '',\n            'type'        => 'captcha',\n            'phone'       => '',\n            'content'     => '',\n            'temp_id'     => '',\n            'create_time' => date( 'Y-m-d H:i:s' ),\n            'valid_time'  => '',\n            'send_time'   => '',\n            'message_id'  => '',\n            'status'      => '0',\n        ];\n    }\n\n    /**\n     * 根据条件查询\n     *\n     * @param $param\n     *\n     * @return array|number\n     */\n    function getByCond( $param ) {\n        $default = [\n            'field'    => ['*'],\n            'keyword'  => '',\n            'status'   => '',\n            'page'     => 1,\n            'pageSize' => 10,\n            'sort'     => 'id',\n            'order'    => 'DESC',\n            'count'    => FALSE,\n            'getAll'   => FALSE\n        ];\n\n        $param = extend( $default, $param );\n\n        $model = $this->getModel()->keyword($param['keyword'])->status($param['status']);\n\n\n        if ( $param['count'] ) {\n            return $model->count();\n        }\n\n        $data = $model->getAll($param)->orderBy($param['sort'] , $param['order'])->get($param['field'])->toArray();\n\n        return $data ? $data : [];\n    }\n\n    /**\n     * 创建验证码\n     *\n     * @param $phone\n     * @param bool $sendImmediately\n     *\n     * @return array\n     */\n    public function createByCaptcha( $phone, $sendImmediately = FALSE ) {\n        $oldData = $this->getByPhoneInOneMin( $phone );\n\n        if ( ! empty( $oldData ) ) {\n            return ajax_arr( '请1分钟后再试试', 500 );\n        }\n\n        $data = [\n            'phone'   => $phone,\n            'content' => $this->makeCaptcha(),\n            'temp_id' => config( 'custom.sms' )['captchaTempId']\n        ];\n\n        try {\n            $id = $this->getModel()->insertGetId( $data );\n\n            if ( $sendImmediately ) {\n                if ( ! $this->sendCaptcha( $phone, $data['content'], $data['temp_id'] ) ) {\n                    throw new \\Exception( $this->error );\n                }\n\n                $this->getModel()->where( 'id', $id )->update( [\n                    'sent_at' => date( 'Y-m-d H:i:s' ),\n                    'status'  => 0\n                ] );\n            }\n\n            return ajax_arr( '创建成功', 0 );\n        } catch ( \\Exception $e ) {\n            return ajax_arr( $e->getMessage(), 500 );\n        }\n    }\n\n    /**\n     * 生成验证码\n     *\n     * @return int\n     */\n    private function makeCaptcha() {\n        return mt_rand( 100000, 999999 );\n    }\n\n\n    /**\n     * 发送验证码\n     *\n     * @param $phone\n     * @param $captcha\n     * @param $tempId\n     *\n     * @return bool\n     */\n    public function sendCaptcha( $phone, $captcha, $tempId ) {\n        $this->error  = '';\n\n        $templates = [\n         //   'YunTongXun' => 'your_temp_id',\n          //  'SubMail'    => 'your_temp_id'\n            'MySms' => $tempId,\n        ];\n    // 模版数据\n        $tempData = [\n            'code' => $captcha,\n            'minutes' => '5'\n        ];\n\n        $result  = Sms::make()->to( $phone)->template($templates)->data($tempData)->send();\n        if ( $result == NULL ) {\n            $this->error = '返回错误';\n\n            return FALSE;\n        }\n        if ( $result->statusCode != 0 ) {\n            $this->error = (string) $result->statusMsg;\n\n            return FALSE;\n        }\n\n        return TRUE;\n    }\n\n    /**\n     * 取1分钟内发送的验证码\n     *\n     * @param $phone\n     *\n     * @return mixed\n     */\n    public function getByPhoneInOneMin( $phone ) {\n        $data = $this->getModel()\n            ->where( 'phone', $phone )\n            ->whereTime( 'created_at', '>', time() - 60 )\n            ->find();\n\n        return $data;\n    }\n\n    /**\n     * 校验验证码\n     *\n     * @param $phone\n     * @param $captcha\n     *\n     * @return bool\n     */\n    public function validCaptcha( $phone, $captcha ) {\n\n        //获取验证码\n        $data = $this->getModel()\n            ->where( 'phone', $phone )\n            ->where( 'status', 0 )\n            ->whereTime( 'sent_at', '>', time() - self::CaptchaVerifyPeriod * 60 )\n            ->order('sent_at DESC')\n            ->find();\n\n//\t\techo  $this->model->getLastSql();\n        if ( ! $data ) {\n            $this->error = '验证码未找到';\n\n            return FALSE;\n        }\n\n        if ( $data['content'] != $captcha ) {\n            $this->error = '验证码不正确';\n\n            return FALSE;\n        }\n\n        $this->getModel()->where('id' , $data['id'])->update([\n            'verified_at' => date( 'Y-m-d H:i:s' ),\n            'status'      => 1,\n        ]);\n        //验证成功\n\n        return TRUE;\n    }\n\n}"
  },
  {
    "path": "src/Service/SysUserDeviceService.php",
    "content": "<?php namespace Smart\\Service;\n/**\n * SysUserDevice Service\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 2018-06-18\n */\n\nuse Smart\\Models\\SysUserDevice;\nuse Smart\\Service\\BaseService;\n\nclass SysUserDeviceService extends BaseService {\n\n\t//引入 GridTable trait\n\tuse \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n\tprotected $model_class = SysUserDevice::class;\n\t//状态\n\tpublic $status = [\n\t\t0 => '禁用',\n\t\t1 => '启用',\n\t];\n\n\tpublic $for_test = [\n\t\t0 => '否',\n\t\t1 => '是',\n\t];\n\n\t\n\n\t\n\n\t//取默认值\n\tfunction getDefaultRow() {\n\t\treturn [\n\t\t\t'api_version' => '',\n\t\t\t'app_version' => '',\n\t\t\t'created_at' => '',\n\t\t\t'device' => '',\n\t\t\t'device_os_version' => '',\n\t\t\t'for_test' => '0',\n\t\t\t'id' => '',\n\t\t\t'registration_id' => '',\n\t\t\t'token' => '',\n\t\t\t'updated_at' => '',\n\t\t\t'user_id' => '',\n\t\t];\n\t}\n\n\t/**\n\t * 根据条件查询\n\t *\n\t * @param $param\n\t *\n\t * @return array|number\n\t */\n\tpublic function getByCond($param) {\n\t\t$default = [\n\t\t\t'field' => ['*'],\n\t\t\t'keyword' => '',\n\t\t\t'status' => '',\n\t\t\t'page' => 1,\n\t\t\t'pageSize' => 10,\n\t\t\t'sort' => 'id',\n\t\t\t'order' => 'DESC',\n\t\t\t'count' => FALSE,\n\t\t\t'getAll' => FALSE,\n\t\t];\n\n\t\t$param = extend($default, $param);\n\n\t\t$model = $this->getModel()->keyword($param['keyword'])->status($param['status']);\n\n\t\tif ($param['count']) {\n\t\t\treturn $model->count();\n\t\t}\n\n\t\t$data = $model->getAll($param)->orderBy($param['sort'], $param['order'])->get($param['field'])->toArray();\n\n\t\treturn $data ? $data : [];\n\t}\n\n\t//生成token\n\tpublic function generateToken(){\n\n\t}\n\n}"
  },
  {
    "path": "src/Service/SysUserRoleService.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/16\n * Time: 14:05\n */\n\nnamespace Smart\\Service;\n\nuse Smart\\Models\\SysUserRole;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass SysUserRoleService extends BaseService {\n    //引入 GridTable trait\n    use \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n    protected $model_class = SysUserRole::class;\n    //状态\n    public $status = [\n        0 => '禁用' ,\n        1 => '启用' ,\n    ];\n\n    \n\n\n    /**\n     * 取默认值\n     *\n     * @return array\n     */\n    public function getDefaultRow() {\n        return [\n            'id'      => '' ,\n            'user_id' => '' ,\n            'role_id' => '' ,\n        ];\n    }\n\n    /**\n     * 根据条件查询\n     *\n     * @param $param\n     *\n     * @return array\n     */\n    public function getByCond( $param ) {\n        $default = [\n            'field'    => '' ,\n            'keyword'  => '' ,\n            'status'   => '' ,\n            'page'     => 1 ,\n            'pageSize' => 10 ,\n            'sort'     => 'id' ,\n            'order'    => 'DESC' ,\n            'count'    => FALSE ,\n            'getAll'   => FALSE ,\n        ];\n\n        $param = extend( $default , $param );\n\n        $model = $this->name($param['keyword'])->status($param['status']);\n\n\n        if ( $param['count'] ) {\n            return $this->getModel()->count();\n        } else {\n            //$this->getModel()->field( $param['field'] );\n\n            $data = $model->getAll($param)->orderBy( $param['sort'] , $param['order'])->get()->toArray();\n\n        }\n\n        return $data ? $data : [];\n    }\n\n    /**\n     * 根据用户取角色\n     *\n     * @param $userId\n     * @param bool $concatRole\n     *\n     * @return array\n     */\n    public function getByUser( $userId , $concatRole = FALSE ) {\n\n            $model = DB::table('sys_user_role')\n            ->join('sys_role', 'sys_role.id' , '=' , 'sys_user_role.role_id' )\n            ->where( 'sys_user_role.user_id' , $userId );\n\n        if ( $concatRole ) {\n            $data = $model->first([\n                'GROUP_CONCAT( sys_role.role_id ) AS role_id' ,\n                'GROUP_CONCAT( sys_role.name ) AS role_name' ,\n                'MAX(sys_role.rank) AS role_rank'\n            ]);\n        } else {\n\n            $data = $model->get( [\n                'sys_user_role.*' ,\n                'sys_role.name as role_name' ,\n                'sys_role.rank as role_rank'\n            ] )->toArray();\n        }\n\n        return $data ? $data : [];\n    }\n\n    /**\n     * 删除用户角色\n     *\n     * @param $userId\n     *\n     * @return array\n     */\n    public function destroyByUser( $userId ) {\n        try {\n            $this->getModel()->where( 'user_id' , $userId )->delete();\n\n            return ajax_arr( '删除成功' , 0 );\n        } catch ( \\Exception $e ) {\n            return ajax_arr( $e->getMessage() , 500 );\n        }\n    }\n\n    /**\n     * 更新用户角色\n     *\n     * @param $userId\n     * @param array $roles\n     *\n     * @return array\n     */\n    public function updateByUser( $userId , $roles = [] ) {\n        if ( $userId == config( 'superAdminId' ) ) {\n            return ajax_arr( '修改成功' , 0 );\n        }\n\n        //查询老数据\n        $oldData = $this->getByUser( $userId );\n\n        $oldRoles = [];\n        foreach ( $oldData as $row ) {\n            $oldRoles[] = $row->role_id;\n        }\n\n        //查询差值\n        $needDelete = array_diff( $oldRoles , $roles );\n        $needAdd    = array_diff( $roles , $oldRoles );\n\n        if ( ! empty( $needDelete ) ) {\n            //删除取消的角色\n             $this->getModel()->where( 'user_id' , $userId )->whereIn( 'role_id' ,  $needDelete )->delete();\n\n        }\n\n        if ( ! empty( $needAdd ) ) {\n            //添加新加的角色\n            $data = [];\n            foreach ( $needAdd as $role ) {\n                $data[] = [\n                    'user_id' => $userId ,\n                    'role_id' => $role\n                ];\n            }\n\n            $this->getModel()->insert( $data );\n        }\n\n        return ajax_arr( '更新成功' , 0 );\n\n    }\n}"
  },
  {
    "path": "src/Service/SysUserService.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/16\n * Time: 13:34\n */\n\nnamespace Smart\\Service;\n\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Traits\\Macroable;\nuse Smart\\Models\\SysUser;\nuse Smart\\Models\\SysUserRole;\nuse Smart\\Models\\SysUserDevice;\n\nclass SysUserService extends BaseService {\n\n\t//引入 GridTable trait\n\tuse \\Smart\\Traits\\Service\\GridTable,\\Smart\\Traits\\Service\\Instance;\n\n\tuse Macroable;\n\n\tprotected $model_class = SysUser::class;\n\n\t//状态\n\tpublic $status = [\n\t\t0 => '禁用',\n\t\t1 => '启用',\n\t];\n\n\n\t\n\n\tpublic $user = null;\n\n\t/**\n\t * 取默认值\n\t *\n\t * @return array\n\t */\n\tfunction getDefaultRow() {\n\t\treturn [\n\t\t\t'id' => '',\n\t\t\t'module' => 'backend',\n\t\t\t'username' => '',\n\t\t\t'password' => '',\n\t\t\t'icon' => '',\n\t\t\t'email' => '',\n\t\t\t'phone' => '',\n\t\t\t'status' => '1',\n\t\t\t'token' => '',\n\t\t\t'created_at' => date('Y-m-d H:i:s'),\n\t\t];\n\t}\n\n\t/**\n\t * 根据条件查询\n\t *\n\t * @param $params\n\t *\n\t * @return array|number\n\t */\n\tpublic function getByCond($params) {\n\n\t\t$default = [\n\t\t\t'field' => ['*'],\n\t\t\t'module' => 'backend',\n\t\t\t'keyword' => '',\n\t\t\t'status' => '',\n\t\t\t'merId' => '',\n\t\t\t'page' => 1,\n\t\t\t'pageSize' => 10,\n\t\t\t'sort' => 'id',\n\t\t\t'order' => 'DESC',\n\t\t\t'getAll' => FALSE,\n\t\t\t'count' => FALSE,\n\t\t\t'withPwd' => FALSE,\n\t\t\t'withRoles' => FALSE,\n\t\t\t'withTest' => FALSE,\n\t\t\t'merchant' => FALSE,\n\t\t];\n\n\t\t$params = extend($default, $params);\n\n\t\tif ($params['merchant']) {\n\t\t\treturn $this->getMerSysUserByCond($params);\n\t\t}\n\t\t$model = self::instance()->getModel();\n\n\t\tif ($params['withTest']) {\n\t\t\t$model = $model->with('UserDevice');\n\t\t}\n\n\t\t$model = $model->status($params['status'])->module($params['module'])->keyword($params['keyword']);\n\n\t\tif ($params['count']) {\n\t\t\treturn $model->count();\n\t\t} else {\n\t\t\t$data = $model\n\t\t\t\t->orderBy($params['sort'], $params['order'])->get()->toArray();\n\n\t\t}\n\n\t\tif (!$params['withPwd']) {\n\t\t\tforeach ($data as &$item) {\n\t\t\t\tunset($item['password']);\n\t\t\t}\n\t\t}\n\n\t\tif ($params['withRoles']) {\n\t\t\t$data = $this->getRoles($data);\n\t\t}\n\n\t\treturn $data ? $data : [];\n\t}\n\n\t/**\n\t * todo 需要优化\n\t *\n\t * @param $data\n\t *\n\t * @return mixed\n\t */\n\tprivate function getRoles($data) {\n\t\t$SysUserRole = SysUserRoleService::instance();\n\n\t\tforeach ($data as &$item) {\n\t\t\t$item['roles'] = $SysUserRole->getByUser($item['id']);\n\t\t}\n\n\t\treturn $data;\n\t}\n\n\t/**\n\t * 获取 MP 平台用户\n\t *\n\t * @param $params\n\t *\n\t * @return array\n\t */\n\tprivate function getMerSysUserByCond($params) {\n\t\t$sysMerchant = SysMerchantService::instance();\n\t\t$model = $sysMerchant->getModel()->find($params['merId'])->sysUsers()->status($params['status']);\n\n\t\tif ($params['count']) {\n\t\t\treturn $model->count();\n\t\t} else {\n\t\t\t//    $model->field( 'u.*' );\n\t\t\t$data = $model->getAll($params)->orderBy($params['sort'], $params['order'])->get()->toArray();\n\n\t\t}\n\n\t\tif (!$params['withPwd']) {\n\t\t\tforeach ($data as &$item) {\n\t\t\t\tunset($item['password']);\n\t\t\t}\n\t\t}\n\n\t\tif ($params['withRoles']) {\n\t\t\t$data = $this->getRoles($data);\n\t\t}\n\n\t\treturn $data ? $data : [];\n\n\t}\n\n\t/**\n\t * 更新密码\n\t *\n\t * @param $id\n\t * @param $data\n\t *\n\t * @return array\n\t */\n\tfunction uploadPwd($id, $data) {\n\t\ttry {\n\t\t\tself::instance()->getModel()->where('id', $id)->update($data);\n\n\t\t\treturn ajax_arr('更新成功', 0);\n\t\t} catch (\\Exception $e) {\n\n\t\t\treturn ajax_arr($e->getMessage(), 500);\n\t\t}\n\t}\n\n\t/**\n\t * 添加数据\n\t *\n\t * @param $data\n\t *\n\t * @return array\n\t */\n\tpublic function insert($data) {\n\t\tDB::beginTransaction();\n\t\ttry {\n\t\t\tif (empty($data)) {\n\t\t\t\tthrow new \\Exception('数据不能为空');\n\t\t\t}\n\n\t\t\tif (isset($data['for_test'])) {\n\t\t\t\t$for_test = $data['for_test'];\n\t\t\t\tunset($data['for_test']);\n\t\t\t}\n\n\t\t\t$roles = isset($data['roles']) ? $data['roles'] : [];\n\t\t\tunset($data['roles']);\n\t\t\t$data['password'] = str2pwd(config('defaultPwd'));\n\n\t\t\t$id = self::instance()->getModel()->insertGetId($data);\n\t\t\tSysUserDevice::firstOrCreate(['user_id'=>$id]);\n\t\t\tif ($id <= 0) {\n\t\t\t\tthrow new \\Exception('创建用户失败');\n\t\t\t}\n\n\t\t\tif($for_test){\n\t\t\t\t$token = md5(http_build_query($data) . json_encode(['created_at' => time()]));\n\t\t\t\tself::instance()->getModel()->api_token = $token;\n\t\t\t\tself::instance()->getModel()->save();\n\n\t\t\t}\n\n\t\t\t//更新用户角色\n\t\t\tif (!empty($roles)) {\n\t\t\t\t$SysUserRole = SysUserRoleService::instance();\n\t\t\t\t$RoleResult = $SysUserRole->updateByUser($id, $roles);\n\t\t\t\tif ($RoleResult['code'] > 0) {\n\t\t\t\t\tthrow new \\Exception($RoleResult['msg']);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tDB::commit();\n\n\t\t\treturn ajax_arr('创建用户成功', 0, ['id' => $id]);\n\t\t} catch (\\Exception $e) {\n\t\t\tDB::rollback();\n\n\t\t\treturn ajax_arr($e->getMessage(), 500);\n\t\t}\n\t}\n\n\t//更新\n\tfunction update($id, $data) {\n\n\t\tDB::beginTransaction();\n\t\ttry {\n\t\t\t$roles = [];\n\t\t\tif (isset($data['roles'])) {\n\t\t\t\t$roles = $data['roles'];\n\t\t\t\tunset($data['roles']);\n\t\t\t}\n\t\t\tif (isset($data['for_test'])) {\n\t\t\t\t$for_test = $data['for_test'];\n\t\t\t\tunset($data['for_test']);\n\t\t\t}\n\n\t\t\t\n\t\t\t$ret = self::instance()->getModel()->where('id', $id)->update($data);\n\t\t\t$sysUserDevice = SysUserDevice::firstOrCreate(['user_id'=>$id]);\n\t\t\t$sysUserDevice->for_test = $for_test;\n\t\t\t$sysUserDevice->save();\n\t\t\t//更新用户角色\n\t\t\t$SysUserRole = SysUserRoleService::instance();\n\t\t\t$RoleResult = $SysUserRole->updateByUser($id, $roles);\n\t\t\tif ($RoleResult['code'] > 0) {\n\t\t\t\tthrow new \\Exception($RoleResult['msg']);\n\t\t\t}\n\t\t\tif($for_test){\n\t\t\t\t$token = md5(http_build_query($data) . json_encode(['created_at' => time()]));\n\t\t\t\t$sysUser = SysUser::find($id);\n\t\t\t\t$sysUser->api_token = $token;\n\t\t\t\t$sysUser->save();\n\n\t\t\t}\n\n\t\t\tDB::commit();\n\n\t\t\treturn ajax_arr('更新成功', 0);\n\t\t} catch (\\Exception $e) {\n\t\t\tDB::rollback();\n\n\t\t\treturn ajax_arr($e->getMessage(), 500);\n\t\t}\n\t}\n\n\t/**\n\t * 删除系统用户\n\t *\n\t * @param $id\n\t *\n\t * @return array\n\t */\n\tpublic function destroy($id) {\n\t\t$model = self::instance()->getModel();\n\t\ttry {\n\t\t\tif ($id <= 2) {\n\t\t\t\tthrow new \\Exception('系统用户不能删除');\n\t\t\t}\n\t\t\t$model_user_role = new SysUserRole();\n\t\t\t//删除用户角色\n\t\t\t$model_user_role->destroy($id);\n\n\t\t\t//删除用户\n\t\t\t$model->destroy($id);\n\n\t\t\treturn ajax_arr('删除成功', 0);\n\t\t} catch (\\Exception $e) {\n\t\t\treturn ajax_arr($e->getMessage(), 500);\n\t\t}\n\t}\n\n\t/**\n\t * 重置密码\n\t *\n\t * @param $id\n\t * @param $pwd\n\t *\n\t * @return array\n\t */\n\tpublic function resetPwd($id, $pwd) {\n\t\ttry {\n\t\t\t//  $data['password'] = str2pwd( $pwd );\n\t\t\t$data['password'] = Hash::make($pwd);\n\t\t\t$row = self::instance()->getModel()->where('id', $id)->update($data);\n\t\t\tif ($row <= 0) {\n\t\t\t\treturn ajax_arr('未修改任何记录', 500);\n\t\t\t}\n\n\t\t\treturn ajax_arr('重置密码成功', 0);\n\t\t} catch (\\Exception $e) {\n\t\t\treturn ajax_arr($e->getMessage(), 500);\n\t\t}\n\t}\n\n\t\n\n\tpublic function setUser($id) {\n\t\tself::instance()->user = self::instance()->getModel()->find($id);\n\t}\n\n\t/**\n\t * 查询测试用户\n\t *\n\t * @return mixed\n\t */\n\tpublic function getForTest() {\n\t\t$data = DB::table('sys_user as su')->leftJoin('sys_user_device as sud', 'su.id', '=', 'sud.user_id')->where('sud.for_test', 1)->get()->toArray();\n\t\treturn $data;\n\t}\n\n}"
  },
  {
    "path": "src/Service/UploadManager.php",
    "content": "<?php\n\nnamespace App\\Services;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Dflydev\\ApacheMimeTypes\\PhpRepository;\n\nclass UploadsManager\n{\n    protected $disk;\n    protected $mimeDetect;\n\n    public function __construct(PhpRepository $mimeDetect)\n    {\n        $this->disk = Storage::disk(config('blog.uploads.storage'));\n        $this->mimeDetect = $mimeDetect;\n    }\n\n    /**\n     * Return files and directories within a folder\n     *\n     * @param string $folder\n     * @return array of [\n     *     'folder' => 'path to current folder',\n     *     'folderName' => 'name of just current folder',\n     *     'breadCrumbs' => breadcrumb array of [ $path => $foldername ]\n     *     'folders' => array of [ $path => $foldername] of each subfolder\n     *     'files' => array of file details on each file in folder\n     * ]\n     */\n    public function folderInfo($folder)\n    {\n        $folder = $this->cleanFolder($folder);\n\n        $breadcrumbs = $this->breadcrumbs($folder);\n        $slice = array_slice($breadcrumbs, -1);\n        $folderName = current($slice);\n        $breadcrumbs = array_slice($breadcrumbs, 0, -1);\n\n        $subfolders = [];\n        foreach (array_unique($this->disk->directories($folder)) as $subfolder) {\n            $subfolders[\"/$subfolder\"] = basename($subfolder);\n        }\n\n        $files = [];\n        foreach ($this->disk->files($folder) as $path) {\n            $files[] = $this->fileDetails($path);\n        }\n\n        return compact(\n            'folder',\n            'folderName',\n            'breadcrumbs',\n            'subfolders',\n            'files'\n        );\n    }\n\n    /**\n     * Sanitize the folder name\n     */\n    protected function cleanFolder($folder)\n    {\n        return '/' . trim(str_replace('..', '', $folder), '/');\n    }\n\n    /**\n     * 返回当前目录路径\n     */\n    protected function breadcrumbs($folder)\n    {\n        $folder = trim($folder, '/');\n        $crumbs = ['/' => 'root'];\n\n        if (empty($folder)) {\n            return $crumbs;\n        }\n\n        $folders = explode('/', $folder);\n        $build = '';\n        foreach ($folders as $folder) {\n            $build .= '/' . $folder;\n            $crumbs[$build] = $folder;\n        }\n\n        return $crumbs;\n    }\n\n    /**\n     * 返回文件详细信息数组\n     */\n    protected function fileDetails($path)\n    {\n        $path = '/' . ltrim($path, '/');\n\n        return [\n            'name' => basename($path),\n            'fullPath' => $path,\n            'webPath' => $this->fileWebpath($path),\n            'mimeType' => $this->fileMimeType($path),\n            'size' => $this->fileSize($path),\n            'modified' => $this->fileModified($path),\n        ];\n    }\n\n    /**\n     * 返回文件完整的web路径\n     */\n    public function fileWebpath($path)\n    {\n        $path = rtrim(config('blog.uploads.webpath'), '/') . '/' . ltrim($path, '/');\n        return url($path);\n    }\n\n    /**\n     * 返回文件MIME类型\n     */\n    public function fileMimeType($path)\n    {\n        return $this->mimeDetect->findType(\n            pathinfo($path, PATHINFO_EXTENSION)\n        );\n    }\n\n    /**\n     * 返回文件大小\n     */\n    public function fileSize($path)\n    {\n        return $this->disk->size($path);\n    }\n\n    /**\n     * 返回最后修改时间\n     */\n    public function fileModified($path)\n    {\n        return Carbon::createFromTimestamp(\n            $this->disk->lastModified($path)\n        );\n    }\n}"
  },
  {
    "path": "src/Service/UploadService.php",
    "content": "<?php\n/**\n * 文件图片上传 Service\n *\n * @author Zix\n * @version 2.0 , 2016-05-06\n */\n\nnamespace Smart\\Service;\n\nuse Intervention\\Image\\Facades\\Image;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Storage;\n\nclass UploadService {\n\n    private $error;\n    private $path = [ 'icon', 'merchant', 'tmp', 'app' ];\n    private $type = [ 'img', 'file', 'both' ];\n    private $inputName = 'imgFile';\n    private $defaultParam = [\n        'type'        => 'img',  //上传类型 img , file , all\n        'path'        => 'icon', //上传路径 icon merchant tmp app file\n        'maxSize'     => 3145728, //上传尺寸\n        'merId'       => '', //商户ID\n        'isKE'        => 0, //是否kindeditor\n        'crop'        => [], //是否裁剪 数组 [ x , y , w , h ],\n        'ratio'       => 1,  //缩放比\n        'width'       => 0,  //宽度\n        'height'      => 0,  //高度\n        'thumb'       => [], //缩略图 [50 , 100 , 300] 或 [ 50|50 , 100|100 , 300|300 ]\n        'saveAsAlbum' => FALSE, //是否保存到相册\n        'albumTag'    => '', //相册目录\n    ];\n\n    public $param = []; //上传的配置文件\n    private $fileInfo = NULL; //上传成功后的 file info\n    private $result = []; //返回结果\n    private $uploadFtpList = []; //需要ftp上传的文件\n    private $relativePath = '';\n\n\n    private static $instance;\n\n    public static function instance( $inputName = 'imgFile') {\n        if ( self::$instance == NULL ) {\n            self::$instance = new UploadService();\n            self::$instance->inputName = $inputName ;\n        }\n\n        return self::$instance;\n    }\n\n    public function setError( $error ) {\n        $this->error = $error;\n    }\n\n    public function getError() {\n        return $this->error;\n    }\n\n    public function setInputName( $inputName ) {\n        $this->inputName = $inputName;\n    }\n\n\n    private function initUpload( $param ) {\n        $this->uploadFtpList = [];\n        $this->fileInfo      = NULL;\n        $this->result        = [];\n        $this->relativePath  = '';\n        $this->param         = extend( $this->defaultParam, $param );\n    }\n\n    /**\n     * 上传\n     *\n     * 图片 先裁剪 再按宽高缩放\n     *\n     * @param $param\n     *\n     * @return array\n     */\n    public function doUpload( $param = [] ) {\n\n        //初始化各种变量\n        $this->initUpload( $param );\n\n        //检查上传类型\n        if ( ! in_array( $this->param['type'], $this->type ) ) {\n            $this->setError( '未知的上传类型' );\n\n            return $this->returnError();\n        }\n\n        //检查存储路径\n        if ( ! in_array( $this->param['path'], $this->path ) ) {\n            $this->setError( '未知的上传路径' );\n\n            return $this->returnError();\n        }\n\n        //检查尺寸\n        $file = request()->file( $this->inputName );\n        if ( $file->getSize() > $this->param['maxSize'] ) {\n            $size = file_size( $this->param['maxSize'] );\n            $this->setError( \"文件超过{$size}\" );\n\n            return $this->returnError();\n        }\n\n        //绝对路径\n   //     $absolutePath = base_path() . 'public' . DIRECTORY_SEPARATOR . 'upload' . DIRECTORY_SEPARATOR . $this->param['path'] . DIRECTORY_SEPARATOR;\n        //相对路径\n        $relativePath = \"public\". DIRECTORY_SEPARATOR .'upload' . DIRECTORY_SEPARATOR . $this->param['path'] . DIRECTORY_SEPARATOR;\n\n        //文件路径\n        if ( ! empty( $this->param['merId'] ) ) {\n        //    $absolutePath = base_path() . \"/public/upload/merchant/{$this->param['merId']}/{$this->param['path']}/\";\n            $relativePath = \"public\". DIRECTORY_SEPARATOR .\"upload\". DIRECTORY_SEPARATOR .\"merchant\". DIRECTORY_SEPARATOR .$this->param['merId'] . DIRECTORY_SEPARATOR . $this->param['path'] . DIRECTORY_SEPARATOR;\n\n        }\n\n        //加入日期\n    //    $absolutePath .= date( 'ymd' );\n        $relativePath .= date( 'ymd' );\n\n\n        //移动到目标文件夹\n        $info = $file->store($relativePath);\n\n        //上传失败\n        if ( ! $info ) {\n            $this->setError( $file->getError() );\n\n            return $this->returnError();\n        }\n\n        $this->fileInfo     = $info;\n        $this->relativePath = $relativePath;\n\n        //上传成功的后续处理\n        return $this->afterUploadSuccess();\n    }\n\n\n\n    /**\n     * 上传成功的后续处理\n     *\n     * @return array\n     */\n    private function afterUploadSuccess() {\n        //文件相对路径\n        $this->relativePath = $this->fileInfo ;\n\n        //修改文件权限\n        //chmod( $this->relativePath, 0777 );\n        $mimes = Storage::mimeType($this->fileInfo);\n        $size  = Storage::size($this->fileInfo);\n        $name  = $this->fileInfo;\n\n        //生成返回信息\n        $this->result = [\n            'uri'      => Storage::url($this->fileInfo),\n            'savePath' => $this->relativePath,\n            'mimes'    => $mimes,\n            'size'     => $size,\n            'name'     => $name\n        ];\n\n        //添加到上传列表\n        $this->addUploadFtpList( $this->fileInfo );\n\n        //如果是图片\n        if ( $this->param['type'] == 'img' ) {\n            $checkRet = $this->checkCropThumb();\n            if ( ! $checkRet ) {\n                Storage::delete($this->relativePath);\n                return $this->returnError();\n            }\n\n            //保存到相册\n            if ( ! $this->saveAsAlbum() ) {\n                return $this->returnError();\n            }\n        }\n\n        //上传到ftp\n        if ( ! $this->uploadToFtp() ) {\n            return $this->returnError();\n        }\n\n\n        return $this->returnSuccess();\n    }\n\n    /**\n     * 添加到上传列表\n     *\n     * @param $filePath\n     */\n    private function addUploadFtpList( $filePath ) {\n        $this->uploadFtpList[] = $filePath;\n    }\n\n    /**\n     * 返回成功\n     *\n     * @return array\n     */\n    private function returnSuccess() {\n        //如果是kind editor\n        if ( $this->param['isKE'] ) {\n            return [\n                'error' => 0,\n                'url'   => $this->result['uri']\n            ];\n        } else {\n            return ajax_arr( '上传成功', 0, $this->result );\n        }\n    }\n\n    /**\n     * 返回错误\n     *\n     * @return array\n     */\n    private function returnError() {\n        //如果是kind editor\n        if ( $this->param['isKE'] ) {\n            return [\n                'error'   => 1,\n                'message' => $this->error\n            ];\n        } else {\n            return ajax_arr( $this->error, 500 );\n        }\n    }\n\n    /**\n     * 检查图片\n     *\n     * @return bool\n     */\n    private function checkCropThumb() {\n        //打开图片\n        $image                  = Image::make(Storage::path($this->fileInfo) );\n        $this->result['width']  = $image->width();\n        $this->result['height'] = $image->height();\n\n        //检查是否要裁剪\n        if ( $this->param['crop'] && ! empty( $this->param['crop'] ) ) {\n            $pathInfo = pathinfo( $this->fileInfo );\n            $cropPath = dirname(Storage::path($this->fileInfo)).\"crop_{$pathInfo['basename']}\";\n\n            //裁剪图片\n            $crop = explode( ',', $this->param['crop'] );\n\n            $image->crop( $crop[2], $crop[3], $crop[0], $crop[1])->save($cropPath );\n\n            Image::make($cropPath)->resize($this->param['width'] , $this->param['height'])->save( Storage::path($this->fileInfo));\n\n            $this->result['width']  = $this->param['width'];\n            $this->result['height'] = $this->param['height'];\n            Storage::delete($cropPath);\n        } else {\n            //检查图片尺寸\n            if ( $this->param['width'] > 0 && $this->result['width'] != $this->param['width'] ) {\n                $this->setError( '图片宽度需为' . $this->param['width'] );\n\n                return FALSE;\n            }\n\n            if ( $this->param['height'] > 0 && $this->result['height'] != $this->param['height'] ) {\n                $this->setError( '图片高度需为' . $this->param['height'] );\n\n                return FALSE;\n            }\n        }\n\n        //检查是否要生成 缩略图\n        if ( ! empty( $this->param['thumb'] ) ) {\n\n            $pathInfo = pathinfo( $this->fileInfo );\n            $thumb    = explode( ',', $this->param['thumb'] );\n\n            foreach ( $thumb as $size ) {\n                $image   = Image::make(  $this->fileInfo );\n                $sizeArr = explode( '|', $size );\n                //计算尺寸 兼容 50 和 50|20 这2种模式\n                $w = $sizeArr[0];\n                $h = isset( $sizeArr[1] ) ? $sizeArr[1] : $sizeArr[0];\n\n                $thumbPath = \"{$pathInfo['dirname']}/{$pathInfo['filename']}.{$sizeArr[0]}.{$pathInfo['extension']}\";\n\n                $image->resize( $w, $h )->save( $thumbPath );\n                $this->addUploadFtpList( $thumbPath );\n                chmod( $thumbPath, 0777 );\n            }\n        }\n\n        return TRUE;\n    }\n\n    /**\n     * 上传到ftp\n     *\n     * @return bool\n     */\n    private function uploadToFtp() {\n\n        if ( config( 'backend.image.uploadType' ) == 'ftp' ) {\n            foreach ( $this->uploadFtpList as $file ) {\n                if ( Storage::store( $file, 'ftp' ) ) {\n                    Storage::delete($file);\n                }\n            }\n\n        }\n\n        return TRUE;\n    }\n\n    /**\n     * 保存到相册\n     *\n     * @return bool\n     */\n    private function saveAsAlbum() {\n        if ( $this->param['saveAsAlbum'] !== FALSE ) {\n            $data = [\n                'uri'      => $this->result['uri'],\n                'size'     => $this->result['size'],\n                'img_size' => \"{$this->result['width']}*{$this->result['height']}\",\n                'mimes'    => $this->result['mimes'],\n            ];\n            if ( ! empty( $this->param['merId'] ) ) {\n                $data['mer_id'] = $this->param['merId'];\n            }\n\n            $MerAlbum = MerAlbumService::instance();\n            $ret      = $MerAlbum->insert( $data, $this->param['albumTag'] );\n            if ( $ret['code'] != 0 ) {\n                $this->setError( $ret['msg'] );\n\n                return FALSE;\n            }\n        }\n\n        return TRUE;\n    }\n\n\n}\n"
  },
  {
    "path": "src/Service/WidgetService.php",
    "content": "<?php\n/**\n *\t组件服务管理\n *  @author MR.Z\n *\t@version v2.0 2018-06-22\n */\n\nnamespace Smart\\Service;\n\nclass WidgetService {\n\tpublic $builder = null;\n\n\tpublic $name = null;\n\tpublic $value = null;\n\n\tprivate $type = null;\n\n\t//设置widget属性值\n\tpublic function make($param = []) {\n\n\t\t$this->type = ucfirst($param['type']);\n\t\t$WidgetService = '\\Smart\\Service\\Widget\\\\' . $this->type . 'Widget';\n\t\t$this->builder = new $WidgetService;\n\t\t$this->builder->make($param);\n\t\treturn $this;\n\t}\n\n\tpublic function render() {\n\t\treturn $this->builder->render();\n\t}\n\n\tpublic function __toString() {\n\t\treturn $this->render()->render();\n\t}\n}"
  },
  {
    "path": "src/Service/widget/RadioWidget.php",
    "content": "<?php\nnamespace Smart\\Service\\Widget;\n\nclass RadioWidget {\n\tprivate $template = 'backend::widget.radio';\n\tprivate $defaultValue = '';\n\tprivate $title = '';\n\tprivate $data = '';\n\tpublic function render() {\n\t\t$data = [\n\t\t\t'value' => $this->defaultValue,\n\t\t\t'title' => $this->title,\n\t\t\t'data' => $this->data,\n\t\t\t'name' => $this->name,\n\t\t];\n\t\treturn view($this->template, $data);\n\t}\n\n\tpublic function make($param) {\n\t\t$this->template = $param['template'] ?? $this->template;\n\t\t$this->defaultValue = $param['value'];\n\t\t$this->title = $param['title'];\n\t\t$this->data = $param['data'];\n\t\t$this->name = $param['name'];\n\t\treturn $this;\n\t}\n\n}"
  },
  {
    "path": "src/Service/widget/TextWidget.php",
    "content": "<?php\nnamespace Smart\\Service\\Widget;\n\nclass TextWidget {\n\tprivate $template = 'backend::widget.text';\n\tpublic function render() {\n\t\treturn view($this->template);\n\t}\n\n}"
  },
  {
    "path": "src/SmartServiceProvider.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/28\n * Time: 13:25\n */\nnamespace Smart;\n\nuse Illuminate\\Support\\Facades\\Route;\nuse Illuminate\\Support\\ServiceProvider;\nuse Smart\\Models\\SysModule;\nuse Smart\\Extentions\\EloquentUserProvider;\nuse Illuminate\\Support\\Facades\\Auth;\nuse File;\nuse App;\n\nclass SmartServiceProvider extends ServiceProvider {\n\n\tprotected $commands = [\n\t\t\\Smart\\Console\\Commands\\InstallCommand::class,\n\t\t\\Smart\\Console\\Commands\\UninstallCommand::class,\n\t];\n\n\tprotected $routeMiddleware = [\n\t\t'auth.token' => \\Smart\\Middleware\\CheckToken::class,\n\t\t'auth.permission' => \\Smart\\Middleware\\Permission::class,\n\t\t'auth.cors' =>\\Smart\\Middleware\\Cors::class,\n\t\t'auth.resetPassword' => \\Smart\\Middleware\\ResetPassword::class,\n\t];\n\n\tpublic function boot() {\n\n\t\t$this->loadViewsFrom(__DIR__ . '/../resources/views', 'backend');\n\n\t\tif (config('backend.https')) {\n            \\URL::forceScheme('https');\n            $this->app['request']->server->set('HTTPS', true);\n        }\n\n\t\t$this->loadRoutesFrom(__DIR__ . '/../router/routes.php');\n\n\t\t$modules = explode(',', config('backend.module_ext'));\n\t\t//列出状态正常的模块  不可直接调用数据库\n\n\t\tforeach ($modules as $module) {\n\t\t\t//加载模块路由\n\t\t\tif (file_exists(app_path() . '/' . ucfirst($module) . '/routes.php')) {\n\t\t\t\t$this->loadRoutesFrom(app_path() . '/' . ucfirst($module) . '/routes.php');\n\t\t\t}\n\n\t\t\t//加载模块视图\n\t\t\tif (file_exists(app_path() . '/' . ucfirst($module) . '/views')) {\n\n\t\t\t\t$this->loadViewsFrom(app_path() . '/' . ucfirst($module) . '/views', ucfirst($module));\n\t\t\t}\n\n\t\t\t//加载模块迁移文件\n\t\t\tif(file_exists(app_path().'/'.ucfirst($module).'/migrations')){\n\t\t\t\t$this->loadMigrationsFrom(app_path().'/'.ucfirst($module).'/migrations');\n\t\t\t}\n\n\t\t}\n\n\t\t$this->publishes([__DIR__ . '/../config/' => config_path()], 'backend');\n\n\t\t//service\n\t\t$this->publishes([__DIR__ . '/../resources/Service' => app_path('Service')], 'backend');\n\n\t\t//Models\n\t\t$this->publishes([__DIR__ . '/../resources/Models' => app_path('Models')], 'backend');\n\n\t\t//发布Api包\n\t\t$this->publishes([__DIR__ . '/../resources/Api' => app_path('Api')], 'backend');\n\n\t\tif (file_exists(app_path('Api') . '/routes.php')) {\n\t\t\t$this->loadRoutesFrom(app_path('Api') . '/routes.php');\n\t\t}\n\n\t\t$this->publishes([__DIR__ . '/../resources/assets/static/' => public_path('static')], 'backend');\n\n//\t\t$this->publishes([__DIR__ . '/../database/migrations/' => database_path('migrations')], 'backend-migrations');\n\t\t$this->loadMigrationsFrom(__DIR__ . '/../database/migrations');\n\n\t\t$this->publishes([__DIR__ . '/../resources/npm/' => public_path()], 'backend');\n\n\t\t//\t$this->registerRoute();\n\t}\n\n\tpublic function register() {\n\n\t\t$this->mergeConfigFrom(__DIR__ . '/../config/backend.php', 'backend');\n\n\t\t$this->registerRouteMiddleware();\n\n\t\t$this->registerModuleRouteMiddleware();\n\n\t\t$this->registerProvider();\n\n\t\t$this->registerModuleProvider();\n\n\t\t$this->commands($this->commands);\n\t}\n\n\t/**\n\t * Register the route middleware.\n\t *\n\t * @return void\n\t */\n\tprotected function registerRouteMiddleware() {\n\t\t// register route middleware.\n\t\tforeach ($this->routeMiddleware as $key => $middleware) {\n\t\t\tapp('router')->aliasMiddleware($key, $middleware);\n\t\t}\n\n\t}\n\n\tprotected function registerModuleRouteMiddleware(){\n\t\t$modules = explode(',', config('backend.module_ext'));\n\n\t\tforeach($modules as $module){\n\t\t\tif (file_exists(app_path() . '/' . ucfirst($module) . '/config.php')) {\n\t\t\t\t$module_lower = strtolower($module);\n\t\t\t\t$this->mergeConfigFrom(app_path() . '/' . ucfirst($module) . '/config.php',$module_lower);\n\t\t\t\t$middlewares = config($module_lower.'.middlewares');\n\t\t\t\tforeach($middlewares as $key => $middleware){\n\t\t\t\t\tapp('router')->aliasMiddleware($module_lower.'.'.$key, $middleware);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected function registerProvider(){\n\t\t//注册认证服务\n\t\tAuth::provider('authenEloquent', function ($app, $config) {\n            return new EloquentUserProvider($app->make('hash'), $config['model']);\n        });\n\n        //注册短信服务\n        $this->app->singleton('sms' , function($app){\n        \t\n        \treturn new \\Overtrue\\EasySms\\EasySms($app['config']['sms']['sms']);\n        });\n\t}\n\n\tprotected function registerModuleProvider(){\n\t\t$modules = explode(',', config('backend.module_ext'));\n\n\t\tforeach($modules as $module){\n\t\t\t$dir = app_path() . '/' . ucfirst($module) . '/Providers';\n\t\t\t$this->loadProviders($dir);\n\t\t\t\n\t\t}\n\t}\n\n\n\n\tprivate function loadProviders($directory)\n    {\n        //$mainServiceProviderNameStartWith = 'Main';\n\n        if (File::isDirectory($directory)) {\n\n            $files = File::allFiles($directory);\n\n            foreach ($files as $file) {\n            \t\n                if (File::isFile($file)) {\n                \t$path = File::dirname($file);\n\t            \t$startClass = substr($path,strrpos($path, 'app'));\n\t            \t\n\t            \t$name = File::name($file);\n\t            \t\n\t            \t$serviceProviderClass = str_replace('/','\\\\',ucfirst($startClass).'\\\\'.$name);\n                \t$this->loadProvider($serviceProviderClass);\n                }\n            }\n        }\n    }\n\n    /**\n     * @param $providerFullName\n     */\n    private function loadProvider($providerFullName)\n    {\n        App::register($providerFullName);\n    }\n\n\n\n}\n"
  },
  {
    "path": "src/Traits/api/Service.php",
    "content": "<?php\n\n\nnamespace Stmart\\Trai\\Api;\n\n\n\ndefine( 'REQUIRED', 'required' );\n\ntrait Service {\n\t\n\tpublic $userId = '';\n\tpublic $merId = '';\n\tpublic $error = '';\n\tpublic $errCode = 500;\n\t\n\t/**\n\t * 验证登录\n\t *\n\t * @param $token\n\t * @param $device\n\t *\n\t * @return mixed\n\t */\n\tpublic function validToken( $token, $device = '' ) {\n\t\t$this->userId = '';\n\t\t$this->error  = 500;\n\t\t\n\t\tif ( empty( $token ) ) {\n\t\t\t//参数错误\n\t\t\t$this->error = '请填写token';\n\t\t\t\n\t\t\treturn FALSE;\n\t\t} else {\n\t\t\t$MerUserDevice = MerUserDeviceService::instance();\n\t\t\t$deviceData    = $MerUserDevice->getByToken( $token, $device );\n\t\t\tif ( empty( $deviceData ) ) {\n\t\t\t\t//数据未找到\n\t\t\t\t$this->error   = '认证失败';\n\t\t\t\t$this->errCode = 403;\n\t\t\t\t\n\t\t\t\treturn FALSE;\n\t\t\t}\n\t\t\t\n\t\t\t$this->userId = $deviceData['user_id'];\n\t\t\t\n\t\t\treturn TRUE;\n\t\t}\n\t}\n\t\n\tpublic function validParam( $param, $rule = 'required' ) {\n\t\t$this->error   = '';\n\t\t$this->errCode = 500;\n\t\tswitch ( $rule ) {\n\t\t\tcase  'required' :\n\t\t\t\tif ( empty( trim( $param ) ) ) {\n\t\t\t\t\t$this->error = \"$param 不能为空\";\n\t\t\t\t\t\n\t\t\t\t\treturn FALSE;\n\t\t\t\t}\n\t\t}\n\t\t\n\t\treturn TRUE;\n\t}\n}"
  },
  {
    "path": "src/Traits/service/GridTable.php",
    "content": "<?php\nnamespace Smart\\Traits\\Service;\n\ntrait GridTable {\n  /**\n   * 根据id 查询\n   *\n   * @param $id\n   *\n   * @return mixed\n   */\n  public function getById( $id ) {\n    return $this->getModel()->find( $id );\n  }\n  \n  /**\n   * 添加数据\n   *\n   * @param $data\n   *\n   * @return array\n   */\n  public function insert( $data ) {\n    try {\n      if ( empty( $data ) ) {\n        throw new \\Exception( '数据不能为空' );\n      }\n      \n      $id = $this->getModel()->insertGetId( $data );\n      \n      return ajax_arr( '创建成功' , 0 , [ 'id' => $id ] );\n    } catch ( \\Exception $e ) {\n      return ajax_arr( $e->getMessage() , 500 );\n    }\n  }\n  \n  /**\n   * 根据ID 更新数据\n   *\n   * @param $id\n   * @param $data\n   *\n   * @return array\n   */\n  public function update( $id , $data ) {\n    try {\n      $rows = $this->getModel()->where( 'id' , $id )->update( $data );\n      if ( $rows == 0 ) {\n        return ajax_arr( \"未更新任何数据\" , 0 );\n      }\n      \n      return ajax_arr( \"更新成功\" , 0 );\n    } catch ( \\Exception $e ) {\n      return ajax_arr( $e->getMessage() , 500 );\n    }\n  }\n  \n  /**\n   * 根据ID 删除数据\n   *\n   * @param $ids //string | array\n   *\n   * @return array\n   */\n  public function destroy( $ids ) {\n    try {\n      $rows = $this->getModel()->destroy( $ids );\n      if ( $rows == 0 ) {\n        return ajax_arr( \"未删除任何数据\" , 0 );\n      }\n      \n      return ajax_arr( \"成功删除{$rows}行数据\" , 0 );\n    } catch ( \\Exception $e ) {\n      return ajax_arr( $e->getMessage() , 500 );\n    }\n  }\n  \n}"
  },
  {
    "path": "src/Traits/service/Instance.php",
    "content": "<?php\nnamespace Smart\\Traits\\Service;\nuse Illuminate\\Database\\Eloquent\\Model;\n\ntrait Instance{\n\n\t//类实例\n\t//protected static $instance;\n\n\tprivate  $model;\n\n    //得到当前服务\n\tpublic static function instance() {\n\n\t\t$class_name = get_class(); \n\t\tapp()->singleton($class_name, function ($app) use($class_name) {\n\t\t    $service =  new $class_name;\n\t\t    if(isset($service->model_class) && class_exists($service->model_class)){\n\t\t    \t$service->model = new $service->model_class;\n\t\t    }\n\t\t   \n\t\t   return $service;\n\t\t});\n\t\treturn  resolve($class_name);\n\n\t}\n    \n    protected  function getModel(){\n        return self::instance()->model;\n    }\n\n    protected function setModel(Model $model){\n    \tself::instance()->model = $model;\n    }\n\n    \n    \n}"
  },
  {
    "path": "src/Traits/service/Scope.php",
    "content": "<?php namespace Smart\\Traits\\Service;\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/18\n * Time: 18:06\n */\n\ntrait Scope{\n\n    public function scopeModule($query , $param = '' ){\n\n        if( $param !== '')\n            return $query->where('module',$param);\n\n    }\n\n\n    public function scopeStatus($query , $param = ''){\n        if($param !== '')\n            return $query->where('status',$param);\n    }\n\n    public function scopeKeyword($query , $param = ''){\n        if($param)\n            return $query->where('keyword' , 'like' , \"%{$param}%\");\n    }\n\n\n\n    public function scopeGetAll($query , $params = ['getAll'=>false]){\n        if(!$params['getAll'])\n            return $query->skip(($params['page']-1) * $params['pageSize'] )->take($params['pageSize'] );\n\n\n    }\n}\n"
  },
  {
    "path": "src/Traits/service/ScopeMer.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/9/21\n * Time: 09:43\n */\nnamespace  Smart\\Traits\\Service;\n\ntrait ScopeMer{\n\n    public function scopeMerId($query , $param = ''){\n        if($param)\n            return $query->where('mer_id' , $param);\n    }\n\n}"
  },
  {
    "path": "src/Traits/service/TreeTable.php",
    "content": "<?php\nnamespace Smart\\Traits\\Service;\n/**\n * TreeTable Trait for Service\n *\n * @author Zix <zsh2088@gmail.com>\n * @version 1.0 @ 2016-09-08\n */\n\n\n\ntrait TreeTable {\n\t\n\t//取等级\n\tpublic function getLevel( $pid ) {\n\t\tif ( empty( $pid ) ) {\n\t\t\treturn 1;\n\t\t}\n\t\t$data = $this->getById( $pid );\n\t\tif ( empty( $data ) ) {\n\t\t\treturn 1;\n\t\t}\n\t\t\n\t\treturn $data['level'] + 1;\n\t}\n\t\n\t/**\n\t * 根据id 查询\n\t *\n\t * @param $id\n\t *\n\t * @return mixed\n\t */\n\tpublic function getById( $id ) {\n\t\treturn $this->getModel()->find( $id );\n\t}\n\t\n\t/**\n\t * 根据pid 查询\n\t *\n\t * @param $pid\n\t *\n\t * @return mixed\n\t */\n\tpublic function getByPid( $pid ) {\n\t\treturn $this->getModel()->where( 'pid', $pid )->get()->toArray();\n\t}\n\t\n\t//转换树key\n    private function treeToArray( $arr, $key ) {\n        $ret = [];\n        foreach ( $arr as $val ) {\n            if ( isset( $val[$key] ) ) {\n                $val[$key]  = $this->treeToArray( $val[$key] , $key );\n\n            }\n            $ret[] = $val;\n        }\n\n        return $ret;\n    }\n\t\n\t/**\n\t *\n\t * 添加数据\n\t *\n\t * @param $data\n\t *\n\t * @return array\n\t */\n\tpublic function insert( $data ) {\n\t\ttry {\n\t\t\tif ( empty( $data ) ) {\n\t\t\t\tthrow new \\Exception( '数据不能为空' );\n\t\t\t}\n\n\t\t\t$data['level'] = $this->getLevel( $data['pid'] );\n\t\t\t$id            = $this->getModel()->insertGetId( $data );\n\n\t\t\treturn ajax_arr( '创建成功', 0, [ 'id' => $id ] );\n\t\t} catch ( \\Exception $e ) {\n\t\t\treturn ajax_arr( $e->getMessage(), 500 );\n\t\t}\n\t}\n\t\n\t/**\n\t * 根据ID 更新数据\n\t *\n\t * @param $id\n\t * @param $data\n\t *\n\t * @return array\n\t */\n\tpublic function update( $id, $data ) {\n\t\ttry {\n\t\t\tif ( $data['pid'] == $id ) {\n\t\t\t\tthrow new \\Exception( '不能选自己做上级' );\n\t\t\t}\n\n\t\t\t$data['level'] = $this->getLevel( $data['pid'] );\n\t\t\t$rows          = $this->getModel()->where( 'id', $id )->update( $data );\n\t\t\tif ( $rows == 0 ) {\n\t\t\t\treturn ajax_arr( \"未更新任何数据\", 0 );\n\t\t\t}\n\t\t\t\n\t\t\treturn ajax_arr( \"更新成功\", 0 );\n\t\t} catch ( \\Exception $e ) {\n\t\t\treturn ajax_arr( $e->getMessage(), 500 );\n\t\t}\n\t}\n\t\n\t/**\n\t * 根据ID 删除数据\n\t *\n\t * @param $ids //string | array\n\t *\n\t * @return array\n\t */\n\tpublic function destroy( $ids ) {\n\t\ttry {\n\t\t\t//查看是否有下级数据\n\t\t\t$childrenData = $this->getByPid( $ids );\n\t\t\tif ( ! empty( $childrenData ) ) {\n\t\t\t\tthrow new \\Exception( '还有下级数据,不能删除' );\n\t\t\t}\n\t\t\t\n\t\t\t//删除数据\n\t\t\t$rows = $this->getModel()->destroy( $ids );\n\t\t\tif ( $rows == 0 ) {\n\t\t\t\treturn ajax_arr( '未删除任何数据', 0 );\n\t\t\t}\n\t\t\t\n\t\t\treturn ajax_arr( \"成功删除{$rows}行数据\", 0 );\n\t\t} catch ( \\Exception $e ) {\n\t\t\treturn ajax_arr( $e->getMessage(), 500 );\n\t\t}\n\t}\n\t\n\t\n\tpublic function getFamilyId( $param ) {\n\t\t\n\t\t$default = [\n\t\t\t'field'       => [ '*' ],\n\t\t\t'pid'         => 0 ,\n\t\t\t'status'      => 1,\n\t\t\t'childrenKey' => 'children',\n\t\t\t'withSelf'    => TRUE,\n\t\t];\n\t\t\n\t\t$param = extend( $default, $param );\n\t\t\n\t\t$this->getModel()->field( $param['field'] );\n\t\tif ( $param['status'] !== '' ) {\n\t\t\t$this->getModel()->where( 'status', $param['status'] );\n\t\t}\n\t\t$this->getModel()->order( 'level ASC , sort ASC ' );\n\t\t$data = $this->getModel()->select();\n\t\t\n\t\t\n\t\t//echo $this->getModel()->getLastSql();\n\t\t$result = [];\n\t\t$index  = [];\n\t\t\n\t\tforeach ( $data as $row ) {\n\t\t\tif ( $row['pid'] == $param['pid'] ) {\n\t\t\t\t$result[ $row['id'] ] = $row;\n\t\t\t\t$index[ $row['id'] ]  = &$result[ $row['id'] ];\n\t\t\t} else {\n\t\t\t\t$index[ $row['pid'] ][ $param['childrenKey'] ][ $row['id'] ] = $row;\n\t\t\t\t\n\t\t\t\t$index[ $row['id'] ] = &$index[ $row['pid'] ][ $param['childrenKey'] ][ $row['id'] ];\n\t\t\t}\n\t\t}\n\t\t\n\t\t$idsArr = $this->_getFamilyId( $result, $param['childrenKey'] );\n\t\tif ( $param['withSelf'] ) {\n\t\t\t$idsArr[] = $param['pid'];\n\t\t}\n\t\t\n\t\treturn $idsArr;\n\t}\n\t\n\tfunction _getFamilyId( $result, $childrenKey = 'children' ) {\n\t\t$arr = [];\n\t\tforeach ( $result as $id => $item ) {\n\t\t\t$arr[] = $id;\n\t\t\tif ( isset( $item[ $childrenKey ] ) ) {\n\t\t\t\t$arr = array_merge( $arr, $this->_getFamilyId( $item[ $childrenKey ], $childrenKey ) );\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn $arr;\n\t}\n\t\n}"
  },
  {
    "path": "templates/generate/api/api.txt",
    "content": "<?php\nnamespace App\\Api\\Service\\{apiVersion}\\{directory};\n\n/**\n * {desc}\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , {date}\n */\n\nuse App\\Api\\Service\\v1\\ApiService;\n\nclass {name}Service extends ApiService {\n\n  use \\Smart\\Traits\\Service\\Instance;\n  //允许的请求方式\n\tpublic $allowRequestMethod = [\n\t  'get'  => 'GET - 取{desc}',\n\t  'post' => 'POST - 设置{desc}',\n\t  'put' => 'PUT - 设置{desc}',\n\t  'delete' => 'DELETE - 设置{desc}'\n\t];\n\n\t/**\n\t * 传参 如:\n\t * 'title' => ['标题' , '默认值' , '验证方式'] //验证方式可选\n\t * 'status' => ['状态' , 1 , [\"0\" => '禁用' , 1 => '启用'] ]\n\t */\n\tpublic $defaultParams = [\n\t  'get' => [\n\t    {params}\n\t  ],\n\t  'post' => [\n\t    {params}\n\t  ],\n\t  'put' => [\n\t    {params}\n\t  ],\n\t  'delete' => [\n\t    {params}\n\t  ]\n\t];\n\n\t/**\n\t * 返回结果示例 如:\n\t *\n\t * 'user_id'     => '用户ID',\n\t * 'icon' => ['头像' , 'formatIcon'] , //第二个值为格式化方法\n\t */\n\tpublic $defaultResponse = [\n     'get'  => [],\n     'post' => [],\n     'put' => [],\n     'delete' => []\n\t];\n\n\n  /**\n   * 接口响应方法\n   *\n   * @return array\n   */\n\tpublic function response() {\n    {authUser}\n\n\t\tif ( ! $this->validParams() ) {\n\t\t\treturn api_result( $this->error, 500 );\n\t\t}\n\n    //处理业务\n    switch ( request()->method() ) {\n      case 'GET' :\n        $data = $this->get();\n        $data = $this->formatData( $data );\n\n        return api_result( '查询成功' , 0 , [ 'rows' => $data ] );\n      case 'POST' :\n        return $this->post();\n      case 'PUT' :\n        return $this->put();\n      case 'DELETE' :\n        return $this->delete();\n      default :\n        return api_result( '未知请求类型' , 500 );\n    }\n\t}\n\n  /**\n   * get 的响应方法\n   *\n   * @return array|number\n   */\n  public function get() {\n    return [\n      ['id' => 1 , 'text' => '测试数据']\n    ];\n  }\n\n  /**\n   * post 的响应方法\n   *\n   * @return array\n   */\n  public function post() {\n    $data = [];\n    return api_result( 'post 成功', 0 , $data );\n  }\n\n\n  /**\n   * post 的响应方法\n   *\n   * @return array\n   */\n  public function put() {\n    $data = [];\n    return api_result( 'put 成功', 0 , $data );\n  }\n\n  /**\n   * post 的响应方法\n   *\n   * @return array\n   */\n  public function delete() {\n    $data = [];\n    return api_result( 'delete 成功', 0 , $data );\n  }\n}\n"
  },
  {
    "path": "templates/generate/api/auth_user.txt",
    "content": "//验证用户\nif ( ! $this->validToken() ) {\n  return api_result( $this->error, $this->errCode );\n}"
  },
  {
    "path": "templates/generate/api/params/api_token.txt",
    "content": "'api_token' => ['用户Token' , '' , PARAM_REQUIRED ] ,"
  },
  {
    "path": "templates/generate/api/params/goodsId.txt",
    "content": "'goodsId' => ['商品ID' , '' , PARAM_REQUIRED ] ,"
  },
  {
    "path": "templates/generate/api/params/merId.txt",
    "content": "'merId' => ['商户ID' , '' , PARAM_REQUIRED] ,"
  },
  {
    "path": "templates/generate/api/params/orderId.txt",
    "content": "'orderId' => ['订单ID' , '' , PARAM_REQUIRED] ,"
  },
  {
    "path": "templates/generate/api/params/page.txt",
    "content": "'page' => ['页码' , '1' , PARAM_POSITIVE] ,"
  },
  {
    "path": "templates/generate/api/params/pageSize.txt",
    "content": "'pageSize' => ['每页行数' , '6' , PARAM_POSITIVE] ,"
  },
  {
    "path": "templates/generate/api/params/phone.txt",
    "content": "'phone' => ['手机号' , '' , PARAM_REQUIRED] ,"
  },
  {
    "path": "templates/generate/api/params/status.txt",
    "content": "'status' => ['状态' , '' , [ \"0\" => \"禁用\" , \"1\" => \"启用\"] ] ,"
  },
  {
    "path": "templates/generate/system/component/editor/controller/editor_decode.txt",
    "content": "$data['{field}'] = htmlspecialchars_decode( $data['{field}'] );"
  },
  {
    "path": "templates/generate/system/component/editor/controller/editor_js.txt",
    "content": "$this->_addJsLib( 'node_modules/kindeditor/kindeditor-all-min.js' );\n$this->_addJsLib( 'node_modules/kindeditor/lang/zh-CN.js' );"
  },
  {
    "path": "templates/generate/system/component/editor/controller/editor_uri.txt",
    "content": "'upload_ke'   => full_uri( '{moduleLower}/{func}/upload' , ['is_ke' => 1 ] ),"
  },
  {
    "path": "templates/generate/system/component/editor/js/editor_clear.txt",
    "content": "self.config['{field}'].html('');"
  },
  {
    "path": "templates/generate/system/component/editor/js/editor_init.txt",
    "content": "this.config['{field}'] = KindEditor.create('textarea[name=\"{field}\"]' , KE_OPTIONS );"
  },
  {
    "path": "templates/generate/system/component/editor/js/editor_reload.txt",
    "content": "self.config['{field}'].html( row.{field} );"
  },
  {
    "path": "templates/generate/system/component/editor/js/editor_upload_uri.txt",
    "content": "KE_OPTIONS.uploadJson = Param.uri.uploadKE ;"
  },
  {
    "path": "templates/generate/system/component/field/view/editor.txt",
    "content": "<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">{comment}</label>\n\t<div class=\"col-md-7\">\n    <textarea name=\"{field}\" placeholder=\"{comment}\" class=\"form-control editor\"\n           style=\"width: 100%\"\n           data-valid=\"required\" data-tips=\"请输入正确的{comment}\" ></textarea>\n\t</div>\n</div><!-- end item -->"
  },
  {
    "path": "templates/generate/system/component/field/view/input.txt",
    "content": "<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">{comment}</label>\n\t<div class=\"col-md-7\">\n    <input type=\"text\" name=\"{field}\" placeholder=\"{comment}\" class=\"form-control\"\n           data-valid=\"required\" data-tips=\"请输入正确的{comment}\" >\n\t</div>\n</div><!-- end item -->"
  },
  {
    "path": "templates/generate/system/component/field/view/radio.txt",
    "content": "<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">{comment}</label>\n\t<div class=\"col-md-7\">\n\t\t<?= form_radios('{field}' , $param['{field}'] ) ?>\n\t</div>\n</div><!-- end item -->"
  },
  {
    "path": "templates/generate/system/component/field/view/select.txt",
    "content": "<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">{comment}</label>\n\t<div class=\"col-md-7\">\n\t\t<select name=\"{field}\" class=\"form-control\">\n\t\t\t<?= form_options( $param['{field}'] ) ?>\n\t\t</select>\n\t</div>\n</div><!-- end item -->"
  },
  {
    "path": "templates/generate/system/component/field/view/select2.txt",
    "content": "<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">alias(用户ID)</label>\n\t<div class=\"col-md-7\">\n\t\t<select name=\"{field}\"  class=\"form-control input-xlarge select2me\"\n\t\t        data-placeholder=\"{comment}\"></select>\n\t</div>\n</div><!-- end item -->"
  },
  {
    "path": "templates/generate/system/component/field/view/upload.txt",
    "content": "<!-- start item -->\n<div class=\"form-group\">\n\t<label class=\"col-md-3 control-label\">{comment}</label>\n\t<div class=\"col-md-7\">\n\t\t<div id=\"{field}Preview\" class=\"fit-img-preview\"></div>\n\t\t<button id=\"{field}UploadBtn\" ></button>\n\t\t<input type=\"text\" name=\"{field}\" class=\"hide\" >\n\t</div>\n</div><!-- end item -->"
  },
  {
    "path": "templates/generate/system/component/select2/controller/select2_css.txt",
    "content": "$this->_addCssLib( 'node_modules/select2/dist/css/select2.min.css' );"
  },
  {
    "path": "templates/generate/system/component/select2/controller/select2_js.txt",
    "content": "$this->_addJsLib( 'node_modules/select2/dist/js/select2.min.js' );\n$this->_addJsLib( 'node_modules/select2/dist/js/i18n/zh-CN.js' );"
  },
  {
    "path": "templates/generate/system/component/select2/controller/select2_uri.txt",
    "content": "'searchUser'   => full_uri( '{module}/MerUser/search' ), //自行修改"
  },
  {
    "path": "templates/generate/system/component/select2/js/select2_clear.txt",
    "content": "$('.select2me').val(null).trigger('change');"
  },
  {
    "path": "templates/generate/system/component/select2/js/select2_init.txt",
    "content": "$('.select2me').select2({\n  allowClear: true ,\n  ajax: {\n    url: Param.uri.searchUser , //修改为对应的uri\n    dataType: 'json',\n    delay: 250,\n    data: function (params) {\n      return {\n        keyword: params.term, // 搜索的关键字\n        page: params.page ,\n        pageSize : 10\n      };\n    },\n    processResults: function (data, params) {\n      params.page = params.page || 1;\n      //重组数据为 [{id:'' , text:''}] 格式\n      data.rows.map(function (row) {\n        row['text'] = row.nickname + ' ('+ row.phone +')';\n      });\n\n      return {\n        results: data.rows,\n        pagination: {\n          //翻页的处理\n          more: (params.page * params.pageSize) < data.total\n        }\n      };\n    },\n    cache: true\n  },\n  minimumInputLength: 2 //最少输入字数\n});"
  },
  {
    "path": "templates/generate/system/component/select2/js/select2_set.txt",
    "content": "//select2 reload数据 请自行修改\nvar userData = [{\n  id : row.id ,\n  text : row.nickname + '('+ row.phone +')'\n}];\nvar userOptions = form_options_rows( userData , { field : 'text'} ) ;\n$('.select2me').html(userOptions).val(row.user_id).trigger('change');"
  },
  {
    "path": "templates/generate/system/component/table_type/controller/grid_js.txt",
    "content": "$this->_addJsLib( 'static/plugins/dmg-ui/TableGrid.js' );"
  },
  {
    "path": "templates/generate/system/component/table_type/controller/grid_read.txt",
    "content": "/**\n * 读取\n * @return response->Json\n */\npublic function read(Request $request) {\n  $config = [\n    'status'   => $request->input( 'status', '' ),\n    'keyword'  => $request->input( 'keyword', '' ),\n    'page'     => $request->input( 'page', 1 ),\n    'pageSize' => $request->input( 'pageSize', 10 ),\n    'sort'     => $request->input( 'sort', 'id' ),\n    'order'    => $request->input( 'order', 'DESC' ),\n  ];\n\n  $data['rows']    = $this->service->getByCond( $config );\n  $config['count'] = TRUE;\n  $data['total']   = $this->service->getByCond( $config );\n\n  return json(ajax_arr( '查询成功', 0, $data ) );\n}"
  },
  {
    "path": "templates/generate/system/component/table_type/controller/tree_grid_js.txt",
    "content": "$this->_addJsLib( 'static/plugins/dmg-ui/TreeGrid.js' );"
  },
  {
    "path": "templates/generate/system/component/table_type/controller/tree_grid_read.txt",
    "content": "/**\n * 读取\n * @return response->Json\n */\npublic function read(Request $request) {\n  $config = [\n    'status'    => $request->input( 'status', '' ),\n    'keyword'   => $request->input( 'keyword', '' ),\n    'sort'      => $request->input( 'sort', 'id' ),\n    'order'     => $request->input( 'order', 'DESC' ),\n  ];\n\n  $data['rows']    = $this->service->getByCond( $config );\n\n  return json( ajax_arr( '查询成功', 0, $data ) );\n}"
  },
  {
    "path": "templates/generate/system/component/table_type/js/grid_id.txt",
    "content": "dataGrid"
  },
  {
    "path": "templates/generate/system/component/table_type/js/grid_init.txt",
    "content": "\t//初始化grid\n\tinitGrid : function () {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query , '' , uri);\n\n\t\t$('#dataGrid').TableGrid({\n\t\t\turi : Param.uri.read ,\n\t\t\tselectAll : true ,\n\t\t\tparam : Param.query ,\n\t\t\trowStyle : function (row) {\n\t\t\t\tif ( row.status == 0 ) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tloadSuccess : function ( rows , settings ) {\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif ( oldUri == uri) {\n\t\t\t\t\treturn false ;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params , '' , oldUri);\n\t\t\t\thistory.replaceState(settings.param , '' , uri);\n\t\t\t}\n\t\t});\n\t}"
  },
  {
    "path": "templates/generate/system/component/table_type/js/grid_plugin.txt",
    "content": "TableGrid"
  },
  {
    "path": "templates/generate/system/component/table_type/js/tree_grid_id.txt",
    "content": "treeGrid"
  },
  {
    "path": "templates/generate/system/component/table_type/js/tree_grid_init.txt",
    "content": "  //初始化tree grid\n\tinitGrid : function () {\n\t\tvar self = this;\n\t\tvar uri = Param.uri.this + '?' + $.param(Param.query);\n\t\thistory.replaceState(Param.query , '' , uri);\n\n\t\t$('#treeGrid').TreeGrid({\n\t\t\turi : Param.uri.read ,\n\t\t\tfield : 'text', //显示箭头的字段\n\t\t\tparam : Param.query ,  //查询参数\n\t\t\trowStyle : function (row) {\n\t\t\t\tif ( row.status == 0 ) {\n\t\t\t\t\treturn 'warning';\n\t\t\t\t}\n\t\t\t} ,\n\t\t\tloadSuccess : function ( rows , settings ) {\n\t\t\t\tvar options = '<option value=\"0\" selected>根目录</option>';\n\t\t\t\toptions += form_options_rows( rows , settings );\n\t\t\t\t$('select[name=\"pid\"]').html(options);\n\n\t\t\t\tvar oldUri = window.location.href;\n\t\t\t\tvar uri = Param.uri.this + '?' + $.param(settings.param);\n\t\t\t\tif ( oldUri == uri) {\n\t\t\t\t\treturn false ;\n\t\t\t\t}\n\n\t\t\t\tvar params = $.getUrlParams(window.location.href);\n\t\t\t\thistory.pushState(params , '' , oldUri);\n\t\t\t\thistory.replaceState(settings.param , '' , uri);\n\t\t\t}\n\t\t});\n\t}\n\n\n\n\n"
  },
  {
    "path": "templates/generate/system/component/table_type/js/tree_grid_plugin.txt",
    "content": "TreeGrid"
  },
  {
    "path": "templates/generate/system/component/table_type/service/grid.txt",
    "content": "/**\n * 根据条件查询\n *\n * @param $param\n *\n * @return array|number\n */\npublic function getByCond( $param ) {\n  $default = [\n    'field'    => [ '*'],\n    'keyword'  => '',\n    'status'   => '',\n    'page'     => 1,\n    'pageSize' => 10,\n    'sort'     => 'id',\n    'order'    => 'DESC',\n    'count'    => FALSE,\n    'getAll'   => FALSE\n  ];\n\n  $param = extend( $default, $param );\n\n  $model = $this->getModel()->keyword($param['keyword'])->status($param['status']);\n\n  if ( $param['count'] ) {\n    return $model->count();\n  }\n  if($param['getAll'] === FALSE){\n    $model = $model->get()->forPage($param['page'] , $param['pageSize'])->values();\n  }else{\n    $model = $model->get();\n  }\n  $data = $model->toArray();\n\n\n  return $data ? $data : [ ];\n}"
  },
  {
    "path": "templates/generate/system/component/table_type/service/grid_trait.txt",
    "content": "\t//引入 GridTable trait\n\tuse \\Smart\\Traits\\Service\\GridTable;"
  },
  {
    "path": "templates/generate/system/component/table_type/service/tree_grid.txt",
    "content": "//根据条件查询\npublic function getByCond( $param ) {\n  $default = [\n    'field'  => ['*' ],\n    'pid'    => 0,\n    'status' => '',\n    'key'    => 'children'\n  ];\n  $param  = extend( $default , $param );\n\n   $data = $this->getModel()->status($param['status'])->orderBy('level' , 'ASC')->orderBy('sort' , 'ASC')->get($param['field'])->toArray();\n\n  $result = [ ];\n  $index  = [ ];\n\n  foreach ( $data as $row ) {\n    if ( $row['pid'] == $param['pid'] ) {\n      $result[ $row['id'] ] = $row;\n      $index[ $row['id'] ]  = &$result[ $row['id'] ];\n    } else {\n      $index[ $row['pid'] ][ $param['key'] ][ $row['id'] ] = $row;\n      $index[ $row['id'] ] = &$index[ $row['pid'] ][ $param['key'] ][ $row['id'] ];\n    }\n  }\n\n  return $this->treeToArray( $result, $param['key'] );\n}\n"
  },
  {
    "path": "templates/generate/system/component/table_type/service/tree_grid_trait.txt",
    "content": "\t//引入 TreeTable trait\n\tuse \\Smart\\Traits\\Service\\TreeTable;"
  },
  {
    "path": "templates/generate/system/component/table_type/view/grid.txt",
    "content": "<div class=\"table-scrollable\">\n  <table id=\"dataGrid\" class=\"table table-hover\">\n    <tr>\n      {tableTh}\n      <th width=\"60\" data-formatter=\"optEdit\"></th>\n      <th width=\"60\" data-formatter=\"optDelete\"></th>\n      <th>&nbsp;</th>\n    </tr>\n  </table>\n</div>"
  },
  {
    "path": "templates/generate/system/component/table_type/view/tree_grid.txt",
    "content": "<div class=\"table-scrollable\">\n  <table id=\"treeGrid\" class=\"table table-hover\">\n    <tr>\n      {tableTh}\n      <th width=\"60\" data-formatter=\"optEdit\"></th>\n      <th width=\"60\" data-formatter=\"optDelete\"></th>\n      <th>&nbsp;</th>\n    </tr>\n  </table>\n</div>"
  },
  {
    "path": "templates/generate/system/component/traits/instance_trait.txt",
    "content": "\t//引入 Instance\n\tuse \\Smart\\Traits\\Service\\Instance;"
  },
  {
    "path": "templates/generate/system/component/upload/controller/upload_js.txt",
    "content": "$this->_addCssLib('node_modules/jcrop-0.9.12/css/jquery.Jcrop.min.css');\n$this->_addJsLib('node_modules/jcrop-0.9.12/js/jquery.Jcrop.min.js');\n$this->_addJsLib( 'static/plugins/dmg-ui/Uploader.js' );"
  },
  {
    "path": "templates/generate/system/component/upload/controller/upload_param.txt",
    "content": "//上传参数\n$this->_addParam('uploadParam' , [\n  'width'       => 300 ,\n  'height'      => 300 ,\n  'saveAsAlbum' => TRUE,\n  'albumTag'    => '默认相册',\n]);\n\n//相册参数\n$this->_addParam( 'albumParam', [\n  'defaultTag' => '默认相册',\n  'pageSize'   => 12,\n] );"
  },
  {
    "path": "templates/generate/system/component/upload/controller/upload_uri.txt",
    "content": "'upload'       => full_uri( '{moduleLower}/{funcLower}/upload' ),\n'albumCatalog' => full_uri( '{moduleLower}/{funcLower}/read_album_catalog' ),\n'album'        => full_uri( '{moduleLower}/{funcLower}/read_album' ),"
  },
  {
    "path": "templates/generate/system/component/upload/js/upload_button.txt",
    "content": "//上传按钮\n$('#{field}UploadBtn').Uploader({\n  uri : Param.uri.upload , //上传文件\n  param : Param.uploadParam ,\n  album : true ,\n  albumUri : Param.uri.album ,\n  albumCatalogUri : Param.uri.albumCatalog ,\n  albumParam : Param.albumParam ,\n  onSuccess : function ( ret ) {\n    tips.success(ret.msg);\n    if ( ret.code == 0 ) {\n      setImgPreview.set('{field}' , ret.data.savePath);\n    }\n  },\n  onChooseAlbum : function( uri ){\n    setImgPreview.set('{field}' , uri );\n  }\n});"
  },
  {
    "path": "templates/generate/system/component/upload/js/upload_preview_clear.txt",
    "content": "setImgPreview.clear('{field}');"
  },
  {
    "path": "templates/generate/system/component/upload/js/upload_preview_set.txt",
    "content": "setImgPreview.set('{field}' , row.{field});"
  },
  {
    "path": "templates/generate/system/component/view_type/js/modal.txt",
    "content": "//显示 modal\nsetPortletShow : function ( type ) {\n  var $addEditModal = $('#addEditModal') ;\n\n  $addEditModal.modal('show');\n  if ( type == 'add' ) {\n    $addEditModal.find('.caption-subject').html('新增 ' + Param.pageTitle );\n  } else if ( type == 'edit' ) {\n    $addEditModal.find('.caption-subject').html('编辑 ' + Param.pageTitle );\n  }\n},\n\n//关闭 modal\nsetPortletHide : function () {\n  $('#addEditModal').modal('hide') ;\n},"
  },
  {
    "path": "templates/generate/system/component/view_type/js/portlet.txt",
    "content": "//显示 portlet\nsetPortletShow : function ( type ) {\n  var $tablePortlet = $('#tablePortlet') ;\n  var $addEditPortlet = $('#addEditPortlet');\n\n  $tablePortlet.slideUp('fast');\n  if ( type == 'add' ) {\n    if ( !$addEditPortlet.hasClass('blue') ) {\n      $addEditPortlet.removeClass('green-meadow').addClass('blue');\n    }\n\n    $addEditPortlet.find('.caption-subject').html('新增 ' + Param.pageTitle );\n  } else if ( type == 'edit' ) {\n    if ( !$addEditPortlet.hasClass('green-meadow') ) {\n      $addEditPortlet.removeClass('blue').addClass('green-meadow');\n    }\n    $addEditPortlet.find('.caption-subject').html('编辑 ' + Param.pageTitle );\n  }\n\n  //$('#data-table-portlet').slideUp('fast');\n  $addEditPortlet.show();\n},\n\n//关闭 portlet\nsetPortletHide : function () {\n  $('#tablePortlet').slideDown('fast') ;\n  $('#addEditPortlet').slideUp('fast');\n},"
  },
  {
    "path": "templates/generate/system/component/view_type/view/modal.txt",
    "content": "<!-- START ADD EDIT MODAL -->\n<div class=\"modal fade\" id=\"addEditModal\">\n\t<div class=\"modal-dialog\">\n\t\t<div class=\"modal-content\">\n\t\t\t<div class=\"modal-header\">\n\t\t\t\t<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n\t\t\t\t  <span aria-hidden=\"true\">&times;</span>\n\t\t\t\t</button>\n\t\t\t\t<h4 class=\"modal-title caption-subject\"></h4>\n\t\t\t</div>\n\t\t\t<div class=\"modal-body\">\n\t\t\t\t<!-- start add edit form  -->\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-md-12\">\n\t\t\t\t\t\t<!-- start form -->\n\t\t\t\t\t\t<form id=\"addEditForm\" class=\"form-horizontal\">\n\t\t\t\t\t\t\t<div class=\"form-body\">\n\t\t\t\t\t\t\t\t{formItems}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</form><!-- end form -->\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- end add edit form-->\n\t\t\t</div>\n\t\t\t<div class=\"modal-footer\">\n\t\t\t\t<button type=\"button\" class=\"btn default\" data-dismiss=\"modal\"><i class=\"fa fa-times\"></i> 关闭</button>\n\t\t\t\t<button type=\"button\" class=\"btn red\" id=\"submitFormBtn\"><i class=\"fa fa-save\"></i> 保存</button>\n\t\t\t</div>\n\t\t</div><!-- /.modal-content -->\n\t</div><!-- /.modal-dialog -->\n</div><!-- /.END ADD EDIT MODAL -->"
  },
  {
    "path": "templates/generate/system/component/view_type/view/portlet.txt",
    "content": "<!-- BEGIN ADD EDIT PORTLET -->\n<div class=\"portlet box green-meadow\" id=\"addEditPortlet\" style=\"display: none;\">\n  <div class=\"portlet-title\">\n    <div class=\"caption caption-md\">\n      <i class=\"icon-settings\"></i>\n      <span class=\"caption-subject uppercase\"></span>\n    </div>\n  </div>\n  <div class=\"portlet-body\">\n    <!-- start add edit form  -->\n    <div class=\"row\">\n      <div class=\"col-md-12\">\n        <!-- start form -->\n        <form id=\"addEditForm\" class=\"form-horizontal\">\n        {!! csrf_field() !!}\n          <div class=\"form-body\">\n            {formItems}\n          </div>\n          <div class=\"form-actions\" style=\"margin-bottom: 60px;\">\n            <hr>\n            <div class=\"row\">\n              <div class=\"col-md-offset-3 col-md-7\">\n                <button class=\"btn default btn-lg\" id=\"closePortletBtn\" type=\"button\" ><i class=\"fa fa-arrow-left\"></i> 返回</button>\n                <button class=\"btn red btn-lg\" id=\"submitFormBtn\" type=\"button\"><i class=\"fa fa-check\"></i> 提交</button>\n              </div>\n            </div>\n          </div>\n        </form><!-- END ADD EDIT FORM -->\n      </div>\n    </div>\n\t</div><!-- END ADD EDIT PORTLET BODY -->\n</div><!-- END ADD EDIT PORTLET  -->"
  },
  {
    "path": "templates/generate/system/controller.txt",
    "content": "<?php namespace App\\{module}\\Controllers;\n/**\n * {funcName} Controller\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , {date}\n */\n\nuse Facades\\Smart\\Service\\ServiceManager;\nuse Illuminate\\Http\\Request;\nuse App\\{module}\\Service\\{func}Service;\nuse App\\{module}\\Controllers\\{module};\n\nclass {func} extends {module} {\n\n\n\n\t//页面入口\n\tpublic function index(Request $request) {\n\t\t$this->_init( '{funcName}' );\n\n\t\t//uri\n\t\t$this->_addParam( 'uri', [\n\t\t\t{uploadUri}\n\t\t\t{editorUri}\n\t\t\t{select2Uri}\n\t\t] );\n\n\t\t//查询参数\n\t\t$this->_addParam( 'query', [\n\t\t\t'keyword'  => $request->input( 'keyword', '' ),\n\t\t\t'status'   => $request->input( 'status', '' ),\n\t\t\t'page'     => $request->input( 'page', 1 ),\n\t\t\t'pageSize' => $request->input( 'pageSize', 10 ),\n            'sort'     => $request->input( 'sort', 'id' ),\n            'order'    => $request->input( 'order', 'DESC' ),\n\t\t] );\n\n    \t{uploadParam}\n\n\t\t//其他参数\n\t\t$this->_addParam( [\n\t\t\t'defaultRow' => $this->service->getDefaultRow() ,\n\t\t\t'status' => $this->service->status ,\n\t\t] );\n\n\t\t//需要引入的 css 和 js\n\t\t{select2Css}\n\t\t{select2Js}\n\t\t{uploadJs}\n\t\t{editorJs}\n\n\t\t{gridJs}\n    {treeGridJs}\n\n\t\treturn $this->_displayWithLayout('{module}::{funcNameLower}.index');\n\t}\n\n\t{gridRead}\n\t{treeGridRead}\n\n}"
  },
  {
    "path": "templates/generate/system/js.txt",
    "content": "/**\n * {funcName} JS\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , {date}\n */\n\nvar  {funcName}  = {\n    token : $('input[name=_token]').val(),\n    config : {} ,\n\tinit : function () {\n\t\t//重新设置菜单\n\t\tif ( !empty( Param.uri.menu ) ) {\n\t\t\tLayout.setSidebarMenuActiveLink('set' , 'a[data-uri=\"'+ Param.uri.menu +'\"]');\n\t\t}\n\n    //初始化ajax 提示框\n    loading.initAjax();\n\n    //初始化页面按钮\n\t\tthis.initBtn();\n\n\t\t//初始化查询form\n\t\tthis.initSearchForm();\n\n\t\t//初始化数据表\n\t\tthis.initGrid();\n\n\t\t{editorUploadUri}\n\t\t{editorInit}\n\t} ,\n\n\t//初始化查询form\n\tinitSearchForm : function () {\n\t\tvar $searchForm = $('#searchForm');\n\t\t$searchForm.reloadForm(Param.query);\n\n\t\t//查询按钮\n\t\t$('#searchBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar ${gridId}{treeGridId} = $('#{gridId}{treeGridId}');\n\t\t\tvar param = ${gridId}{treeGridId}.{gridPlugin}{treeGridPlugin}('getParam');\n\n\t\t\tparam = $.extend({} , param , $('#searchForm').serializeObject()  );\n\t\t\tparam.page = 1;\n\n\t\t\t${gridId}{treeGridId}.{gridPlugin}{treeGridPlugin}('setParam' , param);\n\t\t\t${gridId}{treeGridId}.{gridPlugin}{treeGridPlugin}('reload');\n\t\t});\n\t} ,\n\n  {portlet}\n  {modal}\n\n\t//初始化各种按钮\n\tinitBtn : function () {\n\t\tvar self = this;\n\n\t\t//打开添加框\n\t\t$('#addNewBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('add');\n\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm( Param.defaultRow );\n\t\t\t{uploadPreviewClear}\n      {editorClear}\n      {select2Clear}\n\n\t\t\t$form.attr('action' , Param.uri.insert );\n\t\t});\n\n\t\t//编辑按钮\n\t\t$(document).on('click' , '.editBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletShow('edit');\n\n\t\t\tvar id = $(this).data('id');\n\t\t\tvar row = $('#{gridId}{treeGridId}').{gridPlugin}{treeGridPlugin}('getRow' , id);\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\t$form.reloadForm( row );\n\t\t\t{uploadPreviewSet}\n\t\t\t{editorReload}\n      {select2Set}\n\n\t\t\t$form.attr('action' , Param.uri.update + '/' +row.id );\n\t\t});\n\n\t\t//删除一行\n\t\t$(document).on('click' , '.destroyBtn' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar id = $(this).data('id');\n\t\t\tself.delData( id );\n\t\t});\n\n\t\t$('#destroySelectBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar ids = $('.checker:checked').serializeJSON().selectChecker;\n\t\t\tif ( empty( ids ) ) {\n\t\t\t\ttips.error('请选择要删除的记录');\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tself.delData( ids );\n\t\t});\n\n\t\t//提交添加编辑窗\n\t\t$('#submitFormBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar $form = $('#addEditForm');\n\n\t\t\tif( $form.validForm() ) {\n\t\t\t\tvar data = $form.serializeObject();\n\n\t\t\t\t$.post( $form.attr('action') , data )\n\t\t\t\t .fail( function(res){\n            tips.error( res.responseText );\n\t\t\t\t })\n\t\t\t\t .done( function( res ){\n\t\t\t\t    if ( res.code == 1001 ) {\n              //需要登录\n              tips.error('请先登录');\n            } else if( res.code != 0 ){\n              tips.error( res.msg );\n            } else {\n              tips.success( res.msg );\n              $('#{gridId}{treeGridId}').{gridPlugin}{treeGridPlugin}('reload');\n              self.setPortletHide();\n            }\n\t\t\t\t });\n\t\t\t}\n\t\t});\n\n\t\t//关闭添加编辑窗\n\t\t$('#closePortletBtn').on('click' , function (e) {\n\t\t\te.preventDefault();\n\t\t\tself.setPortletHide();\n\t\t});\n\n    {uploadButton}\n\n    {select2Init}\n\t} ,\n\n\tdelData : function ( ids ) {\n\t\tvar self = this ;\n\t\tvar data = {\n\t\t\tids : ids,\n\t\t\t_token : this.token\n\t\t};\n\n\t\tsure.init('是否删除?' , function () {\n\n\t\t  $.post( Param.uri.destroy , data )\n\t\t   .fail( function(res){\n         tips.error( res.responseText );\n       })\n\t\t   .done(function (res) {\n          if ( res.code == 1001 ) {\n            //需要登录\n            tips.error('请先登录');\n          } else if( res.code != 0 ){\n            tips.error( res.msg );\n          } else {\n            tips.success( res.msg );\n            $('#{gridId}{treeGridId}').{gridPlugin}{treeGridPlugin}('reload');\n          }\n        });\n\t\t});\n\t},\n\n\t{gridInit}\n\t{treeGridInit}\n};\n\n//pop state 事件\nwindow.onpopstate = function (event) {\n\tif ( event && event.state ) {\n\t\t$('#searchForm').reloadForm( event.state );\n\t\tvar ${gridId}{treeGridId} = $('#{gridId}{treeGridId}');\n\t\t${gridId}{treeGridId}.{gridPlugin}{treeGridPlugin}('setParam' , event.state);\n\t\t${gridId}{treeGridId}.{gridPlugin}{treeGridPlugin}('reload');\n\t}\n};"
  },
  {
    "path": "templates/generate/system/model.txt",
    "content": "<?php namespace App\\{module}\\Models;\n/**\n * {funcName} Model\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 , {date}\n */\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass {func} extends Model {\n    public $table =  '{tableName}';\n\n    public $primaryKey = 'id';\n\n    public $timestamps = FALSE;\n\n    use \\Smart\\Traits\\Service\\Scope;\n}\n"
  },
  {
    "path": "templates/generate/system/service.txt",
    "content": "<?php namespace App\\{module}\\Service;\n/**\n * {funcName} Service\n *\n * @author MR.Z <zsh2088@gmail.com>\n * @version 2.0 {date}\n */\n\nuse App\\{module}\\Models\\{func};\nuse Smart\\Service\\BaseService; \n\nclass {func}Service extends BaseService {\n\n  {gridTrait}\n  {treeGridTrait}\n  {instanceTrait}\n\n  protected $model_class = {func}::class;\n  //状态\n\tpublic $status = [\n\t\t0 => '禁用',\n\t\t1 => '启用',\n\t];\n\n  \n\n  //取默认值\n\tfunction getDefaultRow() {\n\t\treturn [\n\t\t\t{fieldDefault}\n\t\t];\n\t}\n\n\n\n  {grid}\n  {treeGrid}\n}"
  },
  {
    "path": "templates/generate/system/view.txt",
    "content": "@extends('{module}::public.layout')\n@section('content')\n<!-- BEGIN CONTENT BODY -->\n{!! csrf_field() !!}\n<div class=\"page-content\">\n\t<!-- BEGIN PAGE BAR -->\n\t<div class=\"page-bar\">\n\t\t<ul class=\"page-breadcrumb\">\n\t\t\t<li> <a href=\"<?= $param['uri']['module'] ?>\">首页</a> <i class=\"fa fa-circle\"></i> </li>\n\t\t\t<li> <span><?= $param['pageTitle'] ?></span> </li>\n\t\t</ul>\n\t</div>\n\t<!-- END PAGE BAR -->\n\n\t<div class=\"row\" style=\"margin-top: 16px\">\n\t\t<!-- Main Portlet Start -->\n\t\t<div class=\"portlet light bordered\" id=\"tablePortlet\">\n\t\t\t<div class=\"portlet-title\">\n\t\t\t\t<div class=\"caption\">\n\t\t\t\t\t<i class=\"icon-settings\"></i>\n\t\t\t\t\t<span class=\"caption-subject uppercase\"><?= $param['pageTitle'] ?></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t<a href=\"javascript:;\" class=\"btn btn-circle blue\" id=\"addNewBtn\">\n\t\t\t\t\t  <i class=\"fa fa-plus\"></i> 新增\n\t\t\t\t\t</a>\n\t\t\t\t\t<a href=\"javascript:;\" class=\"btn btn-circle red\" id=\"destroySelectBtn\">\n\t\t\t\t\t\t<i class=\"fa fa-trash\"></i> 删除\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"portlet-body\">\n\t\t\t\t<!-- Start Search Form -->\n\t\t\t\t<form class=\"form-inline\" id=\"searchForm\">\n\t\t\t\t\t<!-- 查询关键字 start -->\n\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t<label>关键字: </label>\n\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" name=\"keyword\" placeholder=\"查询关键字\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<!-- 查询关键字 end -->\n\t\t\t\t\t<!-- 查询状态 start -->\n\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t<label>状态: </label>\n\t\t\t\t\t\t<select class=\"form-control\" name=\"status\">\n\t\t\t\t\t\t\t<option selected=\"\" value=\"\">不限</option>\n\t\t\t\t\t\t\t<?= form_options($param['status']) ?>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<!-- 查询状态 end -->\n\t\t\t\t\t<button type=\"submit\" class=\"btn default\" id=\"searchBtn\"><i class=\"fa fa-search\"></i> 查询</button>\n\t\t\t\t</form> <!-- End Search Form -->\n\n        {grid}\n        {treeGrid}\n\n\t\t\t</div>\n\t\t</div> <!-- Main Portlet Start -->\n\n\t\t{portlet}\n\n\t</div>\n</div>\n\n{modal}\n<!-- END CONTENT BODY -->\n@stop"
  },
  {
    "path": "templates/module/config.txt",
    "content": "<?php\n\n\treturn [\n\n\n\t\t'middlewares' => [\n\n\t\t],\n\t];"
  },
  {
    "path": "templates/module/controllers/index.txt",
    "content": "<?php\n\nnamespace App\\{module}\\Controllers;\n\nuse Illuminate\\Http\\Request;\n\nclass IndexController extends {module}\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    /**\n     * Show the application dashboard.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function index()\n    {\n        return view('{module}::Index.index');\n    }\n}\n"
  },
  {
    "path": "templates/module/controllers/module.txt",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: sl\n * Date: 2017/9/14\n * Time: 09:45\n */\nnamespace App\\{module}\\Controllers;\n\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\View\\View;\nuse Smart\\Controllers\\Backend\\SysBase;\nuse Smart\\Service\\SysFuncService;\nuse Facades\\Smart\\Service\\ServiceManager;\n\nclass {module} extends SysBase{\n\n\n\n    public function __construct(Request $request)\n    {\n        parent::__construct($request);\n\n        $this->middleware('auth');\n\n    }\n\n    public function _init($pageTitle = '新页面'){\n        parent::_init($pageTitle);\n        $SysFuncService = ServiceManager::make( SysFuncService::class );\n      //  var_dump($SysFuncService->getMenuByRoles(1,'backend'));\n        $this->user = Auth::user();\n        $this->_addData(\n            'menuData',\n        //暂定超级管理员\n            $SysFuncService->getMenuByRoles(\n                Auth::id(),\n                $this->module )\n        );\n        $this->_addData( 'user', $this->user );\n\n    }\n\n    public function _displayWithLayout( $view = 'index'){\n\n        return view($view)->with($this->data)->with('js' , $this->_makeJs())->with('css' , $this->_makeCss());\n    }\n}"
  },
  {
    "path": "templates/module/providers/mainproviders.txt",
    "content": "<?php\n\nnamespace App\\{module}\\Providers;\n\nuse Illuminate\\Support\\ServiceProvider;\n\nclass MainProvider extends ServiceProvider{\n    /**\n     * 在容器中注册绑定.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        \n    }\n\n    public function boot(){\n\n    }\n\n}"
  },
  {
    "path": "templates/module/routes.txt",
    "content": "<?php\nuse Illuminate\\Routing\\Router;\nRoute::group([\n    'prefix'=>strtolower('{module}' ),\n    'namespace' => 'App\\\\{module}\\\\Controllers' ,\n    'middleware'=> ['web']\n],function(Router $router ){\n    $router->get('index/index' ,  'IndexController@index');\n});"
  },
  {
    "path": "templates/module/views/Index/index.txt",
    "content": "@extends('layouts.app')\n\n@section('content')\n<div class=\"container\">\n    <div class=\"row\">\n        <div class=\"col-md-8 col-md-offset-2\">\n            <div class=\"panel panel-default\">\n                <div class=\"panel-heading\">Dashboard</div>\n\n                <div class=\"panel-body\">\n                    Wellcome to {module}!!!\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection"
  },
  {
    "path": "tests/CreatesApplication.php",
    "content": "<?php\n\n\nuse Illuminate\\Contracts\\Console\\Kernel;\n\ntrait CreatesApplication\n{\n    /**\n     * Creates the application.\n     *\n     * @return \\Illuminate\\Foundation\\Application\n     */\n    public function createApplication()\n    {\n        $app = require __DIR__.'/../bootstrap/app.php';\n\n        $app->make(Kernel::class)->bootstrap();\n\n        return $app;\n    }\n}\n"
  },
  {
    "path": "tests/IndexTest.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: MR.Z < zsh2088@gmail.com >\n * Date: 2017/11/10\n * Time: 15:12\n */\nuse Tests\\TestCase;\nuse Laravel\\Dusk\\Browser;\n\nclass IndexCase extends TestCase{\n\n    public function setUp(){\n        parent::setUp();\n        $this->be( \\Smart\\Models\\SysUser::first(),'admin');\n    }\n\n    public function testIndex(){\n\n        $this->browse(function (Browser $browser) {\n            $browser->loginAs(\\Smart\\Models\\SysUser::first())->visit('/')\n                ->assertSee('Laravel');\n        });\n    //    $this->visit('backend/index/index')->assertResponseOk()->see(\"首页\");\n    }\n}"
  },
  {
    "path": "tests/Simulator.php",
    "content": "<?php\nuse Smart\\Models\\SysUser;\nuse Tests\\TestCase;\nuse Laravel\\Dusk\\Browser;\n\nclass SimulatorTest extends TestCase\n{\n    /**\n     * A basic test example.\n     *\n     * @return void\n     */\n    public function testExample()\n    {\n        $this->assertTrue(true);\n    }\n\n    public function setUp()\n    {\n        parent::setUp();\n        $this->be( SysUser::first(),'admin');\n    }\n\n    public function testIndex(){\n\n        //$this->user = factory(SysUser::class )->create();\n        $this->browse(function (Browser $browser){\n            $browser->loginAs(\\Smart\\Models\\SysUser::first())->visit('backend/simulator/index')->assertSee('接口模拟器')\n                ->press('#selectActionBtn')\n                ->pause(1000)\n                ->press('#submitBtn')\n                ->pause(1000)\n                ->assertSee('\"msg\":\"查询成功\"');\n\n        });\n\n    }\n\n\n\n\n}\n"
  },
  {
    "path": "tests/SysFuncTest.php",
    "content": "<?php\nuse Smart\\Models\\SysFunc;\nuse Tests\\TestCase;\nuse Laravel\\Dusk\\Browser;\n\nclass SysFuncTest extends TestCase\n{\n    /**\n     * A basic test example.\n     *\n     * @return void\n     */\n    public function testExample()\n    {\n        $this->assertTrue(true);\n    }\n\n    public function setUp()\n    {\n        parent::setUp();\n        $this->be( \\Smart\\Models\\SysUser::first(),'admin');\n    }\n\n    public function testIndex(){\n\n        //$this->user = factory(SysUser::class )->create();\n        $this->browse(function (Browser $browser) {\n            $browser->loginAs(\\Smart\\Models\\SysUser::first())->visit('backend/sysfunc/index')->assertSee('系统功能');\n\n\n       //     $browser->visit('backend/sysfunc/read?status=1')->seeJson(['code' => 0 , 'msg' => '查询成功' ]);\n\n        });\n\n    }\n\n    public function testCreate(){\n\n\n        $this->browse(function (Browser $browser) {\n            $browser->loginAs(\\Smart\\Models\\SysUser::first())->visit('backend/sysfunc/index')->press('#addNewBtn')\n                ->pause(1000)->whenAvailable('.modal', function ($modal) {\n                $modal->assertSee('新建系统功能');\n\n            });\n            $browser->with('.modal', function ($modal) {\n                $modal->type('name','test1')\n                    ->type( 'uri' ,'backend/test1/index')\n                    ->select('pid' ,0)\n                    ->type('sort' ,1 )\n                    ->radio('status' ,1 )\n                    ->radio('is_menu' ,1 )\n                    ->press('保存');\n            })->waitForText('创建成功')->assertSee('创建成功');\n\n        });\n    }\n\n    public function testDelete(){\n        $this->browse(function( Browser $browser){\n            $browser->loginAs(\\Smart\\Models\\SysUser::first())->visit('backend/sysfunc/index')->waitForText('test1')\n                    ->click('.destroyBtn')->whenAvailable('.fit-confirm' , function ($modal){\n                        $modal->assertSee('是否删除');\n                });\n\n            $browser->with('.fit-confirm' , function($modal){\n                $modal->press('#fit-confirm-ok_btn');\n            })->waitForText('成功删除')->assertSee('成功删除');\n\n        });\n    }\n\n    public function testPermission(){\n        $this->browse(function( Browser $browser){\n            $browser->loginAs(\\Smart\\Models\\SysUser::first())->visit('backend/sysfunc/index')->assertSee('系统功能')->pause(1000)\n            ->click(\".privilegeBtn\")\n            ->whenAvailable( '#privilegeModal' , function( $modal){\n                $modal->assertSee('权限');\n            })->with( '.modal' , function ($modal){\n                $modal->check('name[]')->press('#submitPrivilegeFormBtn');\n                })->waitForText('成功')->assertSee('成功');\n\n        });\n    }\n\n\n\n\n    \n\n\n}\n"
  },
  {
    "path": "tests/SysUserTest.php",
    "content": "<?php\nuse Smart\\Models\\SysUser;\nuse Tests\\TestCase;\nuse Laravel\\Dusk\\Browser;\n\nclass SysUserTest extends TestCase\n{\n    /**\n     * A basic test example.\n     *\n     * @return void\n     */\n    public function testExample()\n    {\n        $this->assertTrue(true);\n    }\n\n    public function setUp()\n    {\n        parent::setUp();\n        $this->be( SysUser::first(),'admin');\n    }\n\n    public function testIndex(){\n\n        //$this->user = factory(SysUser::class )->create();\n        $this->browse(function (Browser $browser){\n            $browser->loginAs(\\Smart\\Models\\SysUser::first())->visit('backend/sysuser/index')->assertSee('系统用户');\n        });\n\n    }\n\n    public function testRead(){\n\n        $count = SysUser::where('status','=' , 1)->count();\n        $this->browse(function (Browser $browser) use ($count) {\n        //    $browser->visit( 'backend/sysuser/read?status=1')->seeJson(['code'=>0,'msg'=>'查询成功' , 'total' => $count ]);\n        });\n    }\n\n\n}\n"
  },
  {
    "path": "tests/TestCase.php",
    "content": "<?php\n\nnamespace Tests;\n\nuse Illuminate\\Contracts\\Console\\Kernel;\nuse Illuminate\\Support\\Facades\\Schema;\n//use Laravel\\BrowserKitTesting\\TestCase as BaseTestCase;\nuse Tests\\DuskTestCase as BaseTestCase;\n\nabstract class TestCase extends BaseTestCase\n{\n    /**\n     * The base URL of the application.\n     *\n     * @var string\n     */\n    public $baseUrl = 'http://laravel-packages.local.com';\n\n    /**\n     * Creates the application.\n     *\n     * @return \\Illuminate\\Foundation\\Application\n     */\n    public function createApplication()\n    {\n        $app = require __DIR__.'/../../../bootstrap/app.php';\n\n        $app->make(Kernel::class)->bootstrap();\n\n        return $app;\n    }\n\n    public function setUp(){\n        parent::setUp();\n        $adminConfig = require __DIR__ . '/config/backend.php';\n\n        $this->app['config']->set('database.default', 'mysql');\n        $this->app['config']->set('database.connections.mysql.host', env('MYSQL_HOST', '127.0.0.1'));\n        $this->app['config']->set('database.connections.mysql.database', 'laraveltest');\n        $this->app['config']->set('database.connections.mysql.username', 'root');\n        $this->app['config']->set('database.connections.mysql.password', 'root');\n        $this->app['config']->set('app.key', 'AckfSECXIvnK5r28GVIWUAxmbBSjTsmF');\n        $this->app['config']->set('filesystems', require __DIR__.'/config/filesystems.php');\n        $this->app['config']->set('admin', $adminConfig);\n\n        foreach (array_dot(array_get($adminConfig, 'auth'), 'auth.') as $key => $value) {\n            $this->app['config']->set($key, $value);\n        }\n\n        $this->artisan('vendor:publish' , ['--provider' => 'Smart\\SmartServiceProvider']);\n       // Schema::defaultStringLength(191);\n\n        $this->artisan('smart:install');\n        //数据库安装\n        //TODO\n\n        //加载路由\n        require __DIR__ . '/router/routes.php';\n\n        require  __DIR__ . '/factories/factory.php';\n\n\n\n    }\n\n\n}\n"
  },
  {
    "path": "tests/config/backend.php",
    "content": "<?php\n/**\n * Created by PhpStorm.\n * User: sl\n * Date: 2017/9/14\n * Time: 11:07\n */\nreturn [\n    'baseUri' => '/',\n\n    'projectName' => 'laravel-smart',\n\n    'sessionName' => 'backend_session',\n\n    'directory' => ['Http/Controllers/Api' , 'Http/Controllers/backend' , 'Http/Controllers/mp' , 'Service' , 'Models'],\n\n    'superAdminId' => 1,\n\n    'defaultAdmin' => 'sys_admin',\n\n    'defaultPwd' => '123123',\n\n    'defaultEmail' => 'admin@admin.com',\n\n    'areaCachePrefix' => 'backend_area',\n\n    'secret'        => 'laravel-smart-secret',\n\n    'timeGap'   => 300,\n\n    'JPush'      => [\n        'appKey' => 'xxx' ,\n        'secret' => 'xxx' ,\n    ] ,\n\n    'image' => [\n        'imgUri' => '',\n        'uploadType' => 'local',\n    ],\n\n    'sms' => [\n        'name' => 'alidayu',\n    ],\n\n    'api' => [\n        'apiVersion' => 'v1',\n    ],\n\n    //TESTS\n    'route' => [\n        'prefix' => 'admin',\n    ],\n\n    'auth' => [\n        'guards' => [\n\n            'admin' => [\n                'driver' => 'session',\n                'provider' => 'admin',\n            ],\n        ],\n        'providers' => [\n\n            'admin' => [\n                'driver' => 'eloquent',\n                'model' => Smart\\Models\\SysUser::class,\n            ],\n        ]\n    ]\n];"
  },
  {
    "path": "tests/config/filesystems.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Filesystem Disk\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default filesystem disk that should be used\n    | by the framework. The \"local\" disk, as well as a variety of cloud\n    | based disks are available to your application. Just store away!\n    |\n    */\n\n    'default' => env('FILESYSTEM_DRIVER', 'local'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Cloud Filesystem Disk\n    |--------------------------------------------------------------------------\n    |\n    | Many applications store files both locally and in the cloud. For this\n    | reason, you may specify a default \"cloud\" driver here. This driver\n    | will be bound as the Cloud disk implementation in the container.\n    |\n    */\n\n    'cloud' => env('FILESYSTEM_CLOUD', 's3'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Filesystem Disks\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure as many filesystem \"disks\" as you wish, and you\n    | may even configure multiple disks of the same driver. Defaults have\n    | been setup for each driver as an example of the required options.\n    |\n    | Supported Drivers: \"local\", \"ftp\", \"s3\", \"rackspace\"\n    |\n    */\n\n    'disks' => [\n\n        'local' => [\n            'driver' => 'local',\n            'root' => storage_path('app'),\n        ],\n\n        'public' => [\n            'driver' => 'local',\n            'root' => storage_path('app/public'),\n            'url' => env('APP_URL').'/storage',\n            'visibility' => 'public',\n        ],\n\n        's3' => [\n            'driver' => 's3',\n            'key' => env('AWS_KEY'),\n            'secret' => env('AWS_SECRET'),\n            'region' => env('AWS_REGION'),\n            'bucket' => env('AWS_BUCKET'),\n        ],\n\n        'ftp' => [\n            'driver'   => 'ftp',\n            'host'     => 'ftp.example.com',\n            'username' => 'your-username',\n            'password' => 'your-password',\n\n            // Optional FTP Settings...\n            // 'port'     => 21,\n            // 'root'     => '',\n            // 'passive'  => true,\n            // 'ssl'      => true,\n            // 'timeout'  => 30,\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "tests/factories/factory.php",
    "content": "<?php\n\nuse Faker\\Generator as Faker;\n\nuse Illuminate\\Database\\Eloquent\\Factory;\n/*\n|--------------------------------------------------------------------------\n| Model Factories\n|--------------------------------------------------------------------------\n|\n| This directory should contain each of the model factory definitions for\n| your application. Factories provide a convenient way to generate new\n| model instances for testing / seeding your application's database.\n|\n*/\n$factory = app( Factory::class );\n\n$factory->define(App\\User::class, function (Faker $faker) {\n    static $password;\n\n    return [\n        'name' => $faker->name,\n        'email' => $faker->unique()->safeEmail,\n        'password' => $password ?: $password = bcrypt('secret'),\n        'remember_token' => str_random(10),\n    ];\n});\n"
  },
  {
    "path": "tests/router/routes.php",
    "content": "<?php\n\nRoute::group([\n    'prefix'        => config('backend.route.prefix'),\n    'namespace'     => 'Tests\\Controllers',\n    'middleware'    => ['web', 'admin'],\n], function ($router) {\n\n});"
  }
]