diff --git a/addons/weliam_smartcity/web/controller/agentset/agentSetAccount.ctrl.php b/addons/weliam_smartcity/web/controller/agentset/agentSetAccount.ctrl.php new file mode 100644 index 0000000..dda894a --- /dev/null +++ b/addons/weliam_smartcity/web/controller/agentset/agentSetAccount.ctrl.php @@ -0,0 +1,52 @@ + $_W['uniacid'] , 'id' => $_W['aid']]); + if (checksubmit('submit')) { + if (empty($_GPC['pw']) || empty($_GPC['pw2'])) { + wl_message('密码不能为空,请重新填写!' , 'referer' , 'error'); + } + if ($_GPC['pw'] == $_GPC['pw2']) { + wl_message('新密码与原密码一致,请检查!' , 'referer' , 'error'); + } + $password_old = Util::encryptedPassword($_GPC['pw'] , $user['salt']); + if ($user['password'] != $password_old) { + wl_message('原密码错误,请重新填写!' , 'referer' , 'error'); + } + $result = ''; + $members = ['password' => Util::encryptedPassword($_GPC['pw2'] , $user['salt'])]; + $result = pdo_update(PDO_NAME . 'agentusers' , $members , ['id' => $_W['aid']]); + wl_message('修改成功!' , 'referer' , 'success'); + } + include wl_template('agentset/profile'); + } + //代理商分享信息设置 + public function shareSet(){ + global $_W,$_GPC; + if (checksubmit('submit')) { + $share = $_GPC['share']; + Setting::agentsetting_save($share, 'share_set'); + + wl_message('更新设置成功!',referer()); + } + //获取设置信息 + $settings = Setting::agentsetting_read('share_set');; + + include wl_template('agentset/shareSet'); + } + + + +} diff --git a/addons/weliam_smartcity/web/controller/agentset/agentSetCommunity.ctrl.php b/addons/weliam_smartcity/web/controller/agentset/agentSetCommunity.ctrl.php new file mode 100644 index 0000000..ce29f15 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/agentset/agentSetCommunity.ctrl.php @@ -0,0 +1,82 @@ + $id]); + Setting::agentsetting_save($community , 'community'); + show_json(1); + } + //社群添加 + function communityAdd() + { + global $_W , $_GPC; + $id = $_GPC['id']; + $community = pdo_get('wlmerchant_community' , ['id' => $id]); + if ($_W['ispost']) { + $data = $_GPC['community']; + if ($id) { + if ($community['communqrcode'] != $data['communqrcode']) { + $data['media_id'] = ''; + $data['media_endtime'] = 0; + } + $res = pdo_update('wlmerchant_community' , $data , ['id' => $id]); + } + else { + $data['uniacid'] = $_W['uniacid']; + $data['aid'] = $_W['aid']; + $data['createtime'] = time(); + $res = pdo_insert(PDO_NAME . 'community' , $data); + } + if ($res) { + wl_message('操作成功!' , web_url('agentset/agentSetCommunity/communityList')); + } + else { + wl_message('操作失败,请重试!'); + } + } + include wl_template('agentset/communityAdd'); + } + //删除社群 + function deletecommunity() + { + global $_W , $_GPC; + $id = $_GPC['id']; + $res = pdo_delete('wlmerchant_community' , ['id' => $id]); + if ($res) { + show_json(1); + } + else { + show_json(0 , '删除失败,请重试'); + } + } +} diff --git a/addons/weliam_smartcity/web/controller/agentset/agentSetStaff.ctrl.php b/addons/weliam_smartcity/web/controller/agentset/agentSetStaff.ctrl.php new file mode 100644 index 0000000..15e23c4 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/agentset/agentSetStaff.ctrl.php @@ -0,0 +1,121 @@ + $_W['uniacid'] , + 'aid' => $_W['aid'] + ] , 'id DESC' , $pindex , $psize , 1); + $tags = $datas[0]; + $pager = $datas[1]; + foreach ($tags as $key => &$value) { + $value['nickname'] = pdo_getcolumn(PDO_NAME . 'member' , ['id' => $value['mid']] , 'nickname'); + } + //获取登录地址 + if($_W['aid'] > 0) $loginUrl = $_W['siteroot']."web/cityagent.php?p=user&ac=login&do=agent_login&aid={$_W['aid']}";//代理商员工登录 + else $loginUrl = $_W['siteroot']."web/citysys.php?p=user&ac=login&do=adminStaffLogin&i={$_W['uniacid']}";//平台员工登录 + + include wl_template('agentset/adminset'); + } + //添加、编辑员工信息 + public function adminedit() + { + global $_W , $_GPC; + if (!empty($_GPC['id'])) { + $admin = pdo_get('wlmerchant_agentadmin' , ['id' => $_GPC['id']]); + $admin['nickname'] = pdo_getcolumn(PDO_NAME . 'member' , ['id' => $admin['mid']] , 'nickname'); + $jurisdiction = unserialize($admin['jurisdiction']); + $noticeauthority = unserialize($admin['noticeauthority']); + } + if (checksubmit('submit')) { + $admin = []; + $admin['account'] = trim($_GPC['account']); + //判断是否已经有了 + $adminid = $_GPC['adminid'] ? $_GPC['adminid'] : 0; + $flag = pdo_fetch("SELECT id FROM " . tablename('wlmerchant_agentadmin') . "WHERE uniacid = {$_W['uniacid']} AND aid = {$_W['aid']} AND account = {$admin['account']} AND id != {$adminid}"); + if ($flag) { + wl_message('账户名已被注册' , referer() , 'error'); + } + if($adminid > 0){ + $flag2 = pdo_fetch("SELECT id FROM " . tablename('wlmerchant_agentadmin') . "WHERE uniacid = {$_W['uniacid']} AND aid = {$_W['aid']} AND mid = {$_GPC['mid']} AND id != {$adminid}"); + if ($flag2) { + wl_message('此用户已经是管理员' , referer() , 'error'); + } + } + $password = trim($_GPC['password']); + $admin['openid'] = trim($_GPC['openid']); + $admin['mid'] = trim($_GPC['mid']); + $admin['notice'] = intval($_GPC['notice']); + $admin['manage'] = intval($_GPC['manage']); + $admin['jurisdiction'] = serialize($_GPC['jurisdiction']); + $admin['noticeauthority'] = serialize($_GPC['noticeauthority']); + if (empty($_GPC['adminid'])) { + $admin['uniacid'] = $_W['uniacid']; + $admin['aid'] = $_W['aid']; + $admin['createtime'] = time(); + $admin['password'] = md5($password); + $res = pdo_insert(PDO_NAME . 'agentadmin' , $admin); + } + else { + $pwd = pdo_getcolumn(PDO_NAME . 'agentadmin' , ['id' => $_GPC['adminid']] , 'password'); + if ($password != $pwd) { + //密码已被修改 从新进行加密 + $admin['password'] = md5($password); + } + $res = pdo_update('wlmerchant_agentadmin' , $admin , ['id' => $_GPC['adminid']]); + } + if ($res) { + wl_message('保存成功' , web_url('agentset/agentSetStaff/adminset') , 'success'); + } + else { + wl_message('保存失败' , referer() , 'error'); + } + } + //获取菜单列表 + $list = Jurisdiction::menuList(); + include wl_template('agentset/adminedit'); + } + //修改、删除员工通知权限 + public function changeadmin() + { + global $_W , $_GPC; + $id = $_GPC['id']; + $type = $_GPC['type']; + $newvalue = trim($_GPC['value']); + if ($type == 1) { + $res = pdo_update('wlmerchant_agentadmin' , ['notice' => $newvalue] , ['id' => $id]); + } + else if ($type == 2) { + $res = pdo_update('wlmerchant_agentadmin' , ['manage' => $newvalue] , ['id' => $id]); + } + else if ($type == 3) { + $res = pdo_delete('wlmerchant_agentadmin' , ['id' => $id]); + } + if ($res) { + show_json(1 , '修改成功'); + } + else { + show_json(0 , '修改失败,请重试'); + } + } + +} diff --git a/addons/weliam_smartcity/web/controller/agentset/agentSetTags.ctrl.php b/addons/weliam_smartcity/web/controller/agentset/agentSetTags.ctrl.php new file mode 100644 index 0000000..571131a --- /dev/null +++ b/addons/weliam_smartcity/web/controller/agentset/agentSetTags.ctrl.php @@ -0,0 +1,84 @@ + $_W['uniacid'] , + 'aid' => $_W['aid'] , + 'type' => $type + ] , 'type ASC,sort DESC,id DESC' , $pindex , $psize , 1); + $tags = $datas[0]; + $pager = $datas[1]; + include wl_template('agentset/tagsindex'); + } + //添加、编辑标签信息 + public function tagsedit() + { + global $_W , $_GPC; + if (!empty($_GPC['id'])) { + $tag = pdo_get('wlmerchant_tags' , ['id' => $_GPC['id']]); + } + if (checksubmit('submit')) { + $tag = $_GPC['tag']; + $tag['title'] = trim($tag['title']); + $tag['sort'] = intval($tag['sort']); + $tag['enabled'] = intval($_GPC['enabled']); + if (empty($_GPC['tagid'])) { + $tag['uniacid'] = $_W['uniacid']; + $tag['aid'] = $_W['aid']; + $tag['createtime'] = time(); + $res = pdo_insert(PDO_NAME . 'tags' , $tag); + } + else { + $res = pdo_update('wlmerchant_tags' , $tag , ['id' => $_GPC['tagid']]); + } + if ($res) { + wl_message('保存成功' , web_url('agentset/agentSetTags/tags') , 'success'); + } + else { + wl_message('保存失败' , referer() , 'error'); + } + } + include wl_template('agentset/tagsedit'); + } + //修改、删除标签信息 + public function changeinfo() + { + global $_W , $_GPC; + $id = $_GPC['id']; + $type = $_GPC['type']; + $newvalue = trim($_GPC['value']); + if ($type == 1) { + $res = pdo_update('wlmerchant_tags' , ['title' => $newvalue] , ['id' => $id]); + } + else if ($type == 2) { + $res = pdo_update('wlmerchant_tags' , ['sort' => $newvalue] , ['id' => $id]); + } + else if ($type == 3) { + $res = pdo_update('wlmerchant_tags' , ['enabled' => $newvalue] , ['id' => $id]); + } + else if ($type == 4) { + $res = pdo_delete('wlmerchant_tags' , ['id' => $id]); + } + if ($res) { + show_json(1 , '修改成功'); + } + else { + show_json(0 , '修改失败,请重试'); + } + } +} diff --git a/addons/weliam_smartcity/web/controller/agentset/diyForm.ctrl.php b/addons/weliam_smartcity/web/controller/agentset/diyForm.ctrl.php new file mode 100644 index 0000000..e49eeb4 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/agentset/diyForm.ctrl.php @@ -0,0 +1,110 @@ + $data['base']['title'] ? : '自定义表单', + 'info' => base64_encode(json_encode($data,JSON_UNESCAPED_UNICODE)), + 'update_time' => time() + ]; + //判断是添加还是修改 + if($id > 0){ + //修改操作 + pdo_update(PDO_NAME."diyform",$params,['id'=>$id]); + }else{ + //添加操作 + $params['uniacid'] = $_W['uniacid']; + $params['aid'] = $_W['aid']; + $params['create_time'] = time(); + if(is_store()) $params['sid'] = $_W['storeid']; + pdo_insert(PDO_NAME."diyform",$params); + } + + wl_json(1,$id > 0 ? '编辑成功' : '添加成功'); + } + //id存在 编辑信息 获取表单信息 + if($id > 0){ + $info = pdo_getcolumn(PDO_NAME."diyform",['id'=>$id],'info'); + $info = json_decode(base64_decode($info), true);//页面的配置信息 + } + + + + include wl_template('agentset/diy_form/edit'); + } + /** + * Comment: 删除表单 + * Author: zzw + * Date: 2020/11/19 10:58 + */ + public function delete(){ + global $_W,$_GPC; + //参数信息获取 + $id = $_GPC['id'] OR show_json(0, '参数错误,请刷新重试!'); + //删除内容 + $res = pdo_delete(PDO_NAME."diyform",['id'=>$id]); + if ($res) show_json(1 , '删除成功'); + else show_json(0 , '删除失败,请刷新重试'); + } + +} diff --git a/addons/weliam_smartcity/web/controller/agentset/userset.ctrl.php b/addons/weliam_smartcity/web/controller/agentset/userset.ctrl.php new file mode 100644 index 0000000..936c38c --- /dev/null +++ b/addons/weliam_smartcity/web/controller/agentset/userset.ctrl.php @@ -0,0 +1,49 @@ + &$setV) { + if (!array_key_exists('switch' , $setV)) { + $setV['switch'] = 0; + } + } + $res = Setting::wlsetting_save($set , 'userindex'); + if ($res) show_json(1); + else show_json(0 , '设置保存失败'); + } + $setInfo = User::userSet(); + foreach ($setInfo as $index => &$item) { + $item['show_img'] = tomedia($item['image']); + } + $identityList = User::getUserIdentityList(); + $keyList = []; + include wl_template('agentset/userindex'); + } + /** + * Comment: 代理客服设置 + * Author: wlf + * Date: 2020/08/10 10:57 + */ + public function agentcustomer() + { + global $_W , $_GPC; + $settings = Setting::agentsetting_read('agentcustomer'); + if (checksubmit('submit')) { + $base = Util::trimWithArray($_GPC['customer']); + Setting::agentsetting_save($base , 'agentcustomer'); + wl_message('更新设置成功!' , web_url('agentset/userset/agentcustomer')); + } + include wl_template('agentset/customer'); + } + +} diff --git a/addons/weliam_smartcity/web/controller/dashboard/adv.ctrl.php b/addons/weliam_smartcity/web/controller/dashboard/adv.ctrl.php new file mode 100644 index 0000000..3097fc3 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/dashboard/adv.ctrl.php @@ -0,0 +1,77 @@ + &$val) { + if (!empty($val['cateid'])) { + $val['catename'] = pdo_getcolumn('wlmerchant_groupon_category', array('uniacid' => $_W['uniacid'], 'aid' => $_W['aid'], 'id' => $val['cateid']), 'name'); + } + } + $pager = wl_pagination($adves['count'], $pindex, $psize); + include wl_template('dashboard/advIndex'); + } + /** + * 编辑幻灯片 + */ + public function edit(){ + global $_W,$_GPC; + $cateid = intval($_GPC['cateid']); + if(checksubmit('submit')){ + $adv = $_GPC['adv']; + $adv['advname'] = trim($adv['advname']); + $adv['displayorder'] = intval($adv['displayorder']); + $adv['enabled'] = intval($_GPC['enabled']); + if(!empty($_GPC['id'])){ + if(Dashboard::editAdv($adv,$_GPC['id'])) wl_message('保存成功',web_url('dashboard/adv/index'),'success'); + }else{ + $adv['cateid'] = $cateid; + if(Dashboard::editAdv($adv)) wl_message('保存成功',web_url('dashboard/adv/index'),'success'); + } + wl_message('保存失败',referer(),'error'); + } + if(!empty($_GPC['id'])) $adv = Dashboard::getSingleAdv($_GPC['id']); + if (!empty($cateid) && p('groupon')) { + $catename = pdo_getcolumn('wlmerchant_groupon_category', array('uniacid' => $_W['uniacid'], 'aid' => $_W['aid'], 'id' => $cateid), 'name'); + } + + include wl_template('dashboard/advEdit'); + } + /** + * Comment: 删除幻灯片 + * Author: zzw + * Date: 2019/9/19 18:26 + */ + public function delete (){ + global $_W , $_GPC; + #1、参数获取 + $id = $_GPC['id'] OR show_json(0 , '删除失败,缺少id!'); + #2、删除操作 + pdo_delete(PDO_NAME . "adv" , [ 'id' => $id ]) OR show_json(0 , '失败'); + show_json(1 , '成功'); + } + /** + * Comment: 修改状态 + * Author: zzw + * Date: 2019/9/18 15:41 + */ + public function changeStatus (){ + global $_W , $_GPC; + #1、获取参数信息 + $id = $_GPC['id'] OR Commons::sRenderError('缺少参数:幻灯片id'); + $status = $_GPC['status'] ? : 0; + #1、修改操作 + $res = pdo_update(PDO_NAME."adv",['enabled'=>$status],['id'=>$id]); + if($res) Commons::sRenderSuccess('修改成功'); + else Commons::sRenderError('修改失败,请刷新重试!'); + } + +} diff --git a/addons/weliam_smartcity/web/controller/dashboard/banner.ctrl.php b/addons/weliam_smartcity/web/controller/dashboard/banner.ctrl.php new file mode 100644 index 0000000..e081193 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/dashboard/banner.ctrl.php @@ -0,0 +1,70 @@ + $id ]) OR show_json(0 , '失败'); + show_json(1 , '成功'); + } + /** + * Comment: 修改状态 + * Author: zzw + * Date: 2019/9/18 15:56 + */ + public function changeStatus (){ + global $_W , $_GPC; + #1、获取参数信息 + $id = $_GPC['id'] OR Commons::sRenderError('缺少参数:导航id'); + $status = $_GPC['status'] ? : 0; + #1、修改操作 + $res = pdo_update(PDO_NAME."banner",['enabled'=>$status],['id'=>$id]); + if($res) Commons::sRenderSuccess('修改成功'); + else Commons::sRenderError('修改失败,请刷新重试!'); + } + + + + + +} diff --git a/addons/weliam_smartcity/web/controller/dashboard/category.ctrl.php b/addons/weliam_smartcity/web/controller/dashboard/category.ctrl.php new file mode 100644 index 0000000..4cb7384 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/dashboard/category.ctrl.php @@ -0,0 +1,259 @@ + '商品', '2' => '招聘', '0' => '其他']; + + public function index() + { + global $_W, $_GPC; + + $pindex = max(1, intval($_GPC['page'])); + $psize = 100; + $categoryes = Category::getAllCategory($pindex - 1, $psize, 0); + $categorys = $categoryes['data']; + + $pager = wl_pagination($categoryes['count'], $pindex, $psize); + if (!empty($categorys)) { + foreach ($categorys as $key => $value) { + $childrens = Category::getAllCategory(0, 100, $value['id']); + $categorys[$key]['children'] = $childrens['data']; + } + } + + include wl_template('dashboard/category/indexList'); + } + + public function edit() + { + global $_W, $_GPC; + + if (checksubmit('submit')) { + $category = $_GPC['category']; + if (!empty($_GPC['parentid'])) { + if (!empty($category['parentid']) && preg_match('/^\d+$/',$category['parentid'])) { + $_GPC['parentid'] = $category['parentid']; + } + $category['parentid'] = intval($_GPC['parentid']); + $category['visible_level'] = 2; + $parentData = Category::getSingleCategory($_GPC['parentid'],'type'); + if ($parentData) $category['type'] = $parentData['type']; + } else { + $category['parentid'] = 0; + $category['visible_level'] = 1; + } + $category['name'] = trim($category['name']); + $category['displayorder'] = intval($category['displayorder']); + $category['status'] = intval($_GPC['status']); + if (is_numeric($_GPC['type'])) $category['type'] = intval($_GPC['type']); + + $advlogo = $_GPC['advlogo']; + $advlink = $_GPC['advlink']; + $advarray = []; + foreach ($advlogo as $dkey => $dle) { + $dlea['thumb'] = $advlogo[$dkey]; + $dlea['link'] = $advlink[$dkey]; + $advarray[] = $dlea; + } + $category['advs'] = serialize($advarray); + + if (!empty($_GPC['id'])) { + Category::syncCategroyType($_GPC['id'],$category); + if (Category::categoryEdit($category, $_GPC['id'])) wl_message('保存成功', web_url('dashboard/category/index',array('active' => 1)), 'success'); + } else { + if (Category::categoryEdit($category)) wl_message('保存成功', web_url('dashboard/category/index',array('active' => 1)), 'success'); + } + wl_message('保存失败', referer(), 'error'); + } + + if (!empty($_GPC['id'])) { + $category = Category::getSingleCategory($_GPC['id']); + if ($category['parentid']) { + $category['advs'] = unserialize($category['advs']); + $videoRes = Category::categoryVideoAll($_GPC['id']); + $category['video'] = $videoRes['list']; + } + } + + if (empty($category)) $category = ['type' => $_GPC['category_type']]; + $typeArr = $this->typeArr; + + include wl_template('dashboard/category/indexEdit'); + } + + /** + * Comment: 删除商户 + */ + public function delete() + { + global $_W, $_GPC; + if (Category::categoryDelete($_GPC['id'])) wl_message('删除成功', web_url('dashboard/category/index',array('active' => 1)), 'success'); + wl_message('删除失败', referer(), 'error'); + } + + /** + * Comment: 修改状态 + * Author: zzw + * Date: 2023/5/6 13:52 + */ + public function changeStatus() + { + global $_W, $_GPC; + #1、获取参数信息 + $id = $_GPC['id'] or Commons::sRenderError('缺少参数:导航id'); + $status = $_GPC['status'] ?: 0; + #1、修改操作 + $res = pdo_update(PDO_NAME . "cultivate_class", ['status' => $status], ['id' => $id]); + if ($res) Commons::sRenderSuccess('修改成功'); + else Commons::sRenderError('修改失败,请刷新重试!'); + } + + public function videoIndex() + { + global $_W, $_GPC; + + $cc_id = $_GPC['cc_id']; + $pindex = $_GPC['page'] ?: 1; + $psize = $_GPC['psize'] ?: 5; + + $videoRes = Category::categoryVideoAll($cc_id,'*',false,'',$pindex,$psize); + $video = $videoRes['list']; + $pager = $videoRes['pager']; + $total = $videoRes['total']; + $category = Category::getSingleCategory($cc_id); + $parentCategory = Category::getSingleCategory($category['parentid']); + + include wl_template('dashboard/category/videoIndex'); + } + + public function videoEdit() + { + + global $_W, $_GPC; + + $id = $_GPC['id']; + $cc_id = $_GPC['cc_id']; + $category = Category::getSingleCategory($cc_id); + $parentCategory = Category::getSingleCategory($category['parentid']); + + if (checksubmit('submit')) { + + $data = $_GPC['video']; + if (empty($data['title'])) wl_message('请填写视频标题', referer(), 'error'); + if (empty($data['video_link'])) wl_message('请上传视频', referer(), 'error'); + $data['uniacid'] = $_W['uniacid']; + if (!empty($id)) { + $res = pdo_update(PDO_NAME . 'cultivate_class_video',$data,['id' => $id]); + } else { + $data['create_time'] = time(); + $res = pdo_insert(PDO_NAME . 'cultivate_class_video',$data); + } + if ($res) wl_message('保存成功', web_url('dashboard/category/videoIndex',['cc_id' =>$_GPC['cc_id']]), 'success'); + wl_message('保存失败', referer(), 'error'); + } + + if (!empty($id)) $video = Category::categoryVideoFind($id); + + include wl_template('dashboard/category/videoEdit'); + } + + public function videoDelete() + { + global $_W, $_GPC; + if (empty($_GPC['id'])) wl_message('缺少id', referer(), 'error'); + if (empty($_GPC['cc_id'])) wl_message('缺少分类id', referer(), 'error'); + $result = pdo_delete(PDO_NAME . 'cultivate_class_video' , ['id' => $_GPC['id']]); + if ($result) wl_message('删除成功', web_url('dashboard/category/videoIndex',['cc_id' =>$_GPC['cc_id']]), 'success'); + wl_message('删除失败', referer(), 'error'); + } + + public function videoComment() + { + global $_W, $_GPC; + + $pindex = max(1, intval($_GPC['page'])); + $psize = $_GPC['psize'] ?: 10; + + $where = ['aid' => $_W['aid']]; + if (!empty($_GPC['keyword'])) { + $keyword = trim($_GPC['keyword']); + if ($_GPC['keywordtype'] == 1) { + $where['id'] = $keyword; + } elseif ($_GPC['keywordtype'] == 2) { + $where['video_id'] = $keyword; + } elseif ($_GPC['keywordtype'] == 3) { + $videoRes = pdo_getall(PDO_NAME . 'cultivate_class_video'," title like '%{$keyword}%'",['id']); + $videoIdArr = array_column($videoRes,'id'); + $where['video_id#'] = $videoIdArr ? implode(",",$videoIdArr) : 0; + } elseif ($_GPC['keywordtype'] == 4) { + $where['mid'] = $keyword; + } + } + + $data = Category::getVideoComment($where,'',$pindex,$psize,0,' status asc,id asc'); + $list = $data['list']; + $pager = $data['pager']; + $total = $data['total']; + foreach ($list as &$item) { + $video = pdo_get(PDO_NAME . 'cultivate_class_video',['id' => $item['video_id']],['video_link','title']); + $item['video_link'] = $video['video_link'] ? tomedia($video['video_link']) : ''; + $item['video_title'] = $video['title'] ?: ''; + Member::getMemberInfo($item,$item['mid']); + } + + include wl_template('dashboard/category/videoComment'); + } + + public function videoCommentCheck() + { + global $_W, $_GPC; + + $id = $_GPC['id']; + $status = $_GPC['status']; + if (empty($id)) wl_message('缺少id', referer(), 'error'); + if (!in_array($status,array(1,2))) wl_message('参数错误:status', referer(), 'error'); + + $update = ['status' => $status]; + $res = pdo_update(PDO_NAME . 'cultivate_class_comment',$update,['id' => $id]); + if ($res) wl_message('审核成功', web_url('dashboard/category/videoComment',array('active' => 2)), 'success'); + wl_message('审核失败', referer(), 'error'); + } + + /** + * 删除视频评论 + */ + public function videoCommentDel() + { + global $_W, $_GPC; + + if (Category::videoCommentDelete($_GPC['id'])) wl_message('删除成功', web_url('dashboard/category/videoComment',array('active' => 2)), 'success'); + + wl_message('删除失败', referer(), 'error'); + } + + /** + * Comment: 修改状态 + * Author: zzw + * Date: 2023/5/6 13:52 + */ + public function changeStatusVideo() + { + global $_W, $_GPC; + #1、获取参数信息 + $id = $_GPC['id'] or Commons::sRenderError('缺少参数:导航id'); + $status = $_GPC['status'] ?: 0; + #1、修改操作 + $res = pdo_update(PDO_NAME . "cultivate_class_video", ['status' => $status], ['id' => $id]); + if ($res) Commons::sRenderSuccess('修改成功'); + else Commons::sRenderError('修改失败,请刷新重试!'); + } + + public function queryVideo() + { + global $_W, $_GPC; + $video_link = $_GPC['video_link']; + $title = $_GPC['title']; + include wl_template('dashboard/category/queryVideo'); + } +} \ No newline at end of file diff --git a/addons/weliam_smartcity/web/controller/dashboard/cube.ctrl.php b/addons/weliam_smartcity/web/controller/dashboard/cube.ctrl.php new file mode 100644 index 0000000..4c23f40 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/dashboard/cube.ctrl.php @@ -0,0 +1,36 @@ + $_W['storeid']), 'storename'); + }else{ + $name = pdo_getcolumn(PDO_NAME . 'agentusers', array('id' => $_W['aid']), 'agentname'); + //初始化总后台数据 + Area::initAgent(); + } + + + if ($_W['isajax']) { + if(is_store()){ + $data = Merchant::newSurvey($_W['aid'],$_W['storeid']); + $data2 = Cache::getCache('storeinfo' . $_W['storeid'], 'data'); + if ($data2['time'] < strtotime(date("Y-m-d"), time()) || $_GPC['refresh']) { + $data2 = Merchant::cacheSurvey($_W['aid'],$_W['storeid']); + Cache::setCache('storeinfo'.$_W['storeid'],'data',$data2); + } + }else{ + $data = Merchant::newSurvey($_W['aid']); + $data2 = Cache::getCache('cachesur' . $_W['aid'], 'data'); + if ($data2['time'] < strtotime(date("Y-m-d"), time()) || $_GPC['refresh']) { + $data2 = Merchant::cacheSurvey($_W['aid']); + Cache::setCache('cachesur' . $_W['aid'], 'data', $data2); + } + } + $data = array_merge($data, $data2); + $li = array('year' => date('m-d', time()), '金额' => $data['allmoney']); + $data['list'][] = $li; + + die(json_encode($data)); + } + include wl_template('dashboard/index'); + } + +} diff --git a/addons/weliam_smartcity/web/controller/dashboard/foot.ctrl.php b/addons/weliam_smartcity/web/controller/dashboard/foot.ctrl.php new file mode 100644 index 0000000..99a134a --- /dev/null +++ b/addons/weliam_smartcity/web/controller/dashboard/foot.ctrl.php @@ -0,0 +1,84 @@ + $set['status'] ? $set['status'] : 0 ,//0=使用默认;1=使用当前自定义菜单 + 'list' => [ + 'one' => [ + 'default_name' => '首页' ,//默认名称 + 'diy_name' => '' ,//自定义名称 + 'default_img' => '' ,//默认图片 + 'selected_img' => '' ,//选中图片 + 'link' => '' ,//跳转链接 + 'switch' => 0 ,//是否开启:0=关,1=开启 + ] , + 'two' => [ + 'default_name' => '附近' ,//默认名称 + 'diy_name' => '' ,//自定义名称 + 'default_img' => '' ,//默认图片 + 'selected_img' => '' ,//选中图片 + 'link' => '' ,//跳转链接 + 'switch' => 0 ,//是否开启:0=关,1=开启 + ] , + 'three' => [ + 'default_name' => '一卡通' ,//默认名称 + 'diy_name' => '' ,//自定义名称 + 'default_img' => '' ,//默认图片 + 'selected_img' => '' ,//选中图片 + 'link' => '' ,//跳转链接 + 'switch' => 0 ,//是否开启:0=关,1=开启 + ] , + 'four' => [ + 'default_name' => '入驻' ,//默认名称 + 'diy_name' => '' ,//自定义名称 + 'default_img' => '' ,//默认图片 + 'selected_img' => '' ,//选中图片 + 'link' => '' ,//跳转链接 + 'switch' => 0 ,//是否开启:0=关,1=开启 + ] , + 'five' => [ + 'default_name' => '我的' ,//默认名称 + 'diy_name' => '' ,//自定义名称 + 'default_img' => '' ,//默认图片 + 'selected_img' => '' ,//选中图片 + 'link' => '' ,//跳转链接 + 'switch' => 0 ,//是否开启:0=关,1=开启 + ] , + ] , + ]; + } + + return $set; + } + +} \ No newline at end of file diff --git a/addons/weliam_smartcity/web/controller/dashboard/nav.ctrl.php b/addons/weliam_smartcity/web/controller/dashboard/nav.ctrl.php new file mode 100644 index 0000000..161a8db --- /dev/null +++ b/addons/weliam_smartcity/web/controller/dashboard/nav.ctrl.php @@ -0,0 +1,70 @@ + $id ]) OR show_json(0 , '失败'); + show_json(1 , '成功'); + } + /** + * Comment: 修改状态 + * Author: zzw + * Date: 2019/9/18 15:41 + */ + public function changeStatus (){ + global $_W , $_GPC; + #1、获取参数信息 + $id = $_GPC['id'] OR Commons::sRenderError('缺少参数:导航id'); + $status = $_GPC['status'] ? : 0; + #1、修改操作 + $res = pdo_update(PDO_NAME."nav",['enabled'=>$status],['id'=>$id]); + if($res) Commons::sRenderSuccess('修改成功'); + else Commons::sRenderError('修改失败,请刷新重试!'); + } + +} diff --git a/addons/weliam_smartcity/web/controller/dashboard/notice.ctrl.php b/addons/weliam_smartcity/web/controller/dashboard/notice.ctrl.php new file mode 100644 index 0000000..49ad7b5 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/dashboard/notice.ctrl.php @@ -0,0 +1,98 @@ +$id]),'success'); + #3、修改操作 + unset($data['id']); + $res = pdo_update(PDO_NAME."notice",$data,['id'=>$id]); + }else{ + #2、添加操作 + $data['aid'] = $_W[ 'aid' ]; + $data['uniacid'] = $_W[ 'uniacid' ]; + $data['createtime'] = time(); + $res = pdo_insert(PDO_NAME."notice",$data); + } + #3、返回结果 + if($res) wl_message('操作成功',web_url('dashboard/notice/index'),'success'); + else wl_message('操作失败',referer(),'error'); + } + #2、编辑信息准备 + if($id) $notice = pdo_get(PDO_NAME."notice",['id'=>$id],['id','title','content','link','enabled']); + + include wl_template('dashboard/noticeEdit'); + } + /** + * Comment: 删除公告 + * Author: zzw + * Date: 2019/9/19 10:03 + */ + public function delete (){ + global $_W , $_GPC; + #1、参数获取 + $id = $_GPC['id'] OR show_json(0, '删除失败,缺少id!'); + #2、删除操作 + pdo_delete(PDO_NAME."notice",['id'=>$id]) OR show_json(0, '失败'); + show_json(1, '成功'); + } + /** + * Comment: 修改状态 + * Author: zzw + * Date: 2019/9/18 15:20 + */ + public function changeStatus (){ + global $_W , $_GPC; + #1、获取参数信息 + $id = $_GPC['id'] OR Commons::sRenderError('缺少参数:公告id'); + $status = $_GPC['status'] ? : 0; + #1、修改操作 + $res = pdo_update(PDO_NAME."notice",['enabled'=>$status],['id'=>$id]); + if($res) Commons::sRenderSuccess('修改成功'); + else Commons::sRenderError('修改失败,请刷新重试!'); + } + + public function clear(){ + global $_W , $_GPC; + pdo_delete('wlmerchant_diypage',array('uniacid'=>$_W['uniacid'],'aid'=>$_W['aid'],'name' => 'weliam_default_index')); + show_json(1, '清理成功'); + } +} \ No newline at end of file diff --git a/addons/weliam_smartcity/web/controller/dashboard/pagelinks.ctrl.php b/addons/weliam_smartcity/web/controller/dashboard/pagelinks.ctrl.php new file mode 100644 index 0000000..fa0a0c5 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/dashboard/pagelinks.ctrl.php @@ -0,0 +1,49 @@ + \ No newline at end of file diff --git a/addons/weliam_smartcity/web/controller/dashboard/ruleCenter.ctrl.php b/addons/weliam_smartcity/web/controller/dashboard/ruleCenter.ctrl.php new file mode 100644 index 0000000..6a6f6db --- /dev/null +++ b/addons/weliam_smartcity/web/controller/dashboard/ruleCenter.ctrl.php @@ -0,0 +1,78 @@ + $_W['uniacid'], + 'img' => $data['img'], + 'sort' => $data['sort'], + 'status' => $data['status'] + ]; + + if (!empty($id)) { + $result = pdo_update(PDO_NAME . 'rule_center',$arr,['id' => $id]); + } else { + $arr['create_time'] = time(); + $result = pdo_insert(PDO_NAME . 'rule_center',$arr); + } + + if ($result) wl_message('保存成功', web_url('dashboard/ruleCenter/index'), 'success'); + wl_message('保存失败', referer(), 'error'); + } + + if ($id) { + $data = pdo_get(PDO_NAME . 'rule_center',['id' => $id]); + } + + include wl_template('dashboard/rule_center/edit'); + } + + public function changeStatus() + { + global $_W, $_GPC; + #1、获取参数信息 + $id = $_GPC['id'] or Commons::sRenderError('缺少参数:导航id'); + $status = $_GPC['status'] ?: 0; + #1、修改操作 + $res = pdo_update(PDO_NAME . "rule_center", ['status' => $status], ['id' => $id]); + if ($res) Commons::sRenderSuccess('修改成功'); + else Commons::sRenderError('修改失败,请刷新重试!'); + } + + public function delete() + { + global $_W, $_GPC; + $id = $_GPC['id']; + if (empty($id) || !is_numeric($id)) wl_message('缺少id参数', referer(), 'error'); + $deleteRes = pdo_delete(PDO_NAME . "rule_center",['id' => $id]); + if ($deleteRes) wl_message('删除成功', web_url('dashboard/ruleCenter/index'), 'success'); + wl_message('删除失败', referer(), 'error'); + } +} \ No newline at end of file diff --git a/addons/weliam_smartcity/web/controller/dashboard/sort.ctrl.php b/addons/weliam_smartcity/web/controller/dashboard/sort.ctrl.php new file mode 100644 index 0000000..4bfd621 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/dashboard/sort.ctrl.php @@ -0,0 +1,12 @@ + $_W['uniacid'])); + $diymenu = pdo_getall(PDO_NAME . "diypage_menu", array('uniacid' => $_W['uniacid'])); + $category = pdo_getall(PDO_NAME . "diypage_temp_cate", array('uniacid' => $_W['uniacid'],'aid' => $_W['aid']), array('id', 'name')); + } else { + //启动广告信息 + $diyadvs = pdo_getall(PDO_NAME . "diypage_adv", array('aid' => $_W['aid'], 'uniacid' => $_W['uniacid'])); + //菜单信息 + $diymenu = pdo_getall(PDO_NAME . "diypage_menu", array('aid' => [$_W['aid'],0], 'uniacid' => $_W['uniacid'])); + //模板分类信息 + $category = pdo_getall(PDO_NAME . "diypage_temp_cate", array('aid' => $_W['aid'], 'uniacid' => $_W['uniacid']), array('id', 'name')); + } + + include wl_template('diy/page_edit'); + } + /** + * Comment: 保存页面信息 + * Author: zzw + */ + public function savePage() { + global $_W, $_GPC; + #1、参数接收 + $id = $_GPC['id'];//修改的id + $data = json_decode(base64_decode($_GPC['data']), true);//页面的配置信息 + #2、组装页面配置基本信息 + $diypage = [ + 'data' => base64_encode(json_encode($data,JSON_UNESCAPED_UNICODE)), + 'name' => $data['page']['name'], + 'type' => $data['page']['type'], + 'lastedittime' => time(), + ]; + #3、进行数据的添加||修改 + if ($id > 0) { + if(!$diypage['name']) unset($diypage['name']);//修改时如果页面标题为空则删除 + if(!$diypage['type']) unset($diypage['type']);//修改时如果页面类型为空则删除 + //修改已存在的页面配置信息 + pdo_update(PDO_NAME . 'diypage', $diypage, array('id' => $id)); + } else { + //添加储存新的页面配置信息 + $diypage['uniacid'] = $_W['uniacid']; + $diypage['aid'] = $_W['aid']; + $diypage['createtime'] = time(); + if (empty($diypage['aid'])) { + $diypage['is_public'] = 1; + } + + pdo_insert(PDO_NAME . 'diypage', $diypage); + $id = pdo_insertid(); + } + + #4、返回最终的结果 + $backUrl = "diypage/diy/pagelist"; + wl_json(1, '操作成功', array('id' => $id, 'url' => web_url('diy/diy/editPage', array('id' => $id, 'type' => $data['page']['type'], 'page_type' => 'page', 'back_url' => $backUrl)))); + } + /** + * Comment: 删除一个页面 + * Author: zzw + */ + public function delPage() { + global $_W,$_GPC; + $ids = $_GPC['ids'] ? : []; + pdo_delete(PDO_NAME."diypage",['id IN'=>$ids]); + + show_json(1, "删除成功"); + } + + + /** + * Comment: 保存菜单信息 + * Author: zzw + */ + public function saveMenu() { + global $_W, $_GPC; + $id = intval($_GPC['id']); + $data = $_GPC['menu']; + $menuClass = intval($_GPC['menu_class']); + $menudata = array('name' => $data['name'], 'data' => base64_encode(json_encode($data)), 'lastedittime' => time()); + if (!empty($id)) { + pdo_update(PDO_NAME . 'diypage_menu', $menudata, array('id' => $id, 'uniacid' => $_W['uniacid'])); + } else { + $menudata['uniacid'] = $_W['uniacid']; + $menudata['aid'] = $_W['aid']; + if (empty($menudata['aid'])) { + $menudata['is_public'] = 1; + } + $menudata['createtime'] = time(); + $menudata['menu_class'] = $menuClass; + pdo_insert(PDO_NAME . 'diypage_menu', $menudata); + $id = pdo_insertid(); + } + if ($menuClass == 1) { + $Url = "diypage/diy/menuEdit"; + } else { + $Url = "chosen/diy/menuEdit"; + } + wl_json(1, '保存成功', web_url($Url, array('id' => $id, 'menu_class' => $menuClass))); + + } + /** + * Comment: 删除菜单 + * Author: zzw + */ + public function delMenu() { + global $_W, $_GPC; + $id = intval($_GPC['id']); + if (empty($id)) { + show_json(0, '参数错误,请刷新重试!'); + } else { + pdo_delete(PDO_NAME . 'diypage_menu', array('id' => $id)); + show_json(1); + } + } + + + /** + * Comment: 保存广告信息 + * Author: zzw + */ + public function saveAdv() { + global $_W, $_GPC; + $id = intval($_GPC['id']); + $advClass = $_GPC['adv_class']; + $data = $_GPC['advs']; + $advsdata = array('name' => $data['name'], 'data' => base64_encode(json_encode($data)), 'lastedittime' => time(), 'type' => 1, 'aid' => intval($_W['aid'])); + if (empty($advsdata['aid'])) { + $advsdata['is_public'] = 1; + } + if (!empty($id)) { + pdo_update(PDO_NAME . 'diypage_adv', $advsdata, array('id' => $id, 'uniacid' => $_W['uniacid'])); + } else { + $advsdata['uniacid'] = $_W['uniacid']; + $advsdata['createtime'] = time(); + $advsdata['adv_class'] = $advClass; + pdo_insert(PDO_NAME . 'diypage_adv', $advsdata); + $id = pdo_insertid(); + } + if ($advClass == 1) { + $Url = "diypage/diy/advEdit"; + } else { + $Url = "chosen/diy/advEdit"; + } + wl_json(1, '保存成功', web_url($Url, array('id' => $id, 'adv_class' => $advClass))); + + } + /** + * Comment: 删除广告信息 + * Author: zzw + */ + public function delAdv() { + global $_W, $_GPC; + $id = intval($_GPC['id']); + if (empty($id)) { + show_json(0, '参数错误,请刷新重试!'); + } else { + pdo_delete(PDO_NAME . 'diypage_adv', array('id' => $id, 'aid' => intval($_W['aid']))); + show_json(1); + } + } + + + + /** + * Comment: 保存模板预览图片 并且返回图片路径 + * Author: zzw + * Date: 2020/8/28 9:20 + */ + public function saveTempImage(){ + global $_W, $_GPC; + //进行预览图-图片的处理 + $pageImg = $_GPC['pageImg'];//预览图base64码 + $imageName = "page_image" . time() . rand(1000, 9999) . '.png'; + $imageName = "images/" . MODULE_NAME . "/" . $imageName;//文件储存路径 图片地址 + $fullName = PATH_ATTACHMENT . $imageName;//文件在本地服务器暂存地址 + if (strstr($pageImg, ",")) { + $pageImg = explode(',', $pageImg); + $pageImg = $pageImg[1]; + } + file_put_contents($fullName, base64_decode($pageImg)); + + wl_json(1, '操作成功',['img_name'=>$imageName]); + } + /** + * Comment: 保存模板信息 + * Author: zzw + */ + public function saveTemp() { + global $_W, $_GPC; + #1、数据获取 + $id = $_GPC['id'];//模板id + $type = $_GPC['type'];//页面类型 + $cate = $_GPC['cate'];//模板分类id + $name = $_GPC['name'];//模板名称 + $data = $_GPC['data'];//模板配置信息 + $pageImg = $_GPC['pageImg'];//预览图 + #2、组装页面配置基本信息 + $temp = array( + 'type' => intval($type),//页面类型 + 'cate' => intval($cate),//分类id + 'name' => trim($name), //模板名称 + 'preview' => trim($pageImg),//预览图片 + 'data' => base64_encode(json_encode($data, JSON_UNESCAPED_UNICODE)),//模板配置信息 + 'aid' => $_W['aid'], + 'uniacid' => $_W['uniacid'] + ); + #3、进行数据的添加 + pdo_insert(PDO_NAME . 'diypage_temp', $temp); + $id = pdo_insertid(); + #4、返回最终的结果 + wl_json(1, '操作成功'); + } + /** + * Comment: 删除一个模板 + * Author: zzw + */ + public function delTemp() { + global $_W, $_GPC; + $id = intval($_GPC['id']); + $result = pdo_delete(PDO_NAME . "diypage_temp", array('id' => $id)); + if ($result) { + show_json(0); + } else { + show_json(1, '删除失败'); + } + } + + + /** + * Comment: 保存模板分类信息 + * Author: zzw + */ + public function saveCate() { + global $_W, $_GPC; + $name = trim($_GPC['name']); + $cateClass = $_GPC['cateClass']; + if (empty($name)) { + show_json(0, '分类名称为空!'); + } + $result = pdo_insert(PDO_NAME . 'diypage_temp_cate' + , array('name' => $name, 'uniacid' => $_W['uniacid'], 'aid' => intval($_W['aid']), 'cate_class' => $cateClass)); + if ($result) { + show_json(1); + } else { + show_json(1, '添加失败'); + } + } + /** + * Comment: 编辑模板分类信息 + * Author: zzw + */ + public function editCate() { + global $_W, $_GPC; + $id = intval($_GPC['id']); + $name = trim($_GPC['value']); + $item = pdo_fetch('SELECT id, name, uniacid FROM ' . tablename(PDO_NAME . 'diypage_temp_cate') . ' WHERE id=:id and aid=:aid and uniacid=:uniacid ', array(':aid' => intval($_W['aid']), ':uniacid' => $_W['uniacid'], ':id' => $id)); + if (!empty($item)) { + pdo_update(PDO_NAME . 'diypage_temp_cate', array('name' => $name), array('id' => $id, 'aid' => intval($_W['aid']))); + show_json(1, '分类名称编辑成功!'); + } else { + show_json(0, '分类不存在,请刷新页面重试!'); + } + } + /** + * Comment: 删除模板分类信息 + * Author: zzw + */ + public function delCate() { + global $_W, $_GPC; + $id = intval($_GPC['id']); + if (empty($id)) { + show_json(0, '参数错误,请刷新重试!'); + } + $item = pdo_fetch('SELECT id, name, uniacid FROM ' . tablename(PDO_NAME . 'diypage_temp_cate') . ' WHERE id=:id and aid=:aid and uniacid=:uniacid ', array(':aid' => intval($_W['aid']), ':uniacid' => $_W['uniacid'], ':id' => $id)); + if (!empty($item)) { + pdo_delete(PDO_NAME . 'diypage_temp_cate', array('id' => $id, 'aid' => intval($_W['aid']))); + } + show_json(1); + } + + + /** + * Comment: 根据图片地址下载当前页面要使用的图片信息 + * Author: zzw + */ + public function getImgInfo() { + global $_W, $_GPC; + $imgUrl = $_GPC['img_url']; + foreach ($imgUrl as $k => $v) { + $imgResources = file_get_contents($v); + $setting = $_W['setting']['upload']['image']; + $setting['folder'] = "images/" . MODULE_NAME; + $imageName = date("Y-m-dHisw") . time() . rand(1000, 9999) . '.png'; + $imageName = $setting['folder'] . "/" . $imageName;//文件储存路径 + $fullName = PATH_ATTACHMENT . $imageName;//文件在本地服务器暂存地址 + file_put_contents($fullName, $imgResources); + $image_info = getimagesize($fullName); + $image_data = fread(fopen($fullName, 'r'), filesize($fullName)); + $base64_image = 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data)); + $base64[$k] = $base64_image; + unlink($fullName); + } + wl_json(1, '处理后的图片', $base64); + } + /** + * Comment: 获取对应的商品信息 + * Author: zzw + */ + public function getGoodsInfo() { + global $_W, $_GPC; + $plugin = $_GPC['plugin'];//商品类型:0=全部,1=抢购,2=团购,3=拼团,4=大礼包,5=优惠券,6=折扣卡,7=砍价商品,8=积分商品,9=同城活动,10=配送商品 + $search = $_GPC['search'];//搜索内容 商品名称 + $page = $_GPC['page'] ? $_GPC['page'] : 1; + $pageNum = $_GPC['pageNum'] ? $_GPC['pageNum'] : 8; + $geturl = $_GPC['geturl'] ? $_GPC['geturl'] : 0; + $start = $page * $pageNum - $pageNum; + if ($plugin == 0) { + $rush = self::getGoods(1, $search);//抢购商品 + $groupon = self::getGoods(2, $search);//团购商品 + $wlfightgroup = self::getGoods(3, $search);//拼团商品 + $coupon = self::getGoods(5, $search);//优惠券 + $bargain = self::getGoods(7, $search);//砍价 + $integral = [];//self::getGoods(8, $search);//积分 + $activity = self::getGoods(9, $search);//活动 + $goods = array_merge($rush, $groupon, $wlfightgroup, $coupon, $bargain,$integral,$activity); + } else { + $goods = self::getGoods($plugin, $search, $start, $pageNum); + } + if (!$goods) { + wl_json(0, '暂无该类型商品!'); + } + //获取总页数 进行分页 + $data['page_number'] = ceil(count($goods) / $pageNum);//总页数 + $goods = array_slice($goods, $start, $pageNum); + //只有抢购、团购、拼团、优惠券才会进行下面的操作 + $initPlugin = $plugin; + foreach ($goods as $k => &$v) { + //查询全部商品时 每个商品从新定义内容 + if ($initPlugin == 0) { + switch ($v['plugin']) { + case 'rush': + $plugin = 1; + break;//抢购商品 + case 'groupon': + $plugin = 2; + break;//团购商品 + case 'wlfightgroup': + $plugin = 3; + break;//拼团商品 + case 'coupon': + $plugin = 5; + break;//优惠券 + case 'bargain': + $plugin = 7; + break;//砍价商品 + case 'integral': + $plugin = 8; + break;//砍价商品 + case 'activity': + $plugin = 9; + break;//同城活动 + } + } + $v = WeliamWeChat::getHomeGoods($plugin, $v['id']); + //获取商品详情页面的跳转地址 + if ($geturl == 1) { + switch ($plugin) { + case 1: + $v['detail_url'] = h5_url('pages/subPages/goods/index', ['type' => 1, 'id' => $v['id']]); + break;//抢购商品 + case 2: + $v['detail_url'] = h5_url('pages/subPages/goods/index', ['type' => 2, 'id' => $v['id']]); + break;//团购商品 + case 3: + $v['detail_url'] = h5_url('pages/subPages/goods/index', ['type' => 3, 'id' => $v['id']]); + break;//拼团商品 + case 5: + $v['detail_url'] = h5_url('pages/subPages/goods/index', ['type' => 5, 'id' => $v['id']]); + break;//优惠券 + case 7: + $v['detail_url'] = h5_url('pages/subPages/goods/index', ['type' => 7, 'id' => $v['id']]); + break;//砍价商品 + case 8: + $v['detail_url'] = h5_url('pages/subPages/goods/index', ['goodsType' => 'integral', 'goods_id' => $v['id']]); + break;//砍价商品 + case 9: + $v['detail_url'] = h5_url('pages/subPages2/coursegoods/localindex/localindex'); + break;//同城活动 + } + } + } + //信息拼装 + $data['goods'] = $goods;//商品信息 + $data['page'] = $page;//当前页 + + + //输出结果 + if ($goods) { + wl_json(1, '获取商品信息', $data); + } else { + wl_json(0, '获取失败'); + } + } + /** + * Comment: 获取头条信息 + * Author: zzw + */ + public function getHeadline() { + global $_W, $_GPC; + $search = $_GPC['search'];//搜索内容 头条标题/作者名称 + $page = $_GPC['page'] ? $_GPC['page'] : 1; + $pageNum = $_GPC['pageNum'] ? $_GPC['pageNum'] : 10; + $start = $page * $pageNum - $pageNum; + $where = " uniacid = {$_W['uniacid']} AND aid = {$_W['aid']} "; + if ($search) { + $where .= " AND (title LIKE '%{$search}%' || author LIKE '%{$search}%') "; + } + //获取头条列表 + $list = pdo_fetchall("SELECT id,title,summary,display_img,author,author_img,browse,one_id,two_id FROM " + . tablename(PDO_NAME . "headline_content") + . " WHERE {$where} ORDER BY release_time DESC "); + $data['page_number'] = ceil(count($list) / $pageNum);//总页数 + $list = array_slice($list, $start, $pageNum); + foreach ($list as $k => &$v) { + $v['display_img'] = tomedia($v['display_img']); + $v['author_img'] = tomedia($v['author_img']); + $v['one_name'] = implode(pdo_get(PDO_NAME . 'headline_class', array('id' => $v['one_id']), array('name'))); + $v['two_name'] = implode(pdo_get(PDO_NAME . 'headline_class', array('id' => $v['two_id']), array('name'))); + unset($v['one_id']); + unset($v['two_id']); + } + $data['list'] = $list;//头条信息 + $data['page'] = $page;//当前页 + if ($list) { + wl_json(1, '获取商品信息', $data); + } else { + wl_json(0, '获取失败'); + } + } + /** + * Comment: 获取商户信息 + * Author: zzw + */ + public function getShop() { + global $_W, $_GPC; + $search = $_GPC['search'];//搜索内容 店铺名称 + $page = $_GPC['page'] ? $_GPC['page'] : 1; + $pageNum = $_GPC['pageNum'] ? $_GPC['pageNum'] : 10; + $start = $page * $pageNum - $pageNum; + $where = " uniacid = {$_W['uniacid']} AND aid = {$_W['aid']} AND status = 2 AND enabled = 1 "; + if ($search) { + $where .= " AND storename LIKE '%{$search}%' "; + } + $shopList = pdo_fetchall("SELECT id,storename,logo,address,location,storehours,pv,score,tag FROM " + . tablename(PDO_NAME . "merchantdata") + . " WHERE {$where}"); + foreach ($shopList as $shop_key => &$shop_val) { + $shop_val['salesVolume'] = Store::getShopSales($shop_val['id'], 1, 0); + $shop_val['score'] = sprintf("%.1f", $shop_val['score']); + //标签信息处理 + $tag = unserialize($shop_val['tag']); + if(is_array($tag) && count($tag) > 0){ + $tags = pdo_getall(PDO_NAME.'tags' , ['id' => $tag] , ['title']); + $shop_val['tag'] = is_array($tag) && count($tag) > 0 ? array_column($tags , 'title') : []; + }else{ + $shop_val['tag'] = []; + } + } + $shopList = Store::getstores($shopList, 0, 0, 4); + $data['page_number'] = ceil(count($shopList) / $pageNum);//总页数 + $shopList = array_slice($shopList, $start, $pageNum); + //获取店铺商品活动信息 + $shopList = WeliamWeChat::getStoreList($shopList); + $data['list'] = $shopList;//店铺信息 + $data['page'] = $page;//当前页 + + if ($shopList) { + wl_json(1, '获取商品信息', $data); + } else { + wl_json(0, '获取失败'); + } + } + /** + * Comment: 预览页面内容 + * Author: zzw + */ + public function previewPage() { + global $_W, $_GPC; + $id = intval($_GPC['id']); + $url = h5_url('pages/mainPages/index/diypage?type=1', ['id' => $id]); + $path = 'pages/mainPages/index/diypage?type=1&id='.$id; + $imageUrl = tomedia(WeApp::getQrCode($path,'system_url'.md5($path).'.png')); + + + include wl_template('diy/preview'); + } + /** + * Comment: 根据状态获取商品信息 + * Author: zzw + * @param $plugin int 商品类型 1=抢购 2=团购 3=拼团 5=优惠券 + * @param $search string 搜索内容 + * @return array + */ + protected function getGoods($plugin, $search) { + global $_W; + $where = " AND a.uniacid = {$_W['uniacid']} AND a.aid = {$_W['aid']} "; + switch ($plugin) { + case 1: + $goods = pdo_fetchall("SELECT a.id,REPLACE('table','table','rush') as `plugin` FROM " + . tablename(PDO_NAME . "rush_activity") + . " a LEFT JOIN " . tablename(PDO_NAME . "merchantdata") + . " b ON a.sid = b.id WHERE a.status IN (1,2,3) {$where} AND a.name LIKE '%{$search}%'");// + break;//抢购商品 + case 2: + $goods = pdo_fetchall("SELECT a.id,REPLACE('table','table','groupon') as `plugin` FROM " + . tablename(PDO_NAME . "groupon_activity") + . " a LEFT JOIN " . tablename(PDO_NAME . "merchantdata") + . " b ON a.sid = b.id WHERE a.status IN (1,2,3) {$where} AND a.name LIKE '%{$search}%'"); + break;//团购商品 + case 3: + $goods = pdo_fetchall("SELECT a.id,REPLACE('table','table','wlfightgroup') as `plugin` FROM " + . tablename(PDO_NAME . "fightgroup_goods") + . " a LEFT JOIN " . tablename(PDO_NAME . "merchantdata") + . " b ON a.merchantid = b.id WHERE a.status IN (1,2,3) {$where} AND b.storename != '' AND a.name LIKE '%{$search}%'"); + break;//拼团商品 + case 4: + $goods = pdo_fetchall("SELECT a.id,REPLACE('table','table','package') as `plugin` FROM " + . tablename(PDO_NAME . "package") + . " a LEFT JOIN " . tablename(PDO_NAME . "merchantdata") + . " b ON a.merchantid = b.id WHERE a.status = 1 {$where} AND b.storename != '' AND a.title LIKE '%{$search}%'"); + break;//大礼包 + case 5: + $goods = pdo_fetchall("SELECT a.id,REPLACE('table','table','coupon') as `plugin` FROM " + . tablename(PDO_NAME . "couponlist") + . " a LEFT JOIN " . tablename(PDO_NAME . "merchantdata") + . " b ON a.merchantid = b.id WHERE a.status IN (1,2,3) {$where} AND b.storename != '' AND a.title LIKE '%{$search}%'"); + break;//优惠券 + case 6: + $goods = pdo_fetchall("SELECT a.id,REPLACE('table','table','halfcard') as `plugin` FROM " + . tablename(PDO_NAME . "halfcardlist") + . " a LEFT JOIN " . tablename(PDO_NAME . "merchantdata") + . " b ON a.merchantid = b.id WHERE a.status = 1 {$where} AND b.storename != '' AND a.title LIKE '%{$search}%'"); + break;//折扣卡 + case 7: + $goods = pdo_fetchall("SELECT a.id,REPLACE('table','table','bargain') as `plugin` FROM " + . tablename(PDO_NAME . "bargain_activity") + . " a LEFT JOIN " . tablename(PDO_NAME . "merchantdata") + . " b ON a.sid = b.id WHERE a.status IN (1,2,3) {$where} AND b.storename != '' AND a.name LIKE '%{$search}%'"); + break;//砍价 + case 8: + $goods = pdo_fetchall("SELECT id,REPLACE('table','table','integral') as `plugin` FROM " + . tablename(PDO_NAME . "consumption_goods") + . " WHERE status = 1 AND uniacid = {$_W['uniacid']} AND title LIKE '%{$search}%'"); + break;//砍价 + case 9: + $goods = pdo_fetchall("SELECT a.id,REPLACE('table','table','activity') as `plugin` FROM " + . tablename(PDO_NAME . "activitylist") + . " a LEFT JOIN " . tablename(PDO_NAME . "merchantdata") + . " b ON a.sid = b.id WHERE a.status IN (1,2) {$where} AND b.storename != '' AND a.title LIKE '%{$search}%'"); + break;//同城活动 + case 10: + $goods = pdo_fetchall("SELECT a.id,REPLACE('table','table','citydelivery') as `plugin` FROM " + . tablename(PDO_NAME . "delivery_activity") + . " a LEFT JOIN " . tablename(PDO_NAME . "merchantdata") + . " b ON a.sid = b.id WHERE a.status = 2 {$where} AND b.storename != '' AND a.name LIKE '%{$search}%'"); + break;//配送商品 + } + return $goods; + } + /** + * Comment: 在这里配置diy编辑页面中选项卡组件的详细信息 + * Author: zzw + */ + public function getOption() { + //商家sotre;抢购rush;卡券coupon;特权halfcard;拼团fight;同城pocket;活动activity;团购groupon;砍价bargain;积分consumption;礼包package + $configInfo = [ + ['status' => 1 , 'name' => '商家' , 'plugin' => '' , 'nickname' => '商家' , 'type' => 'store'] , + ['status' => 1 , 'name' => '抢购' , 'plugin' => 'rush' , 'nickname' => '抢购' , 'type' => 'rush'] , + ['status' => 1 , 'name' => '卡券' , 'plugin' => 'wlcoupon' , 'nickname' => '卡券' , 'type' => 'coupon'] , + ['status' => 1 , 'name' => '特权' , 'plugin' => 'halfcard' , 'nickname' => '特权' , 'type' => 'halfcard'] , + ['status' => 1 , 'name' => '拼团' , 'plugin' => 'wlfightgroup' , 'nickname' => '拼团' , 'type' => 'fight'] , + ['status' => 1 , 'name' => '同城' , 'plugin' => 'pocket' , 'nickname' => '同城' , 'type' => 'pocket'] , + ['status' => 1 , 'name' => '团购' , 'plugin' => 'groupon' , 'nickname' => '团购' , 'type' => 'groupon'] , + ['status' => 1 , 'name' => '砍价' , 'plugin' => 'bargain' , 'nickname' => '砍价' , 'type' => 'bargain'] , + ['status' => 1 , 'name' => '积分' , 'plugin' => '' , 'nickname' => '积分' , 'type' => 'consumption'] , + ['status' => 1 , 'name' => '礼包' , 'plugin' => 'halfcard' , 'nickname' => '礼包' , 'type' => 'package'] , + ['status' => 1 , 'name' => '活动' , 'plugin' => 'activity' , 'nickname' => '活动' , 'type' => 'activity'] , + ['status' => 1 , 'name' => '招聘' , 'plugin' => 'recruit' , 'nickname' => '招聘' , 'type' => 'recruit'] , + ]; + $data = array(); + foreach ($configInfo as $k => &$v) { + if ($v['plugin']) { + if (!p($v['plugin'])) { + unset($configInfo[$k]); + continue; + } + } + unset($v['plugin']); + $name = 'C012345678910' . (count($data) + 1); + $v['sort'] = (count($data) + 1); + $data[$name] = $v; + } + + echo json_encode($data, JSON_UNESCAPED_UNICODE); + } + /** + * Comment: 获取社群信息 + * Author: zzw + * Date: 2019/11/21 14:52 + */ + public function getCommunityInfo() { + global $_W, $_GPC; + #1、参数获取 + $id = $_GPC['id'] OR Commons::sRenderError('id错误,请刷新重试!'); + #2、获取社群信息 + $info = pdo_get(PDO_NAME . "community", ['id' => $id], ['communname', 'commundesc', 'communimg', 'communqrcode']); + $info['communimg'] = tomedia($info['communimg']); + $info['communqrcode'] = tomedia($info['communqrcode']); + + Commons::sRenderSuccess('社群信息', $info); + } + + +} \ No newline at end of file diff --git a/addons/weliam_smartcity/web/controller/finace/finaceWithdrawal.ctrl.php b/addons/weliam_smartcity/web/controller/finace/finaceWithdrawal.ctrl.php new file mode 100644 index 0000000..fea99cb --- /dev/null +++ b/addons/weliam_smartcity/web/controller/finace/finaceWithdrawal.ctrl.php @@ -0,0 +1,169 @@ + $_W['aid'])); + //提现账号 + if(!empty($a['cashopenid'])){ + if(intval($a['cashopenid']) > 0){ + $user = pdo_get(PDO_NAME.'member', ['id' => $a['cashopenid']], ['avatar', 'id', 'realname', 'nickname','openid','wechat_openid']); + }else{ + $user = pdo_get(PDO_NAME.'member', ['openid' => $a['cashopenid']], ['avatar', 'id', 'realname', 'nickname','openid','wechat_openid']); + } + }else{ + $user = []; + } + //提现申请 + $p = unserialize($a['percent']); + $cashsets = Setting::wlsetting_read('cashset'); + $agentpercent = $p['agentpercent'] ? $p['agentpercent'] : $cashsets['agentpercent']; + $cashsets['lowsetmoney'] = $cashsets['lowsetmoney'] ? $cashsets['lowsetmoney'] : 0; + $money = $num = 0; + + /*提现申请*/ + if ($_GPC['money'] > 0) { + $money = $_GPC['money']; + $num = $_GPC['num']; + if ($num < $cashsets['lowsetmoney']) { + Commons::sRenderError('申请金额小于最低结算金额!'); + } else if ($num > $a['nowmoney']) { + Commons::sRenderError('申请金额大于账户现有金额!'); + } else { + $data = array( + 'uniacid' => $_W['uniacid'] , + 'sid' => 0 , 'aid' => $_W['aid'] , + 'status' => 2 , 'type' => 2 , + 'sapplymoney' => $num , + 'sgetmoney' => sprintf("%.2f" , $num - $agentpercent * $num / 100) , + 'spercentmoney' => sprintf("%.2f" , $agentpercent * $num / 100) , + 'spercent' => $agentpercent , + 'applytime' => TIMESTAMP , + 'updatetime' => TIMESTAMP , + 'sopenid' => $user['openid']?$user['openid']:$user['wechat_openid'], + 'source' => $user['openid']?1:3 + ); + if ($a['payment_type'] == 1) { + //支付宝 + if ($a['alipay']) { + $data['payment_type'] = 1; + } else { + Commons::sRenderError('请填写支付宝账号信息!'); + } + } else if ($a['payment_type'] == 2) { + //微信 + $data['payment_type'] = 2; + if(empty($user['openid']) && empty($user['wechat_openid'])){ + Commons::sRenderError('打款账号无微信账户信息,无法提现'); + } + } else if ($a['payment_type'] == 3) { + //银行卡 + if ($a['card_number']) { + $data['payment_type'] = 3; + } else { + Commons::sRenderError('请填写银行卡账号信息!'); + } + } else { + Commons::sRenderError('请选择收款方式!'); + } + if ($cashsets['noaudit']) { + $data['status'] = 3; + $trade_no = time() . random(4, true); + $data['trade_no'] = $trade_no; + $data['updatetime'] = time(); + } + if (pdo_insert(PDO_NAME . 'settlement_record', $data)) { + $settid = pdo_insertid(); + $res = Store::settlement($settid, 0, 0, -$num, 0, 0, 7); + if ($cashsets['agentautocash']) { + Queue::addTask(4, $settid, time(), $settid); + } + if ($res) { + if (!empty($_W['wlsetting']['adminmid'])) { + $storename = pdo_getcolumn(PDO_NAME . 'agentusers', array('id' => $_W['aid']), 'agentname'); + $first = '您好,有一个代理提现申请待审核。'; + $type = '代理[' . $storename . ']申请提现'; + $status = '待审核'; + $remark = '请尽快前往系统后台审核'; + $content = '申请金额:¥' . $num; + News::jobNotice($_W['wlsetting']['adminmid'], $first, $type, $content, $status, $remark,$data['applytime']); + } + Commons::sRenderSuccess('申请成功!'); + } else { + Commons::sRenderError('申请失败!'); + } + } + } + Commons::sRenderError('申请失败!'); + } + if ($_GPC['num']) { + $num = $_GPC['num']; + if ($num > $a['nowmoney']) { + Commons::sRenderError('申请金额大于账户现有金额!'); + } + $percentMoney = sprintf("%.2f", $agentpercent * $num / 100); + $money = sprintf("%.2f", $num - $agentpercent * $num / 100); + + Commons::sRenderSuccess('申请成功!',['num' => $num, 'percentMoney' => $percentMoney, 'money' => $money]); + } + include wl_template('finace/agentApply'); + } + //代理商提现账户设置 + public function account() { + global $_W, $_GPC; + $a = Util::getSingelData('cashopenid,bank_username,payment_type,bank_name,card_number,alipay', PDO_NAME . 'agentusers', array('id' => $_W['aid'])); + //提现账号 + if ($a['cashopenid']) { + $user = Member::wl_member_get($a['cashopenid']); + } + if (checksubmit('submit')) { + $cashmid = $_GPC['openid']; + $realname = $_GPC['realname']; + $data = $_GPC['data']; + $data['cashopenid'] = $cashmid; + pdo_update(PDO_NAME . 'agentusers', $data, array('id' => $_W['aid'])); + $upwhere = empty(intval($cashmid)) ? array('openid' => $cashmid) : array('id' => $cashmid); + pdo_update(PDO_NAME . 'member', array('realname' => $realname), $upwhere); + wl_message('保存成功!', referer(), 'success'); + } + //获取平台开通的打款方式 + $cashset = Setting::wlsetting_read('cashset')['payment_type']; + + include wl_template('finace/useraccount'); + } + //代理商提现记录 + public function cashApplyAgentRecord() { + global $_W, $_GPC; + $pindex = max(1, intval($_GPC['page'])); + $psize = 10; + + $where = array('uniacid' => $_W['uniacid'], 'type' => array(1, 2), 'aid' => $_W['aid']); + if ($_GPC['orderid']) { + $where['id'] = $_GPC['orderid']; + } + + $list = pdo_getslice(PDO_NAME . 'settlement_record', $where, array($pindex, $psize), $total, array(), '', 'id DESC'); + foreach ($list as $key => &$value) { + if ($value['type'] == 1) { + $value['aName'] = pdo_getcolumn(PDO_NAME . 'merchantdata', array('id' => $value['sid']), 'storename'); + } else { + $value['aName'] = Util::idSwitch('aid', 'aName', $value['aid']); + $value['spercent'] = sprintf("%.2f", $value['spercent']); + } + + } + $pager = wl_pagination($total, $pindex, $psize); + + include wl_template('finace/cashApplyAgentRecord'); + } + +} diff --git a/addons/weliam_smartcity/web/controller/finace/wlCash.ctrl.php b/addons/weliam_smartcity/web/controller/finace/wlCash.ctrl.php new file mode 100644 index 0000000..3403dbe --- /dev/null +++ b/addons/weliam_smartcity/web/controller/finace/wlCash.ctrl.php @@ -0,0 +1,389 @@ + $_W['aid'])); + + $data = Merchant::agentCashSurvey($refresh, $timetype, $starttime, $endtime, $merchantid); + $agents = $data[0]; + $children = $data[1]; + $max = $data[2]; + $allMoney = $data[3]; + $time = $data[4]; + $newdata = $data[5]; + + // wl_debug($merchantid); + include wl_template('finace/cashSurvey'); + } + + public function cashset() { + global $_W, $_GPC; + $cashset = Setting::agentsetting_read('cashset'); + if (checksubmit('submit')) { + $set = $_GPC['cashset']; + $res1 = Setting::agentsetting_save($set, 'cashset'); + if ($res1) { + wl_message('保存设置成功!', referer(), 'success'); + } else { + wl_message('保存设置失败!', referer(), 'error'); + } + } + + include wl_template('finace/cashset'); + } + + public function cashApply() { + global $_W, $_GPC; + //提现申请 + if ($_GPC['type'] == 'submit' && !empty($_GPC['id'])) { + pdo_update(PDO_NAME . 'settlement_record', array('status' => 2, 'updatetime' => TIMESTAMP), array('id' => $_GPC['id'])); + wl_message('提交成功!', web_url('finace/finaceWithdrawalApply/cashApply', array('status' => 2)), 'success'); + } else if ($_GPC['type'] == 'reject' && !empty($_GPC['id'])) { + pdo_update(PDO_NAME . 'settlement_record', array('status' => '-2', 'updatetime' => TIMESTAMP), array('id' => $_GPC['id'])); + $record = pdo_get(PDO_NAME . 'settlement_record', array('id' => $_GPC['id']), array('type', 'sid', 'aid', 'sapplymoney', 'id')); + // wl_debug($record); + if ($record['type'] == 1) { + Store::settlement($record['id'], 0, $record['sid'], $record['sapplymoney'], 0, $record['sapplymoney'], 7, 0); + } else if ($record['type'] == 2) { + Store::settlement($record['id'], 0, $record['sid'], $record['sapplymoney'], 0, 0, 7, 0); + } + wl_message('驳回成功!', web_url('finace/finaceWithdrawalApply/cashApply', array('status' => 6)), 'success'); + } else { + $where = array(); + $status = $_GPC['status'] ? $_GPC['status'] : 1; + if ($status == 1) + $where['status'] = 1; + if ($status == 2) + $where['status'] = 2; + if ($status == 3) + $where['status'] = 3; + if ($status == 4) + $where['status'] = 4; + if ($status == 5) + $where['status'] = 5; + if ($status == 6) + $where['#status#'] = '(-1,-2)'; + $where['type'] = 1; + $where['aid'] = $_W['aid']; + $list = Util::getNumData('*', PDO_NAME . 'settlement_record', $where); + $list = $list[0]; + foreach ($list as $key => &$value) { + $value['sName'] = Util::idSwitch('sid', 'sName', $value['sid']); + $value['aName'] = Util::idSwitch('aid', 'aName', $value['aid']); + } + } + include wl_template('finace/cashConfirm'); + } + + /** + * Comment: 编辑代理商分账信息 + */ + public function allidset(){ + global $_W, $_GPC; + $cashset = Util::getSingelData('wxpaysetid,apppaysetid', PDO_NAME . 'agentusers', array('id' => $_W['aid'])); + //支付信息列表 + if($_W['wlsetting']['cashset']['allocationtype'] == 1){ + $paylist = pdo_getall(PDO_NAME."payment",['uniacid'=>$_W['uniacid'],'type'=>1],['id','name']); + } + if (checksubmit('submit')) { + $set = $_GPC['cashset']; +// if ($set['wxsysalltype'] == 1) { +// if (empty($set['wxmerchantid'])) { +// show_json(0, '请设置公众号代理分账商户号'); +// } +// if (empty($set['wxmerchantname'])) { +// show_json(0, '请设置公众号代理分账商户名称'); +// } +// } else if ($set['wxsysalltype'] == 2) { +// if (empty($set['wxallmid'])) { +// show_json(0, '请设置公众号代理分账个人微信号'); +// } else { +// $member = pdo_get('wlmerchant_member', array('id' => $set['wxallmid']), array('openid')); +// if (empty($member['openid'])) { +// show_json(0, '所选用户无微信公众号账户信息,请重选'); +// } +// } +// } +// if ($set['appsysalltype'] == 1) { +// if (empty($set['appmerchantid'])) { +// show_json(0, '请设置小程序代理分账商户号'); +// } +// if (empty($set['appmerchantname'])) { +// show_json(0, '请设置小程序代理分账商户名称'); +// } +// } else if ($set['appsysalltype'] == 2) { +// if (empty($set['appallmid'])) { +// show_json(0, '请设置小程序代理分账个人微信号'); +// } else { +// $member = pdo_get('wlmerchant_member', array('id' => $set['appallmid']), array('wechat_openid')); +// if (empty($member['wechat_openid'])) { +// show_json(0, '所选用户无微信小程序账户信息,请重选'); +// } +// } +// } + $res1 = pdo_update(PDO_NAME . 'agentusers', $set, array('id' => $_W['aid'])); + + if ($res1) { + show_json(1); + } else { + show_json(0,'保存设置失败,请重试'); + } + } + include wl_template('finace/allidset'); + } + + + + + public function detail() { + global $_W, $_GPC; + //提现申请详情 + $id = $_GPC['id']; + $where = array(); + $where['id'] = $id; + $settlementRecord = Util::getSingelData('*', PDO_NAME . 'settlement_record', $where); + $settlementRecord['sName'] = Util::idSwitch('sid', 'sName', $settlementRecord['sid']); + $settlementRecord['aName'] = Util::idSwitch('aid', 'aName', $settlementRecord['aid']); + $orders = unserialize($settlementRecord['ids']); + $list = array(); + foreach ($orders as $id) { + if ($settlementRecord['type'] == 1) { + if ($settlementRecord['type2'] == 1) { + $v = Util::getSingelData('*', PDO_NAME . 'order', array('id' => $id)); + $coupon = pdo_get('wlmerchant_couponlist', array('id' => $v['fkid']), array('title', 'logo')); + $merchant = pdo_get('wlmerchant_merchantdata', array('id' => $v['sid']), array('storename')); + $member = pdo_get('wlmerchant_member', array('id' => $v['mid']), array('nickname', 'avatar', 'mobile')); + $v['gname'] = $coupon['title']; + $v['gimg'] = tomedia($coupon['logo']); + $v['storename'] = $merchant['storename']; + $v['nickname'] = $member['nickname']; + $v['headimg'] = $member['avatar']; + $v['mobile'] = $member['mobile']; + $list[] = $v; + } else if ($settlementRecord['type2'] == 2) { + $v = Util::getSingelData('*', PDO_NAME . 'order', array('id' => $id)); + $fightgoods = pdo_get('wlmerchant_fightgroup_goods', array('id' => $v['fkid']), array('name', 'logo')); + $merchant = pdo_get('wlmerchant_merchantdata', array('id' => $v['sid']), array('storename')); + $member = pdo_get('wlmerchant_member', array('id' => $v['mid']), array('nickname', 'avatar', 'mobile')); + $v['gname'] = $fightgoods['name']; + $v['gimg'] = tomedia($fightgoods['logo']); + $v['storename'] = $merchant['storename']; + $v['nickname'] = $member['nickname']; + $v['headimg'] = $member['avatar']; + $v['mobile'] = $member['mobile']; + $list[] = $v; + } else { + $list[] = Rush::getSingleOrder($id, "*"); + } + } + + if ($settlementRecord['type'] == 2) + $list[] = Util::getSingelData("*", PDO_NAME . 'vip_record', array('id' => $id)); + if ($settlementRecord['type'] == 3) + $list[] = Util::getSingelData("*", PDO_NAME . 'halfcard_record', array('id' => $id)); + } + if ($settlementRecord['type'] == 2) { + foreach ($list as $key => &$value) { + $value['areaName'] = Util::idSwitch('areaid', 'areaName', $value['areaid']); + $value['member'] = Member::wl_member_get($value['mid']); + } + } + if ($settlementRecord['type'] == 3) { + foreach ($list as $key => &$v) { + $user = pdo_get('wlmerchant_member', array('id' => $v['mid'])); + $v['nickname'] = $user['nickname']; + $v['avatar'] = $user['avatar']; + $v['mobile'] = $user['mobile']; + } + } + include wl_template('finace/cashDetail'); + } + + public function settlement() { + global $_W, $_GPC; + $id = $_GPC['id']; + $where = array(); + $where['id'] = $id; + $settlementRecord = Util::getSingelData('*', PDO_NAME . 'settlement_record', $where); + $settlementRecord['sName'] = Util::idSwitch('sid', 'sName', $settlementRecord['sid']); + $settlementRecord['aName'] = Util::idSwitch('aid', 'aName', $settlementRecord['aid']); + $_GPC['type'] = $_GPC['type'] ? $_GPC['type'] : 'settlement'; + if ($_GPC['type'] == 'money_record') { + $pindex = max(1, intval($_GPC['page'])); + $psize = 15; + $moneyRecordData = SingleMerchant::getMoneyRecord($id, $pindex, $psize, 1); + $moneyRecord = $moneyRecordData[0]; + + $pager = $moneyRecordData[1]; + foreach ($moneyRecord as &$item) { + if ($item['orderid']) + $item['order'] = Rush::getSingleOrder($item['orderid'], '*'); + } + } + if ($_GPC['type'] == 'settlement_record') { + //结算记录 + $id = $_GPC['id']; + $merchant = Store::getSingleStore($id); + $account = pdo_fetch("SELECT * FROM " . tablename('tg_merchant_account') . " WHERE uniacid = {$_W['uniacid']} and merchantid={$id}"); + $merchant['amount'] = $account['amount']; + $merchant['no_money'] = $account['no_money']; + $merchant['no_money_doing'] = $account['no_money_doing']; + $list = pdo_fetchall("select * from" . tablename('tg_merchant_record') . "where merchantid='{$id}' and uniacid={$_W['uniacid']} "); + + } + if ($_GPC['type'] == 'settlement') { + //结算操作 + $merchant = Store::getSingleStore($settlementRecord['sid']); + $_GPC['accountType'] = $_GPC['accountType'] ? $_GPC['accountType'] : 'f2f'; + if (checksubmit('submit') && $_GPC['accountType'] == 'weixin') { + } + if (checksubmit('submit') && $_GPC['accountType'] == 'f2f') { + if ($settlementRecord['status'] != 4) + wl_message('结算状态错误!', web_url('finace/finaceWithdrawalApply/cashApply'), 'error'); + $money = $_GPC['money']; + //实际结算给商家 + $spercent = $_GPC['spercent'] ? $_GPC['spercent'] : $settlementRecord['spercent']; + //佣金百分比 + $spercentMoney = $_GPC['spercentMoney']; + //佣金 + if (is_numeric($money)) { + if (pdo_update(PDO_NAME . 'settlement_record', array('status' => 5, 'updatetime' => TIMESTAMP, 'spercentmoney' => $spercentMoney, 'spercent' => $spercent, 'sgetmoney' => $money), array('id' => $_GPC['id']))) { + $orders = unserialize($settlementRecord['ids']); + foreach ($orders as $iid) { + if ($settlementRecord['type2']) { + pdo_update(PDO_NAME . 'order', array('issettlement' => 2), array('id' => $iid)); + } else { + pdo_update(PDO_NAME . 'rush_order', array('issettlement' => 2), array('id' => $iid)); + } + } + } + wl_message('已结算给商家!', web_url('finace/finaceWithdrawalApply/cashApply', array('status' => 5)), 'success'); + } else { + wl_message('结算金额输入错误!', referer(), 'error'); + } + wl_message('操作成功!', referer(), 'success'); + } + } + include wl_template('finace/account'); + } + + public function output() { + global $_W, $_GPC; + + $where['id'] = $_GPC['id']; + $settlementRecord = Util::getSingelData('*', PDO_NAME . 'settlement_record', $where); + $orders = unserialize($settlementRecord['ids']); + $list = array(); + if ($settlementRecord['type'] == 1) { + foreach ($orders as $id) { + if ($settlementRecord['type2'] == 1) { + $v = Util::getSingelData('*', PDO_NAME . 'order', array('id' => $id)); + $coupon = pdo_get('wlmerchant_couponlist', array('id' => $v['fkid']), array('title', 'logo')); + $merchant = pdo_get('wlmerchant_merchantdata', array('id' => $v['sid']), array('storename')); + $member = pdo_get('wlmerchant_member', array('id' => $v['mid']), array('nickname', 'avatar', 'mobile')); + $v['title'] = $coupon['title']; + $v['gimg'] = tomedia($coupon['logo']); + $v['storename'] = $merchant['storename']; + $v['nickname'] = $member['nickname']; + $v['headimg'] = $member['avatar']; + $v['mobile'] = $member['mobile']; + $v['actualprice'] = $v['price']; + $v['gname'] = $v['title']; + $list[] = $v; + } else { + $list[] = Rush::getSingleOrder($id, "*"); + } + } + } + if ($settlementRecord['type'] == 2) { + foreach ($orders as $id) { + $order = Util::getSingelData("*", PDO_NAME . 'vip_record', array('id' => $id)); + $member = Member::wl_member_get($order['mid']); + $order['nickname'] = $member['nickname']; + $order['actualprice'] = $order['price']; + $order['mobile'] = $member['mobile']; + $order['gname'] = 'VIP充值'; + $list[] = $order; + } + } + if ($settlementRecord['type'] == 3) { + foreach ($orders as $id) { + $order = Util::getSingelData("*", PDO_NAME . 'halfcard_record', array('id' => $id)); + $member = Member::wl_member_get($order['mid']); + $order['nickname'] = $member['nickname']; + $order['actualprice'] = $order['price']; + $order['mobile'] = $member['mobile']; + $order['gname'] = '一卡通充值'; + $list[] = $order; + } + } + $orders = $list; + if ($settlementRecord['status'] == 1) + $settleStatus = '代理审核中'; + if ($settlementRecord['status'] == 2) + $settleStatus = '系统审核中'; + if ($settlementRecord['status'] == 3) + $settleStatus = '系统审核通过,待结算'; + if ($settlementRecord['status'] == 4) + $settleStatus = '已结算到代理'; + if ($settlementRecord['status'] == 5) + $settleStatus = '已结算到商家'; + if ($settlementRecord['status'] == -1) + $settleStatus = '系统审核不通过'; + if ($settlementRecord['status'] == -2) + $settleStatus = '代理审核不通过'; + $html = "\xEF\xBB\xBF"; + $filter = array('aa' => '商户单号', 'bb' => '昵称', 'cc' => '电话', 'dd' => '支付金额', 'ee' => '订单状态', 'jj' => '结算状态', 'ff' => '支付时间', 'gg' => '商品名称', 'hh' => '微信订单号'); + foreach ($filter as $key => $title) { + $html .= $title . "\t,"; + } + $html .= "\n"; + foreach ($orders as $k => $v) { + if ($v['status'] == '0') + $thisstatus = '未支付'; + if ($v['status'] == '1') + $thisstatus = '已支付'; + if ($v['status'] == '2') + $thisstatus = '已消费'; + $time = date('Y-m-d H:i:s', $v['paytime']); + $orders[$k]['aa'] = $v['orderno']; + $orders[$k]['bb'] = $v['nickname']; + $orders[$k]['cc'] = $v['mobile']; + $orders[$k]['dd'] = $v['actualprice']; + $orders[$k]['ee'] = $thisstatus; + $orders[$k]['jj'] = $settleStatus; + $orders[$k]['ff'] = $time; + $orders[$k]['gg'] = $v['gname']; + $orders[$k]['hh'] = $v['transid']; + foreach ($filter as $key => $title) { + $html .= $orders[$k][$key] . "\t,"; + } + $html .= "\n"; + } + header("Content-type:text/csv"); + header("Content-Disposition:attachment; filename=未结算订单.csv"); + echo $html; + exit(); + + } + + + + +} diff --git a/addons/weliam_smartcity/web/controller/goodshouse/category.ctrl.php b/addons/weliam_smartcity/web/controller/goodshouse/category.ctrl.php new file mode 100644 index 0000000..25edff4 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/goodshouse/category.ctrl.php @@ -0,0 +1,216 @@ +$value],['id'=>$id]); + if($res) show_json(1,'修改成功'); + else show_json(0,'修改失败,请刷新重试!'); + } + /** + * Comment: 调取分类编辑页面 + * Author: zzw + * Date: 2019/12/20 14:35 + */ + public function cateModel(){ + global $_W,$_GPC; + #1、参数获取 + $plugin = $_GPC['plugin'] OR show_json(0,'参数错误,请刷新重试!'); + $id = $_GPC['id']; + #1、参数获取 + if($id){ + switch ($plugin) { + case 'rush': + $tableName = PDO_NAME."rush_category"; + break;//抢购 + case 'groupon': + $tableName = PDO_NAME."groupon_category"; + break;//团购 + case 'wlfightgroup': + $tableName = PDO_NAME."fightgroup_category"; + break;//拼团 + case 'bargain': + $tableName = PDO_NAME."bargain_category"; + break;//砍价 + } + $info = pdo_get($tableName,['id'=>$id]); + if(!$info) show_json(0,'分类不存在,请刷新重试!'); + if($plugin == 'wlfightgroup'){ + $info['sort'] = $info['listorder']; + $info['thumb'] = $info['logo']; + unset($info['listorder']); + unset($info['logo']); + } + } + + include wl_template('goodshouse/cate_model'); + } + /** + * Comment: 商品分类添加/编辑 + * Author: zzw + * Date: 2019/12/20 14:48 + */ + public function cateEdit(){ + global $_W,$_GPC; + #1、参数获取 + $plugin = $_GPC['plugin'] OR show_json(0,'参数错误,请刷新重试!'); + $id = $_GPC['id']; + $data = $_GPC['data']; + #2、表获取 + switch ($plugin) { + case 'rush': + $tableName = PDO_NAME."rush_category"; + break;//抢购 + case 'groupon': + $tableName = PDO_NAME."groupon_category"; + break;//团购 + case 'wlfightgroup': + $tableName = PDO_NAME."fightgroup_category"; + $data['listorder'] = $data['sort']; + $data['logo'] = $data['thumb']; + unset($data['sort']); + unset($data['thumb']); + break;//拼团 + case 'bargain': + $tableName = PDO_NAME."bargain_category"; + break;//砍价 + } + #3、添加/修改 操作 + if($id > 0){ + //修改操作 + $res = pdo_update($tableName,$data,['id'=>$id]); + }else{ + //添加操作 + if(empty($data['name'])) show_json(0,'分类名称不能为空!'); + $data['aid'] = $_W['aid']; + $data['uniacid'] = $_W['uniacid']; + $res = pdo_insert($tableName,$data); + } + #4、判断操作是否超过 + if($res) show_json(1, '操作成功'); + else show_json(0, '操作失败,请刷新页面重试!'); + } + /** + * Comment: 删除分类 + * Author: zzw + * Date: 2019/12/20 14:54 + */ + public function cateDelete(){ + global $_W,$_GPC; + #1、参数获取 + $plugin = $_GPC['plugin'] OR show_json(0,'参数错误,请刷新重试!'); + $id = $_GPC['id']; + #2、表获取 + switch ($plugin) { + case 'rush': + $tableName = PDO_NAME."rush_category"; + break;//抢购 + case 'groupon': + $tableName = PDO_NAME."groupon_category"; + break;//团购 + case 'wlfightgroup': + $tableName = PDO_NAME."fightgroup_category"; + break;//拼团 + case 'bargain': + $tableName = PDO_NAME."bargain_category"; + break;//砍价 + } + #3、删除分类 + $res = pdo_delete($tableName,['id'=>$id]); + #4、判断操作是否超过 + if($res) show_json(1, '操作成功'); + else show_json(0, '操作失败,请刷新页面重试!'); + } + /** + * Comment: 导入商家分类信息 + * Author: zzw + * Date: 2019/12/20 15:27 + */ + public function cateImportShop(){ + global $_W,$_GPC; + global $_W,$_GPC; + #1、参数获取 + $plugin = $_GPC['plugin'] OR show_json(0,'参数错误,请刷新重试!'); + #2、表获取 + switch ($plugin) { + case 'rush': + $tableName = PDO_NAME."rush_category"; + break;//抢购 + case 'groupon': + $tableName = PDO_NAME."groupon_category"; + break;//团购 + case 'wlfightgroup': + $tableName = PDO_NAME."fightgroup_category"; + break;//拼团 + case 'bargain': + $tableName = PDO_NAME."bargain_category"; + break;//砍价 + case 'activity': + $tableName = PDO_NAME."activity_category"; + break;//活动 + } + #3、商家分类获取(仅获取一级) + $shopList = pdo_fetchall("SELECT `name`,thumb FROM ".tablename(PDO_NAME."category_store") + ." WHERE aid = {$_W['aid']} AND uniacid = {$_W['uniacid']} AND parentid = 0 AND state = 0 ORDER BY displayorder ASC "); + #4、获取当前分类列表最大排序 + $where = " WHERE aid = {$_W['aid']} AND uniacid = {$_W['uniacid']} "; + if($plugin == 'wlfightgroup'){ + $max = pdo_fetchcolumn("SELECT MAX(listorder) FROM ".tablename($tableName).$where); + }else{ + $max = pdo_fetchcolumn("SELECT MAX(sort) FROM ".tablename($tableName).$where); + } + #4、循环进行导入操作 + foreach ($shopList as $key => $val) { + $max++; + $data = [ + 'aid' => $_W['aid'] , + 'uniacid' => $_W['uniacid'] , + 'name' => $val['name'] , + ]; + //根据类型 进行排序和图片的定义 + if($plugin == 'wlfightgroup'){ + $data['logo'] = $val['thumb']; + $data['listorder'] = $max; + }else if($plugin == 'activity'){ + $data['logo'] = $val['thumb']; + $data['sort'] = $max; + $data['status'] = 1; + } else{ + $data['thumb'] = $val['thumb']; + $data['sort'] = $max; + } + //判断是否已经存在同名称的分类 不存在则添加 存在则跳过 + if(!pdo_get($tableName,['name'=>$data['name'],'uniacid'=>$_W['uniacid'],'aid'=>$_W['aid']])){ + pdo_insert($tableName,$data); + } + } + + show_json(1, '操作成功'); + } + +} \ No newline at end of file diff --git a/addons/weliam_smartcity/web/controller/goodshouse/goodshouse.ctrl.php b/addons/weliam_smartcity/web/controller/goodshouse/goodshouse.ctrl.php new file mode 100644 index 0000000..1876572 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/goodshouse/goodshouse.ctrl.php @@ -0,0 +1,1113 @@ +$goods['sid']),'aid'); + } + empty($goods['name']) && wl_message('请填写商品名称'); + empty($goods['num']) && wl_message('请填写商品数量'); + if($goods['creditmoney'] > $goods['price'] && $goods['creditmoney'] > 0) wl_message('积分抵扣金额不能大于商品金额'); + //判断开启多规格时 是否添加了多规格信息 + if ($_GPC['optionstatus'] == 1 && count($_GPC['spec_id']) <= 0) wl_message('请设置多规格信息'); + $goods['cutoffstatus'] = $_GPC['cutoffstatus']; + $goods['optionstatus'] = $_GPC['optionstatus']; + $goods['independent'] = $_GPC['independent']; + $goods['isdistri'] = $_GPC['isdistri']; + $goods['isdistristatus']= $_GPC['isdistristatus']; + $goods['vipstatus'] = $_GPC['vipstatus']; + $goods['detail'] = base64_encode(htmlspecialchars_decode($goods['detail'])); + $goods['describe'] = base64_encode(htmlspecialchars_decode($goods['describe'])); + $goods['thumbs'] = serialize($goods['thumbs']); + $goods['extension_img'] = serialize($goods['extension_img']); + $tag = $_GPC['tag']; + $goods['tag'] = serialize($tag); + $userlabel = $_GPC['userlabel']; + $goods['userlabel'] = serialize($userlabel); + $level = $_GPC['level']; + $goods['level'] = serialize($level); + $goods['name'] = htmlspecialchars_decode($goods['name']); + $time = $_GPC['time']; + $goods['starttime'] = strtotime($time['start']); + $goods['endtime'] = strtotime($time['end']); + $goods['cutofftime'] = strtotime($_GPC['cutofftime']); + $goods['cateid'] = intval($_GPC['cateid']); + $goods['pay_type'] = serialize($_GPC['pay_type']); + $goods['cash_back'] = $_GPC['cash_back'] ? : 0; + $goods['return_proportion'] = $_GPC['return_proportion'] ? : 0; + $goods['yuecashback'] = sprintf("%.2f",$goods['yuecashback']); + $goods['vipyuecashback'] = sprintf("%.2f",$goods['vipyuecashback']); + + if ($goods['cash_back'] == 1 && $goods['return_proportion'] < 1) wl_message('请填写返现比例'); + if(!$id){ + $goods['aid'] = pdo_getcolumn(PDO_NAME.'merchantdata',array('id'=>$goods['sid']),'aid'); + } + //抢购状态通过抢购时间判断 + if (is_store()) { + $audits = pdo_getcolumn(PDO_NAME . 'merchantdata' , ['id' => $_W['storeid']] , 'audits'); + if (empty($audits)) { + $goods['status'] = 5; + } + } + if ($goods['status'] != 5) { + if(!empty($_GPC['tostatus'])){ + if ($goods['starttime'] > time()) { + $goods['status'] = 1; + } + else if ($goods['starttime'] < time() && time() < $goods['endtime']) { + $goods['status'] = 2; + } + else if ($goods['endtime'] < time()) { + $goods['status'] = 3; + } + }else{ + $goods['status'] = 4; + } + } + //使用类型 + if($goods['usestatus'] == 3){ + $goods['optionstatus'] = 0; + $goods['appointstatus'] = 0; + $goods['allowapplyre'] = 1; + $goods['overrefund'] = 0; + } + + //定时购买 + if ($goods['usedatestatus'] == 1) { + $goods['week'] = serialize($goods['week']); + $goods['day'] = ''; + }else if ($goods['usedatestatus'] == 2) { + $goods['day'] = serialize($goods['day']); + $goods['week'] = ''; + }else{ + $goods['usedatestatus'] = 0; + $goods['week'] = ''; + $goods['day'] = ''; + } + //会员减免 + if($goods['vipstatus'] == 1){ + $viparray = []; + $vipleid = $_GPC['vipleid']; + $vipprice = $_GPC['vipprice']; + $storeset = $_GPC['storeset']; + foreach($vipleid as $key => $vle){ + $vipa['vipprice'] = sprintf("%.2f",$vipprice[$key]); + $vipa['storeset'] = sprintf("%.2f",$storeset[$key]); + $viparray[$vle] = $vipa; + } + $goods['viparray'] = serialize($viparray); + } + //分销商分佣数组 + if(empty($goods['isdistri'])){ + $disarray = []; + $disleid = $_GPC['disleid']; + $onedismoney = $_GPC['onedismoney']; + $twodismoney = $_GPC['twodismoney']; + foreach($disleid as $dkey => $dle){ + $dlea['onedismoney'] = sprintf("%.2f",$onedismoney[$dkey]); + $dlea['twodismoney'] = sprintf("%.2f",$twodismoney[$dkey]); + $disarray[$dle] = $dlea; + } + $goods['disarray'] = serialize($disarray); + } + //预约数组 + if($goods['appointstatus']>0){ + $appointarray = []; + $appstartTime = $_GPC['appstartTime']; + $appendTime = $_GPC['appendTime']; + $peoplenums = $_GPC['peoplenums']; + if(!is_array($appstartTime)){ + wl_message('请设置预约时间段信息!'); + } + foreach($appstartTime as $appkey => $appoint){ + $appinta['startTime'] = $appstartTime[$appkey]; + $appinta['endTime'] = $appendTime[$appkey]; + $appinta['peoplenums'] = $peoplenums[$appkey]; + $appointarray[] = $appinta; + } + $goods['appointarray'] = serialize($appointarray); + } + + if ($plugin == 'rush') { + //商品阶梯价操作 + $goods['lp_status'] = $_GPC['lp_status'] ? : 0; + $goods['lp_set'] = is_array($_GPC['ld']) ? serialize(array_values($_GPC['ld'])) : ''; + // 特定商品类型参数 + if (empty($_GPC['cc_id']) || !is_numeric($_GPC['cc_id'])) wl_message('请选择商品类型,若显示为空,请联系管理员'); + if (empty($_GPC['cc_child_id']) || !is_numeric($_GPC['cc_child_id'])) wl_message('请选择商品分类'); + $goods['cc_id'] = $_GPC['cc_id']; + $goods['cc_child_id'] = $_GPC['cc_child_id']; + if ($goods['lp_status'] == 1 && is_array($_GPC['ld'])) { + $lpSet = array_values($_GPC['ld']); + $maxMax = max(array_column($lpSet , 'max')); + if ($maxMax > $goods['num']) { + wl_message('阶梯价上限不可超过最大库存!'); + } + } + + if (!empty($id)) { + Rush::updateActive($goods , ['id' => $id]); + } + else { + $id = Rush::saveRushActive($goods); + } + } + else if ($plugin == 'groupon') { + + if (!empty($id)) { + Groupon::updateActive($goods , ['id' => $id]); + } + else { + $id = Groupon::savegrouponActive($goods); + } + } + else if ($plugin == 'fightgroup') { + if($goods['peoplenum'] <= 1) wl_message('成团人数最小为2'); + if($goods['grouptime'] <= 0) wl_message('请填写组团时间'); + $goods['merchantid'] = $goods['sid']; + unset($goods['sid']); + $goods['listorder'] = $goods['sort']; + unset($goods['sort']); + $goods['limitstarttime'] = $goods['starttime']; + unset($goods['starttime']); + $goods['limitendtime'] = $goods['endtime']; + unset($goods['endtime']); + $goods['logo'] = $goods['thumb']; + unset($goods['thumb']); + $goods['adv'] = $goods['thumbs']; + unset($goods['thumbs']); + $goods['stock'] = $goods['num']; + unset($goods['num']); + $goods['falsesalenum'] = $goods['allsalenum']; + unset($goods['allsalenum']); + $goods['vipdiscount'] = $goods['vipprice']; + unset($goods['vipprice']); + $goods['specstatus'] = $goods['optionstatus']; + unset($goods['optionstatus']); + $goods['categoryid'] = $goods['cateid']; + unset($goods['cateid']); + unset($goods['pftid']); + if($goods['is_lucky'] > 0){ + $goods['luckynum'] = floor($goods['luckynum']); + if($goods['luckynum'] <= 1) { + $goods['luckynum'] = 1; + } + if($goods['luckynum'] > $goods['peoplenum']){ + wl_message('幸运人数不能超过组团人数:'.$goods['peoplenum'].'人'); + } + $goods['luckymoney'] = sprintf("%.2f",$goods['luckymoney']); + } + if (!empty($id)) { + Wlfightgroup::updateGoods($goods , $id); + } + else { + $id = Wlfightgroup::saveGoods($goods); + } + } + else if ($plugin == 'bargain') { + //砍价规则 + $rule_pice = $_GPC['rule_pice']; + $rule_start = $_GPC['rule_start']; + $rule_end = $_GPC['rule_end']; + $len = count($rule_pice); + $bargainrule = []; + for ($k = 0 ; $k < $len ; $k++) { + $bargainrule[$k]['rule_pice'] = $rule_pice[$k]; + $bargainrule[$k]['rule_start'] = $rule_start[$k]; + $bargainrule[$k]['rule_end'] = $rule_end[$k]; + } + $bargainrule = serialize($bargainrule); + $goods['rules'] = $bargainrule; + $goods['bar_image'] = $_GPC['bar_image']; + $goods['bar_bgc'] = $_GPC['bar_bgc']; + + $goods['stock'] = $goods['num']; + unset($goods['num']); + $goods['falsejoinnum'] = $goods['allsalenum']; + unset($goods['allsalenum']); + unset($goods['optionstatus']); + unset($goods['pftid']); + + if (!empty($id)) { + Bargain::updateActive($goods , ['id' => $id]); + } + else { + $id = Bargain::saveActive($goods); + } + } + + //清理海报缓存 + Tools::clearposter(); + + //保存规格 + if ($goods['optionstatus'] || $goods['specstatus']) { + $this->spec_save($id , $plugin); + if($plugin == 'rush'){ + $optionList = pdo_getall(PDO_NAME."goods_option",['type'=>1,'goodsid'=>$id],['stock']); + $totalnum = array_sum(array_column($optionList,'stock')); + pdo_update('wlmerchant_rush_activity',array('num' => $totalnum),array('id' => $id)); + }else if($plugin == 'groupon'){ + $optionList = pdo_getall(PDO_NAME."goods_option",['type'=>3,'goodsid'=>$id],['stock']); + $totalnum = array_sum(array_column($optionList,'stock')); + pdo_update('wlmerchant_groupon_activity',array('num' => $totalnum),array('id' => $id)); + }else if($plugin == 'fightgroup'){ + $optionList = pdo_getall(PDO_NAME."goods_option",['type'=>2,'goodsid'=>$id],['stock']); + $totalnum = array_sum(array_column($optionList,'stock')); + pdo_update('wlmerchant_fightgroup_goods',array('stock' => $totalnum),array('id' => $id)); + } + } + $page = $_GPC['page']; + //编辑商品成功 + $this->save_success($goods , $plugin,$page); + } + /*************************************************************************************************************/ + //商品分类 + $cate = pdo_getall('wlmerchant_' . $plugin . '_category' , [ + 'uniacid' => $_W['uniacid'] , + 'aid' => $_W['aid'] , + 'is_show' => 0 + ]); + if ($plugin == 'rush') { + //专题分类 + $specials = pdo_getall('wlmerchant_rush_special' , ['uniacid' => $_W['uniacid'] , 'aid' => $_W['aid']]); + } + //运费模板 + if(is_store()){ + $express = pdo_fetchall("SELECT * FROM ".tablename('wlmerchant_express_template')."WHERE uniacid = {$_W['uniacid']} AND aid = {$_W['aid']} AND sid IN (0,{$_W['storeid']}) ORDER BY id DESC"); + }else{ + $express = pdo_fetchall("SELECT * FROM ".tablename('wlmerchant_express_template')."WHERE uniacid = {$_W['uniacid']} AND aid = {$_W['aid']} ORDER BY id DESC"); + } + //社群 + $communitylist = pdo_getall('wlmerchant_community' , [ + 'uniacid' => $_W['uniacid'] , + 'aid' => $_W['aid'] + ] , ['id' , 'communname']); + //分销设置 + $distriset = p('distribution') ? Setting::wlsetting_read('distribution') : []; + //分销商等级 + if($distriset['switch'] > 0){ + $dislevel = pdo_getall('wlmerchant_dislevel', array('uniacid' => $_W['uniacid']),['id','name']); + } + //用户标签 + $labels = pdo_getall('wlmerchant_userlabel' , ['uniacid' => $_W['uniacid']] , [ + 'id' , + 'name' + ] , '' , 'sort DESC'); + //一卡通等级 + $levels = pdo_fetchall("SELECT * FROM " . tablename('wlmerchant_halflevel') . "WHERE uniacid = {$_W['uniacid']} AND status = 1 ORDER BY sort DESC"); + + //商品标签 + $tag_type = ['rush' => 1 , 'groupon' => 3 , 'bargain' => 4 , 'fightgroup' => 2]; + $presettags = pdo_getall('wlmerchant_tags' , [ + 'uniacid' => $_W['uniacid'] , + 'aid' => $_W['aid'] , + 'type' => $tag_type[$plugin] + ] , ['id' , 'title'] , '' , 'sort DESC'); + //自定义海报 + if (p('diyposter')) { + $poster_type = ['rush' => 2 , 'groupon' => 5 , 'bargain' => 7 , 'fightgroup' => 6]; + $posters = pdo_getall(PDO_NAME . 'poster' , [ + 'uniacid' => $_W['uniacid'] , + 'type' => $poster_type[$plugin] + ] , ['id' , 'title']); + } + //支付有礼 + if(p('paidpromotion')){ + $paidlist = pdo_getall('wlmerchant_payactive',array('uniacid' => $_W['uniacid'],'aid' => $_W['aid'],'status' => 1),array('id','title')); + } + //锦鲤抽奖 + if(agent_p('luckydraw')){ + $drawlist = pdo_getall('wlmerchant_luckydraw',array('uniacid' => $_W['uniacid'],'aid' => $_W['aid'],'status' => 1),array('id','title')); + } + + if ($id > 0) { + if ($plugin == 'rush') { + $goods = Rush::getSingleActive($id , '*'); + $goods['lp_set'] = unserialize($goods['lp_set']); + + } + else if ($plugin == 'groupon') { + $goods = Groupon::getSingleActive($id , '*'); + } + else if ($plugin == 'bargain') { + $goods = Bargain::getSingleActive($id , '*'); + $goods['rules'] = unserialize($goods['rules']); + $goods['num'] = $goods['stock']; + $goods['allsalenum'] = $goods['falsejoinnum']; + if(empty($goods['bar_bgc'])){ + $goods['bar_bgc'] = '#68d3ff'; + } + + } + else if ($plugin == 'fightgroup') { + $goods = Wlfightgroup::getSingleGood($id , '*'); + $goods['sid'] = $goods['merchantid']; + $goods['sort'] = $goods['listorder']; + $goods['starttime'] = $goods['limitstarttime']; + $goods['endtime'] = $goods['limitendtime']; + $goods['thumb'] = $goods['logo']; + $goods['thumbs'] = $goods['adv']; + $goods['num'] = $goods['stock']; + $goods['allsalenum'] = $goods['falsesalenum']; + $goods['vipprice'] = $goods['vipdiscount']; + $goods['optionstatus'] = $goods['specstatus']; + $goods['cateid'] = $goods['categoryid']; + } + + $merchant = Rush::getSingleMerchant($goods['sid'] , 'id,storename,logo,groupid'); + $goods['thumbs'] = unserialize($goods['thumbs']); + $tags = unserialize($goods['tag']); + $orderinfo = unserialize($goods['orderinfo']); + $userlabel = unserialize($goods['userlabel']); + $goods['level'] = unserialize($goods['level']); + //规格 + $data = $this->spec_html($id , $plugin); + $html = $data['html']; + $allspecs = $data['allspecs']; + $options = $data['options']; + if(!empty($options)){ + foreach($options as &$option){ + $option['viparray'] = unserialize($option['viparray']); + $option['disarray'] = unserialize($option['disarray']); + } + } + + if ($goods['usedatestatus'] == 1) { + $goods['week'] = unserialize($goods['week']); + } + if ($goods['usedatestatus'] == 2) { + $goods['day'] = unserialize($goods['day']); + } + if($goods['vipstatus'] == 1){ + $viparray = unserialize($goods['viparray']); + } + if(empty($goods['isdistri'])){ + $disarray = unserialize($goods['disarray']); + } + if(!empty($goods['appointarray'])){ + $goods['appointarray'] = unserialize($goods['appointarray']); + } + } + + if (empty($goods['starttime']) || empty($goods['endtime'])) {//初始化时间 + $goods['starttime'] = time(); + $goods['endtime'] = strtotime('+1 month'); + $goods['cutofftime'] = strtotime('+2 month'); + } + //推广图片反序列化 + $goods['extension_img'] = unserialize($goods['extension_img']); + //支付方式 + $goods['pay_type'] = unserialize($goods['pay_type']); + //满减活动 + if(p('fullreduce')){ + $fullreducelist = pdo_getall('wlmerchant_fullreduce_list',array('aid' => $_W['aid'],'uniacid' => $_W['uniacid']),array('id','title')); + } + //获取自定义表单信息 + $formWhere = ['uniacid'=>$_W['uniacid'],'aid'=>$_W['aid']]; + if(is_store()) $formWhere['sid'] = $_W['storeid']; + $diyFormList = pdo_getall(PDO_NAME."diyform",$formWhere,['id','title'],'','create_time DESC,id DESC'); + //富文本处理 + if(is_base64($goods['detail'])) $goods['detail'] = htmlspecialchars_decode(base64_decode($goods['detail'])); + if(is_base64($goods['describe'])) $goods['describe'] = htmlspecialchars_decode(base64_decode($goods['describe'])); + // 获取特殊商品类型 + if (!is_store() && empty($goods['pftid'])) { + $cc_data = Category::getStoreCategory(); + } else { + $cc_data = Category::getStoreCategoryAll($_W['storeid']); + } + + include wl_template('goodshouse/createactive'); + } + + /** + * 添加规格子项 + */ + public function spec() + { + global $_W , $_GPC; + $spec = ['id' => random(32) , 'title' => $_GPC['title']]; + include wl_template('goodshouse/spec'); + } + + /** + * 添加规格项 + */ + public function spec_item() + { + global $_W , $_GPC; + $spec = ['id' => $_GPC['specid']]; + $specitem = ['id' => random(32) , 'title' => $_GPC['title'] , 'show' => 1]; + include wl_template('goodshouse/spec_item'); + } + /** + * 完善图片链接 + */ + public function jstomedia(){ + global $_W , $_GPC; + $thumb = tomedia($_GPC['thumb']); + die($thumb); + } + + /** + * 根据规格生成html + * @param $id + * @param $plugin + * @param $distriset + * @return string + */ + private function spec_html($id , $plugin) + { + global $_W; + $html = ''; + if ($plugin == 'bargain') { + return $html; + } + $type = $this->spec_type($plugin); + + $allspecs = pdo_fetchall('select * from ' . tablename('wlmerchant_goods_spec') . ' where goodsid=:id AND type = :type order by displayorder asc' , [ + ':id' => $id , + ':type' => $type + ]); + foreach ($allspecs as &$s) { + $s['items'] = pdo_fetchall("SELECT * FROM " . tablename('wlmerchant_goods_spec_item') . "WHERE uniacid = {$_W['uniacid']} AND specid = {$s['id']} ORDER BY displayorder ASC"); + } + unset($s); + $options = pdo_fetchall('select * from ' . tablename('wlmerchant_goods_option') . ' where goodsid=:id and type = :type order by id asc' , [ + ':id' => $id , + ':type' => $type + ]); + $specs = []; + if (0 < count($options)) { + $specitemids = explode('_' , $options[0]['specs']); + foreach ($specitemids as $itemid) { + foreach ($allspecs as $ss) { + $items = $ss['items']; + foreach ($items as $it) { + while ($it['id'] == $itemid) { + $specs[] = $ss; + break; + } + } + } + } + $html = ''; + $html .= ''; + $html .= ''; + $html .= ''; + $len = count($specs); + $newlen = 1; + $h = []; + $rowspans = []; + $i = 0; + while ($i < $len) { + $html .= ''; + $itemlen = count($specs[$i]['items']); + if ($itemlen <= 0) { + $itemlen = 1; + } + $newlen *= $itemlen; + $h = []; + $j = 0; + while ($j < $newlen) { + $h[$i][$j] = []; + ++$j; + } + $l = count($specs[$i]['items']); + $rowspans[$i] = 1; + $j = $i + 1; + while ($j < $len) { + $rowspans[$i] *= count($specs[$j]['items']); + ++$j; + } + ++$i; + } + //已售 + $html .= ''; + //缩略图 + $html .= ''; + + if ($plugin == 'fightgroup') { + $html .= ''; + $html .= ''; + $html .= ''; + if(!is_store()){ + $html .= ''; + } + //$html .= ''; + //if(!is_store()) $html .= ''; + } + else { + $html .= ''; + $html .= ''; + //$html .= ''; + if(!is_store()) { + $html .= ''; + } + //$html .= ''; + //if(!is_store()) $html .= ''; + } + +// if ($distriset['ranknum'] > 1) { +// if(!is_store()) $html .= ''; +// } +// if ($distriset['ranknum'] > 2) { +// if(!is_store()) $html .= ''; +// } + $html .= ''; + $m = 0; + while ($m < $len) { + $k = 0; + $kid = 0; + $n = 0; + $j = 0; + while ($j < $newlen) { + $rowspan = $rowspans[$m]; + if (($j % $rowspan) == 0) { + $h[$m][$j] = [ + 'html' => '' , + 'id' => $specs[$m]['items'][$kid]['id'] + ]; + } + else { + $h[$m][$j] = ['html' => '' , 'id' => $specs[$m]['items'][$kid]['id']]; + } + ++$n; + if ($n == $rowspan) { + ++$kid; + if ((count($specs[$m]['items']) - 1) < $kid) { + $kid = 0; + } + $n = 0; + } + ++$j; + } + ++$m; + } + $hh = ''; + $i = 0; + while ($i < $newlen) { + $hh .= ''; + $ids = []; + $j = 0; + while ($j < $len) { + $hh .= $h[$j][$i]['html']; + + $ids[] = $h[$j][$i]['id']; + ++$j; + } + $ids = implode('_' , $ids); + $val = [ + 'id' => '' , + 'title' => '' , + 'stock' => '' , + 'price' => '' , + 'vipprice' => '' , + 'settlementmoney' => '' , + 'vipsettlementmoney' => '' , + 'onedismoney' => '' , + 'twodismoney' => '' , + 'threedismoney' => '' + ]; + foreach ($options as $o) { + while ($ids === $o['specs']) { + if ($type == 1) { + //抢购商品的销量 + $stopBuyNum = WeliamWeChat::getSalesNum(1,$id,$o['id'],1,0); + }else if($type == 2){ + $stopBuyNum = WeliamWeChat::getSalesNum(3,$id,$o['id'],1,0); + }else if($type == 3){ + $stopBuyNum = WeliamWeChat::getSalesNum(2,$id,$o['id'],1,0); + } + $stopBuyNum = !empty($stopBuyNum) ? $stopBuyNum : 0; + $val = [ + 'id' => $o['id'] , + 'title' => $o['title'] , + 'stock' => $o['stock'] , + 'price' => $o['price'] , + 'vipprice' => $o['vipprice'] , + 'settlementmoney' => $o['settlementmoney'] , + 'vipsettlementmoney' => $o['vipsettlementmoney'] , + 'onedismoney' => $o['onedismoney'] , + 'twodismoney' => $o['twodismoney'] , + 'threedismoney' => $o['threedismoney'], + 'thumb' => $o['thumb'], + 'salenum' => $stopBuyNum + ]; + break; + } + } + //已售 + $hh .= ''; + //图片 + $hh .= ''; + + + $hh .= ''; + $hh .= ''; + $hh .= ''; + $hh .= ''; + $hh .= ''; + if($plugin == 'fightgroup'){ + $hh .= ''; + } + if(!is_store()) { + $hh .= ''; + } + //$hh .= ''; +// if(!is_store()) $hh .= ''; +// if ($distriset['ranknum'] > 1) { +// if(!is_store()) $hh .= ''; +// } +// if ($distriset['ranknum'] > 2) { +// if(!is_store()) $hh .= ''; +// } + $hh .= ''; + ++$i; + } + $html .= $hh; + $html .= '
' . $specs[$i]['title'] . '
已售
预览图
总数
拼团价
单购价
结算价
会员结算价
一级分销
总数
抢购价
会员价
结算价
会员结算价
一级分销
二级分销
三级分销
' . $specs[$m]['items'][$kid]['title'] . '
'; + $hh .= '
'.$val['salenum'].'
'; + $hh .= '
'; + $hh .= ''; + $hh .= ' '; + $hh .= ''; + $hh .= ''; + $hh .= '
'; + } + $data['html'] = $html; + $data['allspecs'] = $allspecs; + $data['options'] = $options; + return $data; + } + + /** + * 插件规格对应的类型 + * @param $plugin + * @return mixed + */ + private function spec_type($plugin) + { + $spec_types = ['rush' => 1 , 'groupon' => 3 , 'fightgroup' => 2]; + return $spec_types[$plugin]; + } + + /** + * 规格保存 + * @param $id + * @param $plugin + */ + private function spec_save($id , $plugin) + { + global $_W,$_GPC; + $type = $this->spec_type($plugin); + $totalstocks = 0; + $spec_ids = $_POST['spec_id']; + $spec_titles = $_POST['spec_title']; + $specids = []; + $len = count($spec_ids); + $specids = []; + $spec_items = []; + $k = 0; + while ($k < $len) { + $spec_id = ''; + $get_spec_id = $spec_ids[$k]; + $a = [ + 'uniacid' => $_W['uniacid'] , + 'goodsid' => $id , + 'displayorder' => $k , + 'title' => $spec_titles[$get_spec_id] + ]; + if (is_numeric($get_spec_id)) { //判断是否是数字或字符串 + pdo_update('wlmerchant_goods_spec' , $a , ['id' => $get_spec_id]); + $spec_id = $get_spec_id; + } + else { + $a['type'] = $type; + pdo_insert('wlmerchant_goods_spec' , $a); + $spec_id = pdo_insertid(); + } + $spec_item_ids = $_POST['spec_item_id_' . $get_spec_id]; + $spec_item_titles = $_POST['spec_item_title_' . $get_spec_id]; + $spec_item_shows = $_POST['spec_item_show_' . $get_spec_id]; + $spec_item_virtuals = $_POST['spec_item_virtual_' . $get_spec_id]; + $itemlen = count($spec_item_ids); + $itemids = []; + $n = 0; + while ($n < $itemlen) { + $item_id = ''; + $get_item_id = $spec_item_ids[$n]; + $d = [ + 'uniacid' => $_W['uniacid'] , + 'specid' => $spec_id , + 'displayorder' => $n , + 'title' => $spec_item_titles[$n] , + 'show' => $spec_item_shows[$n] , + ]; + if (is_numeric($get_item_id)) { + pdo_update('wlmerchant_goods_spec_item' , $d , ['id' => $get_item_id]); + $item_id = $get_item_id; + } + else { + pdo_insert('wlmerchant_goods_spec_item' , $d); + $item_id = pdo_insertid(); + } + $itemids[] = $item_id; + $d['get_id'] = $get_item_id; + $d['id'] = $item_id; + $spec_items[] = $d; + ++$n; + } + if (0 < count($itemids)) { + pdo_query('delete from ' . tablename('wlmerchant_goods_spec_item') . ' where specid=' . $spec_id . ' and id not in (' . implode(',' , $itemids) . ')'); + } + else { + pdo_query('delete from ' . tablename('wlmerchant_goods_spec_item') . ' where specid=' . $spec_id); + } + pdo_update('wlmerchant_goods_spec' , ['content' => serialize($itemids)] , ['id' => $spec_id]); + $specids[] = $spec_id; + ++$k; + } + if (0 < count($specids)) { + pdo_query('delete from ' . tablename('wlmerchant_goods_spec') . ' where type = ' . $type . ' and goodsid=' . $id . ' and id not in (' . implode(',' , $specids) . ')'); + } + else { + pdo_query('delete from ' . tablename('wlmerchant_goods_spec') . ' where type = ' . $type . ' and goodsid=' . $id); + } + + $optionArray = json_decode($_POST['optionArray'] , true); + $option_idss = $optionArray['option_ids']; + $len = count($option_idss); + $optionids = []; + $k = 0; + while ($k < $len) { + $option_id = ''; + $ids = $option_idss[$k]; + $get_option_id = $optionArray['option_id'][$k]; + $idsarr = explode('_' , $ids); + $newids = []; + foreach ($idsarr as $key => $ida) { + foreach ($spec_items as $it) { + while ($it['get_id'] == $ida) { + $newids[] = $it['id']; + break; + } + } + } + $newids = implode('_' , $newids); + $a = [ + 'uniacid' => $_W['uniacid'] , + 'thumb' => $optionArray['option_thumb'][$k] , + 'stock' => $optionArray['option_stock'][$k] , + 'title' => $optionArray['option_title'][$k] , + 'price' => $optionArray['option_price'][$k] , + 'vipprice' => $optionArray['option_vipprice'][$k] , +// 'settlementmoney' => $optionArray['option_settlementmoney'][$k] , +// 'vipsettlementmoney' => $optionArray['option_vipsettlementmoney'][$k] , +// 'onedismoney' => $optionArray['option_onedismoney'][$k] , +// 'twodismoney' => $optionArray['option_twodismoney'][$k] , +// 'threedismoney' => $optionArray['option_threedismoney'][$k] , + 'goodsid' => $id , + 'specs' => $newids , + 'type' => $type + ]; + if(!is_store()){ + $a['settlementmoney'] = $optionArray['option_settlementmoney'][$k]; + } + //会员减免 + $viparray = []; + $vipleidkword = 'vipleid'.$get_option_id; + $vippricekword = 'vipprice'.$get_option_id; + $storesetkword = 'storeset'.$get_option_id; + $vipleid = $_GPC[$vipleidkword]; + $vipprice = $_GPC[$vippricekword]; + $storeset = $_GPC[$storesetkword]; + foreach($vipleid as $key => $vle){ + $vipa['vipprice'] = sprintf("%.2f",$vipprice[$key]); + $vipa['storeset'] = sprintf("%.2f",$storeset[$key]); + $viparray[$vle] = $vipa; + } + $a['viparray'] = serialize($viparray); + //分销佣金 + $disarray = []; + $disleidkword = 'disleid'.$get_option_id; + $onedismoneykword = 'onedismoney'.$get_option_id; + $twodismoneykword = 'twodismoney'.$get_option_id; + $disleid = $_GPC[$disleidkword]; + $onedismoney = $_GPC[$onedismoneykword]; + $twodismoney = $_GPC[$twodismoneykword]; + foreach($disleid as $keyy => $dddle){ + $dddleaa['onedismoney'] = sprintf("%.2f",$onedismoney[$keyy]); + $dddleaa['twodismoney'] = sprintf("%.2f",$twodismoney[$keyy]); + $disarray[$dddle] = $dddleaa; + } + $a['disarray'] = serialize($disarray); + $totalstocks += $a['stock']; + if (empty($get_option_id)) { + pdo_insert('wlmerchant_goods_option' , $a); + $option_id = pdo_insertid(); + } + else { + pdo_update('wlmerchant_goods_option' , $a , ['id' => $get_option_id]); + $option_id = $get_option_id; + } + $optionids[] = $option_id; + ++$k; + } + if (0 < count($optionids)) { + pdo_query('delete from ' . tablename('wlmerchant_goods_option') . ' where type = ' . $type . ' AND goodsid=' . $id . ' and id not in ( ' . implode(',' , $optionids) . ')'); + } + else { + pdo_query('delete from ' . tablename('wlmerchant_goods_option') . ' where type = ' . $type . ' AND goodsid=' . $id); + } + } + + private function save_success($goods , $plugin,$page = 1) + { + global $_W; + $plugins = [ + 'rush' => ['name' => '抢购' , 'url' => web_url('rush/active/activelist',array('page'=>$page))] , + 'groupon' => ['name' => '团购' , 'url' => web_url('groupon/active/activelist',array('page'=>$page))] , + 'fightgroup' => ['name' => '拼团' , 'url' => web_url('wlfightgroup/fightgoods/ptgoodslist',array('page'=>$page))] , + 'bargain' => ['name' => '砍价' , 'url' => web_url('bargain/bargain_web/activitylist',array('page'=>$page))] , + ]; + + if ($goods['status'] == 5) { + $storename = pdo_getcolumn(PDO_NAME . 'merchantdata' , ['id' => $_W['storeid']] , 'storename'); + //审核通知代理 + $first = '您好,您有一个待审核任务需要处理'; + $type = '审核商品'; + $content = $plugins[$plugin]['name'] . '商品:' . $goods['name']; + $status = '待审核'; + $remark = '商户[' . $storename . ']上传了一个' . $plugins[$plugin]['name'] . '商品待审核,请管理员尽快前往后台审核'; + News::noticeAgent('storegood' , $_W['aid'] , $first , $type , $content , $status , $remark , time() , ''); + + } + wl_message('保存成功!' , $plugins[$plugin]['url'] , 'success'); + } + + public function selectMerchant() + { + global $_W , $_GPC; + $where = []; + $where['uniacid'] = $_W['uniacid']; + $where['aid'] = $_W['aid']; + $where['status'] = 2; + $where['enabled'] = 1; + $where['merchant_type'] = 2;# 新增逻辑必须是商户才可以添加商品 + if ($_GPC['keyword']) $where['@storename@'] = $_GPC['keyword']; + if ($_GPC['enabled']) $where['enabled'] = $_GPC['enabled']; + $merchants = Rush::getNumMerchant('id,storename,logo' , $where , 'ID DESC' , 0 , 0 , 0); + $merchants = $merchants[0]; + foreach ($merchants as $key => &$va) { + $va['logo'] = tomedia($va['logo']); + } + include wl_template('goodshouse/selectMerchant'); + } + + public function rules(){ + include wl_template('goodshouse/rules'); + } + + public function appointarray(){ + global $_W,$_GPC; + $houseflag = $_GPC['house']; + include wl_template('goodshouse/appointhtml'); + } + + /** + * 核销码列表 + */ + public function checklist(){ + global $_W , $_GPC; + $id = $_GPC['id']; + $plugin = $_GPC['plugin']; + $status = $_GPC['status']; //0全部 1已使用 2未使用 + $pindex = max(1,intval($_GPC['page'])); + if(empty($id) || empty($plugin)){ + wl_message('无商品信息', referer(),'error'); + } + //商品信息 + if($plugin == 'rush'){ + $goodinfo = pdo_get('wlmerchant_rush_activity',array('id' => $id),array('name','thumb','sid')); + $goodinfo['thumb'] = tomedia($goodinfo['thumb']); + }else if($plugin == 'groupon'){ + $goodinfo = pdo_get('wlmerchant_groupon_activity',array('id' => $id),array('name','thumb','sid')); + $goodinfo['thumb'] = tomedia($goodinfo['thumb']); + }else if($plugin == 'wlfightgroup'){ + $goodinfo = pdo_get('wlmerchant_fightgroup_goods',array('id' => $id),array('name','logo','merchantid')); + $goodinfo['sid'] = $goodinfo['merchantid']; + $goodinfo['thumb'] = tomedia($goodinfo['logo']); + }else if($plugin == 'bargain'){ + $goodinfo = pdo_get('wlmerchant_bargain_activity',array('id' => $id),array('name','thumb','sid')); + $goodinfo['thumb'] = tomedia($goodinfo['thumb']); + }else if($plugin == 'coupon'){ + $goodinfo = pdo_get('wlmerchant_couponlist',array('id' => $id),array('title','logo','merchantid')); + $goodinfo['name'] = $goodinfo['title']; + $goodinfo['sid'] = $goodinfo['merchantid']; + $goodinfo['thumb'] = tomedia($goodinfo['logo']); + }else if($plugin == 'activity'){ + $goodinfo = pdo_get('wlmerchant_activitylist',array('id' => $id),array('title','thumb','sid')); + $goodinfo['name'] = $goodinfo['title']; + $goodinfo['thumb'] = tomedia($goodinfo['thumb']); + } + //商户信息 + $merchant = pdo_get('wlmerchant_merchantdata',array('id' => $goodinfo['sid']),array('storename','logo')); + $merchant['logo'] = tomedia($merchant['logo']); + //条件筛选 + $where = [ + 'uniacid' => $_W['uniacid'], + 'goodsid' => $id, + 'plugin' => $plugin + ]; + if($status == 1){ + $where['status'] = 1; + }else if($status == 2){ + $where['status'] = 0; + } + $lists = Util::getNumData('*','wlmerchant_checkcodelist',$where,'id DESC',$pindex,25,1); + $list = $lists[0]; + $pager = $lists[1]; + $tatal = $lists[2]; + $typeList = [ + 'rush' => 1, + 'groupon' => 10, + 'wlfightgroup' => 2, + 'bargain' => 12 + ]; + foreach ($list as &$li){ + $li['type'] = $typeList[$li['plugin']]; + } + + include wl_template('goodshouse/checklist'); + } + /** + * 核销码导入 + */ + public function importCode(){ + global $_W , $_GPC; + $gid = $_GPC['gid']; + $plugin = $_GPC['plugin']; + if(empty($gid) || empty($plugin)){ + wl_json(0, '缺少商品数据,请刷新重试'); + } + $filename = $_FILES['file']['name']; + $filename = substr($filename, -4, 4); + if (empty ($filename)) { + wl_json(0, '请选择要导入的CSV文件'); + } + if ($filename !== '.csv') { + wl_json(0, '请选择CSV文件'); + } + $file_path = $_FILES['file']['tmp_name']; + $file_size = filesize($file_path); //文件大小 + if ($file_size == 0) { + wl_json(0, '没有任何数据'); + } + $info = util_csv::read_csv_lines($file_path, 9999, 0); + foreach ($info as $k => $v) { + $checkcode = trim($v[0]); + if(!empty($checkcode)){ + $flag = pdo_getcolumn(PDO_NAME.'checkcodelist',array('uniacid'=>$_W['uniacid'],'checkcode'=>$checkcode),'id'); + if(empty($flag)){ + $data = [ + 'uniacid' => $_W['uniacid'], + 'checkcode' => $checkcode, + 'goodsid' => $gid, + 'plugin' => $plugin, + 'status' => 0 + ]; + pdo_insert(PDO_NAME . 'checkcodelist', $data); + } + } + } + if($plugin == 'rush'){ + pdo_update('wlmerchant_rush_activity',array('checkcodeflag' => 1),array('id' => $gid)); + }else if($plugin == 'groupon'){ + pdo_update('wlmerchant_groupon_activity',array('checkcodeflag' => 1),array('id' => $gid)); + }else if($plugin == 'wlfightgroup'){ + pdo_update('wlmerchant_fightgroup_goods',array('checkcodeflag' => 1),array('id' => $gid)); + }else if($plugin == 'bargain'){ + pdo_update('wlmerchant_bargain_activity',array('checkcodeflag' => 1),array('id' => $gid)); + }else if($plugin == 'coupon'){ + pdo_update('wlmerchant_couponlist',array('checkcodeflag' => 1),array('id' => $gid)); + }else if($plugin == 'activity'){ + pdo_update('wlmerchant_activitylist',array('checkcodeflag' => 1),array('id' => $gid)); + } + wl_json(1, '导入成功'); + } + + public function deletecheckcode(){ + global $_W , $_GPC; + $ids = $_GPC['ids']; + $id = $_GPC['id']; + if(!empty($ids)){ + foreach ($ids as $v) { + pdo_delete('wlmerchant_checkcodelist',array('id'=>$v)); + } + }else{ + pdo_delete('wlmerchant_checkcodelist',array('id'=>$id)); + } + show_json(1, '操作成功'); + } + + public function emptycheckcode(){ + global $_W , $_GPC; + $id = $_GPC['gid']; + $plugin = $_GPC['plugin']; + if(empty($id) || empty($plugin)){ + show_json(0, '无关键参数,请刷新页面重试'); + } + $res = pdo_delete('wlmerchant_checkcodelist',array('goodsid'=>$id,'plugin'=>$plugin,'uniacid' => $_W['uniacid'])); + if($res){ + //修改商品状态 + if($plugin == 'rush'){ + pdo_update('wlmerchant_rush_activity',array('checkcodeflag' => 0),array('id' => $id)); + }else if($plugin == 'groupon'){ + pdo_update('wlmerchant_groupon_activity',array('checkcodeflag' => 0),array('id' => $id)); + }else if($plugin == 'wlfightgroup'){ + pdo_update('wlmerchant_fightgroup_goods',array('checkcodeflag' => 0),array('id' => $id)); + }else if($plugin == 'bargain'){ + pdo_update('wlmerchant_bargain_activity',array('checkcodeflag' => 0),array('id' => $id)); + }else if($plugin == 'coupon'){ + pdo_update('wlmerchant_couponlist',array('checkcodeflag' => 0),array('id' => $id)); + }else if($plugin == 'activity'){ + pdo_update('wlmerchant_activitylist',array('checkcodeflag' => 0),array('id' => $id)); + } + show_json(1, '操作成功'); + }else{ + show_json(0, '操作失败,请刷新页面重试'); + } + } + + public function getClassAll() + { + global $_W , $_GPC; + $cc_id = $_GPC['cc_id']; + $list = Category::getChildCategoryAll($cc_id,['id','name']); + if ($list) show_json(1, ['list' => $list]); + else show_json(2, '数据为空'); + } +} \ No newline at end of file diff --git a/addons/weliam_smartcity/web/controller/store/category.ctrl.php b/addons/weliam_smartcity/web/controller/store/category.ctrl.php new file mode 100644 index 0000000..ffbbbe0 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/store/category.ctrl.php @@ -0,0 +1,129 @@ +$value){ + $childrens = Store::getAllCategory(0,100,$value['id']); + $categorys[$key]['children'] = $childrens['data']; + } + } + include wl_template('store/categoryIndex'); + } + /** + * Comment: 编辑商户 + */ + public function Edit(){ + global $_W,$_GPC; + if(checksubmit('submit')){ + $category = $_GPC['category']; + if(!empty($_GPC['parentid'])){ + $category['parentid'] =intval($_GPC['parentid']); + $category['visible_level']=2; + }else{ + $category['parentid'] =0; + $category['visible_level']=1; + } + $category['name'] = trim($category['name']); + $category['displayorder'] = intval($category['displayorder']); + $category['enabled'] = intval($_GPC['enabled']); + //判断时候有值进行改状态 + if(!empty($category['abroad'])) { + $category['abroad'] = $category['abroad']; + $category['state'] = 1; + } + else { + $category['abroad'] = $category['abroad']; + $category['state'] = 0; + } + + if(Customized::init('storecate1520') > 0){ + $advlogo = $_GPC['advlogo']; + $advlink = $_GPC['advlink']; + $advarray = []; + foreach($advlogo as $dkey => $dle){ + $dlea['thumb'] = $advlogo[$dkey]; + $dlea['link'] = $advlink[$dkey]; + $advarray[] = $dlea; + } + $category['advs'] = serialize($advarray); + } + + if(!empty($_GPC['id'])){ + if(Store::categoryEdit($category,$_GPC['id'])) wl_message('保存成功',web_url('store/category/index'),'success'); + }else{ + if(Store::categoryEdit($category)) wl_message('保存成功',web_url('store/category/index'),'success'); + } + wl_message('保存失败',referer(),'error'); + } + if(!empty($_GPC['id'])) + $category = Store::getSingleCategory($_GPC['id']); + $category['adv'] = unserialize($category['advs']); + + include wl_template('store/categoryEdit'); + } + /** + * Comment: 删除商户 + */ + public function Delete(){ + global $_W,$_GPC; + if(Store::categoryDelete($_GPC['id'])) wl_message('删除成功',web_url('store/category/index'),'success'); + wl_message('删除失败',referer(),'error'); + + } + /** + * Comment: 商户分类获取 + */ + public function getCategory(){ + global $_W,$_GPC; + if(!empty($_GPC['parentid'])){ + $categoryes = Store::getAllCategory(0,100,$_GPC['parentid']); + }else{ + $categoryes = Store::getAllCategory(); + } + $categorys = $categoryes['data']; + die(json_encode(array('status'=>1,'data'=>$categorys,'msg'=>''))); + } + /** + * Comment: 修改状态 + * Author: zzw + * Date: 2019/9/18 16:44 + */ + public function changeStatus (){ + global $_W , $_GPC; + #1、获取参数信息 + $id = $_GPC['id'] OR Commons::sRenderError('缺少参数:导航id'); + $status = $_GPC['status'] ? : 0; + #1、修改操作 + $res = pdo_update(PDO_NAME."category_store",['enabled'=>$status],['id'=>$id]); + if($res) Commons::sRenderSuccess('修改成功'); + else Commons::sRenderError('修改失败,请刷新重试!'); + } + + /** + * Comment: 1520定制一级分类幻灯片页面 + * Author: wlf + * Date: 2021/12/22 15:34 + */ + public function advinfo(){ + global $_W, $_GPC; + $kw = $_GPC['kw']; + include wl_template('store/advinfo'); + } + + + + +} diff --git a/addons/weliam_smartcity/web/controller/store/comment.ctrl.php b/addons/weliam_smartcity/web/controller/store/comment.ctrl.php new file mode 100644 index 0000000..91dcbd1 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/store/comment.ctrl.php @@ -0,0 +1,55 @@ + 8, + 'spstatus' => 1, + 'xqorder' => 7, + 'xqstatus' => 1, + 'dtorder' => 6, + 'dtstatus' => 1, + 'plorder' => 5, + 'plstatus' => 1, + 'xcorder' => 4, + 'xcstatus' => 1, + 'xcxmorder' => 3, + 'xcxmstatus' => 1, + 'sjzzorder' => 2, + 'sjzzstatus' => 1, + 'zporder' => 1, + 'zpstatus' => 1, + ]; + }else{ + $order = unserialize($storeSet['order']); + } + + include wl_template('store/storeSet'); + } +} diff --git a/addons/weliam_smartcity/web/controller/store/group.ctrl.php b/addons/weliam_smartcity/web/controller/store/group.ctrl.php new file mode 100644 index 0000000..6e70a87 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/store/group.ctrl.php @@ -0,0 +1,58 @@ + $_W['uniacid'],'status'=>1),array('id','name')); + $agentgroupid = pdo_getcolumn(PDO_NAME.'agentusers',array('id'=>$_W['aid']),'groupid'); + $pluginswitch = pdo_getcolumn(PDO_NAME.'agentusers_group',array('id'=>$agentgroupid),'package'); + $pluginswitch = unserialize($pluginswitch); + if(checksubmit('submit')){ + $group = $_GPC['group']; + $group['createtime'] = time(); + $group['name'] = trim($group['name']); + $group['enabled'] = $_GPC['enabled']; + $group['isdefault'] = $_GPC['isdefault']; + $group['package'] = $group['package']; + $group['authority'] = serialize($_GPC['authority']); + if(!empty($_GPC['id'])){ + if(Store::editGroup($group,$_GPC['id'])) wl_message('保存成功',web_url('store/group/index'),'success'); + }else{ + if(Store::editGroup($group)) wl_message('保存成功',web_url('store/group/index'),'success'); + } + wl_message('保存失败',referer(),'error'); + } + if(!empty($_GPC['id'])){ + $group = Store::getSingleGroup($_GPC['id']); + $group['authority'] = unserialize($group['authority']); + } + include wl_template('store/sgroupEdit'); + } + /** + * 删除分组 + */ + public function delete(){ + global $_W,$_GPC; + if(Store::deleteGroup($_GPC['id'])) wl_message('删除成功',web_url('store/group/index'),'success'); + wl_message('删除失败',referer(),'error'); + + } + + +} diff --git a/addons/weliam_smartcity/web/controller/store/merchant.ctrl.php b/addons/weliam_smartcity/web/controller/store/merchant.ctrl.php new file mode 100644 index 0000000..acc3bb4 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/store/merchant.ctrl.php @@ -0,0 +1,970 @@ + $_W['uniacid'], 'status' => 2, 'aid' => $_W['aid']); + $deliverystatus = $_GPC['deliverystatus'] ? : 0; + $isExport = $_GPC['export'] ? : 0; + if($_W['aid'] > 0){ + $groups = pdo_fetchall("SELECT id,name FROM " . tablename('wlmerchant_chargelist') . "WHERE uniacid = {$_W['uniacid']} AND aid IN (0,{$_W['aid']}) AND status = 1 ORDER BY sort DESC,id DESC", [], 'id'); + }else{ + $groups = pdo_fetchall("SELECT id,name FROM " . tablename('wlmerchant_chargelist') . "WHERE uniacid = {$_W['uniacid']} AND aid = 0 AND status = 1 ORDER BY sort DESC,id DESC", [], 'id'); + } + if ($_GPC['keyword']) { + if ($_GPC['keywordtype'] == 1) { + $where['id'] = trim($_GPC['keyword']); + } else if ($_GPC['keywordtype'] == 2) { + $where['@storename@'] = trim($_GPC['keyword']); + } else if ($_GPC['keywordtype'] == 3) { + $where['@realname@'] = trim($_GPC['keyword']); + } else if ($_GPC['keywordtype'] == 4) { + $where['mobile^tel'] = trim($_GPC['keyword']); + } else if ($_GPC['keywordtype'] == 5) { + $sid = pdo_getcolumn(PDO_NAME.'merchantuser',array('id'=>trim($_GPC['keyword'])),'storeid'); + $where['id'] = trim($sid); + } + } + if ($_GPC['groupid']) { + $where['groupid'] = $_GPC['groupid']; + } + if ($_GPC['enabled'] == 5) { + $where['enabled'] = 0; + $where['status'] = 1; + } elseif ($_GPC['enabled'] == 6) { + $where['enabled'] = 0; + } else { + $where['enabled'] = $_GPC['enabled'] = $_GPC['enabled'] != '' ? $_GPC['enabled'] : 1; + } + + if (!empty($_GPC['time_limit']) && $_GPC['timetype'] ) { + $starttime = strtotime($_GPC['time_limit']['start']); + $endtime = strtotime($_GPC['time_limit']['end']); + if($_GPC['timetype'] == 1){ + $where['createtime>'] = $starttime; + $where['createtime<'] = $endtime + 86400; + }else{ + $where['endtime>'] = $starttime; + $where['endtime<'] = $endtime + 86400; + } + } + if (empty($starttime) || empty($endtime)) { + $starttime = strtotime('-1 month'); + $endtime = time(); + } + + if($deliverystatus > 0) $where['deliverystatus'] = $deliverystatus == 2 ? 0 : $deliverystatus; + if (!empty($_GPC['merchant_type'])) $where['merchant_type'] = $_GPC['merchant_type']; + //判断是否为导出操作 + if($isExport == 1){ + $whereData = Util::createStandardWhereString($where); + foreach($whereData[1] as $key => $icon){ + $whereData[0] = str_replace($key,"'{$icon}'",$whereData[0]); + } + Store::exportShop($whereData[0]); + die; + } + $field = "id,logo,storename,mobile,nowmoney,realname,tel,createtime,endtime,enabled,nowmoney,groupid,merchant_type"; + $storesData = Util::getNumData($field, PDO_NAME . 'merchantdata', $where, 'listorder desc,id desc', $pindex, $psize, 1); + $stores = $storesData[0]; + foreach ($stores as $key => &$value) { + $value['logo'] = tomedia($value['logo']); + //店铺过期操作 + if ($_GPC['enabled'] != 4) { + if ($value['endtime'] < time() && !empty($value['endtime'])) { + $res = pdo_update(PDO_NAME . 'merchantdata', array('enabled' => 3), array('uniacid' => $_W['uniacid'], 'id' => $value['id'])); + if ($res) { //下架商品 + //抢购商品 + pdo_update('wlmerchant_rush_activity', array('status' => 4), array('uniacid' => $_W['uniacid'], 'sid' => $value['id'])); + //拼团商品 + pdo_update('wlmerchant_fightgroup_goods', array('status' => 0), array('uniacid' => $_W['uniacid'], 'merchantid' => $value['id'])); + //卡券 + pdo_update('wlmerchant_couponlist', array('status' => 0), array('uniacid' => $_W['uniacid'], 'merchantid' => $value['id'])); + //特权 + pdo_update('wlmerchant_halfcardlist', array('status' => 0), array('uniacid' => $_W['uniacid'], 'merchantid' => $value['id'])); + //礼包 + pdo_update('wlmerchant_package', array('status' => 0), array('uniacid' => $_W['uniacid'], 'merchantid' => $value['id'])); + } + } + } + //查询店员 + $value['clerknum'] = pdo_fetchcolumn('SELECT count(id) FROM ' . tablename('wlmerchant_merchantuser') . " WHERE storeid = {$value['id']} AND ismain != 1"); + $value['groupname'] = $value['groupid'] ? pdo_getcolumn('wlmerchant_chargelist', array('id' => $value['groupid']), 'name') : ''; + } + $pager = $storesData[1]; + $status0 = pdo_fetchcolumn('SELECT COUNT(id) FROM ' . tablename(PDO_NAME . 'merchantdata') . " WHERE enabled = 0 and uniacid={$_W['uniacid']} and status=2 and aid={$_W['aid']}"); + $status1 = pdo_fetchcolumn('SELECT COUNT(id) FROM ' . tablename(PDO_NAME . 'merchantdata') . " WHERE enabled = 1 and uniacid={$_W['uniacid']} and status=2 and aid={$_W['aid']}"); + $status2 = pdo_fetchcolumn('SELECT COUNT(id) FROM ' . tablename(PDO_NAME . 'merchantdata') . " WHERE enabled = 2 and uniacid={$_W['uniacid']} and status=2 and aid={$_W['aid']}"); + $status3 = pdo_fetchcolumn('SELECT COUNT(id) FROM ' . tablename(PDO_NAME . 'merchantdata') . " WHERE enabled = 3 and uniacid={$_W['uniacid']} and status=2 and aid={$_W['aid']}"); + $status4 = pdo_fetchcolumn('SELECT COUNT(id) FROM ' . tablename(PDO_NAME . 'merchantdata') . " WHERE enabled = 4 and uniacid={$_W['uniacid']} and status=2 and aid={$_W['aid']}"); + $status5 = pdo_fetchcolumn('SELECT COUNT(id) FROM ' . tablename(PDO_NAME . 'merchantdata') . " WHERE enabled = 0 and uniacid={$_W['uniacid']} and status=1 and aid={$_W['aid']}"); + + include wl_template('store/userIndex'); + } + + public function edit() { + global $_W, $_GPC; + $isAuth = Customized::init('printing'); + $id = intval($_GPC['id']); + if (is_store()) { + $id = $_W['storeid']; + } + $page = $_GPC['page']; + $allgroup = pdo_fetchall("SELECT name,id FROM " . tablename('wlmerchant_chargelist') . "WHERE uniacid = {$_W['uniacid']} AND aid IN (0,{$_W['aid']}) AND status = 1 ORDER BY sort DESC"); + //海报获取 + if(p('diyposter')){ + $posters = pdo_getall(PDO_NAME . 'poster',array('uniacid' => $_W['uniacid'],'type' => 1),array('id','title')); + } + //社群获取 + $community = pdo_fetchall("SELECT communname,id FROM " . tablename('wlmerchant_community') . "WHERE uniacid = {$_W['uniacid']} AND storeid IN (0,{$id}) AND aid = {$_W['aid']} ORDER BY id DESC"); + +// $categoryes = pdo_getall(PDO_NAME . 'category_store', array('uniacid' => $_W['uniacid'], 'aid' => $_W['aid'], 'state' => '0')); //商家分类 +// if (empty($categoryes)) wl_message("请先添加商家类别!", web_url('store/category/Edit')); +// $moduels = uni_modules(); +// if (!empty($categoryes)) { +// $parents = $childrens = array(); +// foreach ($categoryes as $cid => $cate) { +// if (!empty($cate['parentid'])) { +// $childrens[$cate['parentid']][] = $cate; +// } else { +// $parents[$cate['id']] = $cate; +// } +// } +// } + //一级分类获取 + $categoryes = pdo_getall(PDO_NAME . 'category_store' , [ + 'uniacid' => $_W['uniacid'] , + 'aid' => $_W['aid'] , + 'enabled' => 1, + 'parentid'=> 0, + 'state' => '0' + ],['id','name'],'','displayorder DESC'); + //二级分类信息获取 + foreach($categoryes as $key => &$val){ + $val['list'] = pdo_getall(PDO_NAME . 'category_store' , [ + 'uniacid' => $_W['uniacid'] , + 'aid' => $_W['aid'] , + 'enabled' => 1, + 'parentid'=> $val['id'], + 'state' => '0' + ],['id','name'],'','displayorder DESC'); + //兼容 删除没有二级分类的一级分类信息 + if(!$val['list']){ + unset($categoryes[$key]); + } + } + //商户分类 + $levelids = pdo_getall('wlmerchant_merchant_cate', array('sid' => $id), 'twolevel'); + if (!empty($levelids)) { + $cateids = array_column($levelids, 'twolevel'); + } + //家政服务分类 + $keeplevelids = pdo_getall('wlmerchant_housekeep_relation', array('objid' => $id,'type' => 3), 'twolevelid'); + if (!empty($keeplevelids)) { + $keepcateids = array_column($keeplevelids, 'twolevelid'); + } + if ($id) { + $register = Store::getSingleStore($id); + $proportion = unserialize($register['proportion']); + }else{ + $register['aid'] = $_W['aid']; + $register['recruit_switch'] = 1;# 默认开启求职招聘 + } + //获取云喇叭设置信息 + if ($register['cloudspeaker']) { + $cloudspeaker = unserialize($register['cloudspeaker']); + } + //获取推送设置信息 + if ($register['printing']) { + $printing = unserialize($register['printing']); + } + + if ($id) { + $register['member'] = Store::getSingleRegister(array('uniacid' => $_W['uniacid'], 'storeid' => $id, 'ismain' => 1)); + } + $member = Member::wl_member_get($register['member']['mid'], array('id', 'nickname', 'openid')); + $register['location'] = unserialize($register['location']); + //$register['location'] = Util::Convert_GCJ02_To_BD09($register['location']['lat'], $register['location']['lng']); + $register['endtime'] = $register['endtime'] ? $register['endtime'] : time() + 31536000; + $register['adv'] = unserialize($register['adv']); + $register['recruit_adv'] = unserialize($register['recruit_adv']); + $register['recruit_long_img'] = $register['recruit_long_img'] ? explode('||',$register['recruit_long_img']) : ''; + $register['delivery_adv'] = unserialize($register['delivery_adv']); + $register['album'] = unserialize($register['album']); + $register['examineimg'] = unserialize($register['examineimg']); + $register['videourl'] = tomedia($register['videourl']); + $deliverytype = unserialize($register['deliverytype']); + $allArea = json_encode(Area::get_all_in_use()); + $sett = unserialize($register['settlementtext']); + $payback = unserialize($register['payback']); + //活动时间处理 + $storehours = unserialize($register['storehours']); + if(!empty($storehours['startTime'])){ + $newstorehours = []; + $houreinfo['startTime'] = $storehours['startTime']; + $houreinfo['endTime'] = $storehours['endTime']; + $newstorehours[] = $houreinfo; + $storehours = $newstorehours; + } + + //评分等级 + $on_array = array(); + $off_array = array(); + if (empty($register['score'])) $register['score'] = 5; + if ($register['score'] == 1) { + $html = '非常差'; + } else if ($register['score'] == 2) { + $html = '不太好'; + } else if ($register['score'] == 3) { + $html = '一般'; + } else if ($register['score'] == 4) { + $html = '很好!'; + } else if ($register['score'] == 5) { + $html = '非常棒!!'; + } + for ($i = 1; $i <= $register['score']; $i++) { + $on_array[$i] = $i; + } + for ($j = $register['score']; $j < 5; $j++) { + $off_array[$j] = $j + 1; + } + //标签 + $presettags = pdo_getall('wlmerchant_tags', array('uniacid' => $_W['uniacid'], 'aid' => $_W['aid'], 'type' => 0), array('id', 'title'), '', 'sort DESC'); + $tags = unserialize($register['tag']); + //店员 + if ($id) { + $mains = pdo_getall('wlmerchant_merchantuser', array('uniacid' => $_W['uniacid'], 'storeid' => $id)); + foreach ($mains as $key => &$main) { + $main['avatar'] = pdo_getcolumn(PDO_NAME . 'member', array('id' => $main['mid']), 'avatar'); + } + } + //满减活动 + if(p('fullreduce')){ + $fullreducelist = pdo_getall('wlmerchant_fullreduce_list',array('aid' => $_W['aid'],'uniacid' => $_W['uniacid'],'status' => 1),array('id','title')); + } + //支付有礼 + if(p('paidpromotion')){ + $paidlist = pdo_getall('wlmerchant_payactive',array('uniacid' => $_W['uniacid'],'aid' => $_W['aid'],'status' => 1),array('id','title')); + } + if(agent_p('luckydraw')){ + $drawlist = pdo_getall('wlmerchant_luckydraw',array('uniacid' => $_W['uniacid'],'aid' => $_W['aid'],'status' => 1),array('id','title')); + } + //支付信息列表 + if($_W['wlsetting']['cashset']['allocationtype'] == 1){ + $paylist = pdo_getall(PDO_NAME."payment",['uniacid'=>$_W['uniacid'],'type'=>1],['id','name']); + } + + $logo = $register['logo']; + if (checksubmit('submit')) { + //表单提交 + //判断是否修改了店长 + $noticeflag = ''; + $oldMid = $member['id']; + if ($member['id'] != $_GPC['storemid']) { + $noticeflag = 1; + } + $uid = intval($_GPC['uid']); + if (!empty($_GPC['storemid'])) { + $member['id'] = $_GPC['storemid']; + } + $register = $_GPC['register']; + if(empty($register['groupid']) && !is_store()){ + wl_message('请设置商户所属套餐'); + } + $count = preg_match_all("/[\x{4e00}-\x{9fa5}]/u", $register['recruit_brighten']); + if ($count > 20) wl_message('企业亮点最多填写20个汉字'); + if (empty($register['business_license'])) wl_message('请上传营业执照'); + + $register['wxappswitch'] = intval($_GPC['wxappswitch']); + $register['iscommon'] = intval($_GPC['iscommon']); + //$register['location'] = Util::Convert_BD09_To_GCJ02($register['location']['lat'], $register['location']['lng']); + $register['lng'] = $register['location']['lng']; + $register['lat'] = $register['location']['lat']; + $register['location'] = serialize($register['location']); + $register['adv'] = serialize($register['adv']); + $register['recruit_adv'] = serialize($register['recruit_adv']); + $register['recruit_long_img'] = empty($register['recruit_long_img']) ? array() : implode('||',$register['recruit_long_img']); + $register['delivery_adv'] = serialize($register['delivery_adv']); + $register['album'] = serialize($register['album']); + $register['tag'] = serialize($register['tag']); + $register['storename'] = trim($register['storename']); + if (!empty($register['endtime'])) { + $register['endtime'] = strtotime($register['endtime']); + } + $register['introduction'] = htmlspecialchars_decode($register['introduction']); + $register['uniacid'] = $_W['uniacid']; + if(empty($register['aid']) && is_store()){ + $register['aid'] = $_W['aid']; + } + $user['name'] = $register['realname']; + $user['mobile'] = $register['tel']; + if (!empty($_GPC['storemid'])) { + $user['mid'] = $member['id']; + if (empty($id)) { + $validate = Member::validateMemberIdentity($user['mid']); + if (!$validate['status']) wl_message('当前店长微信已是'.$validate['identity']); + } + } + $user['enabled'] = 1; + $user['uniacid'] = $_W['uniacid']; + $user['aid'] = $register['aid']; + //轮播图大小数组 + $register['proportion'] = serialize($_GPC['proportion']); + //营业时间段 + $startTime = $_GPC['startTime']; + $endTime = $_GPC['endTime']; + if(empty($startTime)){ + wl_message('请设置营业时间'); + } + foreach($startTime as $tk => $stime){ + $sdate = []; + $sdate['startTime'] = $startTime[$tk]; + $sdate['endTime'] = $endTime[$tk]; + $registerdate[] = $sdate; + } + $register['storehours'] = serialize($registerdate); + //达达和UU城市列表 + if($_W['wlsetting']['api']['citydelivery']['type'] == 1){ + //达达设置 + $third_city_info = $_GPC['third_city_info']; + $third_city_info = explode( ",",$third_city_info); + $register['third_city_code'] = $third_city_info[0]; + $register['third_city_name'] = $third_city_info[1]; + }else if($_W['wlsetting']['api']['citydelivery']['type'] == 2){ + //UU设置 + $register['third_city_name'] = $_GPC['third_city_name']; + } + //结算设置 + $sett = $_GPC['sett']; + foreach ($sett as $key => &$se) { + if ($se > 100) { + $se = 100; + } + if ($se > 0.01) { + $se = sprintf("%.2f", $se); + } + } + $register['settlementtext'] = serialize($sett); + //支付返现(L304定制) + if($register['paybackstatus'] > 0){ + $payback = $_GPC['payback']; + foreach ($payback as $key => &$pa) { + if ($pa > 100) { + $pa = 100; + } + if ($pa > 0.01) { + $pa = sprintf("%.2f", $pa); + } + } + $register['payback'] = serialize($payback); + } + $register['yuecashback'] = $register['yuecashback'] > 100 ? 100 : sprintf("%.2f", $register['yuecashback']); + $register['vipyuecashback'] = $register['vipyuecashback'] > 100 ? 100 : sprintf("%.2f", $register['vipyuecashback']); + //同城配送 + if(empty($register['deliverytype'])){ + $register['deliverytype'][] = 'own'; + } + $register['deliverytype'] = serialize($register['deliverytype']); + //云喇叭设置信息 + $cloudspeaker = $_GPC['cloudspeaker']; + if ($cloudspeaker) { + $cloudspeaker['volume'] = $cloudspeaker['volume'] ? $cloudspeaker['volume'] : 50; + } + $register['cloudspeaker'] = serialize($cloudspeaker); + //消息推送设置 + $register['printing'] = serialize($_GPC['printing']); + + if ($id) { + //修改店铺信息 + $result = Store::registerEditData($register, $id); + if (empty($uid)) { + $user['storeid'] = $id; + $user['ismain'] = 1; + $user['status'] = 2; + $user['createtime'] = time(); + } + $result2 = Store::registerEditUser($user, $uid); + //修改店铺信息 判断是否修改aid 并且进行对应的操作 + self::updateGoodsAid($id,$register['aid']);//aid被改变 修改对应信息 + } else { + $register['aid'] = $_W['aid']; + $register['status'] = 2; + $register['createtime'] = time(); + $uid = Store::registerEditData($register); + $user['storeid'] = $uid; + $user['ismain'] = 1; + $user['status'] = 2; + $user['createtime'] = time(); + $result = Store::registerEditUser($user); + $id = $uid; + } + # 店长变更后回退为 游客 + if ($noticeflag) { + Member::returnIdentity($oldMid); + } + if ($result) { + if (!empty($id)) { + //处理分类 + pdo_delete('wlmerchant_merchant_cate', array('sid' => $id)); + foreach ($_GPC['category'] as $item) { + $scate = pdo_get(PDO_NAME . 'category_store', array('id' => $item), array('parentid')); + pdo_insert('wlmerchant_merchant_cate', ['sid' => $id, 'onelevel' => $scate['parentid'], 'twolevel' => $item]); + } + //处理家政服务分类 + if($register['housekeepstatus'] > 0){ + $housekeepcate = $_GPC['housekeepcate']; + pdo_delete('wlmerchant_housekeep_relation', array('type' => 3,'objid' => $id)); + foreach ($housekeepcate as $keepitem) { + $keepscate = pdo_get(PDO_NAME . 'housekeep_type', array('id' => $keepitem), array('onelevelid')); + pdo_insert('wlmerchant_housekeep_relation', ['type' => 3,'objid' => $id, 'onelevelid' => $keepscate['onelevelid'], 'twolevelid' => $keepitem]); + } + } + + $enabled = pdo_getcolumn(PDO_NAME . 'merchantdata', array('id' => $id), 'enabled'); + if ($enabled != 1) { + //抢购商品 + pdo_update('wlmerchant_rush_activity', array('status' => 4), array('uniacid' => $_W['uniacid'], 'sid' => $id)); + //拼团商品 + pdo_update('wlmerchant_fightgroup_goods', array('status' => 5), array('uniacid' => $_W['uniacid'], 'merchantid' => $id)); + //卡券 + pdo_update('wlmerchant_couponlist', array('status' => 3), array('uniacid' => $_W['uniacid'], 'merchantid' => $id)); + //特权 + pdo_update('wlmerchant_halfcardlist', array('status' => 0), array('uniacid' => $_W['uniacid'], 'merchantid' => $id)); + //礼包 + pdo_update('wlmerchant_package', array('status' => 0), array('uniacid' => $_W['uniacid'], 'merchantid' => $id)); + //砍价 + pdo_update('wlmerchant_bargain_activity', array('status' => 0), array('sid' => $id)); + //同城配送 + pdo_update('wlmerchant_delivery_activity', array('status' => 4), array('sid' => $id)); + } + } + if ($noticeflag) { + $usermid = $_GPC['storemid']; + $firse = '您已被管理员设置为[' . $register['storename'] . ']的店长'; + $content = '商户名:' . $register['storename']; + $link = h5_url('pages/subPages/merchant/merchantChangeShop/merchantChangeShop'); + News::jobNotice($usermid, $firse, '绑定店长通知', $content, '已绑定', '点击链接进入商户管理页面', time(),$link); + } + if ($register['logo'] != $logo) { + Tools::clearwxapp(); + Tools::clearposter(); + } + + Member::updateStoreUserIdentity($id); + + if (is_store()) { + wl_message('商家信息保存成功', web_url('store/merchant/edit'), 'success'); + } else { + if($_GPC['houseflag'] > 0){ + wl_message('商家信息保存成功', web_url('housekeep/KeepWeb/storelist'), 'success'); + }else{ + wl_message('商家信息保存成功', web_url('store/merchant/index', array('enabled' => $register['enabled'], 'page' => $page)), 'success'); + } + } + } else { + if (is_store()) { + wl_message('商家信息保存失败,请重试', web_url('store/merchant/edit'), 'error'); + } else { + wl_message('商家信息保存失败,请重试', web_url('store/merchant/edit', array('id' => $id)), 'error'); + } + } + } + //获取代理商列表 + $default[] = ['id' => 0,'agentname' => '总后台']; + $agentList = pdo_getall(PDO_NAME."agentusers",['uniacid'=>$_W['uniacid']],['id','agentname']); + $agentList = array_merge($default,$agentList); + //同城配送权限判断 + if(p('citydelivery')){ + $apps = App::get_account_perm(); + if(!empty($apps['plugins'])){ + if(in_array('citydelivery',$apps['plugins'])){ + $citydefl = 1; + } + }else{ + $citydefl = 1; + } + } + //求职招聘相关信息 + if(p('recruit')){ + $nature = Recruit::getLabelList(5);//企业性质标签 + $scale = Recruit::getLabelList(4);//企业规模标签 + $industry = Recruit::getIndustryList(['pid'=>0],['id','title']);//上级行业列表 + } + //达达和UU城市列表 + if($_W['wlsetting']['api']['citydelivery']['type'] == 1){ + $city_code_list = Citydelivery::postDadaApi('',8); + $city_code_list = $city_code_list['result']; + }else if($_W['wlsetting']['api']['citydelivery']['type'] == 2){ + $city_code_list = Citydelivery::postUUApi([],8); + $city_code_list = $city_code_list['CityList']; + } + //家政服务相关信息 + if(p('housekeep')){ + $housekeepcate = Housekeep::getCategory(); + } + + include wl_template('store/userEdit'); + } + + public function detelemain() { + global $_W, $_GPC; + $id = $_GPC['id']; + $ismain = pdo_getcolumn(PDO_NAME . 'merchantuser', array('id' => $id), 'ismain'); + if ($ismain == 1) { + show_json(0, '不能删除店长'); + } else { + $res = pdo_delete('wlmerchant_merchantuser', array('id' => $id)); + } + if ($res) { + show_json(1, '删除成功'); + } else { + show_json(0, '删除失败,请重试'); + } + } + + public function urlindex() { + global $_W, $_GPC; + $id = intval($_GPC['id']); + $pindex = max(1, intval($_GPC['page'])); + $psize = 10; + $register = Store::getSingleStore($id); + $naves = Dashboard::getAllNav($pindex - 1, $psize, '', $id); + $navs = $naves['data']; + $pager = wl_pagination($naves['count'], $pindex, $psize); + + include wl_template('store/userEdit'); + } + + public function addurl() { + global $_W, $_GPC; + $id = intval($_GPC['id']); + $register = Store::getSingleStore($id); + + if (!empty($_GPC['navid'])) $nav = Dashboard::getSingleNav($_GPC['navid']); + if (checksubmit('submit')) { + $nav = $_GPC['nav']; + $nav['name'] = trim($nav['name']); + $nav['displayorder'] = intval($nav['displayorder']); + $nav['enabled'] = intval($_GPC['enabled']); + if (!empty($_GPC['navid'])) { + if (Dashboard::editNav($nav, $_GPC['navid'])) wl_message('保存成功', web_url('store/merchant/urlindex', array('id' => $nav['merchantid'])), 'success'); + } else { + if (Dashboard::editNav($nav)) wl_message('保存成功', web_url('store/merchant/urlindex', array('id' => $nav['merchantid'])), 'success'); + } + wl_message('保存失败', referer(), 'error'); + } + + include wl_template('store/userEdit'); + } + + public function delete() { + global $_W, $_GPC; + if (pdo_update(PDO_NAME . 'merchantdata', array('enabled' => 4), array('id' => $_GPC['id']))) { + pdo_delete('wlmerchant_storefans', array('sid' => $_GPC['id'])); + //抢购商品 + pdo_update('wlmerchant_rush_activity', array('status' => 4), array('uniacid' => $_W['uniacid'], 'sid' => $_GPC['id'])); + //拼团商品 + pdo_update('wlmerchant_fightgroup_goods', array('status' => 0), array('uniacid' => $_W['uniacid'], 'merchantid' => $_GPC['id'])); + //卡券 + pdo_update('wlmerchant_couponlist', array('status' => 0), array('uniacid' => $_W['uniacid'], 'merchantid' => $_GPC['id'])); + //特权 + pdo_update('wlmerchant_halfcardlist', array('status' => 0), array('uniacid' => $_W['uniacid'], 'merchantid' => $_GPC['id'])); + //礼包 + pdo_update('wlmerchant_package', array('status' => 0), array('uniacid' => $_W['uniacid'], 'merchantid' => $_GPC['id'])); + show_json(1, '删除成功'); + } else { + show_json(0, '删除失败,请重试'); + } + } + + function deletes() { + global $_W, $_GPC; + $ids = $_GPC['ids']; + $type = $_GPC['type']; + if ($type == 1) { + foreach ($ids as $key => $id) { + pdo_update(PDO_NAME . 'merchantdata', array('enabled' => 4), array('id' => $id)); + pdo_delete('wlmerchant_storefans', array('sid' => $id)); + } + } else { + foreach ($ids as $key => $id) { + pdo_delete(PDO_NAME . 'merchantdata', array('id' => $id)); + $userData = pdo_getall(PDO_NAME . 'merchantuser',array('uniacid' => $_W['uniacid'], 'storeid' => $id)); + pdo_delete(PDO_NAME . 'merchantuser', array('uniacid' => $_W['uniacid'], 'storeid' => $id)); + foreach ($userData as $userRow) { + Member::returnIdentity($userRow['mid']); + } + } + } + + die(json_encode(array('errno' => 0, 'message' => '', 'id' => ''))); + } + + public function sureDelete() { + global $_W, $_GPC; + if (pdo_delete(PDO_NAME . 'merchantdata', array('id' => $_GPC['id']))) { + $userData = pdo_getall(PDO_NAME . 'merchantuser',array('uniacid' => $_W['uniacid'], 'storeid' => $_GPC['id'])); + pdo_delete(PDO_NAME . 'merchantuser', array('uniacid' => $_W['uniacid'], 'storeid' => $_GPC['id'])); + foreach ($userData as $userRow) { + Member::returnIdentity($userRow['mid']); + } + show_json(1, '删除成功'); + } + show_json(0, '删除失败,请重试'); + } + + /** + * 函数的含义说明 + * + * @access public + * @name 方法名称 + * @param mixed 参数一的说明 + * @return array + */ + function keeper() { + global $_W, $_GPC; + $id = intval($_GPC['id']); + $register = Store::getSingleStore($id); + $register['onelevel'] = Util::idSwitch('cateParentId', 'cateParentName', $register['onelevel']); + $register['twolevel'] = Util::idSwitch('cateChildId', 'cateChildName', $register['twolevel']); + + $where['storeid'] = $id; + $keeperData = Util::getNumData("*", PDO_NAME . 'merchantuser', $where, 'ismain asc'); + $keeper = $keeperData[0]; + foreach ($keeper as $key => &$value) { + $value['member'] = Member::wl_member_get($value['mid']); + } + include wl_template('store/userEdit'); + } + + /** + * Comment: 代理后台进行店铺余额提现申请的操作 + * Author: zzw + */ + public function cash() { + global $_W, $_GPC; + #1、获取基本参数信息 + $sid = $_GPC['sid'];//商户id + $money = $_GPC['money'];//提现金额 + $cashsets = Setting::wlsetting_read('cashset');//提现设置 + $agent = Area::getSingleAgent($_W['aid']); + $syssalepercent = $agent['percent']['syssalepercent'];//系统抽成比例 + if (empty($syssalepercent)) { + $syssalepercent = sprintf("%.2f" , $_W['wlsetting']['cashset']['syssalepercent']); + }else { + $syssalepercent = sprintf("%.2f" , $syssalepercent); + } + $userInfo = Store::getShopOwnerInfo($sid, $_W['aid']);//收款人信息 + if(!empty($userInfo['openid'])){ + $sopenid = $userInfo['openid']; + $source = 1; + }else if(!empty($userInfo['wechat_openid'])){ + $sopenid = $userInfo['wechat_openid']; + $source = 3; + }else{ + wl_json(0, '店长无微信打款信息,无法结算'); + } + #2、判断商家的提现时间限制 + $shopIntervalTime = $cashsets['shopIntervalTime']; + if ($shopIntervalTime > 0) { + //获取上次提现申请时间 + $startTime = pdo_fetchcolumn("SELECT applytime FROM " + . tablename(PDO_NAME . "settlement_record") + . " WHERE sid = {$sid} AND uniacid = {$_W['uniacid']} ORDER BY applytime DESC "); + $interval = time() - $startTime; + $intervalDay = $interval / 3600 / 24; + //判断间隔时间 + $intercalRes = ceil($shopIntervalTime - $intervalDay); + if ($intercalRes > 0) { + wl_json(0, '请等' . $intercalRes . '天后再申请!'); + } + } + #3、判断提现金额限制 + if ($money < $cashsets['lowsetmoney']) { + wl_json(0, '申请失败,最低提现金额为' . $cashsets['lowsetmoney'] . '元。'); + } + #4、拼装提现信息 + $data = array( + 'uniacid' => $_W['uniacid'], + 'sid' => $sid, + 'aid' => $_W['aid'], + 'status' => 2, + 'type' => 1, + 'sapplymoney' => $money, + 'sgetmoney' => sprintf("%.2f", $money - $syssalepercent * $money / 100), + 'spercentmoney' => sprintf("%.2f", $syssalepercent * $money / 100), + 'spercent' => $syssalepercent, + 'applytime' => TIMESTAMP, + 'updatetime' => TIMESTAMP, + 'sopenid' => $sopenid, + 'payment_type' => 5, + 'source' => $source + ); + #5、保存提现信息 + if (pdo_insert(PDO_NAME . 'settlement_record', $data)) { + $orderid = pdo_insertid(); + $res = Store::settlement($orderid, 0, $data['sid'], -$money, 0, -$money, 7, 0, 0, $_W['aid']); + if ($res) { + if (!empty($_W['wlsetting']['adminmid'])) { + $storename = pdo_getcolumn(PDO_NAME . 'merchantdata', array('id' => $sid), 'storename'); + $first = '您好,有一个商户提现申请待审核。'; + $content = '商户[' . $storename . ']申请提现' . $money . '元'; + News::jobNotice($_W['wlsetting']['adminmid'], $first, '商户提现审核通知', $content, '待审核', '请尽快前往系统后台审核', time()); + } + wl_json(1, '申请成功'); + } else { + wl_json(0, '申请失败,请重试'); + } + } else { + wl_json(0, '申请失败,请重试'); + } + } + + public function moneychange() { + global $_W, $_GPC; + $id = intval($_GPC['id']); + $balance = trim($_GPC['balance']); + + if ($_W['ispost']) { + $moneychange = trim($_GPC['moneychange']); + $moneynum = sprintf("%.2f", trim($_GPC['moneynum'])); + $remark = trim($_GPC['remark']); + if ($moneynum < 0) { + show_json(0, '变更金额错误'); + } + if ($moneychange == 1) { + $settlementmoney = $moneynum; + } else { + $settlementmoney = -$moneynum; + } + pdo_fetch("update" . tablename('wlmerchant_merchantdata') . "SET nowmoney = nowmoney + {$settlementmoney},allmoney = allmoney + {$settlementmoney} WHERE id = {$id}"); + $merchantnowmoney = pdo_getcolumn(PDO_NAME . 'merchantdata', array('id' => $id), 'nowmoney'); + Store::addcurrent(1, -1, $id, $settlementmoney, $merchantnowmoney, 0, $remark); + show_json(1, '商户余额变更成功'); + } + + include wl_template('store/moneychange'); + } + + /** + * Comment: 商户二维码生成 + * Author: zzw + * Date: 2019/11/28 11:51 + */ + public function storeQrCode() { + global $_W, $_GPC; + #1、参数获取 + $id = $_GPC['id'] ? $_GPC['id'] : 0; + #2、基本链接生成 + $shopLink = h5_url('pages/mainPages/store/index', ['sid' => $id]); + if(Customized::init('customized336')){ + $buyLink = h5_url('pages/mainPages/store/newBuyOrder/newBuyOrder', ['sid' => $id]); + }else{ + $buyLink = h5_url('pages/subPages2/newBuyOrder/buyOrder', ['sid' => $id]); + } + $followLink = Storeqr::get_storeqr($id);//获取关注二维码 + #3、获取小程序码信息 + if (p('wxapp')) { + $logo = pdo_getcolumn(PDO_NAME . "merchantdata", ['id' => $id], 'logo'); + $wxappShopLink = Store::getShopWxAppQrCode($id, tomedia($logo)); + if(Customized::init('customized336')){ + $wxappBuyLink = Store::getShopWxAppQrCode($id, tomedia($logo), 'pages/mainPages/store/newBuyOrder/newBuyOrder'); + }else{ + $wxappBuyLink = Store::getShopWxAppQrCode($id, tomedia($logo), 'pages/subPages2/newBuyOrder/buyOrder'); + } + //同城配送二维码 + $link = "pages/subPages2/businessCenter/foodList/foodList?id={$id}&storeid={$id}"; + $wxappDistributionLink = Store::getShopWxAppQrCode('', tomedia($logo),$link); + } + //同城配送信息 + $distributionLink = h5_url('pages/subPages2/businessCenter/foodList/foodList' , ['id' => $id,'storeid' => $id]); + + + include wl_template('store/qrcode_store'); + } + /** + * Comment: 修改店铺商品信息 + * Author: zzw + * Date: 2020/3/9 11:22 + * @param $sid + * @param $aid + */ + public static function updateGoodsAid($sid,$aid){ + #1、商品信息修改 + pdo_update(PDO_NAME."rush_activity",['aid'=>$aid],['sid'=>$sid]);//修改抢购商品 + pdo_update(PDO_NAME."groupon_activity",['aid'=>$aid],['sid'=>$sid]);//修改团购商品 + pdo_update(PDO_NAME."bargain_activity",['aid'=>$aid],['sid'=>$sid]);//修改砍价商品 + pdo_update(PDO_NAME."fightgroup_goods",['aid'=>$aid],['merchantid'=>$sid]);//修改拼团商品 + pdo_update(PDO_NAME."couponlist",['aid'=>$aid],['merchantid'=>$sid]);//修改卡卷商品 + pdo_update(PDO_NAME."activitylist",['aid'=>$aid],['sid'=>$sid]);//修改活动商品 + pdo_update(PDO_NAME."delivery_activity",['aid'=>$aid],['sid'=>$sid]);//修改活动商品 + #1、商品信息修改 + pdo_update(PDO_NAME."merchantuser",['aid'=>$aid],['storeid'=>$sid]);//修改店员信息 + } + + //店员列表 + public function clerkindex() { + global $_W, $_GPC; + $storeid = $_GPC['storeid']; + if (is_store()) { + $storeid = $_W['storeid']; + } + $storename = pdo_getcolumn(PDO_NAME . 'merchantdata', array('id' => $storeid), 'storename'); + $pindex = max(1, intval($_GPC['page'])); + $psize = 10; + $where = array('storeid' => $storeid, 'ismain!=' => 1); + if (!empty($_GPC['keyword'])) { + if ($_GPC['keywordtype'] == 1) { + $where['name@'] .= trim($_GPC['keyword']); + } else if ($_GPC['keywordtype'] == 2) { + $where['mobile@'] .= trim($_GPC['keyword']); + } + } + + $clerkData = Util::getNumData("*", PDO_NAME . 'merchantuser', $where, 'id desc', $pindex, $psize, 1); + $clerklist = $clerkData[0]; + $pager = $clerkData[1]; + + foreach ($clerklist as &$li) { + $member = pdo_get('wlmerchant_member', array('id' => $li['mid']), array('nickname', 'avatar')); + $li['nickname'] = $member['nickname']; + $li['avatar'] = tomedia($member['avatar']); + } + include wl_template('store/clerklist'); + } + //店员编辑 + public function editclerk() { + global $_W, $_GPC; + $id = $_GPC['id']; + $storeid = $_GPC['storeid']; + $store = pdo_get('wlmerchant_merchantdata',array('id' => $storeid),array('aid')); + if ($id) { + $clerk = pdo_get('wlmerchant_merchantuser', array('id' => $id)); + $member = pdo_get('wlmerchant_member', array('id' => $clerk['mid']), array('nickname', 'avatar')); + $clerk['nickname'] = $member['nickname']; + $clerk['avatar'] = $member['avatar']; + } + + if ($_W['ispost']) { + $data = array( + 'mid' => $_GPC['memberid'], + 'name' => $_GPC['name'], + 'mobile' => $_GPC['mobile'], + 'ismain' => $_GPC['ismain'], + 'orderwrite' => $_GPC['orderwrite'], + 'viewdata' => $_GPC['viewdata'], + 'enabled' => $_GPC['enabled'] + ); + if ($id) { + $res = pdo_update('wlmerchant_merchantuser', $data, array('id' => $id)); + } else { + $data['uniacid'] = $_W['uniacid']; + $data['storeid'] = $_GPC['storeid']; + $data['aid'] = $store['aid']; + $data['createtime'] = time(); + //$data['enabled'] = $store['enabled']; + $res = pdo_insert(PDO_NAME . 'merchantuser', $data); + } + if ($res) { + show_json(1, '操作成功'); + } else { + show_json(0, '操作失败,请重试'); + } + } + + + include wl_template('store/clerkedit'); + } + //删除店员 + public function deleteclerk() { + global $_W, $_GPC; + $id = $_GPC['id']; + $ids = $_GPC['ids']; + if (!empty($id)) { + $res = pdo_delete('wlmerchant_merchantuser', array('id' => $id)); + } + if (!empty($ids)) { + foreach ($ids as $key => $id) { + $res = pdo_delete('wlmerchant_merchantuser', array('id' => $id)); + } + } + if ($res) { + show_json(1, '操作成功'); + } else { + show_json(0, '操作失败,请重试'); + } + } + + //时间段引入方法 + public function storehours() { + include wl_template('store/storehours'); + } + + //获取可用店铺列表 + public function getstorelist(){ + global $_W, $_GPC; + $where = "uniacid = {$_W['uniacid']} AND status = 2 AND enabled = 1 AND aid = {$_W['aid']}"; + $data = []; + if (!empty($_GPC['search'])) { + $where .= " AND (storename LIKE '%".trim($_GPC['search'])."%' or id LIKE '%".trim($_GPC['search'])."%')"; + }else{ + $data[] = ['id' => 0, 'text' => '无关联商户']; + } + $members = pdo_fetchall("SELECT id,storename FROM ".tablename('wlmerchant_merchantdata')."WHERE {$where} ORDER BY id DESC LIMIT 100"); + + foreach ($members as &$member) { + $data[] = ['id' => $member['id'], 'text' => $member['storename'].'(SID:'.$member['id'].')']; + } + die(json_encode($data)); + } + + // 编辑商户分类 + public function editStoreCategory() + { + global $_W,$_GPC; + $storeId = $_GPC['storeId']; + $categoryList = Category::getTreeCategory(0,'*',1); + $categoryIdArr = []; + $queryRes = pdo_getall(PDO_NAME . 'merchant_class',['storeid' => $storeId],['cc_id']); + foreach ($queryRes as $queryRow) $categoryIdArr[] = $queryRow['cc_id']; + include wl_template('store/editStoreCategory'); + } + + // 保存商户分类 + public function saveStoreCategory() + { + global $_W,$_GPC; + + $storeId = $_GPC['storeId']; + $id_arr = $_GPC['id_arr']; + if (empty($storeId) || !is_numeric($storeId)) show_json(0, '缺少商户id'); + + $queryRes = pdo_getall(PDO_NAME . 'merchant_class',['storeid' => $storeId],['id']); + $deleteIdAll = []; + foreach ($queryRes as $queryRow) $deleteIdAll[] = $queryRow['id']; + if ($deleteIdAll) pdo_delete(PDO_NAME . 'merchant_class',['id' => $deleteIdAll]); + + if (!empty($id_arr)) { + foreach ($id_arr as $cate_id) { + $insert_data = [ + 'storeid' => $storeId, + 'cc_id' => $cate_id, + 'create_time' => time() + ]; + pdo_insert(PDO_NAME . 'merchant_class',$insert_data); + } + } + show_json(1, '保存成功'); + } +} + diff --git a/addons/weliam_smartcity/web/controller/store/register.ctrl.php b/addons/weliam_smartcity/web/controller/store/register.ctrl.php new file mode 100644 index 0000000..cf741ac --- /dev/null +++ b/addons/weliam_smartcity/web/controller/store/register.ctrl.php @@ -0,0 +1,88 @@ + &$v) { + $v['nickname'] = str_replace("'", '', $v['nickname']); + } + } + include wl_template('store/registerQueryNickname'); + exit; + } + } + /* + * 入驻设置 + */ + public function set() { + global $_W, $_GPC; + if ($_GPC['set']) { + $_GPC['set']['detail'] = htmlspecialchars_decode($_GPC['set']['detail']); + $res1 = Setting::agentsetting_save($_GPC['set'], 'register'); + wl_message('保存成功!', referer(), 'succuss'); + } + $set = Setting::agentsetting_read('register'); + include wl_template('store/registerSet'); + exit; + } + //付费记录 + public function chargerecode() { + global $_W, $_GPC; + $pindex = max(1, intval($_GPC['page'])); + $psize = 10; + $where = array( + 'uniacid' => $_W['uniacid'], + 'status' => 3, + 'plugin' => 'store' + ); + + if (is_agent()) { + $where['aid'] = $_W['aid']; + } + + if ($_GPC['orderid']) { + $where['id'] = $_GPC['orderid']; + } + + $records = pdo_getslice('wlmerchant_order', $where, array($pindex, $psize), $total, array(), '', "id DESC"); + $pager = wl_pagination($total, $pindex, $psize); + + foreach ($records as $key => &$re) { + $merchant = pdo_get('wlmerchant_merchantdata', array('id' => $re['sid']), array('logo', 'storename')); + $re['logo'] = $merchant['logo']; + $re['storename'] = $merchant['storename']; + $re['typename'] = pdo_getcolumn(PDO_NAME . 'chargelist', array('id' => $re['fkid']), 'name'); + } + + + include wl_template('store/chargerecode'); + exit; + } + //搜索用户 + public function searchmember() { + global $_W, $_GPC; + $con = $con2 = "uniacid='{$_W['uniacid']}' "; + $keyword = $_GPC['keyword']; + if ($keyword != '') { + $con .= " and nickname LIKE '%{$keyword}%' or uid LIKE '%{$keyword}%' or openid LIKE '%{$keyword}%'"; + $con2 .= " and nickname LIKE '%{$keyword}%' or uid LIKE '%{$keyword}%'"; + } + $ds = pdo_fetchall("select * from" . tablename('wlmerchant_member') . "where $con"); + + include wl_template('store/searchmember'); + } + +} diff --git a/addons/weliam_smartcity/web/controller/store/settled.ctrl.php b/addons/weliam_smartcity/web/controller/store/settled.ctrl.php new file mode 100644 index 0000000..9c109fd --- /dev/null +++ b/addons/weliam_smartcity/web/controller/store/settled.ctrl.php @@ -0,0 +1,18 @@ + $value) { + $registers[$key]['member'] = Member::wl_member_get($value['mid'], array('id', 'nickname','encodename')); + $registers[$key]['storedata'] = Store::getSingleStore($value['storeid']); + } + + include wl_template('store/registerIndex'); + } + //对申请信息进行 审核、删除操作 + public function edit() { + global $_W, $_GPC; + if ($_GPC['op'] == 'reject') { + if (pdo_update(PDO_NAME . 'merchantdata', array('status' => 3), array('id' => $_GPC['id']))) { + Store::editSingleRegister($_GPC['uid'], array('status' => 3, 'reject' => $_GPC['reject'])); + $mid = pdo_getcolumn(PDO_NAME . 'merchantuser', array('id' => $_GPC['uid']), 'mid'); + $store = pdo_get(PDO_NAME . 'merchantdata', array('id' => $_GPC['id']), array('storename')); + $storename = $store['storename']; + $content = '企业名:' . $storename; + $link = h5_url('pages/mainPages/Settled/Settled',['storeid' => $_GPC['id']]); + News::jobNotice($mid, '您好,您的企业入驻审核已完成', '企业入驻审核通知', $content, '未通过', '点击查看未通过原因', time(), $link); +// $content = '商户名:' . $storename; +// $link = h5_url('pages/subPages/merchant/merchantChangeShop/merchantChangeShop'); +// News::jobNotice($mid, '您好,您的商家入驻审核已完成', '商户入驻审核通知', $content, '未通过', '点击查看未通过原因', time(), $link); + wl_message('驳回成功', referer(), 'succuss'); + } else { + wl_message('驳回失败', referer(), 'error'); + } + } + if ($_GPC['op'] == 'pass') { + $status = pdo_getcolumn(PDO_NAME . 'merchantdata',array('id' => $_GPC['id']),'status'); + if (pdo_update(PDO_NAME . 'merchantdata', array('status' => 2, 'enabled' => 1), array('id' => $_GPC['id']))) { + if($status == 0){ + //修改过期时间 + $chargeid = pdo_getcolumn(PDO_NAME . 'order',array('sid' => $_GPC['id'],'status' => 0,'plugin' => 'store','payfor'=>'merchant'),'fkid'); + $day = pdo_getcolumn(PDO_NAME . 'chargelist',array('id' => $chargeid),'days'); + $endtime = time() + 86400*$day; + pdo_update(PDO_NAME . 'merchantdata', array('groupid' => $chargeid, 'endtime' => $endtime), array('id' => $_GPC['id'])); + pdo_update('wlmerchant_order',array('status' => 3,'paytype' => 6 ,'paytime' => time(), 'issettlement' => 1,'price' => 0),array('sid' => $_GPC['id'],'plugin' => 'store')); + } + Store::editSingleRegister($_GPC['uid'], array('status' => 2, 'reject' => $_GPC['reject'])); + $member = pdo_get('wlmerchant_merchantuser', array('id' => $_GPC['uid']), array('mid')); + $store = pdo_get('wlmerchant_merchantdata', array('id' => $_GPC['id']), array('storename')); + $storename = $store['storename']; + $content = '商户名:' . $storename; + News::jobNotice($member['mid'], '您好,您的商家入驻审核已完成', '商户入驻审核通知', $content, '已通过', '请您尽快完善商家信息', time()); + Member::updateStoreUserIdentity($_GPC['id'],1); + wl_message('通过操作成功', web_url('store/merchant/index', array('enabled' => 1)), 'succuss'); + } else { + wl_message('通过操作失败', referer(), 'error'); + } + } + if ($_GPC['op'] == 'del') { + if (pdo_delete(PDO_NAME . 'merchantuser', array('id' => $_GPC['uid']))) { + pdo_delete(PDO_NAME . 'merchantdata', array('id' => $_GPC['id'])); + wl_message('删除申请成功', referer(), 'succuss'); + } else { + wl_message('删除申请失败', referer(), 'error'); + } + } + } + + +} diff --git a/addons/weliam_smartcity/web/controller/store/storeCertified.ctrl.php b/addons/weliam_smartcity/web/controller/store/storeCertified.ctrl.php new file mode 100644 index 0000000..f8143a5 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/store/storeCertified.ctrl.php @@ -0,0 +1,100 @@ + '%'.trim($_GPC['keyword']).'%'],'id'); + foreach ($storeAll as $storeRow) $storeIdArr[] = $storeRow['id']; + $where['storeid#'] = $storeIdArr ? implode(",",$storeIdArr) : '0'; + } else if ($_GPC['keywordtype'] == 3) { + $where['@name@'] = trim($_GPC['keyword']); + } else if ($_GPC['keywordtype'] == 4) { + $where['mobile'] = trim($_GPC['keyword']); + } + } + + if (is_numeric($_GPC['status'])) $where['status'] = trim($_GPC['status']); + + $memberData = Util::getNumData("*", PDO_NAME . 'merchant_certified', $where, 'id desc', $pindex, $psize, 1); + $list = $memberData[0]; + $pager = $memberData[1]; + foreach ($list as &$item) { + $storeData = pdo_get(PDO_NAME . 'merchantdata',['id' => $item['storeid']],['storename','logo']); + $item['storename'] = $storeData['storename']; + $item['logo'] = tomedia($storeData['logo']); + $item['create_time'] = date("Y-m-d H:i:s",$item['create_time']); + } + + include wl_template('store/certified/index'); + } + + /* + * 认证审核 + */ + public function check() { + global $_W, $_GPC; + + if ($_W['ispost']) { + + try { + + $id = $_GPC['data']['id']; + $check_result = $_GPC['data']['result']; + $reason = $_GPC['data']['reason']?:''; + if (empty($id) || !is_numeric($id)) show_json('缺少id参数'); + if (!in_array($check_result,['reject','pass'])) show_json(0,'参数错误'); + if ($check_result == 'reject' && empty($reason)) show_json(0,'请填写不通过的原因'); + + $query_res = pdo_get(PDO_NAME . 'merchant_certified',['id' => $id, 'status' => 0]); + if (!$query_res) show_json(0,'已审核,请勿重复审核'); + + $status = $check_result == 'pass' ? 1 : 2; + $update_arr = [ + 'status' => $status, + 'remark' => $reason, + 'check_userid' => $_W['uid'], + 'check_time' => time() + ]; + + pdo_begin(); // 开始事务 + $up_res = pdo_update(PDO_NAME . 'merchant_certified',$update_arr,['id' => $id]); + + if (!$up_res) throw new Exception('失败'); + + // 通过修改为商家身份 + if ($status == 1) { + $up_res2 = pdo_update(PDO_NAME . 'merchantdata',['merchant_type' => 2],['id' => $query_res['storeid']]); + if (!$up_res2) throw new Exception('失败'); + Member::updateStoreUserIdentity($query_res['storeid'],2); + } else { + $mid = pdo_getcolumn(PDO_NAME . 'merchantuser',['storeid' => $query_res['storeid'],'ismain' => [1,3]],'mid'); + $content = '驳回原因:' . truncate_chinese_string($reason) . '...'; + $link = h5_url('pagesA/businessCooperation/index',['sid' => $query_res['storeid']]); + News::jobNotice($mid, '您好,您的商户认证审核已完成', '商户认证审核通知', $content, '未通过', '点击重新申请', time(), $link); + } + + pdo_commit(); // 提交事务 + + show_json(1,['message' => '成功', 'span' => $check_result == 'pass' ? '认证成功' : '认证失败']); + } catch (Exception $e) { + pdo_rollback(); // 回滚 + show_json(0,$e->getMessage()); + } + + } + show_json(0,'请求失败'); + } +} diff --git a/addons/weliam_smartcity/web/controller/store/storeComment.ctrl.php b/addons/weliam_smartcity/web/controller/store/storeComment.ctrl.php new file mode 100644 index 0000000..8a2341c --- /dev/null +++ b/addons/weliam_smartcity/web/controller/store/storeComment.ctrl.php @@ -0,0 +1,185 @@ + $_W['uniacid'],'aid'=>$_W['aid']),array('id')); + if(is_store()){ + $where['sid'] = $_W['storeid']; + } + if (empty($starttime) || empty($endtime)) {//初始化时间 + $starttime = strtotime('-1 month'); + $endtime = time(); + } + if (!empty($_GPC['time'])) { + $starttime = strtotime($_GPC['time']['start']); + $endtime = strtotime($_GPC['time']['end']); + switch($_GPC['timetype']){ + case 1:$where['createtime>'] = $starttime; + $where['createtime<'] = $endtime;break; + } + } + if (!empty($_GPC['type'])) $where['true'] = $_GPC['type']; + if (!empty($_GPC['keyword'])) $where['sid'] = $_GPC['keyword']; + if (!empty($_GPC['checkone'])) $where['checkone'] = $_GPC['checkone']; + $data = Util::getNumData("*", PDO_NAME.'comment', $where, 'createtime desc', $pindex, $psize, 1); + $lists = $data[0]; + $pager = $data[1]; + foreach($lists as $key=>&$value){ + $starNum = array(); + for($i=0;$i<$value['star'];$i++){ + $starNum[$i] = $i; + } + $value['star'] = $starNum; + $value['sName'] = Util::idSwitch('sid', 'sName', $value['sid']); + } + include wl_template('store/comment'); + } + //商户评论审核 + public function check(){ + global $_W,$_GPC; + $id = $_GPC['id']; + $pindex = $_GPC['pindex']; + $page = $_GPC['page']; + $data = Util::getSingelData("*", PDO_NAME.'comment', array('id'=>$id)); + $starNum = array(); + for($i=0;$i<$data['star'];$i++){ + $starNum[$i] = $i; + } + $data['star'] = $starNum; + $data['pic'] = unserialize($data['pic']); + $data['sName'] = Util::idSwitch('sid', 'sName', $data['sid']); + if($_GPC['checkone']){ + $update = array( + 'checkone'=>$_GPC['checkone'], + 'pic'=>serialize($_GPC['pic']), + ); + //送积分 + if($_W['wlsetting']['creditset']['commentcredit'] && $update['checkone'] == 2){ + Member::credit_update_credit1($data['mid'], $_W['wlsetting']['creditset']['commentcredit'], '评价赠送积分'); + } + pdo_update(PDO_NAME.'comment',$update,array('id'=>$id)); + wl_message("操作成功!",web_url('store/storeComment/index',array('page'=>$page)),'success'); + } + if($_GPC['ids']){ + $ids = explode(",", $_GPC['ids']);; + foreach($ids as$k=>$v){ + pdo_update(PDO_NAME.'comment',array('checkone'=>$_GPC['check']),array('id'=>$v)); + if($_W['wlsetting']['creditset']['commentcredit'] && $_GPC['check'] == 2){ + $mid = pdo_getcolumn(PDO_NAME.'comment',array('id'=>$v),'mid'); + Member::credit_update_credit1($mid, $_W['wlsetting']['creditset']['commentcredit'], '评价赠送积分'); + } + } + wl_message("操作成功!",web_url('store/storeComment/index'),'success'); + } + + + include wl_template('store/comment_check'); + } + //商户评论回复 + public function reply(){ + global $_W,$_GPC; + $id = $_GPC['id']; + $pindex = $_GPC['pindex']; + $page = $_GPC['page']; + $data = Util::getSingelData("*", PDO_NAME.'comment', array('id'=>$id)); + $starNum = array(); + for($i=0;$i<$data['star'];$i++){ + $starNum[$i] = $i; + } + $data['star'] = $starNum; + $data['pic'] = unserialize($data['pic']); + $data['sName'] = Util::idSwitch('sid', 'sName', $data['sid']); + $data['replypicone'] = unserialize($data['replypicone']); + + + if($_GPC['replytextone']){ + $replyone = $_GPC['replytextone']?2:1; + $update = array( + 'replytextone'=>$_GPC['replytextone'], + 'replypicone'=>serialize($_GPC['replypicone']), + 'replyone'=>$replyone, + ); + pdo_update(PDO_NAME.'comment',$update,array('id'=>$id)); + //发送模板消息 + $comment = pdo_get('wlmerchant_comment',array('id' => $id),array('mid','replytextone','sid')); + $storename = pdo_getcolumn(PDO_NAME.'merchantdata',array('id'=>$comment['sid']),'storename'); + $openid = pdo_getcolumn(PDO_NAME.'member',array('id'=>$comment['mid']),'openid'); + $first = '商家回复了您的评论'; + $type = '商家评论回复'; + $status = '已回复'; + $remark = '回复内容:'.$comment['replytextone']; + $content = '商家名:['.$storename.']'; + News::jobNotice($comment['mid'],$first,$type,$content,$status,$remark,time()); + wl_message("操作成功!",web_url('store/storeComment/index',array('page'=>$page)),'success'); + } + include wl_template('store/comment_reply'); + + } + //添加商户评论 + public function add(){ + global $_W,$_GPC; + $id = $_GPC['id']; + $pindex = $_GPC['pindex']; + $page = $_GPC['page']; + if(empty($id) && !is_store()){ + $storeList = pdo_getall('wlmerchant_merchantdata',array('uniacid' => $_W['uniacid'],'aid' => $_W['aid'],'status' => 2,'enabled' => 1),array('id','storename')); + }else{ + if($id) $data = Util::getSingelData("*", PDO_NAME.'comment', array('id'=>$id)); + } + if($_GPC['data']){ + unset($data['id']); + $update = $_GPC['data']; + if(empty($id)){ + $data['sid'] = $update['sid']; + $data['gid'] = $update['gid']; + $data['plugin'] = $update['plugin']; + $data['uniacid'] = $_W['uniacid']; + $data['aid'] = $_W['aid']; + $data['status'] = 1; + } + $data['star'] = $update['star']; + if($data['star'] > 3){ + $data['level'] = 1; + }else if($data['star'] == 3){ + $data['level'] = 2; + }else{ + $data['level'] = 3; + } + $data['headimg'] = tomedia($update['headimg']); + $data['nickname'] = $update['nickname']; + $data['text'] = $update['text']; + $data['createtime'] = strtotime($update['time']); + $data['replytextone'] = $update['replytextone']; + if(!empty($data['replytextone'])){ + $data['replyone'] = 2; + } + $data['true'] = 2; + $data['checkone'] = 2; + $data['pic']=serialize($_GPC['pic']); + $data['replypicone']=serialize($_GPC['replypicone']); + pdo_insert(PDO_NAME.'comment',$data); + wl_message("操作成功!",web_url('store/storeComment/index',array('page'=>$page)),'success'); + } + include wl_template('store/comment_add'); + } + //删除商户评论 + public function delete(){ + global $_W,$_GPC; + $pindex = $_GPC['pindex']; + if($_GPC['id']){ + $ids = explode(",", $_GPC['id']);; + foreach($ids as$k=>$v){ + pdo_delete(PDO_NAME.'comment',array('id'=>$v)); + } + } + show_json(1); + } +} diff --git a/addons/weliam_smartcity/web/controller/store/storeDynamic.ctrl.php b/addons/weliam_smartcity/web/controller/store/storeDynamic.ctrl.php new file mode 100644 index 0000000..42ad41e --- /dev/null +++ b/addons/weliam_smartcity/web/controller/store/storeDynamic.ctrl.php @@ -0,0 +1,191 @@ +$v){ + pdo_update(PDO_NAME.'store_dynamic',array('status'=>$_GPC['check']),array('id'=>$v)); + } + wl_message("操作成功!",web_url('store/storeDynamic/dynamic'),'success'); + } + } + //动态详情 + public function checkdyn(){ + global $_W,$_GPC; + $id = $_GPC['id']; + $data = pdo_get(PDO_NAME.'store_dynamic',array('id' => $id)); + $data['pic'] = unserialize($data['imgs']); + $data['sName'] = Util::idSwitch('sid', 'sName', $data['sid']); + if($_GPC['token']){ + $update = array( + 'content' => $_GPC['content'], + 'status' => $_GPC['checkone'], + 'imgs' => serialize($_GPC['pic']), + ); + pdo_update(PDO_NAME.'store_dynamic',$update,array('id'=>$id)); + wl_message("操作成功!",web_url('store/storeDynamic/dynamic'),'success'); + } + include wl_template('store/dynamic_check'); + } + //批量删除动态 + public function dyndelete(){ + global $_W,$_GPC; + if($_GPC['ids']){ + $ids = explode(",", $_GPC['ids']);; + foreach($ids as$k=>$v){ + pdo_delete(PDO_NAME.'store_dynamic',array('id'=>$v)); + } + } + wl_message("操作成功!",web_url('store/storeDynamic/dynamic'),'success'); + } + //动态列表 + public function dynamic(){ + global $_W,$_GPC; + $pindex = max(1, intval($_GPC['page'])); + $psize = 10; + $where=array(); + $where['uniacid'] = $_W['uniacid']; + $where['aid'] = $_W['aid']; + if(is_store()){ + $where['sid'] = $_W['storeid']; + } + if (empty($starttime) || empty($endtime)) {//初始化时间 + $starttime = strtotime('-1 month'); + $endtime = time(); + } + if (!empty($_GPC['time'])) { + $starttime = strtotime($_GPC['time']['start']); + $endtime = strtotime($_GPC['time']['end']); + switch($_GPC['timetype']){ + case 1:$where['createtime>'] = $starttime; + $where['createtime<'] = $endtime;break; + case 2:$where['passtime>'] = $starttime; + $where['passtime<'] = $endtime;break; + case 3:$where['sendtime>'] = $starttime; + $where['sendtime<'] = $endtime;break; + } + } + if (!empty($_GPC['type'])){ + if($_GPC['type'] == 4){ + $where['status'] = 0; + }else { + $where['status'] = $_GPC['type']; + } + } + if (!empty($_GPC['keyword'])) $where['sid'] = $_GPC['keyword']; + $data = Util::getNumData("*",PDO_NAME.'store_dynamic',$where,'createtime desc',$pindex,$psize,1); + $lists = $data[0]; + $pager = $data[1]; + foreach($lists as $key=>&$dyn){ + $dyn['sName'] = pdo_getcolumn(PDO_NAME.'merchantdata',array('id'=>$dyn['sid']),'storename'); + $member = pdo_get(PDO_NAME.'member',array('id'=>$dyn['mid']),array('avatar','nickname')); + $dyn['headimg'] = tomedia($member['avatar']); + $dyn['nickname'] = $member['nickname']; + } + include wl_template('store/dynamic'); + } + //删除动态 + public function deletedyn() { + global $_W,$_GPC; + if ($_W['ispost']) { + $id = intval($_GPC['id']); + if (empty($id)) { + show_json(0, '参数错误,请刷新重试!'); + }else { + $res = pdo_delete('wlmerchant_store_dynamic', array('id' => $id,'aid' => intval($_W['aid']))); + } + if($res){ + show_json(1); + }else { + show_json(0, '删除失败,请刷新页面重试!'); + } + } + } + //动态审核 + public function passdyn() { + global $_W,$_GPC; + if ($_W['ispost']) { + $id = intval($_GPC['id']); + if (empty($id)) { + show_json(0, '参数错误,请刷新重试!'); + }else { + $type = $_GPC['type']; + if($type == 'pass'){ + $res = pdo_update('wlmerchant_store_dynamic',array('status' => 1,'passtime'=>time()),array('id' => $id)); + }else if($type == 'reject'){ + $res = pdo_update('wlmerchant_store_dynamic',array('status' => 3,'passtime'=>time()),array('id' => $id)); + } + } + if($res){ + show_json(1,'审核成功'); + }else { + show_json(0, '删除失败,请刷新页面重试!'); + } + } + } + //推送动态 + public function senddyn(){ + global $_W,$_GPC; + $id = intval($_GPC['id']); + $dynamic = pdo_get('wlmerchant_store_dynamic',array('id' => $id,'status'=>1)); + if(empty($dynamic)){ + wl_message('此动态已删除或已推送'); + } + $fans = pdo_getall('wlmerchant_storefans',array('uniacid'=>$_W['uniacid'],'sid' => $dynamic['sid']),array('mid')); + $fannum = count($fans); + if(checksubmit('submit')){ + $firsttext = $_GPC['firsttext']; + $remark = $_GPC['remark']; + $content = $_GPC['content']; + $source = $_GPC['source'] ? : 1; + + include wl_template('store/dyn-process'); + exit; + } + + include wl_template('store/dynamicmodel'); + } + //批量推送 + public function senddyning(){ + global $_W,$_GPC; + $id = intval($_GPC['id']); + $firsttext = $_GPC['firsttext']; + $remark = $_GPC['remark']; + $content = $_GPC['content']; + $source = $_GPC['source'] ? : 1; + $psize = 50; + $request_body = file_get_contents('php://input'); + $data = json_decode($request_body, true); + $pindex = $data['pindex']; + $success = $data['success']; + + $dynamic = pdo_get('wlmerchant_store_dynamic',array('id' => $id,'status'=>1)); + $fans = pdo_fetchall("SELECT mid FROM ".tablename('wlmerchant_storefans')."WHERE sid = {$dynamic['sid']} AND uniacid = {$_W['uniacid']} ORDER BY id DESC LIMIT ".$pindex * $psize . ',' . $psize); + if($fans){ + $url = h5_url('pages/mainPages/store/index',['sid'=>$dynamic['sid']]); + foreach($fans as $key => $fan) { + //模板消息 + News::jobNotice($fan['mid'],$firsttext,'商家动态推送',$content,'已完成',$remark,time(),$url,$source); + //站内私信 + pdo_insert(PDO_NAME.'im', array('uniacid' => $_W['uniacid'],'send_id'=> $dynamic['sid'],'send_type'=> 2,'receive_id'=>$fan['mid'],'receive_type'=>1,'create_time'=>time(),'content'=>$content)); + $success++; + } + $return = array('result' => 1,'success' => $success); + }else{ + pdo_update('wlmerchant_store_dynamic',array('status' => 2,'sendtime'=>time(),'successnum'=>$success),array('id' => $id)); + $return = array('result' => 3,'success' => $success); + } + die(json_encode($return)); + } +} diff --git a/addons/weliam_smartcity/web/controller/store/storeSetMeal.ctrl.php b/addons/weliam_smartcity/web/controller/store/storeSetMeal.ctrl.php new file mode 100644 index 0000000..8e76d49 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/store/storeSetMeal.ctrl.php @@ -0,0 +1,94 @@ + &$v) { + if($v['aid']){ + $v['agentname'] = pdo_getcolumn(PDO_NAME.'agentusers',array('id'=>$v['aid']),'agentname'); + }else{ + $v['agentname'] = '平台通用'; + } + } + include wl_template('store/chargelist'); + } + /** + * Comment: 商户套餐添加、修改操作 + * Author: zzw + * Date: 2020/4/13 11:04 + */ + public function add() { + global $_W, $_GPC; + #1、参数获取 + $id = $_GPC['id'] ? : ''; + if (checksubmit('submit')) { + //添加、修改操作 + $memberType = $_GPC['data'] ? : []; + $memberType['authority'] = serialize($_GPC['authority']); + //根据是否存在id 判断是添加信息还是修改信息 + if ($id) { + //判断是否修改信息 + $isUpdate = pdo_get(PDO_NAME."chargelist",$memberType); + if($isUpdate) wl_message('请修改后提交!' , web_url('store/storeSetMeal/add',['id'=>$id]) , 'error'); + $res = pdo_update(PDO_NAME . 'chargelist' , $memberType , ['id' => $_GPC['id']]); + }else { + $memberType['aid'] = $_W['aid']; + $memberType['uniacid'] = $_W['uniacid']; + $res = pdo_insert(PDO_NAME . 'chargelist' , $memberType); + } + //判断操作是否成功 + if ($res) wl_message('操作成功!' , web_url('store/storeSetMeal/chargelist') , 'success'); + else wl_message('操作失败!' , web_url('store/storeSetMeal/chargelist') , 'error'); + } + #2、获取基本信息 + if ($id) { + $data = Util::getSingelData("*", PDO_NAME . 'chargelist', ['id' => $id]); + $data['authority'] = unserialize($data['authority']); + } + $agents = pdo_getall(PDO_NAME.'agentusers',['uniacid' => $_W['uniacid'],'status'=>1],['id','agentname']); + + include wl_template('store/chargeadd'); + } + //删除套餐 + public function delete() { + global $_W, $_GPC; + $res = pdo_delete(PDO_NAME . 'chargelist', array('id' => $_GPC['id'])); + if($res){ + show_json(1); + }else{ + show_json(0,'删除失败,请刷新重试'); + } + } + /** + * Comment: 修改状态 + * Author: zzw + * Date: 2019/9/18 16:33 + */ + public function changeStatus (){ + global $_W , $_GPC; + #1、获取参数信息 + $id = $_GPC['id'] OR Commons::sRenderError('缺少参数:id'); + $status = $_GPC['status'] ? : 0; + #1、修改操作 + $res = pdo_update(PDO_NAME."chargelist",['status'=>$status],['id'=>$id]); + if($res) Commons::sRenderSuccess('修改成功'); + else Commons::sRenderError('修改失败,请刷新重试!'); + } +} \ No newline at end of file diff --git a/addons/weliam_smartcity/web/controller/user/login.ctrl.php b/addons/weliam_smartcity/web/controller/user/login.ctrl.php new file mode 100644 index 0000000..a29781a --- /dev/null +++ b/addons/weliam_smartcity/web/controller/user/login.ctrl.php @@ -0,0 +1,207 @@ +$_GPC['aid']),'uniacid'); + $_W['aid'] = $_GPC['aid']; + } + $set = Setting::wlsetting_read('base'); + if(checksubmit() || $_W['isajax']) { + if($_GPC['aid']){ + $this->staffLogin($_GPC);//代理商员工登录 + }else{ + isetcookie('__wlagent_staff_session', '', -10000);//删除员工登录信息 + $this->_login($_GPC['referer']);//代理商登陆 + } + } + include wl_template('user/agent_login'); + } + /** + * Comment: 代理商/员工退出登录 + */ + public function logout(){ + global $_W,$_GPC; + if($_GPC['__wlagent_staff_session']){ + isetcookie('__wlagent_session', '', -10000);//删除代理商登录信息 + isetcookie('__wlagent_staff_session', '', -10000);//删除员工登录信息 + header('Location:' . web_url('user/login/agent_login',array('aid'=>$_W['aid']))); + }else if($_GPC['__wlagent_session']){ + isetcookie('__wlagent_session', '', -10000);//删除代理商登录信息 + isetcookie('__wlagent_staff_session', '', -10000);//删除员工登录信息 + header('Location:' . web_url('user/login/agent_login')); + } + } + /** + * Comment: 代理商登陆操作 + * @param string $forward + */ + public function _login($forward = '') { + global $_GPC, $_W; + $member = array(); + $username = trim($_GPC['username']); + + pdo_query('DELETE FROM'.tablename('users_failed_login'). ' WHERE lastupdate < :timestamp', array(':timestamp' => TIMESTAMP-300)); + $failed = pdo_get('users_failed_login', array('username' => $username, 'ip' => CLIENT_IP)); + if ($failed['count'] >= 5) { + wl_message('输入密码错误次数超过5次,请在5分钟后再登录',referer(), 'info'); + } + if(empty($username)) { + wl_message('请输入要登录的用户名'); + } + $member['uniacid'] = $_GPC['i']; + $member['username'] = $username; + $member['password'] = $_GPC['password']; + if(empty($member['password'])) { + wl_message('请输入密码'); + } + $record = User::agentuser_single($member); + if(!empty($record)) { + if($record['status'] != 1) { + wl_message('您的账号正在审核或是已经被系统禁止,请联系网站管理员解决!'); + } + if (!empty($record['endtime']) && $record['endtime'] < TIMESTAMP) { + wl_message('您的账号有效期限已过,请联系网站管理员解决!'); + } + $cookie = array(); + $cookie['id'] = $record['id']; + $cookie['uniacid'] = $record['uniacid']; + $cookie['hash'] = md5($record['password'] . $record['salt']); + $session = base64_encode(json_encode($cookie)); + isetcookie('__wlagent_session', $session, 7 * 86400, true); + + $status = array(); + $status['id'] = $record['id']; + $status['lastvisit'] = TIMESTAMP; + $status['lastip'] = CLIENT_IP; + User::agentuser_update($status); + + pdo_delete('users_failed_login', array('id' => $failed['id'])); + wl_message("欢迎回来,{$record['username']}。", web_url('dashboard/dashboard')); + } else { + if (empty($failed)) { + pdo_insert('users_failed_login', array('ip' => CLIENT_IP, 'username' => $username, 'count' => '1', 'lastupdate' => TIMESTAMP)); + } else { + pdo_update('users_failed_login', array('count' => $failed['count'] + 1, 'lastupdate' => TIMESTAMP), array('id' => $failed['id'])); + } + wl_message('登录失败,请检查您输入的用户名和密码!'); + } + } + /** + * Comment: 代理商员工登录 + * Author: zzw + * @param $info 登录信息 + */ + protected function staffLogin($info){ + global $_W; + #1、接收参数信息 + $aid = $info['aid']; + $account = $info['username']; + $password = $info['password']; + #2、判断信息是否完整 + if(!$account){ + wl_message('登录失败!请填写账号信息。'); + }else if (!$password){ + wl_message('登录失败!请填写账号密码。'); + } + #3、判断代理商是否存在 + $agent = pdo_get(PDO_NAME."agentusers",array('id'=>$aid)); + if(!$agent){ + wl_message('登录失败!代理商信息不存在。'); + }else if ($agent['status'] != 1){ + wl_message('登录失败!该代理商正在审核或是已经被禁用,请联系网站管理员解决。'); + }else if(!empty($agent['endtime']) && $agent['endtime'] < TIMESTAMP){ + wl_message('登录失败!该代理商运营有效期已过,请联系网站管理员解决。'); + } + #4、判断是否存在该账号 + $existence = pdo_get(PDO_NAME."agentadmin",array('account'=>$account)); + if(!$existence){ + wl_message('登录失败!账号不存在。'); + } + #5、判断账号密码是否正确 + $userInfo = pdo_get(PDO_NAME."agentadmin",array('account'=>$account,'password'=>md5($password))); + if(!$userInfo){ + wl_message('登录失败!密码错误。'); + } + #6、登录成功后的操作 - 模拟代理商登录成功 + $cookie['id'] = $agent['id']; + $cookie['uniacid'] = $agent['uniacid']; + $cookie['hash'] = md5($agent['password'] . $agent['salt']); + $session = base64_encode(json_encode($cookie)); + isetcookie('__wlagent_session', $session, 7 * 86400, true); + #7、登录成功后的操作 - 员工登录成功,储存员工登录信息 + $userCookie['aid'] = $aid; + $userCookie['uniacid'] = $_W['uniacid']; + $userCookie['account'] = $account; + $userCookie['password'] = md5($password); + $userSession = base64_encode(json_encode($userCookie)); + isetcookie('__wlagent_staff_session', $userSession, 7 * 86400, true); + #8、获取该管理员的昵称信息 + $mid = $userInfo['mid']; + $nickname = pdo_getcolumn(PDO_NAME."member",array('id'=>$mid),'nickname'); + wl_message("欢迎回来,{$nickname}。", web_url('dashboard/dashboard')); + } + + + //平台员工登录 + public function adminStaffLogin(){ + global $_W,$_GPC; + //参数信息获取 + $account = $_GPC['username'] ? : ''; + $password = $_GPC['password'] ? : ''; + $uniacid = $_GPC['i'] ? : $_W['uniacid']; + $set = Setting::wlsetting_read('base'); + if($account) { + if(!$account || !$password) wl_message('请完善账号密码!'); + //判断账号密码是否正确 + $where = [ + 'account' => $account, + 'password' => md5($password), + 'uniacid' => $uniacid, + 'aid' => 0,//平台员工aid固定为1 + ]; + $existence = pdo_get(PDO_NAME."agentadmin",$where); + if(!$existence) wl_message('账号密码错误!'); + //模拟后台登录 + $_W['highest_role'] = 'founder'; + //记录员工登录信息 + $user = [ + 'uniacid' => $uniacid, + 'account' => $account, + 'password' => md5($password) + ]; + $userSession = base64_encode(json_encode($user)); + isetcookie('__wlsystem_staff_session', $userSession, 7 * 86400, true); + //获取该管理员的昵称信息 + $nickname = pdo_getcolumn(PDO_NAME."member",['id' => $existence['mid']],'nickname'); + + $url = web_url('dashboard/dashboard/index'); + wl_message("欢迎回来,{$nickname}。", $url); + } + + include wl_template('user/agent_login'); + } + //平台员工退出登录 + public function adminStaffLogout(){ + global $_W,$_GPC; + //删除员工登录信息 + if($_GPC['__wlsystem_staff_session'] || $_GPC['__session']){ + isetcookie('__session', '', -10000);//删除模拟的管理员登录信息 + isetcookie('__wlsystem_staff_session', '', -10000);//删除员工登录信息 + } + + $loginUrl = $_W['siteroot']."web/citysys.php?p=user&ac=login&do=adminStaffLogin&i={$_W['uniacid']}";//平台员工登录 + header('Location:' . $loginUrl); + } + + +} diff --git a/addons/weliam_smartcity/web/controller/user/storelogin.ctrl.php b/addons/weliam_smartcity/web/controller/user/storelogin.ctrl.php new file mode 100644 index 0000000..67b2862 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/user/storelogin.ctrl.php @@ -0,0 +1,153 @@ + -1, + 'end_time' => $endTime + ]; + Cache::setCache('storeLoginInfo', $onlyKey, json_encode($data)); + #2、判断公众号是否存在 + if(p('wxplatform')) { + $wechat = 1; + //获取微信公众号二维码信息 + $path = h5_url('pages/subPages/merchant/storePcLogin/storePcLogin', ['only_key' => $onlyKey]); + } else { + $wechat = 0; + } + #3、判断小程序是否存在 + $weapp = 0; + if(p('wxapp')) { + //获取小程序二维码信息 + $weAppPath = WeApp::getQrCode('pages/subPages/merchant/storePcLogin/storePcLogin?only_key='.$onlyKey,'store_login_'.$onlyKey.'.png');//保存名称)); + if(is_string($weAppPath) && $weAppPath){ + $weapp = 1; + $weAppPath = tomedia($weAppPath); + } + } + + include wl_template('user/store_login'); + } + /** + * Comment: 更新二维码过期时间 + * Author: zzw + * Date: 2019/11/7 14:57 + */ + public function changeEndTime(){ + global $_W,$_GPC; + #1、参数获取 + $onlyKey = $_GPC['only_key'] OR Commons::sRenderError('请刷新重试'); + #2、修改过期时间 + $loginInfo = json_decode(Cache::getCache('storeLoginInfo', $onlyKey), true); + #3、更新到期时间 + $time = intval(180);//3分钟过期 + $endTime = time() + $time;//到期时间 + $data = [ + 'status' => -1, + 'end_time' => $endTime + ]; + Cache::setCache('storeLoginInfo', $onlyKey, json_encode($data)); + + Commons::sRenderSuccess('新的过期信息',$data); + } + /** + * Comment: 获取商户登录状态 + * Author: zzw + * Date: 2019/10/30 17:08 + */ + public function getLoginStatus() { + global $_W, $_GPC; + #1、参数获取 + $onlyKey = $_GPC['only_key'] OR Commons::sRenderError('请刷新重试'); + #2、获取当前用户的扫描状态 + $loginInfo = json_decode(Cache::getCache('storeLoginInfo', $onlyKey), true); + #3、判断储存内容是否正确 + if (!is_array($loginInfo)) Commons::sRenderSuccess('登录状态', ['status' => intval(-3)]); + #4、判断是否过期 + if ($loginInfo['end_time'] <= time()) Commons::sRenderSuccess('登录状态', ['status' => intval(-3)]); + + if ($loginInfo['status'] == 2) { + $cookie = array(); + $cookie['mid'] = $loginInfo['mid']; + $cookie['uniacid'] = $_W['uniacid']; + $session = base64_encode(json_encode($cookie)); + isetcookie('__wlstore_session', $session, 7 * 86400, true); + } + + Commons::sRenderSuccess('登录状态', ['status' => intval($loginInfo['status']), 'mid' => intval($loginInfo['mid'])]); + } + /** + * Comment: 通过用户mid获取用户名下的所有店铺 + * Author: zzw + * Date: 2019/10/31 14:43 + */ + public function storeLogin() { + global $_W, $_GPC; + #1、获取当前用户的所有店铺列表 + $list = pdo_fetchall("SELECT a.name,b.id,b.storename,b.logo,b.endtime,a.ismain FROM " + . tablename(PDO_NAME . "merchantuser") . " as a RIGHT JOIN " . tablename(PDO_NAME . "merchantdata") + . " as b ON a.storeid = b.id WHERE a.mid = {$_W['mid']} AND a.enabled = 1 AND b.enabled = 1 AND a.ismain != 2 GROUP BY a.storeid ORDER BY a.createtime ASC "); + #1、循环处理商户信息 + if (empty($list)) { + wl_message("您没有可管理商户", web_url('user/storelogin/storeLogin', ['mid' => $_W['mid']]), 'fixed'); + } + //检测认证功能 + if(p('attestation')){ + $attset = Setting::wlsetting_read('attestation'); + }else{ + $attset = []; + } + + foreach ($list as $key => &$val) { + //处理logo图 + $val['logo'] = tomedia($val['logo']); + //处理店铺到期时间 + $val['endtime'] = $val['endtime'] > time() ? floor(($val['endtime']-time())/86400) . '天后到期' : '已到期'; + //处理店员类型 + if ($val['ismain'] == 1) { + $val['ismain'] = '店长'; + } else if ($val['ismain'] == 3) { + $val['ismain'] = '管理员'; + } else if ($val['ismain'] == 4) { + $val['ismain'] = '业务员'; + } + //认证 + if($attset['attmanage'] == 1){ + $attestation = Attestation::checkAttestation(2,$val['id']); + if($attestation['attestation'] != 2){ + $val['noatt'] = 1; + } + } + + } + + include wl_template('user/select_shop'); + } + + public function on_store() { + global $_W, $_GPC; + $this->select_store(intval($_GPC['sid'])); + } + + public function logout() { + isetcookie('__wlstore_session', '', -10000); + isetcookie('__wlstoreid_session', '', -10000); + header('Location:' . web_url('user/storelogin/store_login')); + } + + private function select_store($storeid) { + isetcookie('__wlstoreid_session', $storeid, 7 * 86400, true); + header('Location:' . web_url('dashboard/dashboard')); + } +} diff --git a/addons/weliam_smartcity/web/controller/utility/attachment.ctrl.php b/addons/weliam_smartcity/web/controller/utility/attachment.ctrl.php new file mode 100644 index 0000000..3c7c617 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/utility/attachment.ctrl.php @@ -0,0 +1,372 @@ + $uniacid , + 'mimetype like' => "%{$mimeType}%" , + ]; + if ($group_id > 0) $where['group_id'] = $group_id; + if ($shop_id > 0) $where['shop_id'] = $shop_id; + if ($shop_id < 0) $where['shop_id'] = 0; + if ($aid > 0) $where['aid'] = $aid; + //分页操作 + $limit = [$page,$pageIndex]; + //列表信息获取 + $field = ['id','aid','shop_id','url','imagewidth','imageheight','filesize','uploadtime','storage','name']; + $list = pdo_getall(PDO_NAME.'attachment',$where,$field,'','id DESC',$limit); + foreach($list as $key => &$val){ + //获取上传方信息 + if($val['aid'] > 0) $val['upload_user'] = pdo_getcolumn(PDO_NAME."agentusers",['id'=>$val['aid']],'agentname'); + if($val['shop_id'] > 0) $val['upload_user'] = pdo_getcolumn(PDO_NAME."merchantdata",['id'=>$val['shop_id']],'storename'); + //处理基本信息 + $val['http_url'] = tomedia($val['url']);//附件地址 + $val['filesize'] = sprintf("%.2f",$val['filesize'] / 1024);//附件大小 精确到M + $val['uploadtime'] = date("Y-m-d H:i:s",$val['uploadtime']);//附件大小 精确到M + //删除多余的信息 + unset($val['aid'],$val['shop_id']); + } + //生成分页数据 + $total = pdo_count(PDO_NAME.'attachment',$where); + $totalPage = ceil($total / $pageIndex); + + + Commons::sRenderSuccess('附件信息列表',['list'=>$list,'total_page'=>$totalPage]); + } + + include wl_template('utility/attachment_index'); + } + /** + * Comment: 文件上传 + * Author: zzw + * Date: 2020/8/28 16:44 + * @throws Exception + */ + public function uploadFile(){ + global $_W,$_GPC; + //基本参数信息获取 + $params = [ + 'uniacid' => $_W['uniacid'] , + 'aid' => $_W['aid'] ? : 0 , + 'shop_id' => $_W['storeid'] ? : 0 , + 'group_id' => intval($_GPC['group_id']) ? : 0 , + 'filesize' => $_FILES['file']['size'] , + 'mimetype' => $_FILES['file']['type'] , + 'name' => $_FILES['file']['name'] , + ]; + + UploadFile::uploadIndex($_FILES,1,0,$params); + } + /** + * Comment: 删除附件信息 + * Author: zzw + * Date: 2020/8/31 13:51 + */ + public function delAttachment(){ + global $_W,$_GPC; + //基本参数信息获取 + $ids = $_GPC['ids'] OR Commons::sRenderError('参数错误,请刷新重试!'); + //循环处理判断图片信息 + if(is_array($ids)){ + foreach($ids as $id){ + $this->delAttachmentFile($id); + } + }else{ + $this->delAttachmentFile($ids); + } + //删除信息 + if(pdo_delete(PDO_NAME."attachment",['id IN'=>$ids])) Commons::sRenderSuccess('删除成功'); + else Commons::sRenderError('删除失败,请刷新重试!'); + } + /** + * Comment: 删除附件信息的同时删除本地文件信息 + * Author: zzw + * Date: 2020/12/7 14:54 + * @param $id + */ + public function delAttachmentFile($id){ + global $_W; + //判断附件是否储存在本地 + $info = pdo_get(PDO_NAME."attachment",['id'=>$id],['storage','url']); + if($info['storage'] == 0){ + $fullName = PATH_ATTACHMENT . $info['url'];//文件在本地服务器暂存地址 + + unlink($fullName); + } + } + /** + * Comment: 移动附件到其他分组 + * Author: zzw + * Date: 2020/9/1 11:06 + */ + public function moveAttachment(){ + global $_W,$_GPC; + //参数信息获取 + $ids = $_GPC['ids'] OR Commons::sRenderError("未选择附件,请重试!"); + $group_id = $_GPC['group_id'] OR Commons::sRenderError("不存在的分组!"); + //移动操作 + pdo_update(PDO_NAME."attachment",['group_id'=>$group_id],['id IN'=>$ids]); + + Commons::sRenderSuccess("操作成功"); + } + /** + * Comment: 获取分组列表信息 + * Author: zzw + * Date: 2020/8/28 17:31 + */ + public function groupIndex(){ + global $_W,$_GPC; + //基本参数信息获取 + $mimeType = $_GPC['mime_type'] ? : 'image';//附件类型:image、video、application + $shop_id = intval($_W['storeid']) ? : 0; + $aid = intval($_W['aid']) ? : 0; + $uniacid = $_W['uniacid']; + //条件生成 总后可以查看所有图片但是只能查看总后台的分组 + $type = $this->groupValueTransformation($mimeType); + $where = [ + 'uniacid' => $uniacid , + 'type' => $type , + 'shop_id' => $shop_id , + 'aid' => $aid , + ]; +// if ($shop_id > 0) $where['shop_id'] = $shop_id; +// if ($aid > 0) $where['aid'] = $aid; + //列表信息获取 + $list = pdo_getall(PDO_NAME."attachment_group",$where,['id','name'],'','id DESC'); + + Commons::sRenderSuccess('分组信息',$list); + } + /** + * Comment: 添加分组 + * Author: zzw + * Date: 2020/8/28 16:57 + */ + public function groupAdd(){ + global $_W , $_GPC; + //信息获取 + $name = $_GPC['name'] OR Commons::sRenderError('请输入组名称!'); + $mimeType = $_GPC['mime_type'] ? : 'image';//附件类型:image、video、application + $shop_id = $_W['storeid']; + $aid = $_W['aid']; + $uniacid = $_W['uniacid']; + //条件生成 分组类型:1=图片,2=视频,3=文件 + $type = $this->groupValueTransformation($mimeType); + $where = [ + 'name' => $name, + 'uniacid' => $uniacid , + 'type' => $type , + ]; + if ($shop_id > 0) $where['shop_id'] = $shop_id; + if ($aid > 0) $where['aid'] = $aid; + //判断是否已经存在 + $isHave = pdo_get(PDO_NAME . "attachment_group" , $where); + if ($isHave) Commons::sRenderError('分组已存在!'); + //添加操作 + $data = [ + 'uniacid' => $uniacid , + 'aid' => $aid , + 'shop_id' => $shop_id , + 'type' => $type , + 'name' => $name , + ]; + pdo_insert(PDO_NAME."attachment_group",$data); + + Commons::sRenderSuccess('添加成功'); + } + /** + * Comment: 编辑组信息 + * Author: zzw + * Date: 2020/8/28 18:35 + */ + public function groupEdit(){ + global $_W , $_GPC; + //信息获取 + $id = $_GPC['id'] OR Commons::sRenderError('参数错误,请刷新重试!'); + $name = $_GPC['name'] OR Commons::sRenderError('请输入组名称!'); + $mimeType = $_GPC['mime_type'] ? : 'image';//附件类型:image、video、application + $shop_id = $_W['storeid']; + $aid = $_W['aid']; + $uniacid = $_W['uniacid']; + //条件生成 分组类型:1=图片,2=视频,3=文件 + $type = $this->groupValueTransformation($mimeType); + $where = [ + 'name' => $name, + 'uniacid' => $uniacid , + 'type' => $type , + ]; + if ($shop_id > 0) $where['shop_id'] = $shop_id; + if ($aid > 0) $where['aid'] = $aid; + //判断是否已经存在 + $isHave = pdo_get(PDO_NAME . "attachment_group" , $where); + if ($isHave) Commons::sRenderError('分组已存在!'); + //修改操作 + pdo_update(PDO_NAME."attachment_group",['name'=>$name],['id'=>$id]); + + Commons::sRenderSuccess('修改成功'); + } + /** + * Comment: 删除分组 + * Author: zzw + * Date: 2020/8/28 18:08 + */ + public function groupDelete(){ + global $_W,$_GPC; + //参数信息获取 + $id = $_GPC['id'] OR Commons::sRenderError('参数错误,请刷新重试!'); + //删除信息 + pdo_delete(PDO_NAME."attachment_group",['id'=>$id]); + + Commons::sRenderSuccess('删除成功'); + } + /** + * Comment: 导入微擎图片信息 + * Author: zzw + * Date: 2020/8/31 16:49 + */ + public function importAttachment(){ + global $_W,$_GPC; + //获取微擎图片信息 + $list = Cache::getCache('import_attachment','list'); + if(!$list){ + $field = ['filename','attachment','type','createtime','module_upload_dir','group_id']; + $where = ['uniacid'=>$_W['uniacid'],'type'=>1]; + $list = table('core_attachment') + ->select($field) + ->where($where) + ->getall(); + Cache::setCache('import_attachment','list',json_encode($list)); + }else{ + $list = json_decode($list,true); + } + //循环储存附件信息 一次最多50条 + $index = 0; + $tips = true; + (new MysqlFunction())->startTrans();//开启事务 + foreach($list as $key => $value){ + //到达限制 跳出循环 + if(++$index > 50) break; + //判断附件是否已经存在 + $isHave = pdo_get(PDO_NAME."attachment",['url'=>$value['attachment']]); + if($isHave) { + //已经存在当前图片 跳出当前循环 + unset($list[$key]); + continue; + } + //获取图片基本信息 + $params = [ + 'uniacid' => $_W['uniacid'] , + 'aid' => $_W['aid'] , + 'url' => $value['attachment'] , + 'name' => $value['filename'] , + 'uploadtime' => $value['createtime'] , + 'mimetype' => 'image' , + ]; + $url = tomedia($value['attachment']); + list($params['imagewidth'] , $params['imageheight']) = getimagesize($url);//基本参数获取 + $nameArr = explode('.' , $value['attachment']); + $params['suffix'] = $nameArr[count($nameArr) - 1]; + //储存图片信息 + $res = pdo_insert(PDO_NAME."attachment",$params); + if(!$res){ + (new MysqlFunction())->rollback(); + $tips = false; + break; + }else{ + unset($list[$key]); + } + } + //步骤完成 进行其他操作 + if($tips){ + //操作成功 + (new MysqlFunction())->commit(); + if(count($list) > 0){ + $list = array_values($list); + Cache::setCache('import_attachment','list',json_encode($list)); + }else{ + Cache::deleteCache('import_attachment','list'); + } + + Commons::sRenderSuccess('操作成功',['surplus'=>count($list)]); + }else{ + //操作失败 + Commons::sRenderSuccess('操作失败'); + } + } + /** + * Comment: 文件mimetype信息转换 字符串转code + * Author: zzw + * Date: 2020/8/28 17:03 + * @param $mimeType + * @return int + */ + protected function groupValueTransformation($mimeType){ + $type = 1; + switch ($mimeType) { + case 'image': + $type = 1; + break; + case 'video': + $type = 2; + break; + case 'application': + $type = 3; + break; + } + + return $type; + } + /** + * Comment: 获取代理商列表 + * Author: zzw + * Date: 2020/9/23 11:05 + */ + public function getAgentList(){ + global $_W,$_GPC; + $field = ['id','agentname']; + $list = pdo_getall(PDO_NAME."agentusers",['uniacid'=>$_W['uniacid']],$field); + + Commons::sRenderSuccess('代理商列表',['list'=>$list]); + } + /** + * Comment: 获取店铺信息列表 + * Author: zzw + * Date: 2020/9/23 11:16 + */ + public function getShopList(){ + global $_W,$_GPC; + $aid = $_GPC['aid'] ? : $_W['aid']; + $field = ['id','storename']; + $list = pdo_getall(PDO_NAME."merchantdata",['uniacid'=>$_W['uniacid'],'aid'=>$aid],$field); + + Commons::sRenderSuccess('店铺信息列表',['list'=>$list]); + } + + + + +} diff --git a/addons/weliam_smartcity/web/controller/utility/member.ctrl.php b/addons/weliam_smartcity/web/controller/utility/member.ctrl.php new file mode 100644 index 0000000..6396970 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/utility/member.ctrl.php @@ -0,0 +1,21 @@ + $member['id'], 'text' => $member['nickname'].'(MID:'. $member['id'].')'.($member['mobile'] ? ' - ' . $member['mobile'] : '')]; + } + die(json_encode($data)); + } +} \ No newline at end of file diff --git a/addons/weliam_smartcity/web/controller/utility/qrcode.ctrl.php b/addons/weliam_smartcity/web/controller/utility/qrcode.ctrl.php new file mode 100644 index 0000000..f25bb7b --- /dev/null +++ b/addons/weliam_smartcity/web/controller/utility/qrcode.ctrl.php @@ -0,0 +1,21 @@ +png($url, false, QR_ECLEVEL_H, 4); + } + +} \ No newline at end of file diff --git a/addons/weliam_smartcity/web/controller/utility/select.ctrl.php b/addons/weliam_smartcity/web/controller/utility/select.ctrl.php new file mode 100644 index 0000000..f633332 --- /dev/null +++ b/addons/weliam_smartcity/web/controller/utility/select.ctrl.php @@ -0,0 +1,721 @@ + &$v) { + $v['url'] = h5_url('pages/mainPages/store/index' , ['sid' => $v['id']]); + $v['page_path'] = 'pages/mainPages/store/list'; + $v['logo'] = tomedia($v['logo']); + $storehours = unserialize($v['storehours']); + $v['storehours'] = $storehours['startTime'] . '-' . $storehours['endTime']; + unset($v['id']); + } + $data['page'] = $page; + $data['pageNum'] = $pageNum; + $data['total'] = $shop_total; + $data['list'] = $shop; + $data['search'] = $search; + + //获取将要规避的url字符串信息 + $string = 'h5/#/'; + $urlStr = trim(json_encode(explode($string , h5_url(''))[0] . $string) , '"'); + //将要规避的ulr字符串替换为空 + $data = json_decode(str_replace($urlStr , '' , json_encode($data)) , true); + + wl_json(1 , '商户分页信息' , $data); + } + /** + * Comment: 获取商品信息 + * Author: zzw + */ + public function getGoods() + { + global $_W , $_GPC; + $search = $_GPC['search'] ? $_GPC['search'] : ''; + $page = $_GPC['page']; + $pageNum = $_GPC['pageNum']; + $limit = ' LIMIT ' . ($page * $pageNum - $pageNum) . ',' . $pageNum; + $type = $_GPC['type']; + $where = " aid = {$_W['aid']} AND uniacid = {$_W['uniacid']} "; + switch ($type) { + case 1: + if ($search) { + $where .= " AND name LIKE '%{$search}%' "; + } + $info = pdo_fetchall(" SELECT id,name,thumb FROM " . tablename(PDO_NAME . "rush_activity") . " WHERE status IN (1,2) AND {$where} {$limit}"); + $infoTotal = pdo_fetchcolumn('SELECT COUNT(*) FROM ' . tablename(PDO_NAME . 'rush_activity') . " WHERE status IN (1,2) AND {$where}"); + foreach ($info as $k => &$v) { + $v['url'] = h5_url('pages/subPages/goods/index' , ['id' => $v['id'] , 'type' => 1]); + $v['page_path'] = 'pages/subPages/goods/index?type=1'; + $v['logo'] = tomedia($v['thumb']); + unset($v['id']); + } + break;//抢购商品 + case 2: + if ($search) { + $where .= " AND name LIKE '%{$search}%' "; + } + $info = pdo_fetchall(" SELECT id,name,thumb FROM " . tablename(PDO_NAME . "groupon_activity") . " WHERE status IN (1,2) AND {$where} {$limit}"); + $infoTotal = pdo_fetchcolumn('SELECT COUNT(*) FROM ' . tablename(PDO_NAME . 'groupon_activity') . " WHERE status IN (1,2) AND {$where}"); + foreach ($info as $k => &$v) { + $v['url'] = h5_url('pages/subPages/goods/index' , ['id' => $v['id'] , 'type' => 2]); + $v['page_path'] = 'pages/subPages/goods/index?type=2'; + $v['logo'] = tomedia($v['thumb']); + unset($v['id']); + } + break;//团购商品 + case 3: + if ($search) { + $where .= " AND name LIKE '%{$search}%' "; + } + $info = pdo_fetchall(" SELECT id,name,logo FROM " . tablename(PDO_NAME . "fightgroup_goods") . " WHERE status IN (1,2) AND {$where} {$limit}"); + $infoTotal = pdo_fetchcolumn('SELECT COUNT(*) FROM ' . tablename(PDO_NAME . 'fightgroup_goods') . " WHERE status IN (1,2) AND {$where}"); + foreach ($info as $k => &$v) { + $v['url'] = h5_url('pages/subPages/goods/index' , ['id' => $v['id'] , 'type' => 3]); + $v['page_path'] = 'pages/subPages/goods/index?type=3'; + $v['logo'] = tomedia($v['logo']); + unset($v['id']); + } + break;//拼团商品 + case 5: + $where .= " AND status IN (1,2) "; + if ($search) { + $where .= " AND title LIKE '%{$search}%' "; + } + $info = pdo_fetchall(" SELECT id,title,logo FROM " . tablename(PDO_NAME . "couponlist") . " WHERE {$where} {$limit}"); + $infoTotal = pdo_fetchcolumn('SELECT COUNT(*) FROM ' . tablename(PDO_NAME . 'couponlist') . " WHERE {$where}"); + foreach ($info as $k => &$v) { + $v['url'] = h5_url('pages/subPages/goods/index' , ['id' => $v['id'] , 'type' => 5]); + $v['page_path'] = 'pages/subPages/goods/index?type=5'; + $v['name'] = $v['title']; + $v['logo'] = tomedia($v['logo']); + unset($v['id']); + unset($v['title']); + } + break;//卡券信息 + case 6: + if ($search) { + $where .= " AND name LIKE '%{$search}%' "; + } + $info = pdo_fetchall(" SELECT id,name,thumb FROM " . tablename(PDO_NAME . "bargain_activity") . " WHERE status IN (1,2) AND {$where} {$limit}"); + $infoTotal = pdo_fetchcolumn('SELECT COUNT(*) FROM ' . tablename(PDO_NAME . 'bargain_activity') . " WHERE status IN (1,2) AND {$where}"); + foreach ($info as $k => &$v) { + $v['url'] = h5_url('pages/subPages/goods/index' , ['id' => $v['id'] , 'type' => 7]); + $v['page_path'] = 'pages/subPages/goods/index?type=7'; + $v['logo'] = tomedia($v['thumb']); + unset($v['id']); + unset($v['title']); + } + break;//砍价信息 + } + + $data['page'] = $page; + $data['pageNum'] = $pageNum; + $data['total'] = $infoTotal; + $data['list'] = $info; + $data['search'] = $search; + + //获取将要规避的url字符串信息 + $string = 'h5/#/'; + $urlStr = trim(json_encode(explode($string , h5_url(''))[0] . $string) , '"'); + //将要规避的ulr字符串替换为空 + $data = json_decode(str_replace($urlStr , '' , json_encode($data)) , true); + + wl_json(1 , '商品信息' , $data); + } + /** + * Comment: 获取小图标信息 + * Author: zzw + */ + public function comicon() + { + global $_W , $_GPC; + + + include wl_template('utility/selecticon'); + } + /** + * Comment: 根据状态获取商品信息 + * Author: zzw + * @param $plugin 商品类型1=抢购 2=团购 3=拼团 5=优惠券 + * @param $search 搜索内容 + * @return array + */ + protected function getGoodsReturn($plugin , $search,$sid = 0,$addWhere = []) + { + global $_W; + $where = " AND a.uniacid = {$_W['uniacid']} AND a.aid = {$_W['aid']} "; + if($sid > 0) $where .= " AND b.id = {$sid} "; + if($addWhere['is_optionstatus'] == 1) $where .= " AND a.optionstatus = 0 "; + if($addWhere['is_specstatus'] == 1) $where .= " AND a.specstatus = 0 "; + switch ($plugin) { + case 1: + $goods = pdo_fetchall("SELECT a.id,REPLACE('table','table','rush') as `plugin` FROM " + . tablename(PDO_NAME . "rush_activity") + . " a LEFT JOIN " . tablename(PDO_NAME . "merchantdata") + . " b ON a.sid = b.id WHERE a.status IN (1,2,3) {$where} AND b.storename != '' AND a.name LIKE '%{$search}%'");// + break;//抢购商品 + case 2: + $goods = pdo_fetchall("SELECT a.id,REPLACE('table','table','groupon') as `plugin` FROM " . tablename(PDO_NAME . "groupon_activity") . " a LEFT JOIN " . tablename(PDO_NAME . "merchantdata") . " b ON a.sid = b.id WHERE a.status IN (1,2,3) {$where} AND b.storename != '' AND a.name LIKE '%{$search}%'"); + break;//团购商品 + case 3: + $goods = pdo_fetchall("SELECT a.id,REPLACE('table','table','wlfightgroup') as `plugin` FROM " . tablename(PDO_NAME . "fightgroup_goods") . " a LEFT JOIN " . tablename(PDO_NAME . "merchantdata") . " b ON a.merchantid = b.id WHERE a.status IN (1,2) {$where} AND b.storename != '' AND a.name LIKE '%{$search}%'"); + break;//拼团商品 + case 4: + $goods = pdo_fetchall("SELECT a.id,REPLACE('table','table','package') as `plugin` FROM " . tablename(PDO_NAME . "package") . " a LEFT JOIN " . tablename(PDO_NAME . "merchantdata") . " b ON a.merchantid = b.id WHERE a.status = 1 {$where} AND b.storename != '' AND a.title LIKE '%{$search}%'"); + break;//大礼包 + case 5: + $goods = pdo_fetchall("SELECT a.id,REPLACE('table','table','coupon') as `plugin` FROM " . tablename(PDO_NAME . "couponlist") . " a LEFT JOIN " . tablename(PDO_NAME . "merchantdata") . " b ON a.merchantid = b.id WHERE a.status IN (1,2) {$where} AND b.storename != '' AND a.title LIKE '%{$search}%'"); + break;//优惠券 + case 6: + $goods = pdo_fetchall("SELECT a.id,REPLACE('table','table','halfcard') as `plugin` FROM " . tablename(PDO_NAME . "halfcardlist") . " a LEFT JOIN " . tablename(PDO_NAME . "merchantdata") . " b ON a.merchantid = b.id WHERE a.status = 1 {$where} AND b.storename != '' AND a.title LIKE '%{$search}%'"); + break;//折扣卡 + case 7: + $goods = pdo_fetchall("SELECT a.id,REPLACE('table','table','bargain') as `plugin` FROM " . tablename(PDO_NAME . "bargain_activity") . " a LEFT JOIN " . tablename(PDO_NAME . "merchantdata") . " b ON a.sid = b.id WHERE a.status IN (1,2,3) {$where} AND b.storename != '' AND a.name LIKE '%{$search}%'"); + break;//砍价 + } + return $goods; + } + /** + * Comment: 获取全部商品信息 + * Author: zzw + * Date: 2019/7/9 17:50 + */ + public function getWholeGoods() + { + global $_W , $_GPC; + $plugin = 0;//商品类型 0=全部 1=抢购 2=团购 3=拼团 4=大礼包 5=优惠券 6=折扣卡 7=砍价商品 + $search = $_GPC['search'];//搜索内容 商品名称 + $isOptionstatus = intval($_GPC['is_optionstatus']) ? intval($_GPC["is_optionstatus"]) : 0;//是否只获取单规格商品0=不,1=是 + $page = $_GPC['page'] ? $_GPC['page'] : 1; + $pageNum = $_GPC['pageNum'] ? $_GPC['pageNum'] : 7; + $geturl = $_GPC['geturl'] ? $_GPC['geturl'] : 0; + $sid = $_GPC['sid']? $_GPC['sid'] : 0; + $start = $page * $pageNum - $pageNum; + //获取商品信息 + $rush = self::getGoodsReturn(1 , $search , $sid,['is_optionstatus' => $isOptionstatus]);//抢购商品 + $groupon = self::getGoodsReturn(2 , $search , $sid,['is_optionstatus' => $isOptionstatus]);//团购商品 + $wlfightgroup = self::getGoodsReturn(3 , $search , $sid,['is_specstatus' => $isOptionstatus]);//拼团商品 + $coupon = self::getGoodsReturn(5 , $search , $sid);//优惠券 + $bargain = self::getGoodsReturn(7 , $search , $sid);//砍价 + $goods = array_merge($rush , $groupon , $wlfightgroup , $coupon , $bargain); + if (!$goods) { + $popup = '暂无该类型商品'; + include wl_template('utility/selecetgoods'); + die; + } + //获取总页数 进行分页 + $totalPgae = ceil(count($goods) / $pageNum); + $goods = array_slice($goods , $start , $pageNum); + //只有抢购、团购、拼团、优惠券才会进行下面的操作 + $initPlugin = $plugin; + foreach ($goods as $k => &$v) { + //查询全部商品时 每个商品从新定义内容 + if ($initPlugin == 0) { + switch ($v['plugin']) { + case 'rush': + $plugin = 1; + break;//抢购商品 + case 'groupon': + $plugin = 2; + break;//团购商品 + case 'wlfightgroup': + $plugin = 3; + break;//拼团商品 + case 'coupon': + $plugin = 5; + break;//优惠券 + case 'bargain': + $plugin = 7; + break;//砍价商品 + } + } + $v = WeliamWeChat::getHomeGoods($plugin , $v['id']); + //获取商品详情页面的跳转地址 + if ($geturl == 1) { + switch ($plugin) { + case 1: + $v['detail_url'] = h5_url('pages/subPages/goods/index' , ['id' => $v['id'] , 'type' => 1]); + $v['page_path'] = 'pages/subPages/goods/index?type=1'; + break;//抢购商品 + case 2: + $v['detail_url'] = h5_url('pages/subPages/goods/index' , ['id' => $v['id'] , 'type' => 2]); + $v['page_path'] = 'pages/subPages/goods/index?type=2'; + break;//团购商品 + case 3: + $v['detail_url'] = h5_url('pages/subPages/goods/index' , ['id' => $v['id'] , 'type' => 3]); + $v['page_path'] = 'pages/subPages/goods/index?type=3'; + break;//拼团商品 + case 5: + $v['detail_url'] = h5_url('pages/subPages/goods/index' , ['id' => $v['id'] , 'type' => 5]); + $v['page_path'] = 'pages/subPages/goods/index?type=5'; + break;//优惠券 + case 7: + $v['detail_url'] = h5_url('pages/subPages/goods/index' , ['id' => $v['id'] , 'type' => 7]); + $v['page_path'] = 'pages/subPages/goods/index?type=7'; + break;//砍价商品 + } + } + } + + include wl_template('utility/selecetgoods'); + } + /** + * Comment: 用户选择器 + * Author: zzw + * Date: 2019/11/29 17:30 + */ + public function selectUserInfo(){ + global $_W , $_GPC; + #1、参数获取 + $getType = $_GPC['get_type'] ? : 'main';//main=主要信息;list=仅列表信息 + $search = $_GPC['search'] ? : ''; + $params = $_GPC['params'] ? : '';// data-params='{"is_salesman":1}'> + $list = []; + if (!empty($search)) { + #1、条件生成 + $where = " WHERE uniacid = {$_W['uniacid']} and identity_id = 1"; + $where .= " AND ( nickname LIKE '%{$search}%' OR id = '{$search}' OR realname LIKE '%{$search}%' OR mobile LIKE '%{$search}%' )"; + $params = json_decode(base64_decode($params),true); + if($params){ + //获取业务员信息 + if($params['is_salesman'] == 1){ + $members = pdo_getall(PDO_NAME.'distributor', ['uniacid' => $_W['uniacid'], 'disflag' => 1], ['mid']); + $ids = implode(array_column($members,'mid'),','); + $where .= " AND id IN ($ids) "; + } + } + # 限制用户申请企业变更过程中的用户,不得申请 + $midArr = Member::applyChangeInentityUser(); + if ($midArr) $where .= " AND id not in (".implode(",",$midArr).") "; + #2、获取用户信息 + $field = " id,nickname,avatar,realname,mobile,openid,wechat_openid,webapp_openid "; + $list = pdo_fetchall(" SELECT {$field} FROM " . tablename(PDO_NAME . "member") . $where . " ORDER BY createtime ASC LIMIT 0,30 "); + } + + $params = base64_encode(json_encode($_GPC['params'])); + + + include wl_template($getType == 'main' ? 'utility/select_user' : 'utility/select_user_tpl'); + } + /** + * Comment: 商户选择器 + * Author: zzw + * Date: 2020/12/1 17:14 + */ + public function selectShopInfo(){ + global $_W , $_GPC; + #1、参数获取 + $getType = $_GPC['get_type'] ? : 'main';//main=主要信息;list=仅列表信息 + $search = $_GPC['search'] ? : ''; + $params = $_GPC['params'] ? : '';// data-params='{"is_salesman":1}'> + if (!empty($search)) { + #1、条件生成 + $where = " WHERE uniacid = {$_W['uniacid']} AND aid = {$_W['aid']} "; + $where .= " AND ( storename LIKE '%{$search}%' OR id = '{$search}' OR mobile LIKE '%{$search}%' )"; + $params = json_decode(base64_decode($params),true); + if($params){ + + + } + #2、获取商户信息 + $field = " id,storename,mobile,logo,address"; + $order = " ORDER BY createtime ASC LIMIT 0,30 "; + $sql = " SELECT {$field} FROM " . tablename(PDO_NAME . "merchantdata"); + $list = pdo_fetchall($sql.$where.$order); + } + $params = base64_encode(json_encode($_GPC['params'])); + + + include wl_template($getType == 'main' ? 'utility/select_shop' : 'utility/select_shop_tpl'); + } + /** + * Comment: 获取图文抓取模板 + * Author: zzw + * Date: 2019/12/24 16:08 + */ + public function importTextModel(){ + global $_W,$_GPC; + + include wl_template('utility/import'); + } + /** + * Comment: 通过链接获取商品详情 + * Author: zzw + * Date: 2019/12/24 14:51 + */ + public function importTextInfo(){ + global $_W , $_GPC; + #1、参数获取 + $url = $_GPC['url'] OR Commons::sRenderError("url错误!"); + #2、抓取内容 + $result = file_get_contents($url); + if (empty($result['contents'])) { + $result = (new GatherArticle())->get_caiji($url); + } + #2、抓取内容 + if (!empty($result['contents'])) { + $result['contents'] = htmlspecialchars_decode($result['contents']); + Commons::sRenderSuccess('内容' , $result); + } else { + Commons::sRenderError('获取失败,请检查链接是否可用!'); + } + } + /** + * Comment: 地图定位选择坐标 + * Author: zzw + * Date: 2020/9/8 16:22 + */ + public function mapPositioning(){ + global $_W,$_GPC; + //基本信息获取 + $address = $_GPC['address'] ? : ''; + $lat = $_GPC['lat'] ? : '39.90960456049752'; + $lng = $_GPC['lng'] ? : '116.3972282409668'; + $zoom = 12; + $tencentkey = $_W['wlsetting']['api']['txmapkey']; + if(!$address || !$lat || !$lng){ + //未传递默认信息 则根据ip自动获取 + $area = MapService::guide_ip($_W['clientip']); + if (!is_error($area)) { + $lat = $area['result']['location']['lat']; + $lng = $area['result']['location']['lng']; + $location = $area['result']['ad_info']['city']; + } + }else{ + //通过经纬度获取城市信息 + $area = MapService::guide_gcoder($lat . ',' . $lng , 0); + $location = $area['result']['ad_info']['city']; + } + + include wl_template('utility/select_address'); + } + /** + * Comment: 红包选择器 —— 红包列表 + * Author: zzw + * Date: 2020/9/14 14:58 + */ + public function selectRedPack(){ + global $_W,$_GPC; + //基本参数信息获取 + $page = max(1 , intval($_GPC['page'])); + $pageIndex = 10; + $pageStart = $page * $pageIndex - $pageIndex; + $title = trim($_GPC['name']) ? : ''; + //获取红包列表信息 + if($_W['ispost']){ + //条件生成 + $where = " WHERE uniacid = {$_W['uniacid']} AND aid = {$_W['aid']} AND + CASE WHEN usetime_type = 0 AND use_end_time <= unix_timestamp(now()) THEN 2 + ELSE status + END = 1"; + if ($title) $where .= " AND title LIKE '%" . $title . "%'"; + //sql语句生成 + $field = "id,title,use_start_time,use_end_time,usetime_day1,usetime_day2,usetime_type,all_count,limit_count,full_money,cut_money"; + $sql = "SELECT {$field} FROM ".tablename(PDO_NAME."redpacks"); + $order = " ORDER BY createtime DESC "; + $limit = " LIMIT {$pageStart},{$pageIndex} "; + //信息获取 + $list = pdo_fetchall($sql.$where.$order.$limit); + foreach ($list as $key => &$val) { + $usetimes = [ + date('Y-m-d' , $val['use_start_time']) . ' ~ ' . date('Y-m-d' , $val['use_end_time']) , + '领取当日起' . $val['usetime_day1'] . '天内有效' , + '领取次日起' . $val['usetime_day2'] . '天内有效' + ]; + $val['usetime_text'] = $usetimes[$val['usetime_type']]; + $val['all_count'] = $val['all_count'] ? $val['all_count'] . '个' : '无限'; + $val['limit_count'] = $val['limit_count'] ? $val['limit_count'] . '个' : '无限'; + $val['get_count'] = pdo_getcolumn(PDO_NAME.'redpack_records' , ['packid' => $val['id']] , 'COUNT(id)'); + //删除多余的信息 + unset($val['use_start_time'],$val['use_end_time'],$val['usetime_day1'],$val['usetime_day2'],$val['usetime_type']); + } + //获取红包信息总数 + $totalSql = str_replace($field,'count(*)',$sql); + $total = pdo_fetchcolumn($totalSql.$where); + + Commons::sRenderSuccess('红包列表',['list'=>$list,'total'=>ceil($total / $pageIndex)]); + } + + include wl_template('utility/select_red_pack'); + } + /** + * Comment: 获取抽奖奖品信息列表 + * Author: zzw + * Date: 2020/9/16 11:05 + */ + public function selectDrawPrize(){ + global $_W,$_GPC; + if($_W['ispost']){ + //基本参数信息获取 + $page = max(1 , intval($_GPC['page'])); + $pageIndex = 10; + $pageStart = $page * $pageIndex - $pageIndex; + $title = trim($_GPC['name']) ? : ''; + //条件生成 + $where = " WHERE uniacid = {$_W['uniacid']} AND aid = {$_W['aid']}"; + if ($title) $where .= " AND title LIKE '%{$title}%'"; + //基本sql语句生成 列表信息获取及处理 + $field = "id,type,title,image,probability,status,day_number,total_number,create_time"; + $sql = "SELECT {$field} FROM ".tablename(PDO_NAME."draw_goods"); + $order = " ORDER BY create_time DESC,id DESC "; + $limit = " LIMIT {$pageStart},{$pageIndex} "; + $list = pdo_fetchall($sql.$where.$order.$limit); + foreach($list as $key => &$val){ + //基本信息处理 + $val['image'] = tomedia($val['image']); + $val['create_time'] = date("Y-m-d H:i:s",$val['create_time']); + //提供数量处理 + $val['day_number'] = ($val['day_number'] == 0) ? '无限制' : $val['day_number']."份" ; + $val['total_number'] = ($val['total_number'] == 0) ? '无限制' : $val['total_number']."份" ; + } + //获取总数信息 数据分页信息获取 + $totalSql = str_replace($field,'count(*)',$sql); + $total = pdo_fetchcolumn($totalSql.$where); + + Commons::sRenderSuccess('抽奖奖品列表' , ['list' => $list , 'total' => ceil($total / $pageIndex)]); + } + + include wl_template('utility/select_draw_prize'); + } + /** + * Comment: 求职招聘 - 获取企业信息列表(企业选择器) + * Author: zzw + * Date: 2020/12/8 17:28 + */ + public function selectEnterprise(){ + global $_W,$_GPC; + //参数信息获取 + $search = $_GPC['search']; + $returnType = $_GPC['return_type'] ? : 'html'; + //条件生成 + $where = ''; + if($search) $where = " AND (storename LIKE '%{$search}%' OR id LIKE '%{$search}%' OR mobile LIKE '%{$search}%') "; + $field = "id,logo,storename,recruit_nature_id,recruit_scale_id,recruit_industry_id,provinceid,areaid,distid"; + $limit = " limit 0,30 "; + [$list,$total] = Recruit::getEnterpriseList($where,$field,'',$limit); + //信息返回 + if($returnType == 'json') wl_json(1,'企业列表',$list); + //else wl_template(''); + } + /** + * Comment: 求职招聘 - 获取招聘信息列表(招聘选择器) + * Author: zzw + * Date: 2020/12/9 15:36 + */ + public function selectRecruit(){ + global $_W,$_GPC; + //参数信息获取 + $page = $_GPC['page'] ? : 1; + $pageIndex = 10; + $pageStart = $page * $pageIndex - $pageIndex; + $search = $_GPC['search']; + $returnType = $_GPC['return_type'] ? : 'html'; + //条件生成 + $where = " AND status IN (4,5) "; + if($search) $where .= " AND title LIKE '%{$search}%' "; + $field = "id,title,recruitment_type,release_mid,release_sid,job_type,full_type,full_salary_min,full_salary_max, + welfare,part_type,part_salary,part_settlement,work_province,work_city,work_area,status,create_time,is_top"; + $limit = " limit {$pageStart},{$pageIndex} "; + [$list,$total] = Recruit::getRecruitList($where,$field,'',$limit); + foreach($list as &$del){ + unset($del['position_id'] , $del['release_mid'] , $del['release_sid'] , $del['full_type'] , $del['full_salary_min'] , $del['full_salary_max'] , $del['welfare'] , $del['part_type'] , $del['part_salary'] , $del['part_settlement'] , $del['work_province'] , $del['work_city'] , $del['work_area'] , $del['create_time']); + } + //信息返回 + if($returnType == 'json') wl_json(1,'招聘列表',['list'=>$list,'page'=>$page,'page_number'=>ceil($total / $pageIndex)]); + //else wl_template(''); + } + /** + * Comment: 求职招聘 - 获取简历信息列表(简历选择器) + * Author: zzw + * Date: 2020/12/10 11:07 + */ + public function selectResume(){ + global $_W,$_GPC; + //参数信息获取 + $page = $_GPC['page'] ? : 1; + $pageIndex = 10; + $search = $_GPC['search']; + $returnType = $_GPC['return_type'] ? : 'html'; + //条件生成 + $where = []; + if($search) $where['name LIKE'] .= "%{$search}%"; + $field = [ + 'id' , + 'name' , + 'phone' , + 'avatar' , + 'gender' , + 'work_status' , + 'experience_label_id' , + 'education_label_id' , + 'birth_time' , + 'expect_position' , + 'job_type' , + 'expect_salary_min' , + 'expect_salary_max' , + 'expect_work_province', + 'expect_work_city', + 'expect_work_area' + ]; + [$list,$total] = Recruit::getResumeList($where,$field,'id DESC',[$page,$pageIndex]); + foreach($list as &$del){ + unset($del['work_status'],$del['experience_label_id'],$del['education_label_id'],$del['birth_time'],$del['expect_salary_min'],$del['expect_salary_max'], $del['expect_work_province'],$del['expect_work_city'],$del['expect_work_area'],$del['expect_position']); + } + //信息返回 + if($returnType == 'json') wl_json(1,'招聘列表',['list'=>$list,'page'=>$page,'page_number'=>ceil($total / $pageIndex)]); + //else wl_template(''); + } + /** + * Comment: 相亲交友 - 获取会员信息列表 + * Author: zzw + * Date: 2021/3/17 17:05 + */ + public function selectDating(){ + global $_W,$_GPC; + //参数信息获取 + $page = $_GPC['page'] ? : 1; + $pageIndex = 10; + $pageStart = $page * $pageIndex - $pageIndex; + $search = $_GPC['search']; + //条件生成 + $where = " WHERE a.uniacid = {$_W['uniacid']} "; + if($search) $where .= " AND (b.nickname LIKE '%{$search}%' OR a.real_name LIKE '%{$search}%')"; + //列表信息获取 + $field = "a.id,a.mid,a.gneder,a.birth,a.current_province,a.current_city,a.current_area,a.live,a.travel,a.pv,a.is_top,a.cover"; + $order = " ORDER BY create_time DESC "; + $limit = " LIMIT {$pageStart},{$pageIndex} "; + $sql = "SELECT {$field} FROM ".tablename(PDO_NAME."dating_member") + ." as a LEFT JOIN ".tablename(PDO_NAME."member") + ." as b ON a.mid = b.id "; + $list = pdo_fetchall($sql.$where.$order.$limit); + foreach($list as &$item){ + //获取用户信息 + [$item['nickname'],$item['avatar']] = Dating::handleUserInfo($item['mid']); + //处理区域信息 只取最小一级 + if ($item['current_area']) $item['area'] = pdo_getcolumn(PDO_NAME."area",['id' => $item['current_area']],'name'); + else if ($item['current_city']) $item['area'] = pdo_getcolumn(PDO_NAME."area",['id' => $item['current_city']],'name'); + else if ($item['current_province']) $item['area'] = pdo_getcolumn(PDO_NAME."area",['id' => $item['current_province']],'name'); + //判断是否为vip + [$item['is_vip'],$numTime] = Dating::isVip($item['mid']); + //封面图 + $item['cover'] = tomedia($item['cover']); + //年龄获取 + $item['age'] = Dating::getAge(date("Y-m-d",$item['birth'])); + //删除多余的信息 + unset($item['birth'],$item['current_province'],$item['current_city'],$item['current_area']); + } + //总数获取 + //获取总数信息 数据分页信息获取 + $totalSql = str_replace($field,'count(*)',$sql); + $total = pdo_fetchcolumn($totalSql.$where); + + //信息返回 + wl_json(1,'招聘列表',['list'=>$list,'page'=>$page,'page_number'=>ceil($total / $pageIndex)]); + } + /** + * Comment: 家政服务选择器 + * Author: zzw + * Date: 2021/4/30 17:47 + */ + public function selectHouseKeep(){ + global $_W,$_GPC; + //参数信息获取 + $page = $_GPC['page'] ? : 1; + $pageIndex = 10; + $search = $_GPC['search']; + //基本信息生成 + $shopWhere = " AND enabled = 1 AND housekeepstatus = 1 "; + $artificerWhere = $demandWhere = $serviceWhere = " AND status = 1 "; + if($search){ + //商户名称 + $shopWhere .= " AND storename LIKE '%{$search}%' "; + //师傅姓名 + $artificerWhere .= " AND name LIKE '%{$search}%' "; + //需求类型 + $typeListSql = "SELECT id FROM ".tablename(PDO_NAME."housekeep_type") + ." WHERE uniacid = {$_W['uniacid']} AND aid = {$_W['aid']} AND title LIKE '%{$search}%' "; + $typeList = pdo_fetchall($typeListSql); + if(count($typeList) > 0) { + $typeIds = array_column($typeList,'id'); + $typeIds = implode($typeIds,','); + $demandWhere .= " AND type IN ({$typeIds}) "; + }else{ + //无分类被查询出来 强制查询为空 + $demandWhere .= " AND type = -1 "; + } + //服务标题 + $serviceWhere .= " AND title LIKE '%{$search}%' "; + } + //获取列表信息 + $data = Housekeep::getList(0,$page,$pageIndex,$shopWhere,$artificerWhere,$demandWhere,$serviceWhere); + + //信息返回 + wl_json(1,'服务列表',$data); + } + + + + + + + +} diff --git a/addons/weliam_smartcity/web/resource/address/bootstrap.css b/addons/weliam_smartcity/web/resource/address/bootstrap.css new file mode 100644 index 0000000..e26ae02 --- /dev/null +++ b/addons/weliam_smartcity/web/resource/address/bootstrap.css @@ -0,0 +1,6727 @@ +/*! + * Bootstrap v3.3.6 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +mark { + background: #ff0; + color: #000; +} +small { + font-size: 80%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + box-sizing: content-box; + height: 0; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-appearance: textfield; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0; + padding: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + background: transparent !important; + color: #000 !important; + box-shadow: none !important; + text-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\002a"; +} +.glyphicon-plus:before { + content: "\002b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +.glyphicon-cd:before { + content: "\e201"; +} +.glyphicon-save-file:before { + content: "\e202"; +} +.glyphicon-open-file:before { + content: "\e203"; +} +.glyphicon-level-up:before { + content: "\e204"; +} +.glyphicon-copy:before { + content: "\e205"; +} +.glyphicon-paste:before { + content: "\e206"; +} +.glyphicon-alert:before { + content: "\e209"; +} +.glyphicon-equalizer:before { + content: "\e210"; +} +.glyphicon-king:before { + content: "\e211"; +} +.glyphicon-queen:before { + content: "\e212"; +} +.glyphicon-pawn:before { + content: "\e213"; +} +.glyphicon-bishop:before { + content: "\e214"; +} +.glyphicon-knight:before { + content: "\e215"; +} +.glyphicon-baby-formula:before { + content: "\e216"; +} +.glyphicon-tent:before { + content: "\26fa"; +} +.glyphicon-blackboard:before { + content: "\e218"; +} +.glyphicon-bed:before { + content: "\e219"; +} +.glyphicon-apple:before { + content: "\f8ff"; +} +.glyphicon-erase:before { + content: "\e221"; +} +.glyphicon-hourglass:before { + content: "\231b"; +} +.glyphicon-lamp:before { + content: "\e223"; +} +.glyphicon-duplicate:before { + content: "\e224"; +} +.glyphicon-piggy-bank:before { + content: "\e225"; +} +.glyphicon-scissors:before { + content: "\e226"; +} +.glyphicon-bitcoin:before { + content: "\e227"; +} +.glyphicon-btc:before { + content: "\e227"; +} +.glyphicon-xbt:before { + content: "\e227"; +} +.glyphicon-yen:before { + content: "\00a5"; +} +.glyphicon-jpy:before { + content: "\00a5"; +} +.glyphicon-ruble:before { + content: "\20bd"; +} +.glyphicon-rub:before { + content: "\20bd"; +} +.glyphicon-scale:before { + content: "\e230"; +} +.glyphicon-ice-lolly:before { + content: "\e231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} +.glyphicon-education:before { + content: "\e233"; +} +.glyphicon-option-horizontal:before { + content: "\e234"; +} +.glyphicon-option-vertical:before { + content: "\e235"; +} +.glyphicon-menu-hamburger:before { + content: "\e236"; +} +.glyphicon-modal-window:before { + content: "\e237"; +} +.glyphicon-oil:before { + content: "\e238"; +} +.glyphicon-grain:before { + content: "\e239"; +} +.glyphicon-sunglasses:before { + content: "\e240"; +} +.glyphicon-text-size:before { + content: "\e241"; +} +.glyphicon-text-color:before { + content: "\e242"; +} +.glyphicon-text-background:before { + content: "\e243"; +} +.glyphicon-object-align-top:before { + content: "\e244"; +} +.glyphicon-object-align-bottom:before { + content: "\e245"; +} +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} +.glyphicon-object-align-left:before { + content: "\e247"; +} +.glyphicon-object-align-vertical:before { + content: "\e248"; +} +.glyphicon-object-align-right:before { + content: "\e249"; +} +.glyphicon-triangle-right:before { + content: "\e250"; +} +.glyphicon-triangle-left:before { + content: "\e251"; +} +.glyphicon-triangle-bottom:before { + content: "\e252"; +} +.glyphicon-triangle-top:before { + content: "\e253"; +} +.glyphicon-console:before { + content: "\e254"; +} +.glyphicon-superscript:before { + content: "\e255"; +} +.glyphicon-subscript:before { + content: "\e256"; +} +.glyphicon-menu-left:before { + content: "\e257"; +} +.glyphicon-menu-right:before { + content: "\e258"; +} +.glyphicon-menu-down:before { + content: "\e259"; +} +.glyphicon-menu-up:before { + content: "\e260"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + line-height: 1.42857143; + color: #333333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #2c3e50; + text-decoration: none; +} +a:hover, +a:focus { + color: #11181f; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 5px; +} +.img-thumbnail { + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 3px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 17px; + margin-bottom: 17px; + border: 0; + border-top: 1px solid #eeeeee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 17px; + margin-bottom: 8.5px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 8.5px; + margin-bottom: 8.5px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 31px; +} +h2, +.h2 { + font-size: 25px; +} +h3, +.h3 { + font-size: 21px; +} +h4, +.h4 { + font-size: 15px; +} +h5, +.h5 { + font-size: 12px; +} +h6, +.h6 { + font-size: 11px; +} +p { + margin: 0 0 8.5px; +} +.lead { + margin-bottom: 17px; + font-size: 13px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 18px; + } +} +small, +.small { + font-size: 91%; +} +mark, +.mark { + background-color: #fcf8e3; + padding: .2em; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777777; +} +.text-primary { + color: #2c3e50; +} +a.text-primary:hover, +a.text-primary:focus { + color: #1a242f; +} +.text-success { + color: #18bc9c; +} +a.text-success:hover, +a.text-success:focus { + color: #128f76; +} +.text-info { + color: #3498db; +} +a.text-info:hover, +a.text-info:focus { + color: #217dbb; +} +.text-warning { + color: #f39c12; +} +a.text-warning:hover, +a.text-warning:focus { + color: #c87f0a; +} +.text-danger { + color: #e74c3c; +} +a.text-danger:hover, +a.text-danger:focus { + color: #d62c1a; +} +.bg-primary { + color: #fff; + background-color: #2c3e50; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #1a242f; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 7.5px; + margin: 34px 0 17px; + border-bottom: 1px solid #eeeeee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 8.5px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} +.list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} +dl { + margin-top: 0; + margin-bottom: 17px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 8.5px 17px; + margin: 0 0 17px; + font-size: 15px; + border-left: 5px solid #eeeeee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; + text-align: right; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 17px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 3px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 2px; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + box-shadow: none; +} +pre { + display: block; + padding: 8px; + margin: 0 0 8.5px; + font-size: 11px; + line-height: 1.42857143; + word-break: break-all; + word-wrap: break-word; + color: #333333; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 3px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +.row { + margin-left: -15px; + margin-right: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0%; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0%; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 17px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + float: none; + display: table-column; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + overflow-x: auto; + min-height: 0.01%; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 12.75px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 17px; + font-size: 18px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 12px; + line-height: 1.42857143; + color: #555555; +} +.form-control { + display: block; + width: 100%; + height: 31px; + padding: 6px 12px; + font-size: 12px; + line-height: 1.42857143; + color: #555555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control::-ms-expand { + border: 0; + background-color: transparent; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eeeeee; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 31px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 28px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 42px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 17px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; + min-height: 29px; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-left: 0; + padding-right: 0; +} +.input-sm { + height: 28px; + padding: 5px 10px; + font-size: 11px; + line-height: 1.5; + border-radius: 2px; +} +select.input-sm { + height: 28px; + line-height: 28px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 28px; + padding: 5px 10px; + font-size: 11px; + line-height: 1.5; + border-radius: 2px; +} +.form-group-sm select.form-control { + height: 28px; + line-height: 28px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 28px; + min-height: 28px; + padding: 6px 10px; + font-size: 11px; + line-height: 1.5; +} +.input-lg { + height: 42px; + padding: 10px 16px; + font-size: 15px; + line-height: 1.3333333; + border-radius: 5px; +} +select.input-lg { + height: 42px; + line-height: 42px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 42px; + padding: 10px 16px; + font-size: 15px; + line-height: 1.3333333; + border-radius: 5px; +} +.form-group-lg select.form-control { + height: 42px; + line-height: 42px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 42px; + min-height: 32px; + padding: 11px 16px; + font-size: 15px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 38.75px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 31px; + height: 31px; + line-height: 31px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 42px; + height: 42px; + line-height: 42px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 28px; + height: 28px; + line-height: 28px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #18bc9c; +} +.has-success .form-control { + border-color: #18bc9c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .form-control:focus { + border-color: #128f76; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #51e9cb; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #51e9cb; +} +.has-success .input-group-addon { + color: #18bc9c; + border-color: #18bc9c; + background-color: #dff0d8; +} +.has-success .form-control-feedback { + color: #18bc9c; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #f39c12; +} +.has-warning .form-control { + border-color: #f39c12; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .form-control:focus { + border-color: #c87f0a; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #f8c573; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #f8c573; +} +.has-warning .input-group-addon { + color: #f39c12; + border-color: #f39c12; + background-color: #fcf8e3; +} +.has-warning .form-control-feedback { + color: #f39c12; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #e74c3c; +} +.has-error .form-control { + border-color: #e74c3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #d62c1a; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #f29f97; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #f29f97; +} +.has-error .input-group-addon { + color: #e74c3c; + border-color: #e74c3c; + background-color: #f2dede; +} +.has-error .form-control-feedback { + color: #e74c3c; +} +.has-feedback label ~ .form-control-feedback { + top: 22px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 7px; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 24px; +} +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 7px; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 11px; + font-size: 15px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 11px; + } +} +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 6px 12px; + font-size: 12px; + line-height: 1.42857143; + border-radius: 3px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus, +.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #2c3e50; + border-color: #2c3e50; +} +.btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #1a242f; + border-color: #000000; +} +.btn-primary:hover { + color: #fff; + background-color: #1a242f; + border-color: #161f29; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #1a242f; + border-color: #161f29; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #0d1318; + border-color: #000000; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus { + background-color: #2c3e50; + border-color: #2c3e50; +} +.btn-primary .badge { + color: #2c3e50; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #18bc9c; + border-color: #18bc9c; +} +.btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #128f76; + border-color: #0a4b3e; +} +.btn-success:hover { + color: #fff; + background-color: #128f76; + border-color: #11866f; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #128f76; + border-color: #11866f; +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #0e6f5c; + border-color: #0a4b3e; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus { + background-color: #18bc9c; + border-color: #18bc9c; +} +.btn-success .badge { + color: #18bc9c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #3498db; + border-color: #3498db; +} +.btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #217dbb; + border-color: #16527a; +} +.btn-info:hover { + color: #fff; + background-color: #217dbb; + border-color: #2077b2; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #217dbb; + border-color: #2077b2; +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #1c699d; + border-color: #16527a; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus { + background-color: #3498db; + border-color: #3498db; +} +.btn-info .badge { + color: #3498db; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f39c12; + border-color: #f39c12; +} +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #c87f0a; + border-color: #7f5006; +} +.btn-warning:hover { + color: #fff; + background-color: #c87f0a; + border-color: #be780a; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #c87f0a; + border-color: #be780a; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #a66908; + border-color: #7f5006; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus { + background-color: #f39c12; + border-color: #f39c12; +} +.btn-warning .badge { + color: #f39c12; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #e74c3c; + border-color: #e74c3c; +} +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #d62c1a; + border-color: #921e12; +} +.btn-danger:hover { + color: #fff; + background-color: #d62c1a; + border-color: #cd2a19; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #d62c1a; + border-color: #cd2a19; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #b62516; + border-color: #921e12; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus { + background-color: #e74c3c; + border-color: #e74c3c; +} +.btn-danger .badge { + color: #e74c3c; + background-color: #fff; +} +.btn-link { + color: #2c3e50; + font-weight: normal; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #11181f; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 15px; + line-height: 1.3333333; + border-radius: 5px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 11px; + line-height: 1.5; + border-radius: 2px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 11px; + line-height: 1.5; + border-radius: 2px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-property: height, visibility; + transition-property: height, visibility; + -webkit-transition-duration: 0.35s; + transition-duration: 0.35s; + -webkit-transition-timing-function: ease; + transition-timing-function: ease; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 85px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 12px; + text-align: left; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 3px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + background-clip: padding-box; +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 7.5px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + text-decoration: none; + color: #262626; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + outline: 0; + background-color: #2c3e50; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + cursor: not-allowed; +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + left: auto; + right: 0; +} +.dropdown-menu-left { + left: 0; + right: auto; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 11px; + line-height: 1.42857143; + color: #777777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; + content: ""; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + left: auto; + right: 0; + } + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 3px; + border-top-left-radius: 3px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-right-radius: 0; + border-top-left-radius: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + float: none; + display: table-cell; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group .form-control:focus { + z-index: 3; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 42px; + padding: 10px 16px; + font-size: 15px; + line-height: 1.3333333; + border-radius: 5px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 42px; + line-height: 42px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 28px; + padding: 5px 10px; + font-size: 11px; + line-height: 1.5; + border-radius: 2px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 28px; + line-height: 28px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 12px; + font-weight: normal; + line-height: 1; + color: #555555; + text-align: center; + background-color: #eeeeee; + border: 1px solid #ccc; + border-radius: 3px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 11px; + border-radius: 2px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 15px; + border-radius: 5px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +.nav > li.disabled > a { + color: #777777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777777; + text-decoration: none; + background-color: transparent; + cursor: not-allowed; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eeeeee; + border-color: #2c3e50; +} +.nav .nav-divider { + height: 1px; + margin: 7.5px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 3px 3px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555555; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 3px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 3px 3px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 3px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #2c3e50; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 3px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 3px 3px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 17px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 3px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + overflow-x: visible; + padding-right: 15px; + padding-left: 15px; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-left: 0; + padding-right: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + padding: 16.5px 15px; + font-size: 15px; + line-height: 17px; + height: 50px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + margin-right: 15px; + padding: 9px 10px; + margin-top: 8px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 3px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 8.25px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 17px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 17px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 16.5px; + padding-bottom: 16.5px; + } +} +.navbar-form { + margin-left: -15px; + margin-right: -15px; + padding: 10px 15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 9.5px; + margin-bottom: 9.5px; +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 9.5px; + margin-bottom: 9.5px; +} +.navbar-btn.btn-sm { + margin-top: 11px; + margin-bottom: 11px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 16.5px; + margin-bottom: 16.5px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-left: 15px; + margin-right: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + background-color: #e7e7e7; + color: #555; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + background-color: #080808; + color: #fff; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 17px; + list-style: none; + background-color: #f5f5f5; + border-radius: 3px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + content: "/\00a0"; + padding: 0 5px; + color: #ccc; +} +.breadcrumb > .active { + color: #777777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 17px 0; + border-radius: 3px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + line-height: 1.42857143; + text-decoration: none; + color: #2c3e50; + background-color: #fff; + border: 1px solid #ddd; + margin-left: -1px; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + z-index: 2; + color: #11181f; + background-color: #eeeeee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 3; + color: #fff; + background-color: #2c3e50; + border-color: #2c3e50; + cursor: default; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777777; + background-color: #fff; + border-color: #ddd; + cursor: not-allowed; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 15px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 5px; + border-top-left-radius: 5px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-bottom-right-radius: 5px; + border-top-right-radius: 5px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 11px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-bottom-right-radius: 2px; + border-top-right-radius: 2px; +} +.pager { + padding-left: 0; + margin: 17px 0; + list-style: none; + text-align: center; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777777; + background-color: #fff; + cursor: not-allowed; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #2c3e50; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #1a242f; +} +.label-success { + background-color: #18bc9c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #128f76; +} +.label-info { + background-color: #3498db; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #217dbb; +} +.label-warning { + background-color: #f39c12; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #c87f0a; +} +.label-danger { + background-color: #e74c3c; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #d62c1a; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 11px; + font-weight: bold; + color: #fff; + line-height: 1; + vertical-align: middle; + white-space: nowrap; + text-align: center; + background-color: #777777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #2c3e50; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eeeeee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 18px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + border-radius: 5px; + padding-left: 15px; + padding-right: 15px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-left: 60px; + padding-right: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 54px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 17px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 3px; + -webkit-transition: border 0.2s ease-in-out; + -o-transition: border 0.2s ease-in-out; + transition: border 0.2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-left: auto; + margin-right: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #2c3e50; +} +.thumbnail .caption { + padding: 9px; + color: #333333; +} +.alert { + padding: 15px; + margin-bottom: 17px; + border: 1px solid transparent; + border-radius: 3px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + background-color: #dff0d8; + border-color: #d6e9c6; + color: #18bc9c; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #128f76; +} +.alert-info { + background-color: #d9edf7; + border-color: #bce8f1; + color: #3498db; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #217dbb; +} +.alert-warning { + background-color: #fcf8e3; + border-color: #faebcc; + color: #f39c12; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #c87f0a; +} +.alert-danger { + background-color: #f2dede; + border-color: #ebccd1; + color: #e74c3c; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #d62c1a; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + overflow: hidden; + height: 17px; + margin-bottom: 17px; + background-color: #f5f5f5; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} +.progress-bar { + float: left; + width: 0%; + height: 100%; + font-size: 11px; + line-height: 17px; + color: #fff; + text-align: center; + background-color: #2c3e50; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #18bc9c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #3498db; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f39c12; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #e74c3c; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + zoom: 1; + overflow: hidden; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + margin-bottom: 20px; + padding-left: 0; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + text-decoration: none; + color: #555; + background-color: #f5f5f5; +} +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + background-color: #eeeeee; + color: #777777; + cursor: not-allowed; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #2c3e50; + border-color: #2c3e50; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #8aa4be; +} +.list-group-item-success { + color: #18bc9c; + background-color: #dff0d8; +} +a.list-group-item-success, +button.list-group-item-success { + color: #18bc9c; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #18bc9c; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #18bc9c; + border-color: #18bc9c; +} +.list-group-item-info { + color: #3498db; + background-color: #d9edf7; +} +a.list-group-item-info, +button.list-group-item-info { + color: #3498db; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #3498db; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #3498db; + border-color: #3498db; +} +.list-group-item-warning { + color: #f39c12; + background-color: #fcf8e3; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #f39c12; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #f39c12; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #f39c12; + border-color: #f39c12; +} +.list-group-item-danger { + color: #e74c3c; + background-color: #f2dede; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #e74c3c; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #e74c3c; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #e74c3c; + border-color: #e74c3c; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 17px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 3px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 2px; + border-top-left-radius: 2px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 14px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 2px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-right-radius: 2px; + border-top-left-radius: 2px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 2px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-left: 15px; + padding-right: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-right-radius: 2px; + border-top-left-radius: 2px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 2px; + border-top-right-radius: 2px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 2px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 2px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 2px; + border-bottom-left-radius: 2px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 2px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 2px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + border: 0; + margin-bottom: 0; +} +.panel-group { + margin-bottom: 17px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 3px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #2c3e50; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #2c3e50; + border-color: #2c3e50; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #2c3e50; +} +.panel-primary > .panel-heading .badge { + color: #2c3e50; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #2c3e50; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #18bc9c; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #18bc9c; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #3498db; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #3498db; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #f39c12; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #f39c12; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #e74c3c; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #e74c3c; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} +.well-lg { + padding: 24px; + border-radius: 5px; +} +.well-sm { + padding: 9px; + border-radius: 2px; +} +.close { + float: right; + font-size: 18px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: 0.2; + filter: alpha(opacity=20); +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} +.modal-open { + overflow: hidden; +} +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 5px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + background-clip: padding-box; + outline: 0; +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + font-size: 11px; + opacity: 0; + filter: alpha(opacity=0); +} +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); +} +.tooltip.top { + margin-top: -3px; + padding: 5px 0; +} +.tooltip.right { + margin-left: 3px; + padding: 0 5px; +} +.tooltip.bottom { + margin-top: 3px; + padding: 5px 0; +} +.tooltip.left { + margin-left: -3px; + padding: 0 5px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 3px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + bottom: 0; + right: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + font-size: 12px; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 5px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 12px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 4px 4px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + border-width: 10px; + content: ""; +} +.popover.top > .arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + bottom: -11px; +} +.popover.top > .arrow:after { + content: " "; + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #fff; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); +} +.popover.right > .arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #fff; +} +.popover.bottom > .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); + top: -11px; +} +.popover.bottom > .arrow:after { + content: " "; + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); +} +.popover.left > .arrow:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: #fff; + bottom: -10px; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; +} +.carousel-inner > .item { + display: none; + position: relative; + -webkit-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform 0.6s ease-in-out; + -moz-transition: -moz-transform 0.6s ease-in-out; + -o-transition: -o-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + -moz-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + left: 0; + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + left: 0; + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + left: 0; + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 15%; + opacity: 0.5; + filter: alpha(opacity=50); + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + background-color: rgba(0, 0, 0, 0); +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); +} +.carousel-control.right { + left: auto; + right: 0; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +} +.carousel-control:hover, +.carousel-control:focus { + outline: 0; + color: #fff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + margin-top: -10px; + z-index: 5; + display: inline-block; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + line-height: 1; + font-family: serif; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid #fff; + border-radius: 10px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); +} +.carousel-indicators .active { + margin: 0; + width: 12px; + height: 12px; + background-color: #fff; +} +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -10px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -10px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -10px; + } + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-header:before, +.modal-header:after, +.modal-footer:before, +.modal-footer:after { + content: " "; + display: table; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-header:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=../css/bootstrap.css.map */ \ No newline at end of file diff --git a/addons/weliam_smartcity/web/resource/address/bootstrap.min.css b/addons/weliam_smartcity/web/resource/address/bootstrap.min.css new file mode 100644 index 0000000..0d2ec72 --- /dev/null +++ b/addons/weliam_smartcity/web/resource/address/bootstrap.min.css @@ -0,0 +1 @@ +/*! * Bootstrap v3.3.6 (http://getbootstrap.com) * Copyright 2011-2015 Twitter,Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;}body{margin:0;}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block;}audio,canvas,progress,video{display:inline-block;vertical-align:baseline;}audio:not([controls]){display:none;height:0;}[hidden],template{display:none;}a{background-color:transparent;}a:active,a:hover{outline:0;}abbr[title]{border-bottom:1px dotted;}b,strong{font-weight:bold;}dfn{font-style:italic;}h1{font-size:2em;margin:0.67em 0;}mark{background:#ff0;color:#000;}small{font-size:80%;}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sup{top:-0.5em;}sub{bottom:-0.25em;}img{border:0;}svg:not(:root){overflow:hidden;}figure{margin:1em 40px;}hr{box-sizing:content-box;height:0;}pre{overflow:auto;}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em;}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;}button{overflow:visible;}button,select{text-transform:none;}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;}button[disabled],html input[disabled]{cursor:default;}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;}input{line-height:normal;}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto;}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box;}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em;}legend{border:0;padding:0;}textarea{overflow:auto;}optgroup{font-weight:bold;}table{border-collapse:collapse;border-spacing:0;}td,th{padding:0;}@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important;}a,a:visited{text-decoration:underline;}a[href]:after{content:" (" attr(href) ")";}abbr[title]:after{content:" (" attr(title) ")";}a[href^="#"]:after,a[href^="javascript:"]:after{content:"";}pre,blockquote{border:1px solid #999;page-break-inside:avoid;}thead{display:table-header-group;}tr,img{page-break-inside:avoid;}img{max-width:100% !important;}p,h2,h3{orphans:3;widows:3;}h2,h3{page-break-after:avoid;}.navbar{display:none;}.btn > .caret,.dropup > .btn > .caret{border-top-color:#000 !important;}.label{border:1px solid #000;}.table{border-collapse:collapse !important;}.table td,.table th{background-color:#fff !important;}.table-bordered th,.table-bordered td{border:1px solid #ddd !important;}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}.glyphicon-asterisk:before{content:"\002a";}.glyphicon-plus:before{content:"\002b";}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac";}.glyphicon-minus:before{content:"\2212";}.glyphicon-cloud:before{content:"\2601";}.glyphicon-envelope:before{content:"\2709";}.glyphicon-pencil:before{content:"\270f";}.glyphicon-glass:before{content:"\e001";}.glyphicon-music:before{content:"\e002";}.glyphicon-search:before{content:"\e003";}.glyphicon-heart:before{content:"\e005";}.glyphicon-star:before{content:"\e006";}.glyphicon-star-empty:before{content:"\e007";}.glyphicon-user:before{content:"\e008";}.glyphicon-film:before{content:"\e009";}.glyphicon-th-large:before{content:"\e010";}.glyphicon-th:before{content:"\e011";}.glyphicon-th-list:before{content:"\e012";}.glyphicon-ok:before{content:"\e013";}.glyphicon-remove:before{content:"\e014";}.glyphicon-zoom-in:before{content:"\e015";}.glyphicon-zoom-out:before{content:"\e016";}.glyphicon-off:before{content:"\e017";}.glyphicon-signal:before{content:"\e018";}.glyphicon-cog:before{content:"\e019";}.glyphicon-trash:before{content:"\e020";}.glyphicon-home:before{content:"\e021";}.glyphicon-file:before{content:"\e022";}.glyphicon-time:before{content:"\e023";}.glyphicon-road:before{content:"\e024";}.glyphicon-download-alt:before{content:"\e025";}.glyphicon-download:before{content:"\e026";}.glyphicon-upload:before{content:"\e027";}.glyphicon-inbox:before{content:"\e028";}.glyphicon-play-circle:before{content:"\e029";}.glyphicon-repeat:before{content:"\e030";}.glyphicon-refresh:before{content:"\e031";}.glyphicon-list-alt:before{content:"\e032";}.glyphicon-lock:before{content:"\e033";}.glyphicon-flag:before{content:"\e034";}.glyphicon-headphones:before{content:"\e035";}.glyphicon-volume-off:before{content:"\e036";}.glyphicon-volume-down:before{content:"\e037";}.glyphicon-volume-up:before{content:"\e038";}.glyphicon-qrcode:before{content:"\e039";}.glyphicon-barcode:before{content:"\e040";}.glyphicon-tag:before{content:"\e041";}.glyphicon-tags:before{content:"\e042";}.glyphicon-book:before{content:"\e043";}.glyphicon-bookmark:before{content:"\e044";}.glyphicon-print:before{content:"\e045";}.glyphicon-camera:before{content:"\e046";}.glyphicon-font:before{content:"\e047";}.glyphicon-bold:before{content:"\e048";}.glyphicon-italic:before{content:"\e049";}.glyphicon-text-height:before{content:"\e050";}.glyphicon-text-width:before{content:"\e051";}.glyphicon-align-left:before{content:"\e052";}.glyphicon-align-center:before{content:"\e053";}.glyphicon-align-right:before{content:"\e054";}.glyphicon-align-justify:before{content:"\e055";}.glyphicon-list:before{content:"\e056";}.glyphicon-indent-left:before{content:"\e057";}.glyphicon-indent-right:before{content:"\e058";}.glyphicon-facetime-video:before{content:"\e059";}.glyphicon-picture:before{content:"\e060";}.glyphicon-map-marker:before{content:"\e062";}.glyphicon-adjust:before{content:"\e063";}.glyphicon-tint:before{content:"\e064";}.glyphicon-edit:before{content:"\e065";}.glyphicon-share:before{content:"\e066";}.glyphicon-check:before{content:"\e067";}.glyphicon-move:before{content:"\e068";}.glyphicon-step-backward:before{content:"\e069";}.glyphicon-fast-backward:before{content:"\e070";}.glyphicon-backward:before{content:"\e071";}.glyphicon-play:before{content:"\e072";}.glyphicon-pause:before{content:"\e073";}.glyphicon-stop:before{content:"\e074";}.glyphicon-forward:before{content:"\e075";}.glyphicon-fast-forward:before{content:"\e076";}.glyphicon-step-forward:before{content:"\e077";}.glyphicon-eject:before{content:"\e078";}.glyphicon-chevron-left:before{content:"\e079";}.glyphicon-chevron-right:before{content:"\e080";}.glyphicon-plus-sign:before{content:"\e081";}.glyphicon-minus-sign:before{content:"\e082";}.glyphicon-remove-sign:before{content:"\e083";}.glyphicon-ok-sign:before{content:"\e084";}.glyphicon-question-sign:before{content:"\e085";}.glyphicon-info-sign:before{content:"\e086";}.glyphicon-screenshot:before{content:"\e087";}.glyphicon-remove-circle:before{content:"\e088";}.glyphicon-ok-circle:before{content:"\e089";}.glyphicon-ban-circle:before{content:"\e090";}.glyphicon-arrow-left:before{content:"\e091";}.glyphicon-arrow-right:before{content:"\e092";}.glyphicon-arrow-up:before{content:"\e093";}.glyphicon-arrow-down:before{content:"\e094";}.glyphicon-share-alt:before{content:"\e095";}.glyphicon-resize-full:before{content:"\e096";}.glyphicon-resize-small:before{content:"\e097";}.glyphicon-exclamation-sign:before{content:"\e101";}.glyphicon-gift:before{content:"\e102";}.glyphicon-leaf:before{content:"\e103";}.glyphicon-fire:before{content:"\e104";}.glyphicon-eye-open:before{content:"\e105";}.glyphicon-eye-close:before{content:"\e106";}.glyphicon-warning-sign:before{content:"\e107";}.glyphicon-plane:before{content:"\e108";}.glyphicon-calendar:before{content:"\e109";}.glyphicon-random:before{content:"\e110";}.glyphicon-comment:before{content:"\e111";}.glyphicon-magnet:before{content:"\e112";}.glyphicon-chevron-up:before{content:"\e113";}.glyphicon-chevron-down:before{content:"\e114";}.glyphicon-retweet:before{content:"\e115";}.glyphicon-shopping-cart:before{content:"\e116";}.glyphicon-folder-close:before{content:"\e117";}.glyphicon-folder-open:before{content:"\e118";}.glyphicon-resize-vertical:before{content:"\e119";}.glyphicon-resize-horizontal:before{content:"\e120";}.glyphicon-hdd:before{content:"\e121";}.glyphicon-bullhorn:before{content:"\e122";}.glyphicon-bell:before{content:"\e123";}.glyphicon-certificate:before{content:"\e124";}.glyphicon-thumbs-up:before{content:"\e125";}.glyphicon-thumbs-down:before{content:"\e126";}.glyphicon-hand-right:before{content:"\e127";}.glyphicon-hand-left:before{content:"\e128";}.glyphicon-hand-up:before{content:"\e129";}.glyphicon-hand-down:before{content:"\e130";}.glyphicon-circle-arrow-right:before{content:"\e131";}.glyphicon-circle-arrow-left:before{content:"\e132";}.glyphicon-circle-arrow-up:before{content:"\e133";}.glyphicon-circle-arrow-down:before{content:"\e134";}.glyphicon-globe:before{content:"\e135";}.glyphicon-wrench:before{content:"\e136";}.glyphicon-tasks:before{content:"\e137";}.glyphicon-filter:before{content:"\e138";}.glyphicon-briefcase:before{content:"\e139";}.glyphicon-fullscreen:before{content:"\e140";}.glyphicon-dashboard:before{content:"\e141";}.glyphicon-paperclip:before{content:"\e142";}.glyphicon-heart-empty:before{content:"\e143";}.glyphicon-link:before{content:"\e144";}.glyphicon-phone:before{content:"\e145";}.glyphicon-pushpin:before{content:"\e146";}.glyphicon-usd:before{content:"\e148";}.glyphicon-gbp:before{content:"\e149";}.glyphicon-sort:before{content:"\e150";}.glyphicon-sort-by-alphabet:before{content:"\e151";}.glyphicon-sort-by-alphabet-alt:before{content:"\e152";}.glyphicon-sort-by-order:before{content:"\e153";}.glyphicon-sort-by-order-alt:before{content:"\e154";}.glyphicon-sort-by-attributes:before{content:"\e155";}.glyphicon-sort-by-attributes-alt:before{content:"\e156";}.glyphicon-unchecked:before{content:"\e157";}.glyphicon-expand:before{content:"\e158";}.glyphicon-collapse-down:before{content:"\e159";}.glyphicon-collapse-up:before{content:"\e160";}.glyphicon-log-in:before{content:"\e161";}.glyphicon-flash:before{content:"\e162";}.glyphicon-log-out:before{content:"\e163";}.glyphicon-new-window:before{content:"\e164";}.glyphicon-record:before{content:"\e165";}.glyphicon-save:before{content:"\e166";}.glyphicon-open:before{content:"\e167";}.glyphicon-saved:before{content:"\e168";}.glyphicon-import:before{content:"\e169";}.glyphicon-export:before{content:"\e170";}.glyphicon-send:before{content:"\e171";}.glyphicon-floppy-disk:before{content:"\e172";}.glyphicon-floppy-saved:before{content:"\e173";}.glyphicon-floppy-remove:before{content:"\e174";}.glyphicon-floppy-save:before{content:"\e175";}.glyphicon-floppy-open:before{content:"\e176";}.glyphicon-credit-card:before{content:"\e177";}.glyphicon-transfer:before{content:"\e178";}.glyphicon-cutlery:before{content:"\e179";}.glyphicon-header:before{content:"\e180";}.glyphicon-compressed:before{content:"\e181";}.glyphicon-earphone:before{content:"\e182";}.glyphicon-phone-alt:before{content:"\e183";}.glyphicon-tower:before{content:"\e184";}.glyphicon-stats:before{content:"\e185";}.glyphicon-sd-video:before{content:"\e186";}.glyphicon-hd-video:before{content:"\e187";}.glyphicon-subtitles:before{content:"\e188";}.glyphicon-sound-stereo:before{content:"\e189";}.glyphicon-sound-dolby:before{content:"\e190";}.glyphicon-sound-5-1:before{content:"\e191";}.glyphicon-sound-6-1:before{content:"\e192";}.glyphicon-sound-7-1:before{content:"\e193";}.glyphicon-copyright-mark:before{content:"\e194";}.glyphicon-registration-mark:before{content:"\e195";}.glyphicon-cloud-download:before{content:"\e197";}.glyphicon-cloud-upload:before{content:"\e198";}.glyphicon-tree-conifer:before{content:"\e199";}.glyphicon-tree-deciduous:before{content:"\e200";}.glyphicon-cd:before{content:"\e201";}.glyphicon-save-file:before{content:"\e202";}.glyphicon-open-file:before{content:"\e203";}.glyphicon-level-up:before{content:"\e204";}.glyphicon-copy:before{content:"\e205";}.glyphicon-paste:before{content:"\e206";}.glyphicon-alert:before{content:"\e209";}.glyphicon-equalizer:before{content:"\e210";}.glyphicon-king:before{content:"\e211";}.glyphicon-queen:before{content:"\e212";}.glyphicon-pawn:before{content:"\e213";}.glyphicon-bishop:before{content:"\e214";}.glyphicon-knight:before{content:"\e215";}.glyphicon-baby-formula:before{content:"\e216";}.glyphicon-tent:before{content:"\26fa";}.glyphicon-blackboard:before{content:"\e218";}.glyphicon-bed:before{content:"\e219";}.glyphicon-apple:before{content:"\f8ff";}.glyphicon-erase:before{content:"\e221";}.glyphicon-hourglass:before{content:"\231b";}.glyphicon-lamp:before{content:"\e223";}.glyphicon-duplicate:before{content:"\e224";}.glyphicon-piggy-bank:before{content:"\e225";}.glyphicon-scissors:before{content:"\e226";}.glyphicon-bitcoin:before{content:"\e227";}.glyphicon-btc:before{content:"\e227";}.glyphicon-xbt:before{content:"\e227";}.glyphicon-yen:before{content:"\00a5";}.glyphicon-jpy:before{content:"\00a5";}.glyphicon-ruble:before{content:"\20bd";}.glyphicon-rub:before{content:"\20bd";}.glyphicon-scale:before{content:"\e230";}.glyphicon-ice-lolly:before{content:"\e231";}.glyphicon-ice-lolly-tasted:before{content:"\e232";}.glyphicon-education:before{content:"\e233";}.glyphicon-option-horizontal:before{content:"\e234";}.glyphicon-option-vertical:before{content:"\e235";}.glyphicon-menu-hamburger:before{content:"\e236";}.glyphicon-modal-window:before{content:"\e237";}.glyphicon-oil:before{content:"\e238";}.glyphicon-grain:before{content:"\e239";}.glyphicon-sunglasses:before{content:"\e240";}.glyphicon-text-size:before{content:"\e241";}.glyphicon-text-color:before{content:"\e242";}.glyphicon-text-background:before{content:"\e243";}.glyphicon-object-align-top:before{content:"\e244";}.glyphicon-object-align-bottom:before{content:"\e245";}.glyphicon-object-align-horizontal:before{content:"\e246";}.glyphicon-object-align-left:before{content:"\e247";}.glyphicon-object-align-vertical:before{content:"\e248";}.glyphicon-object-align-right:before{content:"\e249";}.glyphicon-triangle-right:before{content:"\e250";}.glyphicon-triangle-left:before{content:"\e251";}.glyphicon-triangle-bottom:before{content:"\e252";}.glyphicon-triangle-top:before{content:"\e253";}.glyphicon-console:before{content:"\e254";}.glyphicon-superscript:before{content:"\e255";}.glyphicon-subscript:before{content:"\e256";}.glyphicon-menu-left:before{content:"\e257";}.glyphicon-menu-right:before{content:"\e258";}.glyphicon-menu-down:before{content:"\e259";}.glyphicon-menu-up:before{content:"\e260";}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0);}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;line-height:1.42857143;color:#333333;background-color:#fff;}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;}a{color:#2c3e50;text-decoration:none;}a:hover,a:focus{color:#11181f;text-decoration:underline;}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}figure{margin:0;}img{vertical-align:middle;}.img-responsive,.thumbnail > img,.thumbnail a > img,.carousel-inner > .item > img,.carousel-inner > .item > a > img{display:block;max-width:100%;height:auto;}.img-rounded{border-radius:5px;}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:3px;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;display:inline-block;max-width:100%;height:auto;}.img-circle{border-radius:50%;}hr{margin-top:17px;margin-bottom:17px;border:0;border-top:1px solid #eeeeee;}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto;}[role="button"]{cursor:pointer;}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777777;}h1,.h1,h2,.h2,h3,.h3{margin-top:17px;margin-bottom:8.5px;}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%;}h4,.h4,h5,.h5,h6,.h6{margin-top:8.5px;margin-bottom:8.5px;}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%;}h1,.h1{font-size:31px;}h2,.h2{font-size:25px;}h3,.h3{font-size:21px;}h4,.h4{font-size:15px;}h5,.h5{font-size:12px;}h6,.h6{font-size:11px;}p{margin:0 0 8.5px;}.lead{margin-bottom:17px;font-size:13px;font-weight:300;line-height:1.4;}@media (min-width:768px){.lead{font-size:18px;}}small,.small{font-size:91%;}mark,.mark{background-color:#fcf8e3;padding:.2em;}.text-left{text-align:left;}.text-right{text-align:right;}.text-center{text-align:center;}.text-justify{text-align:justify;}.text-nowrap{white-space:nowrap;}.text-lowercase{text-transform:lowercase;}.text-uppercase{text-transform:uppercase;}.text-capitalize{text-transform:capitalize;}.text-muted{color:#777777;}.text-primary{color:#2c3e50;}a.text-primary:hover,a.text-primary:focus{color:#1a242f;}.text-success{color:#18bc9c;}a.text-success:hover,a.text-success:focus{color:#128f76;}.text-info{color:#3498db;}a.text-info:hover,a.text-info:focus{color:#217dbb;}.text-warning{color:#f39c12;}a.text-warning:hover,a.text-warning:focus{color:#c87f0a;}.text-danger{color:#e74c3c;}a.text-danger:hover,a.text-danger:focus{color:#d62c1a;}.bg-primary{color:#fff;background-color:#2c3e50;}a.bg-primary:hover,a.bg-primary:focus{background-color:#1a242f;}.bg-success{background-color:#dff0d8;}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3;}.bg-info{background-color:#d9edf7;}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee;}.bg-warning{background-color:#fcf8e3;}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5;}.bg-danger{background-color:#f2dede;}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9;}.page-header{padding-bottom:7.5px;margin:34px 0 17px;border-bottom:1px solid #eeeeee;}ul,ol{margin-top:0;margin-bottom:8.5px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:0;}.list-unstyled{padding-left:0;list-style:none;}.list-inline{padding-left:0;list-style:none;margin-left:-5px;}.list-inline > li{display:inline-block;padding-left:5px;padding-right:5px;}dl{margin-top:0;margin-bottom:17px;}dt,dd{line-height:1.42857143;}dt{font-weight:bold;}dd{margin-left:0;}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.dl-horizontal dd{margin-left:180px;}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777777;}.initialism{font-size:90%;text-transform:uppercase;}blockquote{padding:8.5px 17px;margin:0 0 17px;font-size:15px;border-left:5px solid #eeeeee;}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0;}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777777;}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0';}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eeeeee;border-left:0;text-align:right;}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:'';}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014';}address{margin-bottom:17px;font-style:normal;line-height:1.42857143;}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace;}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:3px;}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:2px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);}kbd kbd{padding:0;font-size:100%;font-weight:bold;box-shadow:none;}pre{display:block;padding:8px;margin:0 0 8.5px;font-size:11px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:3px;}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0;}.pre-scrollable{max-height:340px;overflow-y:scroll;}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px;}@media (min-width:768px){.container{width:750px;}}@media (min-width:992px){.container{width:970px;}}@media (min-width:1200px){.container{width:1170px;}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px;}.row{margin-left:-15px;margin-right:-15px;}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px;}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left;}.col-xs-12{width:100%;}.col-xs-11{width:91.66666667%;}.col-xs-10{width:83.33333333%;}.col-xs-9{width:75%;}.col-xs-8{width:66.66666667%;}.col-xs-7{width:58.33333333%;}.col-xs-6{width:50%;}.col-xs-5{width:41.66666667%;}.col-xs-4{width:33.33333333%;}.col-xs-3{width:25%;}.col-xs-2{width:16.66666667%;}.col-xs-1{width:8.33333333%;}.col-xs-pull-12{right:100%;}.col-xs-pull-11{right:91.66666667%;}.col-xs-pull-10{right:83.33333333%;}.col-xs-pull-9{right:75%;}.col-xs-pull-8{right:66.66666667%;}.col-xs-pull-7{right:58.33333333%;}.col-xs-pull-6{right:50%;}.col-xs-pull-5{right:41.66666667%;}.col-xs-pull-4{right:33.33333333%;}.col-xs-pull-3{right:25%;}.col-xs-pull-2{right:16.66666667%;}.col-xs-pull-1{right:8.33333333%;}.col-xs-pull-0{right:auto;}.col-xs-push-12{left:100%;}.col-xs-push-11{left:91.66666667%;}.col-xs-push-10{left:83.33333333%;}.col-xs-push-9{left:75%;}.col-xs-push-8{left:66.66666667%;}.col-xs-push-7{left:58.33333333%;}.col-xs-push-6{left:50%;}.col-xs-push-5{left:41.66666667%;}.col-xs-push-4{left:33.33333333%;}.col-xs-push-3{left:25%;}.col-xs-push-2{left:16.66666667%;}.col-xs-push-1{left:8.33333333%;}.col-xs-push-0{left:auto;}.col-xs-offset-12{margin-left:100%;}.col-xs-offset-11{margin-left:91.66666667%;}.col-xs-offset-10{margin-left:83.33333333%;}.col-xs-offset-9{margin-left:75%;}.col-xs-offset-8{margin-left:66.66666667%;}.col-xs-offset-7{margin-left:58.33333333%;}.col-xs-offset-6{margin-left:50%;}.col-xs-offset-5{margin-left:41.66666667%;}.col-xs-offset-4{margin-left:33.33333333%;}.col-xs-offset-3{margin-left:25%;}.col-xs-offset-2{margin-left:16.66666667%;}.col-xs-offset-1{margin-left:8.33333333%;}.col-xs-offset-0{margin-left:0%;}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left;}.col-sm-12{width:100%;}.col-sm-11{width:91.66666667%;}.col-sm-10{width:83.33333333%;}.col-sm-9{width:75%;}.col-sm-8{width:66.66666667%;}.col-sm-7{width:58.33333333%;}.col-sm-6{width:50%;}.col-sm-5{width:41.66666667%;}.col-sm-4{width:33.33333333%;}.col-sm-3{width:25%;}.col-sm-2{width:16.66666667%;}.col-sm-1{width:8.33333333%;}.col-sm-pull-12{right:100%;}.col-sm-pull-11{right:91.66666667%;}.col-sm-pull-10{right:83.33333333%;}.col-sm-pull-9{right:75%;}.col-sm-pull-8{right:66.66666667%;}.col-sm-pull-7{right:58.33333333%;}.col-sm-pull-6{right:50%;}.col-sm-pull-5{right:41.66666667%;}.col-sm-pull-4{right:33.33333333%;}.col-sm-pull-3{right:25%;}.col-sm-pull-2{right:16.66666667%;}.col-sm-pull-1{right:8.33333333%;}.col-sm-pull-0{right:auto;}.col-sm-push-12{left:100%;}.col-sm-push-11{left:91.66666667%;}.col-sm-push-10{left:83.33333333%;}.col-sm-push-9{left:75%;}.col-sm-push-8{left:66.66666667%;}.col-sm-push-7{left:58.33333333%;}.col-sm-push-6{left:50%;}.col-sm-push-5{left:41.66666667%;}.col-sm-push-4{left:33.33333333%;}.col-sm-push-3{left:25%;}.col-sm-push-2{left:16.66666667%;}.col-sm-push-1{left:8.33333333%;}.col-sm-push-0{left:auto;}.col-sm-offset-12{margin-left:100%;}.col-sm-offset-11{margin-left:91.66666667%;}.col-sm-offset-10{margin-left:83.33333333%;}.col-sm-offset-9{margin-left:75%;}.col-sm-offset-8{margin-left:66.66666667%;}.col-sm-offset-7{margin-left:58.33333333%;}.col-sm-offset-6{margin-left:50%;}.col-sm-offset-5{margin-left:41.66666667%;}.col-sm-offset-4{margin-left:33.33333333%;}.col-sm-offset-3{margin-left:25%;}.col-sm-offset-2{margin-left:16.66666667%;}.col-sm-offset-1{margin-left:8.33333333%;}.col-sm-offset-0{margin-left:0%;}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left;}.col-md-12{width:100%;}.col-md-11{width:91.66666667%;}.col-md-10{width:83.33333333%;}.col-md-9{width:75%;}.col-md-8{width:66.66666667%;}.col-md-7{width:58.33333333%;}.col-md-6{width:50%;}.col-md-5{width:41.66666667%;}.col-md-4{width:33.33333333%;}.col-md-3{width:25%;}.col-md-2{width:16.66666667%;}.col-md-1{width:8.33333333%;}.col-md-pull-12{right:100%;}.col-md-pull-11{right:91.66666667%;}.col-md-pull-10{right:83.33333333%;}.col-md-pull-9{right:75%;}.col-md-pull-8{right:66.66666667%;}.col-md-pull-7{right:58.33333333%;}.col-md-pull-6{right:50%;}.col-md-pull-5{right:41.66666667%;}.col-md-pull-4{right:33.33333333%;}.col-md-pull-3{right:25%;}.col-md-pull-2{right:16.66666667%;}.col-md-pull-1{right:8.33333333%;}.col-md-pull-0{right:auto;}.col-md-push-12{left:100%;}.col-md-push-11{left:91.66666667%;}.col-md-push-10{left:83.33333333%;}.col-md-push-9{left:75%;}.col-md-push-8{left:66.66666667%;}.col-md-push-7{left:58.33333333%;}.col-md-push-6{left:50%;}.col-md-push-5{left:41.66666667%;}.col-md-push-4{left:33.33333333%;}.col-md-push-3{left:25%;}.col-md-push-2{left:16.66666667%;}.col-md-push-1{left:8.33333333%;}.col-md-push-0{left:auto;}.col-md-offset-12{margin-left:100%;}.col-md-offset-11{margin-left:91.66666667%;}.col-md-offset-10{margin-left:83.33333333%;}.col-md-offset-9{margin-left:75%;}.col-md-offset-8{margin-left:66.66666667%;}.col-md-offset-7{margin-left:58.33333333%;}.col-md-offset-6{margin-left:50%;}.col-md-offset-5{margin-left:41.66666667%;}.col-md-offset-4{margin-left:33.33333333%;}.col-md-offset-3{margin-left:25%;}.col-md-offset-2{margin-left:16.66666667%;}.col-md-offset-1{margin-left:8.33333333%;}.col-md-offset-0{margin-left:0%;}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left;}.col-lg-12{width:100%;}.col-lg-11{width:91.66666667%;}.col-lg-10{width:83.33333333%;}.col-lg-9{width:75%;}.col-lg-8{width:66.66666667%;}.col-lg-7{width:58.33333333%;}.col-lg-6{width:50%;}.col-lg-5{width:41.66666667%;}.col-lg-4{width:33.33333333%;}.col-lg-3{width:25%;}.col-lg-2{width:16.66666667%;}.col-lg-1{width:8.33333333%;}.col-lg-pull-12{right:100%;}.col-lg-pull-11{right:91.66666667%;}.col-lg-pull-10{right:83.33333333%;}.col-lg-pull-9{right:75%;}.col-lg-pull-8{right:66.66666667%;}.col-lg-pull-7{right:58.33333333%;}.col-lg-pull-6{right:50%;}.col-lg-pull-5{right:41.66666667%;}.col-lg-pull-4{right:33.33333333%;}.col-lg-pull-3{right:25%;}.col-lg-pull-2{right:16.66666667%;}.col-lg-pull-1{right:8.33333333%;}.col-lg-pull-0{right:auto;}.col-lg-push-12{left:100%;}.col-lg-push-11{left:91.66666667%;}.col-lg-push-10{left:83.33333333%;}.col-lg-push-9{left:75%;}.col-lg-push-8{left:66.66666667%;}.col-lg-push-7{left:58.33333333%;}.col-lg-push-6{left:50%;}.col-lg-push-5{left:41.66666667%;}.col-lg-push-4{left:33.33333333%;}.col-lg-push-3{left:25%;}.col-lg-push-2{left:16.66666667%;}.col-lg-push-1{left:8.33333333%;}.col-lg-push-0{left:auto;}.col-lg-offset-12{margin-left:100%;}.col-lg-offset-11{margin-left:91.66666667%;}.col-lg-offset-10{margin-left:83.33333333%;}.col-lg-offset-9{margin-left:75%;}.col-lg-offset-8{margin-left:66.66666667%;}.col-lg-offset-7{margin-left:58.33333333%;}.col-lg-offset-6{margin-left:50%;}.col-lg-offset-5{margin-left:41.66666667%;}.col-lg-offset-4{margin-left:33.33333333%;}.col-lg-offset-3{margin-left:25%;}.col-lg-offset-2{margin-left:16.66666667%;}.col-lg-offset-1{margin-left:8.33333333%;}.col-lg-offset-0{margin-left:0%;}}table{background-color:transparent;}caption{padding-top:8px;padding-bottom:8px;color:#777777;text-align:left;}th{text-align:left;}.table{width:100%;max-width:100%;margin-bottom:17px;}.table > thead > tr > th,.table > tbody > tr > th,.table > tfoot > tr > th,.table > thead > tr > td,.table > tbody > tr > td,.table > tfoot > tr > td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd;}.table > thead > tr > th{vertical-align:bottom;border-bottom:2px solid #ddd;}.table > caption + thead > tr:first-child > th,.table > colgroup + thead > tr:first-child > th,.table > thead:first-child > tr:first-child > th,.table > caption + thead > tr:first-child > td,.table > colgroup + thead > tr:first-child > td,.table > thead:first-child > tr:first-child > td{border-top:0;}.table > tbody + tbody{border-top:2px solid #ddd;}.table .table{background-color:#fff;}.table-condensed > thead > tr > th,.table-condensed > tbody > tr > th,.table-condensed > tfoot > tr > th,.table-condensed > thead > tr > td,.table-condensed > tbody > tr > td,.table-condensed > tfoot > tr > td{padding:5px;}.table-bordered{border:1px solid #ddd;}.table-bordered > thead > tr > th,.table-bordered > tbody > tr > th,.table-bordered > tfoot > tr > th,.table-bordered > thead > tr > td,.table-bordered > tbody > tr > td,.table-bordered > tfoot > tr > td{border:1px solid #ddd;}.table-bordered > thead > tr > th,.table-bordered > thead > tr > td{border-bottom-width:2px;}.table-striped > tbody > tr:nth-of-type(odd){background-color:#f9f9f9;}.table-hover > tbody > tr:hover{background-color:#f5f5f5;}table col[class*="col-"]{position:static;float:none;display:table-column;}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell;}.table > thead > tr > td.active,.table > tbody > tr > td.active,.table > tfoot > tr > td.active,.table > thead > tr > th.active,.table > tbody > tr > th.active,.table > tfoot > tr > th.active,.table > thead > tr.active > td,.table > tbody > tr.active > td,.table > tfoot > tr.active > td,.table > thead > tr.active > th,.table > tbody > tr.active > th,.table > tfoot > tr.active > th{background-color:#f5f5f5;}.table-hover > tbody > tr > td.active:hover,.table-hover > tbody > tr > th.active:hover,.table-hover > tbody > tr.active:hover > td,.table-hover > tbody > tr:hover > .active,.table-hover > tbody > tr.active:hover > th{background-color:#e8e8e8;}.table > thead > tr > td.success,.table > tbody > tr > td.success,.table > tfoot > tr > td.success,.table > thead > tr > th.success,.table > tbody > tr > th.success,.table > tfoot > tr > th.success,.table > thead > tr.success > td,.table > tbody > tr.success > td,.table > tfoot > tr.success > td,.table > thead > tr.success > th,.table > tbody > tr.success > th,.table > tfoot > tr.success > th{background-color:#dff0d8;}.table-hover > tbody > tr > td.success:hover,.table-hover > tbody > tr > th.success:hover,.table-hover > tbody > tr.success:hover > td,.table-hover > tbody > tr:hover > .success,.table-hover > tbody > tr.success:hover > th{background-color:#d0e9c6;}.table > thead > tr > td.info,.table > tbody > tr > td.info,.table > tfoot > tr > td.info,.table > thead > tr > th.info,.table > tbody > tr > th.info,.table > tfoot > tr > th.info,.table > thead > tr.info > td,.table > tbody > tr.info > td,.table > tfoot > tr.info > td,.table > thead > tr.info > th,.table > tbody > tr.info > th,.table > tfoot > tr.info > th{background-color:#d9edf7;}.table-hover > tbody > tr > td.info:hover,.table-hover > tbody > tr > th.info:hover,.table-hover > tbody > tr.info:hover > td,.table-hover > tbody > tr:hover > .info,.table-hover > tbody > tr.info:hover > th{background-color:#c4e3f3;}.table > thead > tr > td.warning,.table > tbody > tr > td.warning,.table > tfoot > tr > td.warning,.table > thead > tr > th.warning,.table > tbody > tr > th.warning,.table > tfoot > tr > th.warning,.table > thead > tr.warning > td,.table > tbody > tr.warning > td,.table > tfoot > tr.warning > td,.table > thead > tr.warning > th,.table > tbody > tr.warning > th,.table > tfoot > tr.warning > th{background-color:#fcf8e3;}.table-hover > tbody > tr > td.warning:hover,.table-hover > tbody > tr > th.warning:hover,.table-hover > tbody > tr.warning:hover > td,.table-hover > tbody > tr:hover > .warning,.table-hover > tbody > tr.warning:hover > th{background-color:#faf2cc;}.table > thead > tr > td.danger,.table > tbody > tr > td.danger,.table > tfoot > tr > td.danger,.table > thead > tr > th.danger,.table > tbody > tr > th.danger,.table > tfoot > tr > th.danger,.table > thead > tr.danger > td,.table > tbody > tr.danger > td,.table > tfoot > tr.danger > td,.table > thead > tr.danger > th,.table > tbody > tr.danger > th,.table > tfoot > tr.danger > th{background-color:#f2dede;}.table-hover > tbody > tr > td.danger:hover,.table-hover > tbody > tr > th.danger:hover,.table-hover > tbody > tr.danger:hover > td,.table-hover > tbody > tr:hover > .danger,.table-hover > tbody > tr.danger:hover > th{background-color:#ebcccc;}.table-responsive{overflow-x:auto;min-height:0.01%;}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:12.75px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;}.table-responsive > .table{margin-bottom:0;}.table-responsive > .table > thead > tr > th,.table-responsive > .table > tbody > tr > th,.table-responsive > .table > tfoot > tr > th,.table-responsive > .table > thead > tr > td,.table-responsive > .table > tbody > tr > td,.table-responsive > .table > tfoot > tr > td{white-space:nowrap;}.table-responsive > .table-bordered{border:0;}.table-responsive > .table-bordered > thead > tr > th:first-child,.table-responsive > .table-bordered > tbody > tr > th:first-child,.table-responsive > .table-bordered > tfoot > tr > th:first-child,.table-responsive > .table-bordered > thead > tr > td:first-child,.table-responsive > .table-bordered > tbody > tr > td:first-child,.table-responsive > .table-bordered > tfoot > tr > td:first-child{border-left:0;}.table-responsive > .table-bordered > thead > tr > th:last-child,.table-responsive > .table-bordered > tbody > tr > th:last-child,.table-responsive > .table-bordered > tfoot > tr > th:last-child,.table-responsive > .table-bordered > thead > tr > td:last-child,.table-responsive > .table-bordered > tbody > tr > td:last-child,.table-responsive > .table-bordered > tfoot > tr > td:last-child{border-right:0;}.table-responsive > .table-bordered > tbody > tr:last-child > th,.table-responsive > .table-bordered > tfoot > tr:last-child > th,.table-responsive > .table-bordered > tbody > tr:last-child > td,.table-responsive > .table-bordered > tfoot > tr:last-child > td{border-bottom:0;}}fieldset{padding:0;margin:0;border:0;min-width:0;}legend{display:block;width:100%;padding:0;margin-bottom:17px;font-size:18px;line-height:inherit;color:#333333;border:0;border-bottom:1px solid #e5e5e5;}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold;}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal;}input[type="file"]{display:block;}input[type="range"]{display:block;width:100%;}select[multiple],select[size]{height:auto;}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}output{display:block;padding-top:7px;font-size:12px;line-height:1.42857143;color:#555555;}.form-control{display:block;width:100%;height:31px;padding:6px 12px;font-size:12px;line-height:1.42857143;color:#555555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,0.6);}.form-control::-moz-placeholder{color:#999;opacity:1;}.form-control:-ms-input-placeholder{color:#999;}.form-control::-webkit-input-placeholder{color:#999;}.form-control::-ms-expand{border:0;background-color:transparent;}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eeeeee;opacity:1;}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed;}textarea.form-control{height:auto;}input[type="search"]{-webkit-appearance:none;}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:31px;}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:28px;}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:42px;}}.form-group{margin-bottom:15px;}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px;}.radio label,.checkbox label{min-height:17px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer;}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9;}.radio + .radio,.checkbox + .checkbox{margin-top:-5px;}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer;}.radio-inline + .radio-inline,.checkbox-inline + .checkbox-inline{margin-top:0;margin-left:10px;}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed;}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed;}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed;}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:29px;}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0;}.input-sm{height:28px;padding:5px 10px;font-size:11px;line-height:1.5;border-radius:2px;}select.input-sm{height:28px;line-height:28px;}textarea.input-sm,select[multiple].input-sm{height:auto;}.form-group-sm .form-control{height:28px;padding:5px 10px;font-size:11px;line-height:1.5;border-radius:2px;}.form-group-sm select.form-control{height:28px;line-height:28px;}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto;}.form-group-sm .form-control-static{height:28px;min-height:28px;padding:6px 10px;font-size:11px;line-height:1.5;}.input-lg{height:42px;padding:10px 16px;font-size:15px;line-height:1.3333333;border-radius:5px;}select.input-lg{height:42px;line-height:42px;}textarea.input-lg,select[multiple].input-lg{height:auto;}.form-group-lg .form-control{height:42px;padding:10px 16px;font-size:15px;line-height:1.3333333;border-radius:5px;}.form-group-lg select.form-control{height:42px;line-height:42px;}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto;}.form-group-lg .form-control-static{height:42px;min-height:32px;padding:11px 16px;font-size:15px;line-height:1.3333333;}.has-feedback{position:relative;}.has-feedback .form-control{padding-right:38.75px;}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:31px;height:31px;line-height:31px;text-align:center;pointer-events:none;}.input-lg + .form-control-feedback,.input-group-lg + .form-control-feedback,.form-group-lg .form-control + .form-control-feedback{width:42px;height:42px;line-height:42px;}.input-sm + .form-control-feedback,.input-group-sm + .form-control-feedback,.form-group-sm .form-control + .form-control-feedback{width:28px;height:28px;line-height:28px;}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#18bc9c;}.has-success .form-control{border-color:#18bc9c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);}.has-success .form-control:focus{border-color:#128f76;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #51e9cb;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #51e9cb;}.has-success .input-group-addon{color:#18bc9c;border-color:#18bc9c;background-color:#dff0d8;}.has-success .form-control-feedback{color:#18bc9c;}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#f39c12;}.has-warning .form-control{border-color:#f39c12;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);}.has-warning .form-control:focus{border-color:#c87f0a;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f8c573;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f8c573;}.has-warning .input-group-addon{color:#f39c12;border-color:#f39c12;background-color:#fcf8e3;}.has-warning .form-control-feedback{color:#f39c12;}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#e74c3c;}.has-error .form-control{border-color:#e74c3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);}.has-error .form-control:focus{border-color:#d62c1a;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f29f97;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f29f97;}.has-error .input-group-addon{color:#e74c3c;border-color:#e74c3c;background-color:#f2dede;}.has-error .form-control-feedback{color:#e74c3c;}.has-feedback label ~ .form-control-feedback{top:22px;}.has-feedback label.sr-only ~ .form-control-feedback{top:0;}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373;}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle;}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle;}.form-inline .form-control-static{display:inline-block;}.form-inline .input-group{display:inline-table;vertical-align:middle;}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto;}.form-inline .input-group > .form-control{width:100%;}.form-inline .control-label{margin-bottom:0;vertical-align:middle;}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle;}.form-inline .radio label,.form-inline .checkbox label{padding-left:0;}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0;}.form-inline .has-feedback .form-control-feedback{top:0;}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px;}.form-horizontal .radio,.form-horizontal .checkbox{min-height:24px;}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px;}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px;}}.form-horizontal .has-feedback .form-control-feedback{right:15px;}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:15px;}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:11px;}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:12px;line-height:1.42857143;border-radius:3px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none;}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none;}.btn-default{color:#333;background-color:#fff;border-color:#ccc;}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c;}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad;}.btn-default:active,.btn-default.active,.open > .dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad;}.btn-default:active:hover,.btn-default.active:hover,.open > .dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open > .dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open > .dropdown-toggle.btn-default.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c;}.btn-default:active,.btn-default.active,.open > .dropdown-toggle.btn-default{background-image:none;}.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus{background-color:#fff;border-color:#ccc;}.btn-default .badge{color:#fff;background-color:#333;}.btn-primary{color:#fff;background-color:#2c3e50;border-color:#2c3e50;}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#1a242f;border-color:#000000;}.btn-primary:hover{color:#fff;background-color:#1a242f;border-color:#161f29;}.btn-primary:active,.btn-primary.active,.open > .dropdown-toggle.btn-primary{color:#fff;background-color:#1a242f;border-color:#161f29;}.btn-primary:active:hover,.btn-primary.active:hover,.open > .dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open > .dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open > .dropdown-toggle.btn-primary.focus{color:#fff;background-color:#0d1318;border-color:#000000;}.btn-primary:active,.btn-primary.active,.open > .dropdown-toggle.btn-primary{background-image:none;}.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus{background-color:#2c3e50;border-color:#2c3e50;}.btn-primary .badge{color:#2c3e50;background-color:#fff;}.btn-success{color:#fff;background-color:#18bc9c;border-color:#18bc9c;}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#128f76;border-color:#0a4b3e;}.btn-success:hover{color:#fff;background-color:#128f76;border-color:#11866f;}.btn-success:active,.btn-success.active,.open > .dropdown-toggle.btn-success{color:#fff;background-color:#128f76;border-color:#11866f;}.btn-success:active:hover,.btn-success.active:hover,.open > .dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open > .dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open > .dropdown-toggle.btn-success.focus{color:#fff;background-color:#0e6f5c;border-color:#0a4b3e;}.btn-success:active,.btn-success.active,.open > .dropdown-toggle.btn-success{background-image:none;}.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus{background-color:#18bc9c;border-color:#18bc9c;}.btn-success .badge{color:#18bc9c;background-color:#fff;}.btn-info{color:#fff;background-color:#3498db;border-color:#3498db;}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#217dbb;border-color:#16527a;}.btn-info:hover{color:#fff;background-color:#217dbb;border-color:#2077b2;}.btn-info:active,.btn-info.active,.open > .dropdown-toggle.btn-info{color:#fff;background-color:#217dbb;border-color:#2077b2;}.btn-info:active:hover,.btn-info.active:hover,.open > .dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open > .dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open > .dropdown-toggle.btn-info.focus{color:#fff;background-color:#1c699d;border-color:#16527a;}.btn-info:active,.btn-info.active,.open > .dropdown-toggle.btn-info{background-image:none;}.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus{background-color:#3498db;border-color:#3498db;}.btn-info .badge{color:#3498db;background-color:#fff;}.btn-warning{color:#fff;background-color:#f39c12;border-color:#f39c12;}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#c87f0a;border-color:#7f5006;}.btn-warning:hover{color:#fff;background-color:#c87f0a;border-color:#be780a;}.btn-warning:active,.btn-warning.active,.open > .dropdown-toggle.btn-warning{color:#fff;background-color:#c87f0a;border-color:#be780a;}.btn-warning:active:hover,.btn-warning.active:hover,.open > .dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open > .dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open > .dropdown-toggle.btn-warning.focus{color:#fff;background-color:#a66908;border-color:#7f5006;}.btn-warning:active,.btn-warning.active,.open > .dropdown-toggle.btn-warning{background-image:none;}.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus{background-color:#f39c12;border-color:#f39c12;}.btn-warning .badge{color:#f39c12;background-color:#fff;}.btn-danger{color:#fff;background-color:#e74c3c;border-color:#e74c3c;}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#d62c1a;border-color:#921e12;}.btn-danger:hover{color:#fff;background-color:#d62c1a;border-color:#cd2a19;}.btn-danger:active,.btn-danger.active,.open > .dropdown-toggle.btn-danger{color:#fff;background-color:#d62c1a;border-color:#cd2a19;}.btn-danger:active:hover,.btn-danger.active:hover,.open > .dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open > .dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open > .dropdown-toggle.btn-danger.focus{color:#fff;background-color:#b62516;border-color:#921e12;}.btn-danger:active,.btn-danger.active,.open > .dropdown-toggle.btn-danger{background-image:none;}.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus{background-color:#e74c3c;border-color:#e74c3c;}.btn-danger .badge{color:#e74c3c;background-color:#fff;}.btn-link{color:#2c3e50;font-weight:normal;border-radius:0;}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none;}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent;}.btn-link:hover,.btn-link:focus{color:#11181f;text-decoration:underline;background-color:transparent;}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777777;text-decoration:none;}.btn-lg,.btn-group-lg > .btn{padding:10px 16px;font-size:15px;line-height:1.3333333;border-radius:5px;}.btn-sm,.btn-group-sm > .btn{padding:5px 10px;font-size:11px;line-height:1.5;border-radius:2px;}.btn-xs,.btn-group-xs > .btn{padding:1px 5px;font-size:11px;line-height:1.5;border-radius:2px;}.btn-block{display:block;width:100%;}.btn-block + .btn-block{margin-top:5px;}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%;}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;}.fade.in{opacity:1;}.collapse{display:none;}.collapse.in{display:block;}tr.collapse.in{display:table-row;}tbody.collapse.in{display:table-row-group;}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:0.35s;transition-duration:0.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease;}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent;}.dropup,.dropdown{position:relative;}.dropdown-toggle:focus{outline:0;}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:12px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:3px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box;}.dropdown-menu.pull-right{right:0;left:auto;}.dropdown-menu .divider{height:1px;margin:7.5px 0;overflow:hidden;background-color:#e5e5e5;}.dropdown-menu > li > a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333333;white-space:nowrap;}.dropdown-menu > li > a:hover,.dropdown-menu > li > a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5;}.dropdown-menu > .active > a,.dropdown-menu > .active > a:hover,.dropdown-menu > .active > a:focus{color:#fff;text-decoration:none;outline:0;background-color:#2c3e50;}.dropdown-menu > .disabled > a,.dropdown-menu > .disabled > a:hover,.dropdown-menu > .disabled > a:focus{color:#777777;}.dropdown-menu > .disabled > a:hover,.dropdown-menu > .disabled > a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed;}.open > .dropdown-menu{display:block;}.open > a{outline:0;}.dropdown-menu-right{left:auto;right:0;}.dropdown-menu-left{left:0;right:auto;}.dropdown-header{display:block;padding:3px 20px;font-size:11px;line-height:1.42857143;color:#777777;white-space:nowrap;}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990;}.pull-right > .dropdown-menu{right:0;left:auto;}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:"";}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px;}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0;}.navbar-right .dropdown-menu-left{left:0;right:auto;}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle;}.btn-group > .btn,.btn-group-vertical > .btn{position:relative;float:left;}.btn-group > .btn:hover,.btn-group-vertical > .btn:hover,.btn-group > .btn:focus,.btn-group-vertical > .btn:focus,.btn-group > .btn:active,.btn-group-vertical > .btn:active,.btn-group > .btn.active,.btn-group-vertical > .btn.active{z-index:2;}.btn-group .btn + .btn,.btn-group .btn + .btn-group,.btn-group .btn-group + .btn,.btn-group .btn-group + .btn-group{margin-left:-1px;}.btn-toolbar{margin-left:-5px;}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left;}.btn-toolbar > .btn,.btn-toolbar > .btn-group,.btn-toolbar > .input-group{margin-left:5px;}.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0;}.btn-group > .btn:first-child{margin-left:0;}.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0;}.btn-group > .btn:last-child:not(:first-child),.btn-group > .dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;}.btn-group > .btn-group{float:left;}.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn{border-radius:0;}.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0;}.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0;}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;}.btn-group > .btn + .dropdown-toggle{padding-left:8px;padding-right:8px;}.btn-group > .btn-lg + .dropdown-toggle{padding-left:12px;padding-right:12px;}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none;}.btn .caret{margin-left:0;}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0;}.dropup .btn-lg .caret{border-width:0 5px 5px;}.btn-group-vertical > .btn,.btn-group-vertical > .btn-group,.btn-group-vertical > .btn-group > .btn{display:block;float:none;width:100%;max-width:100%;}.btn-group-vertical > .btn-group > .btn{float:none;}.btn-group-vertical > .btn + .btn,.btn-group-vertical > .btn + .btn-group,.btn-group-vertical > .btn-group + .btn,.btn-group-vertical > .btn-group + .btn-group{margin-top:-1px;margin-left:0;}.btn-group-vertical > .btn:not(:first-child):not(:last-child){border-radius:0;}.btn-group-vertical > .btn:first-child:not(:last-child){border-top-right-radius:3px;border-top-left-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;}.btn-group-vertical > .btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;}.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn{border-radius:0;}.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0;}.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child{border-top-right-radius:0;border-top-left-radius:0;}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate;}.btn-group-justified > .btn,.btn-group-justified > .btn-group{float:none;display:table-cell;width:1%;}.btn-group-justified > .btn-group .btn{width:100%;}.btn-group-justified > .btn-group .dropdown-menu{left:auto;}[data-toggle="buttons"] > .btn input[type="radio"],[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],[data-toggle="buttons"] > .btn input[type="checkbox"],[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"]{position:absolute;clip:rect(0,0,0,0);pointer-events:none;}.input-group{position:relative;display:table;border-collapse:separate;}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0;}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0;}.input-group .form-control:focus{z-index:3;}.input-group-lg > .form-control,.input-group-lg > .input-group-addon,.input-group-lg > .input-group-btn > .btn{height:42px;padding:10px 16px;font-size:15px;line-height:1.3333333;border-radius:5px;}select.input-group-lg > .form-control,select.input-group-lg > .input-group-addon,select.input-group-lg > .input-group-btn > .btn{height:42px;line-height:42px;}textarea.input-group-lg > .form-control,textarea.input-group-lg > .input-group-addon,textarea.input-group-lg > .input-group-btn > .btn,select[multiple].input-group-lg > .form-control,select[multiple].input-group-lg > .input-group-addon,select[multiple].input-group-lg > .input-group-btn > .btn{height:auto;}.input-group-sm > .form-control,.input-group-sm > .input-group-addon,.input-group-sm > .input-group-btn > .btn{height:28px;padding:5px 10px;font-size:11px;line-height:1.5;border-radius:2px;}select.input-group-sm > .form-control,select.input-group-sm > .input-group-addon,select.input-group-sm > .input-group-btn > .btn{height:28px;line-height:28px;}textarea.input-group-sm > .form-control,textarea.input-group-sm > .input-group-addon,textarea.input-group-sm > .input-group-btn > .btn,select[multiple].input-group-sm > .form-control,select[multiple].input-group-sm > .input-group-addon,select[multiple].input-group-sm > .input-group-btn > .btn{height:auto;}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell;}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0;}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle;}.input-group-addon{padding:6px 12px;font-size:12px;font-weight:normal;line-height:1;color:#555555;text-align:center;background-color:#eeeeee;border:1px solid #ccc;border-radius:3px;}.input-group-addon.input-sm{padding:5px 10px;font-size:11px;border-radius:2px;}.input-group-addon.input-lg{padding:10px 16px;font-size:15px;border-radius:5px;}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0;}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child > .btn,.input-group-btn:first-child > .btn-group > .btn,.input-group-btn:first-child > .dropdown-toggle,.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child > .btn-group:not(:last-child) > .btn{border-bottom-right-radius:0;border-top-right-radius:0;}.input-group-addon:first-child{border-right:0;}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child > .btn,.input-group-btn:last-child > .btn-group > .btn,.input-group-btn:last-child > .dropdown-toggle,.input-group-btn:first-child > .btn:not(:first-child),.input-group-btn:first-child > .btn-group:not(:first-child) > .btn{border-bottom-left-radius:0;border-top-left-radius:0;}.input-group-addon:last-child{border-left:0;}.input-group-btn{position:relative;font-size:0;white-space:nowrap;}.input-group-btn > .btn{position:relative;}.input-group-btn > .btn + .btn{margin-left:-1px;}.input-group-btn > .btn:hover,.input-group-btn > .btn:focus,.input-group-btn > .btn:active{z-index:2;}.input-group-btn:first-child > .btn,.input-group-btn:first-child > .btn-group{margin-right:-1px;}.input-group-btn:last-child > .btn,.input-group-btn:last-child > .btn-group{z-index:2;margin-left:-1px;}.nav{margin-bottom:0;padding-left:0;list-style:none;}.nav > li{position:relative;display:block;}.nav > li > a{position:relative;display:block;padding:10px 15px;}.nav > li > a:hover,.nav > li > a:focus{text-decoration:none;background-color:#eeeeee;}.nav > li.disabled > a{color:#777777;}.nav > li.disabled > a:hover,.nav > li.disabled > a:focus{color:#777777;text-decoration:none;background-color:transparent;cursor:not-allowed;}.nav .open > a,.nav .open > a:hover,.nav .open > a:focus{background-color:#eeeeee;border-color:#2c3e50;}.nav .nav-divider{height:1px;margin:7.5px 0;overflow:hidden;background-color:#e5e5e5;}.nav > li > a > img{max-width:none;}.nav-tabs{border-bottom:1px solid #ddd;}.nav-tabs > li{float:left;margin-bottom:-1px;}.nav-tabs > li > a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:3px 3px 0 0;}.nav-tabs > li > a:hover{border-color:#eeeeee #eeeeee #ddd;}.nav-tabs > li.active > a,.nav-tabs > li.active > a:hover,.nav-tabs > li.active > a:focus{color:#555555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;}.nav-tabs.nav-justified{width:100%;border-bottom:0;}.nav-tabs.nav-justified > li{float:none;}.nav-tabs.nav-justified > li > a{text-align:center;margin-bottom:5px;}.nav-tabs.nav-justified > .dropdown .dropdown-menu{top:auto;left:auto;}@media (min-width:768px){.nav-tabs.nav-justified > li{display:table-cell;width:1%;}.nav-tabs.nav-justified > li > a{margin-bottom:0;}}.nav-tabs.nav-justified > li > a{margin-right:0;border-radius:3px;}.nav-tabs.nav-justified > .active > a,.nav-tabs.nav-justified > .active > a:hover,.nav-tabs.nav-justified > .active > a:focus{border:1px solid #ddd;}@media (min-width:768px){.nav-tabs.nav-justified > li > a{border-bottom:1px solid #ddd;border-radius:3px 3px 0 0;}.nav-tabs.nav-justified > .active > a,.nav-tabs.nav-justified > .active > a:hover,.nav-tabs.nav-justified > .active > a:focus{border-bottom-color:#fff;}}.nav-pills > li{float:left;}.nav-pills > li > a{border-radius:3px;}.nav-pills > li + li{margin-left:2px;}.nav-pills > li.active > a,.nav-pills > li.active > a:hover,.nav-pills > li.active > a:focus{color:#fff;background-color:#2c3e50;}.nav-stacked > li{float:none;}.nav-stacked > li + li{margin-top:2px;margin-left:0;}.nav-justified{width:100%;}.nav-justified > li{float:none;}.nav-justified > li > a{text-align:center;margin-bottom:5px;}.nav-justified > .dropdown .dropdown-menu{top:auto;left:auto;}@media (min-width:768px){.nav-justified > li{display:table-cell;width:1%;}.nav-justified > li > a{margin-bottom:0;}}.nav-tabs-justified{border-bottom:0;}.nav-tabs-justified > li > a{margin-right:0;border-radius:3px;}.nav-tabs-justified > .active > a,.nav-tabs-justified > .active > a:hover,.nav-tabs-justified > .active > a:focus{border:1px solid #ddd;}@media (min-width:768px){.nav-tabs-justified > li > a{border-bottom:1px solid #ddd;border-radius:3px 3px 0 0;}.nav-tabs-justified > .active > a,.nav-tabs-justified > .active > a:hover,.nav-tabs-justified > .active > a:focus{border-bottom-color:#fff;}}.tab-content > .tab-pane{display:none;}.tab-content > .active{display:block;}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0;}.navbar{position:relative;min-height:50px;margin-bottom:17px;border:1px solid transparent;}@media (min-width:768px){.navbar{border-radius:3px;}}@media (min-width:768px){.navbar-header{float:left;}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch;}.navbar-collapse.in{overflow-y:auto;}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none;}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important;}.navbar-collapse.in{overflow-y:visible;}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0;}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px;}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px;}}.container > .navbar-header,.container-fluid > .navbar-header,.container > .navbar-collapse,.container-fluid > .navbar-collapse{margin-right:-15px;margin-left:-15px;}@media (min-width:768px){.container > .navbar-header,.container-fluid > .navbar-header,.container > .navbar-collapse,.container-fluid > .navbar-collapse{margin-right:0;margin-left:0;}}.navbar-static-top{z-index:1000;border-width:0 0 1px;}@media (min-width:768px){.navbar-static-top{border-radius:0;}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0;}}.navbar-fixed-top{top:0;border-width:0 0 1px;}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0;}.navbar-brand{float:left;padding:16.5px 15px;font-size:15px;line-height:17px;height:50px;}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none;}.navbar-brand > img{display:block;}@media (min-width:768px){.navbar > .container .navbar-brand,.navbar > .container-fluid .navbar-brand{margin-left:-15px;}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:3px;}.navbar-toggle:focus{outline:0;}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px;}.navbar-toggle .icon-bar + .icon-bar{margin-top:4px;}@media (min-width:768px){.navbar-toggle{display:none;}}.navbar-nav{margin:8.25px -15px;}.navbar-nav > li > a{padding-top:10px;padding-bottom:10px;line-height:17px;}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none;}.navbar-nav .open .dropdown-menu > li > a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px;}.navbar-nav .open .dropdown-menu > li > a{line-height:17px;}.navbar-nav .open .dropdown-menu > li > a:hover,.navbar-nav .open .dropdown-menu > li > a:focus{background-image:none;}}@media (min-width:768px){.navbar-nav{float:left;margin:0;}.navbar-nav > li{float:left;}.navbar-nav > li > a{padding-top:16.5px;padding-bottom:16.5px;}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:9.5px;margin-bottom:9.5px;}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle;}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle;}.navbar-form .form-control-static{display:inline-block;}.navbar-form .input-group{display:inline-table;vertical-align:middle;}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto;}.navbar-form .input-group > .form-control{width:100%;}.navbar-form .control-label{margin-bottom:0;vertical-align:middle;}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle;}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0;}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0;}.navbar-form .has-feedback .form-control-feedback{top:0;}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px;}.navbar-form .form-group:last-child{margin-bottom:0;}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none;}}.navbar-nav > li > .dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0;}.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu{margin-bottom:0;border-top-right-radius:3px;border-top-left-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;}.navbar-btn{margin-top:9.5px;margin-bottom:9.5px;}.navbar-btn.btn-sm{margin-top:11px;margin-bottom:11px;}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px;}.navbar-text{margin-top:16.5px;margin-bottom:16.5px;}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px;}}@media (min-width:768px){.navbar-left{float:left !important;}.navbar-right{float:right !important;margin-right:-15px;}.navbar-right ~ .navbar-right{margin-right:0;}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7;}.navbar-default .navbar-brand{color:#777;}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent;}.navbar-default .navbar-text{color:#777;}.navbar-default .navbar-nav > li > a{color:#777;}.navbar-default .navbar-nav > li > a:hover,.navbar-default .navbar-nav > li > a:focus{color:#333;background-color:transparent;}.navbar-default .navbar-nav > .active > a,.navbar-default .navbar-nav > .active > a:hover,.navbar-default .navbar-nav > .active > a:focus{color:#555;background-color:#e7e7e7;}.navbar-default .navbar-nav > .disabled > a,.navbar-default .navbar-nav > .disabled > a:hover,.navbar-default .navbar-nav > .disabled > a:focus{color:#ccc;background-color:transparent;}.navbar-default .navbar-toggle{border-color:#ddd;}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd;}.navbar-default .navbar-toggle .icon-bar{background-color:#888;}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7;}.navbar-default .navbar-nav > .open > a,.navbar-default .navbar-nav > .open > a:hover,.navbar-default .navbar-nav > .open > a:focus{background-color:#e7e7e7;color:#555;}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu > li > a{color:#777;}.navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > li > a:focus{color:#333;background-color:transparent;}.navbar-default .navbar-nav .open .dropdown-menu > .active > a,.navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus{color:#555;background-color:#e7e7e7;}.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus{color:#ccc;background-color:transparent;}}.navbar-default .navbar-link{color:#777;}.navbar-default .navbar-link:hover{color:#333;}.navbar-default .btn-link{color:#777;}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333;}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc;}.navbar-inverse{background-color:#222;border-color:#080808;}.navbar-inverse .navbar-brand{color:#9d9d9d;}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent;}.navbar-inverse .navbar-text{color:#9d9d9d;}.navbar-inverse .navbar-nav > li > a{color:#9d9d9d;}.navbar-inverse .navbar-nav > li > a:hover,.navbar-inverse .navbar-nav > li > a:focus{color:#fff;background-color:transparent;}.navbar-inverse .navbar-nav > .active > a,.navbar-inverse .navbar-nav > .active > a:hover,.navbar-inverse .navbar-nav > .active > a:focus{color:#fff;background-color:#080808;}.navbar-inverse .navbar-nav > .disabled > a,.navbar-inverse .navbar-nav > .disabled > a:hover,.navbar-inverse .navbar-nav > .disabled > a:focus{color:#444;background-color:transparent;}.navbar-inverse .navbar-toggle{border-color:#333;}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333;}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff;}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010;}.navbar-inverse .navbar-nav > .open > a,.navbar-inverse .navbar-nav > .open > a:hover,.navbar-inverse .navbar-nav > .open > a:focus{background-color:#080808;color:#fff;}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header{border-color:#080808;}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808;}.navbar-inverse .navbar-nav .open .dropdown-menu > li > a{color:#9d9d9d;}.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus{color:#fff;background-color:transparent;}.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus{color:#fff;background-color:#080808;}.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus{color:#444;background-color:transparent;}}.navbar-inverse .navbar-link{color:#9d9d9d;}.navbar-inverse .navbar-link:hover{color:#fff;}.navbar-inverse .btn-link{color:#9d9d9d;}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff;}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444;}.breadcrumb{padding:8px 15px;margin-bottom:17px;list-style:none;background-color:#f5f5f5;border-radius:3px;}.breadcrumb > li{display:inline-block;}.breadcrumb > li + li:before{content:"/\00a0";padding:0 5px;color:#ccc;}.breadcrumb > .active{color:#777777;}.pagination{display:inline-block;padding-left:0;margin:17px 0;border-radius:3px;}.pagination > li{display:inline;}.pagination > li > a,.pagination > li > span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#2c3e50;background-color:#fff;border:1px solid #ddd;margin-left:-1px;}.pagination > li:first-child > a,.pagination > li:first-child > span{margin-left:0;border-bottom-left-radius:3px;border-top-left-radius:3px;}.pagination > li:last-child > a,.pagination > li:last-child > span{border-bottom-right-radius:3px;border-top-right-radius:3px;}.pagination > li > a:hover,.pagination > li > span:hover,.pagination > li > a:focus,.pagination > li > span:focus{z-index:2;color:#11181f;background-color:#eeeeee;border-color:#ddd;}.pagination > .active > a,.pagination > .active > span,.pagination > .active > a:hover,.pagination > .active > span:hover,.pagination > .active > a:focus,.pagination > .active > span:focus{z-index:3;color:#fff;background-color:#2c3e50;border-color:#2c3e50;cursor:default;}.pagination > .disabled > span,.pagination > .disabled > span:hover,.pagination > .disabled > span:focus,.pagination > .disabled > a,.pagination > .disabled > a:hover,.pagination > .disabled > a:focus{color:#777777;background-color:#fff;border-color:#ddd;cursor:not-allowed;}.pagination-lg > li > a,.pagination-lg > li > span{padding:10px 16px;font-size:15px;line-height:1.3333333;}.pagination-lg > li:first-child > a,.pagination-lg > li:first-child > span{border-bottom-left-radius:5px;border-top-left-radius:5px;}.pagination-lg > li:last-child > a,.pagination-lg > li:last-child > span{border-bottom-right-radius:5px;border-top-right-radius:5px;}.pagination-sm > li > a,.pagination-sm > li > span{padding:5px 10px;font-size:11px;line-height:1.5;}.pagination-sm > li:first-child > a,.pagination-sm > li:first-child > span{border-bottom-left-radius:2px;border-top-left-radius:2px;}.pagination-sm > li:last-child > a,.pagination-sm > li:last-child > span{border-bottom-right-radius:2px;border-top-right-radius:2px;}.pager{padding-left:0;margin:17px 0;list-style:none;text-align:center;}.pager li{display:inline;}.pager li > a,.pager li > span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px;}.pager li > a:hover,.pager li > a:focus{text-decoration:none;background-color:#eeeeee;}.pager .next > a,.pager .next > span{float:right;}.pager .previous > a,.pager .previous > span{float:left;}.pager .disabled > a,.pager .disabled > a:hover,.pager .disabled > a:focus,.pager .disabled > span{color:#777777;background-color:#fff;cursor:not-allowed;}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em;}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer;}.label:empty{display:none;}.btn .label{position:relative;top:-1px;}.label-default{background-color:#777777;}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e;}.label-primary{background-color:#2c3e50;}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#1a242f;}.label-success{background-color:#18bc9c;}.label-success[href]:hover,.label-success[href]:focus{background-color:#128f76;}.label-info{background-color:#3498db;}.label-info[href]:hover,.label-info[href]:focus{background-color:#217dbb;}.label-warning{background-color:#f39c12;}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#c87f0a;}.label-danger{background-color:#e74c3c;}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#d62c1a;}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:11px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777777;border-radius:10px;}.badge:empty{display:none;}.btn .badge{position:relative;top:-1px;}.btn-xs .badge,.btn-group-xs > .btn .badge{top:0;padding:1px 5px;}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer;}.list-group-item.active > .badge,.nav-pills > .active > a > .badge{color:#2c3e50;background-color:#fff;}.list-group-item > .badge{float:right;}.list-group-item > .badge + .badge{margin-right:5px;}.nav-pills > li > a > .badge{margin-left:3px;}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eeeeee;}.jumbotron h1,.jumbotron .h1{color:inherit;}.jumbotron p{margin-bottom:15px;font-size:18px;font-weight:200;}.jumbotron > hr{border-top-color:#d5d5d5;}.container .jumbotron,.container-fluid .jumbotron{border-radius:5px;padding-left:15px;padding-right:15px;}.jumbotron .container{max-width:100%;}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px;}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px;}.jumbotron h1,.jumbotron .h1{font-size:54px;}}.thumbnail{display:block;padding:4px;margin-bottom:17px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:3px;-webkit-transition:border 0.2s ease-in-out;-o-transition:border 0.2s ease-in-out;transition:border 0.2s ease-in-out;}.thumbnail > img,.thumbnail a > img{margin-left:auto;margin-right:auto;}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#2c3e50;}.thumbnail .caption{padding:9px;color:#333333;}.alert{padding:15px;margin-bottom:17px;border:1px solid transparent;border-radius:3px;}.alert h4{margin-top:0;color:inherit;}.alert .alert-link{font-weight:bold;}.alert > p,.alert > ul{margin-bottom:0;}.alert > p + p{margin-top:5px;}.alert-dismissable,.alert-dismissible{padding-right:35px;}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit;}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#18bc9c;}.alert-success hr{border-top-color:#c9e2b3;}.alert-success .alert-link{color:#128f76;}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3498db;}.alert-info hr{border-top-color:#a6e1ec;}.alert-info .alert-link{color:#217dbb;}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#f39c12;}.alert-warning hr{border-top-color:#f7e1b5;}.alert-warning .alert-link{color:#c87f0a;}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#e74c3c;}.alert-danger hr{border-top-color:#e4b9c0;}.alert-danger .alert-link{color:#d62c1a;}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0;}to{background-position:0 0;}}@keyframes progress-bar-stripes{from{background-position:40px 0;}to{background-position:0 0;}}.progress{overflow:hidden;height:17px;margin-bottom:17px;background-color:#f5f5f5;border-radius:3px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);}.progress-bar{float:left;width:0%;height:100%;font-size:11px;line-height:17px;color:#fff;text-align:center;background-color:#2c3e50;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size:40px 40px;}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;}.progress-bar-success{background-color:#18bc9c;}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);}.progress-bar-info{background-color:#3498db;}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);}.progress-bar-warning{background-color:#f39c12;}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);}.progress-bar-danger{background-color:#e74c3c;}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);}.media{margin-top:15px;}.media:first-child{margin-top:0;}.media,.media-body{zoom:1;overflow:hidden;}.media-body{width:10000px;}.media-object{display:block;}.media-object.img-thumbnail{max-width:none;}.media-right,.media > .pull-right{padding-left:10px;}.media-left,.media > .pull-left{padding-right:10px;}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top;}.media-middle{vertical-align:middle;}.media-bottom{vertical-align:bottom;}.media-heading{margin-top:0;margin-bottom:5px;}.media-list{padding-left:0;list-style:none;}.list-group{margin-bottom:20px;padding-left:0;}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd;}.list-group-item:first-child{border-top-right-radius:3px;border-top-left-radius:3px;}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;}a.list-group-item,button.list-group-item{color:#555;}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333;}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5;}button.list-group-item{width:100%;text-align:left;}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eeeeee;color:#777777;cursor:not-allowed;}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit;}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777777;}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#2c3e50;border-color:#2c3e50;}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading > small,.list-group-item.active:hover .list-group-item-heading > small,.list-group-item.active:focus .list-group-item-heading > small,.list-group-item.active .list-group-item-heading > .small,.list-group-item.active:hover .list-group-item-heading > .small,.list-group-item.active:focus .list-group-item-heading > .small{color:inherit;}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#8aa4be;}.list-group-item-success{color:#18bc9c;background-color:#dff0d8;}a.list-group-item-success,button.list-group-item-success{color:#18bc9c;}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit;}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#18bc9c;background-color:#d0e9c6;}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#18bc9c;border-color:#18bc9c;}.list-group-item-info{color:#3498db;background-color:#d9edf7;}a.list-group-item-info,button.list-group-item-info{color:#3498db;}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit;}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#3498db;background-color:#c4e3f3;}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#3498db;border-color:#3498db;}.list-group-item-warning{color:#f39c12;background-color:#fcf8e3;}a.list-group-item-warning,button.list-group-item-warning{color:#f39c12;}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit;}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#f39c12;background-color:#faf2cc;}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#f39c12;border-color:#f39c12;}.list-group-item-danger{color:#e74c3c;background-color:#f2dede;}a.list-group-item-danger,button.list-group-item-danger{color:#e74c3c;}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit;}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#e74c3c;background-color:#ebcccc;}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#e74c3c;border-color:#e74c3c;}.list-group-item-heading{margin-top:0;margin-bottom:5px;}.list-group-item-text{margin-bottom:0;line-height:1.3;}.panel{margin-bottom:17px;background-color:#fff;border:1px solid transparent;border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05);}.panel-body{padding:15px;}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:2px;border-top-left-radius:2px;}.panel-heading > .dropdown .dropdown-toggle{color:inherit;}.panel-title{margin-top:0;margin-bottom:0;font-size:14px;color:inherit;}.panel-title > a,.panel-title > small,.panel-title > .small,.panel-title > small > a,.panel-title > .small > a{color:inherit;}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:2px;border-bottom-left-radius:2px;}.panel > .list-group,.panel > .panel-collapse > .list-group{margin-bottom:0;}.panel > .list-group .list-group-item,.panel > .panel-collapse > .list-group .list-group-item{border-width:1px 0;border-radius:0;}.panel > .list-group:first-child .list-group-item:first-child,.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:2px;border-top-left-radius:2px;}.panel > .list-group:last-child .list-group-item:last-child,.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px;}.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0;}.panel-heading + .list-group .list-group-item:first-child{border-top-width:0;}.list-group + .panel-footer{border-top-width:0;}.panel > .table,.panel > .table-responsive > .table,.panel > .panel-collapse > .table{margin-bottom:0;}.panel > .table caption,.panel > .table-responsive > .table caption,.panel > .panel-collapse > .table caption{padding-left:15px;padding-right:15px;}.panel > .table:first-child,.panel > .table-responsive:first-child > .table:first-child{border-top-right-radius:2px;border-top-left-radius:2px;}.panel > .table:first-child > thead:first-child > tr:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child{border-top-left-radius:2px;border-top-right-radius:2px;}.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child{border-top-left-radius:2px;}.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child{border-top-right-radius:2px;}.panel > .table:last-child,.panel > .table-responsive:last-child > .table:last-child{border-bottom-right-radius:2px;border-bottom-left-radius:2px;}.panel > .table:last-child > tbody:last-child > tr:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px;}.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child{border-bottom-left-radius:2px;}.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child{border-bottom-right-radius:2px;}.panel > .panel-body + .table,.panel > .panel-body + .table-responsive,.panel > .table + .panel-body,.panel > .table-responsive + .panel-body{border-top:1px solid #ddd;}.panel > .table > tbody:first-child > tr:first-child th,.panel > .table > tbody:first-child > tr:first-child td{border-top:0;}.panel > .table-bordered,.panel > .table-responsive > .table-bordered{border:0;}.panel > .table-bordered > thead > tr > th:first-child,.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,.panel > .table-bordered > tbody > tr > th:first-child,.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,.panel > .table-bordered > tfoot > tr > th:first-child,.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,.panel > .table-bordered > thead > tr > td:first-child,.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,.panel > .table-bordered > tbody > tr > td:first-child,.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,.panel > .table-bordered > tfoot > tr > td:first-child,.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child{border-left:0;}.panel > .table-bordered > thead > tr > th:last-child,.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,.panel > .table-bordered > tbody > tr > th:last-child,.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,.panel > .table-bordered > tfoot > tr > th:last-child,.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,.panel > .table-bordered > thead > tr > td:last-child,.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,.panel > .table-bordered > tbody > tr > td:last-child,.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,.panel > .table-bordered > tfoot > tr > td:last-child,.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child{border-right:0;}.panel > .table-bordered > thead > tr:first-child > td,.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,.panel > .table-bordered > tbody > tr:first-child > td,.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,.panel > .table-bordered > thead > tr:first-child > th,.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,.panel > .table-bordered > tbody > tr:first-child > th,.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th{border-bottom:0;}.panel > .table-bordered > tbody > tr:last-child > td,.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,.panel > .table-bordered > tfoot > tr:last-child > td,.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,.panel > .table-bordered > tbody > tr:last-child > th,.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,.panel > .table-bordered > tfoot > tr:last-child > th,.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th{border-bottom:0;}.panel > .table-responsive{border:0;margin-bottom:0;}.panel-group{margin-bottom:17px;}.panel-group .panel{margin-bottom:0;border-radius:3px;}.panel-group .panel + .panel{margin-top:5px;}.panel-group .panel-heading{border-bottom:0;}.panel-group .panel-heading + .panel-collapse > .panel-body,.panel-group .panel-heading + .panel-collapse > .list-group{border-top:1px solid #ddd;}.panel-group .panel-footer{border-top:0;}.panel-group .panel-footer + .panel-collapse .panel-body{border-bottom:1px solid #ddd;}.panel-default{border-color:#ddd;}.panel-default > .panel-heading{color:#333333;background-color:#f5f5f5;border-color:#ddd;}.panel-default > .panel-heading + .panel-collapse > .panel-body{border-top-color:#ddd;}.panel-default > .panel-heading .badge{color:#f5f5f5;background-color:#333333;}.panel-default > .panel-footer + .panel-collapse > .panel-body{border-bottom-color:#ddd;}.panel-primary{border-color:#2c3e50;}.panel-primary > .panel-heading{color:#fff;background-color:#2c3e50;border-color:#2c3e50;}.panel-primary > .panel-heading + .panel-collapse > .panel-body{border-top-color:#2c3e50;}.panel-primary > .panel-heading .badge{color:#2c3e50;background-color:#fff;}.panel-primary > .panel-footer + .panel-collapse > .panel-body{border-bottom-color:#2c3e50;}.panel-success{border-color:#d6e9c6;}.panel-success > .panel-heading{color:#18bc9c;background-color:#dff0d8;border-color:#d6e9c6;}.panel-success > .panel-heading + .panel-collapse > .panel-body{border-top-color:#d6e9c6;}.panel-success > .panel-heading .badge{color:#dff0d8;background-color:#18bc9c;}.panel-success > .panel-footer + .panel-collapse > .panel-body{border-bottom-color:#d6e9c6;}.panel-info{border-color:#bce8f1;}.panel-info > .panel-heading{color:#3498db;background-color:#d9edf7;border-color:#bce8f1;}.panel-info > .panel-heading + .panel-collapse > .panel-body{border-top-color:#bce8f1;}.panel-info > .panel-heading .badge{color:#d9edf7;background-color:#3498db;}.panel-info > .panel-footer + .panel-collapse > .panel-body{border-bottom-color:#bce8f1;}.panel-warning{border-color:#faebcc;}.panel-warning > .panel-heading{color:#f39c12;background-color:#fcf8e3;border-color:#faebcc;}.panel-warning > .panel-heading + .panel-collapse > .panel-body{border-top-color:#faebcc;}.panel-warning > .panel-heading .badge{color:#fcf8e3;background-color:#f39c12;}.panel-warning > .panel-footer + .panel-collapse > .panel-body{border-bottom-color:#faebcc;}.panel-danger{border-color:#ebccd1;}.panel-danger > .panel-heading{color:#e74c3c;background-color:#f2dede;border-color:#ebccd1;}.panel-danger > .panel-heading + .panel-collapse > .panel-body{border-top-color:#ebccd1;}.panel-danger > .panel-heading .badge{color:#f2dede;background-color:#e74c3c;}.panel-danger > .panel-footer + .panel-collapse > .panel-body{border-bottom-color:#ebccd1;}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden;}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0;}.embed-responsive-16by9{padding-bottom:56.25%;}.embed-responsive-4by3{padding-bottom:75%;}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15);}.well-lg{padding:24px;border-radius:5px;}.well-sm{padding:9px;border-radius:2px;}.close{float:right;font-size:18px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:0.2;filter:alpha(opacity=20);}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:0.5;filter:alpha(opacity=50);}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;}.modal-open{overflow:hidden;}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0;}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out;}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0);}.modal-open .modal{overflow-x:hidden;overflow-y:auto;}.modal-dialog{position:relative;width:auto;margin:10px;}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:5px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:0;}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000;}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0);}.modal-backdrop.in{opacity:0.5;filter:alpha(opacity=50);}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;}.modal-header .close{margin-top:-2px;}.modal-title{margin:0;line-height:1.42857143;}.modal-body{position:relative;padding:15px;}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5;}.modal-footer .btn + .btn{margin-left:5px;margin-bottom:0;}.modal-footer .btn-group .btn + .btn{margin-left:-1px;}.modal-footer .btn-block + .btn-block{margin-left:0;}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll;}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto;}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5);}.modal-sm{width:300px;}}@media (min-width:992px){.modal-lg{width:900px;}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.9;filter:alpha(opacity=90);}.tooltip.top{margin-top:-3px;padding:5px 0;}.tooltip.right{margin-left:3px;padding:0 5px;}.tooltip.bottom{margin-top:3px;padding:5px 0;}.tooltip.left{margin-left:-3px;padding:0 5px;}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:3px;}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid;}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000;}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000;}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000;}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000;}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000;}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000;}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000;}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000;}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:5px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);}.popover.top{margin-top:-10px;}.popover.right{margin-left:10px;}.popover.bottom{margin-top:10px;}.popover.left{margin-left:-10px;}.popover-title{margin:0;padding:8px 14px;font-size:12px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:4px 4px 0 0;}.popover-content{padding:9px 14px;}.popover > .arrow,.popover > .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;}.popover > .arrow{border-width:11px;}.popover > .arrow:after{border-width:10px;content:"";}.popover.top > .arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999999;border-top-color:rgba(0,0,0,0.25);bottom:-11px;}.popover.top > .arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff;}.popover.right > .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999999;border-right-color:rgba(0,0,0,0.25);}.popover.right > .arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff;}.popover.bottom > .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999999;border-bottom-color:rgba(0,0,0,0.25);top:-11px;}.popover.bottom > .arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff;}.popover.left > .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999999;border-left-color:rgba(0,0,0,0.25);}.popover.left > .arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px;}.carousel{position:relative;}.carousel-inner{position:relative;overflow:hidden;width:100%;}.carousel-inner > .item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;}.carousel-inner > .item > img,.carousel-inner > .item > a > img{line-height:1;}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner > .item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-moz-transition:-moz-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px;}.carousel-inner > .item.next,.carousel-inner > .item.active.right{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0;}.carousel-inner > .item.prev,.carousel-inner > .item.active.left{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0;}.carousel-inner > .item.next.left,.carousel-inner > .item.prev.right,.carousel-inner > .item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0;}}.carousel-inner > .active,.carousel-inner > .next,.carousel-inner > .prev{display:block;}.carousel-inner > .active{left:0;}.carousel-inner > .next,.carousel-inner > .prev{position:absolute;top:0;width:100%;}.carousel-inner > .next{left:100%;}.carousel-inner > .prev{left:-100%;}.carousel-inner > .next.left,.carousel-inner > .prev.right{left:0;}.carousel-inner > .active.left{left:-100%;}.carousel-inner > .active.right{left:100%;}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:0.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);background-color:rgba(0,0,0,0);}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,0.5) 0%,rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,0.5) 0%,rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.5) 0%,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1);}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,rgba(0,0,0,0.0001) 0%,rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,0.0001) 0%,rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.0001) 0%,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1);}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block;}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px;}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px;}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif;}.carousel-control .icon-prev:before{content:'\2039';}.carousel-control .icon-next:before{content:'\203a';}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center;}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff;}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);}.carousel-caption .btn{text-shadow:none;}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px;}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px;}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px;}.carousel-caption{left:20%;right:20%;padding-bottom:30px;}.carousel-indicators{bottom:20px;}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical > .btn-group:before,.btn-group-vertical > .btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-header:before,.modal-header:after,.modal-footer:before,.modal-footer:after{content:" ";display:table;}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical > .btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-header:after,.modal-footer:after{clear:both;}.center-block{display:block;margin-left:auto;margin-right:auto;}.pull-right{float:right !important;}.pull-left{float:left !important;}.hide{display:none !important;}.show{display:block !important;}.invisible{visibility:hidden;}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;}.hidden{display:none !important;}.affix{position:fixed;}@-ms-viewport{width:device-width;}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important;}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important;}@media (max-width:767px){.visible-xs{display:block !important;}table.visible-xs{display:table !important;}tr.visible-xs{display:table-row !important;}th.visible-xs,td.visible-xs{display:table-cell !important;}}@media (max-width:767px){.visible-xs-block{display:block !important;}}@media (max-width:767px){.visible-xs-inline{display:inline !important;}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important;}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important;}table.visible-sm{display:table !important;}tr.visible-sm{display:table-row !important;}th.visible-sm,td.visible-sm{display:table-cell !important;}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important;}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important;}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important;}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important;}table.visible-md{display:table !important;}tr.visible-md{display:table-row !important;}th.visible-md,td.visible-md{display:table-cell !important;}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important;}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important;}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important;}}@media (min-width:1200px){.visible-lg{display:block !important;}table.visible-lg{display:table !important;}tr.visible-lg{display:table-row !important;}th.visible-lg,td.visible-lg{display:table-cell !important;}}@media (min-width:1200px){.visible-lg-block{display:block !important;}}@media (min-width:1200px){.visible-lg-inline{display:inline !important;}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important;}}@media (max-width:767px){.hidden-xs{display:none !important;}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important;}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important;}}@media (min-width:1200px){.hidden-lg{display:none !important;}}.visible-print{display:none !important;}@media print{.visible-print{display:block !important;}table.visible-print{display:table !important;}tr.visible-print{display:table-row !important;}th.visible-print,td.visible-print{display:table-cell !important;}}.visible-print-block{display:none !important;}@media print{.visible-print-block{display:block !important;}}.visible-print-inline{display:none !important;}@media print{.visible-print-inline{display:inline !important;}}.visible-print-inline-block{display:none !important;}@media print{.visible-print-inline-block{display:inline-block !important;}}@media print{.hidden-print{display:none !important;}} \ No newline at end of file diff --git a/addons/weliam_smartcity/web/resource/address/fastadmin.css b/addons/weliam_smartcity/web/resource/address/fastadmin.css new file mode 100644 index 0000000..9f9cc8b --- /dev/null +++ b/addons/weliam_smartcity/web/resource/address/fastadmin.css @@ -0,0 +1,5832 @@ +/*! + * AdminLTE v2.3.7 + * Author: Almsaeed Studio + * Website: Almsaeed Studio + * License: Open source - MIT + * Please visit http://opensource.org/licenses/MIT for more information +!*/ +/* + * Core: General Layout Style + * ------------------------- + */ +html, +body { + min-height: 100%; +} +.layout-boxed html, +.layout-boxed body { + height: 100%; +} +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-weight: 400; + overflow-x: hidden; + overflow-y: auto; +} +/* Layout */ +.wrapper { + min-height: 100%; + position: relative; + overflow: hidden; +} +.wrapper:before, +.wrapper:after { + content: " "; + display: table; +} +.wrapper:after { + clear: both; +} +.wrapper:before, +.wrapper:after { + content: " "; + display: table; +} +.wrapper:after { + clear: both; +} +.layout-boxed .wrapper { + max-width: 1250px; + margin: 0 auto; + min-height: 100%; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.5); + position: relative; +} +.layout-boxed { + background: url('../img/boxed-bg.jpg') repeat fixed; +} +/* + * Content Wrapper - contains the main content + * ```.right-side has been deprecated as of v2.0.0 in favor of .content-wrapper ``` + */ +.content-wrapper, +.right-side, +.main-footer { + -webkit-transition: -webkit-transform 0.3s ease-in-out, margin 0.3s ease-in-out; + -moz-transition: -moz-transform 0.3s ease-in-out, margin 0.3s ease-in-out; + -o-transition: -o-transform 0.3s ease-in-out, margin 0.3s ease-in-out; + transition: transform 0.3s ease-in-out, margin 0.3s ease-in-out; + margin-left: 230px; + z-index: 820; +} +.layout-top-nav .content-wrapper, +.layout-top-nav .right-side, +.layout-top-nav .main-footer { + margin-left: 0; +} +@media (max-width: 767px) { + .content-wrapper, + .right-side, + .main-footer { + margin-left: 0; + } +} +@media (min-width: 768px) { + .sidebar-collapse .content-wrapper, + .sidebar-collapse .right-side, + .sidebar-collapse .main-footer { + margin-left: 0; + } +} +@media (max-width: 767px) { + .sidebar-open .content-wrapper, + .sidebar-open .right-side, + .sidebar-open .main-footer { + -webkit-transform: translate(230px, 0); + -ms-transform: translate(230px, 0); + -o-transform: translate(230px, 0); + transform: translate(230px, 0); + } +} +.content-wrapper, +.right-side { + min-height: 100%; + background-color: #ecf0f5; + z-index: 800; +} +.main-footer { + background: #fff; + padding: 15px; + color: #444; + border-top: 1px solid #d2d6de; +} +/* Fixed layout */ +.fixed .main-header, +.fixed .main-sidebar, +.fixed .left-side { + position: fixed; +} +.fixed .main-header { + top: 0; + right: 0; + left: 0; +} +.fixed .content-wrapper, +.fixed .right-side { + padding-top: 50px; +} +@media (max-width: 767px) { + .fixed .content-wrapper, + .fixed .right-side { + padding-top: 100px; + } +} +.fixed.layout-boxed .wrapper { + max-width: 100%; +} +body.hold-transition .content-wrapper, +body.hold-transition .right-side, +body.hold-transition .main-footer, +body.hold-transition .main-sidebar, +body.hold-transition .left-side, +body.hold-transition .main-header .navbar, +body.hold-transition .main-header .logo { + /* Fix for IE */ + -webkit-transition: none; + -o-transition: none; + transition: none; +} +/* Content */ +.content { + min-height: 250px; + padding: 15px; + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +/* H1 - H6 font */ +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: 'Source Sans Pro', sans-serif; +} +/* General Links */ +a { + color: #3c8dbc; +} +a:hover, +a:active, +a:focus { + outline: none; + text-decoration: none; + color: #72afd2; +} +/* Page Header */ +.page-header { + margin: 10px 0 20px 0; + font-size: 22px; +} +.page-header > small { + color: #666; + display: block; + margin-top: 5px; +} +/* + * Component: Main Header + * ---------------------- + */ +.main-header { + position: relative; + max-height: 100px; + z-index: 1030; +} +.main-header .navbar { + -webkit-transition: margin-left 0.3s ease-in-out; + -o-transition: margin-left 0.3s ease-in-out; + transition: margin-left 0.3s ease-in-out; + margin-bottom: 0; + margin-left: 230px; + border: none; + min-height: 50px; + border-radius: 0; +} +.layout-top-nav .main-header .navbar { + margin-left: 0; +} +.main-header #navbar-search-input.form-control { + background: rgba(255, 255, 255, 0.2); + border-color: transparent; +} +.main-header #navbar-search-input.form-control:focus, +.main-header #navbar-search-input.form-control:active { + border-color: rgba(0, 0, 0, 0.1); + background: rgba(255, 255, 255, 0.9); +} +.main-header #navbar-search-input.form-control::-moz-placeholder { + color: #ccc; + opacity: 1; +} +.main-header #navbar-search-input.form-control:-ms-input-placeholder { + color: #ccc; +} +.main-header #navbar-search-input.form-control::-webkit-input-placeholder { + color: #ccc; +} +.main-header .navbar-custom-menu, +.main-header .navbar-right { + float: right; +} +@media (max-width: 991px) { + .main-header .navbar-custom-menu a, + .main-header .navbar-right a { + color: inherit; + background: transparent; + } +} +@media (max-width: 767px) { + .main-header .navbar-right { + float: none; + } + .navbar-collapse .main-header .navbar-right { + margin: 7.5px -15px; + } + .main-header .navbar-right > li { + color: inherit; + border: 0; + } +} +.main-header .sidebar-toggle { + float: left; + background-color: transparent; + background-image: none; + padding: 16.5px 15px; + font-family: fontAwesome; +} +.main-header .sidebar-toggle:before { + content: "\f0c9"; +} +.main-header .sidebar-toggle:hover { + color: #fff; +} +.main-header .sidebar-toggle:focus, +.main-header .sidebar-toggle:active { + background: transparent; +} +.main-header .sidebar-toggle .icon-bar { + display: none; +} +.main-header .navbar .nav > li.user > a > .fa, +.main-header .navbar .nav > li.user > a > .glyphicon, +.main-header .navbar .nav > li.user > a > .ion { + margin-right: 5px; +} +.main-header .navbar .nav > li > a > .label { + position: absolute; + top: 9px; + right: 7px; + text-align: center; + font-size: 9px; + padding: 2px 3px; + line-height: .9; +} +.main-header .logo { + -webkit-transition: width 0.3s ease-in-out; + -o-transition: width 0.3s ease-in-out; + transition: width 0.3s ease-in-out; + display: block; + float: left; + height: 50px; + font-size: 20px; + line-height: 50px; + text-align: center; + width: 230px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 0 15px; + font-weight: 300; + overflow: hidden; +} +.main-header .logo .logo-lg { + display: block; +} +.main-header .logo .logo-mini { + display: none; +} +.main-header .navbar-brand { + color: #fff; +} +.content-header { + position: relative; + padding: 15px 15px 0 15px; +} +.content-header > h1 { + margin: 0; + font-size: 24px; +} +.content-header > h1 > small { + font-size: 15px; + display: inline-block; + padding-left: 4px; + font-weight: 300; +} +.content-header > .breadcrumb { + float: right; + background: transparent; + margin-top: 0; + margin-bottom: 0; + font-size: 12px; + padding: 7px 5px; + position: absolute; + top: 15px; + right: 10px; + border-radius: 2px; +} +.content-header > .breadcrumb > li > a { + color: #444; + text-decoration: none; + display: inline-block; +} +.content-header > .breadcrumb > li > a > .fa, +.content-header > .breadcrumb > li > a > .glyphicon, +.content-header > .breadcrumb > li > a > .ion { + margin-right: 5px; +} +.content-header > .breadcrumb > li + li:before { + content: '>\00a0'; +} +@media (max-width: 991px) { + .content-header > .breadcrumb { + position: relative; + margin-top: 5px; + top: 0; + right: 0; + float: none; + background: #d2d6de; + padding-left: 10px; + } + .content-header > .breadcrumb li:before { + color: #97a0b3; + } +} +.navbar-toggle { + color: #fff; + border: 0; + margin: 0; + padding: 16.5px 15px; +} +@media (max-width: 991px) { + .navbar-custom-menu .navbar-nav > li { + float: left; + } + .navbar-custom-menu .navbar-nav { + margin: 0; + float: left; + } + .navbar-custom-menu .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + line-height: 20px; + } +} +@media (max-width: 767px) { + .main-header { + position: relative; + } + .main-header .logo, + .main-header .navbar { + width: 100%; + float: none; + } + .main-header .navbar { + margin: 0; + } + .main-header .navbar-custom-menu { + float: right; + } +} +@media (max-width: 991px) { + .navbar-collapse.pull-left { + float: none !important; + } + .navbar-collapse.pull-left + .navbar-custom-menu { + display: block; + position: absolute; + top: 0; + right: 40px; + } +} +/* + * Component: Sidebar + * ------------------ + */ +.main-sidebar, +.left-side { + position: absolute; + top: 0; + left: 0; + padding-top: 50px; + min-height: 100%; + width: 230px; + z-index: 810; + -webkit-transition: -webkit-transform 0.3s ease-in-out, width 0.3s ease-in-out; + -moz-transition: -moz-transform 0.3s ease-in-out, width 0.3s ease-in-out; + -o-transition: -o-transform 0.3s ease-in-out, width 0.3s ease-in-out; + transition: transform 0.3s ease-in-out, width 0.3s ease-in-out; +} +@media (max-width: 767px) { + .main-sidebar, + .left-side { + padding-top: 100px; + } +} +@media (max-width: 767px) { + .main-sidebar, + .left-side { + -webkit-transform: translate(-230px, 0); + -ms-transform: translate(-230px, 0); + -o-transform: translate(-230px, 0); + transform: translate(-230px, 0); + } +} +@media (min-width: 768px) { + .sidebar-collapse .main-sidebar, + .sidebar-collapse .left-side { + -webkit-transform: translate(-230px, 0); + -ms-transform: translate(-230px, 0); + -o-transform: translate(-230px, 0); + transform: translate(-230px, 0); + } +} +@media (max-width: 767px) { + .sidebar-open .main-sidebar, + .sidebar-open .left-side { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); + } +} +.sidebar { + padding-bottom: 10px; +} +.sidebar-form input:focus { + border-color: transparent; +} +.user-panel { + position: relative; + width: 100%; + padding: 10px; + overflow: hidden; +} +.user-panel:before, +.user-panel:after { + content: " "; + display: table; +} +.user-panel:after { + clear: both; +} +.user-panel:before, +.user-panel:after { + content: " "; + display: table; +} +.user-panel:after { + clear: both; +} +.user-panel > .image > img { + width: 100%; + max-width: 45px; + height: auto; +} +.user-panel > .info { + padding: 5px 5px 5px 15px; + line-height: 1; + position: absolute; + left: 55px; +} +.user-panel > .info > p { + font-weight: 600; + margin-bottom: 9px; +} +.user-panel > .info > a { + text-decoration: none; + padding-right: 5px; + margin-top: 3px; + font-size: 11px; +} +.user-panel > .info > a > .fa, +.user-panel > .info > a > .ion, +.user-panel > .info > a > .glyphicon { + margin-right: 3px; +} +.sidebar-menu { + list-style: none; + margin: 0; + padding: 0; +} +.sidebar-menu > li { + position: relative; + margin: 0; + padding: 0; +} +.sidebar-menu > li > a { + padding: 12px 5px 12px 15px; + display: block; +} +.sidebar-menu > li > a > .fa, +.sidebar-menu > li > a > .glyphicon, +.sidebar-menu > li > a > .ion { + width: 20px; +} +.sidebar-menu > li .label, +.sidebar-menu > li .badge { + margin-right: 5px; +} +.sidebar-menu > li .badge { + margin-top: 3px; +} +.sidebar-menu li.header { + padding: 10px 25px 10px 15px; + font-size: 12px; +} +.sidebar-menu li > a > .fa-angle-left, +.sidebar-menu li > a > .pull-right-container > .fa-angle-left { + width: auto; + height: auto; + padding: 0; + margin-right: 10px; +} +.sidebar-menu li.active > a > .fa-angle-left, +.sidebar-menu li.active > a > .pull-right-container > .fa-angle-left { + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); +} +.sidebar-menu li.active > .treeview-menu { + display: block; +} +.sidebar-menu .treeview-menu { + display: none; + list-style: none; + padding: 0; + margin: 0; + padding-left: 5px; +} +.sidebar-menu .treeview-menu .treeview-menu { + padding-left: 20px; +} +.sidebar-menu .treeview-menu > li { + margin: 0; +} +.sidebar-menu .treeview-menu > li > a { + padding: 12px 5px 12px 15px; + display: block; + font-size: 12px; +} +.sidebar-menu .treeview-menu > li > a > .fa, +.sidebar-menu .treeview-menu > li > a > .glyphicon, +.sidebar-menu .treeview-menu > li > a > .ion { + width: 20px; +} +.sidebar-menu .treeview-menu > li > a > .pull-right-container > .fa-angle-left, +.sidebar-menu .treeview-menu > li > a > .pull-right-container > .fa-angle-down, +.sidebar-menu .treeview-menu > li > a > .fa-angle-left, +.sidebar-menu .treeview-menu > li > a > .fa-angle-down { + width: auto; +} +/* + * Component: Sidebar Mini + */ +@media (min-width: 768px) { + .sidebar-mini.sidebar-collapse .content-wrapper, + .sidebar-mini.sidebar-collapse .right-side, + .sidebar-mini.sidebar-collapse .main-footer { + margin-left: 50px !important; + z-index: 840; + } + .sidebar-mini.sidebar-collapse .main-sidebar { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); + width: 50px !important; + z-index: 850; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li { + position: relative; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li > a { + margin-right: 0; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span { + border-top-right-radius: 4px; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li:not(.treeview) > a > span { + border-bottom-right-radius: 4px; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { + padding-top: 5px; + padding-bottom: 5px; + border-bottom-right-radius: 4px; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span:not(.pull-right), + .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu { + display: block !important; + position: absolute; + width: 180px; + left: 50px; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span { + top: 0; + margin-left: -3px; + padding: 12px 5px 12px 20px; + background-color: inherit; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container { + float: right; + width: auto!important; + left: 200px!important; + top: 10px!important; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container > .label:not(:first-of-type) { + display: none; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu { + top: 44px; + margin-left: 0; + } + .sidebar-mini.sidebar-collapse .main-sidebar .user-panel > .info, + .sidebar-mini.sidebar-collapse .sidebar-form, + .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span, + .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu, + .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > .pull-right, + .sidebar-mini.sidebar-collapse .sidebar-menu li.header { + display: none !important; + -webkit-transform: translateZ(0); + } + .sidebar-mini.sidebar-collapse .main-header .logo { + width: 50px; + } + .sidebar-mini.sidebar-collapse .main-header .logo > .logo-mini { + display: block; + margin-left: -15px; + margin-right: -15px; + font-size: 18px; + } + .sidebar-mini.sidebar-collapse .main-header .logo > .logo-lg { + display: none; + } + .sidebar-mini.sidebar-collapse .main-header .navbar { + margin-left: 50px; + } +} +.sidebar-menu, +.main-sidebar .user-panel, +.sidebar-menu > li.header { + white-space: nowrap; + overflow: hidden; +} +.sidebar-menu:hover { + overflow: visible; +} +.sidebar-form, +.sidebar-menu > li.header { + overflow: hidden; + text-overflow: clip; +} +.sidebar-menu li > a { + position: relative; +} +.sidebar-menu li > a > .pull-right-container { + position: absolute; + right: 10px; + top: 50%; + margin-top: -7px; +} +/* + * Component: Control sidebar. By default, this is the right sidebar. + */ +.control-sidebar-bg { + position: fixed; + z-index: 1000; + bottom: 0; +} +.control-sidebar-bg, +.control-sidebar { + top: 0; + right: -230px; + width: 230px; + -webkit-transition: right 0.3s ease-in-out; + -o-transition: right 0.3s ease-in-out; + transition: right 0.3s ease-in-out; +} +.control-sidebar { + position: absolute; + padding-top: 50px; + z-index: 1010; +} +@media (max-width: 768px) { + .control-sidebar { + padding-top: 100px; + } +} +.control-sidebar > .tab-content { + padding: 10px 15px; +} +.control-sidebar.control-sidebar-open, +.control-sidebar.control-sidebar-open + .control-sidebar-bg { + right: 0; +} +.control-sidebar-open .control-sidebar-bg, +.control-sidebar-open .control-sidebar { + right: 0; +} +@media (min-width: 768px) { + .control-sidebar-open .content-wrapper, + .control-sidebar-open .right-side, + .control-sidebar-open .main-footer { + margin-right: 230px; + } +} +.nav-tabs.control-sidebar-tabs > li:first-of-type > a, +.nav-tabs.control-sidebar-tabs > li:first-of-type > a:hover, +.nav-tabs.control-sidebar-tabs > li:first-of-type > a:focus { + border-left-width: 0; +} +.nav-tabs.control-sidebar-tabs > li > a { + border-radius: 0; +} +.nav-tabs.control-sidebar-tabs > li > a, +.nav-tabs.control-sidebar-tabs > li > a:hover { + border-top: none; + border-right: none; + border-left: 1px solid transparent; + border-bottom: 1px solid transparent; +} +.nav-tabs.control-sidebar-tabs > li > a .icon { + font-size: 16px; +} +.nav-tabs.control-sidebar-tabs > li.active > a, +.nav-tabs.control-sidebar-tabs > li.active > a:hover, +.nav-tabs.control-sidebar-tabs > li.active > a:focus, +.nav-tabs.control-sidebar-tabs > li.active > a:active { + border-top: none; + border-right: none; + border-bottom: none; +} +@media (max-width: 768px) { + .nav-tabs.control-sidebar-tabs { + display: table; + } + .nav-tabs.control-sidebar-tabs > li { + display: table-cell; + } +} +.control-sidebar-heading { + font-weight: 400; + font-size: 16px; + padding: 10px 0; + margin-bottom: 10px; +} +.control-sidebar-subheading { + display: block; + font-weight: 400; + font-size: 14px; +} +.control-sidebar-menu { + list-style: none; + padding: 0; + margin: 0 -15px; +} +.control-sidebar-menu > li > a { + display: block; + padding: 10px 15px; +} +.control-sidebar-menu > li > a:before, +.control-sidebar-menu > li > a:after { + content: " "; + display: table; +} +.control-sidebar-menu > li > a:after { + clear: both; +} +.control-sidebar-menu > li > a:before, +.control-sidebar-menu > li > a:after { + content: " "; + display: table; +} +.control-sidebar-menu > li > a:after { + clear: both; +} +.control-sidebar-menu > li > a > .control-sidebar-subheading { + margin-top: 0; +} +.control-sidebar-menu .menu-icon { + float: left; + width: 35px; + height: 35px; + border-radius: 50%; + text-align: center; + line-height: 35px; +} +.control-sidebar-menu .menu-info { + margin-left: 45px; + margin-top: 3px; +} +.control-sidebar-menu .menu-info > .control-sidebar-subheading { + margin: 0; +} +.control-sidebar-menu .menu-info > p { + margin: 0; + font-size: 11px; +} +.control-sidebar-menu .progress { + margin: 0; +} +.control-sidebar-dark { + color: #b8c7ce; +} +.control-sidebar-dark, +.control-sidebar-dark + .control-sidebar-bg { + background: #222d32; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs { + border-bottom: #1c2529; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a { + background: #181f23; + color: #b8c7ce; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus { + border-left-color: #141a1d; + border-bottom-color: #141a1d; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:active { + background: #1c2529; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover { + color: #fff; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:hover, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:focus, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:active { + background: #222d32; + color: #fff; +} +.control-sidebar-dark .control-sidebar-heading, +.control-sidebar-dark .control-sidebar-subheading { + color: #fff; +} +.control-sidebar-dark .control-sidebar-menu > li > a:hover { + background: #1e282c; +} +.control-sidebar-dark .control-sidebar-menu > li > a .menu-info > p { + color: #b8c7ce; +} +.control-sidebar-light { + color: #5e5e5e; +} +.control-sidebar-light, +.control-sidebar-light + .control-sidebar-bg { + background: #f9fafc; + border-left: 1px solid #d2d6de; +} +.control-sidebar-light .nav-tabs.control-sidebar-tabs { + border-bottom: #d2d6de; +} +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a { + background: #e8ecf4; + color: #444; +} +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus { + border-left-color: #d2d6de; + border-bottom-color: #d2d6de; +} +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:active { + background: #eff1f7; +} +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:hover, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:focus, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:active { + background: #f9fafc; + color: #111; +} +.control-sidebar-light .control-sidebar-heading, +.control-sidebar-light .control-sidebar-subheading { + color: #111; +} +.control-sidebar-light .control-sidebar-menu { + margin-left: -14px; +} +.control-sidebar-light .control-sidebar-menu > li > a:hover { + background: #f4f4f5; +} +.control-sidebar-light .control-sidebar-menu > li > a .menu-info > p { + color: #5e5e5e; +} +/* + * Component: Dropdown menus + * ------------------------- + */ +/*Dropdowns in general*/ +.dropdown-menu { + box-shadow: none; + border-color: #eee; +} +.dropdown-menu > li > a { + /*color: #777;*/ +} +.dropdown-menu > li > a > .glyphicon, +.dropdown-menu > li > a > .fa, +.dropdown-menu > li > a > .ion { + margin-right: 10px; +} +.dropdown-menu > li > a:hover { + background-color: #e1e3e9; + color: #333; +} +.dropdown-menu > .divider { + background-color: #eee; +} +.navbar-nav > .notifications-menu > .dropdown-menu, +.navbar-nav > .messages-menu > .dropdown-menu, +.navbar-nav > .tasks-menu > .dropdown-menu { + width: 280px; + padding: 0 0 0 0; + margin: 0; + top: 100%; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li, +.navbar-nav > .messages-menu > .dropdown-menu > li, +.navbar-nav > .tasks-menu > .dropdown-menu > li { + position: relative; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li.header, +.navbar-nav > .messages-menu > .dropdown-menu > li.header, +.navbar-nav > .tasks-menu > .dropdown-menu > li.header { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + background-color: #ffffff; + padding: 7px 10px; + border-bottom: 1px solid #f4f4f4; + color: #444444; + font-size: 14px; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a, +.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a, +.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + font-size: 12px; + background-color: #fff; + padding: 7px 10px; + border-bottom: 1px solid #eeeeee; + color: #444 !important; + text-align: center; +} +@media (max-width: 991px) { + .navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a, + .navbar-nav > .messages-menu > .dropdown-menu > li.footer > a, + .navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a { + background: #fff !important; + color: #444 !important; + } +} +.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a:hover, +.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a:hover, +.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a:hover { + text-decoration: none; + font-weight: normal; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu, +.navbar-nav > .messages-menu > .dropdown-menu > li .menu, +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu { + max-height: 200px; + margin: 0; + padding: 0; + list-style: none; + overflow-x: hidden; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a, +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a, +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a { + display: block; + white-space: nowrap; + /* Prevent text from breaking */ + border-bottom: 1px solid #f4f4f4; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a:hover, +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:hover, +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a:hover { + background: #f4f4f4; + text-decoration: none; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a { + color: #444444; + overflow: hidden; + text-overflow: ellipsis; + padding: 10px; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .glyphicon, +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .fa, +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .ion { + width: 20px; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a { + margin: 0; + padding: 10px 10px; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > div > img { + margin: auto 10px auto auto; + width: 40px; + height: 40px; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 { + padding: 0; + margin: 0 0 0 45px; + color: #444444; + font-size: 15px; + position: relative; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 > small { + color: #999999; + font-size: 10px; + position: absolute; + top: 0; + right: 0; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > p { + margin: 0 0 0 45px; + font-size: 12px; + color: #888888; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:before, +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after { + content: " "; + display: table; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after { + clear: both; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:before, +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after { + content: " "; + display: table; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after { + clear: both; +} +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a { + padding: 10px; +} +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > h3 { + font-size: 14px; + padding: 0; + margin: 0 0 10px 0; + color: #666666; +} +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > .progress { + padding: 0; + margin: 0; +} +.navbar-nav > .user-menu > .dropdown-menu { + border-top-right-radius: 0; + border-top-left-radius: 0; + padding: 1px 0 0 0; + border-top-width: 0; + width: 280px; +} +.navbar-nav > .user-menu > .dropdown-menu, +.navbar-nav > .user-menu > .dropdown-menu > .user-body { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.navbar-nav > .user-menu > .dropdown-menu > li.user-header { + height: 175px; + padding: 10px; + text-align: center; +} +.navbar-nav > .user-menu > .dropdown-menu > li.user-header > img { + z-index: 5; + height: 90px; + width: 90px; + border: 3px solid; + border-color: transparent; + border-color: rgba(255, 255, 255, 0.2); +} +.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p { + z-index: 5; + color: #fff; + color: rgba(255, 255, 255, 0.8); + font-size: 17px; + margin-top: 10px; +} +.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p > small { + display: block; + font-size: 12px; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-body { + padding: 15px; + border-bottom: 1px solid #f4f4f4; + border-top: 1px solid #dddddd; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-body:before, +.navbar-nav > .user-menu > .dropdown-menu > .user-body:after { + content: " "; + display: table; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-body:after { + clear: both; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-body:before, +.navbar-nav > .user-menu > .dropdown-menu > .user-body:after { + content: " "; + display: table; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-body:after { + clear: both; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-body a { + color: #444 !important; +} +@media (max-width: 991px) { + .navbar-nav > .user-menu > .dropdown-menu > .user-body a { + background: #fff !important; + color: #444 !important; + } +} +.navbar-nav > .user-menu > .dropdown-menu > .user-footer { + background-color: #f9f9f9; + padding: 10px; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-footer:before, +.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after { + content: " "; + display: table; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after { + clear: both; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-footer:before, +.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after { + content: " "; + display: table; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after { + clear: both; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default { + color: #666666; +} +@media (max-width: 991px) { + .navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default:hover { + background-color: #f9f9f9; + } +} +.navbar-nav > .user-menu .user-image { + float: left; + width: 25px; + height: 25px; + border-radius: 50%; + margin-right: 10px; + margin-top: -2px; +} +@media (max-width: 767px) { + .navbar-nav > .user-menu .user-image { + float: none; + margin-right: 0; + margin-top: -8px; + line-height: 10px; + } +} +/* Add fade animation to dropdown menus by appending + the class .animated-dropdown-menu to the .dropdown-menu ul (or ol)*/ +.open:not(.dropup) > .animated-dropdown-menu { + backface-visibility: visible !important; + -webkit-animation: flipInX 0.7s both; + -o-animation: flipInX 0.7s both; + animation: flipInX 0.7s both; +} +@keyframes flipInX { + 0% { + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transition-timing-function: ease-in; + opacity: 0; + } + 40% { + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transition-timing-function: ease-in; + } + 60% { + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + 80% { + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + 100% { + transform: perspective(400px); + } +} +@-webkit-keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-transition-timing-function: ease-in; + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-transition-timing-function: ease-in; + } + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + 100% { + -webkit-transform: perspective(400px); + } +} +/* Fix dropdown menu in navbars */ +.navbar-custom-menu > .navbar-nav > li { + position: relative; +} +.navbar-custom-menu > .navbar-nav > li > .dropdown-menu { + position: absolute; + right: 0; + left: auto; +} +@media (max-width: 991px) { + .navbar-custom-menu > .navbar-nav { + float: right; + } + .navbar-custom-menu > .navbar-nav > li { + position: static; + } + .navbar-custom-menu > .navbar-nav > li > .dropdown-menu { + position: absolute; + right: 5%; + left: auto; + border: 1px solid #ddd; + background: #fff; + } +} +.dropdown-submenu { + position: relative; +} +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + border-radius: 3px 0 3px 3px; +} +.dropdown-submenu:hover > .dropdown-menu { + display: block; +} +.dropdown-submenu:hover > a:after { + border-left-color: #fff; +} +.dropdown-submenu > a:after { + display: block; + content: " "; + float: right; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + border-width: 5px 0 5px 5px; + border-left-color: #ccc; + margin-top: 5px; + margin-right: -10px; +} +.dropdown-submenu.pull-left { + float: none; +} +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; + border-radius: 3px 0 3px 3px; +} +/* + * Component: Form + * --------------- + */ +.form-control { + border-radius: 0; + box-shadow: none; + border-color: #d2d6de; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +.form-control:focus { + border-color: #3c8dbc; + box-shadow: none; +} +.form-control::-moz-placeholder, +.form-control:-ms-input-placeholder, +.form-control::-webkit-input-placeholder { + color: #bbb; + opacity: 1; +} +.form-control .btn { + border-radius: 0; +} +select.form-control { + -webkit-appearance: none; + -webkit-border-radius: 0px; + background-position: right 50%; + background-repeat: no-repeat; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAMCAYAAABSgIzaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDZFNDEwNjlGNzFEMTFFMkJEQ0VDRTM1N0RCMzMyMkIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDZFNDEwNkFGNzFEMTFFMkJEQ0VDRTM1N0RCMzMyMkIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NkU0MTA2N0Y3MUQxMUUyQkRDRUNFMzU3REIzMzIyQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NkU0MTA2OEY3MUQxMUUyQkRDRUNFMzU3REIzMzIyQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuGsgwQAAAA5SURBVHjaYvz//z8DOYCJgUxAf42MQIzTk0D/M+KzkRGPoQSdykiKJrBGpOhgJFYTWNEIiEeAAAMAzNENEOH+do8AAAAASUVORK5CYII=); +} +.form-group.has-success label { + color: #18bc9c; +} +.form-group.has-success .form-control, +.form-group.has-success .input-group-addon { + border-color: #18bc9c; + box-shadow: none; +} +.form-group.has-success .help-block { + color: #18bc9c; +} +.form-group.has-warning label { + color: #f39c12; +} +.form-group.has-warning .form-control, +.form-group.has-warning .input-group-addon { + border-color: #f39c12; + box-shadow: none; +} +.form-group.has-warning .help-block { + color: #f39c12; +} +.form-group.has-error label { + color: #e74c3c; +} +.form-group.has-error .form-control, +.form-group.has-error .input-group-addon { + border-color: #e74c3c; + box-shadow: none; +} +.form-group.has-error .help-block { + color: #e74c3c; +} +/* Input group */ +.input-group .input-group-addon { + border-radius: 0; + border-color: #d2d6de; + background-color: #fff; +} +/* button groups */ +.btn-group-vertical .btn.btn-flat:first-of-type, +.btn-group-vertical .btn.btn-flat:last-of-type { + border-radius: 0; +} +.icheck > label { + padding-left: 0; +} +/* support Font Awesome icons in form-control */ +.form-control-feedback.fa { + line-height: 31px; +} +.input-lg + .form-control-feedback.fa, +.input-group-lg + .form-control-feedback.fa, +.form-group-lg .form-control + .form-control-feedback.fa { + line-height: 42px; +} +.input-sm + .form-control-feedback.fa, +.input-group-sm + .form-control-feedback.fa, +.form-group-sm .form-control + .form-control-feedback.fa { + line-height: 28px; +} +/* + * Component: Progress Bar + * ----------------------- + */ +.progress, +.progress > .progress-bar { + -webkit-box-shadow: none; + box-shadow: none; +} +.progress, +.progress > .progress-bar, +.progress .progress-bar, +.progress > .progress-bar .progress-bar { + border-radius: 1px; +} +/* size variation */ +.progress.sm, +.progress-sm { + height: 10px; +} +.progress.sm, +.progress-sm, +.progress.sm .progress-bar, +.progress-sm .progress-bar { + border-radius: 1px; +} +.progress.xs, +.progress-xs { + height: 7px; +} +.progress.xs, +.progress-xs, +.progress.xs .progress-bar, +.progress-xs .progress-bar { + border-radius: 1px; +} +.progress.xxs, +.progress-xxs { + height: 3px; +} +.progress.xxs, +.progress-xxs, +.progress.xxs .progress-bar, +.progress-xxs .progress-bar { + border-radius: 1px; +} +/* Vertical bars */ +.progress.vertical { + position: relative; + width: 30px; + height: 200px; + display: inline-block; + margin-right: 10px; +} +.progress.vertical > .progress-bar { + width: 100%; + position: absolute; + bottom: 0; +} +.progress.vertical.sm, +.progress.vertical.progress-sm { + width: 20px; +} +.progress.vertical.xs, +.progress.vertical.progress-xs { + width: 10px; +} +.progress.vertical.xxs, +.progress.vertical.progress-xxs { + width: 3px; +} +.progress-group .progress-text { + font-weight: 600; +} +.progress-group .progress-number { + float: right; +} +/* Remove margins from progress bars when put in a table */ +.table tr > td .progress { + margin: 0; +} +.progress-bar-light-blue, +.progress-bar-primary { + background-color: #3c8dbc; +} +.progress-striped .progress-bar-light-blue, +.progress-striped .progress-bar-primary { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-green, +.progress-bar-success { + background-color: #18bc9c; +} +.progress-striped .progress-bar-green, +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-aqua, +.progress-bar-info { + background-color: #3498db; +} +.progress-striped .progress-bar-aqua, +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-yellow, +.progress-bar-warning { + background-color: #f39c12; +} +.progress-striped .progress-bar-yellow, +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-red, +.progress-bar-danger { + background-color: #e74c3c; +} +.progress-striped .progress-bar-red, +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +/* + * Component: Small Box + * -------------------- + */ +.small-box { + border-radius: 2px; + position: relative; + display: block; + margin-bottom: 20px; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); +} +.small-box > .inner { + padding: 10px; +} +.small-box > .small-box-footer { + position: relative; + text-align: center; + padding: 3px 0; + color: #fff; + color: rgba(255, 255, 255, 0.8); + display: block; + z-index: 10; + background: rgba(0, 0, 0, 0.1); + text-decoration: none; +} +.small-box > .small-box-footer:hover { + color: #fff; + background: rgba(0, 0, 0, 0.15); +} +.small-box h3 { + font-size: 38px; + font-weight: bold; + margin: 0 0 10px 0; + white-space: nowrap; + padding: 0; +} +.small-box p { + font-size: 15px; +} +.small-box p > small { + display: block; + color: #f9f9f9; + font-size: 13px; + margin-top: 5px; +} +.small-box h3, +.small-box p { + z-index: 5; +} +.small-box .icon { + -webkit-transition: all 0.3s linear; + -o-transition: all 0.3s linear; + transition: all 0.3s linear; + position: absolute; + top: -10px; + right: 10px; + z-index: 0; + font-size: 90px; + color: rgba(0, 0, 0, 0.15); +} +.small-box:hover { + text-decoration: none; + color: #f9f9f9; +} +.small-box:hover .icon { + font-size: 95px; +} +@media (max-width: 767px) { + .small-box { + text-align: center; + } + .small-box .icon { + display: none; + } + .small-box p { + font-size: 12px; + } +} +/* + * Component: Box + * -------------- + */ +.box { + position: relative; + border-radius: 3px; + background: #ffffff; + border-top: 3px solid #d2d6de; + margin-bottom: 20px; + width: 100%; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); +} +.box.box-primary { + border-top-color: #3c8dbc; +} +.box.box-info { + border-top-color: #3498db; +} +.box.box-danger { + border-top-color: #e74c3c; +} +.box.box-warning { + border-top-color: #f39c12; +} +.box.box-success { + border-top-color: #18bc9c; +} +.box.box-default { + border-top-color: #d2d6de; +} +.box.collapsed-box .box-body, +.box.collapsed-box .box-footer { + display: none; +} +.box .nav-stacked > li { + border-bottom: 1px solid #f4f4f4; + margin: 0; +} +.box .nav-stacked > li:last-of-type { + border-bottom: none; +} +.box.height-control .box-body { + max-height: 300px; + overflow: auto; +} +.box .border-right { + border-right: 1px solid #f4f4f4; +} +.box .border-left { + border-left: 1px solid #f4f4f4; +} +.box.box-solid { + border-top: 0; +} +.box.box-solid > .box-header .btn.btn-default { + background: transparent; +} +.box.box-solid > .box-header .btn:hover, +.box.box-solid > .box-header a:hover { + background: rgba(0, 0, 0, 0.1); +} +.box.box-solid.box-default { + border: 1px solid #d2d6de; +} +.box.box-solid.box-default > .box-header { + color: #444; + background: #d2d6de; + background-color: #d2d6de; +} +.box.box-solid.box-default > .box-header a, +.box.box-solid.box-default > .box-header .btn { + color: #444; +} +.box.box-solid.box-primary { + border: 1px solid #3c8dbc; +} +.box.box-solid.box-primary > .box-header { + color: #fff; + background: #3c8dbc; + background-color: #3c8dbc; +} +.box.box-solid.box-primary > .box-header a, +.box.box-solid.box-primary > .box-header .btn { + color: #fff; +} +.box.box-solid.box-info { + border: 1px solid #3498db; +} +.box.box-solid.box-info > .box-header { + color: #fff; + background: #3498db; + background-color: #3498db; +} +.box.box-solid.box-info > .box-header a, +.box.box-solid.box-info > .box-header .btn { + color: #fff; +} +.box.box-solid.box-danger { + border: 1px solid #e74c3c; +} +.box.box-solid.box-danger > .box-header { + color: #fff; + background: #e74c3c; + background-color: #e74c3c; +} +.box.box-solid.box-danger > .box-header a, +.box.box-solid.box-danger > .box-header .btn { + color: #fff; +} +.box.box-solid.box-warning { + border: 1px solid #f39c12; +} +.box.box-solid.box-warning > .box-header { + color: #fff; + background: #f39c12; + background-color: #f39c12; +} +.box.box-solid.box-warning > .box-header a, +.box.box-solid.box-warning > .box-header .btn { + color: #fff; +} +.box.box-solid.box-success { + border: 1px solid #18bc9c; +} +.box.box-solid.box-success > .box-header { + color: #fff; + background: #18bc9c; + background-color: #18bc9c; +} +.box.box-solid.box-success > .box-header a, +.box.box-solid.box-success > .box-header .btn { + color: #fff; +} +.box.box-solid > .box-header > .box-tools .btn { + border: 0; + box-shadow: none; +} +.box.box-solid[class*='bg'] > .box-header { + color: #fff; +} +.box .box-group > .box { + margin-bottom: 5px; +} +.box .knob-label { + text-align: center; + color: #333; + font-weight: 100; + font-size: 12px; + margin-bottom: 0.3em; +} +.box > .overlay, +.overlay-wrapper > .overlay, +.box > .loading-img, +.overlay-wrapper > .loading-img { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.box .overlay, +.overlay-wrapper .overlay { + z-index: 50; + background: rgba(255, 255, 255, 0.7); + border-radius: 3px; +} +.box .overlay > .fa, +.overlay-wrapper .overlay > .fa { + position: absolute; + top: 50%; + left: 50%; + margin-left: -15px; + margin-top: -15px; + color: #000; + font-size: 30px; +} +.box .overlay.dark, +.overlay-wrapper .overlay.dark { + background: rgba(0, 0, 0, 0.5); +} +.box-header:before, +.box-body:before, +.box-footer:before, +.box-header:after, +.box-body:after, +.box-footer:after { + content: " "; + display: table; +} +.box-header:after, +.box-body:after, +.box-footer:after { + clear: both; +} +.box-header:before, +.box-body:before, +.box-footer:before, +.box-header:after, +.box-body:after, +.box-footer:after { + content: " "; + display: table; +} +.box-header:after, +.box-body:after, +.box-footer:after { + clear: both; +} +.box-header { + color: #444; + display: block; + padding: 10px; + position: relative; +} +.box-header.with-border { + border-bottom: 1px solid #f4f4f4; +} +.collapsed-box .box-header.with-border { + border-bottom: none; +} +.box-header > .fa, +.box-header > .glyphicon, +.box-header > .ion, +.box-header .box-title { + display: inline-block; + font-size: 18px; + margin: 0; + line-height: 1; +} +.box-header > .fa, +.box-header > .glyphicon, +.box-header > .ion { + margin-right: 5px; +} +.box-header > .box-tools { + position: absolute; + right: 10px; + top: 5px; +} +.box-header > .box-tools [data-toggle="tooltip"] { + position: relative; +} +.box-header > .box-tools.pull-right .dropdown-menu { + right: 0; + left: auto; +} +.btn-box-tool { + padding: 5px; + font-size: 12px; + background: transparent; + color: #97a0b3; +} +.open .btn-box-tool, +.btn-box-tool:hover { + color: #606c84; +} +.btn-box-tool.btn:active { + box-shadow: none; +} +.box-body { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + padding: 10px; +} +.no-header .box-body { + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.box-body > .table { + margin-bottom: 0; +} +.box-body .fc { + margin-top: 5px; +} +.box-body .full-width-chart { + margin: -19px; +} +.box-body.no-padding .full-width-chart { + margin: -9px; +} +.box-body .box-pane { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 3px; +} +.box-body .box-pane-right { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 0; +} +.box-footer { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + border-top: 1px solid #f4f4f4; + padding: 10px; + background-color: #fff; +} +.chart-legend { + margin: 10px 0; +} +@media (max-width: 991px) { + .chart-legend > li { + float: left; + margin-right: 10px; + } +} +.box-comments { + background: #f7f7f7; +} +.box-comments .box-comment { + padding: 8px 0; + border-bottom: 1px solid #eee; +} +.box-comments .box-comment:before, +.box-comments .box-comment:after { + content: " "; + display: table; +} +.box-comments .box-comment:after { + clear: both; +} +.box-comments .box-comment:before, +.box-comments .box-comment:after { + content: " "; + display: table; +} +.box-comments .box-comment:after { + clear: both; +} +.box-comments .box-comment:last-of-type { + border-bottom: 0; +} +.box-comments .box-comment:first-of-type { + padding-top: 0; +} +.box-comments .box-comment img { + float: left; +} +.box-comments .comment-text { + margin-left: 40px; + color: #555; +} +.box-comments .username { + color: #444; + display: block; + font-weight: 600; +} +.box-comments .text-muted { + font-weight: 400; + font-size: 12px; +} +/* Widget: TODO LIST */ +.todo-list { + margin: 0; + padding: 0; + list-style: none; + overflow: auto; +} +.todo-list > li { + border-radius: 2px; + padding: 10px; + background: #f4f4f4; + margin-bottom: 2px; + border-left: 2px solid #e6e7e8; + color: #444; +} +.todo-list > li:last-of-type { + margin-bottom: 0; +} +.todo-list > li > input[type='checkbox'] { + margin: 0 10px 0 5px; +} +.todo-list > li .text { + display: inline-block; + margin-left: 5px; + font-weight: 600; +} +.todo-list > li .label { + margin-left: 10px; + font-size: 9px; +} +.todo-list > li .tools { + display: none; + float: right; + color: #e74c3c; +} +.todo-list > li .tools > .fa, +.todo-list > li .tools > .glyphicon, +.todo-list > li .tools > .ion { + margin-right: 5px; + cursor: pointer; +} +.todo-list > li:hover .tools { + display: inline-block; +} +.todo-list > li.done { + color: #999; +} +.todo-list > li.done .text { + text-decoration: line-through; + font-weight: 500; +} +.todo-list > li.done .label { + background: #d2d6de !important; +} +.todo-list .danger { + border-left-color: #e74c3c; +} +.todo-list .warning { + border-left-color: #f39c12; +} +.todo-list .info { + border-left-color: #3498db; +} +.todo-list .success { + border-left-color: #18bc9c; +} +.todo-list .primary { + border-left-color: #3c8dbc; +} +.todo-list .handle { + display: inline-block; + cursor: move; + margin: 0 5px; +} +/* Chat widget (DEPRECATED - this will be removed in the next major release. Use Direct Chat instead)*/ +.chat { + padding: 5px 20px 5px 10px; +} +.chat .item { + margin-bottom: 10px; +} +.chat .item:before, +.chat .item:after { + content: " "; + display: table; +} +.chat .item:after { + clear: both; +} +.chat .item:before, +.chat .item:after { + content: " "; + display: table; +} +.chat .item:after { + clear: both; +} +.chat .item > img { + width: 40px; + height: 40px; + border: 2px solid transparent; + border-radius: 50%; +} +.chat .item > .online { + border: 2px solid #18bc9c; +} +.chat .item > .offline { + border: 2px solid #e74c3c; +} +.chat .item > .message { + margin-left: 55px; + margin-top: -40px; +} +.chat .item > .message > .name { + display: block; + font-weight: 600; +} +.chat .item > .attachment { + border-radius: 3px; + background: #f4f4f4; + margin-left: 65px; + margin-right: 15px; + padding: 10px; +} +.chat .item > .attachment > h4 { + margin: 0 0 5px 0; + font-weight: 600; + font-size: 14px; +} +.chat .item > .attachment > p, +.chat .item > .attachment > .filename { + font-weight: 600; + font-size: 13px; + font-style: italic; + margin: 0; +} +.chat .item > .attachment:before, +.chat .item > .attachment:after { + content: " "; + display: table; +} +.chat .item > .attachment:after { + clear: both; +} +.chat .item > .attachment:before, +.chat .item > .attachment:after { + content: " "; + display: table; +} +.chat .item > .attachment:after { + clear: both; +} +.box-input { + max-width: 200px; +} +.modal .panel-body { + color: #444; +} +/* + * Component: Info Box + * ------------------- + */ +.info-box { + display: block; + min-height: 90px; + background: #fff; + width: 100%; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + border-radius: 2px; + margin-bottom: 15px; +} +.info-box small { + font-size: 14px; +} +.info-box .progress { + background: rgba(0, 0, 0, 0.2); + margin: 5px -10px 5px -10px; + height: 2px; +} +.info-box .progress, +.info-box .progress .progress-bar { + border-radius: 0; +} +.info-box .progress .progress-bar { + background: #fff; +} +.info-box-icon { + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; + display: block; + float: left; + height: 90px; + width: 90px; + text-align: center; + font-size: 45px; + line-height: 90px; + background: rgba(0, 0, 0, 0.2); +} +.info-box-icon > img { + max-width: 100%; +} +.info-box-content { + padding: 5px 10px; + margin-left: 90px; +} +.info-box-number { + display: block; + font-weight: bold; + font-size: 18px; +} +.progress-description, +.info-box-text { + display: block; + font-size: 14px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.info-box-text { + text-transform: uppercase; +} +.info-box-more { + display: block; +} +.progress-description { + margin: 0; +} +/* + * Component: Timeline + * ------------------- + */ +.timeline { + position: relative; + margin: 0 0 30px 0; + padding: 0; + list-style: none; +} +.timeline:before { + content: ''; + position: absolute; + top: 0; + bottom: 0; + width: 4px; + background: #ddd; + left: 31px; + margin: 0; + border-radius: 2px; +} +.timeline > li { + position: relative; + margin-right: 10px; + margin-bottom: 15px; +} +.timeline > li:before, +.timeline > li:after { + content: " "; + display: table; +} +.timeline > li:after { + clear: both; +} +.timeline > li:before, +.timeline > li:after { + content: " "; + display: table; +} +.timeline > li:after { + clear: both; +} +.timeline > li > .timeline-item { + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + border-radius: 3px; + margin-top: 0; + background: #fff; + color: #444; + margin-left: 60px; + margin-right: 15px; + padding: 0; + position: relative; +} +.timeline > li > .timeline-item > .time { + color: #999; + float: right; + padding: 10px; + font-size: 12px; +} +.timeline > li > .timeline-item > .timeline-header { + margin: 0; + color: #555; + border-bottom: 1px solid #f4f4f4; + padding: 10px; + font-size: 16px; + line-height: 1.1; +} +.timeline > li > .timeline-item > .timeline-header > a { + font-weight: 600; +} +.timeline > li > .timeline-item > .timeline-body, +.timeline > li > .timeline-item > .timeline-footer { + padding: 10px; +} +.timeline > li > .fa, +.timeline > li > .glyphicon, +.timeline > li > .ion { + width: 30px; + height: 30px; + font-size: 15px; + line-height: 30px; + position: absolute; + color: #666; + background: #d2d6de; + border-radius: 50%; + text-align: center; + left: 18px; + top: 0; +} +.timeline > .time-label > span { + font-weight: 600; + padding: 5px; + display: inline-block; + background-color: #fff; + border-radius: 4px; +} +.timeline-inverse > li > .timeline-item { + background: #f0f0f0; + border: 1px solid #ddd; + -webkit-box-shadow: none; + box-shadow: none; +} +.timeline-inverse > li > .timeline-item > .timeline-header { + border-bottom-color: #ddd; +} +/* + * Component: Button + * ----------------- + */ +.btn { + /*.border-radius(@btn-border-radius);*/ + -webkit-box-shadow: none; + box-shadow: none; + border: 1px solid transparent; +} +.btn.uppercase { + text-transform: uppercase; +} +.btn.btn-flat { + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + border-width: 1px; +} +.btn:active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn:focus { + outline: none; +} +.btn.btn-file { + position: relative; + overflow: hidden; +} +.btn.btn-file > input[type='file'] { + position: absolute; + top: 0; + right: 0; + min-width: 100%; + min-height: 100%; + font-size: 100px; + text-align: right; + opacity: 0; + filter: alpha(opacity=0); + outline: none; + background: white; + cursor: inherit; + display: block; +} +.btn-default { + background-color: #f4f4f4; + color: #444; + border-color: #ddd; +} +.btn-default:hover, +.btn-default:active, +.btn-default.hover { + background-color: #e7e7e7; +} +.btn-outline { + border: 1px solid #fff; + background: transparent; + color: #fff; +} +.btn-outline:hover, +.btn-outline:focus, +.btn-outline:active { + color: rgba(255, 255, 255, 0.7); + border-color: rgba(255, 255, 255, 0.7); +} +.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn[class*='bg-']:hover { + -webkit-box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2); + box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2); +} +.btn-app { + border-radius: 3px; + position: relative; + padding: 15px 5px; + margin: 0 0 10px 10px; + min-width: 80px; + height: 60px; + text-align: center; + color: #666; + border: 1px solid #ddd; + background-color: #f4f4f4; + font-size: 12px; +} +.btn-app > .fa, +.btn-app > .glyphicon, +.btn-app > .ion { + font-size: 20px; + display: block; +} +.btn-app:hover { + background: #f4f4f4; + color: #444; + border-color: #aaa; +} +.btn-app:active, +.btn-app:focus { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-app > .badge { + position: absolute; + top: -3px; + right: -10px; + font-size: 10px; + font-weight: 400; +} +/* + * Component: Callout + * ------------------ + */ +.callout { + border-radius: 3px; + margin: 0 0 20px 0; + padding: 15px 30px 15px 15px; + border-left: 5px solid #eee; +} +.callout a { + color: #fff; + text-decoration: underline; +} +.callout a:hover { + color: #eee; +} +.callout h4 { + margin-top: 0; + font-weight: 600; +} +.callout p:last-child { + margin-bottom: 0; +} +.callout code, +.callout .highlight { + background-color: #fff; +} +.callout.callout-danger { + border-color: #d62c1a; +} +.callout.callout-warning { + border-color: #c87f0a; +} +.callout.callout-info { + border-color: #217dbb; +} +.callout.callout-success { + border-color: #128f76; +} +/* + * Component: alert + * ---------------- + */ +.alert { + border-radius: 3px; +} +.alert h4 { + font-weight: 600; +} +.alert .icon { + margin-right: 10px; +} +.alert .close { + color: #000; + opacity: 0.2; + filter: alpha(opacity=20); +} +.alert .close:hover { + opacity: 0.5; + filter: alpha(opacity=50); +} +.alert a { + color: #fff; + text-decoration: underline; +} +.alert-success { + border-color: #15a589; +} +.alert-danger, +.alert-error { + border-color: #e43725; +} +.alert-warning { + border-color: #e08e0b; +} +.alert-info { + border-color: #258cd1; +} +.alert-primary-light { + background-color: #E2E5E8; + border-color: #D0D4D8; + color: #85878A; +} +.alert-primary-light a { + color: #787a7d; +} +.alert-success-light { + background-color: #dff0d8; + border-color: #d1eac8; + color: #468847; +} +.alert-success-light a { + color: #3d773e; +} +.alert-danger-light, +.alert-error-light { + background-color: #f2dede; + border-color: #ebcdcd; + color: #b94a48; +} +.alert-danger-light a, +.alert-error-light a { + color: #a74240; +} +.alert-warning-light { + background-color: #fcf8e3; + border-color: #faf3cd; + color: #c09853; +} +.alert-warning-light a { + color: #b78c43; +} +.alert-info-light { + background-color: #d9edf7; + border-color: #c6e4f3; + color: #3a87ad; +} +.alert-info-light a { + color: #34789a; +} +/* + * Component: Nav + * -------------- + */ +.nav > li > a:hover, +.nav > li > a:active, +.nav > li > a:focus { + color: #444; + background: #f7f7f7; +} +/* NAV PILLS */ +.nav-pills > li > a { + border-radius: 0; + border-top: 3px solid transparent; + color: #444; +} +.nav-pills > li > a > .fa, +.nav-pills > li > a > .glyphicon, +.nav-pills > li > a > .ion { + margin-right: 5px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + border-top-color: #3c8dbc; +} +.nav-pills > li.active > a { + font-weight: 600; +} +/* NAV STACKED */ +.nav-stacked > li > a { + border-radius: 0; + border-top: 0; + border-left: 3px solid transparent; + color: #444; +} +.nav-stacked > li.active > a, +.nav-stacked > li.active > a:hover { + background: transparent; + color: #444; + border-top: 0; + border-left-color: #3c8dbc; +} +.nav-stacked > li.header { + border-bottom: 1px solid #ddd; + color: #777; + margin-bottom: 10px; + padding: 5px 10px; + text-transform: uppercase; +} +/* NAV TABS */ +.nav-tabs-custom { + margin-bottom: 20px; + background: #fff; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + border-radius: 3px; +} +.nav-tabs-custom > .nav-tabs { + margin: 0; + border-bottom-color: #f4f4f4; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.nav-tabs-custom > .nav-tabs > li { + border-top: 3px solid transparent; + margin-bottom: -2px; + margin-right: 5px; +} +.nav-tabs-custom > .nav-tabs > li > a { + color: #444; + border-radius: 0; +} +.nav-tabs-custom > .nav-tabs > li > a.text-muted { + color: #999; +} +.nav-tabs-custom > .nav-tabs > li > a, +.nav-tabs-custom > .nav-tabs > li > a:hover { + background: transparent; + margin: 0; +} +.nav-tabs-custom > .nav-tabs > li > a:hover { + color: #999; +} +.nav-tabs-custom > .nav-tabs > li:not(.active) > a:hover, +.nav-tabs-custom > .nav-tabs > li:not(.active) > a:focus, +.nav-tabs-custom > .nav-tabs > li:not(.active) > a:active { + border-color: transparent; +} +.nav-tabs-custom > .nav-tabs > li.active { + border-top-color: #3c8dbc; +} +.nav-tabs-custom > .nav-tabs > li.active > a, +.nav-tabs-custom > .nav-tabs > li.active:hover > a { + background-color: #fff; + color: #444; +} +.nav-tabs-custom > .nav-tabs > li.active > a { + border-top-color: transparent; + border-left-color: #f4f4f4; + border-right-color: #f4f4f4; +} +.nav-tabs-custom > .nav-tabs > li:first-of-type { + margin-left: 0; +} +.nav-tabs-custom > .nav-tabs > li:first-of-type.active > a { + border-left-color: transparent; +} +.nav-tabs-custom > .nav-tabs.pull-right { + float: none !important; +} +.nav-tabs-custom > .nav-tabs.pull-right > li { + float: right; +} +.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type { + margin-right: 0; +} +.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type > a { + border-left-width: 1px; +} +.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type.active > a { + border-left-color: #f4f4f4; + border-right-color: transparent; +} +.nav-tabs-custom > .nav-tabs > li.header { + line-height: 35px; + padding: 0 10px; + font-size: 20px; + color: #444; +} +.nav-tabs-custom > .nav-tabs > li.header > .fa, +.nav-tabs-custom > .nav-tabs > li.header > .glyphicon, +.nav-tabs-custom > .nav-tabs > li.header > .ion { + margin-right: 5px; +} +.nav-tabs-custom > .tab-content { + background: #fff; + padding: 10px; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.nav-tabs-custom .dropdown.open > a:active, +.nav-tabs-custom .dropdown.open > a:focus { + background: transparent; + color: #999; +} +.nav-tabs-custom.tab-primary > .nav-tabs > li.active { + border-top-color: #3c8dbc; +} +.nav-tabs-custom.tab-info > .nav-tabs > li.active { + border-top-color: #3498db; +} +.nav-tabs-custom.tab-danger > .nav-tabs > li.active { + border-top-color: #e74c3c; +} +.nav-tabs-custom.tab-warning > .nav-tabs > li.active { + border-top-color: #f39c12; +} +.nav-tabs-custom.tab-success > .nav-tabs > li.active { + border-top-color: #18bc9c; +} +.nav-tabs-custom.tab-default > .nav-tabs > li.active { + border-top-color: #d2d6de; +} +/* PAGINATION */ +.pagination > li > a { + background: #fafafa; + color: #666; +} +.pagination.pagination-flat > li > a { + border-radius: 0 !important; +} +/* + * Component: Products List + * ------------------------ + */ +.products-list { + list-style: none; + margin: 0; + padding: 0; +} +.products-list > .item { + border-radius: 3px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + padding: 10px 0; + background: #fff; +} +.products-list > .item:before, +.products-list > .item:after { + content: " "; + display: table; +} +.products-list > .item:after { + clear: both; +} +.products-list > .item:before, +.products-list > .item:after { + content: " "; + display: table; +} +.products-list > .item:after { + clear: both; +} +.products-list .product-img { + float: left; +} +.products-list .product-img img { + width: 50px; + height: 50px; +} +.products-list .product-info { + margin-left: 60px; +} +.products-list .product-title { + font-weight: 600; +} +.products-list .product-description { + display: block; + color: #999; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.product-list-in-box > .item { + -webkit-box-shadow: none; + box-shadow: none; + border-radius: 0; + border-bottom: 1px solid #f4f4f4; +} +.product-list-in-box > .item:last-of-type { + border-bottom-width: 0; +} +/* + * Component: Table + * ---------------- + */ +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + border-top: 1px solid #f4f4f4; +} +.table > thead > tr > th { + border-bottom: 2px solid #f4f4f4; +} +.table tr td .progress { + margin-top: 5px; +} +.table-bordered { + border: 1px solid #f4f4f4; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #f4f4f4; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table.no-border, +.table.no-border td, +.table.no-border th { + border: 0; +} +/* .text-center in tables */ +table.text-center, +table.text-center td, +table.text-center th { + text-align: center; +} +.table.align th { + text-align: left; +} +.table.align td { + text-align: right; +} +/* + * Component: Direct Chat + * ---------------------- + */ +.direct-chat .box-body { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + position: relative; + overflow-x: hidden; + padding: 0; +} +.direct-chat.chat-pane-open .direct-chat-contacts { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.direct-chat-messages { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); + padding: 10px; + height: 250px; + overflow: auto; +} +.direct-chat-msg, +.direct-chat-text { + display: block; +} +.direct-chat-msg { + margin-bottom: 10px; +} +.direct-chat-msg:before, +.direct-chat-msg:after { + content: " "; + display: table; +} +.direct-chat-msg:after { + clear: both; +} +.direct-chat-msg:before, +.direct-chat-msg:after { + content: " "; + display: table; +} +.direct-chat-msg:after { + clear: both; +} +.direct-chat-messages, +.direct-chat-contacts { + -webkit-transition: -webkit-transform 0.5s ease-in-out; + -moz-transition: -moz-transform 0.5s ease-in-out; + -o-transition: -o-transform 0.5s ease-in-out; + transition: transform 0.5s ease-in-out; +} +.direct-chat-text { + border-radius: 5px; + position: relative; + padding: 5px 10px; + background: #d2d6de; + border: 1px solid #d2d6de; + margin: 5px 0 0 50px; + color: #444; +} +.direct-chat-text:after, +.direct-chat-text:before { + position: absolute; + right: 100%; + top: 15px; + border: solid transparent; + border-right-color: #d2d6de; + content: ' '; + height: 0; + width: 0; + pointer-events: none; +} +.direct-chat-text:after { + border-width: 5px; + margin-top: -5px; +} +.direct-chat-text:before { + border-width: 6px; + margin-top: -6px; +} +.right .direct-chat-text { + margin-right: 50px; + margin-left: 0; +} +.right .direct-chat-text:after, +.right .direct-chat-text:before { + right: auto; + left: 100%; + border-right-color: transparent; + border-left-color: #d2d6de; +} +.direct-chat-img { + border-radius: 50%; + float: left; + width: 40px; + height: 40px; +} +.right .direct-chat-img { + float: right; +} +.direct-chat-info { + display: block; + margin-bottom: 2px; + font-size: 12px; +} +.direct-chat-name { + font-weight: 600; +} +.direct-chat-timestamp { + color: #999; +} +.direct-chat-contacts-open .direct-chat-contacts { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.direct-chat-contacts { + -webkit-transform: translate(101%, 0); + -ms-transform: translate(101%, 0); + -o-transform: translate(101%, 0); + transform: translate(101%, 0); + position: absolute; + top: 0; + bottom: 0; + height: 250px; + width: 100%; + background: #222d32; + color: #fff; + overflow: auto; +} +.contacts-list > li { + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + padding: 10px; + margin: 0; +} +.contacts-list > li:before, +.contacts-list > li:after { + content: " "; + display: table; +} +.contacts-list > li:after { + clear: both; +} +.contacts-list > li:before, +.contacts-list > li:after { + content: " "; + display: table; +} +.contacts-list > li:after { + clear: both; +} +.contacts-list > li:last-of-type { + border-bottom: none; +} +.contacts-list-img { + border-radius: 50%; + width: 40px; + float: left; +} +.contacts-list-info { + margin-left: 45px; + color: #fff; +} +.contacts-list-name, +.contacts-list-status { + display: block; +} +.contacts-list-name { + font-weight: 600; +} +.contacts-list-status { + font-size: 12px; +} +.contacts-list-date { + color: #aaa; + font-weight: normal; +} +.contacts-list-msg { + color: #999; +} +.direct-chat-danger .right > .direct-chat-text { + background: #e74c3c; + border-color: #e74c3c; + color: #fff; +} +.direct-chat-danger .right > .direct-chat-text:after, +.direct-chat-danger .right > .direct-chat-text:before { + border-left-color: #e74c3c; +} +.direct-chat-primary .right > .direct-chat-text { + background: #3c8dbc; + border-color: #3c8dbc; + color: #fff; +} +.direct-chat-primary .right > .direct-chat-text:after, +.direct-chat-primary .right > .direct-chat-text:before { + border-left-color: #3c8dbc; +} +.direct-chat-warning .right > .direct-chat-text { + background: #f39c12; + border-color: #f39c12; + color: #fff; +} +.direct-chat-warning .right > .direct-chat-text:after, +.direct-chat-warning .right > .direct-chat-text:before { + border-left-color: #f39c12; +} +.direct-chat-info .right > .direct-chat-text { + background: #3498db; + border-color: #3498db; + color: #fff; +} +.direct-chat-info .right > .direct-chat-text:after, +.direct-chat-info .right > .direct-chat-text:before { + border-left-color: #3498db; +} +.direct-chat-success .right > .direct-chat-text { + background: #18bc9c; + border-color: #18bc9c; + color: #fff; +} +.direct-chat-success .right > .direct-chat-text:after, +.direct-chat-success .right > .direct-chat-text:before { + border-left-color: #18bc9c; +} +/* + * Component: Users List + * --------------------- + */ +.users-list > li { + width: 25%; + float: left; + padding: 10px; + text-align: center; +} +.users-list > li img { + border-radius: 50%; + max-width: 100%; + height: auto; +} +.users-list > li > a:hover, +.users-list > li > a:hover .users-list-name { + color: #999; +} +.users-list-name, +.users-list-date { + display: block; +} +.users-list-name { + font-weight: 600; + color: #444; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.users-list-date { + color: #999; + font-size: 12px; +} +/* + * Component: Carousel + * ------------------- + */ +.carousel-control.left, +.carousel-control.right { + background-image: none; +} +.carousel-control > .fa { + font-size: 40px; + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -20px; +} +/* + * Component: modal + * ---------------- + */ +.modal { + background: rgba(0, 0, 0, 0.3); +} +.modal-content { + border-radius: 0; + -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125); + box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125); + border: 0; +} +@media (min-width: 768px) { + .modal-content { + -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125); + box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125); + } +} +.modal-header { + border-bottom-color: #f4f4f4; +} +.modal-footer { + border-top-color: #f4f4f4; +} +.modal-primary .modal-header, +.modal-primary .modal-footer { + border-color: #307095; +} +.modal-warning .modal-header, +.modal-warning .modal-footer { + border-color: #c87f0a; +} +.modal-info .modal-header, +.modal-info .modal-footer { + border-color: #217dbb; +} +.modal-success .modal-header, +.modal-success .modal-footer { + border-color: #128f76; +} +.modal-danger .modal-header, +.modal-danger .modal-footer { + border-color: #d62c1a; +} +/* + * Component: Social Widgets + * ------------------------- + */ +.box-widget { + border: none; + position: relative; +} +.widget-user .widget-user-header { + padding: 20px; + height: 120px; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.widget-user .widget-user-username { + margin-top: 0; + margin-bottom: 5px; + font-size: 25px; + font-weight: 300; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); +} +.widget-user .widget-user-desc { + margin-top: 0; +} +.widget-user .widget-user-image { + position: absolute; + top: 65px; + left: 50%; + margin-left: -45px; +} +.widget-user .widget-user-image > img { + width: 90px; + height: auto; + border: 3px solid #fff; +} +.widget-user .box-footer { + padding-top: 30px; +} +.widget-user-2 .widget-user-header { + padding: 20px; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.widget-user-2 .widget-user-username { + margin-top: 5px; + margin-bottom: 5px; + font-size: 25px; + font-weight: 300; +} +.widget-user-2 .widget-user-desc { + margin-top: 0; +} +.widget-user-2 .widget-user-username, +.widget-user-2 .widget-user-desc { + margin-left: 75px; +} +.widget-user-2 .widget-user-image > img { + width: 65px; + height: auto; + float: left; +} +.close, +.mailbox-attachment-close { + float: right; + font-size: 18px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: 0.2; + filter: alpha(opacity=20); +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} +.clearfix:before, +.clearfix:after, +.content:before, +.content:after { + content: " "; + display: table; +} +.clearfix:after, +.content:after { + clear: both; +} +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +/* + * Page: Mailbox + * ------------- + */ +.mailbox-messages > .table { + margin: 0; +} +.mailbox-controls { + padding: 5px; +} +.mailbox-controls.with-border { + border-bottom: 1px solid #f4f4f4; +} +.mailbox-read-info { + border-bottom: 1px solid #f4f4f4; + padding: 10px; +} +.mailbox-read-info h3 { + font-size: 20px; + margin: 0; +} +.mailbox-read-info h5 { + margin: 0; + padding: 5px 0 0 0; +} +.mailbox-read-time { + color: #999; + font-size: 13px; +} +.mailbox-read-message { + padding: 10px; +} +.mailbox-attachments li { + float: left; + width: 200px; + border: 1px solid #eee; + margin-bottom: 10px; + margin-right: 10px; +} +.mailbox-attachment-name { + font-weight: bold; + color: #666; +} +.mailbox-attachment-icon, +.mailbox-attachment-info, +.mailbox-attachment-size { + display: block; +} +.mailbox-attachment-info { + padding: 10px; + background: #f4f4f4; +} +.mailbox-attachment-size { + color: #999; + font-size: 12px; +} +.mailbox-attachment-icon { + text-align: center; + font-size: 65px; + color: #666; + padding: 20px 10px; +} +.mailbox-attachment-icon.has-img { + padding: 0; +} +.mailbox-attachment-icon.has-img > img { + max-width: 100%; + height: auto; +} +/* + * Page: Lock Screen + * ----------------- + */ +/* ADD THIS CLASS TO THE TAG */ +.lockscreen { + background: #d2d6de; +} +.lockscreen-logo { + font-size: 35px; + text-align: center; + margin-bottom: 25px; + font-weight: 300; +} +.lockscreen-logo a { + color: #444; +} +.lockscreen-wrapper { + max-width: 400px; + margin: 0 auto; + margin-top: 10%; +} +/* User name [optional] */ +.lockscreen .lockscreen-name { + text-align: center; + font-weight: 600; +} +/* Will contain the image and the sign in form */ +.lockscreen-item { + border-radius: 4px; + padding: 0; + background: #fff; + position: relative; + margin: 10px auto 30px auto; + width: 290px; +} +/* User image */ +.lockscreen-image { + border-radius: 50%; + position: absolute; + left: -10px; + top: -25px; + background: #fff; + padding: 5px; + z-index: 10; +} +.lockscreen-image > img { + border-radius: 50%; + width: 70px; + height: 70px; +} +/* Contains the password input and the login button */ +.lockscreen-credentials { + margin-left: 70px; +} +.lockscreen-credentials .form-control { + border: 0; +} +.lockscreen-credentials .btn { + background-color: #fff; + border: 0; + padding: 0 10px; +} +.lockscreen-footer { + margin-top: 10px; +} +/* + * Page: Login & Register + * ---------------------- + */ +.login-logo, +.register-logo { + font-size: 35px; + text-align: center; + margin-bottom: 25px; + font-weight: 300; +} +.login-logo a, +.register-logo a { + color: #444; +} +.login-page, +.register-page { + background: #d2d6de; +} +.login-box, +.register-box { + width: 360px; + margin: 7% auto; +} +@media (max-width: 768px) { + .login-box, + .register-box { + width: 90%; + margin-top: 20px; + } +} +.login-box-body, +.register-box-body { + background: #fff; + padding: 20px; + border-top: 0; + color: #666; +} +.login-box-body .form-control-feedback, +.register-box-body .form-control-feedback { + color: #777; +} +.login-box-msg, +.register-box-msg { + margin: 0; + text-align: center; + padding: 0 20px 20px 20px; +} +.social-auth-links { + margin: 10px 0; +} +/* + * Page: 400 and 500 error pages + * ------------------------------ + */ +.error-page { + width: 600px; + margin: 20px auto 0 auto; +} +@media (max-width: 991px) { + .error-page { + width: 100%; + } +} +.error-page > .headline { + float: left; + font-size: 100px; + font-weight: 300; +} +@media (max-width: 991px) { + .error-page > .headline { + float: none; + text-align: center; + } +} +.error-page > .error-content { + margin-left: 190px; + display: block; +} +@media (max-width: 991px) { + .error-page > .error-content { + margin-left: 0; + } +} +.error-page > .error-content > h3 { + font-weight: 300; + font-size: 25px; +} +@media (max-width: 991px) { + .error-page > .error-content > h3 { + text-align: center; + } +} +/* + * Page: Invoice + * ------------- + */ +.invoice { + position: relative; + background: #fff; + border: 1px solid #f4f4f4; + padding: 20px; + margin: 10px 25px; +} +.invoice-title { + margin-top: 0; +} +/* + * Page: Profile + * ------------- + */ +.profile-user-img { + margin: 0 auto; + width: 100px; + padding: 3px; + border: 3px solid #d2d6de; +} +.profile-username { + font-size: 21px; + margin-top: 5px; +} +.post { + border-bottom: 1px solid #d2d6de; + margin-bottom: 15px; + padding-bottom: 15px; + color: #666; +} +.post:last-of-type { + border-bottom: 0; + margin-bottom: 0; + padding-bottom: 0; +} +.post .user-block { + margin-bottom: 15px; +} +/* + * Social Buttons for Bootstrap + * + * Copyright 2013-2015 Panayiotis Lipiridis + * Licensed under the MIT License + * + * https://github.com/lipis/bootstrap-social + */ +.btn-social { + position: relative; + padding-left: 41px; + text-align: left; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.btn-social > :first-child { + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: 29px; + line-height: 31px; + font-size: 1.6em; + text-align: center; + border-right: 1px solid rgba(0, 0, 0, 0.2); +} +.btn-social.btn-lg { + padding-left: 57px; +} +.btn-social.btn-lg > :first-child { + line-height: 41px; + width: 41px; + font-size: 1.8em; +} +.btn-social.btn-sm { + padding-left: 36px; +} +.btn-social.btn-sm > :first-child { + line-height: 26px; + width: 26px; + font-size: 1.4em; +} +.btn-social.btn-xs { + padding-left: 29px; +} +.btn-social.btn-xs > :first-child { + line-height: 19px; + width: 19px; + font-size: 1.2em; +} +.btn-social-icon { + position: relative; + padding-left: 41px; + text-align: left; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + height: 31px; + width: 31px; + padding: 0; +} +.btn-social-icon > :first-child { + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: 29px; + line-height: 31px; + font-size: 1.6em; + text-align: center; + border-right: 1px solid rgba(0, 0, 0, 0.2); +} +.btn-social-icon.btn-lg { + padding-left: 57px; +} +.btn-social-icon.btn-lg > :first-child { + line-height: 41px; + width: 41px; + font-size: 1.8em; +} +.btn-social-icon.btn-sm { + padding-left: 36px; +} +.btn-social-icon.btn-sm > :first-child { + line-height: 26px; + width: 26px; + font-size: 1.4em; +} +.btn-social-icon.btn-xs { + padding-left: 29px; +} +.btn-social-icon.btn-xs > :first-child { + line-height: 19px; + width: 19px; + font-size: 1.2em; +} +.btn-social-icon > :first-child { + border: none; + text-align: center; + width: 100%; +} +.btn-social-icon.btn-lg { + height: 41px; + width: 41px; + padding-left: 0; + padding-right: 0; +} +.btn-social-icon.btn-sm { + height: 28px; + width: 28px; + padding-left: 0; + padding-right: 0; +} +.btn-social-icon.btn-xs { + height: 21px; + width: 21px; + padding-left: 0; + padding-right: 0; +} +.btn-adn { + color: #fff; + background-color: #d87a68; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-adn:focus, +.btn-adn.focus { + color: #fff; + background-color: #ce563f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-adn:hover { + color: #fff; + background-color: #ce563f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-adn:active, +.btn-adn.active, +.open > .dropdown-toggle.btn-adn { + color: #fff; + background-color: #ce563f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-adn:active:hover, +.btn-adn.active:hover, +.open > .dropdown-toggle.btn-adn:hover, +.btn-adn:active:focus, +.btn-adn.active:focus, +.open > .dropdown-toggle.btn-adn:focus, +.btn-adn:active.focus, +.btn-adn.active.focus, +.open > .dropdown-toggle.btn-adn.focus { + color: #fff; + background-color: #b94630; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-adn:active, +.btn-adn.active, +.open > .dropdown-toggle.btn-adn { + background-image: none; +} +.btn-adn.disabled, +.btn-adn[disabled], +fieldset[disabled] .btn-adn, +.btn-adn.disabled:hover, +.btn-adn[disabled]:hover, +fieldset[disabled] .btn-adn:hover, +.btn-adn.disabled:focus, +.btn-adn[disabled]:focus, +fieldset[disabled] .btn-adn:focus, +.btn-adn.disabled.focus, +.btn-adn[disabled].focus, +fieldset[disabled] .btn-adn.focus, +.btn-adn.disabled:active, +.btn-adn[disabled]:active, +fieldset[disabled] .btn-adn:active, +.btn-adn.disabled.active, +.btn-adn[disabled].active, +fieldset[disabled] .btn-adn.active { + background-color: #d87a68; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-adn .badge { + color: #d87a68; + background-color: #fff; +} +.btn-bitbucket { + color: #fff; + background-color: #205081; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-bitbucket:focus, +.btn-bitbucket.focus { + color: #fff; + background-color: #163758; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-bitbucket:hover { + color: #fff; + background-color: #163758; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-bitbucket:active, +.btn-bitbucket.active, +.open > .dropdown-toggle.btn-bitbucket { + color: #fff; + background-color: #163758; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-bitbucket:active:hover, +.btn-bitbucket.active:hover, +.open > .dropdown-toggle.btn-bitbucket:hover, +.btn-bitbucket:active:focus, +.btn-bitbucket.active:focus, +.open > .dropdown-toggle.btn-bitbucket:focus, +.btn-bitbucket:active.focus, +.btn-bitbucket.active.focus, +.open > .dropdown-toggle.btn-bitbucket.focus { + color: #fff; + background-color: #0f253c; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-bitbucket:active, +.btn-bitbucket.active, +.open > .dropdown-toggle.btn-bitbucket { + background-image: none; +} +.btn-bitbucket.disabled, +.btn-bitbucket[disabled], +fieldset[disabled] .btn-bitbucket, +.btn-bitbucket.disabled:hover, +.btn-bitbucket[disabled]:hover, +fieldset[disabled] .btn-bitbucket:hover, +.btn-bitbucket.disabled:focus, +.btn-bitbucket[disabled]:focus, +fieldset[disabled] .btn-bitbucket:focus, +.btn-bitbucket.disabled.focus, +.btn-bitbucket[disabled].focus, +fieldset[disabled] .btn-bitbucket.focus, +.btn-bitbucket.disabled:active, +.btn-bitbucket[disabled]:active, +fieldset[disabled] .btn-bitbucket:active, +.btn-bitbucket.disabled.active, +.btn-bitbucket[disabled].active, +fieldset[disabled] .btn-bitbucket.active { + background-color: #205081; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-bitbucket .badge { + color: #205081; + background-color: #fff; +} +.btn-dropbox { + color: #fff; + background-color: #1087dd; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-dropbox:focus, +.btn-dropbox.focus { + color: #fff; + background-color: #0d6aad; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-dropbox:hover { + color: #fff; + background-color: #0d6aad; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-dropbox:active, +.btn-dropbox.active, +.open > .dropdown-toggle.btn-dropbox { + color: #fff; + background-color: #0d6aad; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-dropbox:active:hover, +.btn-dropbox.active:hover, +.open > .dropdown-toggle.btn-dropbox:hover, +.btn-dropbox:active:focus, +.btn-dropbox.active:focus, +.open > .dropdown-toggle.btn-dropbox:focus, +.btn-dropbox:active.focus, +.btn-dropbox.active.focus, +.open > .dropdown-toggle.btn-dropbox.focus { + color: #fff; + background-color: #0a568c; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-dropbox:active, +.btn-dropbox.active, +.open > .dropdown-toggle.btn-dropbox { + background-image: none; +} +.btn-dropbox.disabled, +.btn-dropbox[disabled], +fieldset[disabled] .btn-dropbox, +.btn-dropbox.disabled:hover, +.btn-dropbox[disabled]:hover, +fieldset[disabled] .btn-dropbox:hover, +.btn-dropbox.disabled:focus, +.btn-dropbox[disabled]:focus, +fieldset[disabled] .btn-dropbox:focus, +.btn-dropbox.disabled.focus, +.btn-dropbox[disabled].focus, +fieldset[disabled] .btn-dropbox.focus, +.btn-dropbox.disabled:active, +.btn-dropbox[disabled]:active, +fieldset[disabled] .btn-dropbox:active, +.btn-dropbox.disabled.active, +.btn-dropbox[disabled].active, +fieldset[disabled] .btn-dropbox.active { + background-color: #1087dd; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-dropbox .badge { + color: #1087dd; + background-color: #fff; +} +.btn-facebook { + color: #fff; + background-color: #3b5998; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-facebook:focus, +.btn-facebook.focus { + color: #fff; + background-color: #2d4373; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-facebook:hover { + color: #fff; + background-color: #2d4373; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-facebook:active, +.btn-facebook.active, +.open > .dropdown-toggle.btn-facebook { + color: #fff; + background-color: #2d4373; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-facebook:active:hover, +.btn-facebook.active:hover, +.open > .dropdown-toggle.btn-facebook:hover, +.btn-facebook:active:focus, +.btn-facebook.active:focus, +.open > .dropdown-toggle.btn-facebook:focus, +.btn-facebook:active.focus, +.btn-facebook.active.focus, +.open > .dropdown-toggle.btn-facebook.focus { + color: #fff; + background-color: #23345a; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-facebook:active, +.btn-facebook.active, +.open > .dropdown-toggle.btn-facebook { + background-image: none; +} +.btn-facebook.disabled, +.btn-facebook[disabled], +fieldset[disabled] .btn-facebook, +.btn-facebook.disabled:hover, +.btn-facebook[disabled]:hover, +fieldset[disabled] .btn-facebook:hover, +.btn-facebook.disabled:focus, +.btn-facebook[disabled]:focus, +fieldset[disabled] .btn-facebook:focus, +.btn-facebook.disabled.focus, +.btn-facebook[disabled].focus, +fieldset[disabled] .btn-facebook.focus, +.btn-facebook.disabled:active, +.btn-facebook[disabled]:active, +fieldset[disabled] .btn-facebook:active, +.btn-facebook.disabled.active, +.btn-facebook[disabled].active, +fieldset[disabled] .btn-facebook.active { + background-color: #3b5998; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-facebook .badge { + color: #3b5998; + background-color: #fff; +} +.btn-flickr { + color: #fff; + background-color: #ff0084; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-flickr:focus, +.btn-flickr.focus { + color: #fff; + background-color: #cc006a; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-flickr:hover { + color: #fff; + background-color: #cc006a; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-flickr:active, +.btn-flickr.active, +.open > .dropdown-toggle.btn-flickr { + color: #fff; + background-color: #cc006a; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-flickr:active:hover, +.btn-flickr.active:hover, +.open > .dropdown-toggle.btn-flickr:hover, +.btn-flickr:active:focus, +.btn-flickr.active:focus, +.open > .dropdown-toggle.btn-flickr:focus, +.btn-flickr:active.focus, +.btn-flickr.active.focus, +.open > .dropdown-toggle.btn-flickr.focus { + color: #fff; + background-color: #a80057; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-flickr:active, +.btn-flickr.active, +.open > .dropdown-toggle.btn-flickr { + background-image: none; +} +.btn-flickr.disabled, +.btn-flickr[disabled], +fieldset[disabled] .btn-flickr, +.btn-flickr.disabled:hover, +.btn-flickr[disabled]:hover, +fieldset[disabled] .btn-flickr:hover, +.btn-flickr.disabled:focus, +.btn-flickr[disabled]:focus, +fieldset[disabled] .btn-flickr:focus, +.btn-flickr.disabled.focus, +.btn-flickr[disabled].focus, +fieldset[disabled] .btn-flickr.focus, +.btn-flickr.disabled:active, +.btn-flickr[disabled]:active, +fieldset[disabled] .btn-flickr:active, +.btn-flickr.disabled.active, +.btn-flickr[disabled].active, +fieldset[disabled] .btn-flickr.active { + background-color: #ff0084; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-flickr .badge { + color: #ff0084; + background-color: #fff; +} +.btn-foursquare { + color: #fff; + background-color: #f94877; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-foursquare:focus, +.btn-foursquare.focus { + color: #fff; + background-color: #f71752; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-foursquare:hover { + color: #fff; + background-color: #f71752; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-foursquare:active, +.btn-foursquare.active, +.open > .dropdown-toggle.btn-foursquare { + color: #fff; + background-color: #f71752; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-foursquare:active:hover, +.btn-foursquare.active:hover, +.open > .dropdown-toggle.btn-foursquare:hover, +.btn-foursquare:active:focus, +.btn-foursquare.active:focus, +.open > .dropdown-toggle.btn-foursquare:focus, +.btn-foursquare:active.focus, +.btn-foursquare.active.focus, +.open > .dropdown-toggle.btn-foursquare.focus { + color: #fff; + background-color: #e30742; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-foursquare:active, +.btn-foursquare.active, +.open > .dropdown-toggle.btn-foursquare { + background-image: none; +} +.btn-foursquare.disabled, +.btn-foursquare[disabled], +fieldset[disabled] .btn-foursquare, +.btn-foursquare.disabled:hover, +.btn-foursquare[disabled]:hover, +fieldset[disabled] .btn-foursquare:hover, +.btn-foursquare.disabled:focus, +.btn-foursquare[disabled]:focus, +fieldset[disabled] .btn-foursquare:focus, +.btn-foursquare.disabled.focus, +.btn-foursquare[disabled].focus, +fieldset[disabled] .btn-foursquare.focus, +.btn-foursquare.disabled:active, +.btn-foursquare[disabled]:active, +fieldset[disabled] .btn-foursquare:active, +.btn-foursquare.disabled.active, +.btn-foursquare[disabled].active, +fieldset[disabled] .btn-foursquare.active { + background-color: #f94877; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-foursquare .badge { + color: #f94877; + background-color: #fff; +} +.btn-github { + color: #fff; + background-color: #444444; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-github:focus, +.btn-github.focus { + color: #fff; + background-color: #2b2b2b; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-github:hover { + color: #fff; + background-color: #2b2b2b; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-github:active, +.btn-github.active, +.open > .dropdown-toggle.btn-github { + color: #fff; + background-color: #2b2b2b; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-github:active:hover, +.btn-github.active:hover, +.open > .dropdown-toggle.btn-github:hover, +.btn-github:active:focus, +.btn-github.active:focus, +.open > .dropdown-toggle.btn-github:focus, +.btn-github:active.focus, +.btn-github.active.focus, +.open > .dropdown-toggle.btn-github.focus { + color: #fff; + background-color: #191919; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-github:active, +.btn-github.active, +.open > .dropdown-toggle.btn-github { + background-image: none; +} +.btn-github.disabled, +.btn-github[disabled], +fieldset[disabled] .btn-github, +.btn-github.disabled:hover, +.btn-github[disabled]:hover, +fieldset[disabled] .btn-github:hover, +.btn-github.disabled:focus, +.btn-github[disabled]:focus, +fieldset[disabled] .btn-github:focus, +.btn-github.disabled.focus, +.btn-github[disabled].focus, +fieldset[disabled] .btn-github.focus, +.btn-github.disabled:active, +.btn-github[disabled]:active, +fieldset[disabled] .btn-github:active, +.btn-github.disabled.active, +.btn-github[disabled].active, +fieldset[disabled] .btn-github.active { + background-color: #444444; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-github .badge { + color: #444444; + background-color: #fff; +} +.btn-google { + color: #fff; + background-color: #dd4b39; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-google:focus, +.btn-google.focus { + color: #fff; + background-color: #c23321; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-google:hover { + color: #fff; + background-color: #c23321; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-google:active, +.btn-google.active, +.open > .dropdown-toggle.btn-google { + color: #fff; + background-color: #c23321; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-google:active:hover, +.btn-google.active:hover, +.open > .dropdown-toggle.btn-google:hover, +.btn-google:active:focus, +.btn-google.active:focus, +.open > .dropdown-toggle.btn-google:focus, +.btn-google:active.focus, +.btn-google.active.focus, +.open > .dropdown-toggle.btn-google.focus { + color: #fff; + background-color: #a32b1c; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-google:active, +.btn-google.active, +.open > .dropdown-toggle.btn-google { + background-image: none; +} +.btn-google.disabled, +.btn-google[disabled], +fieldset[disabled] .btn-google, +.btn-google.disabled:hover, +.btn-google[disabled]:hover, +fieldset[disabled] .btn-google:hover, +.btn-google.disabled:focus, +.btn-google[disabled]:focus, +fieldset[disabled] .btn-google:focus, +.btn-google.disabled.focus, +.btn-google[disabled].focus, +fieldset[disabled] .btn-google.focus, +.btn-google.disabled:active, +.btn-google[disabled]:active, +fieldset[disabled] .btn-google:active, +.btn-google.disabled.active, +.btn-google[disabled].active, +fieldset[disabled] .btn-google.active { + background-color: #dd4b39; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-google .badge { + color: #dd4b39; + background-color: #fff; +} +.btn-instagram { + color: #fff; + background-color: #3f729b; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-instagram:focus, +.btn-instagram.focus { + color: #fff; + background-color: #305777; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-instagram:hover { + color: #fff; + background-color: #305777; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-instagram:active, +.btn-instagram.active, +.open > .dropdown-toggle.btn-instagram { + color: #fff; + background-color: #305777; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-instagram:active:hover, +.btn-instagram.active:hover, +.open > .dropdown-toggle.btn-instagram:hover, +.btn-instagram:active:focus, +.btn-instagram.active:focus, +.open > .dropdown-toggle.btn-instagram:focus, +.btn-instagram:active.focus, +.btn-instagram.active.focus, +.open > .dropdown-toggle.btn-instagram.focus { + color: #fff; + background-color: #26455d; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-instagram:active, +.btn-instagram.active, +.open > .dropdown-toggle.btn-instagram { + background-image: none; +} +.btn-instagram.disabled, +.btn-instagram[disabled], +fieldset[disabled] .btn-instagram, +.btn-instagram.disabled:hover, +.btn-instagram[disabled]:hover, +fieldset[disabled] .btn-instagram:hover, +.btn-instagram.disabled:focus, +.btn-instagram[disabled]:focus, +fieldset[disabled] .btn-instagram:focus, +.btn-instagram.disabled.focus, +.btn-instagram[disabled].focus, +fieldset[disabled] .btn-instagram.focus, +.btn-instagram.disabled:active, +.btn-instagram[disabled]:active, +fieldset[disabled] .btn-instagram:active, +.btn-instagram.disabled.active, +.btn-instagram[disabled].active, +fieldset[disabled] .btn-instagram.active { + background-color: #3f729b; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-instagram .badge { + color: #3f729b; + background-color: #fff; +} +.btn-linkedin { + color: #fff; + background-color: #007bb6; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-linkedin:focus, +.btn-linkedin.focus { + color: #fff; + background-color: #005983; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-linkedin:hover { + color: #fff; + background-color: #005983; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-linkedin:active, +.btn-linkedin.active, +.open > .dropdown-toggle.btn-linkedin { + color: #fff; + background-color: #005983; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-linkedin:active:hover, +.btn-linkedin.active:hover, +.open > .dropdown-toggle.btn-linkedin:hover, +.btn-linkedin:active:focus, +.btn-linkedin.active:focus, +.open > .dropdown-toggle.btn-linkedin:focus, +.btn-linkedin:active.focus, +.btn-linkedin.active.focus, +.open > .dropdown-toggle.btn-linkedin.focus { + color: #fff; + background-color: #00405f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-linkedin:active, +.btn-linkedin.active, +.open > .dropdown-toggle.btn-linkedin { + background-image: none; +} +.btn-linkedin.disabled, +.btn-linkedin[disabled], +fieldset[disabled] .btn-linkedin, +.btn-linkedin.disabled:hover, +.btn-linkedin[disabled]:hover, +fieldset[disabled] .btn-linkedin:hover, +.btn-linkedin.disabled:focus, +.btn-linkedin[disabled]:focus, +fieldset[disabled] .btn-linkedin:focus, +.btn-linkedin.disabled.focus, +.btn-linkedin[disabled].focus, +fieldset[disabled] .btn-linkedin.focus, +.btn-linkedin.disabled:active, +.btn-linkedin[disabled]:active, +fieldset[disabled] .btn-linkedin:active, +.btn-linkedin.disabled.active, +.btn-linkedin[disabled].active, +fieldset[disabled] .btn-linkedin.active { + background-color: #007bb6; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-linkedin .badge { + color: #007bb6; + background-color: #fff; +} +.btn-microsoft { + color: #fff; + background-color: #2672ec; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-microsoft:focus, +.btn-microsoft.focus { + color: #fff; + background-color: #125acd; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-microsoft:hover { + color: #fff; + background-color: #125acd; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-microsoft:active, +.btn-microsoft.active, +.open > .dropdown-toggle.btn-microsoft { + color: #fff; + background-color: #125acd; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-microsoft:active:hover, +.btn-microsoft.active:hover, +.open > .dropdown-toggle.btn-microsoft:hover, +.btn-microsoft:active:focus, +.btn-microsoft.active:focus, +.open > .dropdown-toggle.btn-microsoft:focus, +.btn-microsoft:active.focus, +.btn-microsoft.active.focus, +.open > .dropdown-toggle.btn-microsoft.focus { + color: #fff; + background-color: #0f4bac; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-microsoft:active, +.btn-microsoft.active, +.open > .dropdown-toggle.btn-microsoft { + background-image: none; +} +.btn-microsoft.disabled, +.btn-microsoft[disabled], +fieldset[disabled] .btn-microsoft, +.btn-microsoft.disabled:hover, +.btn-microsoft[disabled]:hover, +fieldset[disabled] .btn-microsoft:hover, +.btn-microsoft.disabled:focus, +.btn-microsoft[disabled]:focus, +fieldset[disabled] .btn-microsoft:focus, +.btn-microsoft.disabled.focus, +.btn-microsoft[disabled].focus, +fieldset[disabled] .btn-microsoft.focus, +.btn-microsoft.disabled:active, +.btn-microsoft[disabled]:active, +fieldset[disabled] .btn-microsoft:active, +.btn-microsoft.disabled.active, +.btn-microsoft[disabled].active, +fieldset[disabled] .btn-microsoft.active { + background-color: #2672ec; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-microsoft .badge { + color: #2672ec; + background-color: #fff; +} +.btn-openid { + color: #fff; + background-color: #f7931e; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-openid:focus, +.btn-openid.focus { + color: #fff; + background-color: #da7908; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-openid:hover { + color: #fff; + background-color: #da7908; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-openid:active, +.btn-openid.active, +.open > .dropdown-toggle.btn-openid { + color: #fff; + background-color: #da7908; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-openid:active:hover, +.btn-openid.active:hover, +.open > .dropdown-toggle.btn-openid:hover, +.btn-openid:active:focus, +.btn-openid.active:focus, +.open > .dropdown-toggle.btn-openid:focus, +.btn-openid:active.focus, +.btn-openid.active.focus, +.open > .dropdown-toggle.btn-openid.focus { + color: #fff; + background-color: #b86607; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-openid:active, +.btn-openid.active, +.open > .dropdown-toggle.btn-openid { + background-image: none; +} +.btn-openid.disabled, +.btn-openid[disabled], +fieldset[disabled] .btn-openid, +.btn-openid.disabled:hover, +.btn-openid[disabled]:hover, +fieldset[disabled] .btn-openid:hover, +.btn-openid.disabled:focus, +.btn-openid[disabled]:focus, +fieldset[disabled] .btn-openid:focus, +.btn-openid.disabled.focus, +.btn-openid[disabled].focus, +fieldset[disabled] .btn-openid.focus, +.btn-openid.disabled:active, +.btn-openid[disabled]:active, +fieldset[disabled] .btn-openid:active, +.btn-openid.disabled.active, +.btn-openid[disabled].active, +fieldset[disabled] .btn-openid.active { + background-color: #f7931e; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-openid .badge { + color: #f7931e; + background-color: #fff; +} +.btn-pinterest { + color: #fff; + background-color: #cb2027; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-pinterest:focus, +.btn-pinterest.focus { + color: #fff; + background-color: #9f191f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-pinterest:hover { + color: #fff; + background-color: #9f191f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-pinterest:active, +.btn-pinterest.active, +.open > .dropdown-toggle.btn-pinterest { + color: #fff; + background-color: #9f191f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-pinterest:active:hover, +.btn-pinterest.active:hover, +.open > .dropdown-toggle.btn-pinterest:hover, +.btn-pinterest:active:focus, +.btn-pinterest.active:focus, +.open > .dropdown-toggle.btn-pinterest:focus, +.btn-pinterest:active.focus, +.btn-pinterest.active.focus, +.open > .dropdown-toggle.btn-pinterest.focus { + color: #fff; + background-color: #801419; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-pinterest:active, +.btn-pinterest.active, +.open > .dropdown-toggle.btn-pinterest { + background-image: none; +} +.btn-pinterest.disabled, +.btn-pinterest[disabled], +fieldset[disabled] .btn-pinterest, +.btn-pinterest.disabled:hover, +.btn-pinterest[disabled]:hover, +fieldset[disabled] .btn-pinterest:hover, +.btn-pinterest.disabled:focus, +.btn-pinterest[disabled]:focus, +fieldset[disabled] .btn-pinterest:focus, +.btn-pinterest.disabled.focus, +.btn-pinterest[disabled].focus, +fieldset[disabled] .btn-pinterest.focus, +.btn-pinterest.disabled:active, +.btn-pinterest[disabled]:active, +fieldset[disabled] .btn-pinterest:active, +.btn-pinterest.disabled.active, +.btn-pinterest[disabled].active, +fieldset[disabled] .btn-pinterest.active { + background-color: #cb2027; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-pinterest .badge { + color: #cb2027; + background-color: #fff; +} +.btn-reddit { + color: #000; + background-color: #eff7ff; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-reddit:focus, +.btn-reddit.focus { + color: #000; + background-color: #bcddff; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-reddit:hover { + color: #000; + background-color: #bcddff; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-reddit:active, +.btn-reddit.active, +.open > .dropdown-toggle.btn-reddit { + color: #000; + background-color: #bcddff; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-reddit:active:hover, +.btn-reddit.active:hover, +.open > .dropdown-toggle.btn-reddit:hover, +.btn-reddit:active:focus, +.btn-reddit.active:focus, +.open > .dropdown-toggle.btn-reddit:focus, +.btn-reddit:active.focus, +.btn-reddit.active.focus, +.open > .dropdown-toggle.btn-reddit.focus { + color: #000; + background-color: #98ccff; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-reddit:active, +.btn-reddit.active, +.open > .dropdown-toggle.btn-reddit { + background-image: none; +} +.btn-reddit.disabled, +.btn-reddit[disabled], +fieldset[disabled] .btn-reddit, +.btn-reddit.disabled:hover, +.btn-reddit[disabled]:hover, +fieldset[disabled] .btn-reddit:hover, +.btn-reddit.disabled:focus, +.btn-reddit[disabled]:focus, +fieldset[disabled] .btn-reddit:focus, +.btn-reddit.disabled.focus, +.btn-reddit[disabled].focus, +fieldset[disabled] .btn-reddit.focus, +.btn-reddit.disabled:active, +.btn-reddit[disabled]:active, +fieldset[disabled] .btn-reddit:active, +.btn-reddit.disabled.active, +.btn-reddit[disabled].active, +fieldset[disabled] .btn-reddit.active { + background-color: #eff7ff; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-reddit .badge { + color: #eff7ff; + background-color: #000; +} +.btn-soundcloud { + color: #fff; + background-color: #ff5500; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-soundcloud:focus, +.btn-soundcloud.focus { + color: #fff; + background-color: #cc4400; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-soundcloud:hover { + color: #fff; + background-color: #cc4400; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-soundcloud:active, +.btn-soundcloud.active, +.open > .dropdown-toggle.btn-soundcloud { + color: #fff; + background-color: #cc4400; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-soundcloud:active:hover, +.btn-soundcloud.active:hover, +.open > .dropdown-toggle.btn-soundcloud:hover, +.btn-soundcloud:active:focus, +.btn-soundcloud.active:focus, +.open > .dropdown-toggle.btn-soundcloud:focus, +.btn-soundcloud:active.focus, +.btn-soundcloud.active.focus, +.open > .dropdown-toggle.btn-soundcloud.focus { + color: #fff; + background-color: #a83800; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-soundcloud:active, +.btn-soundcloud.active, +.open > .dropdown-toggle.btn-soundcloud { + background-image: none; +} +.btn-soundcloud.disabled, +.btn-soundcloud[disabled], +fieldset[disabled] .btn-soundcloud, +.btn-soundcloud.disabled:hover, +.btn-soundcloud[disabled]:hover, +fieldset[disabled] .btn-soundcloud:hover, +.btn-soundcloud.disabled:focus, +.btn-soundcloud[disabled]:focus, +fieldset[disabled] .btn-soundcloud:focus, +.btn-soundcloud.disabled.focus, +.btn-soundcloud[disabled].focus, +fieldset[disabled] .btn-soundcloud.focus, +.btn-soundcloud.disabled:active, +.btn-soundcloud[disabled]:active, +fieldset[disabled] .btn-soundcloud:active, +.btn-soundcloud.disabled.active, +.btn-soundcloud[disabled].active, +fieldset[disabled] .btn-soundcloud.active { + background-color: #ff5500; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-soundcloud .badge { + color: #ff5500; + background-color: #fff; +} +.btn-tumblr { + color: #fff; + background-color: #2c4762; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-tumblr:focus, +.btn-tumblr.focus { + color: #fff; + background-color: #1c2d3f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-tumblr:hover { + color: #fff; + background-color: #1c2d3f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-tumblr:active, +.btn-tumblr.active, +.open > .dropdown-toggle.btn-tumblr { + color: #fff; + background-color: #1c2d3f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-tumblr:active:hover, +.btn-tumblr.active:hover, +.open > .dropdown-toggle.btn-tumblr:hover, +.btn-tumblr:active:focus, +.btn-tumblr.active:focus, +.open > .dropdown-toggle.btn-tumblr:focus, +.btn-tumblr:active.focus, +.btn-tumblr.active.focus, +.open > .dropdown-toggle.btn-tumblr.focus { + color: #fff; + background-color: #111c26; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-tumblr:active, +.btn-tumblr.active, +.open > .dropdown-toggle.btn-tumblr { + background-image: none; +} +.btn-tumblr.disabled, +.btn-tumblr[disabled], +fieldset[disabled] .btn-tumblr, +.btn-tumblr.disabled:hover, +.btn-tumblr[disabled]:hover, +fieldset[disabled] .btn-tumblr:hover, +.btn-tumblr.disabled:focus, +.btn-tumblr[disabled]:focus, +fieldset[disabled] .btn-tumblr:focus, +.btn-tumblr.disabled.focus, +.btn-tumblr[disabled].focus, +fieldset[disabled] .btn-tumblr.focus, +.btn-tumblr.disabled:active, +.btn-tumblr[disabled]:active, +fieldset[disabled] .btn-tumblr:active, +.btn-tumblr.disabled.active, +.btn-tumblr[disabled].active, +fieldset[disabled] .btn-tumblr.active { + background-color: #2c4762; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-tumblr .badge { + color: #2c4762; + background-color: #fff; +} +.btn-twitter { + color: #fff; + background-color: #55acee; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-twitter:focus, +.btn-twitter.focus { + color: #fff; + background-color: #2795e9; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-twitter:hover { + color: #fff; + background-color: #2795e9; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-twitter:active, +.btn-twitter.active, +.open > .dropdown-toggle.btn-twitter { + color: #fff; + background-color: #2795e9; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-twitter:active:hover, +.btn-twitter.active:hover, +.open > .dropdown-toggle.btn-twitter:hover, +.btn-twitter:active:focus, +.btn-twitter.active:focus, +.open > .dropdown-toggle.btn-twitter:focus, +.btn-twitter:active.focus, +.btn-twitter.active.focus, +.open > .dropdown-toggle.btn-twitter.focus { + color: #fff; + background-color: #1583d7; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-twitter:active, +.btn-twitter.active, +.open > .dropdown-toggle.btn-twitter { + background-image: none; +} +.btn-twitter.disabled, +.btn-twitter[disabled], +fieldset[disabled] .btn-twitter, +.btn-twitter.disabled:hover, +.btn-twitter[disabled]:hover, +fieldset[disabled] .btn-twitter:hover, +.btn-twitter.disabled:focus, +.btn-twitter[disabled]:focus, +fieldset[disabled] .btn-twitter:focus, +.btn-twitter.disabled.focus, +.btn-twitter[disabled].focus, +fieldset[disabled] .btn-twitter.focus, +.btn-twitter.disabled:active, +.btn-twitter[disabled]:active, +fieldset[disabled] .btn-twitter:active, +.btn-twitter.disabled.active, +.btn-twitter[disabled].active, +fieldset[disabled] .btn-twitter.active { + background-color: #55acee; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-twitter .badge { + color: #55acee; + background-color: #fff; +} +.btn-vimeo { + color: #fff; + background-color: #1ab7ea; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vimeo:focus, +.btn-vimeo.focus { + color: #fff; + background-color: #1295bf; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vimeo:hover { + color: #fff; + background-color: #1295bf; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vimeo:active, +.btn-vimeo.active, +.open > .dropdown-toggle.btn-vimeo { + color: #fff; + background-color: #1295bf; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vimeo:active:hover, +.btn-vimeo.active:hover, +.open > .dropdown-toggle.btn-vimeo:hover, +.btn-vimeo:active:focus, +.btn-vimeo.active:focus, +.open > .dropdown-toggle.btn-vimeo:focus, +.btn-vimeo:active.focus, +.btn-vimeo.active.focus, +.open > .dropdown-toggle.btn-vimeo.focus { + color: #fff; + background-color: #0f7b9f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vimeo:active, +.btn-vimeo.active, +.open > .dropdown-toggle.btn-vimeo { + background-image: none; +} +.btn-vimeo.disabled, +.btn-vimeo[disabled], +fieldset[disabled] .btn-vimeo, +.btn-vimeo.disabled:hover, +.btn-vimeo[disabled]:hover, +fieldset[disabled] .btn-vimeo:hover, +.btn-vimeo.disabled:focus, +.btn-vimeo[disabled]:focus, +fieldset[disabled] .btn-vimeo:focus, +.btn-vimeo.disabled.focus, +.btn-vimeo[disabled].focus, +fieldset[disabled] .btn-vimeo.focus, +.btn-vimeo.disabled:active, +.btn-vimeo[disabled]:active, +fieldset[disabled] .btn-vimeo:active, +.btn-vimeo.disabled.active, +.btn-vimeo[disabled].active, +fieldset[disabled] .btn-vimeo.active { + background-color: #1ab7ea; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vimeo .badge { + color: #1ab7ea; + background-color: #fff; +} +.btn-vk { + color: #fff; + background-color: #587ea3; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vk:focus, +.btn-vk.focus { + color: #fff; + background-color: #466482; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vk:hover { + color: #fff; + background-color: #466482; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vk:active, +.btn-vk.active, +.open > .dropdown-toggle.btn-vk { + color: #fff; + background-color: #466482; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vk:active:hover, +.btn-vk.active:hover, +.open > .dropdown-toggle.btn-vk:hover, +.btn-vk:active:focus, +.btn-vk.active:focus, +.open > .dropdown-toggle.btn-vk:focus, +.btn-vk:active.focus, +.btn-vk.active.focus, +.open > .dropdown-toggle.btn-vk.focus { + color: #fff; + background-color: #3a526b; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vk:active, +.btn-vk.active, +.open > .dropdown-toggle.btn-vk { + background-image: none; +} +.btn-vk.disabled, +.btn-vk[disabled], +fieldset[disabled] .btn-vk, +.btn-vk.disabled:hover, +.btn-vk[disabled]:hover, +fieldset[disabled] .btn-vk:hover, +.btn-vk.disabled:focus, +.btn-vk[disabled]:focus, +fieldset[disabled] .btn-vk:focus, +.btn-vk.disabled.focus, +.btn-vk[disabled].focus, +fieldset[disabled] .btn-vk.focus, +.btn-vk.disabled:active, +.btn-vk[disabled]:active, +fieldset[disabled] .btn-vk:active, +.btn-vk.disabled.active, +.btn-vk[disabled].active, +fieldset[disabled] .btn-vk.active { + background-color: #587ea3; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vk .badge { + color: #587ea3; + background-color: #fff; +} +.btn-yahoo { + color: #fff; + background-color: #720e9e; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-yahoo:focus, +.btn-yahoo.focus { + color: #fff; + background-color: #500a6f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-yahoo:hover { + color: #fff; + background-color: #500a6f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-yahoo:active, +.btn-yahoo.active, +.open > .dropdown-toggle.btn-yahoo { + color: #fff; + background-color: #500a6f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-yahoo:active:hover, +.btn-yahoo.active:hover, +.open > .dropdown-toggle.btn-yahoo:hover, +.btn-yahoo:active:focus, +.btn-yahoo.active:focus, +.open > .dropdown-toggle.btn-yahoo:focus, +.btn-yahoo:active.focus, +.btn-yahoo.active.focus, +.open > .dropdown-toggle.btn-yahoo.focus { + color: #fff; + background-color: #39074e; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-yahoo:active, +.btn-yahoo.active, +.open > .dropdown-toggle.btn-yahoo { + background-image: none; +} +.btn-yahoo.disabled, +.btn-yahoo[disabled], +fieldset[disabled] .btn-yahoo, +.btn-yahoo.disabled:hover, +.btn-yahoo[disabled]:hover, +fieldset[disabled] .btn-yahoo:hover, +.btn-yahoo.disabled:focus, +.btn-yahoo[disabled]:focus, +fieldset[disabled] .btn-yahoo:focus, +.btn-yahoo.disabled.focus, +.btn-yahoo[disabled].focus, +fieldset[disabled] .btn-yahoo.focus, +.btn-yahoo.disabled:active, +.btn-yahoo[disabled]:active, +fieldset[disabled] .btn-yahoo:active, +.btn-yahoo.disabled.active, +.btn-yahoo[disabled].active, +fieldset[disabled] .btn-yahoo.active { + background-color: #720e9e; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-yahoo .badge { + color: #720e9e; + background-color: #fff; +} +/* + * Plugin: Full Calendar + * --------------------- + */ +.fc-button { + background: #f4f4f4; + background-image: none; + color: #444; + border-color: #ddd; + border-bottom-color: #ddd; +} +.fc-button:hover, +.fc-button:active, +.fc-button.hover { + background-color: #e9e9e9; +} +.fc-header-title h2 { + font-size: 15px; + line-height: 1.6em; + color: #666; + margin-left: 10px; +} +.fc-header-right { + padding-right: 10px; +} +.fc-header-left { + padding-left: 10px; +} +.fc-widget-header { + background: #fafafa; +} +.fc-grid { + width: 100%; + border: 0; +} +.fc-widget-header:first-of-type, +.fc-widget-content:first-of-type { + border-left: 0; + border-right: 0; +} +.fc-widget-header:last-of-type, +.fc-widget-content:last-of-type { + border-right: 0; +} +.fc-toolbar { + padding: 10px; + margin: 0; +} +.fc-day-number { + font-size: 20px; + font-weight: 300; + padding-right: 10px; +} +.fc-color-picker { + list-style: none; + margin: 0; + padding: 0; +} +.fc-color-picker > li { + float: left; + font-size: 30px; + margin-right: 5px; + line-height: 30px; +} +.fc-color-picker > li .fa { + -webkit-transition: -webkit-transform linear 0.3s; + -moz-transition: -moz-transform linear 0.3s; + -o-transition: -o-transform linear 0.3s; + transition: transform linear 0.3s; +} +.fc-color-picker > li .fa:hover { + -webkit-transform: rotate(30deg); + -ms-transform: rotate(30deg); + -o-transform: rotate(30deg); + transform: rotate(30deg); +} +#add-new-event { + -webkit-transition: all linear 0.3s; + -o-transition: all linear 0.3s; + transition: all linear 0.3s; +} +.external-event { + padding: 5px 10px; + font-weight: bold; + margin-bottom: 4px; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + border-radius: 3px; + cursor: move; +} +.external-event:hover { + box-shadow: inset 0 0 90px rgba(0, 0, 0, 0.2); +} +/* + * Plugin: Select2 + * --------------- + */ +.select2-container--default.select2-container--focus, +.select2-selection.select2-container--focus, +.select2-container--default:focus, +.select2-selection:focus, +.select2-container--default:active, +.select2-selection:active { + outline: none; +} +.select2-container--default .select2-selection--single, +.select2-selection .select2-selection--single { + border: 1px solid #d2d6de; + border-radius: 0; + padding: 6px 12px; + height: 34px; +} +.select2-container--default.select2-container--open { + border-color: #3c8dbc; +} +.select2-dropdown { + border: 1px solid #d2d6de; + border-radius: 0; +} +.select2-container--default .select2-results__option--highlighted[aria-selected] { + background-color: #3c8dbc; + color: white; +} +.select2-results__option { + padding: 6px 12px; + user-select: none; + -webkit-user-select: none; +} +.select2-container .select2-selection--single .select2-selection__rendered { + padding-left: 0; + padding-right: 0; + height: auto; + margin-top: -4px; +} +.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { + padding-right: 6px; + padding-left: 20px; +} +.select2-container--default .select2-selection--single .select2-selection__arrow { + height: 28px; + right: 3px; +} +.select2-container--default .select2-selection--single .select2-selection__arrow b { + margin-top: 0; +} +.select2-dropdown .select2-search__field, +.select2-search--inline .select2-search__field { + border: 1px solid #d2d6de; +} +.select2-dropdown .select2-search__field:focus, +.select2-search--inline .select2-search__field:focus { + outline: none; + border: 1px solid #3c8dbc; +} +.select2-container--default .select2-results__option[aria-disabled=true] { + color: #999; +} +.select2-container--default .select2-results__option[aria-selected=true] { + background-color: #ddd; +} +.select2-container--default .select2-results__option[aria-selected=true], +.select2-container--default .select2-results__option[aria-selected=true]:hover { + color: #444; +} +.select2-container--default .select2-selection--multiple { + border: 1px solid #d2d6de; + border-radius: 0; +} +.select2-container--default .select2-selection--multiple:focus { + border-color: #3c8dbc; +} +.select2-container--default.select2-container--focus .select2-selection--multiple { + border-color: #d2d6de; +} +.select2-container--default .select2-selection--multiple .select2-selection__choice { + background-color: #3c8dbc; + border-color: #367fa9; + padding: 1px 10px; + color: #fff; +} +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { + margin-right: 5px; + color: rgba(255, 255, 255, 0.7); +} +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #fff; +} +.select2-container .select2-selection--single .select2-selection__rendered { + padding-right: 10px; +} +/* + * General: Miscellaneous + * ---------------------- + */ +.pad { + padding: 10px; +} +.margin { + margin: 10px; +} +.margin-bottom { + margin-bottom: 20px; +} +.margin-bottom-none { + margin-bottom: 0; +} +.margin-r-5 { + margin-right: 5px; +} +.inline { + display: inline; +} +.description-block { + display: block; + margin: 10px 0; + text-align: center; +} +.description-block.margin-bottom { + margin-bottom: 25px; +} +.description-block > .description-header { + margin: 0; + padding: 0; + font-weight: 600; + font-size: 16px; +} +.description-block > .description-text { + text-transform: uppercase; +} +.bg-red, +.bg-yellow, +.bg-aqua, +.bg-blue, +.bg-light-blue, +.bg-green, +.bg-navy, +.bg-teal, +.bg-olive, +.bg-lime, +.bg-orange, +.bg-fuchsia, +.bg-purple, +.bg-maroon, +.bg-black, +.bg-red-active, +.bg-yellow-active, +.bg-aqua-active, +.bg-blue-active, +.bg-light-blue-active, +.bg-green-active, +.bg-navy-active, +.bg-teal-active, +.bg-olive-active, +.bg-lime-active, +.bg-orange-active, +.bg-fuchsia-active, +.bg-purple-active, +.bg-maroon-active, +.bg-black-active, +.callout.callout-danger, +.callout.callout-warning, +.callout.callout-info, +.callout.callout-success, +.alert-success, +.alert-danger, +.alert-error, +.alert-warning, +.alert-info, +.modal-primary .modal-body, +.modal-primary .modal-header, +.modal-primary .modal-footer, +.modal-warning .modal-body, +.modal-warning .modal-header, +.modal-warning .modal-footer, +.modal-info .modal-body, +.modal-info .modal-header, +.modal-info .modal-footer, +.modal-success .modal-body, +.modal-success .modal-header, +.modal-success .modal-footer, +.modal-danger .modal-body, +.modal-danger .modal-header, +.modal-danger .modal-footer { + color: #fff !important; +} +.bg-gray { + color: #000; + background-color: #d2d6de !important; +} +.bg-gray-light { + background-color: #f7f7f7; +} +.bg-black { + background-color: #111 !important; +} +.bg-red, +.callout.callout-danger, +.alert-danger, +.alert-error, +.modal-danger .modal-body { + background-color: #e74c3c !important; +} +.bg-yellow, +.callout.callout-warning, +.alert-warning, +.modal-warning .modal-body { + background-color: #f39c12 !important; +} +.bg-aqua, +.callout.callout-info, +.alert-info, +.modal-info .modal-body { + background-color: #3498db !important; +} +.bg-blue { + background-color: #0073b7 !important; +} +.bg-light-blue, +.modal-primary .modal-body { + background-color: #3c8dbc !important; +} +.bg-green, +.callout.callout-success, +.alert-success, +.modal-success .modal-body { + background-color: #18bc9c !important; +} +.bg-navy { + background-color: #001F3F !important; +} +.bg-teal { + background-color: #39CCCC !important; +} +.bg-olive { + background-color: #3D9970 !important; +} +.bg-lime { + background-color: #01FF70 !important; +} +.bg-orange { + background-color: #FF851B !important; +} +.bg-fuchsia { + background-color: #F012BE !important; +} +.bg-purple { + background-color: #605ca8 !important; +} +.bg-maroon { + background-color: #D81B60 !important; +} +.bg-gray-active { + color: #000; + background-color: #b5bbc8 !important; +} +.bg-black-active { + background-color: #000000 !important; +} +.bg-red-active, +.modal-danger .modal-header, +.modal-danger .modal-footer { + background-color: #e43321 !important; +} +.bg-yellow-active, +.modal-warning .modal-header, +.modal-warning .modal-footer { + background-color: #db8b0b !important; +} +.bg-aqua-active, +.modal-info .modal-header, +.modal-info .modal-footer { + background-color: #2489cc !important; +} +.bg-blue-active { + background-color: #005384 !important; +} +.bg-light-blue-active, +.modal-primary .modal-header, +.modal-primary .modal-footer { + background-color: #357ca5 !important; +} +.bg-green-active, +.modal-success .modal-header, +.modal-success .modal-footer { + background-color: #15a589 !important; +} +.bg-navy-active { + background-color: #001a35 !important; +} +.bg-teal-active { + background-color: #30bbbb !important; +} +.bg-olive-active { + background-color: #368763 !important; +} +.bg-lime-active { + background-color: #00e765 !important; +} +.bg-orange-active { + background-color: #ff7701 !important; +} +.bg-fuchsia-active { + background-color: #db0ead !important; +} +.bg-purple-active { + background-color: #555299 !important; +} +.bg-maroon-active { + background-color: #ca195a !important; +} +[class^="bg-"].disabled { + opacity: 0.65; + filter: alpha(opacity=65); +} +.text-red { + color: #e74c3c !important; +} +.text-yellow { + color: #f39c12 !important; +} +.text-aqua { + color: #3498db !important; +} +.text-blue { + color: #0073b7 !important; +} +.text-black { + color: #111 !important; +} +.text-light-blue { + color: #3c8dbc !important; +} +.text-green { + color: #18bc9c !important; +} +.text-gray { + color: #d2d6de !important; +} +.text-navy { + color: #001F3F !important; +} +.text-teal { + color: #39CCCC !important; +} +.text-olive { + color: #3D9970 !important; +} +.text-lime { + color: #01FF70 !important; +} +.text-orange { + color: #FF851B !important; +} +.text-fuchsia { + color: #F012BE !important; +} +.text-purple { + color: #605ca8 !important; +} +.text-maroon { + color: #D81B60 !important; +} +.link-muted { + color: #7a869d; +} +.link-muted:hover, +.link-muted:focus { + color: #606c84; +} +.link-black { + color: #666; +} +.link-black:hover, +.link-black:focus { + color: #999; +} +.hide { + display: none !important; +} +.no-border { + border: 0 !important; +} +.no-padding { + padding: 0 !important; +} +.no-margin { + margin: 0 !important; +} +.no-shadow { + box-shadow: none !important; +} +.list-unstyled, +.chart-legend, +.contacts-list, +.users-list, +.mailbox-attachments { + list-style: none; + margin: 0; + padding: 0; +} +.list-group-unbordered > .list-group-item { + border-left: 0; + border-right: 0; + border-radius: 0; + padding-left: 0; + padding-right: 0; +} +.flat { + border-radius: 0 !important; +} +.text-bold, +.text-bold.table td, +.text-bold.table th { + font-weight: 700; +} +.text-sm { + font-size: 12px; +} +.jqstooltip { + padding: 5px !important; + width: auto !important; + height: auto !important; +} +.bg-teal-gradient { + background: #39CCCC !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #39CCCC), color-stop(1, #7adddd)) !important; + background: -ms-linear-gradient(bottom, #39CCCC, #7adddd) !important; + background: -moz-linear-gradient(center bottom, #39CCCC 0%, #7adddd 100%) !important; + background: -o-linear-gradient(#7adddd, #39CCCC) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39CCCC', GradientType=0) !important; + color: #fff; +} +.bg-light-blue-gradient { + background: #3c8dbc !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #3c8dbc), color-stop(1, #67a8ce)) !important; + background: -ms-linear-gradient(bottom, #3c8dbc, #67a8ce) !important; + background: -moz-linear-gradient(center bottom, #3c8dbc 0%, #67a8ce 100%) !important; + background: -o-linear-gradient(#67a8ce, #3c8dbc) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important; + color: #fff; +} +.bg-blue-gradient { + background: #0073b7 !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #0073b7), color-stop(1, #0089db)) !important; + background: -ms-linear-gradient(bottom, #0073b7, #0089db) !important; + background: -moz-linear-gradient(center bottom, #0073b7 0%, #0089db 100%) !important; + background: -o-linear-gradient(#0089db, #0073b7) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important; + color: #fff; +} +.bg-aqua-gradient { + background: #3498db !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #3498db), color-stop(1, #52a7e0)) !important; + background: -ms-linear-gradient(bottom, #3498db, #52a7e0) !important; + background: -moz-linear-gradient(center bottom, #3498db 0%, #52a7e0 100%) !important; + background: -o-linear-gradient(#52a7e0, #3498db) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#52a7e0', endColorstr='#3498db', GradientType=0) !important; + color: #fff; +} +.bg-yellow-gradient { + background: #f39c12 !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #f39c12), color-stop(1, #f7bc60)) !important; + background: -ms-linear-gradient(bottom, #f39c12, #f7bc60) !important; + background: -moz-linear-gradient(center bottom, #f39c12 0%, #f7bc60 100%) !important; + background: -o-linear-gradient(#f7bc60, #f39c12) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important; + color: #fff; +} +.bg-purple-gradient { + background: #605ca8 !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #605ca8), color-stop(1, #9491c4)) !important; + background: -ms-linear-gradient(bottom, #605ca8, #9491c4) !important; + background: -moz-linear-gradient(center bottom, #605ca8 0%, #9491c4 100%) !important; + background: -o-linear-gradient(#9491c4, #605ca8) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important; + color: #fff; +} +.bg-green-gradient { + background: #18bc9c !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #18bc9c), color-stop(1, #1cdcb6)) !important; + background: -ms-linear-gradient(bottom, #18bc9c, #1cdcb6) !important; + background: -moz-linear-gradient(center bottom, #18bc9c 0%, #1cdcb6 100%) !important; + background: -o-linear-gradient(#1cdcb6, #18bc9c) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#1cdcb6', endColorstr='#18bc9c', GradientType=0) !important; + color: #fff; +} +.bg-red-gradient { + background: #e74c3c !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #e74c3c), color-stop(1, #ed7669)) !important; + background: -ms-linear-gradient(bottom, #e74c3c, #ed7669) !important; + background: -moz-linear-gradient(center bottom, #e74c3c 0%, #ed7669 100%) !important; + background: -o-linear-gradient(#ed7669, #e74c3c) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ed7669', endColorstr='#e74c3c', GradientType=0) !important; + color: #fff; +} +.bg-black-gradient { + background: #111 !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #111), color-stop(1, #2b2b2b)) !important; + background: -ms-linear-gradient(bottom, #111, #2b2b2b) !important; + background: -moz-linear-gradient(center bottom, #111 0%, #2b2b2b 100%) !important; + background: -o-linear-gradient(#2b2b2b, #111) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111', GradientType=0) !important; + color: #fff; +} +.bg-maroon-gradient { + background: #D81B60 !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #D81B60), color-stop(1, #e73f7c)) !important; + background: -ms-linear-gradient(bottom, #D81B60, #e73f7c) !important; + background: -moz-linear-gradient(center bottom, #D81B60 0%, #e73f7c 100%) !important; + background: -o-linear-gradient(#e73f7c, #D81B60) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#D81B60', GradientType=0) !important; + color: #fff; +} +.description-block .description-icon { + font-size: 16px; +} +.no-pad-top { + padding-top: 0; +} +.position-static { + position: static !important; +} +.list-header { + font-size: 15px; + padding: 10px 4px; + font-weight: bold; + color: #666; +} +.list-seperator { + height: 1px; + background: #f4f4f4; + margin: 15px 0 9px 0; +} +.list-link > a { + padding: 4px; + color: #777; +} +.list-link > a:hover { + color: #222; +} +.font-light { + font-weight: 300; +} +.user-block:before, +.user-block:after { + content: " "; + display: table; +} +.user-block:after { + clear: both; +} +.user-block:before, +.user-block:after { + content: " "; + display: table; +} +.user-block:after { + clear: both; +} +.user-block img { + width: 40px; + height: 40px; + float: left; +} +.user-block .username, +.user-block .description, +.user-block .comment { + display: block; + margin-left: 50px; +} +.user-block .username { + font-size: 16px; + font-weight: 600; +} +.user-block .description { + color: #999; + font-size: 13px; +} +.user-block.user-block-sm .username, +.user-block.user-block-sm .description, +.user-block.user-block-sm .comment { + margin-left: 40px; +} +.user-block.user-block-sm .username { + font-size: 14px; +} +.img-sm, +.img-md, +.img-lg, +.box-comments .box-comment img, +.user-block.user-block-sm img { + float: left; +} +.img-sm, +.box-comments .box-comment img, +.user-block.user-block-sm img { + width: 30px !important; + height: 30px !important; +} +.img-sm + .img-push { + margin-left: 40px; +} +.img-md { + width: 60px; + height: 60px; +} +.img-md + .img-push { + margin-left: 70px; +} +.img-lg { + width: 100px; + height: 100px; +} +.img-lg + .img-push { + margin-left: 110px; +} +.img-bordered { + border: 3px solid #d2d6de; + padding: 3px; +} +.img-bordered-sm { + border: 2px solid #d2d6de; + padding: 2px; +} +.attachment-block { + border: 1px solid #f4f4f4; + padding: 5px; + margin-bottom: 10px; + background: #f7f7f7; +} +.attachment-block .attachment-img { + max-width: 100px; + max-height: 100px; + height: auto; + float: left; +} +.attachment-block .attachment-pushed { + margin-left: 110px; +} +.attachment-block .attachment-heading { + margin: 0; +} +.attachment-block .attachment-text { + color: #555; +} +.connectedSortable { + min-height: 100px; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.sort-highlight { + background: #f4f4f4; + border: 1px dashed #ddd; + margin-bottom: 10px; +} +.full-opacity-hover { + opacity: 0.65; + filter: alpha(opacity=65); +} +.full-opacity-hover:hover { + opacity: 1; + filter: alpha(opacity=100); +} +.chart { + position: relative; + overflow: hidden; + width: 100%; +} +.chart svg, +.chart canvas { + width: 100% !important; +} +/* + * Misc: print + * ----------- + */ +@media print { + .no-print, + .main-sidebar, + .left-side, + .main-header, + .content-header { + display: none !important; + } + .content-wrapper, + .right-side, + .main-footer { + margin-left: 0 !important; + min-height: 0 !important; + -webkit-transform: translate(0, 0) !important; + -ms-transform: translate(0, 0) !important; + -o-transform: translate(0, 0) !important; + transform: translate(0, 0) !important; + } + .fixed .content-wrapper, + .fixed .right-side { + padding-top: 0 !important; + } + .invoice { + width: 100%; + border: 0; + margin: 0; + padding: 0; + } + .invoice-col { + float: left; + width: 33.3333333%; + } + .table-responsive { + overflow: auto; + } + .table-responsive > .table tr th, + .table-responsive > .table tr td { + white-space: normal !important; + } +} +/*# sourceMappingURL=../css/fastadmin.css.map */ \ No newline at end of file diff --git a/addons/weliam_smartcity/web/resource/address/fastadmin.min.css b/addons/weliam_smartcity/web/resource/address/fastadmin.min.css new file mode 100644 index 0000000..d8e6243 --- /dev/null +++ b/addons/weliam_smartcity/web/resource/address/fastadmin.min.css @@ -0,0 +1 @@ +/*! * AdminLTE v2.3.7 * Author:Almsaeed Studio * Website:Almsaeed Studio * License:Open source - MIT * Please visit http://opensource.org/licenses/MIT for more information !*/ html,body{min-height:100%;}.layout-boxed html,.layout-boxed body{height:100%;}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:'Source Sans Pro','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:400;overflow-x:hidden;overflow-y:auto;}.wrapper{min-height:100%;position:relative;overflow:hidden;}.wrapper:before,.wrapper:after{content:" ";display:table;}.wrapper:after{clear:both;}.wrapper:before,.wrapper:after{content:" ";display:table;}.wrapper:after{clear:both;}.layout-boxed .wrapper{max-width:1250px;margin:0 auto;min-height:100%;box-shadow:0 0 8px rgba(0,0,0,0.5);position:relative;}.layout-boxed{background:url('../img/boxed-bg.jpg') repeat fixed;}.content-wrapper,.right-side,.main-footer{-webkit-transition:-webkit-transform 0.3s ease-in-out,margin 0.3s ease-in-out;-moz-transition:-moz-transform 0.3s ease-in-out,margin 0.3s ease-in-out;-o-transition:-o-transform 0.3s ease-in-out,margin 0.3s ease-in-out;transition:transform 0.3s ease-in-out,margin 0.3s ease-in-out;margin-left:230px;z-index:820;}.layout-top-nav .content-wrapper,.layout-top-nav .right-side,.layout-top-nav .main-footer{margin-left:0;}@media (max-width:767px){.content-wrapper,.right-side,.main-footer{margin-left:0;}}@media (min-width:768px){.sidebar-collapse .content-wrapper,.sidebar-collapse .right-side,.sidebar-collapse .main-footer{margin-left:0;}}@media (max-width:767px){.sidebar-open .content-wrapper,.sidebar-open .right-side,.sidebar-open .main-footer{-webkit-transform:translate(230px,0);-ms-transform:translate(230px,0);-o-transform:translate(230px,0);transform:translate(230px,0);}}.content-wrapper,.right-side{min-height:100%;background-color:#ecf0f5;z-index:800;}.main-footer{background:#fff;padding:15px;color:#444;border-top:1px solid #d2d6de;}.fixed .main-header,.fixed .main-sidebar,.fixed .left-side{position:fixed;}.fixed .main-header{top:0;right:0;left:0;}.fixed .content-wrapper,.fixed .right-side{padding-top:50px;}@media (max-width:767px){.fixed .content-wrapper,.fixed .right-side{padding-top:100px;}}.fixed.layout-boxed .wrapper{max-width:100%;}body.hold-transition .content-wrapper,body.hold-transition .right-side,body.hold-transition .main-footer,body.hold-transition .main-sidebar,body.hold-transition .left-side,body.hold-transition .main-header .navbar,body.hold-transition .main-header .logo{-webkit-transition:none;-o-transition:none;transition:none;}.content{min-height:250px;padding:15px;margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px;}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:'Source Sans Pro',sans-serif;}a{color:#3c8dbc;}a:hover,a:active,a:focus{outline:none;text-decoration:none;color:#72afd2;}.page-header{margin:10px 0 20px 0;font-size:22px;}.page-header > small{color:#666;display:block;margin-top:5px;}.main-header{position:relative;max-height:100px;z-index:1030;}.main-header .navbar{-webkit-transition:margin-left 0.3s ease-in-out;-o-transition:margin-left 0.3s ease-in-out;transition:margin-left 0.3s ease-in-out;margin-bottom:0;margin-left:230px;border:none;min-height:50px;border-radius:0;}.layout-top-nav .main-header .navbar{margin-left:0;}.main-header #navbar-search-input.form-control{background:rgba(255,255,255,0.2);border-color:transparent;}.main-header #navbar-search-input.form-control:focus,.main-header #navbar-search-input.form-control:active{border-color:rgba(0,0,0,0.1);background:rgba(255,255,255,0.9);}.main-header #navbar-search-input.form-control::-moz-placeholder{color:#ccc;opacity:1;}.main-header #navbar-search-input.form-control:-ms-input-placeholder{color:#ccc;}.main-header #navbar-search-input.form-control::-webkit-input-placeholder{color:#ccc;}.main-header .navbar-custom-menu,.main-header .navbar-right{float:right;}@media (max-width:991px){.main-header .navbar-custom-menu a,.main-header .navbar-right a{color:inherit;background:transparent;}}@media (max-width:767px){.main-header .navbar-right{float:none;}.navbar-collapse .main-header .navbar-right{margin:7.5px -15px;}.main-header .navbar-right > li{color:inherit;border:0;}}.main-header .sidebar-toggle{float:left;background-color:transparent;background-image:none;padding:16.5px 15px;font-family:fontAwesome;}.main-header .sidebar-toggle:before{content:"\f0c9";}.main-header .sidebar-toggle:hover{color:#fff;}.main-header .sidebar-toggle:focus,.main-header .sidebar-toggle:active{background:transparent;}.main-header .sidebar-toggle .icon-bar{display:none;}.main-header .navbar .nav > li.user > a > .fa,.main-header .navbar .nav > li.user > a > .glyphicon,.main-header .navbar .nav > li.user > a > .ion{margin-right:5px;}.main-header .navbar .nav > li > a > .label{position:absolute;top:9px;right:7px;text-align:center;font-size:9px;padding:2px 3px;line-height:.9;}.main-header .logo{-webkit-transition:width 0.3s ease-in-out;-o-transition:width 0.3s ease-in-out;transition:width 0.3s ease-in-out;display:block;float:left;height:50px;font-size:20px;line-height:50px;text-align:center;width:230px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;padding:0 15px;font-weight:300;overflow:hidden;}.main-header .logo .logo-lg{display:block;}.main-header .logo .logo-mini{display:none;}.main-header .navbar-brand{color:#fff;}.content-header{position:relative;padding:15px 15px 0 15px;}.content-header > h1{margin:0;font-size:24px;}.content-header > h1 > small{font-size:15px;display:inline-block;padding-left:4px;font-weight:300;}.content-header > .breadcrumb{float:right;background:transparent;margin-top:0;margin-bottom:0;font-size:12px;padding:7px 5px;position:absolute;top:15px;right:10px;border-radius:2px;}.content-header > .breadcrumb > li > a{color:#444;text-decoration:none;display:inline-block;}.content-header > .breadcrumb > li > a > .fa,.content-header > .breadcrumb > li > a > .glyphicon,.content-header > .breadcrumb > li > a > .ion{margin-right:5px;}.content-header > .breadcrumb > li + li:before{content:'>\00a0';}@media (max-width:991px){.content-header > .breadcrumb{position:relative;margin-top:5px;top:0;right:0;float:none;background:#d2d6de;padding-left:10px;}.content-header > .breadcrumb li:before{color:#97a0b3;}}.navbar-toggle{color:#fff;border:0;margin:0;padding:16.5px 15px;}@media (max-width:991px){.navbar-custom-menu .navbar-nav > li{float:left;}.navbar-custom-menu .navbar-nav{margin:0;float:left;}.navbar-custom-menu .navbar-nav > li > a{padding-top:15px;padding-bottom:15px;line-height:20px;}}@media (max-width:767px){.main-header{position:relative;}.main-header .logo,.main-header .navbar{width:100%;float:none;}.main-header .navbar{margin:0;}.main-header .navbar-custom-menu{float:right;}}@media (max-width:991px){.navbar-collapse.pull-left{float:none !important;}.navbar-collapse.pull-left + .navbar-custom-menu{display:block;position:absolute;top:0;right:40px;}}.main-sidebar,.left-side{position:absolute;top:0;left:0;padding-top:50px;min-height:100%;width:230px;z-index:810;-webkit-transition:-webkit-transform 0.3s ease-in-out,width 0.3s ease-in-out;-moz-transition:-moz-transform 0.3s ease-in-out,width 0.3s ease-in-out;-o-transition:-o-transform 0.3s ease-in-out,width 0.3s ease-in-out;transition:transform 0.3s ease-in-out,width 0.3s ease-in-out;}@media (max-width:767px){.main-sidebar,.left-side{padding-top:100px;}}@media (max-width:767px){.main-sidebar,.left-side{-webkit-transform:translate(-230px,0);-ms-transform:translate(-230px,0);-o-transform:translate(-230px,0);transform:translate(-230px,0);}}@media (min-width:768px){.sidebar-collapse .main-sidebar,.sidebar-collapse .left-side{-webkit-transform:translate(-230px,0);-ms-transform:translate(-230px,0);-o-transform:translate(-230px,0);transform:translate(-230px,0);}}@media (max-width:767px){.sidebar-open .main-sidebar,.sidebar-open .left-side{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0);}}.sidebar{padding-bottom:10px;}.sidebar-form input:focus{border-color:transparent;}.user-panel{position:relative;width:100%;padding:10px;overflow:hidden;}.user-panel:before,.user-panel:after{content:" ";display:table;}.user-panel:after{clear:both;}.user-panel:before,.user-panel:after{content:" ";display:table;}.user-panel:after{clear:both;}.user-panel > .image > img{width:100%;max-width:45px;height:auto;}.user-panel > .info{padding:5px 5px 5px 15px;line-height:1;position:absolute;left:55px;}.user-panel > .info > p{font-weight:600;margin-bottom:9px;}.user-panel > .info > a{text-decoration:none;padding-right:5px;margin-top:3px;font-size:11px;}.user-panel > .info > a > .fa,.user-panel > .info > a > .ion,.user-panel > .info > a > .glyphicon{margin-right:3px;}.sidebar-menu{list-style:none;margin:0;padding:0;}.sidebar-menu > li{position:relative;margin:0;padding:0;}.sidebar-menu > li > a{padding:12px 5px 12px 15px;display:block;}.sidebar-menu > li > a > .fa,.sidebar-menu > li > a > .glyphicon,.sidebar-menu > li > a > .ion{width:20px;}.sidebar-menu > li .label,.sidebar-menu > li .badge{margin-right:5px;}.sidebar-menu > li .badge{margin-top:3px;}.sidebar-menu li.header{padding:10px 25px 10px 15px;font-size:12px;}.sidebar-menu li > a > .fa-angle-left,.sidebar-menu li > a > .pull-right-container > .fa-angle-left{width:auto;height:auto;padding:0;margin-right:10px;}.sidebar-menu li.active > a > .fa-angle-left,.sidebar-menu li.active > a > .pull-right-container > .fa-angle-left{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg);}.sidebar-menu li.active > .treeview-menu{display:block;}.sidebar-menu .treeview-menu{display:none;list-style:none;padding:0;margin:0;padding-left:5px;}.sidebar-menu .treeview-menu .treeview-menu{padding-left:20px;}.sidebar-menu .treeview-menu > li{margin:0;}.sidebar-menu .treeview-menu > li > a{padding:12px 5px 12px 15px;display:block;font-size:12px;}.sidebar-menu .treeview-menu > li > a > .fa,.sidebar-menu .treeview-menu > li > a > .glyphicon,.sidebar-menu .treeview-menu > li > a > .ion{width:20px;}.sidebar-menu .treeview-menu > li > a > .pull-right-container > .fa-angle-left,.sidebar-menu .treeview-menu > li > a > .pull-right-container > .fa-angle-down,.sidebar-menu .treeview-menu > li > a > .fa-angle-left,.sidebar-menu .treeview-menu > li > a > .fa-angle-down{width:auto;}@media (min-width:768px){.sidebar-mini.sidebar-collapse .content-wrapper,.sidebar-mini.sidebar-collapse .right-side,.sidebar-mini.sidebar-collapse .main-footer{margin-left:50px !important;z-index:840;}.sidebar-mini.sidebar-collapse .main-sidebar{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0);width:50px !important;z-index:850;}.sidebar-mini.sidebar-collapse .sidebar-menu > li{position:relative;}.sidebar-mini.sidebar-collapse .sidebar-menu > li > a{margin-right:0;}.sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span{border-top-right-radius:4px;}.sidebar-mini.sidebar-collapse .sidebar-menu > li:not(.treeview) > a > span{border-bottom-right-radius:4px;}.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu{padding-top:5px;padding-bottom:5px;border-bottom-right-radius:4px;}.sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span:not(.pull-right),.sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu{display:block !important;position:absolute;width:180px;left:50px;}.sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span{top:0;margin-left:-3px;padding:12px 5px 12px 20px;background-color:inherit;}.sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container{float:right;width:auto!important;left:200px!important;top:10px!important;}.sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container > .label:not(:first-of-type){display:none;}.sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu{top:44px;margin-left:0;}.sidebar-mini.sidebar-collapse .main-sidebar .user-panel > .info,.sidebar-mini.sidebar-collapse .sidebar-form,.sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span,.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu,.sidebar-mini.sidebar-collapse .sidebar-menu > li > a > .pull-right,.sidebar-mini.sidebar-collapse .sidebar-menu li.header{display:none !important;-webkit-transform:translateZ(0);}.sidebar-mini.sidebar-collapse .main-header .logo{width:50px;}.sidebar-mini.sidebar-collapse .main-header .logo > .logo-mini{display:block;margin-left:-15px;margin-right:-15px;font-size:18px;}.sidebar-mini.sidebar-collapse .main-header .logo > .logo-lg{display:none;}.sidebar-mini.sidebar-collapse .main-header .navbar{margin-left:50px;}}.sidebar-menu,.main-sidebar .user-panel,.sidebar-menu > li.header{white-space:nowrap;overflow:hidden;}.sidebar-menu:hover{overflow:visible;}.sidebar-form,.sidebar-menu > li.header{overflow:hidden;text-overflow:clip;}.sidebar-menu li > a{position:relative;}.sidebar-menu li > a > .pull-right-container{position:absolute;right:10px;top:50%;margin-top:-7px;}.control-sidebar-bg{position:fixed;z-index:1000;bottom:0;}.control-sidebar-bg,.control-sidebar{top:0;right:-230px;width:230px;-webkit-transition:right 0.3s ease-in-out;-o-transition:right 0.3s ease-in-out;transition:right 0.3s ease-in-out;}.control-sidebar{position:absolute;padding-top:50px;z-index:1010;}@media (max-width:768px){.control-sidebar{padding-top:100px;}}.control-sidebar > .tab-content{padding:10px 15px;}.control-sidebar.control-sidebar-open,.control-sidebar.control-sidebar-open + .control-sidebar-bg{right:0;}.control-sidebar-open .control-sidebar-bg,.control-sidebar-open .control-sidebar{right:0;}@media (min-width:768px){.control-sidebar-open .content-wrapper,.control-sidebar-open .right-side,.control-sidebar-open .main-footer{margin-right:230px;}}.nav-tabs.control-sidebar-tabs > li:first-of-type > a,.nav-tabs.control-sidebar-tabs > li:first-of-type > a:hover,.nav-tabs.control-sidebar-tabs > li:first-of-type > a:focus{border-left-width:0;}.nav-tabs.control-sidebar-tabs > li > a{border-radius:0;}.nav-tabs.control-sidebar-tabs > li > a,.nav-tabs.control-sidebar-tabs > li > a:hover{border-top:none;border-right:none;border-left:1px solid transparent;border-bottom:1px solid transparent;}.nav-tabs.control-sidebar-tabs > li > a .icon{font-size:16px;}.nav-tabs.control-sidebar-tabs > li.active > a,.nav-tabs.control-sidebar-tabs > li.active > a:hover,.nav-tabs.control-sidebar-tabs > li.active > a:focus,.nav-tabs.control-sidebar-tabs > li.active > a:active{border-top:none;border-right:none;border-bottom:none;}@media (max-width:768px){.nav-tabs.control-sidebar-tabs{display:table;}.nav-tabs.control-sidebar-tabs > li{display:table-cell;}}.control-sidebar-heading{font-weight:400;font-size:16px;padding:10px 0;margin-bottom:10px;}.control-sidebar-subheading{display:block;font-weight:400;font-size:14px;}.control-sidebar-menu{list-style:none;padding:0;margin:0 -15px;}.control-sidebar-menu > li > a{display:block;padding:10px 15px;}.control-sidebar-menu > li > a:before,.control-sidebar-menu > li > a:after{content:" ";display:table;}.control-sidebar-menu > li > a:after{clear:both;}.control-sidebar-menu > li > a:before,.control-sidebar-menu > li > a:after{content:" ";display:table;}.control-sidebar-menu > li > a:after{clear:both;}.control-sidebar-menu > li > a > .control-sidebar-subheading{margin-top:0;}.control-sidebar-menu .menu-icon{float:left;width:35px;height:35px;border-radius:50%;text-align:center;line-height:35px;}.control-sidebar-menu .menu-info{margin-left:45px;margin-top:3px;}.control-sidebar-menu .menu-info > .control-sidebar-subheading{margin:0;}.control-sidebar-menu .menu-info > p{margin:0;font-size:11px;}.control-sidebar-menu .progress{margin:0;}.control-sidebar-dark{color:#b8c7ce;}.control-sidebar-dark,.control-sidebar-dark + .control-sidebar-bg{background:#222d32;}.control-sidebar-dark .nav-tabs.control-sidebar-tabs{border-bottom:#1c2529;}.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a{background:#181f23;color:#b8c7ce;}.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus{border-left-color:#141a1d;border-bottom-color:#141a1d;}.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:active{background:#1c2529;}.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover{color:#fff;}.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:active{background:#222d32;color:#fff;}.control-sidebar-dark .control-sidebar-heading,.control-sidebar-dark .control-sidebar-subheading{color:#fff;}.control-sidebar-dark .control-sidebar-menu > li > a:hover{background:#1e282c;}.control-sidebar-dark .control-sidebar-menu > li > a .menu-info > p{color:#b8c7ce;}.control-sidebar-light{color:#5e5e5e;}.control-sidebar-light,.control-sidebar-light + .control-sidebar-bg{background:#f9fafc;border-left:1px solid #d2d6de;}.control-sidebar-light .nav-tabs.control-sidebar-tabs{border-bottom:#d2d6de;}.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a{background:#e8ecf4;color:#444;}.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a,.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus{border-left-color:#d2d6de;border-bottom-color:#d2d6de;}.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:active{background:#eff1f7;}.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a,.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:active{background:#f9fafc;color:#111;}.control-sidebar-light .control-sidebar-heading,.control-sidebar-light .control-sidebar-subheading{color:#111;}.control-sidebar-light .control-sidebar-menu{margin-left:-14px;}.control-sidebar-light .control-sidebar-menu > li > a:hover{background:#f4f4f5;}.control-sidebar-light .control-sidebar-menu > li > a .menu-info > p{color:#5e5e5e;}.dropdown-menu{box-shadow:none;border-color:#eee;}.dropdown-menu > li > a{}.dropdown-menu > li > a > .glyphicon,.dropdown-menu > li > a > .fa,.dropdown-menu > li > a > .ion{margin-right:10px;}.dropdown-menu > li > a:hover{background-color:#e1e3e9;color:#333;}.dropdown-menu > .divider{background-color:#eee;}.navbar-nav > .notifications-menu > .dropdown-menu,.navbar-nav > .messages-menu > .dropdown-menu,.navbar-nav > .tasks-menu > .dropdown-menu{width:280px;padding:0 0 0 0;margin:0;top:100%;}.navbar-nav > .notifications-menu > .dropdown-menu > li,.navbar-nav > .messages-menu > .dropdown-menu > li,.navbar-nav > .tasks-menu > .dropdown-menu > li{position:relative;}.navbar-nav > .notifications-menu > .dropdown-menu > li.header,.navbar-nav > .messages-menu > .dropdown-menu > li.header,.navbar-nav > .tasks-menu > .dropdown-menu > li.header{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:#ffffff;padding:7px 10px;border-bottom:1px solid #f4f4f4;color:#444444;font-size:14px;}.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a,.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a,.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px;font-size:12px;background-color:#fff;padding:7px 10px;border-bottom:1px solid #eeeeee;color:#444 !important;text-align:center;}@media (max-width:991px){.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a,.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a,.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a{background:#fff !important;color:#444 !important;}}.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a:hover,.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a:hover,.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a:hover{text-decoration:none;font-weight:normal;}.navbar-nav > .notifications-menu > .dropdown-menu > li .menu,.navbar-nav > .messages-menu > .dropdown-menu > li .menu,.navbar-nav > .tasks-menu > .dropdown-menu > li .menu{max-height:200px;margin:0;padding:0;list-style:none;overflow-x:hidden;}.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a,.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a,.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a{display:block;white-space:nowrap;border-bottom:1px solid #f4f4f4;}.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a:hover,.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:hover,.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a:hover{background:#f4f4f4;text-decoration:none;}.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a{color:#444444;overflow:hidden;text-overflow:ellipsis;padding:10px;}.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .glyphicon,.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .fa,.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .ion{width:20px;}.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a{margin:0;padding:10px 10px;}.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > div > img{margin:auto 10px auto auto;width:40px;height:40px;}.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4{padding:0;margin:0 0 0 45px;color:#444444;font-size:15px;position:relative;}.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 > small{color:#999999;font-size:10px;position:absolute;top:0;right:0;}.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > p{margin:0 0 0 45px;font-size:12px;color:#888888;}.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:before,.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after{content:" ";display:table;}.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after{clear:both;}.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:before,.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after{content:" ";display:table;}.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after{clear:both;}.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a{padding:10px;}.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > h3{font-size:14px;padding:0;margin:0 0 10px 0;color:#666666;}.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > .progress{padding:0;margin:0;}.navbar-nav > .user-menu > .dropdown-menu{border-top-right-radius:0;border-top-left-radius:0;padding:1px 0 0 0;border-top-width:0;width:280px;}.navbar-nav > .user-menu > .dropdown-menu,.navbar-nav > .user-menu > .dropdown-menu > .user-body{border-bottom-right-radius:4px;border-bottom-left-radius:4px;}.navbar-nav > .user-menu > .dropdown-menu > li.user-header{height:175px;padding:10px;text-align:center;}.navbar-nav > .user-menu > .dropdown-menu > li.user-header > img{z-index:5;height:90px;width:90px;border:3px solid;border-color:transparent;border-color:rgba(255,255,255,0.2);}.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p{z-index:5;color:#fff;color:rgba(255,255,255,0.8);font-size:17px;margin-top:10px;}.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p > small{display:block;font-size:12px;}.navbar-nav > .user-menu > .dropdown-menu > .user-body{padding:15px;border-bottom:1px solid #f4f4f4;border-top:1px solid #dddddd;}.navbar-nav > .user-menu > .dropdown-menu > .user-body:before,.navbar-nav > .user-menu > .dropdown-menu > .user-body:after{content:" ";display:table;}.navbar-nav > .user-menu > .dropdown-menu > .user-body:after{clear:both;}.navbar-nav > .user-menu > .dropdown-menu > .user-body:before,.navbar-nav > .user-menu > .dropdown-menu > .user-body:after{content:" ";display:table;}.navbar-nav > .user-menu > .dropdown-menu > .user-body:after{clear:both;}.navbar-nav > .user-menu > .dropdown-menu > .user-body a{color:#444 !important;}@media (max-width:991px){.navbar-nav > .user-menu > .dropdown-menu > .user-body a{background:#fff !important;color:#444 !important;}}.navbar-nav > .user-menu > .dropdown-menu > .user-footer{background-color:#f9f9f9;padding:10px;}.navbar-nav > .user-menu > .dropdown-menu > .user-footer:before,.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after{content:" ";display:table;}.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after{clear:both;}.navbar-nav > .user-menu > .dropdown-menu > .user-footer:before,.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after{content:" ";display:table;}.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after{clear:both;}.navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default{color:#666666;}@media (max-width:991px){.navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default:hover{background-color:#f9f9f9;}}.navbar-nav > .user-menu .user-image{float:left;width:25px;height:25px;border-radius:50%;margin-right:10px;margin-top:-2px;}@media (max-width:767px){.navbar-nav > .user-menu .user-image{float:none;margin-right:0;margin-top:-8px;line-height:10px;}}.open:not(.dropup) > .animated-dropdown-menu{backface-visibility:visible !important;-webkit-animation:flipInX 0.7s both;-o-animation:flipInX 0.7s both;animation:flipInX 0.7s both;}@keyframes flipInX{0%{transform:perspective(400px) rotate3d(1,0,0,90deg);transition-timing-function:ease-in;opacity:0;}40%{transform:perspective(400px) rotate3d(1,0,0,-20deg);transition-timing-function:ease-in;}60%{transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1;}80%{transform:perspective(400px) rotate3d(1,0,0,-5deg);}100%{transform:perspective(400px);}}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-transition-timing-function:ease-in;opacity:0;}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-transition-timing-function:ease-in;}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1;}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);}100%{-webkit-transform:perspective(400px);}}.navbar-custom-menu > .navbar-nav > li{position:relative;}.navbar-custom-menu > .navbar-nav > li > .dropdown-menu{position:absolute;right:0;left:auto;}@media (max-width:991px){.navbar-custom-menu > .navbar-nav{float:right;}.navbar-custom-menu > .navbar-nav > li{position:static;}.navbar-custom-menu > .navbar-nav > li > .dropdown-menu{position:absolute;right:5%;left:auto;border:1px solid #ddd;background:#fff;}}.dropdown-submenu{position:relative;}.dropdown-submenu > .dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;border-radius:3px 0 3px 3px;}.dropdown-submenu:hover > .dropdown-menu{display:block;}.dropdown-submenu:hover > a:after{border-left-color:#fff;}.dropdown-submenu > a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#ccc;margin-top:5px;margin-right:-10px;}.dropdown-submenu.pull-left{float:none;}.dropdown-submenu.pull-left > .dropdown-menu{left:-100%;margin-left:10px;border-radius:3px 0 3px 3px;}.form-control{border-radius:0;box-shadow:none;border-color:#d2d6de;-webkit-appearance:none;-moz-appearance:none;appearance:none;}.form-control:focus{border-color:#3c8dbc;box-shadow:none;}.form-control::-moz-placeholder,.form-control:-ms-input-placeholder,.form-control::-webkit-input-placeholder{color:#bbb;opacity:1;}.form-control .btn{border-radius:0;}select.form-control{-webkit-appearance:none;-webkit-border-radius:0px;background-position:right 50%;background-repeat:no-repeat;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAMCAYAAABSgIzaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDZFNDEwNjlGNzFEMTFFMkJEQ0VDRTM1N0RCMzMyMkIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDZFNDEwNkFGNzFEMTFFMkJEQ0VDRTM1N0RCMzMyMkIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NkU0MTA2N0Y3MUQxMUUyQkRDRUNFMzU3REIzMzIyQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NkU0MTA2OEY3MUQxMUUyQkRDRUNFMzU3REIzMzIyQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuGsgwQAAAA5SURBVHjaYvz//z8DOYCJgUxAf42MQIzTk0D/M+KzkRGPoQSdykiKJrBGpOhgJFYTWNEIiEeAAAMAzNENEOH+do8AAAAASUVORK5CYII=);}.form-group.has-success label{color:#18bc9c;}.form-group.has-success .form-control,.form-group.has-success .input-group-addon{border-color:#18bc9c;box-shadow:none;}.form-group.has-success .help-block{color:#18bc9c;}.form-group.has-warning label{color:#f39c12;}.form-group.has-warning .form-control,.form-group.has-warning .input-group-addon{border-color:#f39c12;box-shadow:none;}.form-group.has-warning .help-block{color:#f39c12;}.form-group.has-error label{color:#e74c3c;}.form-group.has-error .form-control,.form-group.has-error .input-group-addon{border-color:#e74c3c;box-shadow:none;}.form-group.has-error .help-block{color:#e74c3c;}.input-group .input-group-addon{border-radius:0;border-color:#d2d6de;background-color:#fff;}.btn-group-vertical .btn.btn-flat:first-of-type,.btn-group-vertical .btn.btn-flat:last-of-type{border-radius:0;}.icheck > label{padding-left:0;}.form-control-feedback.fa{line-height:31px;}.input-lg + .form-control-feedback.fa,.input-group-lg + .form-control-feedback.fa,.form-group-lg .form-control + .form-control-feedback.fa{line-height:42px;}.input-sm + .form-control-feedback.fa,.input-group-sm + .form-control-feedback.fa,.form-group-sm .form-control + .form-control-feedback.fa{line-height:28px;}.progress,.progress > .progress-bar{-webkit-box-shadow:none;box-shadow:none;}.progress,.progress > .progress-bar,.progress .progress-bar,.progress > .progress-bar .progress-bar{border-radius:1px;}.progress.sm,.progress-sm{height:10px;}.progress.sm,.progress-sm,.progress.sm .progress-bar,.progress-sm .progress-bar{border-radius:1px;}.progress.xs,.progress-xs{height:7px;}.progress.xs,.progress-xs,.progress.xs .progress-bar,.progress-xs .progress-bar{border-radius:1px;}.progress.xxs,.progress-xxs{height:3px;}.progress.xxs,.progress-xxs,.progress.xxs .progress-bar,.progress-xxs .progress-bar{border-radius:1px;}.progress.vertical{position:relative;width:30px;height:200px;display:inline-block;margin-right:10px;}.progress.vertical > .progress-bar{width:100%;position:absolute;bottom:0;}.progress.vertical.sm,.progress.vertical.progress-sm{width:20px;}.progress.vertical.xs,.progress.vertical.progress-xs{width:10px;}.progress.vertical.xxs,.progress.vertical.progress-xxs{width:3px;}.progress-group .progress-text{font-weight:600;}.progress-group .progress-number{float:right;}.table tr > td .progress{margin:0;}.progress-bar-light-blue,.progress-bar-primary{background-color:#3c8dbc;}.progress-striped .progress-bar-light-blue,.progress-striped .progress-bar-primary{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);}.progress-bar-green,.progress-bar-success{background-color:#18bc9c;}.progress-striped .progress-bar-green,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);}.progress-bar-aqua,.progress-bar-info{background-color:#3498db;}.progress-striped .progress-bar-aqua,.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);}.progress-bar-yellow,.progress-bar-warning{background-color:#f39c12;}.progress-striped .progress-bar-yellow,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);}.progress-bar-red,.progress-bar-danger{background-color:#e74c3c;}.progress-striped .progress-bar-red,.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);}.small-box{border-radius:2px;position:relative;display:block;margin-bottom:20px;box-shadow:0 1px 1px rgba(0,0,0,0.1);}.small-box > .inner{padding:10px;}.small-box > .small-box-footer{position:relative;text-align:center;padding:3px 0;color:#fff;color:rgba(255,255,255,0.8);display:block;z-index:10;background:rgba(0,0,0,0.1);text-decoration:none;}.small-box > .small-box-footer:hover{color:#fff;background:rgba(0,0,0,0.15);}.small-box h3{font-size:38px;font-weight:bold;margin:0 0 10px 0;white-space:nowrap;padding:0;}.small-box p{font-size:15px;}.small-box p > small{display:block;color:#f9f9f9;font-size:13px;margin-top:5px;}.small-box h3,.small-box p{z-index:5;}.small-box .icon{-webkit-transition:all 0.3s linear;-o-transition:all 0.3s linear;transition:all 0.3s linear;position:absolute;top:-10px;right:10px;z-index:0;font-size:90px;color:rgba(0,0,0,0.15);}.small-box:hover{text-decoration:none;color:#f9f9f9;}.small-box:hover .icon{font-size:95px;}@media (max-width:767px){.small-box{text-align:center;}.small-box .icon{display:none;}.small-box p{font-size:12px;}}.box{position:relative;border-radius:3px;background:#ffffff;border-top:3px solid #d2d6de;margin-bottom:20px;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1);}.box.box-primary{border-top-color:#3c8dbc;}.box.box-info{border-top-color:#3498db;}.box.box-danger{border-top-color:#e74c3c;}.box.box-warning{border-top-color:#f39c12;}.box.box-success{border-top-color:#18bc9c;}.box.box-default{border-top-color:#d2d6de;}.box.collapsed-box .box-body,.box.collapsed-box .box-footer{display:none;}.box .nav-stacked > li{border-bottom:1px solid #f4f4f4;margin:0;}.box .nav-stacked > li:last-of-type{border-bottom:none;}.box.height-control .box-body{max-height:300px;overflow:auto;}.box .border-right{border-right:1px solid #f4f4f4;}.box .border-left{border-left:1px solid #f4f4f4;}.box.box-solid{border-top:0;}.box.box-solid > .box-header .btn.btn-default{background:transparent;}.box.box-solid > .box-header .btn:hover,.box.box-solid > .box-header a:hover{background:rgba(0,0,0,0.1);}.box.box-solid.box-default{border:1px solid #d2d6de;}.box.box-solid.box-default > .box-header{color:#444;background:#d2d6de;background-color:#d2d6de;}.box.box-solid.box-default > .box-header a,.box.box-solid.box-default > .box-header .btn{color:#444;}.box.box-solid.box-primary{border:1px solid #3c8dbc;}.box.box-solid.box-primary > .box-header{color:#fff;background:#3c8dbc;background-color:#3c8dbc;}.box.box-solid.box-primary > .box-header a,.box.box-solid.box-primary > .box-header .btn{color:#fff;}.box.box-solid.box-info{border:1px solid #3498db;}.box.box-solid.box-info > .box-header{color:#fff;background:#3498db;background-color:#3498db;}.box.box-solid.box-info > .box-header a,.box.box-solid.box-info > .box-header .btn{color:#fff;}.box.box-solid.box-danger{border:1px solid #e74c3c;}.box.box-solid.box-danger > .box-header{color:#fff;background:#e74c3c;background-color:#e74c3c;}.box.box-solid.box-danger > .box-header a,.box.box-solid.box-danger > .box-header .btn{color:#fff;}.box.box-solid.box-warning{border:1px solid #f39c12;}.box.box-solid.box-warning > .box-header{color:#fff;background:#f39c12;background-color:#f39c12;}.box.box-solid.box-warning > .box-header a,.box.box-solid.box-warning > .box-header .btn{color:#fff;}.box.box-solid.box-success{border:1px solid #18bc9c;}.box.box-solid.box-success > .box-header{color:#fff;background:#18bc9c;background-color:#18bc9c;}.box.box-solid.box-success > .box-header a,.box.box-solid.box-success > .box-header .btn{color:#fff;}.box.box-solid > .box-header > .box-tools .btn{border:0;box-shadow:none;}.box.box-solid[class*='bg'] > .box-header{color:#fff;}.box .box-group > .box{margin-bottom:5px;}.box .knob-label{text-align:center;color:#333;font-weight:100;font-size:12px;margin-bottom:0.3em;}.box > .overlay,.overlay-wrapper > .overlay,.box > .loading-img,.overlay-wrapper > .loading-img{position:absolute;top:0;left:0;width:100%;height:100%;}.box .overlay,.overlay-wrapper .overlay{z-index:50;background:rgba(255,255,255,0.7);border-radius:3px;}.box .overlay > .fa,.overlay-wrapper .overlay > .fa{position:absolute;top:50%;left:50%;margin-left:-15px;margin-top:-15px;color:#000;font-size:30px;}.box .overlay.dark,.overlay-wrapper .overlay.dark{background:rgba(0,0,0,0.5);}.box-header:before,.box-body:before,.box-footer:before,.box-header:after,.box-body:after,.box-footer:after{content:" ";display:table;}.box-header:after,.box-body:after,.box-footer:after{clear:both;}.box-header:before,.box-body:before,.box-footer:before,.box-header:after,.box-body:after,.box-footer:after{content:" ";display:table;}.box-header:after,.box-body:after,.box-footer:after{clear:both;}.box-header{color:#444;display:block;padding:10px;position:relative;}.box-header.with-border{border-bottom:1px solid #f4f4f4;}.collapsed-box .box-header.with-border{border-bottom:none;}.box-header > .fa,.box-header > .glyphicon,.box-header > .ion,.box-header .box-title{display:inline-block;font-size:18px;margin:0;line-height:1;}.box-header > .fa,.box-header > .glyphicon,.box-header > .ion{margin-right:5px;}.box-header > .box-tools{position:absolute;right:10px;top:5px;}.box-header > .box-tools [data-toggle="tooltip"]{position:relative;}.box-header > .box-tools.pull-right .dropdown-menu{right:0;left:auto;}.btn-box-tool{padding:5px;font-size:12px;background:transparent;color:#97a0b3;}.open .btn-box-tool,.btn-box-tool:hover{color:#606c84;}.btn-box-tool.btn:active{box-shadow:none;}.box-body{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;padding:10px;}.no-header .box-body{border-top-right-radius:3px;border-top-left-radius:3px;}.box-body > .table{margin-bottom:0;}.box-body .fc{margin-top:5px;}.box-body .full-width-chart{margin:-19px;}.box-body.no-padding .full-width-chart{margin:-9px;}.box-body .box-pane{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:3px;}.box-body .box-pane-right{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:0;}.box-footer{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-top:1px solid #f4f4f4;padding:10px;background-color:#fff;}.chart-legend{margin:10px 0;}@media (max-width:991px){.chart-legend > li{float:left;margin-right:10px;}}.box-comments{background:#f7f7f7;}.box-comments .box-comment{padding:8px 0;border-bottom:1px solid #eee;}.box-comments .box-comment:before,.box-comments .box-comment:after{content:" ";display:table;}.box-comments .box-comment:after{clear:both;}.box-comments .box-comment:before,.box-comments .box-comment:after{content:" ";display:table;}.box-comments .box-comment:after{clear:both;}.box-comments .box-comment:last-of-type{border-bottom:0;}.box-comments .box-comment:first-of-type{padding-top:0;}.box-comments .box-comment img{float:left;}.box-comments .comment-text{margin-left:40px;color:#555;}.box-comments .username{color:#444;display:block;font-weight:600;}.box-comments .text-muted{font-weight:400;font-size:12px;}.todo-list{margin:0;padding:0;list-style:none;overflow:auto;}.todo-list > li{border-radius:2px;padding:10px;background:#f4f4f4;margin-bottom:2px;border-left:2px solid #e6e7e8;color:#444;}.todo-list > li:last-of-type{margin-bottom:0;}.todo-list > li > input[type='checkbox']{margin:0 10px 0 5px;}.todo-list > li .text{display:inline-block;margin-left:5px;font-weight:600;}.todo-list > li .label{margin-left:10px;font-size:9px;}.todo-list > li .tools{display:none;float:right;color:#e74c3c;}.todo-list > li .tools > .fa,.todo-list > li .tools > .glyphicon,.todo-list > li .tools > .ion{margin-right:5px;cursor:pointer;}.todo-list > li:hover .tools{display:inline-block;}.todo-list > li.done{color:#999;}.todo-list > li.done .text{text-decoration:line-through;font-weight:500;}.todo-list > li.done .label{background:#d2d6de !important;}.todo-list .danger{border-left-color:#e74c3c;}.todo-list .warning{border-left-color:#f39c12;}.todo-list .info{border-left-color:#3498db;}.todo-list .success{border-left-color:#18bc9c;}.todo-list .primary{border-left-color:#3c8dbc;}.todo-list .handle{display:inline-block;cursor:move;margin:0 5px;}.chat{padding:5px 20px 5px 10px;}.chat .item{margin-bottom:10px;}.chat .item:before,.chat .item:after{content:" ";display:table;}.chat .item:after{clear:both;}.chat .item:before,.chat .item:after{content:" ";display:table;}.chat .item:after{clear:both;}.chat .item > img{width:40px;height:40px;border:2px solid transparent;border-radius:50%;}.chat .item > .online{border:2px solid #18bc9c;}.chat .item > .offline{border:2px solid #e74c3c;}.chat .item > .message{margin-left:55px;margin-top:-40px;}.chat .item > .message > .name{display:block;font-weight:600;}.chat .item > .attachment{border-radius:3px;background:#f4f4f4;margin-left:65px;margin-right:15px;padding:10px;}.chat .item > .attachment > h4{margin:0 0 5px 0;font-weight:600;font-size:14px;}.chat .item > .attachment > p,.chat .item > .attachment > .filename{font-weight:600;font-size:13px;font-style:italic;margin:0;}.chat .item > .attachment:before,.chat .item > .attachment:after{content:" ";display:table;}.chat .item > .attachment:after{clear:both;}.chat .item > .attachment:before,.chat .item > .attachment:after{content:" ";display:table;}.chat .item > .attachment:after{clear:both;}.box-input{max-width:200px;}.modal .panel-body{color:#444;}.info-box{display:block;min-height:90px;background:#fff;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:2px;margin-bottom:15px;}.info-box small{font-size:14px;}.info-box .progress{background:rgba(0,0,0,0.2);margin:5px -10px 5px -10px;height:2px;}.info-box .progress,.info-box .progress .progress-bar{border-radius:0;}.info-box .progress .progress-bar{background:#fff;}.info-box-icon{border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px;display:block;float:left;height:90px;width:90px;text-align:center;font-size:45px;line-height:90px;background:rgba(0,0,0,0.2);}.info-box-icon > img{max-width:100%;}.info-box-content{padding:5px 10px;margin-left:90px;}.info-box-number{display:block;font-weight:bold;font-size:18px;}.progress-description,.info-box-text{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.info-box-text{text-transform:uppercase;}.info-box-more{display:block;}.progress-description{margin:0;}.timeline{position:relative;margin:0 0 30px 0;padding:0;list-style:none;}.timeline:before{content:'';position:absolute;top:0;bottom:0;width:4px;background:#ddd;left:31px;margin:0;border-radius:2px;}.timeline > li{position:relative;margin-right:10px;margin-bottom:15px;}.timeline > li:before,.timeline > li:after{content:" ";display:table;}.timeline > li:after{clear:both;}.timeline > li:before,.timeline > li:after{content:" ";display:table;}.timeline > li:after{clear:both;}.timeline > li > .timeline-item{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;margin-top:0;background:#fff;color:#444;margin-left:60px;margin-right:15px;padding:0;position:relative;}.timeline > li > .timeline-item > .time{color:#999;float:right;padding:10px;font-size:12px;}.timeline > li > .timeline-item > .timeline-header{margin:0;color:#555;border-bottom:1px solid #f4f4f4;padding:10px;font-size:16px;line-height:1.1;}.timeline > li > .timeline-item > .timeline-header > a{font-weight:600;}.timeline > li > .timeline-item > .timeline-body,.timeline > li > .timeline-item > .timeline-footer{padding:10px;}.timeline > li > .fa,.timeline > li > .glyphicon,.timeline > li > .ion{width:30px;height:30px;font-size:15px;line-height:30px;position:absolute;color:#666;background:#d2d6de;border-radius:50%;text-align:center;left:18px;top:0;}.timeline > .time-label > span{font-weight:600;padding:5px;display:inline-block;background-color:#fff;border-radius:4px;}.timeline-inverse > li > .timeline-item{background:#f0f0f0;border:1px solid #ddd;-webkit-box-shadow:none;box-shadow:none;}.timeline-inverse > li > .timeline-item > .timeline-header{border-bottom-color:#ddd;}.btn{-webkit-box-shadow:none;box-shadow:none;border:1px solid transparent;}.btn.uppercase{text-transform:uppercase;}.btn.btn-flat{border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border-width:1px;}.btn:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);}.btn:focus{outline:none;}.btn.btn-file{position:relative;overflow:hidden;}.btn.btn-file > input[type='file']{position:absolute;top:0;right:0;min-width:100%;min-height:100%;font-size:100px;text-align:right;opacity:0;filter:alpha(opacity=0);outline:none;background:white;cursor:inherit;display:block;}.btn-default{background-color:#f4f4f4;color:#444;border-color:#ddd;}.btn-default:hover,.btn-default:active,.btn-default.hover{background-color:#e7e7e7;}.btn-outline{border:1px solid #fff;background:transparent;color:#fff;}.btn-outline:hover,.btn-outline:focus,.btn-outline:active{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.7);}.btn-link{-webkit-box-shadow:none;box-shadow:none;}.btn[class*='bg-']:hover{-webkit-box-shadow:inset 0 0 100px rgba(0,0,0,0.2);box-shadow:inset 0 0 100px rgba(0,0,0,0.2);}.btn-app{border-radius:3px;position:relative;padding:15px 5px;margin:0 0 10px 10px;min-width:80px;height:60px;text-align:center;color:#666;border:1px solid #ddd;background-color:#f4f4f4;font-size:12px;}.btn-app > .fa,.btn-app > .glyphicon,.btn-app > .ion{font-size:20px;display:block;}.btn-app:hover{background:#f4f4f4;color:#444;border-color:#aaa;}.btn-app:active,.btn-app:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);}.btn-app > .badge{position:absolute;top:-3px;right:-10px;font-size:10px;font-weight:400;}.callout{border-radius:3px;margin:0 0 20px 0;padding:15px 30px 15px 15px;border-left:5px solid #eee;}.callout a{color:#fff;text-decoration:underline;}.callout a:hover{color:#eee;}.callout h4{margin-top:0;font-weight:600;}.callout p:last-child{margin-bottom:0;}.callout code,.callout .highlight{background-color:#fff;}.callout.callout-danger{border-color:#d62c1a;}.callout.callout-warning{border-color:#c87f0a;}.callout.callout-info{border-color:#217dbb;}.callout.callout-success{border-color:#128f76;}.alert{border-radius:3px;}.alert h4{font-weight:600;}.alert .icon{margin-right:10px;}.alert .close{color:#000;opacity:0.2;filter:alpha(opacity=20);}.alert .close:hover{opacity:0.5;filter:alpha(opacity=50);}.alert a{color:#fff;text-decoration:underline;}.alert-success{border-color:#15a589;}.alert-danger,.alert-error{border-color:#e43725;}.alert-warning{border-color:#e08e0b;}.alert-info{border-color:#258cd1;}.alert-primary-light{background-color:#E2E5E8;border-color:#D0D4D8;color:#85878A;}.alert-primary-light a{color:#787a7d;}.alert-success-light{background-color:#dff0d8;border-color:#d1eac8;color:#468847;}.alert-success-light a{color:#3d773e;}.alert-danger-light,.alert-error-light{background-color:#f2dede;border-color:#ebcdcd;color:#b94a48;}.alert-danger-light a,.alert-error-light a{color:#a74240;}.alert-warning-light{background-color:#fcf8e3;border-color:#faf3cd;color:#c09853;}.alert-warning-light a{color:#b78c43;}.alert-info-light{background-color:#d9edf7;border-color:#c6e4f3;color:#3a87ad;}.alert-info-light a{color:#34789a;}.nav > li > a:hover,.nav > li > a:active,.nav > li > a:focus{color:#444;background:#f7f7f7;}.nav-pills > li > a{border-radius:0;border-top:3px solid transparent;color:#444;}.nav-pills > li > a > .fa,.nav-pills > li > a > .glyphicon,.nav-pills > li > a > .ion{margin-right:5px;}.nav-pills > li.active > a,.nav-pills > li.active > a:hover,.nav-pills > li.active > a:focus{border-top-color:#3c8dbc;}.nav-pills > li.active > a{font-weight:600;}.nav-stacked > li > a{border-radius:0;border-top:0;border-left:3px solid transparent;color:#444;}.nav-stacked > li.active > a,.nav-stacked > li.active > a:hover{background:transparent;color:#444;border-top:0;border-left-color:#3c8dbc;}.nav-stacked > li.header{border-bottom:1px solid #ddd;color:#777;margin-bottom:10px;padding:5px 10px;text-transform:uppercase;}.nav-tabs-custom{margin-bottom:20px;background:#fff;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;}.nav-tabs-custom > .nav-tabs{margin:0;border-bottom-color:#f4f4f4;border-top-right-radius:3px;border-top-left-radius:3px;}.nav-tabs-custom > .nav-tabs > li{border-top:3px solid transparent;margin-bottom:-2px;margin-right:5px;}.nav-tabs-custom > .nav-tabs > li > a{color:#444;border-radius:0;}.nav-tabs-custom > .nav-tabs > li > a.text-muted{color:#999;}.nav-tabs-custom > .nav-tabs > li > a,.nav-tabs-custom > .nav-tabs > li > a:hover{background:transparent;margin:0;}.nav-tabs-custom > .nav-tabs > li > a:hover{color:#999;}.nav-tabs-custom > .nav-tabs > li:not(.active) > a:hover,.nav-tabs-custom > .nav-tabs > li:not(.active) > a:focus,.nav-tabs-custom > .nav-tabs > li:not(.active) > a:active{border-color:transparent;}.nav-tabs-custom > .nav-tabs > li.active{border-top-color:#3c8dbc;}.nav-tabs-custom > .nav-tabs > li.active > a,.nav-tabs-custom > .nav-tabs > li.active:hover > a{background-color:#fff;color:#444;}.nav-tabs-custom > .nav-tabs > li.active > a{border-top-color:transparent;border-left-color:#f4f4f4;border-right-color:#f4f4f4;}.nav-tabs-custom > .nav-tabs > li:first-of-type{margin-left:0;}.nav-tabs-custom > .nav-tabs > li:first-of-type.active > a{border-left-color:transparent;}.nav-tabs-custom > .nav-tabs.pull-right{float:none !important;}.nav-tabs-custom > .nav-tabs.pull-right > li{float:right;}.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type{margin-right:0;}.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type > a{border-left-width:1px;}.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type.active > a{border-left-color:#f4f4f4;border-right-color:transparent;}.nav-tabs-custom > .nav-tabs > li.header{line-height:35px;padding:0 10px;font-size:20px;color:#444;}.nav-tabs-custom > .nav-tabs > li.header > .fa,.nav-tabs-custom > .nav-tabs > li.header > .glyphicon,.nav-tabs-custom > .nav-tabs > li.header > .ion{margin-right:5px;}.nav-tabs-custom > .tab-content{background:#fff;padding:10px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;}.nav-tabs-custom .dropdown.open > a:active,.nav-tabs-custom .dropdown.open > a:focus{background:transparent;color:#999;}.nav-tabs-custom.tab-primary > .nav-tabs > li.active{border-top-color:#3c8dbc;}.nav-tabs-custom.tab-info > .nav-tabs > li.active{border-top-color:#3498db;}.nav-tabs-custom.tab-danger > .nav-tabs > li.active{border-top-color:#e74c3c;}.nav-tabs-custom.tab-warning > .nav-tabs > li.active{border-top-color:#f39c12;}.nav-tabs-custom.tab-success > .nav-tabs > li.active{border-top-color:#18bc9c;}.nav-tabs-custom.tab-default > .nav-tabs > li.active{border-top-color:#d2d6de;}.pagination > li > a{background:#fafafa;color:#666;}.pagination.pagination-flat > li > a{border-radius:0 !important;}.products-list{list-style:none;margin:0;padding:0;}.products-list > .item{border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);padding:10px 0;background:#fff;}.products-list > .item:before,.products-list > .item:after{content:" ";display:table;}.products-list > .item:after{clear:both;}.products-list > .item:before,.products-list > .item:after{content:" ";display:table;}.products-list > .item:after{clear:both;}.products-list .product-img{float:left;}.products-list .product-img img{width:50px;height:50px;}.products-list .product-info{margin-left:60px;}.products-list .product-title{font-weight:600;}.products-list .product-description{display:block;color:#999;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.product-list-in-box > .item{-webkit-box-shadow:none;box-shadow:none;border-radius:0;border-bottom:1px solid #f4f4f4;}.product-list-in-box > .item:last-of-type{border-bottom-width:0;}.table > thead > tr > th,.table > tbody > tr > th,.table > tfoot > tr > th,.table > thead > tr > td,.table > tbody > tr > td,.table > tfoot > tr > td{border-top:1px solid #f4f4f4;}.table > thead > tr > th{border-bottom:2px solid #f4f4f4;}.table tr td .progress{margin-top:5px;}.table-bordered{border:1px solid #f4f4f4;}.table-bordered > thead > tr > th,.table-bordered > tbody > tr > th,.table-bordered > tfoot > tr > th,.table-bordered > thead > tr > td,.table-bordered > tbody > tr > td,.table-bordered > tfoot > tr > td{border:1px solid #f4f4f4;}.table-bordered > thead > tr > th,.table-bordered > thead > tr > td{border-bottom-width:2px;}.table.no-border,.table.no-border td,.table.no-border th{border:0;}table.text-center,table.text-center td,table.text-center th{text-align:center;}.table.align th{text-align:left;}.table.align td{text-align:right;}.direct-chat .box-body{border-bottom-right-radius:0;border-bottom-left-radius:0;position:relative;overflow-x:hidden;padding:0;}.direct-chat.chat-pane-open .direct-chat-contacts{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0);}.direct-chat-messages{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0);padding:10px;height:250px;overflow:auto;}.direct-chat-msg,.direct-chat-text{display:block;}.direct-chat-msg{margin-bottom:10px;}.direct-chat-msg:before,.direct-chat-msg:after{content:" ";display:table;}.direct-chat-msg:after{clear:both;}.direct-chat-msg:before,.direct-chat-msg:after{content:" ";display:table;}.direct-chat-msg:after{clear:both;}.direct-chat-messages,.direct-chat-contacts{-webkit-transition:-webkit-transform 0.5s ease-in-out;-moz-transition:-moz-transform 0.5s ease-in-out;-o-transition:-o-transform 0.5s ease-in-out;transition:transform 0.5s ease-in-out;}.direct-chat-text{border-radius:5px;position:relative;padding:5px 10px;background:#d2d6de;border:1px solid #d2d6de;margin:5px 0 0 50px;color:#444;}.direct-chat-text:after,.direct-chat-text:before{position:absolute;right:100%;top:15px;border:solid transparent;border-right-color:#d2d6de;content:' ';height:0;width:0;pointer-events:none;}.direct-chat-text:after{border-width:5px;margin-top:-5px;}.direct-chat-text:before{border-width:6px;margin-top:-6px;}.right .direct-chat-text{margin-right:50px;margin-left:0;}.right .direct-chat-text:after,.right .direct-chat-text:before{right:auto;left:100%;border-right-color:transparent;border-left-color:#d2d6de;}.direct-chat-img{border-radius:50%;float:left;width:40px;height:40px;}.right .direct-chat-img{float:right;}.direct-chat-info{display:block;margin-bottom:2px;font-size:12px;}.direct-chat-name{font-weight:600;}.direct-chat-timestamp{color:#999;}.direct-chat-contacts-open .direct-chat-contacts{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0);}.direct-chat-contacts{-webkit-transform:translate(101%,0);-ms-transform:translate(101%,0);-o-transform:translate(101%,0);transform:translate(101%,0);position:absolute;top:0;bottom:0;height:250px;width:100%;background:#222d32;color:#fff;overflow:auto;}.contacts-list > li{border-bottom:1px solid rgba(0,0,0,0.2);padding:10px;margin:0;}.contacts-list > li:before,.contacts-list > li:after{content:" ";display:table;}.contacts-list > li:after{clear:both;}.contacts-list > li:before,.contacts-list > li:after{content:" ";display:table;}.contacts-list > li:after{clear:both;}.contacts-list > li:last-of-type{border-bottom:none;}.contacts-list-img{border-radius:50%;width:40px;float:left;}.contacts-list-info{margin-left:45px;color:#fff;}.contacts-list-name,.contacts-list-status{display:block;}.contacts-list-name{font-weight:600;}.contacts-list-status{font-size:12px;}.contacts-list-date{color:#aaa;font-weight:normal;}.contacts-list-msg{color:#999;}.direct-chat-danger .right > .direct-chat-text{background:#e74c3c;border-color:#e74c3c;color:#fff;}.direct-chat-danger .right > .direct-chat-text:after,.direct-chat-danger .right > .direct-chat-text:before{border-left-color:#e74c3c;}.direct-chat-primary .right > .direct-chat-text{background:#3c8dbc;border-color:#3c8dbc;color:#fff;}.direct-chat-primary .right > .direct-chat-text:after,.direct-chat-primary .right > .direct-chat-text:before{border-left-color:#3c8dbc;}.direct-chat-warning .right > .direct-chat-text{background:#f39c12;border-color:#f39c12;color:#fff;}.direct-chat-warning .right > .direct-chat-text:after,.direct-chat-warning .right > .direct-chat-text:before{border-left-color:#f39c12;}.direct-chat-info .right > .direct-chat-text{background:#3498db;border-color:#3498db;color:#fff;}.direct-chat-info .right > .direct-chat-text:after,.direct-chat-info .right > .direct-chat-text:before{border-left-color:#3498db;}.direct-chat-success .right > .direct-chat-text{background:#18bc9c;border-color:#18bc9c;color:#fff;}.direct-chat-success .right > .direct-chat-text:after,.direct-chat-success .right > .direct-chat-text:before{border-left-color:#18bc9c;}.users-list > li{width:25%;float:left;padding:10px;text-align:center;}.users-list > li img{border-radius:50%;max-width:100%;height:auto;}.users-list > li > a:hover,.users-list > li > a:hover .users-list-name{color:#999;}.users-list-name,.users-list-date{display:block;}.users-list-name{font-weight:600;color:#444;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.users-list-date{color:#999;font-size:12px;}.carousel-control.left,.carousel-control.right{background-image:none;}.carousel-control > .fa{font-size:40px;position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-20px;}.modal{background:rgba(0,0,0,0.3);}.modal-content{border-radius:0;-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125);border:0;}@media (min-width:768px){.modal-content{-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125);}}.modal-header{border-bottom-color:#f4f4f4;}.modal-footer{border-top-color:#f4f4f4;}.modal-primary .modal-header,.modal-primary .modal-footer{border-color:#307095;}.modal-warning .modal-header,.modal-warning .modal-footer{border-color:#c87f0a;}.modal-info .modal-header,.modal-info .modal-footer{border-color:#217dbb;}.modal-success .modal-header,.modal-success .modal-footer{border-color:#128f76;}.modal-danger .modal-header,.modal-danger .modal-footer{border-color:#d62c1a;}.box-widget{border:none;position:relative;}.widget-user .widget-user-header{padding:20px;height:120px;border-top-right-radius:3px;border-top-left-radius:3px;}.widget-user .widget-user-username{margin-top:0;margin-bottom:5px;font-size:25px;font-weight:300;text-shadow:0 1px 1px rgba(0,0,0,0.2);}.widget-user .widget-user-desc{margin-top:0;}.widget-user .widget-user-image{position:absolute;top:65px;left:50%;margin-left:-45px;}.widget-user .widget-user-image > img{width:90px;height:auto;border:3px solid #fff;}.widget-user .box-footer{padding-top:30px;}.widget-user-2 .widget-user-header{padding:20px;border-top-right-radius:3px;border-top-left-radius:3px;}.widget-user-2 .widget-user-username{margin-top:5px;margin-bottom:5px;font-size:25px;font-weight:300;}.widget-user-2 .widget-user-desc{margin-top:0;}.widget-user-2 .widget-user-username,.widget-user-2 .widget-user-desc{margin-left:75px;}.widget-user-2 .widget-user-image > img{width:65px;height:auto;float:left;}.close,.mailbox-attachment-close{float:right;font-size:18px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:0.2;filter:alpha(opacity=20);}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:0.5;filter:alpha(opacity=50);}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;}.clearfix:before,.clearfix:after,.content:before,.content:after{content:" ";display:table;}.clearfix:after,.content:after{clear:both;}.center-block{display:block;margin-left:auto;margin-right:auto;}.pull-right{float:right !important;}.pull-left{float:left !important;}.hide{display:none !important;}.show{display:block !important;}.invisible{visibility:hidden;}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;}.hidden{display:none !important;}.affix{position:fixed;}.mailbox-messages > .table{margin:0;}.mailbox-controls{padding:5px;}.mailbox-controls.with-border{border-bottom:1px solid #f4f4f4;}.mailbox-read-info{border-bottom:1px solid #f4f4f4;padding:10px;}.mailbox-read-info h3{font-size:20px;margin:0;}.mailbox-read-info h5{margin:0;padding:5px 0 0 0;}.mailbox-read-time{color:#999;font-size:13px;}.mailbox-read-message{padding:10px;}.mailbox-attachments li{float:left;width:200px;border:1px solid #eee;margin-bottom:10px;margin-right:10px;}.mailbox-attachment-name{font-weight:bold;color:#666;}.mailbox-attachment-icon,.mailbox-attachment-info,.mailbox-attachment-size{display:block;}.mailbox-attachment-info{padding:10px;background:#f4f4f4;}.mailbox-attachment-size{color:#999;font-size:12px;}.mailbox-attachment-icon{text-align:center;font-size:65px;color:#666;padding:20px 10px;}.mailbox-attachment-icon.has-img{padding:0;}.mailbox-attachment-icon.has-img > img{max-width:100%;height:auto;}.lockscreen{background:#d2d6de;}.lockscreen-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300;}.lockscreen-logo a{color:#444;}.lockscreen-wrapper{max-width:400px;margin:0 auto;margin-top:10%;}.lockscreen .lockscreen-name{text-align:center;font-weight:600;}.lockscreen-item{border-radius:4px;padding:0;background:#fff;position:relative;margin:10px auto 30px auto;width:290px;}.lockscreen-image{border-radius:50%;position:absolute;left:-10px;top:-25px;background:#fff;padding:5px;z-index:10;}.lockscreen-image > img{border-radius:50%;width:70px;height:70px;}.lockscreen-credentials{margin-left:70px;}.lockscreen-credentials .form-control{border:0;}.lockscreen-credentials .btn{background-color:#fff;border:0;padding:0 10px;}.lockscreen-footer{margin-top:10px;}.login-logo,.register-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300;}.login-logo a,.register-logo a{color:#444;}.login-page,.register-page{background:#d2d6de;}.login-box,.register-box{width:360px;margin:7% auto;}@media (max-width:768px){.login-box,.register-box{width:90%;margin-top:20px;}}.login-box-body,.register-box-body{background:#fff;padding:20px;border-top:0;color:#666;}.login-box-body .form-control-feedback,.register-box-body .form-control-feedback{color:#777;}.login-box-msg,.register-box-msg{margin:0;text-align:center;padding:0 20px 20px 20px;}.social-auth-links{margin:10px 0;}.error-page{width:600px;margin:20px auto 0 auto;}@media (max-width:991px){.error-page{width:100%;}}.error-page > .headline{float:left;font-size:100px;font-weight:300;}@media (max-width:991px){.error-page > .headline{float:none;text-align:center;}}.error-page > .error-content{margin-left:190px;display:block;}@media (max-width:991px){.error-page > .error-content{margin-left:0;}}.error-page > .error-content > h3{font-weight:300;font-size:25px;}@media (max-width:991px){.error-page > .error-content > h3{text-align:center;}}.invoice{position:relative;background:#fff;border:1px solid #f4f4f4;padding:20px;margin:10px 25px;}.invoice-title{margin-top:0;}.profile-user-img{margin:0 auto;width:100px;padding:3px;border:3px solid #d2d6de;}.profile-username{font-size:21px;margin-top:5px;}.post{border-bottom:1px solid #d2d6de;margin-bottom:15px;padding-bottom:15px;color:#666;}.post:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0;}.post .user-block{margin-bottom:15px;}/* * Social Buttons for Bootstrap * * Copyright 2013-2015 Panayiotis Lipiridis * Licensed under the MIT License * * https://github.com/lipis/bootstrap-social */ .btn-social{position:relative;padding-left:41px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.btn-social > :first-child{position:absolute;left:0;top:0;bottom:0;width:29px;line-height:31px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2);}.btn-social.btn-lg{padding-left:57px;}.btn-social.btn-lg > :first-child{line-height:41px;width:41px;font-size:1.8em;}.btn-social.btn-sm{padding-left:36px;}.btn-social.btn-sm > :first-child{line-height:26px;width:26px;font-size:1.4em;}.btn-social.btn-xs{padding-left:29px;}.btn-social.btn-xs > :first-child{line-height:19px;width:19px;font-size:1.2em;}.btn-social-icon{position:relative;padding-left:41px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:31px;width:31px;padding:0;}.btn-social-icon > :first-child{position:absolute;left:0;top:0;bottom:0;width:29px;line-height:31px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2);}.btn-social-icon.btn-lg{padding-left:57px;}.btn-social-icon.btn-lg > :first-child{line-height:41px;width:41px;font-size:1.8em;}.btn-social-icon.btn-sm{padding-left:36px;}.btn-social-icon.btn-sm > :first-child{line-height:26px;width:26px;font-size:1.4em;}.btn-social-icon.btn-xs{padding-left:29px;}.btn-social-icon.btn-xs > :first-child{line-height:19px;width:19px;font-size:1.2em;}.btn-social-icon > :first-child{border:none;text-align:center;width:100%;}.btn-social-icon.btn-lg{height:41px;width:41px;padding-left:0;padding-right:0;}.btn-social-icon.btn-sm{height:28px;width:28px;padding-left:0;padding-right:0;}.btn-social-icon.btn-xs{height:21px;width:21px;padding-left:0;padding-right:0;}.btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2);}.btn-adn:focus,.btn-adn.focus{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2);}.btn-adn:hover{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2);}.btn-adn:active,.btn-adn.active,.open > .dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2);}.btn-adn:active:hover,.btn-adn.active:hover,.open > .dropdown-toggle.btn-adn:hover,.btn-adn:active:focus,.btn-adn.active:focus,.open > .dropdown-toggle.btn-adn:focus,.btn-adn:active.focus,.btn-adn.active.focus,.open > .dropdown-toggle.btn-adn.focus{color:#fff;background-color:#b94630;border-color:rgba(0,0,0,0.2);}.btn-adn:active,.btn-adn.active,.open > .dropdown-toggle.btn-adn{background-image:none;}.btn-adn.disabled,.btn-adn[disabled],fieldset[disabled] .btn-adn,.btn-adn.disabled:hover,.btn-adn[disabled]:hover,fieldset[disabled] .btn-adn:hover,.btn-adn.disabled:focus,.btn-adn[disabled]:focus,fieldset[disabled] .btn-adn:focus,.btn-adn.disabled.focus,.btn-adn[disabled].focus,fieldset[disabled] .btn-adn.focus,.btn-adn.disabled:active,.btn-adn[disabled]:active,fieldset[disabled] .btn-adn:active,.btn-adn.disabled.active,.btn-adn[disabled].active,fieldset[disabled] .btn-adn.active{background-color:#d87a68;border-color:rgba(0,0,0,0.2);}.btn-adn .badge{color:#d87a68;background-color:#fff;}.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2);}.btn-bitbucket:focus,.btn-bitbucket.focus{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2);}.btn-bitbucket:hover{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2);}.btn-bitbucket:active,.btn-bitbucket.active,.open > .dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2);}.btn-bitbucket:active:hover,.btn-bitbucket.active:hover,.open > .dropdown-toggle.btn-bitbucket:hover,.btn-bitbucket:active:focus,.btn-bitbucket.active:focus,.open > .dropdown-toggle.btn-bitbucket:focus,.btn-bitbucket:active.focus,.btn-bitbucket.active.focus,.open > .dropdown-toggle.btn-bitbucket.focus{color:#fff;background-color:#0f253c;border-color:rgba(0,0,0,0.2);}.btn-bitbucket:active,.btn-bitbucket.active,.open > .dropdown-toggle.btn-bitbucket{background-image:none;}.btn-bitbucket.disabled,.btn-bitbucket[disabled],fieldset[disabled] .btn-bitbucket,.btn-bitbucket.disabled:hover,.btn-bitbucket[disabled]:hover,fieldset[disabled] .btn-bitbucket:hover,.btn-bitbucket.disabled:focus,.btn-bitbucket[disabled]:focus,fieldset[disabled] .btn-bitbucket:focus,.btn-bitbucket.disabled.focus,.btn-bitbucket[disabled].focus,fieldset[disabled] .btn-bitbucket.focus,.btn-bitbucket.disabled:active,.btn-bitbucket[disabled]:active,fieldset[disabled] .btn-bitbucket:active,.btn-bitbucket.disabled.active,.btn-bitbucket[disabled].active,fieldset[disabled] .btn-bitbucket.active{background-color:#205081;border-color:rgba(0,0,0,0.2);}.btn-bitbucket .badge{color:#205081;background-color:#fff;}.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2);}.btn-dropbox:focus,.btn-dropbox.focus{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2);}.btn-dropbox:hover{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2);}.btn-dropbox:active,.btn-dropbox.active,.open > .dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2);}.btn-dropbox:active:hover,.btn-dropbox.active:hover,.open > .dropdown-toggle.btn-dropbox:hover,.btn-dropbox:active:focus,.btn-dropbox.active:focus,.open > .dropdown-toggle.btn-dropbox:focus,.btn-dropbox:active.focus,.btn-dropbox.active.focus,.open > .dropdown-toggle.btn-dropbox.focus{color:#fff;background-color:#0a568c;border-color:rgba(0,0,0,0.2);}.btn-dropbox:active,.btn-dropbox.active,.open > .dropdown-toggle.btn-dropbox{background-image:none;}.btn-dropbox.disabled,.btn-dropbox[disabled],fieldset[disabled] .btn-dropbox,.btn-dropbox.disabled:hover,.btn-dropbox[disabled]:hover,fieldset[disabled] .btn-dropbox:hover,.btn-dropbox.disabled:focus,.btn-dropbox[disabled]:focus,fieldset[disabled] .btn-dropbox:focus,.btn-dropbox.disabled.focus,.btn-dropbox[disabled].focus,fieldset[disabled] .btn-dropbox.focus,.btn-dropbox.disabled:active,.btn-dropbox[disabled]:active,fieldset[disabled] .btn-dropbox:active,.btn-dropbox.disabled.active,.btn-dropbox[disabled].active,fieldset[disabled] .btn-dropbox.active{background-color:#1087dd;border-color:rgba(0,0,0,0.2);}.btn-dropbox .badge{color:#1087dd;background-color:#fff;}.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2);}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2);}.btn-facebook:hover{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2);}.btn-facebook:active,.btn-facebook.active,.open > .dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2);}.btn-facebook:active:hover,.btn-facebook.active:hover,.open > .dropdown-toggle.btn-facebook:hover,.btn-facebook:active:focus,.btn-facebook.active:focus,.open > .dropdown-toggle.btn-facebook:focus,.btn-facebook:active.focus,.btn-facebook.active.focus,.open > .dropdown-toggle.btn-facebook.focus{color:#fff;background-color:#23345a;border-color:rgba(0,0,0,0.2);}.btn-facebook:active,.btn-facebook.active,.open > .dropdown-toggle.btn-facebook{background-image:none;}.btn-facebook.disabled,.btn-facebook[disabled],fieldset[disabled] .btn-facebook,.btn-facebook.disabled:hover,.btn-facebook[disabled]:hover,fieldset[disabled] .btn-facebook:hover,.btn-facebook.disabled:focus,.btn-facebook[disabled]:focus,fieldset[disabled] .btn-facebook:focus,.btn-facebook.disabled.focus,.btn-facebook[disabled].focus,fieldset[disabled] .btn-facebook.focus,.btn-facebook.disabled:active,.btn-facebook[disabled]:active,fieldset[disabled] .btn-facebook:active,.btn-facebook.disabled.active,.btn-facebook[disabled].active,fieldset[disabled] .btn-facebook.active{background-color:#3b5998;border-color:rgba(0,0,0,0.2);}.btn-facebook .badge{color:#3b5998;background-color:#fff;}.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2);}.btn-flickr:focus,.btn-flickr.focus{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2);}.btn-flickr:hover{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2);}.btn-flickr:active,.btn-flickr.active,.open > .dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2);}.btn-flickr:active:hover,.btn-flickr.active:hover,.open > .dropdown-toggle.btn-flickr:hover,.btn-flickr:active:focus,.btn-flickr.active:focus,.open > .dropdown-toggle.btn-flickr:focus,.btn-flickr:active.focus,.btn-flickr.active.focus,.open > .dropdown-toggle.btn-flickr.focus{color:#fff;background-color:#a80057;border-color:rgba(0,0,0,0.2);}.btn-flickr:active,.btn-flickr.active,.open > .dropdown-toggle.btn-flickr{background-image:none;}.btn-flickr.disabled,.btn-flickr[disabled],fieldset[disabled] .btn-flickr,.btn-flickr.disabled:hover,.btn-flickr[disabled]:hover,fieldset[disabled] .btn-flickr:hover,.btn-flickr.disabled:focus,.btn-flickr[disabled]:focus,fieldset[disabled] .btn-flickr:focus,.btn-flickr.disabled.focus,.btn-flickr[disabled].focus,fieldset[disabled] .btn-flickr.focus,.btn-flickr.disabled:active,.btn-flickr[disabled]:active,fieldset[disabled] .btn-flickr:active,.btn-flickr.disabled.active,.btn-flickr[disabled].active,fieldset[disabled] .btn-flickr.active{background-color:#ff0084;border-color:rgba(0,0,0,0.2);}.btn-flickr .badge{color:#ff0084;background-color:#fff;}.btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2);}.btn-foursquare:focus,.btn-foursquare.focus{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2);}.btn-foursquare:hover{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2);}.btn-foursquare:active,.btn-foursquare.active,.open > .dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2);}.btn-foursquare:active:hover,.btn-foursquare.active:hover,.open > .dropdown-toggle.btn-foursquare:hover,.btn-foursquare:active:focus,.btn-foursquare.active:focus,.open > .dropdown-toggle.btn-foursquare:focus,.btn-foursquare:active.focus,.btn-foursquare.active.focus,.open > .dropdown-toggle.btn-foursquare.focus{color:#fff;background-color:#e30742;border-color:rgba(0,0,0,0.2);}.btn-foursquare:active,.btn-foursquare.active,.open > .dropdown-toggle.btn-foursquare{background-image:none;}.btn-foursquare.disabled,.btn-foursquare[disabled],fieldset[disabled] .btn-foursquare,.btn-foursquare.disabled:hover,.btn-foursquare[disabled]:hover,fieldset[disabled] .btn-foursquare:hover,.btn-foursquare.disabled:focus,.btn-foursquare[disabled]:focus,fieldset[disabled] .btn-foursquare:focus,.btn-foursquare.disabled.focus,.btn-foursquare[disabled].focus,fieldset[disabled] .btn-foursquare.focus,.btn-foursquare.disabled:active,.btn-foursquare[disabled]:active,fieldset[disabled] .btn-foursquare:active,.btn-foursquare.disabled.active,.btn-foursquare[disabled].active,fieldset[disabled] .btn-foursquare.active{background-color:#f94877;border-color:rgba(0,0,0,0.2);}.btn-foursquare .badge{color:#f94877;background-color:#fff;}.btn-github{color:#fff;background-color:#444444;border-color:rgba(0,0,0,0.2);}.btn-github:focus,.btn-github.focus{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2);}.btn-github:hover{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2);}.btn-github:active,.btn-github.active,.open > .dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2);}.btn-github:active:hover,.btn-github.active:hover,.open > .dropdown-toggle.btn-github:hover,.btn-github:active:focus,.btn-github.active:focus,.open > .dropdown-toggle.btn-github:focus,.btn-github:active.focus,.btn-github.active.focus,.open > .dropdown-toggle.btn-github.focus{color:#fff;background-color:#191919;border-color:rgba(0,0,0,0.2);}.btn-github:active,.btn-github.active,.open > .dropdown-toggle.btn-github{background-image:none;}.btn-github.disabled,.btn-github[disabled],fieldset[disabled] .btn-github,.btn-github.disabled:hover,.btn-github[disabled]:hover,fieldset[disabled] .btn-github:hover,.btn-github.disabled:focus,.btn-github[disabled]:focus,fieldset[disabled] .btn-github:focus,.btn-github.disabled.focus,.btn-github[disabled].focus,fieldset[disabled] .btn-github.focus,.btn-github.disabled:active,.btn-github[disabled]:active,fieldset[disabled] .btn-github:active,.btn-github.disabled.active,.btn-github[disabled].active,fieldset[disabled] .btn-github.active{background-color:#444444;border-color:rgba(0,0,0,0.2);}.btn-github .badge{color:#444444;background-color:#fff;}.btn-google{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2);}.btn-google:focus,.btn-google.focus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2);}.btn-google:hover{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2);}.btn-google:active,.btn-google.active,.open > .dropdown-toggle.btn-google{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2);}.btn-google:active:hover,.btn-google.active:hover,.open > .dropdown-toggle.btn-google:hover,.btn-google:active:focus,.btn-google.active:focus,.open > .dropdown-toggle.btn-google:focus,.btn-google:active.focus,.btn-google.active.focus,.open > .dropdown-toggle.btn-google.focus{color:#fff;background-color:#a32b1c;border-color:rgba(0,0,0,0.2);}.btn-google:active,.btn-google.active,.open > .dropdown-toggle.btn-google{background-image:none;}.btn-google.disabled,.btn-google[disabled],fieldset[disabled] .btn-google,.btn-google.disabled:hover,.btn-google[disabled]:hover,fieldset[disabled] .btn-google:hover,.btn-google.disabled:focus,.btn-google[disabled]:focus,fieldset[disabled] .btn-google:focus,.btn-google.disabled.focus,.btn-google[disabled].focus,fieldset[disabled] .btn-google.focus,.btn-google.disabled:active,.btn-google[disabled]:active,fieldset[disabled] .btn-google:active,.btn-google.disabled.active,.btn-google[disabled].active,fieldset[disabled] .btn-google.active{background-color:#dd4b39;border-color:rgba(0,0,0,0.2);}.btn-google .badge{color:#dd4b39;background-color:#fff;}.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2);}.btn-instagram:focus,.btn-instagram.focus{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2);}.btn-instagram:hover{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2);}.btn-instagram:active,.btn-instagram.active,.open > .dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2);}.btn-instagram:active:hover,.btn-instagram.active:hover,.open > .dropdown-toggle.btn-instagram:hover,.btn-instagram:active:focus,.btn-instagram.active:focus,.open > .dropdown-toggle.btn-instagram:focus,.btn-instagram:active.focus,.btn-instagram.active.focus,.open > .dropdown-toggle.btn-instagram.focus{color:#fff;background-color:#26455d;border-color:rgba(0,0,0,0.2);}.btn-instagram:active,.btn-instagram.active,.open > .dropdown-toggle.btn-instagram{background-image:none;}.btn-instagram.disabled,.btn-instagram[disabled],fieldset[disabled] .btn-instagram,.btn-instagram.disabled:hover,.btn-instagram[disabled]:hover,fieldset[disabled] .btn-instagram:hover,.btn-instagram.disabled:focus,.btn-instagram[disabled]:focus,fieldset[disabled] .btn-instagram:focus,.btn-instagram.disabled.focus,.btn-instagram[disabled].focus,fieldset[disabled] .btn-instagram.focus,.btn-instagram.disabled:active,.btn-instagram[disabled]:active,fieldset[disabled] .btn-instagram:active,.btn-instagram.disabled.active,.btn-instagram[disabled].active,fieldset[disabled] .btn-instagram.active{background-color:#3f729b;border-color:rgba(0,0,0,0.2);}.btn-instagram .badge{color:#3f729b;background-color:#fff;}.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2);}.btn-linkedin:focus,.btn-linkedin.focus{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2);}.btn-linkedin:hover{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2);}.btn-linkedin:active,.btn-linkedin.active,.open > .dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2);}.btn-linkedin:active:hover,.btn-linkedin.active:hover,.open > .dropdown-toggle.btn-linkedin:hover,.btn-linkedin:active:focus,.btn-linkedin.active:focus,.open > .dropdown-toggle.btn-linkedin:focus,.btn-linkedin:active.focus,.btn-linkedin.active.focus,.open > .dropdown-toggle.btn-linkedin.focus{color:#fff;background-color:#00405f;border-color:rgba(0,0,0,0.2);}.btn-linkedin:active,.btn-linkedin.active,.open > .dropdown-toggle.btn-linkedin{background-image:none;}.btn-linkedin.disabled,.btn-linkedin[disabled],fieldset[disabled] .btn-linkedin,.btn-linkedin.disabled:hover,.btn-linkedin[disabled]:hover,fieldset[disabled] .btn-linkedin:hover,.btn-linkedin.disabled:focus,.btn-linkedin[disabled]:focus,fieldset[disabled] .btn-linkedin:focus,.btn-linkedin.disabled.focus,.btn-linkedin[disabled].focus,fieldset[disabled] .btn-linkedin.focus,.btn-linkedin.disabled:active,.btn-linkedin[disabled]:active,fieldset[disabled] .btn-linkedin:active,.btn-linkedin.disabled.active,.btn-linkedin[disabled].active,fieldset[disabled] .btn-linkedin.active{background-color:#007bb6;border-color:rgba(0,0,0,0.2);}.btn-linkedin .badge{color:#007bb6;background-color:#fff;}.btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2);}.btn-microsoft:focus,.btn-microsoft.focus{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2);}.btn-microsoft:hover{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2);}.btn-microsoft:active,.btn-microsoft.active,.open > .dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2);}.btn-microsoft:active:hover,.btn-microsoft.active:hover,.open > .dropdown-toggle.btn-microsoft:hover,.btn-microsoft:active:focus,.btn-microsoft.active:focus,.open > .dropdown-toggle.btn-microsoft:focus,.btn-microsoft:active.focus,.btn-microsoft.active.focus,.open > .dropdown-toggle.btn-microsoft.focus{color:#fff;background-color:#0f4bac;border-color:rgba(0,0,0,0.2);}.btn-microsoft:active,.btn-microsoft.active,.open > .dropdown-toggle.btn-microsoft{background-image:none;}.btn-microsoft.disabled,.btn-microsoft[disabled],fieldset[disabled] .btn-microsoft,.btn-microsoft.disabled:hover,.btn-microsoft[disabled]:hover,fieldset[disabled] .btn-microsoft:hover,.btn-microsoft.disabled:focus,.btn-microsoft[disabled]:focus,fieldset[disabled] .btn-microsoft:focus,.btn-microsoft.disabled.focus,.btn-microsoft[disabled].focus,fieldset[disabled] .btn-microsoft.focus,.btn-microsoft.disabled:active,.btn-microsoft[disabled]:active,fieldset[disabled] .btn-microsoft:active,.btn-microsoft.disabled.active,.btn-microsoft[disabled].active,fieldset[disabled] .btn-microsoft.active{background-color:#2672ec;border-color:rgba(0,0,0,0.2);}.btn-microsoft .badge{color:#2672ec;background-color:#fff;}.btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2);}.btn-openid:focus,.btn-openid.focus{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2);}.btn-openid:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2);}.btn-openid:active,.btn-openid.active,.open > .dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2);}.btn-openid:active:hover,.btn-openid.active:hover,.open > .dropdown-toggle.btn-openid:hover,.btn-openid:active:focus,.btn-openid.active:focus,.open > .dropdown-toggle.btn-openid:focus,.btn-openid:active.focus,.btn-openid.active.focus,.open > .dropdown-toggle.btn-openid.focus{color:#fff;background-color:#b86607;border-color:rgba(0,0,0,0.2);}.btn-openid:active,.btn-openid.active,.open > .dropdown-toggle.btn-openid{background-image:none;}.btn-openid.disabled,.btn-openid[disabled],fieldset[disabled] .btn-openid,.btn-openid.disabled:hover,.btn-openid[disabled]:hover,fieldset[disabled] .btn-openid:hover,.btn-openid.disabled:focus,.btn-openid[disabled]:focus,fieldset[disabled] .btn-openid:focus,.btn-openid.disabled.focus,.btn-openid[disabled].focus,fieldset[disabled] .btn-openid.focus,.btn-openid.disabled:active,.btn-openid[disabled]:active,fieldset[disabled] .btn-openid:active,.btn-openid.disabled.active,.btn-openid[disabled].active,fieldset[disabled] .btn-openid.active{background-color:#f7931e;border-color:rgba(0,0,0,0.2);}.btn-openid .badge{color:#f7931e;background-color:#fff;}.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2);}.btn-pinterest:focus,.btn-pinterest.focus{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2);}.btn-pinterest:hover{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2);}.btn-pinterest:active,.btn-pinterest.active,.open > .dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2);}.btn-pinterest:active:hover,.btn-pinterest.active:hover,.open > .dropdown-toggle.btn-pinterest:hover,.btn-pinterest:active:focus,.btn-pinterest.active:focus,.open > .dropdown-toggle.btn-pinterest:focus,.btn-pinterest:active.focus,.btn-pinterest.active.focus,.open > .dropdown-toggle.btn-pinterest.focus{color:#fff;background-color:#801419;border-color:rgba(0,0,0,0.2);}.btn-pinterest:active,.btn-pinterest.active,.open > .dropdown-toggle.btn-pinterest{background-image:none;}.btn-pinterest.disabled,.btn-pinterest[disabled],fieldset[disabled] .btn-pinterest,.btn-pinterest.disabled:hover,.btn-pinterest[disabled]:hover,fieldset[disabled] .btn-pinterest:hover,.btn-pinterest.disabled:focus,.btn-pinterest[disabled]:focus,fieldset[disabled] .btn-pinterest:focus,.btn-pinterest.disabled.focus,.btn-pinterest[disabled].focus,fieldset[disabled] .btn-pinterest.focus,.btn-pinterest.disabled:active,.btn-pinterest[disabled]:active,fieldset[disabled] .btn-pinterest:active,.btn-pinterest.disabled.active,.btn-pinterest[disabled].active,fieldset[disabled] .btn-pinterest.active{background-color:#cb2027;border-color:rgba(0,0,0,0.2);}.btn-pinterest .badge{color:#cb2027;background-color:#fff;}.btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2);}.btn-reddit:focus,.btn-reddit.focus{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2);}.btn-reddit:hover{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2);}.btn-reddit:active,.btn-reddit.active,.open > .dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2);}.btn-reddit:active:hover,.btn-reddit.active:hover,.open > .dropdown-toggle.btn-reddit:hover,.btn-reddit:active:focus,.btn-reddit.active:focus,.open > .dropdown-toggle.btn-reddit:focus,.btn-reddit:active.focus,.btn-reddit.active.focus,.open > .dropdown-toggle.btn-reddit.focus{color:#000;background-color:#98ccff;border-color:rgba(0,0,0,0.2);}.btn-reddit:active,.btn-reddit.active,.open > .dropdown-toggle.btn-reddit{background-image:none;}.btn-reddit.disabled,.btn-reddit[disabled],fieldset[disabled] .btn-reddit,.btn-reddit.disabled:hover,.btn-reddit[disabled]:hover,fieldset[disabled] .btn-reddit:hover,.btn-reddit.disabled:focus,.btn-reddit[disabled]:focus,fieldset[disabled] .btn-reddit:focus,.btn-reddit.disabled.focus,.btn-reddit[disabled].focus,fieldset[disabled] .btn-reddit.focus,.btn-reddit.disabled:active,.btn-reddit[disabled]:active,fieldset[disabled] .btn-reddit:active,.btn-reddit.disabled.active,.btn-reddit[disabled].active,fieldset[disabled] .btn-reddit.active{background-color:#eff7ff;border-color:rgba(0,0,0,0.2);}.btn-reddit .badge{color:#eff7ff;background-color:#000;}.btn-soundcloud{color:#fff;background-color:#ff5500;border-color:rgba(0,0,0,0.2);}.btn-soundcloud:focus,.btn-soundcloud.focus{color:#fff;background-color:#cc4400;border-color:rgba(0,0,0,0.2);}.btn-soundcloud:hover{color:#fff;background-color:#cc4400;border-color:rgba(0,0,0,0.2);}.btn-soundcloud:active,.btn-soundcloud.active,.open > .dropdown-toggle.btn-soundcloud{color:#fff;background-color:#cc4400;border-color:rgba(0,0,0,0.2);}.btn-soundcloud:active:hover,.btn-soundcloud.active:hover,.open > .dropdown-toggle.btn-soundcloud:hover,.btn-soundcloud:active:focus,.btn-soundcloud.active:focus,.open > .dropdown-toggle.btn-soundcloud:focus,.btn-soundcloud:active.focus,.btn-soundcloud.active.focus,.open > .dropdown-toggle.btn-soundcloud.focus{color:#fff;background-color:#a83800;border-color:rgba(0,0,0,0.2);}.btn-soundcloud:active,.btn-soundcloud.active,.open > .dropdown-toggle.btn-soundcloud{background-image:none;}.btn-soundcloud.disabled,.btn-soundcloud[disabled],fieldset[disabled] .btn-soundcloud,.btn-soundcloud.disabled:hover,.btn-soundcloud[disabled]:hover,fieldset[disabled] .btn-soundcloud:hover,.btn-soundcloud.disabled:focus,.btn-soundcloud[disabled]:focus,fieldset[disabled] .btn-soundcloud:focus,.btn-soundcloud.disabled.focus,.btn-soundcloud[disabled].focus,fieldset[disabled] .btn-soundcloud.focus,.btn-soundcloud.disabled:active,.btn-soundcloud[disabled]:active,fieldset[disabled] .btn-soundcloud:active,.btn-soundcloud.disabled.active,.btn-soundcloud[disabled].active,fieldset[disabled] .btn-soundcloud.active{background-color:#ff5500;border-color:rgba(0,0,0,0.2);}.btn-soundcloud .badge{color:#ff5500;background-color:#fff;}.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2);}.btn-tumblr:focus,.btn-tumblr.focus{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2);}.btn-tumblr:hover{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2);}.btn-tumblr:active,.btn-tumblr.active,.open > .dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2);}.btn-tumblr:active:hover,.btn-tumblr.active:hover,.open > .dropdown-toggle.btn-tumblr:hover,.btn-tumblr:active:focus,.btn-tumblr.active:focus,.open > .dropdown-toggle.btn-tumblr:focus,.btn-tumblr:active.focus,.btn-tumblr.active.focus,.open > .dropdown-toggle.btn-tumblr.focus{color:#fff;background-color:#111c26;border-color:rgba(0,0,0,0.2);}.btn-tumblr:active,.btn-tumblr.active,.open > .dropdown-toggle.btn-tumblr{background-image:none;}.btn-tumblr.disabled,.btn-tumblr[disabled],fieldset[disabled] .btn-tumblr,.btn-tumblr.disabled:hover,.btn-tumblr[disabled]:hover,fieldset[disabled] .btn-tumblr:hover,.btn-tumblr.disabled:focus,.btn-tumblr[disabled]:focus,fieldset[disabled] .btn-tumblr:focus,.btn-tumblr.disabled.focus,.btn-tumblr[disabled].focus,fieldset[disabled] .btn-tumblr.focus,.btn-tumblr.disabled:active,.btn-tumblr[disabled]:active,fieldset[disabled] .btn-tumblr:active,.btn-tumblr.disabled.active,.btn-tumblr[disabled].active,fieldset[disabled] .btn-tumblr.active{background-color:#2c4762;border-color:rgba(0,0,0,0.2);}.btn-tumblr .badge{color:#2c4762;background-color:#fff;}.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2);}.btn-twitter:focus,.btn-twitter.focus{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2);}.btn-twitter:hover{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2);}.btn-twitter:active,.btn-twitter.active,.open > .dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2);}.btn-twitter:active:hover,.btn-twitter.active:hover,.open > .dropdown-toggle.btn-twitter:hover,.btn-twitter:active:focus,.btn-twitter.active:focus,.open > .dropdown-toggle.btn-twitter:focus,.btn-twitter:active.focus,.btn-twitter.active.focus,.open > .dropdown-toggle.btn-twitter.focus{color:#fff;background-color:#1583d7;border-color:rgba(0,0,0,0.2);}.btn-twitter:active,.btn-twitter.active,.open > .dropdown-toggle.btn-twitter{background-image:none;}.btn-twitter.disabled,.btn-twitter[disabled],fieldset[disabled] .btn-twitter,.btn-twitter.disabled:hover,.btn-twitter[disabled]:hover,fieldset[disabled] .btn-twitter:hover,.btn-twitter.disabled:focus,.btn-twitter[disabled]:focus,fieldset[disabled] .btn-twitter:focus,.btn-twitter.disabled.focus,.btn-twitter[disabled].focus,fieldset[disabled] .btn-twitter.focus,.btn-twitter.disabled:active,.btn-twitter[disabled]:active,fieldset[disabled] .btn-twitter:active,.btn-twitter.disabled.active,.btn-twitter[disabled].active,fieldset[disabled] .btn-twitter.active{background-color:#55acee;border-color:rgba(0,0,0,0.2);}.btn-twitter .badge{color:#55acee;background-color:#fff;}.btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2);}.btn-vimeo:focus,.btn-vimeo.focus{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2);}.btn-vimeo:hover{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2);}.btn-vimeo:active,.btn-vimeo.active,.open > .dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2);}.btn-vimeo:active:hover,.btn-vimeo.active:hover,.open > .dropdown-toggle.btn-vimeo:hover,.btn-vimeo:active:focus,.btn-vimeo.active:focus,.open > .dropdown-toggle.btn-vimeo:focus,.btn-vimeo:active.focus,.btn-vimeo.active.focus,.open > .dropdown-toggle.btn-vimeo.focus{color:#fff;background-color:#0f7b9f;border-color:rgba(0,0,0,0.2);}.btn-vimeo:active,.btn-vimeo.active,.open > .dropdown-toggle.btn-vimeo{background-image:none;}.btn-vimeo.disabled,.btn-vimeo[disabled],fieldset[disabled] .btn-vimeo,.btn-vimeo.disabled:hover,.btn-vimeo[disabled]:hover,fieldset[disabled] .btn-vimeo:hover,.btn-vimeo.disabled:focus,.btn-vimeo[disabled]:focus,fieldset[disabled] .btn-vimeo:focus,.btn-vimeo.disabled.focus,.btn-vimeo[disabled].focus,fieldset[disabled] .btn-vimeo.focus,.btn-vimeo.disabled:active,.btn-vimeo[disabled]:active,fieldset[disabled] .btn-vimeo:active,.btn-vimeo.disabled.active,.btn-vimeo[disabled].active,fieldset[disabled] .btn-vimeo.active{background-color:#1ab7ea;border-color:rgba(0,0,0,0.2);}.btn-vimeo .badge{color:#1ab7ea;background-color:#fff;}.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2);}.btn-vk:focus,.btn-vk.focus{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2);}.btn-vk:hover{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2);}.btn-vk:active,.btn-vk.active,.open > .dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2);}.btn-vk:active:hover,.btn-vk.active:hover,.open > .dropdown-toggle.btn-vk:hover,.btn-vk:active:focus,.btn-vk.active:focus,.open > .dropdown-toggle.btn-vk:focus,.btn-vk:active.focus,.btn-vk.active.focus,.open > .dropdown-toggle.btn-vk.focus{color:#fff;background-color:#3a526b;border-color:rgba(0,0,0,0.2);}.btn-vk:active,.btn-vk.active,.open > .dropdown-toggle.btn-vk{background-image:none;}.btn-vk.disabled,.btn-vk[disabled],fieldset[disabled] .btn-vk,.btn-vk.disabled:hover,.btn-vk[disabled]:hover,fieldset[disabled] .btn-vk:hover,.btn-vk.disabled:focus,.btn-vk[disabled]:focus,fieldset[disabled] .btn-vk:focus,.btn-vk.disabled.focus,.btn-vk[disabled].focus,fieldset[disabled] .btn-vk.focus,.btn-vk.disabled:active,.btn-vk[disabled]:active,fieldset[disabled] .btn-vk:active,.btn-vk.disabled.active,.btn-vk[disabled].active,fieldset[disabled] .btn-vk.active{background-color:#587ea3;border-color:rgba(0,0,0,0.2);}.btn-vk .badge{color:#587ea3;background-color:#fff;}.btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2);}.btn-yahoo:focus,.btn-yahoo.focus{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2);}.btn-yahoo:hover{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2);}.btn-yahoo:active,.btn-yahoo.active,.open > .dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2);}.btn-yahoo:active:hover,.btn-yahoo.active:hover,.open > .dropdown-toggle.btn-yahoo:hover,.btn-yahoo:active:focus,.btn-yahoo.active:focus,.open > .dropdown-toggle.btn-yahoo:focus,.btn-yahoo:active.focus,.btn-yahoo.active.focus,.open > .dropdown-toggle.btn-yahoo.focus{color:#fff;background-color:#39074e;border-color:rgba(0,0,0,0.2);}.btn-yahoo:active,.btn-yahoo.active,.open > .dropdown-toggle.btn-yahoo{background-image:none;}.btn-yahoo.disabled,.btn-yahoo[disabled],fieldset[disabled] .btn-yahoo,.btn-yahoo.disabled:hover,.btn-yahoo[disabled]:hover,fieldset[disabled] .btn-yahoo:hover,.btn-yahoo.disabled:focus,.btn-yahoo[disabled]:focus,fieldset[disabled] .btn-yahoo:focus,.btn-yahoo.disabled.focus,.btn-yahoo[disabled].focus,fieldset[disabled] .btn-yahoo.focus,.btn-yahoo.disabled:active,.btn-yahoo[disabled]:active,fieldset[disabled] .btn-yahoo:active,.btn-yahoo.disabled.active,.btn-yahoo[disabled].active,fieldset[disabled] .btn-yahoo.active{background-color:#720e9e;border-color:rgba(0,0,0,0.2);}.btn-yahoo .badge{color:#720e9e;background-color:#fff;}.fc-button{background:#f4f4f4;background-image:none;color:#444;border-color:#ddd;border-bottom-color:#ddd;}.fc-button:hover,.fc-button:active,.fc-button.hover{background-color:#e9e9e9;}.fc-header-title h2{font-size:15px;line-height:1.6em;color:#666;margin-left:10px;}.fc-header-right{padding-right:10px;}.fc-header-left{padding-left:10px;}.fc-widget-header{background:#fafafa;}.fc-grid{width:100%;border:0;}.fc-widget-header:first-of-type,.fc-widget-content:first-of-type{border-left:0;border-right:0;}.fc-widget-header:last-of-type,.fc-widget-content:last-of-type{border-right:0;}.fc-toolbar{padding:10px;margin:0;}.fc-day-number{font-size:20px;font-weight:300;padding-right:10px;}.fc-color-picker{list-style:none;margin:0;padding:0;}.fc-color-picker > li{float:left;font-size:30px;margin-right:5px;line-height:30px;}.fc-color-picker > li .fa{-webkit-transition:-webkit-transform linear 0.3s;-moz-transition:-moz-transform linear 0.3s;-o-transition:-o-transform linear 0.3s;transition:transform linear 0.3s;}.fc-color-picker > li .fa:hover{-webkit-transform:rotate(30deg);-ms-transform:rotate(30deg);-o-transform:rotate(30deg);transform:rotate(30deg);}#add-new-event{-webkit-transition:all linear 0.3s;-o-transition:all linear 0.3s;transition:all linear 0.3s;}.external-event{padding:5px 10px;font-weight:bold;margin-bottom:4px;box-shadow:0 1px 1px rgba(0,0,0,0.1);text-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;cursor:move;}.external-event:hover{box-shadow:inset 0 0 90px rgba(0,0,0,0.2);}.select2-container--default.select2-container--focus,.select2-selection.select2-container--focus,.select2-container--default:focus,.select2-selection:focus,.select2-container--default:active,.select2-selection:active{outline:none;}.select2-container--default .select2-selection--single,.select2-selection .select2-selection--single{border:1px solid #d2d6de;border-radius:0;padding:6px 12px;height:34px;}.select2-container--default.select2-container--open{border-color:#3c8dbc;}.select2-dropdown{border:1px solid #d2d6de;border-radius:0;}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#3c8dbc;color:white;}.select2-results__option{padding:6px 12px;user-select:none;-webkit-user-select:none;}.select2-container .select2-selection--single .select2-selection__rendered{padding-left:0;padding-right:0;height:auto;margin-top:-4px;}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px;}.select2-container--default .select2-selection--single .select2-selection__arrow{height:28px;right:3px;}.select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0;}.select2-dropdown .select2-search__field,.select2-search--inline .select2-search__field{border:1px solid #d2d6de;}.select2-dropdown .select2-search__field:focus,.select2-search--inline .select2-search__field:focus{outline:none;border:1px solid #3c8dbc;}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999;}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd;}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#444;}.select2-container--default .select2-selection--multiple{border:1px solid #d2d6de;border-radius:0;}.select2-container--default .select2-selection--multiple:focus{border-color:#3c8dbc;}.select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#d2d6de;}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;padding:1px 10px;color:#fff;}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{margin-right:5px;color:rgba(255,255,255,0.7);}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff;}.select2-container .select2-selection--single .select2-selection__rendered{padding-right:10px;}.pad{padding:10px;}.margin{margin:10px;}.margin-bottom{margin-bottom:20px;}.margin-bottom-none{margin-bottom:0;}.margin-r-5{margin-right:5px;}.inline{display:inline;}.description-block{display:block;margin:10px 0;text-align:center;}.description-block.margin-bottom{margin-bottom:25px;}.description-block > .description-header{margin:0;padding:0;font-weight:600;font-size:16px;}.description-block > .description-text{text-transform:uppercase;}.bg-red,.bg-yellow,.bg-aqua,.bg-blue,.bg-light-blue,.bg-green,.bg-navy,.bg-teal,.bg-olive,.bg-lime,.bg-orange,.bg-fuchsia,.bg-purple,.bg-maroon,.bg-black,.bg-red-active,.bg-yellow-active,.bg-aqua-active,.bg-blue-active,.bg-light-blue-active,.bg-green-active,.bg-navy-active,.bg-teal-active,.bg-olive-active,.bg-lime-active,.bg-orange-active,.bg-fuchsia-active,.bg-purple-active,.bg-maroon-active,.bg-black-active,.callout.callout-danger,.callout.callout-warning,.callout.callout-info,.callout.callout-success,.alert-success,.alert-danger,.alert-error,.alert-warning,.alert-info,.modal-primary .modal-body,.modal-primary .modal-header,.modal-primary .modal-footer,.modal-warning .modal-body,.modal-warning .modal-header,.modal-warning .modal-footer,.modal-info .modal-body,.modal-info .modal-header,.modal-info .modal-footer,.modal-success .modal-body,.modal-success .modal-header,.modal-success .modal-footer,.modal-danger .modal-body,.modal-danger .modal-header,.modal-danger .modal-footer{color:#fff !important;}.bg-gray{color:#000;background-color:#d2d6de !important;}.bg-gray-light{background-color:#f7f7f7;}.bg-black{background-color:#111 !important;}.bg-red,.callout.callout-danger,.alert-danger,.alert-error,.modal-danger .modal-body{background-color:#e74c3c !important;}.bg-yellow,.callout.callout-warning,.alert-warning,.modal-warning .modal-body{background-color:#f39c12 !important;}.bg-aqua,.callout.callout-info,.alert-info,.modal-info .modal-body{background-color:#3498db !important;}.bg-blue{background-color:#0073b7 !important;}.bg-light-blue,.modal-primary .modal-body{background-color:#3c8dbc !important;}.bg-green,.callout.callout-success,.alert-success,.modal-success .modal-body{background-color:#18bc9c !important;}.bg-navy{background-color:#001F3F !important;}.bg-teal{background-color:#39CCCC !important;}.bg-olive{background-color:#3D9970 !important;}.bg-lime{background-color:#01FF70 !important;}.bg-orange{background-color:#FF851B !important;}.bg-fuchsia{background-color:#F012BE !important;}.bg-purple{background-color:#605ca8 !important;}.bg-maroon{background-color:#D81B60 !important;}.bg-gray-active{color:#000;background-color:#b5bbc8 !important;}.bg-black-active{background-color:#000000 !important;}.bg-red-active,.modal-danger .modal-header,.modal-danger .modal-footer{background-color:#e43321 !important;}.bg-yellow-active,.modal-warning .modal-header,.modal-warning .modal-footer{background-color:#db8b0b !important;}.bg-aqua-active,.modal-info .modal-header,.modal-info .modal-footer{background-color:#2489cc !important;}.bg-blue-active{background-color:#005384 !important;}.bg-light-blue-active,.modal-primary .modal-header,.modal-primary .modal-footer{background-color:#357ca5 !important;}.bg-green-active,.modal-success .modal-header,.modal-success .modal-footer{background-color:#15a589 !important;}.bg-navy-active{background-color:#001a35 !important;}.bg-teal-active{background-color:#30bbbb !important;}.bg-olive-active{background-color:#368763 !important;}.bg-lime-active{background-color:#00e765 !important;}.bg-orange-active{background-color:#ff7701 !important;}.bg-fuchsia-active{background-color:#db0ead !important;}.bg-purple-active{background-color:#555299 !important;}.bg-maroon-active{background-color:#ca195a !important;}[class^="bg-"].disabled{opacity:0.65;filter:alpha(opacity=65);}.text-red{color:#e74c3c !important;}.text-yellow{color:#f39c12 !important;}.text-aqua{color:#3498db !important;}.text-blue{color:#0073b7 !important;}.text-black{color:#111 !important;}.text-light-blue{color:#3c8dbc !important;}.text-green{color:#18bc9c !important;}.text-gray{color:#d2d6de !important;}.text-navy{color:#001F3F !important;}.text-teal{color:#39CCCC !important;}.text-olive{color:#3D9970 !important;}.text-lime{color:#01FF70 !important;}.text-orange{color:#FF851B !important;}.text-fuchsia{color:#F012BE !important;}.text-purple{color:#605ca8 !important;}.text-maroon{color:#D81B60 !important;}.link-muted{color:#7a869d;}.link-muted:hover,.link-muted:focus{color:#606c84;}.link-black{color:#666;}.link-black:hover,.link-black:focus{color:#999;}.hide{display:none !important;}.no-border{border:0 !important;}.no-padding{padding:0 !important;}.no-margin{margin:0 !important;}.no-shadow{box-shadow:none !important;}.list-unstyled,.chart-legend,.contacts-list,.users-list,.mailbox-attachments{list-style:none;margin:0;padding:0;}.list-group-unbordered > .list-group-item{border-left:0;border-right:0;border-radius:0;padding-left:0;padding-right:0;}.flat{border-radius:0 !important;}.text-bold,.text-bold.table td,.text-bold.table th{font-weight:700;}.text-sm{font-size:12px;}.jqstooltip{padding:5px !important;width:auto !important;height:auto !important;}.bg-teal-gradient{background:#39CCCC !important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#39CCCC),color-stop(1,#7adddd)) !important;background:-ms-linear-gradient(bottom,#39CCCC,#7adddd) !important;background:-moz-linear-gradient(center bottom,#39CCCC 0%,#7adddd 100%) !important;background:-o-linear-gradient(#7adddd,#39CCCC) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd',endColorstr='#39CCCC',GradientType=0) !important;color:#fff;}.bg-light-blue-gradient{background:#3c8dbc !important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#3c8dbc),color-stop(1,#67a8ce)) !important;background:-ms-linear-gradient(bottom,#3c8dbc,#67a8ce) !important;background:-moz-linear-gradient(center bottom,#3c8dbc 0%,#67a8ce 100%) !important;background:-o-linear-gradient(#67a8ce,#3c8dbc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce',endColorstr='#3c8dbc',GradientType=0) !important;color:#fff;}.bg-blue-gradient{background:#0073b7 !important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#0073b7),color-stop(1,#0089db)) !important;background:-ms-linear-gradient(bottom,#0073b7,#0089db) !important;background:-moz-linear-gradient(center bottom,#0073b7 0%,#0089db 100%) !important;background:-o-linear-gradient(#0089db,#0073b7) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db',endColorstr='#0073b7',GradientType=0) !important;color:#fff;}.bg-aqua-gradient{background:#3498db !important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#3498db),color-stop(1,#52a7e0)) !important;background:-ms-linear-gradient(bottom,#3498db,#52a7e0) !important;background:-moz-linear-gradient(center bottom,#3498db 0%,#52a7e0 100%) !important;background:-o-linear-gradient(#52a7e0,#3498db) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#52a7e0',endColorstr='#3498db',GradientType=0) !important;color:#fff;}.bg-yellow-gradient{background:#f39c12 !important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#f39c12),color-stop(1,#f7bc60)) !important;background:-ms-linear-gradient(bottom,#f39c12,#f7bc60) !important;background:-moz-linear-gradient(center bottom,#f39c12 0%,#f7bc60 100%) !important;background:-o-linear-gradient(#f7bc60,#f39c12) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60',endColorstr='#f39c12',GradientType=0) !important;color:#fff;}.bg-purple-gradient{background:#605ca8 !important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#605ca8),color-stop(1,#9491c4)) !important;background:-ms-linear-gradient(bottom,#605ca8,#9491c4) !important;background:-moz-linear-gradient(center bottom,#605ca8 0%,#9491c4 100%) !important;background:-o-linear-gradient(#9491c4,#605ca8) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4',endColorstr='#605ca8',GradientType=0) !important;color:#fff;}.bg-green-gradient{background:#18bc9c !important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#18bc9c),color-stop(1,#1cdcb6)) !important;background:-ms-linear-gradient(bottom,#18bc9c,#1cdcb6) !important;background:-moz-linear-gradient(center bottom,#18bc9c 0%,#1cdcb6 100%) !important;background:-o-linear-gradient(#1cdcb6,#18bc9c) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#1cdcb6',endColorstr='#18bc9c',GradientType=0) !important;color:#fff;}.bg-red-gradient{background:#e74c3c !important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#e74c3c),color-stop(1,#ed7669)) !important;background:-ms-linear-gradient(bottom,#e74c3c,#ed7669) !important;background:-moz-linear-gradient(center bottom,#e74c3c 0%,#ed7669 100%) !important;background:-o-linear-gradient(#ed7669,#e74c3c) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ed7669',endColorstr='#e74c3c',GradientType=0) !important;color:#fff;}.bg-black-gradient{background:#111 !important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#111),color-stop(1,#2b2b2b)) !important;background:-ms-linear-gradient(bottom,#111,#2b2b2b) !important;background:-moz-linear-gradient(center bottom,#111 0%,#2b2b2b 100%) !important;background:-o-linear-gradient(#2b2b2b,#111) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b',endColorstr='#111',GradientType=0) !important;color:#fff;}.bg-maroon-gradient{background:#D81B60 !important;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#D81B60),color-stop(1,#e73f7c)) !important;background:-ms-linear-gradient(bottom,#D81B60,#e73f7c) !important;background:-moz-linear-gradient(center bottom,#D81B60 0%,#e73f7c 100%) !important;background:-o-linear-gradient(#e73f7c,#D81B60) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c',endColorstr='#D81B60',GradientType=0) !important;color:#fff;}.description-block .description-icon{font-size:16px;}.no-pad-top{padding-top:0;}.position-static{position:static !important;}.list-header{font-size:15px;padding:10px 4px;font-weight:bold;color:#666;}.list-seperator{height:1px;background:#f4f4f4;margin:15px 0 9px 0;}.list-link > a{padding:4px;color:#777;}.list-link > a:hover{color:#222;}.font-light{font-weight:300;}.user-block:before,.user-block:after{content:" ";display:table;}.user-block:after{clear:both;}.user-block:before,.user-block:after{content:" ";display:table;}.user-block:after{clear:both;}.user-block img{width:40px;height:40px;float:left;}.user-block .username,.user-block .description,.user-block .comment{display:block;margin-left:50px;}.user-block .username{font-size:16px;font-weight:600;}.user-block .description{color:#999;font-size:13px;}.user-block.user-block-sm .username,.user-block.user-block-sm .description,.user-block.user-block-sm .comment{margin-left:40px;}.user-block.user-block-sm .username{font-size:14px;}.img-sm,.img-md,.img-lg,.box-comments .box-comment img,.user-block.user-block-sm img{float:left;}.img-sm,.box-comments .box-comment img,.user-block.user-block-sm img{width:30px !important;height:30px !important;}.img-sm + .img-push{margin-left:40px;}.img-md{width:60px;height:60px;}.img-md + .img-push{margin-left:70px;}.img-lg{width:100px;height:100px;}.img-lg + .img-push{margin-left:110px;}.img-bordered{border:3px solid #d2d6de;padding:3px;}.img-bordered-sm{border:2px solid #d2d6de;padding:2px;}.attachment-block{border:1px solid #f4f4f4;padding:5px;margin-bottom:10px;background:#f7f7f7;}.attachment-block .attachment-img{max-width:100px;max-height:100px;height:auto;float:left;}.attachment-block .attachment-pushed{margin-left:110px;}.attachment-block .attachment-heading{margin:0;}.attachment-block .attachment-text{color:#555;}.connectedSortable{min-height:100px;}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;}.sort-highlight{background:#f4f4f4;border:1px dashed #ddd;margin-bottom:10px;}.full-opacity-hover{opacity:0.65;filter:alpha(opacity=65);}.full-opacity-hover:hover{opacity:1;filter:alpha(opacity=100);}.chart{position:relative;overflow:hidden;width:100%;}.chart svg,.chart canvas{width:100% !important;}@media print{.no-print,.main-sidebar,.left-side,.main-header,.content-header{display:none !important;}.content-wrapper,.right-side,.main-footer{margin-left:0 !important;min-height:0 !important;-webkit-transform:translate(0,0) !important;-ms-transform:translate(0,0) !important;-o-transform:translate(0,0) !important;transform:translate(0,0) !important;}.fixed .content-wrapper,.fixed .right-side{padding-top:0 !important;}.invoice{width:100%;border:0;margin:0;padding:0;}.invoice-col{float:left;width:33.3333333%;}.table-responsive{overflow:auto;}.table-responsive > .table tr th,.table-responsive > .table tr td{white-space:normal !important;}} \ No newline at end of file diff --git a/addons/weliam_smartcity/web/resource/address/jquery.js b/addons/weliam_smartcity/web/resource/address/jquery.js new file mode 100644 index 0000000..5c3c456 --- /dev/null +++ b/addons/weliam_smartcity/web/resource/address/jquery.js @@ -0,0 +1,9814 @@ +/*! + * jQuery JavaScript Library v2.2.4 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-05-20T17:23Z + */ + +(function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Support: Firefox 18+ +// Can't be in strict mode, several libs including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +//"use strict"; +var arr = []; + +var document = window.document; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + version = "2.2.4", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + var realStringObj = obj && obj.toString(); + return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; + }, + + isPlainObject: function( obj ) { + var key; + + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call( obj, "constructor" ) && + !hasOwn.call( obj.constructor.prototype || {}, "isPrototypeOf" ) ) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android<4.0, iOS<6 (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + var script, + indirect = eval; + + code = jQuery.trim( code ); + + if ( code ) { + + // If the code includes a valid, prologue position + // strict mode pragma, execute code by injecting a + // script tag into the document. + if ( code.indexOf( "use strict" ) === 1 ) { + script = document.createElement( "script" ); + script.text = code; + document.head.appendChild( script ).parentNode.removeChild( script ); + } else { + + // Otherwise, avoid the DOM node creation, insertion + // and removal by using an indirect global eval + + indirect( code ); + } + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE9-11+ + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android<4.1 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +// JSHint would error on this code due to the Symbol not being defined in ES5. +// Defining this global in .jshintrc would create a danger of using the global +// unguarded in another place, it seems safer to just disable JSHint for these +// three lines. +/* jshint ignore: start */ +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} +/* jshint ignore: end */ + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.2.1 + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2015-10-17 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, nidselect, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; + while ( i-- ) { + groups[i] = nidselect + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( (parent = document.defaultView) && parent.top !== parent ) { + // Support: IE 11 + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + return m ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( (oldCache = uniqueCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + } ); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, + len = this.length, + ret = [], + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + // Support: Blackberry 4.6 + // gEBID returns nodes no longer in the document (#6963) + if ( elem && elem.parentNode ) { + + // Inject the element directly into the jQuery object + this.length = 1; + this[ 0 ] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( pos ? + pos.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + return elem.contentDocument || jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnotwhite = ( /\S+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], + [ "notify", "progress", jQuery.Callbacks( "memory" ) ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this === promise ? newDefer.promise() : this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( function() { + + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || + ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. + // If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // Add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .progress( updateFunc( i, progressContexts, progressValues ) ) + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ); + } else { + --remaining; + } + } + } + + // If we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +} ); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } +} ); + +/** + * The ready event handler and self cleanup method + */ +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called + // after the browser event has already occurred. + // Support: IE9-10 only + // Older IE sometimes signals "interactive" too soon + if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + + } else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); + } + } + return readyList.promise( obj ); +}; + +// Kick off the DOM ready check even if the user does not +jQuery.ready.promise(); + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + len ? fn( elems[ 0 ], key ) : emptyGet; +}; +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + /* jshint -W018 */ + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + register: function( owner, initial ) { + var value = initial || {}; + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable, non-writable property + // configurability must be true to allow the property to be + // deleted with the delete operator + } else { + Object.defineProperty( owner, this.expando, { + value: value, + writable: true, + configurable: true + } ); + } + return owner[ this.expando ]; + }, + cache: function( owner ) { + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( !acceptData( owner ) ) { + return {}; + } + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + if ( typeof data === "string" ) { + cache[ data ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ prop ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + owner[ this.expando ] && owner[ this.expando ][ key ]; + }, + access: function( owner, key, value ) { + var stored; + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + stored = this.get( owner, key ); + + return stored !== undefined ? + stored : this.get( owner, jQuery.camelCase( key ) ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, name, camel, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key === undefined ) { + this.register( owner ); + + } else { + + // Support array or space separated string of keys + if ( jQuery.isArray( key ) ) { + + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = key.concat( key.map( jQuery.camelCase ) ); + } else { + camel = jQuery.camelCase( key ); + + // Try the string as a key before any manipulation + if ( key in cache ) { + name = [ key, camel ]; + } else { + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + name = camel; + name = name in cache ? + [ name ] : ( name.match( rnotwhite ) || [] ); + } + } + + i = name.length; + + while ( i-- ) { + delete cache[ name[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <= 35-45+ + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://code.google.com/p/chromium/issues/detail?id=378607 + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data, camelKey; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // with the key as-is + data = dataUser.get( elem, key ) || + + // Try to find dashed key if it exists (gh-2779) + // This is for 2.2.x only + dataUser.get( elem, key.replace( rmultiDash, "-$&" ).toLowerCase() ); + + if ( data !== undefined ) { + return data; + } + + camelKey = jQuery.camelCase( key ); + + // Attempt to get data from the cache + // with the key camelized + data = dataUser.get( elem, camelKey ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, camelKey, undefined ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + camelKey = jQuery.camelCase( key ); + this.each( function() { + + // First, attempt to store a copy or reference of any + // data that might've been store with a camelCased key. + var data = dataUser.get( this, camelKey ); + + // For HTML5 data-* attribute interop, we have to + // store property names with dashes in a camelCase form. + // This might not apply to all properties...* + dataUser.set( this, camelKey, value ); + + // *... In the case of properties that might _actually_ + // have dashes, we need to also store a copy of that + // unchanged property. + if ( key.indexOf( "-" ) > -1 && data !== undefined ) { + dataUser.set( this, key, value ); + } + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || + !jQuery.contains( elem.ownerDocument, elem ); + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { return tween.cur(); } : + function() { return jQuery.css( elem, prop, "" ); }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([\w:-]+)/ ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE9 + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE9 +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE9-11+ + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== "undefined" ? + context.querySelectorAll( tag || "*" ) : + []; + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], ret ) : + ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0-4.3, Safari<=5.1 + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Safari<=5.1, Android<4.2 + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<=11+ + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE9 +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, j, ret, matched, handleObj, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, matches, sel, handleObj, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Support (at least): Chrome, IE9 + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // + // Support: Firefox<=42+ + // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) + if ( delegateCount && cur.nodeType && + ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push( { elem: cur, handlers: matches } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + + "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split( " " ), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: ( "button buttons clientX clientY offsetX offsetY pageX pageY " + + "screenX screenY toElement" ).split( " " ), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - + ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - + ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: Cordova 2.5 (WebKit) (#13255) + // All events should have a target; Cordova deviceready doesn't + if ( !event.target ) { + event.target = document; + } + + // Support: Safari 6.0+, Chrome<28 + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android<4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://code.google.com/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, + + // Support: IE 10-11, Edge 10240+ + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName( "tbody" )[ 0 ] || + elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <= 35-45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <= 35-45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + + // Keep domManip exposed until 3.0 (gh-2225) + domManip: domManip, + + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: QtWebKit + // .get() because push.apply(_, arraylike) throws + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); + + +var iframe, + elemdisplay = { + + // Support: Firefox + // We have to pre-define these values for FF (#10227) + HTML: "block", + BODY: "block" + }; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ + +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + display = jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = ( iframe || jQuery( "' + ''; + var footer = '' + ''; + modalobj = util.dialog('请选择地点', content, footer, { + containerName: 'map-dialog' + }); + modalobj.find('.modal-dialog').css('width', '80%'); + modalobj.modal({ + 'keyboard': false + }); + modalobj.find('.input-group :text').keydown(function(e) { + if (e.keyCode == 13) { + var kw = $(this).val(); + searchAddress(kw) + } + }); + modalobj.find('.input-group button').click(function() { + var kw = $(this).parent().prev().val(); + searchAddress(kw) + }) + } + modalobj.find('button.btn-primary').off('click'); + modalobj.find('button.btn-primary').on('click', function() { + if ($.isFunction(callback)) { + var $point = modalobj.find("iframe").contents().find("#poi_json").val(); + if ($.isEmpty($point)) { + tip.msgbox.err('尚未选择坐标!'); + return + } + var point = JSON.parse(modalobj.find("iframe").contents().find("#poi_json").val()); + var address = modalobj.find("iframe").contents().find("#addr_cur").val(); + var val = { + lng: point.lng, + lat: point.lat, + label: address + }; + callback(val) + } + modalobj.modal('hide') + }); + modalobj.modal('show') + }; + biz.TxMapToBdMap = function(gg_lat, gg_lon) { + var point = new Object(); + var x_pi = 3.14159265358979324 * 3000.0 / 180.0; + var x = new Number(gg_lon); + var y = new Number(gg_lat); + var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi); + var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi); + var bd_lon = z * Math.cos(theta) + 0.0065; + var bd_lat = z * Math.sin(theta) + 0.006; + point.lng = bd_lon; + point.lat = bd_lat; + return point + }; + biz.BdMapToTxMap = function(bd_lat, bd_lon) { + var point = new Object(); + var x_pi = 3.14159265358979324 * 3000.0 / 180.0; + var x = new Number(bd_lon - 0.0065); + var y = new Number(bd_lat - 0.006); + var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi); + var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi); + var Mars_lon = z * Math.cos(theta); + var Mars_lat = z * Math.sin(theta); + point.lng = Mars_lon; + point.lat = Mars_lat; + return point + }; + window.biz = biz; + return biz +}); \ No newline at end of file diff --git a/addons/weliam_smartcity/web/resource/js/bootstrap-table.min.js b/addons/weliam_smartcity/web/resource/js/bootstrap-table.min.js new file mode 100644 index 0000000..a9770a6 --- /dev/null +++ b/addons/weliam_smartcity/web/resource/js/bootstrap-table.min.js @@ -0,0 +1,8 @@ +/* +* bootstrap-table - v1.9.0 - 2015-09-30 +* https://github.com/wenzhixin/bootstrap-table +* Copyright (c) 2015 zhixin wen +* Licensed MIT License +*/ +!function(a){"use strict";var b=null,c=function(a){var b=arguments,c=!0,d=1;return a=a.replace(/%s/g,function(){var a=b[d++];return"undefined"==typeof a?(c=!1,""):a}),c?a:""},d=function(b,c,d,e){var f="";return a.each(b,function(a,b){return b[c]===e?(f=b[d],!1):!0}),f},e=function(b,c){var d=-1;return a.each(b,function(a,b){return b.field===c?(d=a,!1):!0}),d},f=function(b){var c,d,e,f=0,g=[];for(c=0;cd;d++)g[c][d]=!1;for(c=0;ce;e++)g[c+e][k]=!0;for(e=0;j>e;e++)g[c][k+e]=!0}},g=function(){if(null===b){var c,d,e=a("

").addClass("fixed-table-scroll-inner"),f=a("

").addClass("fixed-table-scroll-outer");f.append(e),a("body").append(f),c=e[0].offsetWidth,f.css("overflow","scroll"),d=e[0].offsetWidth,c===d&&(d=f[0].clientWidth),f.remove(),b=c-d}return b},h=function(b,d,e,f){var g=d;if("string"==typeof d){var h=d.split(".");h.length>1?(g=window,a.each(h,function(a,b){g=g[b]})):g=window[d]}return"object"==typeof g?g:"function"==typeof g?g.apply(b,e):!g&&"string"==typeof d&&c.apply(this,[d].concat(e))?c.apply(this,[d].concat(e)):f},i=function(b,c,d){var e=Object.getOwnPropertyNames(b),f=Object.getOwnPropertyNames(c),g="";if(d&&e.length!==f.length)return!1;for(var h=0;h-1&&b[g]!==c[g])return!1;return!0},j=function(a){return"string"==typeof a?a.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"):a},k=function(b){var c=0;return b.children().each(function(){c','
',"top"===this.options.paginationVAlign||"both"===this.options.paginationVAlign?'
':"",'
','
','
','
',this.options.formatLoadingMessage(),"
","
",'',"bottom"===this.options.paginationVAlign||"both"===this.options.paginationVAlign?'
':"","
","
"].join("")),this.$container.insertAfter(this.$el),this.$tableContainer=this.$container.find(".fixed-table-container"),this.$tableHeader=this.$container.find(".fixed-table-header"),this.$tableBody=this.$container.find(".fixed-table-body"),this.$tableLoading=this.$container.find(".fixed-table-loading"),this.$tableFooter=this.$container.find(".fixed-table-footer"),this.$toolbar=this.$container.find(".fixed-table-toolbar"),this.$pagination=this.$container.find(".fixed-table-pagination"),this.$tableBody.append(this.$el),this.$container.after('
'),this.$el.addClass(this.options.classes),this.options.striped&&this.$el.addClass("table-striped"),-1!==a.inArray("table-no-bordered",this.options.classes.split(" "))&&this.$tableContainer.addClass("table-no-bordered")},n.prototype.initTable=function(){var b=this,c=[],d=[];this.$header=this.$el.find("thead"),this.$header.length||(this.$header=a("").appendTo(this.$el)),this.$header.find("tr").each(function(){var b=[];a(this).find("th").each(function(){b.push(a.extend({},{title:a(this).html(),"class":a(this).attr("class"),titleTooltip:a(this).attr("title"),rowspan:a(this).attr("rowspan")?+a(this).attr("rowspan"):void 0,colspan:a(this).attr("colspan")?+a(this).attr("colspan"):void 0},a(this).data()))}),c.push(b)}),a.isArray(this.options.columns[0])||(this.options.columns=[this.options.columns]),this.options.columns=a.extend(!0,[],c,this.options.columns),this.columns=[],f(this.options.columns),a.each(this.options.columns,function(c,d){a.each(d,function(d,e){e=a.extend({},n.COLUMN_DEFAULTS,e),"undefined"!=typeof e.fieldIndex&&(b.columns[e.fieldIndex]=e),b.options.columns[c][d]=e})}),this.options.data.length||(this.$el.find("tbody tr").each(function(){var c={};c._id=a(this).attr("id"),c._class=a(this).attr("class"),c._data=l(a(this).data()),a(this).find("td").each(function(d){var e=b.columns[d].field;c[e]=a(this).html(),c["_"+e+"_id"]=a(this).attr("id"),c["_"+e+"_class"]=a(this).attr("class"),c["_"+e+"_rowspan"]=a(this).attr("rowspan"),c["_"+e+"_title"]=a(this).attr("title"),c["_"+e+"_data"]=l(a(this).data())}),d.push(c)}),this.options.data=d)},n.prototype.initHeader=function(){var b=this,d={},e=[];this.header={fields:[],styles:[],classes:[],formatters:[],events:[],sorters:[],sortNames:[],cellStyles:[],searchables:[]},a.each(this.options.columns,function(f,g){e.push(""),0==f&&!b.options.cardView&&b.options.detailView&&e.push(c('
',b.options.columns.length)),a.each(g,function(a,f){var g="",h="",i="",j="",k=c(' class="%s"',f["class"]),l=(b.options.sortOrder||f.order,"px"),m=f.width;if(void 0===f.width||b.options.cardView||"string"==typeof f.width&&-1!==f.width.indexOf("%")&&(l="%"),f.width&&"string"==typeof f.width&&(m=f.width.replace("%","").replace("px","")),h=c("text-align: %s; ",f.halign?f.halign:f.align),i=c("text-align: %s; ",f.align),j=c("vertical-align: %s; ",f.valign),j+=c("width: %s; ",!f.checkbox&&!f.radio||m?m?m+l:void 0:"36px"),"undefined"!=typeof f.fieldIndex){if(b.header.fields[f.fieldIndex]=f.field,b.header.styles[f.fieldIndex]=i+j,b.header.classes[f.fieldIndex]=k,b.header.formatters[f.fieldIndex]=f.formatter,b.header.events[f.fieldIndex]=f.events,b.header.sorters[f.fieldIndex]=f.sorter,b.header.sortNames[f.fieldIndex]=f.sortName,b.header.cellStyles[f.fieldIndex]=f.cellStyle,b.header.searchables[f.fieldIndex]=f.searchable,!f.visible)return;if(b.options.cardView&&!f.cardVisible)return;d[f.field]=f}e.push(""),e.push(c('
',b.options.sortable&&f.sortable?"sortable both":"")),g=f.title,f.checkbox&&(!b.options.singleSelect&&b.options.checkboxHeader&&(g=''),b.header.stateField=f.field),f.radio&&(g="",b.header.stateField=f.field,b.options.singleSelect=!0),e.push(g),e.push("
"),e.push('
'),e.push(""),e.push("")}),e.push("")}),this.$header.html(e.join("")),this.$header.find("th[data-field]").each(function(){a(this).data(d[a(this).data("field")])}),this.$container.off("click",".th-inner").on("click",".th-inner",function(c){b.options.sortable&&a(this).parent().data().sortable&&b.onSort(c)}),this.$header.children().children().off("keypress").on("keypress",function(c){if(b.options.sortable&&a(this).data().sortable){var d=c.keyCode||c.which;13==d&&b.onSort(c)}}),!this.options.showHeader||this.options.cardView?(this.$header.hide(),this.$tableHeader.hide(),this.$tableLoading.css("top",0)):(this.$header.show(),this.$tableHeader.show(),this.$tableLoading.css("top",this.$header.outerHeight()+1),this.getCaret()),this.$selectAll=this.$header.find('[name="btSelectAll"]'),this.$container.off("click",'[name="btSelectAll"]').on("click",'[name="btSelectAll"]',function(){var c=a(this).prop("checked");b[c?"checkAll":"uncheckAll"]()})},n.prototype.initFooter=function(){!this.options.showFooter||this.options.cardView?this.$tableFooter.hide():this.$tableFooter.show()},n.prototype.initData=function(a,b){this.data="append"===b?this.data.concat(a):"prepend"===b?[].concat(a).concat(this.data):a||this.options.data,this.options.data="append"===b?this.options.data.concat(a):"prepend"===b?[].concat(a).concat(this.options.data):this.data,"server"!==this.options.sidePagination&&this.initSort()},n.prototype.initSort=function(){var b=this,c=this.options.sortName,d="desc"===this.options.sortOrder?-1:1,e=a.inArray(this.options.sortName,this.header.fields);-1!==e&&this.data.sort(function(f,g){b.header.sortNames[e]&&(c=b.header.sortNames[e]);var i=m(f,c),j=m(g,c),k=h(b.header,b.header.sorters[e],[i,j]);return void 0!==k?d*k:((void 0===i||null===i)&&(i=""),(void 0===j||null===j)&&(j=""),a.isNumeric(i)&&a.isNumeric(j)?(i=parseFloat(i),j=parseFloat(j),j>i?-1*d:d):i===j?0:("string"!=typeof i&&(i=i.toString()),-1===i.localeCompare(j)?-1*d:d))})},n.prototype.onSort=function(b){var c="keypress"===b.type?a(b.currentTarget):a(b.currentTarget).parent(),d=this.$header.find("th").eq(c.index());return this.$header.add(this.$header_).find("span.order").remove(),this.options.sortName===c.data("field")?this.options.sortOrder="asc"===this.options.sortOrder?"desc":"asc":(this.options.sortName=c.data("field"),this.options.sortOrder="asc"===c.data("order")?"desc":"asc"),this.trigger("sort",this.options.sortName,this.options.sortOrder),c.add(d).data("order",this.options.sortOrder),this.getCaret(),"server"===this.options.sidePagination?void this.initServer(this.options.silentSort):(this.initSort(),void this.initBody())},n.prototype.initToolbar=function(){var b,d,f=this,g=[],i=0,j=0;this.$toolbar.html(""),("string"==typeof this.options.toolbar||"object"==typeof this.options.toolbar)&&a(c('
',this.options.toolbarAlign)).appendTo(this.$toolbar).append(a(this.options.toolbar)),g=[c('
',this.options.buttonsAlign,this.options.buttonsAlign)],"string"==typeof this.options.icons&&(this.options.icons=h(null,this.options.icons)),this.options.showPaginationSwitch&&g.push(c('"),this.options.showRefresh&&g.push(c('"),this.options.showToggle&&g.push(c('"),this.options.showColumns&&(g.push(c('
',this.options.formatColumns()),'",'","
")),g.push("
"),(this.showToolbar||g.length>2)&&this.$toolbar.append(g.join("")),this.options.showPaginationSwitch&&this.$toolbar.find('button[name="paginationSwitch"]').off("click").on("click",a.proxy(this.togglePagination,this)),this.options.showRefresh&&this.$toolbar.find('button[name="refresh"]').off("click").on("click",a.proxy(this.refresh,this)),this.options.showToggle&&this.$toolbar.find('button[name="toggle"]').off("click").on("click",function(){f.toggleView()}),this.options.showColumns&&(b=this.$toolbar.find(".keep-open"),j<=this.options.minimumCountColumns&&b.find("input").prop("disabled",!0),b.find("li").off("click").on("click",function(a){a.stopImmediatePropagation()}),b.find("input").off("click").on("click",function(){var b=a(this);f.toggleColumn(e(f.columns,a(this).data("field")),b.prop("checked"),!1),f.trigger("column-switch",a(this).data("field"),b.prop("checked"))})),this.options.search&&(g=[],g.push('"),this.$toolbar.append(g.join("")),d=this.$toolbar.find(".search input"),d.off("keyup drop").on("keyup drop",function(a){clearTimeout(i),i=setTimeout(function(){f.onSearch(a)},f.options.searchTimeOut)}))},n.prototype.onSearch=function(b){var c=a.trim(a(b.currentTarget).val());this.options.trimOnSearch&&a(b.currentTarget).val()!==c&&a(b.currentTarget).val(c),c!==this.searchText&&(this.searchText=c,this.options.pageNumber=1,this.initSearch(),this.updatePagination(),this.trigger("search",c))},n.prototype.initSearch=function(){var b=this;if("server"!==this.options.sidePagination){var c=this.searchText&&this.searchText.toLowerCase(),d=a.isEmptyObject(this.filterColumns)?null:this.filterColumns;this.data=d?a.grep(this.options.data,function(a){for(var b in d)if(a[b]!==d[b])return!1;return!0}):this.options.data,this.data=c?a.grep(this.data,function(d,f){for(var g in d){g=a.isNumeric(g)?parseInt(g,10):g;var i=d[g],j=b.columns[e(b.columns,g)],k=a.inArray(g,b.header.fields);j&&j.searchFormatter&&(i=h(j,b.header.formatters[k],[i,d,f],i));var l=a.inArray(g,b.header.fields);if(-1!==l&&b.header.searchables[l]&&("string"==typeof i||"number"==typeof i))if(b.options.strictSearch){if((i+"").toLowerCase()===c)return!0}else if(-1!==(i+"").toLowerCase().indexOf(c))return!0}return!1}):this.data}},n.prototype.initPagination=function(){if(!this.options.pagination)return void this.$pagination.hide();this.$pagination.show();var b,d,e,f,g,h,i,j,k,l=this,m=[],n=!1,o=this.getData();if("server"!==this.options.sidePagination&&(this.options.totalRows=o.length),this.totalPages=0,this.options.totalRows){if(this.options.pageSize===this.options.formatAllRows())this.options.pageSize=this.options.totalRows,n=!0;else if(this.options.pageSize===this.options.totalRows){var p="string"==typeof this.options.pageList?this.options.pageList.replace("[","").replace("]","").replace(/ /g,"").toLowerCase().split(","):this.options.pageList;p.indexOf(this.options.formatAllRows().toLowerCase())>-1&&(n=!0)}this.totalPages=~~((this.options.totalRows-1)/this.options.pageSize)+1,this.options.totalPages=this.totalPages}this.totalPages>0&&this.options.pageNumber>this.totalPages&&(this.options.pageNumber=this.totalPages),this.pageFrom=(this.options.pageNumber-1)*this.options.pageSize+1,this.pageTo=this.options.pageNumber*this.options.pageSize,this.pageTo>this.options.totalRows&&(this.pageTo=this.options.totalRows),m.push('
','',this.options.formatShowingRows(this.pageFrom,this.pageTo,this.options.totalRows),""),m.push('');var q=[c('',"top"===this.options.paginationVAlign||"both"===this.options.paginationVAlign?"dropdown":"dropup"),'",'"),m.push(this.options.formatRecordsPerPage(q.join(""))),m.push(""),m.push("
",'"),this.$pagination.html(m.join("")),f=this.$pagination.find(".page-list a"),g=this.$pagination.find(".page-first"),h=this.$pagination.find(".page-pre"),i=this.$pagination.find(".page-next"),j=this.$pagination.find(".page-last"),k=this.$pagination.find(".page-number"),this.options.pageNumber<=1&&(g.addClass("disabled"),h.addClass("disabled")),this.options.pageNumber>=this.totalPages&&(i.addClass("disabled"),j.addClass("disabled")),this.options.smartDisplay&&(this.totalPages<=1&&this.$pagination.find("div.pagination").hide(),(r.length<2||this.options.totalRows<=r[0])&&this.$pagination.find("span.page-list").hide(),this.$pagination[this.getData().length?"show":"hide"]()),n&&(this.options.pageSize=this.options.formatAllRows()),f.off("click").on("click",a.proxy(this.onPageListChange,this)),g.off("click").on("click",a.proxy(this.onPageFirst,this)),h.off("click").on("click",a.proxy(this.onPagePre,this)),i.off("click").on("click",a.proxy(this.onPageNext,this)),j.off("click").on("click",a.proxy(this.onPageLast,this)),k.off("click").on("click",a.proxy(this.onPageNumber,this))},n.prototype.updatePagination=function(b){b&&a(b.currentTarget).hasClass("disabled")||(this.options.maintainSelected||this.resetRows(),this.initPagination(),"server"===this.options.sidePagination?this.initServer():this.initBody(),this.trigger("page-change",this.options.pageNumber,this.options.pageSize))},n.prototype.onPageListChange=function(b){var c=a(b.currentTarget);c.parent().addClass("active").siblings().removeClass("active"),this.options.pageSize=c.text().toUpperCase()===this.options.formatAllRows().toUpperCase()?this.options.formatAllRows():+c.text(),this.$toolbar.find(".page-size").text(this.options.pageSize),this.updatePagination(b)},n.prototype.onPageFirst=function(a){this.options.pageNumber=1,this.updatePagination(a)},n.prototype.onPagePre=function(a){this.options.pageNumber--,this.updatePagination(a)},n.prototype.onPageNext=function(a){this.options.pageNumber++,this.updatePagination(a)},n.prototype.onPageLast=function(a){this.options.pageNumber=this.totalPages,this.updatePagination(a)},n.prototype.onPageNumber=function(b){this.options.pageNumber!==+a(b.currentTarget).text()&&(this.options.pageNumber=+a(b.currentTarget).text(),this.updatePagination(b))},n.prototype.initBody=function(b){var f=this,g=[],i=this.getData();this.trigger("pre-body",i),this.$body=this.$el.find("tbody"),this.$body.length||(this.$body=a("").appendTo(this.$el)),this.options.pagination&&"server"!==this.options.sidePagination||(this.pageFrom=1,this.pageTo=i.length);for(var k=this.pageFrom-1;k"),this.options.cardView&&g.push(c('',this.header.fields.length)),!this.options.cardView&&this.options.detailView&&g.push("",'',c('',this.options.iconsPrefix,this.options.icons.detailOpen),"",""),a.each(this.header.fields,function(b,i){var j="",l=m(n,i),q="",r={},s="",t=f.header.classes[b],u="",v="",w="",x=f.columns[e(f.columns,i)];if(x.visible){if(o=c('style="%s"',p.concat(f.header.styles[b]).join("; ")),l=h(x,f.header.formatters[b],[l,n,k],l),n["_"+i+"_id"]&&(s=c(' id="%s"',n["_"+i+"_id"])),n["_"+i+"_class"]&&(t=c(' class="%s"',n["_"+i+"_class"])),n["_"+i+"_rowspan"]&&(v=c(' rowspan="%s"',n["_"+i+"_rowspan"])),n["_"+i+"_title"]&&(w=c(' title="%s"',n["_"+i+"_title"])),r=h(f.header,f.header.cellStyles[b],[l,n,k],r),r.classes&&(t=c(' class="%s"',r.classes)),r.css){var y=[];for(var z in r.css)y.push(z+": "+r.css[z]);o=c('style="%s"',y.concat(f.header.styles[b]).join("; "))}n["_"+i+"_data"]&&!a.isEmptyObject(n["_"+i+"_data"])&&a.each(n["_"+i+"_data"],function(a,b){"index"!==a&&(u+=c(' data-%s="%s"',a,b))}),x.checkbox||x.radio?(q=x.checkbox?"checkbox":q,q=x.radio?"radio":q,j=[f.options.cardView?'
':'',"",f.header.formatters[b]&&"string"==typeof l?l:"",f.options.cardView?"
":""].join(""),n[f.header.stateField]=l===!0||l&&l.checked):(l="undefined"==typeof l||null===l?f.options.undefinedText:l,j=f.options.cardView?['
',f.options.showHeader?c('%s',o,d(f.columns,"field","title",i)):"",c('%s',l),"
"].join(""):[c("",s,t,o,u,v,w),l,""].join(""),f.options.cardView&&f.options.smartDisplay&&""===l&&(j="")),g.push(j)}}),this.options.cardView&&g.push(""),g.push("")}g.length||g.push('',c('%s',this.$header.find("th").length,this.options.formatNoMatches()),""),this.$body.html(g.join("")),b||this.scrollTo(0),this.$body.find("> tr[data-index] > td").off("click dblclick").on("click dblclick",function(b){var d=a(this),g=d.parent(),h=f.data[g.data("index")],i=d[0].cellIndex,j=f.header.fields[f.options.detailView&&!f.options.cardView?i-1:i],k=f.columns[e(f.columns,j)],l=m(h,j);if(!d.find(".detail-icon").length&&(f.trigger("click"===b.type?"click-cell":"dbl-click-cell",j,l,h,d),f.trigger("click"===b.type?"click-row":"dbl-click-row",h,g),"click"===b.type&&f.options.clickToSelect&&k.clickToSelect)){var n=g.find(c('[name="%s"]',f.options.selectItemName));n.length&&n[0].click()}}),this.$body.find("> tr[data-index] > td > .detail-icon").off("click").on("click",function(){var b=a(this),d=b.parent().parent(),e=d.data("index"),g=i[e];d.next().is("tr.detail-view")?(b.find("i").attr("class",c("%s %s",f.options.iconsPrefix,f.options.icons.detailOpen)),d.next().remove(),f.trigger("collapse-row",e,g)):(b.find("i").attr("class",c("%s %s",f.options.iconsPrefix,f.options.icons.detailClose)),d.after(c('%s',d.find("td").length,h(f.options,f.options.detailFormatter,[e,g],""))),f.trigger("expand-row",e,g,d.next().find("td"))),f.resetView()}),this.$selectItem=this.$body.find(c('[name="%s"]',this.options.selectItemName)),this.$selectItem.off("click").on("click",function(b){b.stopImmediatePropagation();var c=a(this),d=c.prop("checked"),e=f.data[c.data("index")];f.options.maintainSelected&&a(this).is(":radio")&&a.each(f.options.data,function(a,b){b[f.header.stateField]=!1}),e[f.header.stateField]=d,f.options.singleSelect&&(f.$selectItem.not(this).each(function(){f.data[a(this).data("index")][f.header.stateField]=!1}),f.$selectItem.filter(":checked").not(this).prop("checked",!1)),f.updateSelected(),f.trigger(d?"check":"uncheck",e,c)}),a.each(this.header.events,function(b,c){if(c){"string"==typeof c&&(c=h(null,c));var d=f.header.fields[b],e=a.inArray(d,f.getVisibleFields());f.options.detailView&&!f.options.cardView&&(e+=1);for(var g in c)f.$body.find("tr").each(function(){var b=a(this),h=b.find(f.options.cardView?".card-view":"td").eq(e),i=g.indexOf(" "),j=g.substring(0,i),k=g.substring(i+1),l=c[g];h.find(k).off(j).on(j,function(a){var c=b.data("index"),e=f.data[c],g=e[d];l.apply(this,[a,g,e,c])})})}}),this.updateSelected(),this.resetView(),this.trigger("post-body")},n.prototype.initServer=function(b,c){var d,e=this,f={},g={pageSize:this.options.pageSize===this.options.formatAllRows()?this.options.totalRows:this.options.pageSize,pageNumber:this.options.pageNumber,searchText:this.searchText,sortName:this.options.sortName,sortOrder:this.options.sortOrder};(this.options.url||this.options.ajax)&&("limit"===this.options.queryParamsType&&(g={search:g.searchText,sort:g.sortName,order:g.sortOrder},this.options.pagination&&(g.limit=this.options.pageSize===this.options.formatAllRows()?this.options.totalRows:this.options.pageSize,g.offset=this.options.pageSize===this.options.formatAllRows()?0:this.options.pageSize*(this.options.pageNumber-1))),a.isEmptyObject(this.filterColumnsPartial)||(g.filter=JSON.stringify(this.filterColumnsPartial,null)),f=h(this.options,this.options.queryParams,[g],f),a.extend(f,c||{}),f!==!1&&(b||this.$tableLoading.show(),d=a.extend({},h(null,this.options.ajaxOptions),{type:this.options.method,url:this.options.url,data:"application/json"===this.options.contentType&&"post"===this.options.method?JSON.stringify(f):f,cache:this.options.cache,contentType:this.options.contentType,dataType:this.options.dataType,success:function(a){a=h(e.options,e.options.responseHandler,[a],a),e.load(a),e.trigger("load-success",a)},error:function(a){e.trigger("load-error",a.status,a)},complete:function(){b||e.$tableLoading.hide()}}),this.options.ajax?h(this,this.options.ajax,[d],null):a.ajax(d)))},n.prototype.initSearchText=function(){if(this.options.search&&""!==this.options.searchText){var a=this.$toolbar.find(".search input");a.val(this.options.searchText),this.onSearch({ +currentTarget:a})}},n.prototype.getCaret=function(){var b=this;a.each(this.$header.find("th"),function(c,d){a(d).find(".sortable").removeClass("desc asc").addClass(a(d).data("field")===b.options.sortName?b.options.sortOrder:"both")})},n.prototype.updateSelected=function(){var b=this.$selectItem.filter(":enabled").length&&this.$selectItem.filter(":enabled").length===this.$selectItem.filter(":enabled").filter(":checked").length;this.$selectAll.add(this.$selectAll_).prop("checked",b),this.$selectItem.each(function(){a(this).closest("tr")[a(this).prop("checked")?"addClass":"removeClass"]("selected")})},n.prototype.updateRows=function(){var b=this;this.$selectItem.each(function(){b.data[a(this).data("index")][b.header.stateField]=a(this).prop("checked")})},n.prototype.resetRows=function(){var b=this;a.each(this.data,function(a,c){b.$selectAll.prop("checked",!1),b.$selectItem.prop("checked",!1),b.header.stateField&&(c[b.header.stateField]=!1)})},n.prototype.trigger=function(b){var c=Array.prototype.slice.call(arguments,1);b+=".bs.table",this.options[n.EVENTS[b]].apply(this.options,c),this.$el.trigger(a.Event(b),c),this.options.onAll(b,c),this.$el.trigger(a.Event("all.bs.table"),[b,c])},n.prototype.resetHeader=function(){clearTimeout(this.timeoutId_),this.timeoutId_=setTimeout(a.proxy(this.fitHeader,this),this.$el.is(":hidden")?100:0)},n.prototype.fitHeader=function(){var b,d,e,f,h=this;if(h.$el.is(":hidden"))return void(h.timeoutId_=setTimeout(a.proxy(h.fitHeader,h),100));if(b=this.$tableBody.get(0),d=b.scrollWidth>b.clientWidth&&b.scrollHeight>b.clientHeight+this.$header.outerHeight()?g():0,this.$el.css("margin-top",-this.$header.outerHeight()),e=a(":focus"),e.length>0){var i=e.parents("th");if(i.length>0){var j=i.attr("data-field");if(void 0!==j){var k=this.$header.find("[data-field='"+j+"']");k.length>0&&k.find(":input").addClass("focus-temp")}}}this.$header_=this.$header.clone(!0,!0),this.$selectAll_=this.$header_.find('[name="btSelectAll"]'),this.$tableHeader.css({"margin-right":d}).find("table").css("width",this.$el.outerWidth()).html("").attr("class",this.$el.attr("class")).append(this.$header_),f=a(".focus-temp:visible:eq(0)"),f.length>0&&(f.focus(),this.$header.find(".focus-temp").removeClass("focus-temp")),this.$header.find("th[data-field]").each(function(){h.$header_.find(c('th[data-field="%s"]',a(this).data("field"))).data(a(this).data())});var l=this.getVisibleFields();this.$body.find("tr:first-child:not(.no-records-found) > *").each(function(b){var d=a(this),e=b;h.options.detailView&&!h.options.cardView&&(0===b&&h.$header_.find("th.detail").find(".fht-cell").width(d.innerWidth()),e=b-1),h.$header_.find(c('th[data-field="%s"]',l[e])).find(".fht-cell").width(d.innerWidth())}),this.$tableBody.off("scroll").on("scroll",function(){h.$tableHeader.scrollLeft(a(this).scrollLeft()),h.options.showFooter&&!h.options.cardView&&h.$tableFooter.scrollLeft(a(this).scrollLeft())}),h.trigger("post-header")},n.prototype.resetFooter=function(){var b=this,d=b.getData(),e=[];this.options.showFooter&&!this.options.cardView&&(!this.options.cardView&&this.options.detailView&&e.push('
 
'),a.each(this.columns,function(a,f){var g="",i="",j=c(' class="%s"',f["class"]);f.visible&&(!b.options.cardView||f.cardVisible)&&(g=c("text-align: %s; ",f.falign?f.falign:f.align),i=c("vertical-align: %s; ",f.valign),e.push(""),e.push('
'),e.push(h(f,f.footerFormatter,[d]," ")||" "),e.push("
"),e.push('
'),e.push(""),e.push(""))}),this.$tableFooter.find("tr").html(e.join("")),clearTimeout(this.timeoutFooter_),this.timeoutFooter_=setTimeout(a.proxy(this.fitFooter,this),this.$el.is(":hidden")?100:0))},n.prototype.fitFooter=function(){var b,c,d;return clearTimeout(this.timeoutFooter_),this.$el.is(":hidden")?void(this.timeoutFooter_=setTimeout(a.proxy(this.fitFooter,this),100)):(c=this.$el.css("width"),d=c>this.$tableBody.width()?g():0,this.$tableFooter.css({"margin-right":d}).find("table").css("width",c).attr("class",this.$el.attr("class")),b=this.$tableFooter.find("td"),void this.$body.find("tr:first-child:not(.no-records-found) > *").each(function(c){var d=a(this);b.eq(c).find(".fht-cell").width(d.innerWidth())}))},n.prototype.toggleColumn=function(a,b,d){if(-1!==a&&(this.columns[a].visible=b,this.initHeader(),this.initSearch(),this.initPagination(),this.initBody(),this.options.showColumns)){var e=this.$toolbar.find(".keep-open input").prop("disabled",!1);d&&e.filter(c('[value="%s"]',a)).prop("checked",b),e.filter(":checked").length<=this.options.minimumCountColumns&&e.filter(":checked").prop("disabled",!0)}},n.prototype.toggleRow=function(a,b,d){-1!==a&&this.$body.find("undefined"!=typeof a?c('tr[data-index="%s"]',a):c('tr[data-uniqueid="%s"]',b))[d?"show":"hide"]()},n.prototype.getVisibleFields=function(){var b=this,c=[];return a.each(this.header.fields,function(a,d){var f=b.columns[e(b.columns,d)];f.visible&&c.push(d)}),c},n.prototype.resetView=function(a){var b=0;if(a&&a.height&&(this.options.height=a.height),this.$selectAll.prop("checked",this.$selectItem.length>0&&this.$selectItem.length===this.$selectItem.filter(":checked").length),this.options.height){var c=k(this.$toolbar),d=k(this.$pagination),e=this.options.height-c-d;this.$tableContainer.css("height",e+"px")}return this.options.cardView?(this.$el.css("margin-top","0"),void this.$tableContainer.css("padding-bottom","0")):(this.options.showHeader&&this.options.height?(this.$tableHeader.show(),this.resetHeader(),b+=this.$header.outerHeight()):(this.$tableHeader.hide(),this.trigger("post-header")),this.options.showFooter&&(this.resetFooter(),this.options.height&&(b+=this.$tableFooter.outerHeight()+1)),this.getCaret(),this.$tableContainer.css("padding-bottom",b+"px"),void this.trigger("reset-view"))},n.prototype.getData=function(b){return!this.searchText&&a.isEmptyObject(this.filterColumns)&&a.isEmptyObject(this.filterColumnsPartial)?b?this.options.data.slice(this.pageFrom-1,this.pageTo):this.options.data:b?this.data.slice(this.pageFrom-1,this.pageTo):this.data},n.prototype.load=function(b){var c=!1;"server"===this.options.sidePagination?(this.options.totalRows=b.total,c=b.fixedScroll,b=b[this.options.dataField]):a.isArray(b)||(c=b.fixedScroll,b=b.data),this.initData(b),this.initSearch(),this.initPagination(),this.initBody(c)},n.prototype.append=function(a){this.initData(a,"append"),this.initSearch(),this.initPagination(),this.initBody(!0)},n.prototype.prepend=function(a){this.initData(a,"prepend"),this.initSearch(),this.initPagination(),this.initBody(!0)},n.prototype.remove=function(b){var c,d,e=this.options.data.length;if(b.hasOwnProperty("field")&&b.hasOwnProperty("values")){for(c=e-1;c>=0;c--)d=this.options.data[c],d.hasOwnProperty(b.field)&&-1!==a.inArray(d[b.field],b.values)&&this.options.data.splice(c,1);e!==this.options.data.length&&(this.initSearch(),this.initPagination(),this.initBody(!0))}},n.prototype.removeAll=function(){this.options.data.length>0&&(this.options.data.splice(0,this.options.data.length),this.initSearch(),this.initPagination(),this.initBody(!0))},n.prototype.getRowByUniqueId=function(a){var b,c,d=this.options.uniqueId,e=this.options.data.length,f=null;for(b=e-1;b>=0;b--)if(c=this.options.data[b],c.hasOwnProperty(d)&&("string"==typeof c[d]?a=a.toString():"number"==typeof c[d]&&(Number(c[d])===c[d]&&c[d]%1===0?a=parseInt(a):c[d]===Number(c[d])&&0!==c[d]&&(a=parseFloat(a))),c[d]===a)){f=c;break}return f},n.prototype.removeByUniqueId=function(a){var b=this.options.data.length,c=this.getRowByUniqueId(a);c&&this.options.data.splice(this.options.data.indexOf(c),1),b!==this.options.data.length&&(this.initSearch(),this.initPagination(),this.initBody(!0))},n.prototype.insertRow=function(a){a.hasOwnProperty("index")&&a.hasOwnProperty("row")&&(this.data.splice(a.index,0,a.row),this.initSearch(),this.initPagination(),this.initSort(),this.initBody(!0))},n.prototype.updateRow=function(b){b.hasOwnProperty("index")&&b.hasOwnProperty("row")&&(a.extend(this.data[b.index],b.row),this.initSort(),this.initBody(!0))},n.prototype.showRow=function(a){a.hasOwnProperty("index")&&a.hasOwnProperty("uniqueId")&&this.toggleRow(a.index,a.uniqueId,!0)},n.prototype.hideRow=function(a){a.hasOwnProperty("index")&&a.hasOwnProperty("uniqueId")&&this.toggleRow(a.index,a.uniqueId,!1)},n.prototype.getRowsHidden=function(b){var c=a(this.$body[0]).children().filter(":hidden"),d=0;if(b)for(;df||0>g||f>=this.data.length)){for(c=f;f+h>c;c++)for(d=g;g+i>d;d++)j.eq(c).find("td").eq(d).hide();e.attr("rowspan",h).attr("colspan",i).show()}},n.prototype.updateCell=function(a){a.hasOwnProperty("index")&&a.hasOwnProperty("field")&&a.hasOwnProperty("value")&&(this.data[a.index][a.field]=a.value,this.initSort(),this.initBody(!0))},n.prototype.getOptions=function(){return this.options},n.prototype.getSelections=function(){var b=this;return a.grep(this.data,function(a){return a[b.header.stateField]})},n.prototype.getAllSelections=function(){var b=this;return a.grep(this.options.data,function(a){return a[b.header.stateField]})},n.prototype.checkAll=function(){this.checkAll_(!0)},n.prototype.uncheckAll=function(){this.checkAll_(!1)},n.prototype.checkAll_=function(a){var b;a||(b=this.getSelections()),this.$selectAll.add(this.$selectAll_).prop("checked",a),this.$selectItem.filter(":enabled").prop("checked",a),this.updateRows(),a&&(b=this.getSelections()),this.trigger(a?"check-all":"uncheck-all",b)},n.prototype.check=function(a){this.check_(!0,a)},n.prototype.uncheck=function(a){this.check_(!1,a)},n.prototype.check_=function(a,b){this.$selectItem.filter(c('[data-index="%s"]',b)).prop("checked",a),this.data[b][this.header.stateField]=a,this.updateSelected(),this.trigger(a?"check":"uncheck",this.data[b])},n.prototype.checkBy=function(a){this.checkBy_(!0,a)},n.prototype.uncheckBy=function(a){this.checkBy_(!1,a)},n.prototype.checkBy_=function(b,d){if(d.hasOwnProperty("field")&&d.hasOwnProperty("values")){var e=this,f=[];a.each(this.options.data,function(g,h){return h.hasOwnProperty(d.field)?void(-1!==a.inArray(h[d.field],d.values)&&(e.$selectItem.filter(":enabled").filter(c('[data-index="%s"]',g)).prop("checked",b),h[e.header.stateField]=b,f.push(h),e.trigger(b?"check":"uncheck",h))):!1}),this.updateSelected(),this.trigger(b?"check-some":"uncheck-some",f)}},n.prototype.destroy=function(){this.$el.insertBefore(this.$container),a(this.options.toolbar).insertBefore(this.$el),this.$container.next().remove(),this.$container.remove(),this.$el.html(this.$el_.html()).css("margin-top","0").attr("class",this.$el_.attr("class")||"")},n.prototype.showLoading=function(){this.$tableLoading.show()},n.prototype.hideLoading=function(){this.$tableLoading.hide()},n.prototype.togglePagination=function(){this.options.pagination=!this.options.pagination;var a=this.$toolbar.find('button[name="paginationSwitch"] i');this.options.pagination?a.attr("class",this.options.iconsPrefix+" "+this.options.icons.paginationSwitchDown):a.attr("class",this.options.iconsPrefix+" "+this.options.icons.paginationSwitchUp),this.updatePagination()},n.prototype.refresh=function(a){a&&a.url&&(this.options.url=a.url,this.options.pageNumber=1),this.initServer(a&&a.silent,a&&a.query)},n.prototype.resetWidth=function(){this.options.showHeader&&this.options.height&&this.fitHeader(),this.options.showFooter&&this.fitFooter()},n.prototype.showColumn=function(a){this.toggleColumn(e(this.columns,a),!0,!0)},n.prototype.hideColumn=function(a){this.toggleColumn(e(this.columns,a),!1,!0)},n.prototype.getHiddenColumns=function(){return a.grep(this.columns,function(a){return!a.visible})},n.prototype.filterBy=function(b){this.filterColumns=a.isEmptyObject(b)?{}:b,this.options.pageNumber=1,this.initSearch(),this.updatePagination()},n.prototype.scrollTo=function(a){return"string"==typeof a&&(a="bottom"===a?this.$tableBody[0].scrollHeight:0),"number"==typeof a&&this.$tableBody.scrollTop(a),"undefined"==typeof a?this.$tableBody.scrollTop():void 0},n.prototype.getScrollPosition=function(){return this.scrollTo()},n.prototype.selectPage=function(a){a>0&&a<=this.options.totalPages&&(this.options.pageNumber=a,this.updatePagination())},n.prototype.prevPage=function(){this.options.pageNumber>1&&(this.options.pageNumber--,this.updatePagination())},n.prototype.nextPage=function(){this.options.pageNumber tr[data-index="%s"]',b));d.next().is("tr.detail-view")===(a?!1:!0)&&d.find("> td > .detail-icon").click()},n.prototype.expandRow=function(a){this.expandRow_(!0,a)},n.prototype.collapseRow=function(a){this.expandRow_(!1,a)},n.prototype.expandAllRows=function(b){if(b){var d=this.$body.find(c('> tr[data-index="%s"]',0)),e=this,f=null,g=!1,h=-1;if(d.next().is("tr.detail-view")?d.next().next().is("tr.detail-view")||(d.next().find(".detail-icon").click(),g=!0):(d.find("> td > .detail-icon").click(),g=!0),g)try{h=setInterval(function(){f=e.$body.find("tr.detail-view").last().find(".detail-icon"),f.length>0?f.click():clearInterval(h)},1)}catch(i){clearInterval(h)}}else for(var j=this.$body.children(),k=0;k text + }) + cb.on('success', (e) => { + console.log(e) + tip.msgbox.suc('复制成功') + e.clearSelection(); + }) + cb.on('error', (e) => { + console.log(e) + tip.msgbox.err('复制失败') + }) + }) + }) +}; +common.getUrlParam = function(name) { + var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象 + var r = window.location.search.substr(1).match(reg); //匹配目标参数 + if (r != null) return unescape(r[2]); return null; //返回参数值 +} +//获取url中的参数信息 +common.getParams = function(name){ + var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); + var r = window.location.search.substr(1).match(reg); + if(r!=null)return unescape(r[2]); return null; +} +//POST请求 +common.ajaxPost = function (path,params,returnType = false,urlType = true) { + let result,url; + //获取链接信息 + /*if(urlType == true){ + url = common.webUrl(path,'',true); + }else if(urlType == 2){ + url = common.storeUrl(path,'',true); + }else{ + url = common.sysUrl(path,'',true); + }*/ + url = biz.url(path); + $.ajax({ + type: "POST", + url: url, + data: params, + dataType: "json", + async: false, + timeout: 180000 , + success: function (data) { + if(returnType){ + result = data; + }else{ + result = data['data']; + } + }, + error: function (errors) { + console.log("请求失败"); + } + }); + return result; +}; + + + + + +/** + * vue公共方法 + */ +var commonVue = new Vue({ + el: '', + data: { + demo:'调用成功', + }, + methods: { + //ajax请求 + requestAjax(path,params,returnType = false,urlType = true,is_file=false,siteroot=''){ + let result,url; + //获取链接信息 + if(urlType){ + url = common.webUrl(path,'',true,siteroot); + }else{ + url = common.sysUrl(path,'',true,siteroot); + } + //自由获取连接 公共调用 + if(urlType == 'public'){ + let c = common.getParams('c'); + if(c){ + url = common.sysUrl(path,'',true,siteroot); + }else{ + url = common.webUrl(path,'',true,siteroot); + } + } + //请求发送信息 + if(is_file){ + $.ajax({ + type: "POST", + url: url, + data: params, + dataType: "json", + async: false, + processData : false, // 使数据不做处理 + contentType : false, // 不要设置Content-Type请求头 + success: function (data) { + if(returnType){ + result = data; + }else{ + result = data['data']; + } + }, + error: function (errors) { + console.log("请求失败"); + } + }); + }else{ + $.ajax({ + type: "POST", + url: url, + data: params, + dataType: "json", + async: false, + success: function (data) { + if(returnType){ + result = data; + }else{ + result = data['data']; + } + }, + error: function (errors) { + console.log("请求失败"); + } + }); + } + return result; + }, + //获取拥有的模块信息 + getModular(){ + let res = commonVue.requestAjax('goods/Goods/getModular',{page:this.page}); + return res; + }, + }, + watch: {}, +}); \ No newline at end of file diff --git a/addons/weliam_smartcity/web/resource/js/contextMenu/jquery.contextMenu.css b/addons/weliam_smartcity/web/resource/js/contextMenu/jquery.contextMenu.css new file mode 100644 index 0000000..cc73fbd --- /dev/null +++ b/addons/weliam_smartcity/web/resource/js/contextMenu/jquery.contextMenu.css @@ -0,0 +1,140 @@ +/*! + * jQuery contextMenu - Plugin for simple contextMenu handling + * + * Version: 1.6.6 + * + * Authors: Rodney Rehm, Addy Osmani (patches for FF) + * Web: http://medialize.github.com/jQuery-contextMenu/ + * + * Licensed under + * MIT License http://www.opensource.org/licenses/mit-license + * GPL v3 http://opensource.org/licenses/GPL-3.0 + * + */ + +.context-menu-list { + margin:0; + padding:0; + + min-width: 120px; + max-width: 250px; + display: inline-block; + position: absolute; + list-style-type: none; + border: 1px solid #DDD; + background: #EEE; + -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5); + -ms-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5); + -o-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5); + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5); + + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; +} + +.context-menu-item { + padding: 2px 2px 2px 24px; + background-color: #EEE; + position: relative; + -webkit-user-select: none; + -moz-user-select: -moz-none; + -ms-user-select: none; + user-select: none; +} + +.context-menu-separator { + padding-bottom:0; + border-bottom: 1px solid #DDD; +} + +.context-menu-item > label > input, +.context-menu-item > label > textarea { + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; +} + +.context-menu-item.hover { + cursor: pointer; + background-color: #39F; +} + +.context-menu-item.disabled { + color: #666; +} + +.context-menu-input.hover, +.context-menu-item.disabled.hover { + cursor: default; + background-color: #EEE; +} + +.context-menu-submenu:after { + content: ">"; + color: #666; + position: absolute; + top: 0; + right: 3px; + z-index: 1; +} + +/* icons + #protip: + In case you want to use sprites for icons (which I would suggest you do) have a look at + http://css-tricks.com/13224-pseudo-spriting/ to get an idea of how to implement + .context-menu-item.icon:before {} + */ +.context-menu-item.icon { min-height: 18px; background-repeat: no-repeat; background-position: 4px 2px; } +.context-menu-item.icon-edit { background-image: url(images/page_white_edit.png); } +.context-menu-item.icon-cut { background-image: url(images/cut.png); } +.context-menu-item.icon-copy { background-image: url(images/page_white_copy.png); } +.context-menu-item.icon-paste { background-image: url(images/page_white_paste.png); } +.context-menu-item.icon-delete { background-image: url(images/page_white_delete.png); } +.context-menu-item.icon-add { background-image: url(images/page_white_add.png); } +.context-menu-item.icon-quit { background-image: url(images/door.png); } + +/* vertically align inside labels */ +.context-menu-input > label > * { vertical-align: top; } + +/* position checkboxes and radios as icons */ +.context-menu-input > label > input[type="checkbox"], +.context-menu-input > label > input[type="radio"] { + margin-left: -17px; +} +.context-menu-input > label > span { + margin-left: 5px; +} + +.context-menu-input > label, +.context-menu-input > label > input[type="text"], +.context-menu-input > label > textarea, +.context-menu-input > label > select { + display: block; + width: 100%; + + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + -o-box-sizing: border-box; + box-sizing: border-box; +} + +.context-menu-input > label > textarea { + height: 100px; +} +.context-menu-item > .context-menu-list { + display: none; + /* re-positioned by js */ + right: -5px; + top: 5px; +} + +.context-menu-item.hover > .context-menu-list { + display: block; +} + +.context-menu-accesskey { + text-decoration: underline; +} diff --git a/addons/weliam_smartcity/web/resource/js/contextMenu/jquery.contextMenu.js b/addons/weliam_smartcity/web/resource/js/contextMenu/jquery.contextMenu.js new file mode 100644 index 0000000..4f67d51 --- /dev/null +++ b/addons/weliam_smartcity/web/resource/js/contextMenu/jquery.contextMenu.js @@ -0,0 +1,1686 @@ +/*! + * jQuery contextMenu - Plugin for simple contextMenu handling + * + * Version: 1.6.6 + * + * Authors: Rodney Rehm, Addy Osmani (patches for FF) + * Web: http://medialize.github.com/jQuery-contextMenu/ + * + * Licensed under + * MIT License http://www.opensource.org/licenses/mit-license + * GPL v3 http://opensource.org/licenses/GPL-3.0 + * + */ + +(function($, undefined){ + + // TODO: - + // ARIA stuff: menuitem, menuitemcheckbox und menuitemradio + // create structure if $.support[htmlCommand || htmlMenuitem] and !opt.disableNative + +// determine html5 compatibility +$.support.htmlMenuitem = ('HTMLMenuItemElement' in window); +$.support.htmlCommand = ('HTMLCommandElement' in window); +$.support.eventSelectstart = ("onselectstart" in document.documentElement); +/* // should the need arise, test for css user-select +$.support.cssUserSelect = (function(){ + var t = false, + e = document.createElement('div'); + + $.each('Moz|Webkit|Khtml|O|ms|Icab|'.split('|'), function(i, prefix) { + var propCC = prefix + (prefix ? 'U' : 'u') + 'serSelect', + prop = (prefix ? ('-' + prefix.toLowerCase() + '-') : '') + 'user-select'; + + e.style.cssText = prop + ': text;'; + if (e.style[propCC] == 'text') { + t = true; + return false; + } + + return true; + }); + + return t; +})(); +*/ + +if (!$.ui || !$.ui.widget) { + // duck punch $.cleanData like jQueryUI does to get that remove event + // https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.widget.js#L16-24 + var _cleanData = $.cleanData; + $.cleanData = function( elems ) { + for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { + try { + $( elem ).triggerHandler( "remove" ); + // http://bugs.jquery.com/ticket/8235 + } catch( e ) {} + } + _cleanData( elems ); + }; +} + +var // currently active contextMenu trigger + $currentTrigger = null, + // is contextMenu initialized with at least one menu? + initialized = false, + // window handle + $win = $(window), + // number of registered menus + counter = 0, + // mapping selector to namespace + namespaces = {}, + // mapping namespace to options + menus = {}, + // custom command type handlers + types = {}, + // default values + defaults = { + // selector of contextMenu trigger + selector: null, + // where to append the menu to + appendTo: null, + // method to trigger context menu ["right", "left", "hover"] + trigger: "right", + // hide menu when mouse leaves trigger / menu elements + autoHide: false, + // ms to wait before showing a hover-triggered context menu + delay: 200, + // flag denoting if a second trigger should simply move (true) or rebuild (false) an open menu + // as long as the trigger happened on one of the trigger-element's child nodes + reposition: true, + // determine position to show menu at + determinePosition: function($menu) { + // position to the lower middle of the trigger element + if ($.ui && $.ui.position) { + // .position() is provided as a jQuery UI utility + // (...and it won't work on hidden elements) + $menu.css('display', 'block').position({ + my: "center top", + at: "center bottom", + of: this, + offset: "0 5", + collision: "fit" + }).css('display', 'none'); + } else { + // determine contextMenu position + var offset = this.offset(); + offset.top += this.outerHeight(); + offset.left += this.outerWidth() / 2 - $menu.outerWidth() / 2; + $menu.css(offset); + } + }, + // position menu + position: function(opt, x, y) { + var $this = this, + offset; + // determine contextMenu position + if (!x && !y) { + opt.determinePosition.call(this, opt.$menu); + return; + } else if (x === "maintain" && y === "maintain") { + // x and y must not be changed (after re-show on command click) + offset = opt.$menu.position(); + } else { + // x and y are given (by mouse event) + offset = {top: y, left: x}; + } + + // correct offset if viewport demands it + var bottom = $win.scrollTop() + $win.height(), + right = $win.scrollLeft() + $win.width(), + height = opt.$menu.height(), + width = opt.$menu.width(); + + if (offset.top + height > bottom) { + offset.top -= height; + } + + if (offset.left + width > right) { + offset.left -= width; + } + + opt.$menu.css(offset); + }, + // position the sub-menu + positionSubmenu: function($menu) { + if ($.ui && $.ui.position) { + // .position() is provided as a jQuery UI utility + // (...and it won't work on hidden elements) + $menu.css('display', 'block').position({ + my: "left top", + at: "right top", + of: this, + collision: "flipfit fit" + }).css('display', ''); + } else { + // determine contextMenu position + var offset = { + top: 0, + left: this.outerWidth() + }; + $menu.css(offset); + } + }, + // offset to add to zIndex + zIndex: 1, + // show hide animation settings + animation: { + duration: 50, + show: 'slideDown', + hide: 'slideUp' + }, + // events + events: { + show: $.noop, + hide: $.noop + }, + // default callback + callback: null, + // list of contextMenu items + items: {} + }, + // mouse position for hover activation + hoveract = { + timer: null, + pageX: null, + pageY: null + }, + // determine zIndex + zindex = function($t) { + var zin = 0, + $tt = $t; + + while (true) { + zin = Math.max(zin, parseInt($tt.css('z-index'), 10) || 0); + $tt = $tt.parent(); + if (!$tt || !$tt.length || "html body".indexOf($tt.prop('nodeName').toLowerCase()) > -1 ) { + break; + } + } + + return zin; + }, + // event handlers + handle = { + // abort anything + abortevent: function(e){ + e.preventDefault(); + e.stopImmediatePropagation(); + }, + + // contextmenu show dispatcher + contextmenu: function(e) { + var $this = $(this); + + // disable actual context-menu + e.preventDefault(); + e.stopImmediatePropagation(); + + // abort native-triggered events unless we're triggering on right click + if (e.data.trigger != 'right' && e.originalEvent) { + return; + } + + // abort event if menu is visible for this trigger + if ($this.hasClass('context-menu-active')) { + return; + } + + if (!$this.hasClass('context-menu-disabled')) { + // theoretically need to fire a show event at + // http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#context-menus + // var evt = jQuery.Event("show", { data: data, pageX: e.pageX, pageY: e.pageY, relatedTarget: this }); + // e.data.$menu.trigger(evt); + + $currentTrigger = $this; + if (e.data.build) { + var built = e.data.build($currentTrigger, e); + // abort if build() returned false + if (built === false) { + return; + } + + // dynamically build menu on invocation + e.data = $.extend(true, {}, defaults, e.data, built || {}); + + // abort if there are no items to display + if (!e.data.items || $.isEmptyObject(e.data.items)) { + // Note: jQuery captures and ignores errors from event handlers + if (window.console) { + (console.error || console.log)("No items specified to show in contextMenu"); + } + + throw new Error('No Items specified'); + } + + // backreference for custom command type creation + e.data.$trigger = $currentTrigger; + + op.create(e.data); + } + // show menu + op.show.call($this, e.data, e.pageX, e.pageY); + } + }, + // contextMenu left-click trigger + click: function(e) { + e.preventDefault(); + e.stopImmediatePropagation(); + $(this).trigger($.Event("contextmenu", { data: e.data, pageX: e.pageX, pageY: e.pageY })); + }, + // contextMenu right-click trigger + mousedown: function(e) { + // register mouse down + var $this = $(this); + + // hide any previous menus + if ($currentTrigger && $currentTrigger.length && !$currentTrigger.is($this)) { + $currentTrigger.data('contextMenu').$menu.trigger('contextmenu:hide'); + } + + // activate on right click + if (e.button == 2) { + $currentTrigger = $this.data('contextMenuActive', true); + } + }, + // contextMenu right-click trigger + mouseup: function(e) { + // show menu + var $this = $(this); + if ($this.data('contextMenuActive') && $currentTrigger && $currentTrigger.length && $currentTrigger.is($this) && !$this.hasClass('context-menu-disabled')) { + e.preventDefault(); + e.stopImmediatePropagation(); + $currentTrigger = $this; + $this.trigger($.Event("contextmenu", { data: e.data, pageX: e.pageX, pageY: e.pageY })); + } + + $this.removeData('contextMenuActive'); + }, + // contextMenu hover trigger + mouseenter: function(e) { + var $this = $(this), + $related = $(e.relatedTarget), + $document = $(document); + + // abort if we're coming from a menu + if ($related.is('.context-menu-list') || $related.closest('.context-menu-list').length) { + return; + } + + // abort if a menu is shown + if ($currentTrigger && $currentTrigger.length) { + return; + } + + hoveract.pageX = e.pageX; + hoveract.pageY = e.pageY; + hoveract.data = e.data; + $document.on('mousemove.contextMenuShow', handle.mousemove); + hoveract.timer = setTimeout(function() { + hoveract.timer = null; + $document.off('mousemove.contextMenuShow'); + $currentTrigger = $this; + $this.trigger($.Event("contextmenu", { data: hoveract.data, pageX: hoveract.pageX, pageY: hoveract.pageY })); + }, e.data.delay ); + }, + // contextMenu hover trigger + mousemove: function(e) { + hoveract.pageX = e.pageX; + hoveract.pageY = e.pageY; + }, + // contextMenu hover trigger + mouseleave: function(e) { + // abort if we're leaving for a menu + var $related = $(e.relatedTarget); + if ($related.is('.context-menu-list') || $related.closest('.context-menu-list').length) { + return; + } + + try { + clearTimeout(hoveract.timer); + } catch(e) {} + + hoveract.timer = null; + }, + + // click on layer to hide contextMenu + layerClick: function(e) { + var $this = $(this), + root = $this.data('contextMenuRoot'), + mouseup = false, + button = e.button, + x = e.pageX, + y = e.pageY, + target, + offset, + selectors; + + e.preventDefault(); + e.stopImmediatePropagation(); + + setTimeout(function() { + var $window, hideshow, possibleTarget; + var triggerAction = ((root.trigger == 'left' && button === 0) || (root.trigger == 'right' && button === 2)); + + // find the element that would've been clicked, wasn't the layer in the way + if (document.elementFromPoint) { + root.$layer.hide(); + target = document.elementFromPoint(x - $win.scrollLeft(), y - $win.scrollTop()); + root.$layer.show(); + } + + if (root.reposition && triggerAction) { + if (document.elementFromPoint) { + if (root.$trigger.is(target) || root.$trigger.has(target).length) { + root.position.call(root.$trigger, root, x, y); + return; + } + } else { + offset = root.$trigger.offset(); + $window = $(window); + // while this looks kinda awful, it's the best way to avoid + // unnecessarily calculating any positions + offset.top += $window.scrollTop(); + if (offset.top <= e.pageY) { + offset.left += $window.scrollLeft(); + if (offset.left <= e.pageX) { + offset.bottom = offset.top + root.$trigger.outerHeight(); + if (offset.bottom >= e.pageY) { + offset.right = offset.left + root.$trigger.outerWidth(); + if (offset.right >= e.pageX) { + // reposition + root.position.call(root.$trigger, root, x, y); + return; + } + } + } + } + } + } + + if (target && triggerAction) { + root.$trigger.one('contextmenu:hidden', function() { + $(target).contextMenu({x: x, y: y}); + }); + } + + root.$menu.trigger('contextmenu:hide'); + }, 50); + }, + // key handled :hover + keyStop: function(e, opt) { + if (!opt.isInput) { + e.preventDefault(); + } + + e.stopPropagation(); + }, + key: function(e) { + var opt = $currentTrigger.data('contextMenu') || {}; + + switch (e.keyCode) { + case 9: + case 38: // up + handle.keyStop(e, opt); + // if keyCode is [38 (up)] or [9 (tab) with shift] + if (opt.isInput) { + if (e.keyCode == 9 && e.shiftKey) { + e.preventDefault(); + opt.$selected && opt.$selected.find('input, textarea, select').blur(); + opt.$menu.trigger('prevcommand'); + return; + } else if (e.keyCode == 38 && opt.$selected.find('input, textarea, select').prop('type') == 'checkbox') { + // checkboxes don't capture this key + e.preventDefault(); + return; + } + } else if (e.keyCode != 9 || e.shiftKey) { + opt.$menu.trigger('prevcommand'); + return; + } + // omitting break; + + // case 9: // tab - reached through omitted break; + case 40: // down + handle.keyStop(e, opt); + if (opt.isInput) { + if (e.keyCode == 9) { + e.preventDefault(); + opt.$selected && opt.$selected.find('input, textarea, select').blur(); + opt.$menu.trigger('nextcommand'); + return; + } else if (e.keyCode == 40 && opt.$selected.find('input, textarea, select').prop('type') == 'checkbox') { + // checkboxes don't capture this key + e.preventDefault(); + return; + } + } else { + opt.$menu.trigger('nextcommand'); + return; + } + break; + + case 37: // left + handle.keyStop(e, opt); + if (opt.isInput || !opt.$selected || !opt.$selected.length) { + break; + } + + if (!opt.$selected.parent().hasClass('context-menu-root')) { + var $parent = opt.$selected.parent().parent(); + opt.$selected.trigger('contextmenu:blur'); + opt.$selected = $parent; + return; + } + break; + + case 39: // right + handle.keyStop(e, opt); + if (opt.isInput || !opt.$selected || !opt.$selected.length) { + break; + } + + var itemdata = opt.$selected.data('contextMenu') || {}; + if (itemdata.$menu && opt.$selected.hasClass('context-menu-submenu')) { + opt.$selected = null; + itemdata.$selected = null; + itemdata.$menu.trigger('nextcommand'); + return; + } + break; + + case 35: // end + case 36: // home + if (opt.$selected && opt.$selected.find('input, textarea, select').length) { + return; + } else { + (opt.$selected && opt.$selected.parent() || opt.$menu) + .children(':not(.disabled, .not-selectable)')[e.keyCode == 36 ? 'first' : 'last']() + .trigger('contextmenu:focus'); + e.preventDefault(); + return; + } + break; + + case 13: // enter + handle.keyStop(e, opt); + if (opt.isInput) { + if (opt.$selected && !opt.$selected.is('textarea, select')) { + e.preventDefault(); + return; + } + break; + } + opt.$selected && opt.$selected.trigger('mouseup'); + return; + + case 32: // space + case 33: // page up + case 34: // page down + // prevent browser from scrolling down while menu is visible + handle.keyStop(e, opt); + return; + + case 27: // esc + handle.keyStop(e, opt); + opt.$menu.trigger('contextmenu:hide'); + return; + + default: // 0-9, a-z + var k = (String.fromCharCode(e.keyCode)).toUpperCase(); + if (opt.accesskeys[k]) { + // according to the specs accesskeys must be invoked immediately + opt.accesskeys[k].$node.trigger(opt.accesskeys[k].$menu + ? 'contextmenu:focus' + : 'mouseup' + ); + return; + } + break; + } + // pass event to selected item, + // stop propagation to avoid endless recursion + e.stopPropagation(); + opt.$selected && opt.$selected.trigger(e); + }, + + // select previous possible command in menu + prevItem: function(e) { + e.stopPropagation(); + var opt = $(this).data('contextMenu') || {}; + + // obtain currently selected menu + if (opt.$selected) { + var $s = opt.$selected; + opt = opt.$selected.parent().data('contextMenu') || {}; + opt.$selected = $s; + } + + var $children = opt.$menu.children(), + $prev = !opt.$selected || !opt.$selected.prev().length ? $children.last() : opt.$selected.prev(), + $round = $prev; + + // skip disabled + while ($prev.hasClass('disabled') || $prev.hasClass('not-selectable')) { + if ($prev.prev().length) { + $prev = $prev.prev(); + } else { + $prev = $children.last(); + } + if ($prev.is($round)) { + // break endless loop + return; + } + } + + // leave current + if (opt.$selected) { + handle.itemMouseleave.call(opt.$selected.get(0), e); + } + + // activate next + handle.itemMouseenter.call($prev.get(0), e); + + // focus input + var $input = $prev.find('input, textarea, select'); + if ($input.length) { + $input.focus(); + } + }, + // select next possible command in menu + nextItem: function(e) { + e.stopPropagation(); + var opt = $(this).data('contextMenu') || {}; + + // obtain currently selected menu + if (opt.$selected) { + var $s = opt.$selected; + opt = opt.$selected.parent().data('contextMenu') || {}; + opt.$selected = $s; + } + + var $children = opt.$menu.children(), + $next = !opt.$selected || !opt.$selected.next().length ? $children.first() : opt.$selected.next(), + $round = $next; + + // skip disabled + while ($next.hasClass('disabled') || $next.hasClass('not-selectable')) { + if ($next.next().length) { + $next = $next.next(); + } else { + $next = $children.first(); + } + if ($next.is($round)) { + // break endless loop + return; + } + } + + // leave current + if (opt.$selected) { + handle.itemMouseleave.call(opt.$selected.get(0), e); + } + + // activate next + handle.itemMouseenter.call($next.get(0), e); + + // focus input + var $input = $next.find('input, textarea, select'); + if ($input.length) { + $input.focus(); + } + }, + + // flag that we're inside an input so the key handler can act accordingly + focusInput: function(e) { + var $this = $(this).closest('.context-menu-item'), + data = $this.data(), + opt = data.contextMenu, + root = data.contextMenuRoot; + + root.$selected = opt.$selected = $this; + root.isInput = opt.isInput = true; + }, + // flag that we're inside an input so the key handler can act accordingly + blurInput: function(e) { + var $this = $(this).closest('.context-menu-item'), + data = $this.data(), + opt = data.contextMenu, + root = data.contextMenuRoot; + + root.isInput = opt.isInput = false; + }, + + // :hover on menu + menuMouseenter: function(e) { + var root = $(this).data().contextMenuRoot; + root.hovering = true; + }, + // :hover on menu + menuMouseleave: function(e) { + var root = $(this).data().contextMenuRoot; + if (root.$layer && root.$layer.is(e.relatedTarget)) { + root.hovering = false; + } + }, + + // :hover done manually so key handling is possible + itemMouseenter: function(e) { + var $this = $(this), + data = $this.data(), + opt = data.contextMenu, + root = data.contextMenuRoot; + + root.hovering = true; + + // abort if we're re-entering + if (e && root.$layer && root.$layer.is(e.relatedTarget)) { + e.preventDefault(); + e.stopImmediatePropagation(); + } + + // make sure only one item is selected + (opt.$menu ? opt : root).$menu + .children('.hover').trigger('contextmenu:blur'); + + if ($this.hasClass('disabled') || $this.hasClass('not-selectable')) { + opt.$selected = null; + return; + } + + $this.trigger('contextmenu:focus'); + }, + // :hover done manually so key handling is possible + itemMouseleave: function(e) { + var $this = $(this), + data = $this.data(), + opt = data.contextMenu, + root = data.contextMenuRoot; + + if (root !== opt && root.$layer && root.$layer.is(e.relatedTarget)) { + root.$selected && root.$selected.trigger('contextmenu:blur'); + e.preventDefault(); + e.stopImmediatePropagation(); + root.$selected = opt.$selected = opt.$node; + return; + } + + $this.trigger('contextmenu:blur'); + }, + // contextMenu item click + itemClick: function(e) { + var $this = $(this), + data = $this.data(), + opt = data.contextMenu, + root = data.contextMenuRoot, + key = data.contextMenuKey, + callback; + + // abort if the key is unknown or disabled or is a menu + if (!opt.items[key] || $this.is('.disabled, .context-menu-submenu, .context-menu-separator, .not-selectable')) { + return; + } + + e.preventDefault(); + e.stopImmediatePropagation(); + + if ($.isFunction(root.callbacks[key]) && Object.prototype.hasOwnProperty.call(root.callbacks, key)) { + // item-specific callback + callback = root.callbacks[key]; + } else if ($.isFunction(root.callback)) { + // default callback + callback = root.callback; + } else { + // no callback, no action + return; + } + + // hide menu if callback doesn't stop that + if (callback.call(root.$trigger, key, root) !== false) { + root.$menu.trigger('contextmenu:hide'); + } else if (root.$menu.parent().length) { + op.update.call(root.$trigger, root); + } + }, + // ignore click events on input elements + inputClick: function(e) { + e.stopImmediatePropagation(); + }, + + // hide + hideMenu: function(e, data) { + var root = $(this).data('contextMenuRoot'); + op.hide.call(root.$trigger, root, data && data.force); + }, + // focus + focusItem: function(e) { + e.stopPropagation(); + var $this = $(this), + data = $this.data(), + opt = data.contextMenu, + root = data.contextMenuRoot; + + $this.addClass('hover') + .siblings('.hover').trigger('contextmenu:blur'); + + // remember selected + opt.$selected = root.$selected = $this; + + // position sub-menu - do after show so dumb $.ui.position can keep up + if (opt.$node) { + root.positionSubmenu.call(opt.$node, opt.$menu); + } + }, + // blur + blurItem: function(e) { + e.stopPropagation(); + var $this = $(this), + data = $this.data(), + opt = data.contextMenu, + root = data.contextMenuRoot; + + $this.removeClass('hover'); + opt.$selected = null; + } + }, + // operations + op = { + show: function(opt, x, y) { + var $trigger = $(this), + offset, + css = {}; + + // hide any open menus + $('#context-menu-layer').trigger('mousedown'); + + // backreference for callbacks + opt.$trigger = $trigger; + + // show event + if (opt.events.show.call($trigger, opt) === false) { + $currentTrigger = null; + return; + } + + // create or update context menu + op.update.call($trigger, opt); + + // position menu + opt.position.call($trigger, opt, x, y); + + // make sure we're in front + if (opt.zIndex) { + css.zIndex = zindex($trigger) + opt.zIndex; + } + + // add layer + op.layer.call(opt.$menu, opt, css.zIndex); + + // adjust sub-menu zIndexes + opt.$menu.find('ul').css('zIndex', css.zIndex + 1); + + // position and show context menu + opt.$menu.css( css )[opt.animation.show](opt.animation.duration, function() { + $trigger.trigger('contextmenu:visible'); + }); + // make options available and set state + $trigger + .data('contextMenu', opt) + .addClass("context-menu-active"); + + // register key handler + $(document).off('keydown.contextMenu').on('keydown.contextMenu', handle.key); + // register autoHide handler + if (opt.autoHide) { + // mouse position handler + $(document).on('mousemove.contextMenuAutoHide', function(e) { + // need to capture the offset on mousemove, + // since the page might've been scrolled since activation + var pos = $trigger.offset(); + pos.right = pos.left + $trigger.outerWidth(); + pos.bottom = pos.top + $trigger.outerHeight(); + + if (opt.$layer && !opt.hovering && (!(e.pageX >= pos.left && e.pageX <= pos.right) || !(e.pageY >= pos.top && e.pageY <= pos.bottom))) { + // if mouse in menu... + opt.$menu.trigger('contextmenu:hide'); + } + }); + } + }, + hide: function(opt, force) { + var $trigger = $(this); + if (!opt) { + opt = $trigger.data('contextMenu') || {}; + } + + // hide event + if (!force && opt.events && opt.events.hide.call($trigger, opt) === false) { + return; + } + + // remove options and revert state + $trigger + .removeData('contextMenu') + .removeClass("context-menu-active"); + + if (opt.$layer) { + // keep layer for a bit so the contextmenu event can be aborted properly by opera + setTimeout((function($layer) { + return function(){ + $layer.remove(); + }; + })(opt.$layer), 10); + + try { + delete opt.$layer; + } catch(e) { + opt.$layer = null; + } + } + + // remove handle + $currentTrigger = null; + // remove selected + opt.$menu.find('.hover').trigger('contextmenu:blur'); + opt.$selected = null; + // unregister key and mouse handlers + //$(document).off('.contextMenuAutoHide keydown.contextMenu'); // http://bugs.jquery.com/ticket/10705 + $(document).off('.contextMenuAutoHide').off('keydown.contextMenu'); + // hide menu + opt.$menu && opt.$menu[opt.animation.hide](opt.animation.duration, function (){ + // tear down dynamically built menu after animation is completed. + if (opt.build) { + opt.$menu.remove(); + $.each(opt, function(key, value) { + switch (key) { + case 'ns': + case 'selector': + case 'build': + case 'trigger': + return true; + + default: + opt[key] = undefined; + try { + delete opt[key]; + } catch (e) {} + return true; + } + }); + } + + setTimeout(function() { + $trigger.trigger('contextmenu:hidden'); + }, 10); + }); + }, + create: function(opt, root) { + if (root === undefined) { + root = opt; + } + // create contextMenu + opt.$menu = $('
    ').addClass(opt.className || "").data({ + 'contextMenu': opt, + 'contextMenuRoot': root + }); + + $.each(['callbacks', 'commands', 'inputs'], function(i,k){ + opt[k] = {}; + if (!root[k]) { + root[k] = {}; + } + }); + + root.accesskeys || (root.accesskeys = {}); + + // create contextMenu items + $.each(opt.items, function(key, item){ + var $t = $('
  • ').addClass(item.className || ""), + $label = null, + $input = null; + + // iOS needs to see a click-event bound to an element to actually + // have the TouchEvents infrastructure trigger the click event + $t.on('click', $.noop); + + item.$node = $t.data({ + 'contextMenu': opt, + 'contextMenuRoot': root, + 'contextMenuKey': key + }); + + // register accesskey + // NOTE: the accesskey attribute should be applicable to any element, but Safari5 and Chrome13 still can't do that + if (item.accesskey) { + var aks = splitAccesskey(item.accesskey); + for (var i=0, ak; ak = aks[i]; i++) { + if (!root.accesskeys[ak]) { + root.accesskeys[ak] = item; + item._name = item.name.replace(new RegExp('(' + ak + ')', 'i'), '$1'); + break; + } + } + } + + if (typeof item == "string") { + $t.addClass('context-menu-separator not-selectable'); + } else if (item.type && types[item.type]) { + // run custom type handler + types[item.type].call($t, item, opt, root); + // register commands + $.each([opt, root], function(i,k){ + k.commands[key] = item; + if ($.isFunction(item.callback)) { + k.callbacks[key] = item.callback; + } + }); + } else { + // add label for input + if (item.type == 'html') { + $t.addClass('context-menu-html not-selectable'); + } else if (item.type) { + $label = $('').appendTo($t); + $('').html(item._name || item.name).appendTo($label); + $t.addClass('context-menu-input'); + opt.hasTypes = true; + $.each([opt, root], function(i,k){ + k.commands[key] = item; + k.inputs[key] = item; + }); + } else if (item.items) { + item.type = 'sub'; + } + + switch (item.type) { + case 'text': + $input = $('') + .attr('name', 'context-menu-input-' + key) + .val(item.value || "") + .appendTo($label); + break; + + case 'textarea': + $input = $('') + .attr('name', 'context-menu-input-' + key) + .val(item.value || "") + .appendTo($label); + + if (item.height) { + $input.height(item.height); + } + break; + + case 'checkbox': + $input = $('') + .attr('name', 'context-menu-input-' + key) + .val(item.value || "") + .prop("checked", !!item.selected) + .prependTo($label); + break; + + case 'radio': + $input = $('') + .attr('name', 'context-menu-input-' + item.radio) + .val(item.value || "") + .prop("checked", !!item.selected) + .prependTo($label); + break; + + case 'select': + $input = $(' + if (item.type && item.type != 'sub' && item.type != 'html') { + $input + .on('focus', handle.focusInput) + .on('blur', handle.blurInput); + + if (item.events) { + $input.on(item.events, opt); + } + } + + // add icons + if (item.icon) { + $t.addClass("icon icon-" + item.icon); + } + } + + // cache contained elements + item.$input = $input; + item.$label = $label; + + // attach item to menu + $t.appendTo(opt.$menu); + + // Disable text selection + if (!opt.hasTypes && $.support.eventSelectstart) { + // browsers support user-select: none, + // IE has a special event for text-selection + // browsers supporting neither will not be preventing text-selection + $t.on('selectstart.disableTextSelect', handle.abortevent); + } + }); + // attach contextMenu to (to bypass any possible overflow:hidden issues on parents of the trigger element) + if (!opt.$node) { + opt.$menu.css('display', 'none').addClass('context-menu-root'); + } + opt.$menu.appendTo(opt.appendTo || document.body); + }, + resize: function($menu, nested) { + // determine widths of submenus, as CSS won't grow them automatically + // position:absolute within position:absolute; min-width:100; max-width:200; results in width: 100; + // kinda sucks hard... + + // determine width of absolutely positioned element + $menu.css({position: 'absolute', display: 'block'}); + // don't apply yet, because that would break nested elements' widths + // add a pixel to circumvent word-break issue in IE9 - #80 + $menu.data('width', Math.ceil($menu.width()) + 1); + // reset styles so they allow nested elements to grow/shrink naturally + $menu.css({ + position: 'static', + minWidth: '0px', + maxWidth: '100000px' + }); + // identify width of nested menus + $menu.find('> li > ul').each(function() { + op.resize($(this), true); + }); + // reset and apply changes in the end because nested + // elements' widths wouldn't be calculatable otherwise + if (!nested) { + $menu.find('ul').andSelf().css({ + position: '', + display: '', + minWidth: '', + maxWidth: '' + }).width(function() { + return $(this).data('width'); + }); + } + }, + update: function(opt, root) { + var $trigger = this; + if (root === undefined) { + root = opt; + op.resize(opt.$menu); + } + // re-check disabled for each item + opt.$menu.children().each(function(){ + var $item = $(this), + key = $item.data('contextMenuKey'), + item = opt.items[key], + disabled = ($.isFunction(item.disabled) && item.disabled.call($trigger, key, root)) || item.disabled === true; + + // dis- / enable item + $item[disabled ? 'addClass' : 'removeClass']('disabled'); + + if (item.type) { + // dis- / enable input elements + $item.find('input, select, textarea').prop('disabled', disabled); + + // update input states + switch (item.type) { + case 'text': + case 'textarea': + item.$input.val(item.value || ""); + break; + + case 'checkbox': + case 'radio': + item.$input.val(item.value || "").prop('checked', !!item.selected); + break; + + case 'select': + item.$input.val(item.selected || ""); + break; + } + } + + if (item.$menu) { + // update sub-menu + op.update.call($trigger, item, root); + } + }); + }, + layer: function(opt, zIndex) { + // add transparent layer for click area + // filter and background for Internet Explorer, Issue #23 + var $layer = opt.$layer = $('
    ') + .css({height: $win.height(), width: $win.width(), display: 'block'}) + .data('contextMenuRoot', opt) + .insertBefore(this) + .on('contextmenu', handle.abortevent) + .on('mousedown', handle.layerClick); + + // IE6 doesn't know position:fixed; + if (!$.support.fixedPosition) { + $layer.css({ + 'position' : 'absolute', + 'height' : $(document).height() + }); + } + + return $layer; + } + }; + +// split accesskey according to http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#assigned-access-key +function splitAccesskey(val) { + var t = val.split(/\s+/), + keys = []; + + for (var i=0, k; k = t[i]; i++) { + k = k[0].toUpperCase(); // first character only + // theoretically non-accessible characters should be ignored, but different systems, different keyboard layouts, ... screw it. + // a map to look up already used access keys would be nice + keys.push(k); + } + + return keys; +} + +// handle contextMenu triggers +$.fn.contextMenu = function(operation) { + if (operation === undefined) { + this.first().trigger('contextmenu'); + } else if (operation.x && operation.y) { + this.first().trigger($.Event("contextmenu", {pageX: operation.x, pageY: operation.y})); + } else if (operation === "hide") { + var $menu = this.data('contextMenu').$menu; + $menu && $menu.trigger('contextmenu:hide'); + } else if (operation === "destroy") { + $.contextMenu("destroy", {context: this}); + } else if ($.isPlainObject(operation)) { + operation.context = this; + $.contextMenu("create", operation); + } else if (operation) { + this.removeClass('context-menu-disabled'); + } else if (!operation) { + this.addClass('context-menu-disabled'); + } + + return this; +}; + +// manage contextMenu instances +$.contextMenu = function(operation, options) { + if (typeof operation != 'string') { + options = operation; + operation = 'create'; + } + + if (typeof options == 'string') { + options = {selector: options}; + } else if (options === undefined) { + options = {}; + } + + // merge with default options + var o = $.extend(true, {}, defaults, options || {}); + var $document = $(document); + var $context = $document; + var _hasContext = false; + + if (!o.context || !o.context.length) { + o.context = document; + } else { + // you never know what they throw at you... + $context = $(o.context).first(); + o.context = $context.get(0); + _hasContext = o.context !== document; + } + + switch (operation) { + case 'create': + // no selector no joy + if (!o.selector) { + throw new Error('No selector specified'); + } + // make sure internal classes are not bound to + if (o.selector.match(/.context-menu-(list|item|input)($|\s)/)) { + throw new Error('Cannot bind to selector "' + o.selector + '" as it contains a reserved className'); + } + if (!o.build && (!o.items || $.isEmptyObject(o.items))) { + throw new Error('No Items specified'); + } + counter ++; + o.ns = '.contextMenu' + counter; + if (!_hasContext) { + namespaces[o.selector] = o.ns; + } + menus[o.ns] = o; + + // default to right click + if (!o.trigger) { + o.trigger = 'right'; + } + + if (!initialized) { + // make sure item click is registered first + $document + .on({ + 'contextmenu:hide.contextMenu': handle.hideMenu, + 'prevcommand.contextMenu': handle.prevItem, + 'nextcommand.contextMenu': handle.nextItem, + 'contextmenu.contextMenu': handle.abortevent, + 'mouseenter.contextMenu': handle.menuMouseenter, + 'mouseleave.contextMenu': handle.menuMouseleave + }, '.context-menu-list') + .on('mouseup.contextMenu', '.context-menu-input', handle.inputClick) + .on({ + 'mouseup.contextMenu': handle.itemClick, + 'contextmenu:focus.contextMenu': handle.focusItem, + 'contextmenu:blur.contextMenu': handle.blurItem, + 'contextmenu.contextMenu': handle.abortevent, + 'mouseenter.contextMenu': handle.itemMouseenter, + 'mouseleave.contextMenu': handle.itemMouseleave + }, '.context-menu-item'); + + initialized = true; + } + + // engage native contextmenu event + $context + .on('contextmenu' + o.ns, o.selector, o, handle.contextmenu); + + if (_hasContext) { + // add remove hook, just in case + $context.on('remove' + o.ns, function() { + $(this).contextMenu("destroy"); + }); + } + + switch (o.trigger) { + case 'hover': + $context + .on('mouseenter' + o.ns, o.selector, o, handle.mouseenter) + .on('mouseleave' + o.ns, o.selector, o, handle.mouseleave); + break; + + case 'left': + $context.on('click' + o.ns, o.selector, o, handle.click); + break; + /* + default: + // http://www.quirksmode.org/dom/events/contextmenu.html + $document + .on('mousedown' + o.ns, o.selector, o, handle.mousedown) + .on('mouseup' + o.ns, o.selector, o, handle.mouseup); + break; + */ + } + + // create menu + if (!o.build) { + op.create(o); + } + break; + + case 'destroy': + var $visibleMenu; + if (_hasContext) { + // get proper options + var context = o.context; + $.each(menus, function(ns, o) { + if (o.context !== context) { + return true; + } + + $visibleMenu = $('.context-menu-list').filter(':visible'); + if ($visibleMenu.length && $visibleMenu.data().contextMenuRoot.$trigger.is($(o.context).find(o.selector))) { + $visibleMenu.trigger('contextmenu:hide', {force: true}); + } + + try { + if (menus[o.ns].$menu) { + menus[o.ns].$menu.remove(); + } + + delete menus[o.ns]; + } catch(e) { + menus[o.ns] = null; + } + + $(o.context).off(o.ns); + + return true; + }); + } else if (!o.selector) { + $document.off('.contextMenu .contextMenuAutoHide'); + $.each(menus, function(ns, o) { + $(o.context).off(o.ns); + }); + + namespaces = {}; + menus = {}; + counter = 0; + initialized = false; + + $('#context-menu-layer, .context-menu-list').remove(); + } else if (namespaces[o.selector]) { + $visibleMenu = $('.context-menu-list').filter(':visible'); + if ($visibleMenu.length && $visibleMenu.data().contextMenuRoot.$trigger.is(o.selector)) { + $visibleMenu.trigger('contextmenu:hide', {force: true}); + } + + try { + if (menus[namespaces[o.selector]].$menu) { + menus[namespaces[o.selector]].$menu.remove(); + } + + delete menus[namespaces[o.selector]]; + } catch(e) { + menus[namespaces[o.selector]] = null; + } + + $document.off(namespaces[o.selector]); + } + break; + + case 'html5': + // if or are not handled by the browser, + // or options was a bool true, + // initialize $.contextMenu for them + if ((!$.support.htmlCommand && !$.support.htmlMenuitem) || (typeof options == "boolean" && options)) { + $('menu[type="context"]').each(function() { + if (this.id) { + $.contextMenu({ + selector: '[contextmenu=' + this.id +']', + items: $.contextMenu.fromMenu(this) + }); + } + }).css('display', 'none'); + } + break; + + default: + throw new Error('Unknown operation "' + operation + '"'); + } + + return this; +}; + +// import values into commands +$.contextMenu.setInputValues = function(opt, data) { + if (data === undefined) { + data = {}; + } + + $.each(opt.inputs, function(key, item) { + switch (item.type) { + case 'text': + case 'textarea': + item.value = data[key] || ""; + break; + + case 'checkbox': + item.selected = data[key] ? true : false; + break; + + case 'radio': + item.selected = (data[item.radio] || "") == item.value ? true : false; + break; + + case 'select': + item.selected = data[key] || ""; + break; + } + }); +}; + +// export values from commands +$.contextMenu.getInputValues = function(opt, data) { + if (data === undefined) { + data = {}; + } + + $.each(opt.inputs, function(key, item) { + switch (item.type) { + case 'text': + case 'textarea': + case 'select': + data[key] = item.$input.val(); + break; + + case 'checkbox': + data[key] = item.$input.prop('checked'); + break; + + case 'radio': + if (item.$input.prop('checked')) { + data[item.radio] = item.value; + } + break; + } + }); + + return data; +}; + +// find