From ef59b17b437871d70ba171dda5586ee263d45e16 Mon Sep 17 00:00:00 2001 From: Moe Date: Tue, 12 Jun 2018 22:02:03 -0700 Subject: [PATCH 01/45] more debug info for cron.js --- cron.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/cron.js b/cron.js index b2578507..bc72d945 100644 --- a/cron.js +++ b/cron.js @@ -64,6 +64,7 @@ s.sqlDate = function(value){ return dateQueryFunction } s.sqlQuery = function(query,values,onMoveOn,hideLog){ + s.debugLog(query,values) if(!values){values=[]} var valuesNotFunction = true; if(typeof values === 'function'){ @@ -195,10 +196,13 @@ s.checkFilterRules=function(v,callback){ }] }; } + s.debugLog('Filters') var keys = Object.keys(v.d.filters) if(keys.length>0){ keys.forEach(function(m,current){ - var b=v.d.filters[m]; + // b = filter + var b = v.d.filters[m]; + s.debugLog(b) if(b.enabled==="1"){ b.ar=[v.ke]; b.sql=[]; @@ -470,16 +474,17 @@ s.processUser = function(number,rows){ } }) s.deleteOldLogs(v,function(){ - s.debugLog('deleteOldLogs') + s.debugLog('--- deleteOldLogs Complete') s.deleteOldFileBins(v,function(){ - s.debugLog('deleteOldFileBins') + s.debugLog('--- deleteOldFileBins Complete') s.deleteOldEvents(v,function(){ - s.debugLog('deleteOldEvents') + s.debugLog('--- deleteOldEvents Complete') s.checkFilterRules(v,function(){ - s.debugLog('checkFilterRules') + s.debugLog('--- checkFilterRules Complete') s.deleteRowsWithNoVideo(v,function(){ - s.debugLog('deleteRowsWithNoVideo') + s.debugLog('--- deleteRowsWithNoVideo Complete') s.checkForOrphanedFiles(v,function(){ + s.debugLog('--- checkForOrphanedFiles Complete') //done user, unlock current, and do next s.overlapLock[v.ke]=false; s.processUser(number+1,rows) From 30234917ae84212d43293019142cd3272239fe47 Mon Sep 17 00:00:00 2001 From: Moe Date: Mon, 18 Jun 2018 15:35:06 -0700 Subject: [PATCH 02/45] testing gitlab discord note --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 583ba94b..8c4e081a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Shinobi Pro +# Shinobi Pro ### (Shinobi Open Source Software) Shinobi is the Open Source CCTV Solution written in Node.JS. Designed with multiple account system, Streams by WebSocket, and Save to WebM. Shinobi can record IP Cameras and Local Cameras. From d0e4561df8a2c005c002dc24c4569eec8e96c1cc Mon Sep 17 00:00:00 2001 From: Moe Date: Mon, 18 Jun 2018 15:52:40 -0700 Subject: [PATCH 03/45] testing gitlab discord note #2 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8c4e081a..583ba94b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Shinobi Pro +# Shinobi Pro ### (Shinobi Open Source Software) Shinobi is the Open Source CCTV Solution written in Node.JS. Designed with multiple account system, Streams by WebSocket, and Save to WebM. Shinobi can record IP Cameras and Local Cameras. From 2fa14306bb93eb5f1f48c1924955fc7f4a8d5cd7 Mon Sep 17 00:00:00 2001 From: Moe Date: Mon, 18 Jun 2018 23:17:28 -0700 Subject: [PATCH 04/45] useUTC fixes, SQLite with UTC changes fix --- camera.js | 103 +++++++++++++++++++++++++++----------- web/libs/js/main.dash2.js | 93 +++++++++++++++++++++------------- 2 files changed, 133 insertions(+), 63 deletions(-) diff --git a/camera.js b/camera.js index fc3c331c..5ba6ad99 100644 --- a/camera.js +++ b/camera.js @@ -884,25 +884,23 @@ s.video=function(x,e,k){ }) }); break; - case'archive': - if(!e.filename&&e.time){e.filename=s.formattedTime(e.time)} - if(!e.status){e.status=0} - e.details.archived="1" - e.save=[JSON.stringify(e.details),e.id,e.ke,s.nameToTime(e.filename)]; - s.sqlQuery('UPDATE Videos SET details=? WHERE `mid`=? AND `ke`=? AND `time`=?',e.save,function(err,r){ - s.tx({f:'video_edit',status:3,filename:e.filename+'.'+e.ext,mid:e.mid,ke:e.ke,time:s.nameToTime(e.filename)},'GRP_'+e.ke); - }); - break; case'delete': - if(!e.filename&&e.time){e.filename=s.formattedTime(e.time)} - var filename + if(!e.filename && e.time){ + e.filename = s.formattedTime(e.time) + } + var filename, + time if(e.filename.indexOf('.')>-1){ filename = e.filename }else{ filename = e.filename+'.'+e.ext } - if(!e.status){e.status=0} - e.save=[e.id,e.ke,s.nameToTime(filename)]; + if(e.filename && !e.time){ + time = s.nameToTime(filename) + }else{ + time = e.time + } + e.save=[e.id,e.ke,time]; s.sqlQuery('SELECT * FROM Videos WHERE `mid`=? AND `ke`=? AND `time`=?',e.save,function(err,r){ if(r&&r[0]){ r=r[0] @@ -917,6 +915,8 @@ s.video=function(x,e,k){ s.tx({f:'video_delete',filename:filename,mid:e.mid,ke:e.ke,time:s.nameToTime(filename),end:s.formattedTime(new Date,'YYYY-MM-DD HH:mm:ss')},'GRP_'+e.ke); s.file('delete',dir+filename) }) + }else{ + console.log(e) } }) break; @@ -1028,7 +1028,8 @@ s.video=function(x,e,k){ }else{ queryString = '' } - v.href = '/'+k+'/videos/'+v.ke+'/'+v.mid+'/'+s.formattedTime(v.time)+'.'+v.ext; + v.filename = s.formattedTime(v.time)+'.'+v.ext; + v.href = '/'+k+'/videos/'+v.ke+'/'+v.mid+'/'+v.filename; v.links = { deleteVideo : v.href+'/delete' + queryString, changeToUnread : v.href+'/status/1' + queryString, @@ -1067,6 +1068,7 @@ s.video=function(x,e,k){ if(s.group[e.ke].usedSpace>(s.group[e.ke].sizeLimit*config.cron.deleteOverMaxOffset)){ s.sqlQuery('SELECT * FROM Videos WHERE status != 0 AND details NOT LIKE \'%"archived":"1"%\' AND ke=? ORDER BY `time` ASC LIMIT 2',[e.ke],function(err,evs){ k.del=[];k.ar=[e.ke]; + if(!evs)return console.log(err) evs.forEach(function(ev){ ev.dir=s.video('getDir',ev)+s.formattedTime(ev.time)+'.'+ev.ext; k.del.push('(mid=? AND time=?)'); @@ -1130,8 +1132,8 @@ s.video=function(x,e,k){ }); k.filename = s.formattedTime(e.startTime)+'.'+e.ext }else{ - e.startTime = s.utcToLocal(e.startTime) - e.endTime = s.utcToLocal(e.endTime) +// e.startTime = s.utcToLocal(e.startTime) +// e.endTime = s.utcToLocal(e.endTime) k.filename = k.file } if(!e.ext){e.ext = k.filename.split('.')[1]} @@ -1174,9 +1176,9 @@ s.video=function(x,e,k){ filename:k.filename, mid:e.mid, ke:e.ke, - time:s.timeObject(e.startTime).format(), + time:e.startTime, size:e.filesize, - end:s.timeObject(e.endTime).format() + end:e.endTime },'GRP_'+e.ke,'video_view'); } //cloud auto savers @@ -4407,6 +4409,43 @@ var tx; break; } }) + //functions for retrieving cron announcements + cn.on('cron',function(d){ + if(d.f==='init'){ + if(config.cron.key){ + if(config.cron.key===d.cronKey){ + s.cron={started:moment(),last_run:moment(),id:cn.id}; + }else{ + cn.disconnect() + } + }else{ + s.cron={started:moment(),last_run:moment(),id:cn.id}; + } + }else{ + if(s.cron&&cn.id===s.cron.id){ + delete(d.cronKey) + switch(d.f){ + case'filters': + s.filterEvents(d.ff,d); + break; + case's.tx': + s.tx(d.data,d.to) + break; + case's.video': + s.video(d.data,d.file) + break; + case'start':case'end': + d.mid='_cron';s.log(d,{type:'cron',msg:d.msg}) + break; + default: + s.systemLog('CRON : ',d) + break; + } + }else{ + cn.disconnect() + } + } + }) cn.on('disconnect', function () { if(cn.socketVideoStream){ cn.closeSocketVideoStream() @@ -4433,6 +4472,9 @@ var tx; s.tx({f:'plugin_engine_unplugged',plug:cn.pluginEngine},'CPU') delete(s.api[cn.pluginEngine]) } + if(cn.cron){ + delete(s.cron); + } if(cn.ocv){ s.tx({f:'detector_unplugged',plug:s.ocv.plug},'CPU') delete(s.ocv); @@ -5986,11 +6028,12 @@ app.get('/:auth/videos/:ke/:id/:file', function (req,res){ res.end(user.lang['Not Permitted']) return } - var filename = s.nameToTime(req.params.file) + var time = s.nameToTime(req.params.file) if(req.query.isUTC === 'true'){ - filename = s.utcToLocal(filename) + time = s.utcToLocal(time) } - s.sqlQuery('SELECT * FROM Videos WHERE ke=? AND mid=? AND time=?',[req.params.ke,req.params.id,filename],function(err,r){ + time = new Date(time) + s.sqlQuery('SELECT * FROM Videos WHERE ke=? AND mid=? AND time=?',[req.params.ke,req.params.id,time],function(err,r){ if(r&&r[0]){ req.dir=s.video('getDir',r[0])+req.params.file if (fs.existsSync(req.dir)){ @@ -6081,12 +6124,13 @@ app.get(['/:auth/videos/:ke/:id/:file/:mode','/:auth/videos/:ke/:id/:file/:mode/ res.end(user.lang['Not Permitted']) return } - var filename = s.nameToTime(req.params.file) + var time = s.nameToTime(req.params.file) if(req.query.isUTC === 'true'){ - filename = s.utcToLocal(filename) + time = s.utcToLocal(time) } + time = new Date(time) req.sql='SELECT * FROM Videos WHERE ke=? AND mid=? AND time=?'; - req.ar=[req.params.ke,req.params.id,filename]; + req.ar=[req.params.ke,req.params.id,time]; s.sqlQuery(req.sql,req.ar,function(err,r){ if(r&&r[0]){ r=r[0];r.filename=s.formattedTime(r.time)+'.'+r.ext; @@ -6096,13 +6140,14 @@ app.get(['/:auth/videos/:ke/:id/:file/:mode','/:auth/videos/:ke/:id/:file/:mode/ s.video('fix',r) break; case'status': - req.params.f=parseInt(req.params.f) + r.f = 'video_edit' + r.status = parseInt(req.params.f) if(isNaN(req.params.f)||req.params.f===0){ req.ret.msg='Not a valid value.'; }else{ req.ret.ok=true; - s.sqlQuery('UPDATE Videos SET status=? WHERE ke=? AND mid=? AND time=?',[req.params.f,req.params.ke,req.params.id,filename]) - s.tx({f:'video_edit',status:req.params.f,filename:r.filename,mid:r.mid,ke:r.ke,time:s.nameToTime(r.filename),end:s.formattedTime(new Date,'YYYY-MM-DD HH:mm:ss')},'GRP_'+r.ke); + s.sqlQuery('UPDATE Videos SET status=? WHERE ke=? AND mid=? AND time=?',[req.params.f,req.params.ke,req.params.id,time]) + s.tx(r,'GRP_'+r.ke); } break; case'delete': @@ -6541,9 +6586,9 @@ if(config.childNodes.enabled === true && config.childNodes.mode === 'master'){ filename:d.filename, mid:d.mid, ke:d.ke, - time:s.timeObject(d.startTime).format(), + time:d.startTime, size:d.filesize, - end:s.timeObject(d.endTime).format() + end:d.endTime },'GRP_'+d.ke,'video_view'); clearTimeout(s.group[d.ke].mon[d.mid].checker) clearTimeout(s.group[d.ke].mon[d.mid].checkStream) diff --git a/web/libs/js/main.dash2.js b/web/libs/js/main.dash2.js index ccf8f3fd..300cc7f7 100644 --- a/web/libs/js/main.dash2.js +++ b/web/libs/js/main.dash2.js @@ -12,15 +12,12 @@ $.ccio={ fr:$('#files_recent'), mon:{} }; -<% if(config.useUTC){ %> -$.ccio.timeObject = function(date){ - return moment.utc(date).local() +$.ccio.timeObject = function(time,isUTC){ + if(isUTC === true){ + return moment(time).utc() + } + return moment(time) } -<% }else{ %> -$.ccio.timeObject = function(date){ - return moment(date) -} -<% } %> if(!$user.details.lang||$user.details.lang==''){ $user.details.lang="<%-config.language%>" } @@ -158,10 +155,28 @@ switch($user.details.lang){ url=url+'/' } }else{ - url='' + url=location.pathname } return url break; + case'videoHrefToDelete': + var urlSplit = d.split('?') + var url = urlSplit[0]+'/delete' + if(urlSplit[1])url += '?' + urlSplit[1] + return url + break; + case'videoHrefToUnread': + var urlSplit = d.split('?') + var url = urlSplit[0]+'/status/1' + if(urlSplit[1])url += '?' + urlSplit[1] + return url + break; + case'videoHrefToRead': + var urlSplit = d.split('?') + var url = urlSplit[0]+'/status/2' + if(urlSplit[1])url += '?' + urlSplit[1] + return url + break; // case'streamWindow': // return $('.monitor_item[mid="'+d.id+'"][ke="'+d.ke+'"][auth="'+user.auth_token+'"]') // break; @@ -834,25 +849,26 @@ switch($user.details.lang){ if(d.id&&!d.mid){d.mid=d.id;} switch(x){ case 0://video - var href + var url if(d.href){ - href = d.href + url = d.href }else if(!d.href && d.hrefNoAuth){ - href = $.ccio.init('location',user)+user.auth_token+d.hrefNoAuth + url = $.ccio.init('location',user)+user.auth_token+d.hrefNoAuth } - if(user!==$user&&href.charAt(0)==='/'){ - href = $.ccio.init('location',user)+d.href.substring(1) + if(user!==$user&&url.charAt(0)==='/'){ + url = $.ccio.init('location',user)+d.href.substring(1) } - href = 'href="'+href+'"' - if(!d.filename){d.filename=$.ccio.init('tf',d.time)+'.'+d.ext;} + href = 'href="'+url+'"' +// if(!d.filename){d.filename=$.ccio.init('tf',d.time)+'.'+d.ext;} d.dlname=d.mid+'-'+d.filename; - d.mom=$.ccio.timeObject(d.time), - d.hr=parseInt(d.mom.format('HH')), + d.startMoment=$.ccio.timeObject(d.time), + d.endMoment=$.ccio.timeObject(d.end), + d.hr=parseInt(d.startMoment.format('HH')), d.per=parseInt(d.hr/24*100); - d.circle='
'+d.hr+'
' - tmp+='
  • '+d.circle+'
    <%-cleanLang(lang.Start)%> : '+$.ccio.timeObject(d.time).format('h:mm:ss , MMMM Do YYYY')+'
    <%-cleanLang(lang.End)%> : '+$.ccio.timeObject(d.end).format('h:mm:ss , MMMM Do YYYY')+'
    '+(parseInt(d.size)/1000000).toFixed(2)+'mb
    ' + d.circle='
    '+d.hr+'
    ' + tmp+='
  • '+d.circle+'
    <%-cleanLang(lang.Start)%> : '+d.startMoment.format('h:mm:ss , MMMM Do YYYY')+'
    <%-cleanLang(lang.End)%> : '+d.endMoment.format('h:mm:ss , MMMM Do YYYY')+'
    '+(parseInt(d.size)/1000000).toFixed(2)+'mb
    ' <% if(config.DropboxAppKey){ %> tmp+='' <% } %> - tmp+='
  • '; + tmp+=''; $(z).each(function(n,v){ v=$(v); if(v.find('.video-item').length>10){v.find('.video-item:last').remove()} @@ -1743,6 +1759,8 @@ $.ccio.globalWebsocket=function(d,user){ $.ccio.init('data-video',d) d.e=$('[file="'+d.filename+'"][mid="'+d.mid+'"][ke="'+d.ke+'"][auth="'+user.auth_token+'"]'); d.e.attr('status',d.status),d.e.attr('data-status',d.status); + console.log(d) + break; case'video_delete': // if($('.modal[mid="'+d.mid+'"][auth="'+user.auth_token+'"]').length>0){$('#video_viewer[mid="'+d.mid+'"]').attr('file',null).attr('ke',null).attr('mid',null).attr('auth',null).modal('hide')} @@ -2153,7 +2171,7 @@ $.ccio.globalWebsocket=function(d,user){ $.each(videos.videos,function(n,v){ if(!v||!v.mid){return} v.mon=$.ccio.mon[v.ke+v.mid+$user.auth_token]; - v.filename=$.ccio.init('tf',v.time)+'.'+v.ext; +// v.filename=$.ccio.init('tf',v.time)+'.'+v.ext; if(v.status>0){ // data.push({src:v,x:v.time,y:$.ccio.timeObject(v.time).diff($.ccio.timeObject(v.end),'minutes')/-1}) data[v.filename]={ @@ -4062,7 +4080,7 @@ $.timelapse.drawTimeline=function(getData){ e.tmp='' $.each(videos.videos,function(n,v){ if(!v||!v.time){return} - v.filename=$.ccio.init('tf',v.time)+'.'+v.ext; +// v.filename=$.ccio.init('tf',v.time)+'.'+v.ext; v.videoBefore=videos.videos[n-1]; v.videoAfter=videos.videos[n+1]; // if(v.href.charAt(0)==='/'){ @@ -4075,7 +4093,7 @@ $.timelapse.drawTimeline=function(getData){ e.tmp+='
    ' e.tmp+='
    ' e.tmp+='
    '+v.filename+'
    ' - e.tmp+='' + e.tmp+='' e.tmp+='
    ' e.tmp+='
    ' e.tmp+='
    ' @@ -4449,7 +4467,8 @@ $.pwrvid.e.on('click','[preview]',function(e){ $.pwrvid.vp.find('.stream-objects .stream-detected-object').remove() }) if(e.status==1){ - $.get(e.href.split('?')[0]+'/status/2',function(d){ + $.get($.ccio.init('videoHrefToRead',e.href),function(d){ + }) } var labels=[] @@ -4778,22 +4797,28 @@ $('body') .attr('auth',e.auth) .attr('file',e.file); if(e.status==1){ - $.get(e.href.split('?')[0]+'/status/2',function(d){ + $.get($.ccio.init('videoHrefToRead',e.href),function(d){ + if(d.ok !== true)console.log(d,new Error()) }) } break; case'delete': - e.href=e.p.find('[download]').attr('href') - if(!e.href||e.href===''){ - e.href=e.p.attr('href') + e.preventDefault(); + var videoLink = e.p.find('[download]').attr('href') + var href = $(this).attr('href') + console.log('videoLink',videoLink) + console.log(href) + if(!href){ + href = $.ccio.init('location',$.users[e.auth])+e.auth+'/videos/'+e.ke+'/'+e.mid+'/'+e.file+'/delete<% if(config.useUTC === true){%>?isUTC=true<%}%>' } + console.log(href) $.confirm.e.modal('show'); $.confirm.title.text('<%-cleanLang(lang['Delete Video'])%> : '+e.file) e.html='<%-cleanLang(lang.DeleteVideoMsg)%>' - e.html+=''; + e.html+=''; $.confirm.body.html(e.html) $.confirm.click({title:'Delete Video',class:'btn-danger'},function(){ - $.getJSON($.ccio.init('location',$.users[e.auth])+e.auth+'/videos/'+e.ke+'/'+e.mid+'/'+e.file+'/delete',function(d){ + $.getJSON(href,function(d){ $.ccio.log(d) }) }); @@ -5072,7 +5097,7 @@ $('body') var n=$.ccio.mon[v.ke+v.mid+user.auth_token]; if(n){v.title=n.name+' - '+(parseInt(v.size)/1000000).toFixed(2)+'mb';} v.start=v.time; - v.filename=$.ccio.init('tf',v.time)+'.'+v.ext; +// v.filename=$.ccio.init('tf',v.time)+'.'+v.ext; e.ar.push(v); } }) @@ -5123,7 +5148,7 @@ $('body') var href = $.ccio.init('location',user)+v.href v.mon=$.ccio.mon[v.ke+v.mid+user.auth_token]; v.start=v.time; - v.filename=$.ccio.init('tf',v.time)+'.'+v.ext; +// v.filename=$.ccio.init('tf',v.time)+'.'+v.ext; e.tmp+=''; e.tmp+='
    '; e.tmp+=''; @@ -5135,7 +5160,7 @@ $('body') e.tmp+='  '; e.tmp+='  '; e.tmp+='  '; - e.tmp+='  '; + e.tmp+='  '; // e.tmp+='  '; e.tmp+=''; } From bdce71e44780e5d0cc10f182415f711c6ca19135 Mon Sep 17 00:00:00 2001 From: Moe Date: Mon, 18 Jun 2018 23:39:30 -0700 Subject: [PATCH 05/45] useUTC fixes, SQLite with UTC changes fix ++ --- web/libs/js/main.dash2.js | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/web/libs/js/main.dash2.js b/web/libs/js/main.dash2.js index 300cc7f7..fa942a46 100644 --- a/web/libs/js/main.dash2.js +++ b/web/libs/js/main.dash2.js @@ -159,6 +159,18 @@ switch($user.details.lang){ } return url break; + case'videoUrlBuild': + var url + if(d.href){ + url = d.href + }else if(!d.href && d.hrefNoAuth){ + url = $.ccio.init('location',user)+user.auth_token+d.hrefNoAuth + } + if(user!==$user&&url.charAt(0)==='/'){ + url = $.ccio.init('location',user)+d.href.substring(1) + } + return url + break; case'videoHrefToDelete': var urlSplit = d.split('?') var url = urlSplit[0]+'/delete' @@ -849,15 +861,7 @@ switch($user.details.lang){ if(d.id&&!d.mid){d.mid=d.id;} switch(x){ case 0://video - var url - if(d.href){ - url = d.href - }else if(!d.href && d.hrefNoAuth){ - url = $.ccio.init('location',user)+user.auth_token+d.hrefNoAuth - } - if(user!==$user&&url.charAt(0)==='/'){ - url = $.ccio.init('location',user)+d.href.substring(1) - } + var url = $.ccio.init('videoUrlBuild',d) href = 'href="'+url+'"' // if(!d.filename){d.filename=$.ccio.init('tf',d.time)+'.'+d.ext;} d.dlname=d.mid+'-'+d.filename; @@ -892,7 +896,7 @@ switch($user.details.lang){ ],function(n,v){ tmp+='
    '+v.label+' :
    ' }) - tmp+='
    '; + tmp+='' tmp+='
    '; tmp+='
    '; tmp+='
    '; @@ -1757,7 +1761,7 @@ $.ccio.globalWebsocket=function(d,user){ break; case'video_edit':case'video_archive': $.ccio.init('data-video',d) - d.e=$('[file="'+d.filename+'"][mid="'+d.mid+'"][ke="'+d.ke+'"][auth="'+user.auth_token+'"]'); + d.e=$('[file="'+d.filename+'"][mid="'+d.mid+'"][ke="'+d.ke+'"][auth="'+user.auth_token+'"],[data-file="'+d.filename+'"][data-mid="'+d.mid+'"][data-ke="'+d.ke+'"][data-auth="'+user.auth_token+'"]'); d.e.attr('status',d.status),d.e.attr('data-status',d.status); console.log(d) @@ -5114,7 +5118,7 @@ $('body') eventLimit: true, events:e.ar, eventClick:function(f){ - $('#temp').html('
    ').find('[video="launch"]').click(); + $('#temp').html('
    ').find('[video="launch"]').click(); $(this).css('border-color', 'red'); } }); @@ -5145,7 +5149,7 @@ $('body') e.tmp+=''; $.each(d.videos,function(n,v){ if(v.status!==0){ - var href = $.ccio.init('location',user)+v.href + var href = $.ccio.init('videoUrlBuild',v) v.mon=$.ccio.mon[v.ke+v.mid+user.auth_token]; v.start=v.time; // v.filename=$.ccio.init('tf',v.time)+'.'+v.ext; From 766454becbb710e55b904983fc581e5625108ede Mon Sep 17 00:00:00 2001 From: Moe Date: Tue, 19 Jun 2018 21:12:26 -0700 Subject: [PATCH 06/45] Tensorflow started by @lawtancool --- plugins/tensorflow/.gitignore | 2 + plugins/tensorflow/INSTALL.sh | 15 + plugins/tensorflow/conf.sample.json | 9 + plugins/tensorflow/openalpr.conf | 94 ++++ .../tensorflow/shinobi-opencv-no-motion.js | 212 ++++++++ plugins/tensorflow/shinobi-tensorflow.js | 503 ++++++++++++++++++ 6 files changed, 835 insertions(+) create mode 100644 plugins/tensorflow/.gitignore create mode 100644 plugins/tensorflow/INSTALL.sh create mode 100644 plugins/tensorflow/conf.sample.json create mode 100644 plugins/tensorflow/openalpr.conf create mode 100644 plugins/tensorflow/shinobi-opencv-no-motion.js create mode 100644 plugins/tensorflow/shinobi-tensorflow.js diff --git a/plugins/tensorflow/.gitignore b/plugins/tensorflow/.gitignore new file mode 100644 index 00000000..58816542 --- /dev/null +++ b/plugins/tensorflow/.gitignore @@ -0,0 +1,2 @@ +conf.json +cascades \ No newline at end of file diff --git a/plugins/tensorflow/INSTALL.sh b/plugins/tensorflow/INSTALL.sh new file mode 100644 index 00000000..cab6113a --- /dev/null +++ b/plugins/tensorflow/INSTALL.sh @@ -0,0 +1,15 @@ +#!/bin/bash +if [ $(dpkg-query -W -f='${Status}' opencv_version 2>/dev/null | grep -c "ok installed") -eq 0 ]; then + echo "Shinobi - Do ypu want to let the `opencv4nodejs` npm package install OpenCV? " + echo "Only do this if you do not have OpenCV already or will not use a GPU (Hardware Acceleration)." + echo "(y)es or (N)o" + read nodejsinstall + if [ "$nodejsinstall" = "y" ] || [ "$nodejsinstall" = "Y" ]; then + export OPENCV4NODEJS_DISABLE_AUTOBUILD=0 + else + export OPENCV4NODEJS_DISABLE_AUTOBUILD=1 + fi +else + export OPENCV4NODEJS_DISABLE_AUTOBUILD=1 +fi +npm install opencv4nodejs moment express canvas@1.6 --unsafe-perm \ No newline at end of file diff --git a/plugins/tensorflow/conf.sample.json b/plugins/tensorflow/conf.sample.json new file mode 100644 index 00000000..1a4b8dc0 --- /dev/null +++ b/plugins/tensorflow/conf.sample.json @@ -0,0 +1,9 @@ +{ + "plug":"OpenCV", + "host":"localhost", + "port":8080, + "hostPort":8082, + "key":"change_this_to_something_very_random____make_sure_to_match__/plugins/opencv/conf.json", + "mode":"client", + "type":"detector" +} \ No newline at end of file diff --git a/plugins/tensorflow/openalpr.conf b/plugins/tensorflow/openalpr.conf new file mode 100644 index 00000000..070752b1 --- /dev/null +++ b/plugins/tensorflow/openalpr.conf @@ -0,0 +1,94 @@ + +; Specify the path to the runtime data directory +runtime_dir = ${CMAKE_INSTALL_PREFIX}/share/openalpr/runtime_data + + +ocr_img_size_percent = 1.33333333 +state_id_img_size_percent = 2.0 + +; Calibrating your camera improves detection accuracy in cases where vehicle plates are captured at a steep angle +; Use the openalpr-utils-calibrate utility to calibrate your fixed camera to adjust for an angle +; Once done, update the prewarp config with the values obtained from the tool +prewarp = + +; detection will ignore plates that are too large. This is a good efficiency technique to use if the +; plates are going to be a fixed distance away from the camera (e.g., you will never see plates that fill +; up the entire image +max_plate_width_percent = 100 +max_plate_height_percent = 100 + +; detection_iteration_increase is the percentage that the LBP frame increases each iteration. +; It must be greater than 1.0. A value of 1.01 means increase by 1%, 1.10 increases it by 10% each time. +; So a 1% increase would be ~10x slower than 10% to process, but it has a higher chance of landing +; directly on the plate and getting a strong detection +detection_iteration_increase = 1.1 + +; The minimum detection strength determines how sure the detection algorithm must be before signaling that +; a plate region exists. Technically this corresponds to LBP nearest neighbors (e.g., how many detections +; are clustered around the same area). For example, 2 = very lenient, 9 = very strict. +detection_strictness = 3 + +; The detection doesn't necessarily need an extremely high resolution image in order to detect plates +; Using a smaller input image should still find the plates and will do it faster +; Tweaking the max_detection_input values will resize the input image if it is larger than these sizes +; max_detection_input_width/height are specified in pixels +max_detection_input_width = 1280 +max_detection_input_height = 720 + +; detector is the technique used to find license plate regions in an image. Value can be set to +; lbpcpu - default LBP-based detector uses the system CPU +; lbpgpu - LBP-based detector that uses Nvidia GPU to increase recognition speed. +; lbpopencl - LBP-based detector that uses OpenCL GPU to increase recognition speed. Requires OpenCV 3.0 +; morphcpu - Experimental detector that detects white rectangles in an image. Does not require training. +detector = lbpgpu + +; If set to true, all results must match a postprocess text pattern if a pattern is available. +; If not, the result is disqualified. +must_match_pattern = 0 + +; Bypasses plate detection. If this is set to 1, the library assumes that each region provided is a likely plate area. +skip_detection = 0 + +; Specifies the full path to an image file that constrains the detection area. Only the plate regions allowed through the mask +; will be analyzed. The mask image must match the resolution of your image to be analyzed. The mask is black and white. +; Black areas will be ignored, white areas will be searched. An empty value means no mask (scan the entire image) +detection_mask_image = + +; OpenALPR can scan the same image multiple times with different randomization. Setting this to a value larger than +; 1 may increase accuracy, but will increase processing time linearly (e.g., analysis_count = 3 is 3x slower) +analysis_count = 1 + +; OpenALPR detects high-contrast plate crops and uses an alternative edge detection technique. Setting this to 0.0 +; would classify ALL images as high-contrast, setting it to 1.0 would classify no images as high-contrast. +contrast_detection_threshold = 0.3 + +max_plate_angle_degrees = 15 + +ocr_min_font_point = 6 + +; Minimum OCR confidence percent to consider. +postprocess_min_confidence = 65 + +; Any OCR character lower than this will also add an equally likely +; chance that the character is incorrect and will be skipped. Value is a confidence percent +postprocess_confidence_skip_level = 80 + + +debug_general = 0 +debug_timing = 0 +debug_detector = 0 +debug_prewarp = 0 +debug_state_id = 0 +debug_plate_lines = 0 +debug_plate_corners = 0 +debug_char_segment = 0 +debug_char_analysis = 0 +debug_color_filter = 0 +debug_ocr = 0 +debug_postprocess = 0 +debug_show_images = 0 +debug_pause_on_frame = 0 + + + + diff --git a/plugins/tensorflow/shinobi-opencv-no-motion.js b/plugins/tensorflow/shinobi-opencv-no-motion.js new file mode 100644 index 00000000..700d6722 --- /dev/null +++ b/plugins/tensorflow/shinobi-opencv-no-motion.js @@ -0,0 +1,212 @@ +// +// Shinobi - OpenCV Plugin +// Copyright (C) 2016-2025 Moe Alam, moeiscool +// +// # Donate +// +// If you like what I am doing here and want me to continue please consider donating :) +// PayPal : paypal@m03.a +// +process.on('uncaughtException', function (err) { + console.error('uncaughtException',err); +}); +var fs=require('fs'); +var cv=require('opencv'); +var exec = require('child_process').exec; +var moment = require('moment'); +var config=require('./conf.json'); +if(config.systemLog===undefined){config.systemLog=true} +s={ + group:{}, + dir:{ + cascades:__dirname+'/cascades/' + }, + isWin:(process.platform==='win32') +} +//default stream folder check +if(!config.streamDir){ + if(s.isWin===false){ + config.streamDir='/dev/shm' + }else{ + config.streamDir=config.windowsTempDir + } + if(!fs.existsSync(config.streamDir)){ + config.streamDir=__dirname+'/streams/' + }else{ + config.streamDir+='/streams/' + } +} +s.dir.streams=config.streamDir; +//streams dir +if(!fs.existsSync(s.dir.streams)){ + fs.mkdirSync(s.dir.streams); +} +s.gid=function(x){ + if(!x){x=10};var t = "";var p = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + for( var i=0; i < x; i++ ) + t += p.charAt(Math.floor(Math.random() * p.length)); + return t; +}; +s.systemLog=function(q,w,e){ + if(!w){w=''} + if(!e){e=''} + if(config.systemLog===true){ + return console.log(moment().format(),q,w,e) + } +} +s.findCascades=function(callback){ + var tmp={}; + tmp.foundCascades=[]; + fs.readdir(s.dir.cascades,function(err,files){ + files.forEach(function(cascade,n){ + if(cascade.indexOf('.xml')>-1){ + tmp.foundCascades.push(cascade.replace('.xml','')) + } + }) + s.cascadesInDir=tmp.foundCascades; + callback(tmp.foundCascades) + }) +} +s.findCascades(function(){ + //get cascades +}) +s.detectObject=function(buffer,d){ + var keys = Object.keys(d.mon.detector_cascades); + if(d.mon.detector_lisence_plate==="1"){ + if(!d.mon.detector_lisence_plate_country||d.mon.detector_lisence_plate_country===''){ + d.mon.detector_lisence_plate_country='us' + } + d.tmpFile=s.gid(5)+'.jpg' + if(!fs.existsSync(s.dir.streams)){ + fs.mkdirSync(s.dir.streams); + } + d.dir=s.dir.streams+d.ke+'/' + if(!fs.existsSync(d.dir)){ + fs.mkdirSync(d.dir); + } + d.dir=s.dir.streams+d.ke+'/'+d.id+'/' + if(!fs.existsSync(d.dir)){ + fs.mkdirSync(d.dir); + } + fs.writeFile(d.dir+d.tmpFile,buffer,function(err){ + if(err) return s.systemLog(err); + exec('alpr -j -c '+d.mon.detector_lisence_plate_country+' '+d.dir+d.tmpFile,{encoding:'utf8'},(err, scan, stderr) => { + if(err){ + s.systemLog(err); + }else{ + try{ + try{ + scan=JSON.parse(scan) + }catch(err){ + if(!scan||!scan.results){ + return s.systemLog(scan,err); + } + } + if(scan.results.length>0){ + scan.plates=[] + scan.mats=[] + scan.results.forEach(function(v){ + v.candidates.forEach(function(g,n){ + if(v.candidates[n].matches_template) + delete(v.candidates[n].matches_template) + }) + scan.plates.push({coordinates:v.coordinates,candidates:v.candidates,confidence:v.confidence,plate:v.plate}) + var width = Math.sqrt( Math.pow(v.coordinates[1].x - v.coordinates[0].x, 2) + Math.pow(v.coordinates[1].y - v.coordinates[0].y, 2)); + var height = Math.sqrt( Math.pow(v.coordinates[2].x - v.coordinates[1].x, 2) + Math.pow(v.coordinates[2].y - v.coordinates[1].y, 2)) + scan.mats.push({ + x:v.coordinates[0].x, + y:v.coordinates[0].y, + width:width, + height:height, + tag:v.plate + }) + }) + tx({f:'trigger',id:d.id,ke:d.ke,details:{plug:config.plug,name:'licensePlate',reason:'object',matrices:scan.mats,confidence:d.average,imgHeight:d.mon.detector_scale_y,imgWidth:d.mon.detector_scale_x,frame:d.base64}}) + } + }catch(err){ + s.systemLog(err); + } + } + exec('rm -rf '+d.dir+d.tmpFile,{encoding:'utf8'}) + }) + }) + } + if(keys.length===0){return false} + cv.readImage(buffer, function(err,im){ + if(err){console.log(err);return false;} + var width = im.width(); + var height = im.height(); + + if (width < 1 || height < 1) { + throw new Error('Image has no size'); + } + keys.forEach(function(v,n){ + im.detectObject(s.dir.cascades+v+'.xml',{}, function(err,mats){ + if(err){console.log(err);return false;} + if(mats&&mats.length>0){ + s.cx({f:'trigger',id:d.id,ke:d.ke,details:{plug:config.plug,name:v,reason:'object',matrices:mats,confidence:d.average,imgHeight:height,imgWidth:width}}) + } + }) + }) + }) +} +io = require('socket.io-client')('ws://'+config.host+':'+config.port);//connect to master +s.cx=function(x){x.pluginKey=config.key;x.plug=config.plug;return io.emit('ocv',x)} +io.on('connect',function(d){ + s.cx({f:'init',plug:config.plug}); +}) +io.on('disconnect',function(d){ + io.connect() +}) +io.on('f',function(d){ + switch(d.f){ + case'refreshPlugins': + s.findCascades(function(cascades){ + s.cx({f:'s.tx',data:{f:'detector_cascade_list',cascades:cascades},to:'GRP_'+d.ke}) + }) + break; + case'readPlugins': + s.cx({f:'s.tx',data:{f:'detector_cascade_list',cascades:s.cascadesInDir},to:'GRP_'+d.ke}) + break; + case'init_monitor': + if(s.group[d.ke]&&s.group[d.ke][d.id]){ + s.group[d.ke][d.id].canvas={} + s.group[d.ke][d.id].canvasContext={} + s.group[d.ke][d.id].blendRegion={} + s.group[d.ke][d.id].blendRegionContext={} + s.group[d.ke][d.id].lastRegionImageData={} + delete(s.group[d.ke][d.id].cords) + delete(s.group[d.ke][d.id].buffer) + } + break; + case'frame': + d.details={} + try{ + if(!s.group[d.ke]){ + s.group[d.ke]={} + } + if(!s.group[d.ke][d.id]){ + s.group[d.ke][d.id]={ + canvas:{}, + canvasContext:{}, + lastRegionImageData:{}, + blendRegion:{}, + blendRegionContext:{}, + } + } + if(!s.group[d.ke][d.id].buffer){ + s.group[d.ke][d.id].buffer=[d.frame]; + }else{ + s.group[d.ke][d.id].buffer.push(d.frame) + } + if(d.frame[d.frame.length-2] === 0xFF && d.frame[d.frame.length-1] === 0xD9){ + s.group[d.ke][d.id].buffer=Buffer.concat(s.group[d.ke][d.id].buffer); + s.detectObject(s.group[d.ke][d.id].buffer,d) + s.group[d.ke][d.id].buffer=null; + } + } catch(err){ + console.error(err) + } + break; + } +}) \ No newline at end of file diff --git a/plugins/tensorflow/shinobi-tensorflow.js b/plugins/tensorflow/shinobi-tensorflow.js new file mode 100644 index 00000000..19bde820 --- /dev/null +++ b/plugins/tensorflow/shinobi-tensorflow.js @@ -0,0 +1,503 @@ +// +// Shinobi - OpenCV Plugin +// Copyright (C) 2016-2025 Moe Alam, moeiscool +// +// # Donate +// +// If you like what I am doing here and want me to continue please consider donating :) +// PayPal : paypal@m03.ca +// +process.on('uncaughtException', function (err) { + console.error('uncaughtException',err); +}); +var fs=require('fs'); +var cv=require('opencv4nodejs'); +var exec = require('child_process').exec; +var moment = require('moment'); +var Canvas = require('canvas'); +var express = require('express'); +var http = require('http'), + app = express(), + server = http.createServer(app); +var config=require('./conf.json'); +if(!config.port){config.port=8080} +if(!config.hostPort){config.hostPort=8082} +if(config.systemLog===undefined){config.systemLog=true} +if(config.cascadesDir===undefined){config.cascadesDir=__dirname+'/cascades/'} +if(config.alprConfig===undefined){config.alprConfig=__dirname+'/openalpr.conf'} +s={ + group:{}, + dir:{ + cascades : config.cascadesDir + }, + isWin:(process.platform==='win32'), + foundCascades : { + + } +} +//default stream folder check +if(!config.streamDir){ + if(s.isWin===false){ + config.streamDir='/dev/shm' + }else{ + config.streamDir=config.windowsTempDir + } + if(!fs.existsSync(config.streamDir)){ + config.streamDir=__dirname+'/streams/' + }else{ + config.streamDir+='/streams/' + } +} +s.dir.streams=config.streamDir; +//streams dir +if(!fs.existsSync(s.dir.streams)){ + fs.mkdirSync(s.dir.streams); +} +//streams dir +if(!fs.existsSync(s.dir.cascades)){ + fs.mkdirSync(s.dir.cascades); +} +s.gid=function(x){ + if(!x){x=10};var t = "";var p = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + for( var i=0; i < x; i++ ) + t += p.charAt(Math.floor(Math.random() * p.length)); + return t; +}; +s.findCascades=function(callback){ + var tmp={}; + tmp.foundCascades=[]; + fs.readdir(s.dir.cascades,function(err,files){ + files.forEach(function(cascade,n){ + if(cascade.indexOf('.xml')>-1){ + tmp.foundCascades.push(cascade.replace('.xml','')) + } + }) + s.cascadesInDir=tmp.foundCascades; + callback(tmp.foundCascades) + }) +} +s.findCascades(function(){ + //get cascades +}) +s.detectLicensePlate=function(buffer,d,tx){ + if(!d.mon.detector_lisence_plate_country||d.mon.detector_lisence_plate_country===''){ + d.mon.detector_lisence_plate_country='us' + } + d.tmpFile=s.gid(5)+'.jpg' + if(!fs.existsSync(s.dir.streams)){ + fs.mkdirSync(s.dir.streams); + } + d.dir=s.dir.streams+d.ke+'/' + if(!fs.existsSync(d.dir)){ + fs.mkdirSync(d.dir); + } + d.dir=s.dir.streams+d.ke+'/'+d.id+'/' + if(!fs.existsSync(d.dir)){ + fs.mkdirSync(d.dir); + } + fs.writeFile(d.dir+d.tmpFile,buffer,function(err){ + if(err) return s.systemLog(err); + exec('alpr -j --config '+config.alprConfig+' -c '+d.mon.detector_lisence_plate_country+' '+d.dir+d.tmpFile,{encoding:'utf8'},(err, scan, stderr) => { + if(err){ + s.systemLog(err); + }else{ + try{ + scan=JSON.parse(scan.replace('--(!)Loaded CUDA classifier','').trim()) + }catch(err){ + if(!scan||!scan.results){ + return s.systemLog(scan,err); + } + } + if(scan.results.length>0){ + scan.plates=[] + scan.mats=[] + scan.results.forEach(function(v){ + v.candidates.forEach(function(g,n){ + if(v.candidates[n].matches_template) + delete(v.candidates[n].matches_template) + }) + scan.plates.push({coordinates:v.coordinates,candidates:v.candidates,confidence:v.confidence,plate:v.plate}) + var width = Math.sqrt( Math.pow(v.coordinates[1].x - v.coordinates[0].x, 2) + Math.pow(v.coordinates[1].y - v.coordinates[0].y, 2)); + var height = Math.sqrt( Math.pow(v.coordinates[2].x - v.coordinates[1].x, 2) + Math.pow(v.coordinates[2].y - v.coordinates[1].y, 2)) + scan.mats.push({ + x:v.coordinates[0].x, + y:v.coordinates[0].y, + width:width, + height:height, + tag:v.plate + }) + }) + tx({f:'trigger',id:d.id,ke:d.ke,details:{split:true,plug:config.plug,name:'licensePlate',reason:'object',matrices:scan.mats,imgHeight:d.mon.detector_scale_y,imgWidth:d.mon.detector_scale_x,frame:d.base64}}) + } + } + exec('rm -rf '+d.dir+d.tmpFile,{encoding:'utf8'}) + }) + }) +} +s.detectObject=function(buffer,d,tx){ + //detect license plate? + if(d.mon.detector_lisence_plate==="1"){ + s.detectLicensePlate(buffer,d,tx) + } + cv.imdecodeAsync(buffer,(err,im) => { + if(err){ + console.log(err) + return + } + const cv = require('../'); + const fs = require('fs'); + const path = require('path'); + + if (!cv.xmodules.dnn) { + throw new Error('exiting: opencv4nodejs compiled without dnn module'); + } + + // replace with path where you unzipped inception model + const inceptionModelPath = '__dirname/tf-inception'; + + + const modelFile = path.resolve(inceptionModelPath, 'tensorflow_inception_graph.pb'); + const classNamesFile = path.resolve(inceptionModelPath, 'imagenet_comp_graph_label_strings.txt'); + if (!fs.existsSync(modelFile) || !fs.existsSync(classNamesFile)) { + console.log('could not find inception model'); + console.log('download the model from: https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip'); + throw new Error('exiting'); + } + + // read classNames and store them in an array + const classNames = fs.readFileSync(classNamesFile).toString().split('\n'); + + // initialize tensorflow inception model from modelFile + const net = cv.readNetFromTensorflow(modelFile); + + const classifyImg = (im) => { + // inception model works with 224 x 224 images, so we resize + // our input images and pad the image with white pixels to + // make the images have the same width and height + const maxImgDim = 224; + const white = new cv.Vec(255, 255, 255); + const imgResized = img.resizeToMax(maxImgDim).padToSquare(white); + + // network accepts blobs as input + const inputBlob = cv.blobFromImage(imgResized); + net.setInput(inputBlob); + + // forward pass input through entire network, will return + // classification result as 1xN Mat with confidences of each class + const outputBlob = net.forward(); + + // find all labels with a minimum confidence + const minConfidence = 0.05; + const locations = + outputBlob + .threshold(minConfidence, 1, cv.THRESH_BINARY) + .convertTo(cv.CV_8U) + .findNonZero(); + + const result = + locations.map(pt => ({ + confidence: parseInt(outputBlob.at(0, pt.x) * 100) / 100, + className: classNames[pt.x] + })) + // sort result by confidence + .sort((r0, r1) => r1.confidence - r0.confidence) + .map(res => `${res.className} (${res.confidence})`); + if(result.length > 0) { + s.cx({ + f:'trigger', + id:d.id, + ke:d.ke, + name:cascade, + details:{ + plug:'tensorflow', + name:'tensorflow', + reason:result, + matrices : matrices + // confidence:d.average + }, + imgHeight:d.mon.detector_scale_y, + imgWidth:d.mon.detector_scale_x + }) + } + // return result; + }; +}) +s.systemLog=function(q,w,e){ + if(!w){w=''} + if(!e){e=''} + if(config.systemLog===true){ + return console.log(moment().format(),q,w,e) + } +} + +s.blenderRegion=function(d,cord,tx){ + d.width = d.image.width; + d.height = d.image.height; + if(!s.group[d.ke][d.id].canvas[cord.name]){ + if(!cord.sensitivity||isNaN(cord.sensitivity)){ + cord.sensitivity=d.mon.detector_sensitivity; + } + s.group[d.ke][d.id].canvas[cord.name] = new Canvas(d.width,d.height); + s.group[d.ke][d.id].canvasContext[cord.name] = s.group[d.ke][d.id].canvas[cord.name].getContext('2d'); + s.group[d.ke][d.id].canvasContext[cord.name].fillStyle = '#000'; + s.group[d.ke][d.id].canvasContext[cord.name].fillRect( 0, 0,d.width,d.height); + if(cord.points&&cord.points.length>0){ + s.group[d.ke][d.id].canvasContext[cord.name].beginPath(); + for (var b = 0; b < cord.points.length; b++){ + cord.points[b][0]=parseFloat(cord.points[b][0]); + cord.points[b][1]=parseFloat(cord.points[b][1]); + if(b===0){ + s.group[d.ke][d.id].canvasContext[cord.name].moveTo(cord.points[b][0],cord.points[b][1]); + }else{ + s.group[d.ke][d.id].canvasContext[cord.name].lineTo(cord.points[b][0],cord.points[b][1]); + } + } + s.group[d.ke][d.id].canvasContext[cord.name].clip(); + } + } + if(!s.group[d.ke][d.id].canvasContext[cord.name]){ + return + } + s.group[d.ke][d.id].canvasContext[cord.name].drawImage(d.image, 0, 0, d.width, d.height); + if(!s.group[d.ke][d.id].blendRegion[cord.name]){ + s.group[d.ke][d.id].blendRegion[cord.name] = new Canvas(d.width, d.height); + s.group[d.ke][d.id].blendRegionContext[cord.name] = s.group[d.ke][d.id].blendRegion[cord.name].getContext('2d'); + } + var sourceData = s.group[d.ke][d.id].canvasContext[cord.name].getImageData(0, 0, d.width, d.height); + // create an image if the previous image doesn�t exist + if (!s.group[d.ke][d.id].lastRegionImageData[cord.name]) s.group[d.ke][d.id].lastRegionImageData[cord.name] = s.group[d.ke][d.id].canvasContext[cord.name].getImageData(0, 0, d.width, d.height); + // create a ImageData instance to receive the blended result + var blendedData = s.group[d.ke][d.id].canvasContext[cord.name].createImageData(d.width, d.height); + // blend the 2 images + s.differenceAccuracy(blendedData.data,sourceData.data,s.group[d.ke][d.id].lastRegionImageData[cord.name].data); + // draw the result in a canvas + s.group[d.ke][d.id].blendRegionContext[cord.name].putImageData(blendedData, 0, 0); + // store the current webcam image + s.group[d.ke][d.id].lastRegionImageData[cord.name] = sourceData; + blendedData = s.group[d.ke][d.id].blendRegionContext[cord.name].getImageData(0, 0, d.width, d.height); + var i = 0; + d.average = 0; + while (i < (blendedData.data.length * 0.25)) { + d.average += (blendedData.data[i * 4] + blendedData.data[i * 4 + 1] + blendedData.data[i * 4 + 2]); + ++i; + } + d.average = (d.average / (blendedData.data.length * 0.25))*10; + if (d.average > parseFloat(cord.sensitivity)){ + if(d.mon.detector_use_detect_object==="1"&&d.mon.detector_second!=='1'){ + var buffer=s.group[d.ke][d.id].canvas[cord.name].toBuffer(); + s.detectObject(buffer,d,tx) + }else{ + tx({f:'trigger',id:d.id,ke:d.ke,details:{split:true,plug:config.plug,name:cord.name,reason:'motion',confidence:d.average,frame:d.base64}}) + } + } + s.group[d.ke][d.id].canvasContext[cord.name].clearRect(0, 0, d.width, d.height); + s.group[d.ke][d.id].blendRegionContext[cord.name].clearRect(0, 0, d.width, d.height); +} +function blobToBuffer (blob, cb) { + if (typeof Blob === 'undefined' || !(blob instanceof Blob)) { + throw new Error('first argument must be a Blob') + } + if (typeof cb !== 'function') { + throw new Error('second argument must be a function') + } + + var reader = new FileReader() + + function onLoadEnd (e) { + reader.removeEventListener('loadend', onLoadEnd, false) + if (e.error) cb(e.error) + else cb(null, Buffer.from(reader.result)) + } + + reader.addEventListener('loadend', onLoadEnd, false) + reader.readAsArrayBuffer(blob) +} +function fastAbs(value) { + return (value ^ (value >> 31)) - (value >> 31); +} + +function threshold(value) { + return (value > 0x15) ? 0xFF : 0; +} +s.differenceAccuracy=function(target, data1, data2) { + if (data1.length != data2.length) return null; + var i = 0; + while (i < (data1.length * 0.25)) { + var average1 = (data1[4 * i] + data1[4 * i + 1] + data1[4 * i + 2]) / 3; + var average2 = (data2[4 * i] + data2[4 * i + 1] + data2[4 * i + 2]) / 3; + var diff = threshold(fastAbs(average1 - average2)); + target[4 * i] = diff; + target[4 * i + 1] = diff; + target[4 * i + 2] = diff; + target[4 * i + 3] = 0xFF; + ++i; + } +} +s.checkAreas=function(d,tx){ + if(!s.group[d.ke][d.id].cords){ + if(!d.mon.cords){d.mon.cords={}} + s.group[d.ke][d.id].cords=Object.values(d.mon.cords); + } + if(d.mon.detector_frame==='1'){ + d.mon.cords.frame={name:'FULL_FRAME',s:d.mon.detector_sensitivity,points:[[0,0],[0,d.image.height],[d.image.width,d.image.height],[d.image.width,0]]}; + s.group[d.ke][d.id].cords.push(d.mon.cords.frame); + } + for (var b = 0; b < s.group[d.ke][d.id].cords.length; b++){ + if(!s.group[d.ke][d.id].cords[b]){return} + s.blenderRegion(d,s.group[d.ke][d.id].cords[b],tx) + } + delete(d.image) +} + +s.MainEventController=function(d,cn,tx){ + switch(d.f){ + case'refreshPlugins': + s.findCascades(function(cascades){ + s.cx({f:'s.tx',data:{f:'detector_cascade_list',cascades:cascades},to:'GRP_'+d.ke}) + }) + break; + case'readPlugins': + s.cx({f:'s.tx',data:{f:'detector_cascade_list',cascades:s.cascadesInDir},to:'GRP_'+d.ke}) + break; + case'init_plugin_as_host': + if(!cn){ + console.log('No CN',d) + return + } + if(d.key!==config.key){ + console.log(new Date(),'Plugin Key Mismatch',cn.request.connection.remoteAddress,d) + cn.emit('init',{ok:false}) + cn.disconnect() + }else{ + console.log(new Date(),'Plugin Connected to Client',cn.request.connection.remoteAddress) + cn.emit('init',{ok:true,plug:config.plug,notice:config.notice,type:config.type}) + } + break; + case'init_monitor': + if(s.group[d.ke]&&s.group[d.ke][d.id]){ + s.group[d.ke][d.id].canvas={} + s.group[d.ke][d.id].canvasContext={} + s.group[d.ke][d.id].blendRegion={} + s.group[d.ke][d.id].blendRegionContext={} + s.group[d.ke][d.id].lastRegionImageData={} + s.group[d.ke][d.id].numberOfTriggers=0 + delete(s.group[d.ke][d.id].cords) + delete(s.group[d.ke][d.id].buffer) + } + break; + case'init_aws_push': +// console.log('init_aws') + s.group[d.ke][d.id].aws={links:[],complete:0,total:d.total,videos:[],tx:tx} + break; + case'frame': + try{ + if(!s.group[d.ke]){ + s.group[d.ke]={} + } + if(!s.group[d.ke][d.id]){ + s.group[d.ke][d.id]={ + canvas:{}, + canvasContext:{}, + lastRegionImageData:{}, + blendRegion:{}, + blendRegionContext:{}, + } + } + if(!s.group[d.ke][d.id].buffer){ + s.group[d.ke][d.id].buffer=[d.frame]; + }else{ + s.group[d.ke][d.id].buffer.push(d.frame) + } + if(d.frame[d.frame.length-2] === 0xFF && d.frame[d.frame.length-1] === 0xD9){ + s.group[d.ke][d.id].buffer=Buffer.concat(s.group[d.ke][d.id].buffer); + try{ + d.mon.detector_cascades=JSON.parse(d.mon.detector_cascades) + }catch(err){ + + } + if(d.mon.detector_frame_save==="1"){ + d.base64=s.group[d.ke][d.id].buffer.toString('base64') + } + if(d.mon.detector_second==='1'&&d.objectOnly===true){ + s.detectObject(s.group[d.ke][d.id].buffer,d,tx) + }else{ + if((d.mon.detector_pam !== '1' && d.mon.detector_use_motion === "1") || d.mon.detector_use_detect_object !== "1"){ + if((typeof d.mon.cords ==='string')&&d.mon.cords.trim()===''){ + d.mon.cords=[] + }else{ + try{ + d.mon.cords=JSON.parse(d.mon.cords) + }catch(err){ + // console.log('d.mon.cords',err,d) + } + } + s.group[d.ke][d.id].cords=Object.values(d.mon.cords); + d.mon.cords=d.mon.cords; + d.image = new Canvas.Image; + if(d.mon.detector_scale_x===''||d.mon.detector_scale_y===''){ + s.systemLog('Must set detector image size') + return + }else{ + d.image.width=d.mon.detector_scale_x; + d.image.height=d.mon.detector_scale_y; + } + d.width=d.image.width; + d.height=d.image.height; + d.image.onload = function() { + s.checkAreas(d,tx); + } + d.image.src = s.group[d.ke][d.id].buffer; + }else{ + s.detectObject(s.group[d.ke][d.id].buffer,d,tx) + } + } + s.group[d.ke][d.id].buffer=null; + } + }catch(err){ + if(err){ + s.systemLog(err) + delete(s.group[d.ke][d.id].buffer) + } + } + break; + } +} +server.listen(config.hostPort); +//web pages and plugin api +app.get('/', function (req, res) { + res.end(''+config.plug+' for Shinobi is running') +}); +//Conector to Shinobi +if(config.mode==='host'){ + //start plugin as host + var io = require('socket.io')(server); + io.attach(server); + s.connectedClients={}; + io.on('connection', function (cn) { + s.connectedClients[cn.id]={id:cn.id} + s.connectedClients[cn.id].tx = function(data){ + data.pluginKey=config.key;data.plug=config.plug; + return io.to(cn.id).emit('ocv',data); + } + cn.on('f',function(d){ + s.MainEventController(d,cn,s.connectedClients[cn.id].tx) + }); + cn.on('disconnect',function(d){ + delete(s.connectedClients[cn.id]) + }) + }); +}else{ + //start plugin as client + if(!config.host){config.host='localhost'} + var io = require('socket.io-client')('ws://'+config.host+':'+config.port);//connect to master + s.cx=function(x){x.pluginKey=config.key;x.plug=config.plug;return io.emit('ocv',x)} + io.on('connect',function(d){ + s.cx({f:'init',plug:config.plug,notice:config.notice,type:config.type}); + }) + io.on('disconnect',function(d){ + io.connect(); + }) + io.on('f',function(d){ + s.MainEventController(d,null,s.cx) + }) +} From 0b7a094506d12fa59c1da72fbac7d9cc8c90d766 Mon Sep 17 00:00:00 2001 From: Moe Date: Tue, 19 Jun 2018 21:13:58 -0700 Subject: [PATCH 07/45] modify tensforflow plugin syntax --- plugins/tensorflow/INSTALL.sh | 5 + .../tensorflow/shinobi-opencv-no-motion.js | 212 ------------------ plugins/tensorflow/shinobi-tensorflow.js | 153 +++++++------ 3 files changed, 81 insertions(+), 289 deletions(-) delete mode 100644 plugins/tensorflow/shinobi-opencv-no-motion.js diff --git a/plugins/tensorflow/INSTALL.sh b/plugins/tensorflow/INSTALL.sh index cab6113a..09f92577 100644 --- a/plugins/tensorflow/INSTALL.sh +++ b/plugins/tensorflow/INSTALL.sh @@ -1,4 +1,9 @@ #!/bin/bash +mkdir data +mkdir data/inception +chmod -R 777 data +wget https://cdn.shinobi.video/weights/inception5h.zip -O inception5h.zip +unzip inception5h.zip -d data/inception if [ $(dpkg-query -W -f='${Status}' opencv_version 2>/dev/null | grep -c "ok installed") -eq 0 ]; then echo "Shinobi - Do ypu want to let the `opencv4nodejs` npm package install OpenCV? " echo "Only do this if you do not have OpenCV already or will not use a GPU (Hardware Acceleration)." diff --git a/plugins/tensorflow/shinobi-opencv-no-motion.js b/plugins/tensorflow/shinobi-opencv-no-motion.js deleted file mode 100644 index 700d6722..00000000 --- a/plugins/tensorflow/shinobi-opencv-no-motion.js +++ /dev/null @@ -1,212 +0,0 @@ -// -// Shinobi - OpenCV Plugin -// Copyright (C) 2016-2025 Moe Alam, moeiscool -// -// # Donate -// -// If you like what I am doing here and want me to continue please consider donating :) -// PayPal : paypal@m03.a -// -process.on('uncaughtException', function (err) { - console.error('uncaughtException',err); -}); -var fs=require('fs'); -var cv=require('opencv'); -var exec = require('child_process').exec; -var moment = require('moment'); -var config=require('./conf.json'); -if(config.systemLog===undefined){config.systemLog=true} -s={ - group:{}, - dir:{ - cascades:__dirname+'/cascades/' - }, - isWin:(process.platform==='win32') -} -//default stream folder check -if(!config.streamDir){ - if(s.isWin===false){ - config.streamDir='/dev/shm' - }else{ - config.streamDir=config.windowsTempDir - } - if(!fs.existsSync(config.streamDir)){ - config.streamDir=__dirname+'/streams/' - }else{ - config.streamDir+='/streams/' - } -} -s.dir.streams=config.streamDir; -//streams dir -if(!fs.existsSync(s.dir.streams)){ - fs.mkdirSync(s.dir.streams); -} -s.gid=function(x){ - if(!x){x=10};var t = "";var p = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - for( var i=0; i < x; i++ ) - t += p.charAt(Math.floor(Math.random() * p.length)); - return t; -}; -s.systemLog=function(q,w,e){ - if(!w){w=''} - if(!e){e=''} - if(config.systemLog===true){ - return console.log(moment().format(),q,w,e) - } -} -s.findCascades=function(callback){ - var tmp={}; - tmp.foundCascades=[]; - fs.readdir(s.dir.cascades,function(err,files){ - files.forEach(function(cascade,n){ - if(cascade.indexOf('.xml')>-1){ - tmp.foundCascades.push(cascade.replace('.xml','')) - } - }) - s.cascadesInDir=tmp.foundCascades; - callback(tmp.foundCascades) - }) -} -s.findCascades(function(){ - //get cascades -}) -s.detectObject=function(buffer,d){ - var keys = Object.keys(d.mon.detector_cascades); - if(d.mon.detector_lisence_plate==="1"){ - if(!d.mon.detector_lisence_plate_country||d.mon.detector_lisence_plate_country===''){ - d.mon.detector_lisence_plate_country='us' - } - d.tmpFile=s.gid(5)+'.jpg' - if(!fs.existsSync(s.dir.streams)){ - fs.mkdirSync(s.dir.streams); - } - d.dir=s.dir.streams+d.ke+'/' - if(!fs.existsSync(d.dir)){ - fs.mkdirSync(d.dir); - } - d.dir=s.dir.streams+d.ke+'/'+d.id+'/' - if(!fs.existsSync(d.dir)){ - fs.mkdirSync(d.dir); - } - fs.writeFile(d.dir+d.tmpFile,buffer,function(err){ - if(err) return s.systemLog(err); - exec('alpr -j -c '+d.mon.detector_lisence_plate_country+' '+d.dir+d.tmpFile,{encoding:'utf8'},(err, scan, stderr) => { - if(err){ - s.systemLog(err); - }else{ - try{ - try{ - scan=JSON.parse(scan) - }catch(err){ - if(!scan||!scan.results){ - return s.systemLog(scan,err); - } - } - if(scan.results.length>0){ - scan.plates=[] - scan.mats=[] - scan.results.forEach(function(v){ - v.candidates.forEach(function(g,n){ - if(v.candidates[n].matches_template) - delete(v.candidates[n].matches_template) - }) - scan.plates.push({coordinates:v.coordinates,candidates:v.candidates,confidence:v.confidence,plate:v.plate}) - var width = Math.sqrt( Math.pow(v.coordinates[1].x - v.coordinates[0].x, 2) + Math.pow(v.coordinates[1].y - v.coordinates[0].y, 2)); - var height = Math.sqrt( Math.pow(v.coordinates[2].x - v.coordinates[1].x, 2) + Math.pow(v.coordinates[2].y - v.coordinates[1].y, 2)) - scan.mats.push({ - x:v.coordinates[0].x, - y:v.coordinates[0].y, - width:width, - height:height, - tag:v.plate - }) - }) - tx({f:'trigger',id:d.id,ke:d.ke,details:{plug:config.plug,name:'licensePlate',reason:'object',matrices:scan.mats,confidence:d.average,imgHeight:d.mon.detector_scale_y,imgWidth:d.mon.detector_scale_x,frame:d.base64}}) - } - }catch(err){ - s.systemLog(err); - } - } - exec('rm -rf '+d.dir+d.tmpFile,{encoding:'utf8'}) - }) - }) - } - if(keys.length===0){return false} - cv.readImage(buffer, function(err,im){ - if(err){console.log(err);return false;} - var width = im.width(); - var height = im.height(); - - if (width < 1 || height < 1) { - throw new Error('Image has no size'); - } - keys.forEach(function(v,n){ - im.detectObject(s.dir.cascades+v+'.xml',{}, function(err,mats){ - if(err){console.log(err);return false;} - if(mats&&mats.length>0){ - s.cx({f:'trigger',id:d.id,ke:d.ke,details:{plug:config.plug,name:v,reason:'object',matrices:mats,confidence:d.average,imgHeight:height,imgWidth:width}}) - } - }) - }) - }) -} -io = require('socket.io-client')('ws://'+config.host+':'+config.port);//connect to master -s.cx=function(x){x.pluginKey=config.key;x.plug=config.plug;return io.emit('ocv',x)} -io.on('connect',function(d){ - s.cx({f:'init',plug:config.plug}); -}) -io.on('disconnect',function(d){ - io.connect() -}) -io.on('f',function(d){ - switch(d.f){ - case'refreshPlugins': - s.findCascades(function(cascades){ - s.cx({f:'s.tx',data:{f:'detector_cascade_list',cascades:cascades},to:'GRP_'+d.ke}) - }) - break; - case'readPlugins': - s.cx({f:'s.tx',data:{f:'detector_cascade_list',cascades:s.cascadesInDir},to:'GRP_'+d.ke}) - break; - case'init_monitor': - if(s.group[d.ke]&&s.group[d.ke][d.id]){ - s.group[d.ke][d.id].canvas={} - s.group[d.ke][d.id].canvasContext={} - s.group[d.ke][d.id].blendRegion={} - s.group[d.ke][d.id].blendRegionContext={} - s.group[d.ke][d.id].lastRegionImageData={} - delete(s.group[d.ke][d.id].cords) - delete(s.group[d.ke][d.id].buffer) - } - break; - case'frame': - d.details={} - try{ - if(!s.group[d.ke]){ - s.group[d.ke]={} - } - if(!s.group[d.ke][d.id]){ - s.group[d.ke][d.id]={ - canvas:{}, - canvasContext:{}, - lastRegionImageData:{}, - blendRegion:{}, - blendRegionContext:{}, - } - } - if(!s.group[d.ke][d.id].buffer){ - s.group[d.ke][d.id].buffer=[d.frame]; - }else{ - s.group[d.ke][d.id].buffer.push(d.frame) - } - if(d.frame[d.frame.length-2] === 0xFF && d.frame[d.frame.length-1] === 0xD9){ - s.group[d.ke][d.id].buffer=Buffer.concat(s.group[d.ke][d.id].buffer); - s.detectObject(s.group[d.ke][d.id].buffer,d) - s.group[d.ke][d.id].buffer=null; - } - } catch(err){ - console.error(err) - } - break; - } -}) \ No newline at end of file diff --git a/plugins/tensorflow/shinobi-tensorflow.js b/plugins/tensorflow/shinobi-tensorflow.js index 19bde820..204b5782 100644 --- a/plugins/tensorflow/shinobi-tensorflow.js +++ b/plugins/tensorflow/shinobi-tensorflow.js @@ -16,6 +16,7 @@ var exec = require('child_process').exec; var moment = require('moment'); var Canvas = require('canvas'); var express = require('express'); +const path = require('path'); var http = require('http'), app = express(), server = http.createServer(app); @@ -135,93 +136,91 @@ s.detectLicensePlate=function(buffer,d,tx){ }) } s.detectObject=function(buffer,d,tx){ - //detect license plate? - if(d.mon.detector_lisence_plate==="1"){ - s.detectLicensePlate(buffer,d,tx) - } - cv.imdecodeAsync(buffer,(err,im) => { - if(err){ - console.log(err) - return - } - const cv = require('../'); - const fs = require('fs'); - const path = require('path'); + //detect license plate? + if(d.mon.detector_lisence_plate==="1"){ + s.detectLicensePlate(buffer,d,tx) + } + cv.imdecodeAsync(buffer,(err,im) => { + if(err){ + console.log(err) + return + } - if (!cv.xmodules.dnn) { - throw new Error('exiting: opencv4nodejs compiled without dnn module'); - } + if (!cv.xmodules.dnn) { + throw new Error('exiting: opencv4nodejs compiled without dnn module'); + } - // replace with path where you unzipped inception model - const inceptionModelPath = '__dirname/tf-inception'; + // replace with path where you unzipped inception model + const inceptionModelPath = __dirname+'/data/inception'; - const modelFile = path.resolve(inceptionModelPath, 'tensorflow_inception_graph.pb'); - const classNamesFile = path.resolve(inceptionModelPath, 'imagenet_comp_graph_label_strings.txt'); - if (!fs.existsSync(modelFile) || !fs.existsSync(classNamesFile)) { - console.log('could not find inception model'); - console.log('download the model from: https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip'); - throw new Error('exiting'); - } + const modelFile = path.resolve(inceptionModelPath, 'tensorflow_inception_graph.pb'); + const classNamesFile = path.resolve(inceptionModelPath, 'imagenet_comp_graph_label_strings.txt'); + if (!fs.existsSync(modelFile) || !fs.existsSync(classNamesFile)) { + console.log('could not find inception model'); + console.log('download the model from: https://cdn.shinobi.video/weights/inception5h.zip'); + throw new Error('exiting'); + } - // read classNames and store them in an array - const classNames = fs.readFileSync(classNamesFile).toString().split('\n'); + // read classNames and store them in an array + const classNames = fs.readFileSync(classNamesFile).toString().split('\n'); - // initialize tensorflow inception model from modelFile - const net = cv.readNetFromTensorflow(modelFile); + // initialize tensorflow inception model from modelFile + const net = cv.readNetFromTensorflow(modelFile); - const classifyImg = (im) => { - // inception model works with 224 x 224 images, so we resize - // our input images and pad the image with white pixels to - // make the images have the same width and height - const maxImgDim = 224; - const white = new cv.Vec(255, 255, 255); - const imgResized = img.resizeToMax(maxImgDim).padToSquare(white); + // inception model works with 224 x 224 images, so we resize + // our input images and pad the image with white pixels to + // make the images have the same width and height + const maxImgDim = 224; + const white = new cv.Vec(255, 255, 255); + const imgResized = im.resizeToMax(maxImgDim).padToSquare(white); - // network accepts blobs as input - const inputBlob = cv.blobFromImage(imgResized); - net.setInput(inputBlob); + // network accepts blobs as input + const inputBlob = cv.blobFromImage(imgResized); + net.setInput(inputBlob); - // forward pass input through entire network, will return - // classification result as 1xN Mat with confidences of each class - const outputBlob = net.forward(); + // forward pass input through entire network, will return + // classification result as 1xN Mat with confidences of each class + const outputBlob = net.forward(); - // find all labels with a minimum confidence - const minConfidence = 0.05; - const locations = - outputBlob - .threshold(minConfidence, 1, cv.THRESH_BINARY) - .convertTo(cv.CV_8U) - .findNonZero(); - - const result = - locations.map(pt => ({ - confidence: parseInt(outputBlob.at(0, pt.x) * 100) / 100, - className: classNames[pt.x] - })) - // sort result by confidence - .sort((r0, r1) => r1.confidence - r0.confidence) - .map(res => `${res.className} (${res.confidence})`); - if(result.length > 0) { - s.cx({ - f:'trigger', - id:d.id, - ke:d.ke, - name:cascade, - details:{ - plug:'tensorflow', - name:'tensorflow', - reason:result, - matrices : matrices - // confidence:d.average - }, - imgHeight:d.mon.detector_scale_y, - imgWidth:d.mon.detector_scale_x - }) - } - // return result; - }; -}) + // find all labels with a minimum confidence + const minConfidence = 0.05; + const locations = + outputBlob + .threshold(minConfidence, 1, cv.THRESH_BINARY) + .convertTo(cv.CV_8U) + .findNonZero(); +// locations.forEach(function(v){ +// console.log(v) +// }) + const result = + locations.map(pt => ({ + confidence: parseInt(outputBlob.at(0, pt.x) * 100) / 100, + className: classNames[pt.x] + })) + // sort result by confidence + .sort((r0, r1) => r1.confidence - r0.confidence) + .map(res => `${res.className} (${res.confidence})`); + console.log(result) + if(result.length > 0) { + s.cx({ + f:'trigger', + id:d.id, + ke:d.ke, + name:'tensorflow', + details:{ + plug:'tensorflow', + name:'tensorflow', + reason:'object', + matrices : result + // confidence:d.average + }, + imgHeight:d.mon.detector_scale_y, + imgWidth:d.mon.detector_scale_x + }) + } + }) +} s.systemLog=function(q,w,e){ if(!w){w=''} if(!e){e=''} From 4217ff651eab629666d28b085611fed2ae7d0d79 Mon Sep 17 00:00:00 2001 From: Moe Date: Tue, 19 Jun 2018 21:14:52 -0700 Subject: [PATCH 08/45] change plugin name in conf sample --- plugins/tensorflow/conf.sample.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/tensorflow/conf.sample.json b/plugins/tensorflow/conf.sample.json index 1a4b8dc0..7c27d4ee 100644 --- a/plugins/tensorflow/conf.sample.json +++ b/plugins/tensorflow/conf.sample.json @@ -1,5 +1,5 @@ { - "plug":"OpenCV", + "plug":"Tensorflow", "host":"localhost", "port":8080, "hostPort":8082, From 68af947d8296582f281daf0fcd563d56f3ec5d6f Mon Sep 17 00:00:00 2001 From: Moe Date: Tue, 19 Jun 2018 23:00:11 -0700 Subject: [PATCH 09/45] coco dnn plugin (OpenCL only) --- plugins/dnnCoco/.gitignore | 2 + plugins/dnnCoco/INSTALL.sh | 19 + plugins/dnnCoco/conf.sample.json | 9 + plugins/dnnCoco/dnnCocoClassNames.js | 83 +++++ plugins/dnnCoco/openalpr.conf | 94 +++++ plugins/dnnCoco/shinobi-coco.js | 525 +++++++++++++++++++++++++++ 6 files changed, 732 insertions(+) create mode 100644 plugins/dnnCoco/.gitignore create mode 100644 plugins/dnnCoco/INSTALL.sh create mode 100644 plugins/dnnCoco/conf.sample.json create mode 100644 plugins/dnnCoco/dnnCocoClassNames.js create mode 100644 plugins/dnnCoco/openalpr.conf create mode 100644 plugins/dnnCoco/shinobi-coco.js diff --git a/plugins/dnnCoco/.gitignore b/plugins/dnnCoco/.gitignore new file mode 100644 index 00000000..342a4b13 --- /dev/null +++ b/plugins/dnnCoco/.gitignore @@ -0,0 +1,2 @@ +conf.json +data \ No newline at end of file diff --git a/plugins/dnnCoco/INSTALL.sh b/plugins/dnnCoco/INSTALL.sh new file mode 100644 index 00000000..476b40b1 --- /dev/null +++ b/plugins/dnnCoco/INSTALL.sh @@ -0,0 +1,19 @@ +#!/bin/bash +mkdir data +chmod -R 777 data +wget https://cdn.shinobi.video/weights/dnnCocoData.zip -O dnnCocoData.zip +unzip dnnCocoData.zip -d data +if [ $(dpkg-query -W -f='${Status}' opencv_version 2>/dev/null | grep -c "ok installed") -eq 0 ]; then + echo "Shinobi - Do ypu want to let the `opencv4nodejs` npm package install OpenCV? " + echo "Only do this if you do not have OpenCV already or will not use a GPU (Hardware Acceleration)." + echo "(y)es or (N)o" + read nodejsinstall + if [ "$nodejsinstall" = "y" ] || [ "$nodejsinstall" = "Y" ]; then + export OPENCV4NODEJS_DISABLE_AUTOBUILD=0 + else + export OPENCV4NODEJS_DISABLE_AUTOBUILD=1 + fi +else + export OPENCV4NODEJS_DISABLE_AUTOBUILD=1 +fi +npm install opencv4nodejs moment express canvas@1.6 --unsafe-perm \ No newline at end of file diff --git a/plugins/dnnCoco/conf.sample.json b/plugins/dnnCoco/conf.sample.json new file mode 100644 index 00000000..831ea794 --- /dev/null +++ b/plugins/dnnCoco/conf.sample.json @@ -0,0 +1,9 @@ +{ + "plug":"Coco", + "host":"localhost", + "port":8080, + "hostPort":8082, + "key":"change_this_to_something_very_random____make_sure_to_match__/plugins/opencv/conf.json", + "mode":"client", + "type":"detector" +} \ No newline at end of file diff --git a/plugins/dnnCoco/dnnCocoClassNames.js b/plugins/dnnCoco/dnnCocoClassNames.js new file mode 100644 index 00000000..6c0e980c --- /dev/null +++ b/plugins/dnnCoco/dnnCocoClassNames.js @@ -0,0 +1,83 @@ +module.exports = [ + 'background', + 'person', + 'bicycle', + 'car', + 'motorcycle', + 'airplane', + 'bus', + 'train', + 'truck', + 'boat', + 'traffic light', + 'fire hydrant', + 'stop sign', + 'parking meter', + 'bench', + 'bird', + 'cat', + 'dog', + 'horse', + 'sheep', + 'cow', + 'elephant', + 'bear', + 'zebra', + 'giraffe', + 'backpack', + 'umbrella', + 'handbag', + 'tie', + 'suitcase', + 'frisbee', + 'skis', + 'snowboard', + 'sports ball', + 'kite', + 'baseball bat', + 'baseball glove', + 'skateboard', + 'surfboard', + 'tennis racket', + 'bottle', + 'wine glass', + 'cup', + 'fork', + 'knife', + 'spoon', + 'bowl', + 'banana', + 'apple', + 'sandwich', + 'orange', + 'broccoli', + 'carrot', + 'hot dog', + 'pizza', + 'donut', + 'cake', + 'chair', + 'couch', + 'potted plant', + 'bed', + 'dining table', + 'toilet', + 'tv', + 'laptop', + 'mouse', + 'remote', + 'keyboard', + 'cell phone', + 'microwave', + 'oven', + 'toaster', + 'sink', + 'refrigerator', + 'book', + 'clock', + 'vase', + 'scissors', + 'teddy bear', + 'hair drier', + 'toothbrush' +]; diff --git a/plugins/dnnCoco/openalpr.conf b/plugins/dnnCoco/openalpr.conf new file mode 100644 index 00000000..070752b1 --- /dev/null +++ b/plugins/dnnCoco/openalpr.conf @@ -0,0 +1,94 @@ + +; Specify the path to the runtime data directory +runtime_dir = ${CMAKE_INSTALL_PREFIX}/share/openalpr/runtime_data + + +ocr_img_size_percent = 1.33333333 +state_id_img_size_percent = 2.0 + +; Calibrating your camera improves detection accuracy in cases where vehicle plates are captured at a steep angle +; Use the openalpr-utils-calibrate utility to calibrate your fixed camera to adjust for an angle +; Once done, update the prewarp config with the values obtained from the tool +prewarp = + +; detection will ignore plates that are too large. This is a good efficiency technique to use if the +; plates are going to be a fixed distance away from the camera (e.g., you will never see plates that fill +; up the entire image +max_plate_width_percent = 100 +max_plate_height_percent = 100 + +; detection_iteration_increase is the percentage that the LBP frame increases each iteration. +; It must be greater than 1.0. A value of 1.01 means increase by 1%, 1.10 increases it by 10% each time. +; So a 1% increase would be ~10x slower than 10% to process, but it has a higher chance of landing +; directly on the plate and getting a strong detection +detection_iteration_increase = 1.1 + +; The minimum detection strength determines how sure the detection algorithm must be before signaling that +; a plate region exists. Technically this corresponds to LBP nearest neighbors (e.g., how many detections +; are clustered around the same area). For example, 2 = very lenient, 9 = very strict. +detection_strictness = 3 + +; The detection doesn't necessarily need an extremely high resolution image in order to detect plates +; Using a smaller input image should still find the plates and will do it faster +; Tweaking the max_detection_input values will resize the input image if it is larger than these sizes +; max_detection_input_width/height are specified in pixels +max_detection_input_width = 1280 +max_detection_input_height = 720 + +; detector is the technique used to find license plate regions in an image. Value can be set to +; lbpcpu - default LBP-based detector uses the system CPU +; lbpgpu - LBP-based detector that uses Nvidia GPU to increase recognition speed. +; lbpopencl - LBP-based detector that uses OpenCL GPU to increase recognition speed. Requires OpenCV 3.0 +; morphcpu - Experimental detector that detects white rectangles in an image. Does not require training. +detector = lbpgpu + +; If set to true, all results must match a postprocess text pattern if a pattern is available. +; If not, the result is disqualified. +must_match_pattern = 0 + +; Bypasses plate detection. If this is set to 1, the library assumes that each region provided is a likely plate area. +skip_detection = 0 + +; Specifies the full path to an image file that constrains the detection area. Only the plate regions allowed through the mask +; will be analyzed. The mask image must match the resolution of your image to be analyzed. The mask is black and white. +; Black areas will be ignored, white areas will be searched. An empty value means no mask (scan the entire image) +detection_mask_image = + +; OpenALPR can scan the same image multiple times with different randomization. Setting this to a value larger than +; 1 may increase accuracy, but will increase processing time linearly (e.g., analysis_count = 3 is 3x slower) +analysis_count = 1 + +; OpenALPR detects high-contrast plate crops and uses an alternative edge detection technique. Setting this to 0.0 +; would classify ALL images as high-contrast, setting it to 1.0 would classify no images as high-contrast. +contrast_detection_threshold = 0.3 + +max_plate_angle_degrees = 15 + +ocr_min_font_point = 6 + +; Minimum OCR confidence percent to consider. +postprocess_min_confidence = 65 + +; Any OCR character lower than this will also add an equally likely +; chance that the character is incorrect and will be skipped. Value is a confidence percent +postprocess_confidence_skip_level = 80 + + +debug_general = 0 +debug_timing = 0 +debug_detector = 0 +debug_prewarp = 0 +debug_state_id = 0 +debug_plate_lines = 0 +debug_plate_corners = 0 +debug_char_segment = 0 +debug_char_analysis = 0 +debug_color_filter = 0 +debug_ocr = 0 +debug_postprocess = 0 +debug_show_images = 0 +debug_pause_on_frame = 0 + + + + diff --git a/plugins/dnnCoco/shinobi-coco.js b/plugins/dnnCoco/shinobi-coco.js new file mode 100644 index 00000000..6a0a88d5 --- /dev/null +++ b/plugins/dnnCoco/shinobi-coco.js @@ -0,0 +1,525 @@ +// +// Shinobi - OpenCV Plugin +// Copyright (C) 2016-2025 Moe Alam, moeiscool +// +// # Donate +// +// If you like what I am doing here and want me to continue please consider donating :) +// PayPal : paypal@m03.ca +// +process.on('uncaughtException', function (err) { + console.error('uncaughtException',err); +}); +var fs=require('fs'); +var cv=require('opencv4nodejs'); +var exec = require('child_process').exec; +var moment = require('moment'); +var Canvas = require('canvas'); +var express = require('express'); +const path = require('path'); +var http = require('http'), + app = express(), + server = http.createServer(app); +var config=require('./conf.json'); +if(!config.port){config.port=8080} +if(!config.hostPort){config.hostPort=8082} +if(config.systemLog===undefined){config.systemLog=true} +if(config.cascadesDir===undefined){config.cascadesDir=__dirname+'/cascades/'} +if(config.alprConfig===undefined){config.alprConfig=__dirname+'/openalpr.conf'} + + +const classNames = require(__dirname+'/dnnCocoClassNames.js'); +const extractResults = function (outputBlob, imgDimensions) { + return Array(outputBlob.rows).fill(0) + .map((res, i) => { + const classLabel = outputBlob.at(i, 1); + const confidence = outputBlob.at(i, 2); + const bottomLeft = new cv.Point( + outputBlob.at(i, 3) * imgDimensions.cols, + outputBlob.at(i, 6) * imgDimensions.rows + ); + const topRight = new cv.Point( + outputBlob.at(i, 5) * imgDimensions.cols, + outputBlob.at(i, 4) * imgDimensions.rows + ); + const rect = new cv.Rect( + bottomLeft.x, + topRight.y, + topRight.x - bottomLeft.x, + bottomLeft.y - topRight.y + ); + + return ({ + classLabel, + confidence, + rect + }); + }); +}; +// replace with path where you unzipped inception model +const ssdcocoModelPath = __dirname+'/data'; + +const prototxt = path.resolve(ssdcocoModelPath, 'deploy.prototxt'); +const modelFile = path.resolve(ssdcocoModelPath, 'VGG_coco_SSD_300x300_iter_400000.caffemodel'); + +if (!fs.existsSync(prototxt) || !fs.existsSync(modelFile)) { + console.log('could not find ssdcoco model'); + console.log('download the model from: https://cdn.shinobi.video/weights/dnnCocoData.zip'); + throw new Error('exiting: could not find ssdcoco model'); +} + +// initialize ssdcoco model from prototxt and modelFile +const net = cv.readNetFromCaffe(prototxt, modelFile); + +function classifyImg(img) { + // ssdcoco model works with 300 x 300 images + const imgResized = img.resize(300, 300); + + // network accepts blobs as input + const inputBlob = cv.blobFromImage(imgResized); + net.setInput(inputBlob); + + // forward pass input through entire network, will return + // classification result as 1x1xNxM Mat + let outputBlob = net.forward(); + // extract NxM Mat + outputBlob = outputBlob.flattenFloat(outputBlob.sizes[2], outputBlob.sizes[3]); + + return extractResults(outputBlob, img) + .map(r => Object.assign({}, r.rect, { confidence : r.confidence, className: classNames[r.classLabel] })); +} + +const makeDrawClassDetections = predictions => (drawImg, className, getColor, thickness = 2) => { + predictions + .filter(p => classNames[p.classLabel] === className) + .forEach(p => console.log(p)); +}; + + +s={ + group:{}, + dir:{ + cascades : config.cascadesDir + }, + isWin:(process.platform==='win32'), + foundCascades : { + + } +} +//default stream folder check +if(!config.streamDir){ + if(s.isWin===false){ + config.streamDir='/dev/shm' + }else{ + config.streamDir=config.windowsTempDir + } + if(!fs.existsSync(config.streamDir)){ + config.streamDir=__dirname+'/streams/' + }else{ + config.streamDir+='/streams/' + } +} +s.dir.streams=config.streamDir; +//streams dir +if(!fs.existsSync(s.dir.streams)){ + fs.mkdirSync(s.dir.streams); +} +//streams dir +if(!fs.existsSync(s.dir.cascades)){ + fs.mkdirSync(s.dir.cascades); +} +s.gid=function(x){ + if(!x){x=10};var t = "";var p = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + for( var i=0; i < x; i++ ) + t += p.charAt(Math.floor(Math.random() * p.length)); + return t; +}; +s.findCascades=function(callback){ + var tmp={}; + tmp.foundCascades=[]; + fs.readdir(s.dir.cascades,function(err,files){ + files.forEach(function(cascade,n){ + if(cascade.indexOf('.xml')>-1){ + tmp.foundCascades.push(cascade.replace('.xml','')) + } + }) + s.cascadesInDir=tmp.foundCascades; + callback(tmp.foundCascades) + }) +} +s.findCascades(function(){ + //get cascades +}) +s.detectLicensePlate=function(buffer,d,tx){ + if(!d.mon.detector_lisence_plate_country||d.mon.detector_lisence_plate_country===''){ + d.mon.detector_lisence_plate_country='us' + } + d.tmpFile=s.gid(5)+'.jpg' + if(!fs.existsSync(s.dir.streams)){ + fs.mkdirSync(s.dir.streams); + } + d.dir=s.dir.streams+d.ke+'/' + if(!fs.existsSync(d.dir)){ + fs.mkdirSync(d.dir); + } + d.dir=s.dir.streams+d.ke+'/'+d.id+'/' + if(!fs.existsSync(d.dir)){ + fs.mkdirSync(d.dir); + } + fs.writeFile(d.dir+d.tmpFile,buffer,function(err){ + if(err) return s.systemLog(err); + exec('alpr -j --config '+config.alprConfig+' -c '+d.mon.detector_lisence_plate_country+' '+d.dir+d.tmpFile,{encoding:'utf8'},(err, scan, stderr) => { + if(err){ + s.systemLog(err); + }else{ + try{ + scan=JSON.parse(scan.replace('--(!)Loaded CUDA classifier','').trim()) + }catch(err){ + if(!scan||!scan.results){ + return s.systemLog(scan,err); + } + } + if(scan.results.length>0){ + scan.plates=[] + scan.mats=[] + scan.results.forEach(function(v){ + v.candidates.forEach(function(g,n){ + if(v.candidates[n].matches_template) + delete(v.candidates[n].matches_template) + }) + scan.plates.push({coordinates:v.coordinates,candidates:v.candidates,confidence:v.confidence,plate:v.plate}) + var width = Math.sqrt( Math.pow(v.coordinates[1].x - v.coordinates[0].x, 2) + Math.pow(v.coordinates[1].y - v.coordinates[0].y, 2)); + var height = Math.sqrt( Math.pow(v.coordinates[2].x - v.coordinates[1].x, 2) + Math.pow(v.coordinates[2].y - v.coordinates[1].y, 2)) + scan.mats.push({ + x:v.coordinates[0].x, + y:v.coordinates[0].y, + width:width, + height:height, + tag:v.plate + }) + }) + tx({f:'trigger',id:d.id,ke:d.ke,details:{split:true,plug:config.plug,name:'licensePlate',reason:'object',matrices:scan.mats,imgHeight:d.mon.detector_scale_y,imgWidth:d.mon.detector_scale_x,frame:d.base64}}) + } + } + exec('rm -rf '+d.dir+d.tmpFile,{encoding:'utf8'}) + }) + }) +} +s.detectObject=function(buffer,d,tx){ + //detect license plate? + if(d.mon.detector_lisence_plate==="1"){ + s.detectLicensePlate(buffer,d,tx) + } + cv.imdecodeAsync(buffer,(err,im) => { + if(err){ + console.log(err) + return + } + + if (!cv.xmodules.dnn) { + throw new Error('exiting: opencv4nodejs compiled without dnn module'); + } + + + const minConfidence = 0.5; + + const predictions = classifyImg(im).filter(res => res.confidence > minConfidence); +// console.log(predictions) + if(predictions.length > 0) { + s.cx({ + f:'trigger', + id:d.id, + ke:d.ke, + name:'coco', + details:{ + plug:'coco', + name:'coco', + reason:'object', + matrices : predictions + // confidence:d.average + }, + imgHeight:d.mon.detector_scale_y, + imgWidth:d.mon.detector_scale_x + }) + } + }) +} +s.systemLog=function(q,w,e){ + if(!w){w=''} + if(!e){e=''} + if(config.systemLog===true){ + return console.log(moment().format(),q,w,e) + } +} + +s.blenderRegion=function(d,cord,tx){ + d.width = d.image.width; + d.height = d.image.height; + if(!s.group[d.ke][d.id].canvas[cord.name]){ + if(!cord.sensitivity||isNaN(cord.sensitivity)){ + cord.sensitivity=d.mon.detector_sensitivity; + } + s.group[d.ke][d.id].canvas[cord.name] = new Canvas(d.width,d.height); + s.group[d.ke][d.id].canvasContext[cord.name] = s.group[d.ke][d.id].canvas[cord.name].getContext('2d'); + s.group[d.ke][d.id].canvasContext[cord.name].fillStyle = '#000'; + s.group[d.ke][d.id].canvasContext[cord.name].fillRect( 0, 0,d.width,d.height); + if(cord.points&&cord.points.length>0){ + s.group[d.ke][d.id].canvasContext[cord.name].beginPath(); + for (var b = 0; b < cord.points.length; b++){ + cord.points[b][0]=parseFloat(cord.points[b][0]); + cord.points[b][1]=parseFloat(cord.points[b][1]); + if(b===0){ + s.group[d.ke][d.id].canvasContext[cord.name].moveTo(cord.points[b][0],cord.points[b][1]); + }else{ + s.group[d.ke][d.id].canvasContext[cord.name].lineTo(cord.points[b][0],cord.points[b][1]); + } + } + s.group[d.ke][d.id].canvasContext[cord.name].clip(); + } + } + if(!s.group[d.ke][d.id].canvasContext[cord.name]){ + return + } + s.group[d.ke][d.id].canvasContext[cord.name].drawImage(d.image, 0, 0, d.width, d.height); + if(!s.group[d.ke][d.id].blendRegion[cord.name]){ + s.group[d.ke][d.id].blendRegion[cord.name] = new Canvas(d.width, d.height); + s.group[d.ke][d.id].blendRegionContext[cord.name] = s.group[d.ke][d.id].blendRegion[cord.name].getContext('2d'); + } + var sourceData = s.group[d.ke][d.id].canvasContext[cord.name].getImageData(0, 0, d.width, d.height); + // create an image if the previous image doesn�t exist + if (!s.group[d.ke][d.id].lastRegionImageData[cord.name]) s.group[d.ke][d.id].lastRegionImageData[cord.name] = s.group[d.ke][d.id].canvasContext[cord.name].getImageData(0, 0, d.width, d.height); + // create a ImageData instance to receive the blended result + var blendedData = s.group[d.ke][d.id].canvasContext[cord.name].createImageData(d.width, d.height); + // blend the 2 images + s.differenceAccuracy(blendedData.data,sourceData.data,s.group[d.ke][d.id].lastRegionImageData[cord.name].data); + // draw the result in a canvas + s.group[d.ke][d.id].blendRegionContext[cord.name].putImageData(blendedData, 0, 0); + // store the current webcam image + s.group[d.ke][d.id].lastRegionImageData[cord.name] = sourceData; + blendedData = s.group[d.ke][d.id].blendRegionContext[cord.name].getImageData(0, 0, d.width, d.height); + var i = 0; + d.average = 0; + while (i < (blendedData.data.length * 0.25)) { + d.average += (blendedData.data[i * 4] + blendedData.data[i * 4 + 1] + blendedData.data[i * 4 + 2]); + ++i; + } + d.average = (d.average / (blendedData.data.length * 0.25))*10; + if (d.average > parseFloat(cord.sensitivity)){ + if(d.mon.detector_use_detect_object==="1"&&d.mon.detector_second!=='1'){ + var buffer=s.group[d.ke][d.id].canvas[cord.name].toBuffer(); + s.detectObject(buffer,d,tx) + }else{ + tx({f:'trigger',id:d.id,ke:d.ke,details:{split:true,plug:config.plug,name:cord.name,reason:'motion',confidence:d.average,frame:d.base64}}) + } + } + s.group[d.ke][d.id].canvasContext[cord.name].clearRect(0, 0, d.width, d.height); + s.group[d.ke][d.id].blendRegionContext[cord.name].clearRect(0, 0, d.width, d.height); +} +function blobToBuffer (blob, cb) { + if (typeof Blob === 'undefined' || !(blob instanceof Blob)) { + throw new Error('first argument must be a Blob') + } + if (typeof cb !== 'function') { + throw new Error('second argument must be a function') + } + + var reader = new FileReader() + + function onLoadEnd (e) { + reader.removeEventListener('loadend', onLoadEnd, false) + if (e.error) cb(e.error) + else cb(null, Buffer.from(reader.result)) + } + + reader.addEventListener('loadend', onLoadEnd, false) + reader.readAsArrayBuffer(blob) +} +function fastAbs(value) { + return (value ^ (value >> 31)) - (value >> 31); +} + +function threshold(value) { + return (value > 0x15) ? 0xFF : 0; +} +s.differenceAccuracy=function(target, data1, data2) { + if (data1.length != data2.length) return null; + var i = 0; + while (i < (data1.length * 0.25)) { + var average1 = (data1[4 * i] + data1[4 * i + 1] + data1[4 * i + 2]) / 3; + var average2 = (data2[4 * i] + data2[4 * i + 1] + data2[4 * i + 2]) / 3; + var diff = threshold(fastAbs(average1 - average2)); + target[4 * i] = diff; + target[4 * i + 1] = diff; + target[4 * i + 2] = diff; + target[4 * i + 3] = 0xFF; + ++i; + } +} +s.checkAreas=function(d,tx){ + if(!s.group[d.ke][d.id].cords){ + if(!d.mon.cords){d.mon.cords={}} + s.group[d.ke][d.id].cords=Object.values(d.mon.cords); + } + if(d.mon.detector_frame==='1'){ + d.mon.cords.frame={name:'FULL_FRAME',s:d.mon.detector_sensitivity,points:[[0,0],[0,d.image.height],[d.image.width,d.image.height],[d.image.width,0]]}; + s.group[d.ke][d.id].cords.push(d.mon.cords.frame); + } + for (var b = 0; b < s.group[d.ke][d.id].cords.length; b++){ + if(!s.group[d.ke][d.id].cords[b]){return} + s.blenderRegion(d,s.group[d.ke][d.id].cords[b],tx) + } + delete(d.image) +} + +s.MainEventController=function(d,cn,tx){ + switch(d.f){ + case'refreshPlugins': + s.findCascades(function(cascades){ + s.cx({f:'s.tx',data:{f:'detector_cascade_list',cascades:cascades},to:'GRP_'+d.ke}) + }) + break; + case'readPlugins': + s.cx({f:'s.tx',data:{f:'detector_cascade_list',cascades:s.cascadesInDir},to:'GRP_'+d.ke}) + break; + case'init_plugin_as_host': + if(!cn){ + console.log('No CN',d) + return + } + if(d.key!==config.key){ + console.log(new Date(),'Plugin Key Mismatch',cn.request.connection.remoteAddress,d) + cn.emit('init',{ok:false}) + cn.disconnect() + }else{ + console.log(new Date(),'Plugin Connected to Client',cn.request.connection.remoteAddress) + cn.emit('init',{ok:true,plug:config.plug,notice:config.notice,type:config.type}) + } + break; + case'init_monitor': + if(s.group[d.ke]&&s.group[d.ke][d.id]){ + s.group[d.ke][d.id].canvas={} + s.group[d.ke][d.id].canvasContext={} + s.group[d.ke][d.id].blendRegion={} + s.group[d.ke][d.id].blendRegionContext={} + s.group[d.ke][d.id].lastRegionImageData={} + s.group[d.ke][d.id].numberOfTriggers=0 + delete(s.group[d.ke][d.id].cords) + delete(s.group[d.ke][d.id].buffer) + } + break; + case'init_aws_push': +// console.log('init_aws') + s.group[d.ke][d.id].aws={links:[],complete:0,total:d.total,videos:[],tx:tx} + break; + case'frame': + try{ + if(!s.group[d.ke]){ + s.group[d.ke]={} + } + if(!s.group[d.ke][d.id]){ + s.group[d.ke][d.id]={ + canvas:{}, + canvasContext:{}, + lastRegionImageData:{}, + blendRegion:{}, + blendRegionContext:{}, + } + } + if(!s.group[d.ke][d.id].buffer){ + s.group[d.ke][d.id].buffer=[d.frame]; + }else{ + s.group[d.ke][d.id].buffer.push(d.frame) + } + if(d.frame[d.frame.length-2] === 0xFF && d.frame[d.frame.length-1] === 0xD9){ + s.group[d.ke][d.id].buffer=Buffer.concat(s.group[d.ke][d.id].buffer); + try{ + d.mon.detector_cascades=JSON.parse(d.mon.detector_cascades) + }catch(err){ + + } + if(d.mon.detector_frame_save==="1"){ + d.base64=s.group[d.ke][d.id].buffer.toString('base64') + } + if(d.mon.detector_second==='1'&&d.objectOnly===true){ + s.detectObject(s.group[d.ke][d.id].buffer,d,tx) + }else{ + if((d.mon.detector_pam !== '1' && d.mon.detector_use_motion === "1") || d.mon.detector_use_detect_object !== "1"){ + if((typeof d.mon.cords ==='string')&&d.mon.cords.trim()===''){ + d.mon.cords=[] + }else{ + try{ + d.mon.cords=JSON.parse(d.mon.cords) + }catch(err){ + // console.log('d.mon.cords',err,d) + } + } + s.group[d.ke][d.id].cords=Object.values(d.mon.cords); + d.mon.cords=d.mon.cords; + d.image = new Canvas.Image; + if(d.mon.detector_scale_x===''||d.mon.detector_scale_y===''){ + s.systemLog('Must set detector image size') + return + }else{ + d.image.width=d.mon.detector_scale_x; + d.image.height=d.mon.detector_scale_y; + } + d.width=d.image.width; + d.height=d.image.height; + d.image.onload = function() { + s.checkAreas(d,tx); + } + d.image.src = s.group[d.ke][d.id].buffer; + }else{ + s.detectObject(s.group[d.ke][d.id].buffer,d,tx) + } + } + s.group[d.ke][d.id].buffer=null; + } + }catch(err){ + if(err){ + s.systemLog(err) + delete(s.group[d.ke][d.id].buffer) + } + } + break; + } +} +server.listen(config.hostPort); +//web pages and plugin api +app.get('/', function (req, res) { + res.end(''+config.plug+' for Shinobi is running') +}); +//Conector to Shinobi +if(config.mode==='host'){ + //start plugin as host + var io = require('socket.io')(server); + io.attach(server); + s.connectedClients={}; + io.on('connection', function (cn) { + s.connectedClients[cn.id]={id:cn.id} + s.connectedClients[cn.id].tx = function(data){ + data.pluginKey=config.key;data.plug=config.plug; + return io.to(cn.id).emit('ocv',data); + } + cn.on('f',function(d){ + s.MainEventController(d,cn,s.connectedClients[cn.id].tx) + }); + cn.on('disconnect',function(d){ + delete(s.connectedClients[cn.id]) + }) + }); +}else{ + //start plugin as client + if(!config.host){config.host='localhost'} + var io = require('socket.io-client')('ws://'+config.host+':'+config.port);//connect to master + s.cx=function(x){x.pluginKey=config.key;x.plug=config.plug;return io.emit('ocv',x)} + io.on('connect',function(d){ + s.cx({f:'init',plug:config.plug,notice:config.notice,type:config.type}); + }) + io.on('disconnect',function(d){ + io.connect(); + }) + io.on('f',function(d){ + s.MainEventController(d,null,s.cx) + }) +} From ad0d8d311fa36afa33d09c77577e5f655e61103e Mon Sep 17 00:00:00 2001 From: Moe Date: Tue, 19 Jun 2018 23:00:25 -0700 Subject: [PATCH 10/45] remove ms-vision experiment --- plugins/microsoft/conf.sample.json | 29 ----- plugins/microsoft/shinobi-ms-vision.js | 170 ------------------------- 2 files changed, 199 deletions(-) delete mode 100644 plugins/microsoft/conf.sample.json delete mode 100644 plugins/microsoft/shinobi-ms-vision.js diff --git a/plugins/microsoft/conf.sample.json b/plugins/microsoft/conf.sample.json deleted file mode 100644 index 5f9b9dca..00000000 --- a/plugins/microsoft/conf.sample.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "plug":"ComputerVision", - "host":"localhost", - "port":8080, - "key":"UNIQUE KEY HERE", - "computerVision":{ - "apiKey":"YOUR_KEY", - "endpoint":"http://YOUR_ENDPOINT/analyze", - "params":{ - "visualFeatures": "Categories,Description,Color", - "details": "", - "language": "en" - } - }, - "EmotionAPI":{ - "apiKey":"YOUR_KEY", - "endpoint":"http://YOUR_ENDPOINT/recognize", - "params":{} - }, - "FaceAPI":{ - "apiKey":"YOUR_KEY", - "endpoint":"http://YOUR_ENDPOINT/detect", - "params":{ - "returnFaceId": "true", - "returnFaceLandmarks": "false", - "returnFaceAttributes": "age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise" - } - } -} \ No newline at end of file diff --git a/plugins/microsoft/shinobi-ms-vision.js b/plugins/microsoft/shinobi-ms-vision.js deleted file mode 100644 index 938e7874..00000000 --- a/plugins/microsoft/shinobi-ms-vision.js +++ /dev/null @@ -1,170 +0,0 @@ -// -// Shinobi - Microsoft Computer Vision Plugin -// Copyright (C) 2016-2025 Moe Alam, moeiscool -// -process.on('uncaughtException', function (err) { - console.error('uncaughtException',err); -}); -var fs=require('fs'); -var exec = require('child_process').exec; -//var http = require('http'); -var request = require('request'); -var moment = require('moment'); -var cognitive = require('cognitive-services'); -var config=require('./conf.json'); -if(config.systemLog===undefined){config.systemLog=true} -s={ - group:{}, - dir:{ - cascades:__dirname+'/cascades/' - }, - isWin:(process.platform==='win32') -} -//default stream folder check -if(!config.streamDir){ - if(s.isWin===false){ - config.streamDir='/dev/shm' - }else{ - config.streamDir=config.windowsTempDir - } - if(!fs.existsSync(config.streamDir)){ - config.streamDir=__dirname+'/streams/' - }else{ - config.streamDir+='/streams/' - } -} -s.dir.streams=config.streamDir; -//streams dir -if(!fs.existsSync(s.dir.streams)){ - fs.mkdirSync(s.dir.streams); -} -s.gid=function(x){ - if(!x){x=10};var t = "";var p = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - for( var i=0; i < x; i++ ) - t += p.charAt(Math.floor(Math.random() * p.length)); - return t; -}; -s.systemLog=function(q,w,e){ - if(!w){w=''} - if(!e){e=''} - if(config.systemLog===true){ - return console.log(moment().format(),q,w,e) - } -} -s.objectToParameter = function(obj){ - return Object.keys(obj).map(function(key) { - return key + '=' + encodeURIComponent(obj[key]); - }).join('&'); -} -s.sendImageToMS=function(sourceImageUrl,API,callback){ - var URL = API.endpoint+'?'+s.objectToParameter(API.params) - request(URL,{ - method: 'POST', - headers:{ - "Ocp-Apim-Subscription-Key":API.apiKey - }, - json: { - url:sourceImageUrl - } - }, callback) -} -s.detectObject=function(buffer,d){ - var sourceImageUrl = 'http://184.105.6.43/'+s.api_key+'/jpeg/'+d.ke+'/'+d.id+'/s.jpg' -// const client = new cognitive.computerVision({ -// apiKey: config.computerVision.apiKey, -// endpoint: config.computerVision.endpoint -// }); -// const parameters = { -// "visualFeatures": "Categories,Tags,Description", -// "details": "Celebrities,Landmarks" -// }; -// const headers = { -// 'Content-type': 'application/json' -// }; -// const body = { -// "url": sourceImageUrl -// }; -// -// client.analyzeImage({ -// parameters, -// headers, -// body -// }).then((response) => { -//// should(response).not.be.undefined(); -//// should(response).have.properties(["categories", "metadata", "requestId"]); -// console.log(response) -// }).catch((err) => { -// console.log('Error',err) -// }); - var responses = {} - s.sendImageToMS(sourceImageUrl,config.computerVision,function(err,resp,body1){ - responses.computerVisionURL = body1 - s.sendImageToMS(sourceImageUrl,config.FaceAPI,function(err,resp,body2){ - responses.faceApiURL = body2 - s.sendImageToMS(sourceImageUrl,config.EmotionAPI,function(err,resp,body3){ - responses.EmotionAPI = body3 - console.log('responses',JSON.stringify(responses,null,3)) - }) - }) - }) -} -s.makeMonitorObject=function(d){ - if(!s.group[d.ke]){ - s.group[d.ke]={} - } - if(!s.group[d.ke][d.id]){ - s.group[d.ke][d.id]={ - port:null, - countStarted:new Date() - } - } -} -io = require('socket.io-client')('ws://'+config.host+':'+config.port);//connect to master -s.cx=function(x){x.pluginKey=config.key;x.plug=config.plug;return io.emit('ocv',x)} -io.on('connect',function(d){ - s.cx({f:'init',plug:config.plug}); -}) -io.on('disconnect',function(d){ - io.connect() -}) -io.on('f',function(d){ - switch(d.f){ - case'api_key': - s.api_key=d.key - break; - case'init_monitor': - if(s.group[d.ke]&&s.group[d.ke][d.id]){ - s.group[d.ke][d.id].buffer=null - s.group[d.ke][d.id].countStarted=new Date() - } - s.makeMonitorObject(d) - break; - case'frame': - d.details={} - try{ - s.makeMonitorObject(d) - if(!s.group[d.ke][d.id].buffer){ - s.group[d.ke][d.id].buffer=[d.frame]; - }else{ - s.group[d.ke][d.id].buffer.push(d.frame) - } - if(d.frame[d.frame.length-2] === 0xFF && d.frame[d.frame.length-1] === 0xD9){ - if(d.mon.detector_frame_save==="1"){ - d.base64=s.group[d.ke][d.id].buffer.toString('base64') - } - if(d.mon.detector_scale_x&&d.mon.detector_scale_x!==''&&d.mon.detector_scale_y&&d.mon.detector_scale_y!==''){ - d.width=d.mon.detector_scale_x; - d.height=d.mon.detector_scale_y; - }else{ - d.width=640 - d.height=480 - } - s.detectObject(Buffer.concat(s.group[d.ke][d.id].buffer),d) - s.group[d.ke][d.id].buffer=null; - } - } catch(err){ - console.error(err) - } - break; - } -}) \ No newline at end of file From 8ef9e55f5815271e49f2b32144810ad066e54a6f Mon Sep 17 00:00:00 2001 From: Moe Date: Tue, 19 Jun 2018 23:11:56 -0700 Subject: [PATCH 11/45] change var to show tag in UI for coco dnn --- plugins/dnnCoco/shinobi-coco.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/dnnCoco/shinobi-coco.js b/plugins/dnnCoco/shinobi-coco.js index 6a0a88d5..0bb440cd 100644 --- a/plugins/dnnCoco/shinobi-coco.js +++ b/plugins/dnnCoco/shinobi-coco.js @@ -86,7 +86,7 @@ function classifyImg(img) { outputBlob = outputBlob.flattenFloat(outputBlob.sizes[2], outputBlob.sizes[3]); return extractResults(outputBlob, img) - .map(r => Object.assign({}, r.rect, { confidence : r.confidence, className: classNames[r.classLabel] })); + .map(r => Object.assign({}, r.rect, { confidence : r.confidence, tag: classNames[r.classLabel] })); } const makeDrawClassDetections = predictions => (drawImg, className, getColor, thickness = 2) => { From bfef5eecb08a90bccf8580f23efb08e710034d8f Mon Sep 17 00:00:00 2001 From: Moe Date: Wed, 20 Jun 2018 22:45:07 -0700 Subject: [PATCH 12/45] cron update/fix, limit video.delete queries to 1 row --- camera.js | 13 ++++++++---- cron.js | 62 ++++++++++++++++++++++++++++++++----------------------- 2 files changed, 45 insertions(+), 30 deletions(-) diff --git a/camera.js b/camera.js index 5ba6ad99..82e1df19 100644 --- a/camera.js +++ b/camera.js @@ -900,12 +900,16 @@ s.video=function(x,e,k){ }else{ time = e.time } + time = new Date(time) + if(config.databaseType !== 'sqlite'){ + time = moment(time).format('YYYY-MM-DD HH:mm:ss') + } e.save=[e.id,e.ke,time]; - s.sqlQuery('SELECT * FROM Videos WHERE `mid`=? AND `ke`=? AND `time`=?',e.save,function(err,r){ + s.sqlQuery('SELECT * FROM Videos WHERE `mid`=? AND `ke`=? AND `time`=? LIMIT 1',e.save,function(err,r){ if(r&&r[0]){ r=r[0] var dir=s.video('getDir',r) - s.sqlQuery('DELETE FROM Videos WHERE `mid`=? AND `ke`=? AND `time`=?',e.save,function(){ + s.sqlQuery('DELETE FROM Videos WHERE `mid`=? AND `ke`=? AND `time`=? LIMIT 1',e.save,function(){ fs.stat(dir+filename,function(err,file){ if(err){ s.systemLog('File Delete Error : '+e.ke+' : '+' : '+e.mid,err) @@ -916,7 +920,8 @@ s.video=function(x,e,k){ s.file('delete',dir+filename) }) }else{ - console.log(e) +// console.log('Delete Failed',e) +// console.error(err) } }) break; @@ -4425,7 +4430,7 @@ var tx; if(s.cron&&cn.id===s.cron.id){ delete(d.cronKey) switch(d.f){ - case'filters': + case'filters': s.filterEvents(d.ff,d); break; case's.tx': diff --git a/cron.js b/cron.js index bc72d945..c8ad615c 100644 --- a/cron.js +++ b/cron.js @@ -177,9 +177,9 @@ s.checkFilterRules=function(v,callback){ } //delete old videos with filter if(config.cron.deleteOld===true){ - v.d.filters.deleteOldByCron={ - "id":"deleteOldByCron", - "name":"deleteOldByCron", + v.d.filters.deleteOldVideosByCron={ + "id":"deleteOldVideosByCron", + "name":"deleteOldVideosByCron", "sort_by":"time", "sort_by_direction":"ASC", "limit":"", @@ -227,6 +227,9 @@ s.checkFilterRules=function(v,callback){ } s.sqlQuery('SELECT * FROM Videos '+b.sql,b.ar,function(err,r){ if(r&&r[0]){ + if(r.length > 0 || config.debugLog === true){ + s.cx({f:'filterMatch',msg:r.length+' SQL rows match "'+m+'"',ke:v.ke,time:moment()}) + } b.cx={ f:'filters', name:b.name, @@ -237,10 +240,8 @@ s.checkFilterRules=function(v,callback){ }; if(b.archive==="1"){ s.cx({f:'filters',ff:'archive',videos:r,time:moment(),ke:v.ke,id:b.id}); - }else{ - if(b.delete==="1"){ - s.cx({f:'filters',ff:'delete',videos:r,time:moment(),ke:v.ke,id:b.id}); - } + }else if(b.delete==="1"){ + s.cx({f:'filters',ff:'delete',videos:r,time:moment(),ke:v.ke,id:b.id}); } if(b.email==="1"){ b.cx.ff='email'; @@ -281,21 +282,30 @@ s.deleteRowsWithNoVideo=function(v,callback){ if(evs&&evs[0]){ es.del=[];es.ar=[v.ke]; evs.forEach(function(ev){ - var details = JSON.parse(ev.details) - var filename = ev.time - var dir = s.getVideoDirectory(ev)+s.moment(filename)+'.'+ev.ext; - var fileExists = fs.existsSync(dir) - if(details.isUTC === true){ - filename = s.localToUtc(filename).format('YYYY-MM-DDTHH-mm-ss') - dir = s.getVideoDirectory(ev)+filename+'.'+ev.ext; - fileExists = fs.existsSync(dir) + var filename + var details + try{ + details = JSON.parse(ev.details) + }catch(err){ + if(details instanceof Object){ + details = ev.details + }else{ + details = {} + } } + var dir = s.getVideoDirectory(ev) + if(details.isUTC === true){ + filename = s.localToUtc(ev.time).format('YYYY-MM-DDTHH-mm-ss')+'.'+ev.ext + }else{ + filename = s.moment(ev.time)+'.'+ev.ext + } + fileExists = fs.existsSync(dir+filename) if(fileExists !== true){ s.video('delete',ev) s.tx({f:'video_delete',filename:filename+'.'+ev.ext,mid:ev.mid,ke:ev.ke,time:ev.time,end:s.moment(new Date,'YYYY-MM-DD HH:mm:ss')},'GRP_'+ev.ke); } }); - if(es.del.length>0){ + if(es.del.length>0 || config.debugLog === true){ s.cx({f:'deleteNoVideo',msg:es.del.length+' SQL rows with no file deleted',ke:v.ke,time:moment()}) } } @@ -314,8 +324,8 @@ s.deleteOldLogs=function(v,callback){ s.sqlQuery("DELETE FROM Logs WHERE ke=? AND `time` < "+s.sqlDate('? DAYS'),[v.ke,v.d.log_days],function(err,rrr){ callback() if(err)return console.error(err); - if(rrr.affectedRows && rrr.affectedRows.length>0){ - s.cx({f:'deleteLogs',msg:rrr.affectedRows+' SQL rows older than '+v.d.log_days+' days deleted',ke:v.ke,time:moment()}) + if(rrr.affectedRows && rrr.affectedRows.length>0 || config.debugLog === true){ + s.cx({f:'deleteLogs',msg:(rrr.affectedRows || 0)+' SQL rows older than '+v.d.log_days+' days deleted',ke:v.ke,time:moment()}) } }) }else{ @@ -329,8 +339,8 @@ s.deleteOldEvents=function(v,callback){ s.sqlQuery("DELETE FROM Events WHERE ke=? AND `time` < "+s.sqlDate('? DAYS'),[v.ke,v.d.event_days],function(err,rrr){ callback() if(err)return console.error(err); - if(rrr.affectedRows && rrr.affectedRows.length>0){ - s.cx({f:'deleteEvents',msg:rrr.affectedRows+' SQL rows older than '+v.d.event_days+' days deleted',ke:v.ke,time:moment()}) + if(rrr.affectedRows && rrr.affectedRows.length>0 || config.debugLog === true){ + s.cx({f:'deleteEvents',msg:(rrr.affectedRows || 0)+' SQL rows older than '+v.d.event_days+' days deleted',ke:v.ke,time:moment()}) } }) }else{ @@ -354,8 +364,8 @@ s.deleteOldFileBins=function(v,callback){ s.sqlQuery("DELETE"+fileBinQuery,[v.ke,v.d.fileBin_days],function(err,rrr){ callback() if(err)return console.error(err); - if(rrr.affectedRows && rrr.affectedRows.length>0){ - s.cx({f:'deleteFileBins',msg:rrr.affectedRows+' files older than '+v.d.fileBin_days+' days deleted',ke:v.ke,time:moment()}) + if(rrr.affectedRows && rrr.affectedRows.length>0 || config.debugLog === true){ + s.cx({f:'deleteFileBins',msg:(rrr.affectedRows || 0)+' files older than '+v.d.fileBin_days+' days deleted',ke:v.ke,time:moment()}) } }) }else{ @@ -370,7 +380,7 @@ s.deleteOldFileBins=function(v,callback){ s.checkForOrphanedFiles=function(v,callback){ if(config.cron.deleteOrphans===true){ var finish=function(count){ - if(count>0){ + if(count>0 || config.debugLog === true){ s.cx({f:'deleteOrphanedFiles',msg:count+' SQL rows with no database row deleted',ke:v.ke,time:moment()}) } callback() @@ -449,9 +459,9 @@ s.processUser = function(number,rows){ rr.forEach(function(b,m){ b.details=JSON.parse(b.details); if(b.details.max_keep_days&&b.details.max_keep_days!==''){ - v.d.filters['deleteOldByCron'+b.mid]={ - "id":'deleteOldByCron'+b.mid, - "name":'deleteOldByCron'+b.mid, + v.d.filters['deleteOldVideosByCron'+b.mid]={ + "id":'deleteOldVideosByCron'+b.mid, + "name":'deleteOldVideosByCron'+b.mid, "sort_by":"time", "sort_by_direction":"ASC", "limit":"", From f8dee8ab232997efc4070971cd06c6d34aef3218 Mon Sep 17 00:00:00 2001 From: Moe Date: Fri, 22 Jun 2018 20:17:40 -0700 Subject: [PATCH 13/45] return url base to blank string rather than location.pathname --- web/libs/js/main.dash2.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/libs/js/main.dash2.js b/web/libs/js/main.dash2.js index fa942a46..6cb5979f 100644 --- a/web/libs/js/main.dash2.js +++ b/web/libs/js/main.dash2.js @@ -155,7 +155,7 @@ switch($user.details.lang){ url=url+'/' } }else{ - url=location.pathname + url = '' } return url break; From acabbb81e317b7b2ea4176c1c51a651865a69dee Mon Sep 17 00:00:00 2001 From: Moe Date: Tue, 26 Jun 2018 17:59:21 -0700 Subject: [PATCH 14/45] Superuser panel redesign 0.1 --- web/libs/css/bootstrap4.min.css | 8468 +++++++++++++++++ web/libs/css/main.dash2.css | 7 + web/libs/css/now-ui-kit.css | 7545 +++++++++++++++ web/libs/fonts/nucleo-outline.eot | Bin 0 -> 30528 bytes web/libs/fonts/nucleo-outline.ttf | Bin 0 -> 30352 bytes web/libs/fonts/nucleo-outline.woff | Bin 0 -> 18056 bytes web/libs/fonts/nucleo-outline.woff2 | Bin 0 -> 15364 bytes web/libs/js/bootstrap4.min.js | 1586 +++ web/libs/js/now-ui-kit.js | 220 + web/libs/js/popper.min.js | 834 ++ web/libs/sass/now-ui-kit.scss | 57 + web/libs/sass/now-ui-kit/_alerts.scss | 54 + web/libs/sass/now-ui-kit/_badges.scss | 39 + web/libs/sass/now-ui-kit/_buttons.scss | 158 + web/libs/sass/now-ui-kit/_cards.scss | 98 + web/libs/sass/now-ui-kit/_carousel.scss | 15 + .../sass/now-ui-kit/_checkboxes-radio.scss | 178 + web/libs/sass/now-ui-kit/_dropdown.scss | 106 + web/libs/sass/now-ui-kit/_example-pages.scss | 256 + web/libs/sass/now-ui-kit/_footers.scss | 44 + web/libs/sass/now-ui-kit/_images.scss | 7 + web/libs/sass/now-ui-kit/_inputs.scss | 264 + web/libs/sass/now-ui-kit/_misc.scss | 63 + web/libs/sass/now-ui-kit/_mixins.scss | 14 + web/libs/sass/now-ui-kit/_modals.scss | 173 + web/libs/sass/now-ui-kit/_navbar.scss | 193 + web/libs/sass/now-ui-kit/_nucleo-outline.scss | 533 ++ web/libs/sass/now-ui-kit/_pagination.scss | 136 + web/libs/sass/now-ui-kit/_pills.scss | 131 + web/libs/sass/now-ui-kit/_popups.scss | 85 + web/libs/sass/now-ui-kit/_progress.scss | 126 + web/libs/sass/now-ui-kit/_responsive.scss | 392 + web/libs/sass/now-ui-kit/_sections.scss | 396 + web/libs/sass/now-ui-kit/_social-buttons.scss | 39 + web/libs/sass/now-ui-kit/_tabs.scss | 110 + web/libs/sass/now-ui-kit/_typography.scss | 158 + web/libs/sass/now-ui-kit/_variables.scss | 254 + web/libs/sass/now-ui-kit/mixins/_badges.scss | 4 + web/libs/sass/now-ui-kit/mixins/_buttons.scss | 160 + .../sass/now-ui-kit/mixins/_datepicker.scss | 121 + .../sass/now-ui-kit/mixins/_dropdown.scss | 24 + web/libs/sass/now-ui-kit/mixins/_inputs.scss | 205 + web/libs/sass/now-ui-kit/mixins/_modals.scss | 12 + web/libs/sass/now-ui-kit/mixins/_navbar.scss | 226 + web/libs/sass/now-ui-kit/mixins/_pages.scss | 7 + .../sass/now-ui-kit/mixins/_popovers.scss | 29 + .../sass/now-ui-kit/mixins/_transparency.scss | 8 + .../now-ui-kit/mixins/_vendor-prefixes.scss | 160 + .../plugins/_plugin-bootstrap-switch.scss | 304 + .../plugins/_plugin-datepicker.scss | 520 + .../plugins/_plugin-nouislider.scss | 351 + web/pages/blocks/header-favicon.ejs | 12 + web/pages/blocks/header-meta.ejs | 5 + web/pages/blocks/header.ejs | 19 +- web/pages/blocks/mainpermissions.ejs | 17 +- web/pages/super.ejs | 396 +- 56 files changed, 25187 insertions(+), 132 deletions(-) create mode 100644 web/libs/css/bootstrap4.min.css create mode 100644 web/libs/css/now-ui-kit.css create mode 100644 web/libs/fonts/nucleo-outline.eot create mode 100644 web/libs/fonts/nucleo-outline.ttf create mode 100644 web/libs/fonts/nucleo-outline.woff create mode 100644 web/libs/fonts/nucleo-outline.woff2 create mode 100644 web/libs/js/bootstrap4.min.js create mode 100644 web/libs/js/now-ui-kit.js create mode 100644 web/libs/js/popper.min.js create mode 100644 web/libs/sass/now-ui-kit.scss create mode 100644 web/libs/sass/now-ui-kit/_alerts.scss create mode 100644 web/libs/sass/now-ui-kit/_badges.scss create mode 100644 web/libs/sass/now-ui-kit/_buttons.scss create mode 100644 web/libs/sass/now-ui-kit/_cards.scss create mode 100644 web/libs/sass/now-ui-kit/_carousel.scss create mode 100644 web/libs/sass/now-ui-kit/_checkboxes-radio.scss create mode 100644 web/libs/sass/now-ui-kit/_dropdown.scss create mode 100644 web/libs/sass/now-ui-kit/_example-pages.scss create mode 100644 web/libs/sass/now-ui-kit/_footers.scss create mode 100644 web/libs/sass/now-ui-kit/_images.scss create mode 100644 web/libs/sass/now-ui-kit/_inputs.scss create mode 100644 web/libs/sass/now-ui-kit/_misc.scss create mode 100644 web/libs/sass/now-ui-kit/_mixins.scss create mode 100644 web/libs/sass/now-ui-kit/_modals.scss create mode 100644 web/libs/sass/now-ui-kit/_navbar.scss create mode 100644 web/libs/sass/now-ui-kit/_nucleo-outline.scss create mode 100644 web/libs/sass/now-ui-kit/_pagination.scss create mode 100644 web/libs/sass/now-ui-kit/_pills.scss create mode 100644 web/libs/sass/now-ui-kit/_popups.scss create mode 100644 web/libs/sass/now-ui-kit/_progress.scss create mode 100644 web/libs/sass/now-ui-kit/_responsive.scss create mode 100644 web/libs/sass/now-ui-kit/_sections.scss create mode 100644 web/libs/sass/now-ui-kit/_social-buttons.scss create mode 100644 web/libs/sass/now-ui-kit/_tabs.scss create mode 100644 web/libs/sass/now-ui-kit/_typography.scss create mode 100644 web/libs/sass/now-ui-kit/_variables.scss create mode 100644 web/libs/sass/now-ui-kit/mixins/_badges.scss create mode 100644 web/libs/sass/now-ui-kit/mixins/_buttons.scss create mode 100644 web/libs/sass/now-ui-kit/mixins/_datepicker.scss create mode 100644 web/libs/sass/now-ui-kit/mixins/_dropdown.scss create mode 100644 web/libs/sass/now-ui-kit/mixins/_inputs.scss create mode 100644 web/libs/sass/now-ui-kit/mixins/_modals.scss create mode 100644 web/libs/sass/now-ui-kit/mixins/_navbar.scss create mode 100644 web/libs/sass/now-ui-kit/mixins/_pages.scss create mode 100644 web/libs/sass/now-ui-kit/mixins/_popovers.scss create mode 100644 web/libs/sass/now-ui-kit/mixins/_transparency.scss create mode 100644 web/libs/sass/now-ui-kit/mixins/_vendor-prefixes.scss create mode 100644 web/libs/sass/now-ui-kit/plugins/_plugin-bootstrap-switch.scss create mode 100644 web/libs/sass/now-ui-kit/plugins/_plugin-datepicker.scss create mode 100644 web/libs/sass/now-ui-kit/plugins/_plugin-nouislider.scss create mode 100644 web/pages/blocks/header-favicon.ejs create mode 100644 web/pages/blocks/header-meta.ejs diff --git a/web/libs/css/bootstrap4.min.css b/web/libs/css/bootstrap4.min.css new file mode 100644 index 00000000..e66b07a9 --- /dev/null +++ b/web/libs/css/bootstrap4.min.css @@ -0,0 +1,8468 @@ +/*! + * Bootstrap v4.0.0-beta (https://getbootstrap.com) + * Copyright 2011-2017 The Bootstrap Authors + * Copyright 2011-2017 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +@media print { + *, + ::after, + ::before { + text-shadow: none!important; + box-shadow: none!important + } + a, + a:visited { + text-decoration: underline + } + abbr[title]::after { + content: " (" attr(title) ")" + } + pre { + white-space: pre-wrap!important + } + blockquote, + pre { + border: 1px solid #999; + page-break-inside: avoid + } + thead { + display: table-header-group + } + img, + tr { + page-break-inside: avoid + } + h2, + h3, + p { + orphans: 3; + widows: 3 + } + h2, + h3 { + page-break-after: avoid + } + .navbar { + display: none + } + .badge { + border: 1px solid #000 + } + .table { + border-collapse: collapse!important + } + .table td, + .table th { + background-color: #fff!important + } + .table-bordered td, + .table-bordered th { + border: 1px solid #ddd!important + } +} + +html { + box-sizing: border-box; + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: transparent +} + +*, +::after, +::before { + box-sizing: inherit +} + +@-ms-viewport { + width: device-width +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block +} + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff +} + +[tabindex="-1"]:focus { + outline: 0!important +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: .5rem +} + +p { + margin-top: 0; + margin-bottom: 1rem +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0 +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1rem +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0 +} + +dt { + font-weight: 700 +} + +dd { + margin-bottom: .5rem; + margin-left: 0 +} + +blockquote { + margin: 0 0 1rem +} + +dfn { + font-style: italic +} + +b, +strong { + font-weight: bolder +} + +small { + font-size: 80% +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline +} + +sub { + bottom: -.25em +} + +sup { + top: -.5em +} + +a { + color: #007bff; + text-decoration: none; + background-color: transparent; + -webkit-text-decoration-skip: objects +} + +a:hover { + color: #0056b3; + text-decoration: underline +} + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none +} + +a:not([href]):not([tabindex]):focus, +a:not([href]):not([tabindex]):hover { + color: inherit; + text-decoration: none +} + +a:not([href]):not([tabindex]):focus { + outline: 0 +} + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto +} + +figure { + margin: 0 0 1rem +} + +img { + vertical-align: middle; + border-style: none +} + +svg:not(:root) { + overflow: hidden +} + +[role=button], +a, +area, +button, +input, +label, +select, +summary, +textarea { + -ms-touch-action: manipulation; + touch-action: manipulation +} + +table { + border-collapse: collapse +} + +caption { + padding-top: .75rem; + padding-bottom: .75rem; + color: #868e96; + text-align: left; + caption-side: bottom +} + +th { + text-align: left +} + +label { + display: inline-block; + margin-bottom: .5rem +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit +} + +button, +input { + overflow: visible +} + +button, +select { + text-transform: none +} + +[type=reset], +[type=submit], +button, +html [type=button] { + -webkit-appearance: button +} + +[type=button]::-moz-focus-inner, +[type=reset]::-moz-focus-inner, +[type=submit]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none +} + +input[type=checkbox], +input[type=radio] { + box-sizing: border-box; + padding: 0 +} + +input[type=date], +input[type=datetime-local], +input[type=month], +input[type=time] { + -webkit-appearance: listbox +} + +textarea { + overflow: auto; + resize: vertical +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0 +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal +} + +progress { + vertical-align: baseline +} + +[type=number]::-webkit-inner-spin-button, +[type=number]::-webkit-outer-spin-button { + height: auto +} + +[type=search] { + outline-offset: -2px; + -webkit-appearance: none +} + +[type=search]::-webkit-search-cancel-button, +[type=search]::-webkit-search-decoration { + -webkit-appearance: none +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button +} + +output { + display: inline-block +} + +summary { + display: list-item +} + +template { + display: none +} + +[hidden] { + display: none!important +} + +.h1, +.h2, +.h3, +.h4, +.h5, +.h6, +h1, +h2, +h3, +h4, +h5, +h6 { + margin-bottom: .5rem; + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit +} + +.h1, +h1 { + font-size: 2.5rem +} + +.h2, +h2 { + font-size: 2rem +} + +.h3, +h3 { + font-size: 1.75rem +} + +.h4, +h4 { + font-size: 1.5rem +} + +.h5, +h5 { + font-size: 1.25rem +} + +.h6, +h6 { + font-size: 1rem +} + +.lead { + font-size: 1.25rem; + font-weight: 300 +} + +.display-1 { + font-size: 6rem; + font-weight: 300; + line-height: 1.1 +} + +.display-2 { + font-size: 5.5rem; + font-weight: 300; + line-height: 1.1 +} + +.display-3 { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.1 +} + +.display-4 { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.1 +} + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, .1) +} + +.small, +small { + font-size: 80%; + font-weight: 400 +} + +.mark, +mark { + padding: .2em; + background-color: #fcf8e3 +} + +.list-unstyled { + padding-left: 0; + list-style: none +} + +.list-inline { + padding-left: 0; + list-style: none +} + +.list-inline-item { + display: inline-block +} + +.list-inline-item:not(:last-child) { + margin-right: 5px +} + +.initialism { + font-size: 90%; + text-transform: uppercase +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem +} + +.blockquote-footer { + display: block; + font-size: 80%; + color: #868e96 +} + +.blockquote-footer::before { + content: "\2014 \00A0" +} + +.img-fluid { + max-width: 100%; + height: auto +} + +.img-thumbnail { + padding: .25rem; + background-color: #fff; + border: 1px solid #ddd; + border-radius: .25rem; + transition: all .2s ease-in-out; + max-width: 100%; + height: auto +} + +.figure { + display: inline-block +} + +.figure-img { + margin-bottom: .5rem; + line-height: 1 +} + +.figure-caption { + font-size: 90%; + color: #868e96 +} + +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace +} + +code { + padding: .2rem .4rem; + font-size: 90%; + color: #bd4147; + background-color: #f8f9fa; + border-radius: .25rem +} + +a>code { + padding: 0; + color: inherit; + background-color: inherit +} + +kbd { + padding: .2rem .4rem; + font-size: 90%; + color: #fff; + background-color: #212529; + border-radius: .2rem +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700 +} + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + font-size: 90%; + color: #212529 +} + +pre code { + padding: 0; + font-size: inherit; + color: inherit; + background-color: transparent; + border-radius: 0 +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll +} + +.container { + margin-right: auto; + margin-left: auto; + padding-right: 15px; + padding-left: 15px; + width: 100% +} + +@media (min-width:576px) { + .container { + max-width: 540px + } +} + +@media (min-width:768px) { + .container { + max-width: 720px + } +} + +@media (min-width:992px) { + .container { + max-width: 960px + } +} + +@media (min-width:1200px) { + .container { + max-width: 1140px + } +} + +.container-fluid { + width: 100%; + margin-right: auto; + margin-left: auto; + padding-right: 15px; + padding-left: 15px; + width: 100% +} + +.row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px +} + +.no-gutters { + margin-right: 0; + margin-left: 0 +} + +.no-gutters>.col, +.no-gutters>[class*=col-] { + padding-right: 0; + padding-left: 0 +} + +.col, +.col-1, +.col-10, +.col-11, +.col-12, +.col-2, +.col-3, +.col-4, +.col-5, +.col-6, +.col-7, +.col-8, +.col-9, +.col-auto, +.col-lg, +.col-lg-1, +.col-lg-10, +.col-lg-11, +.col-lg-12, +.col-lg-2, +.col-lg-3, +.col-lg-4, +.col-lg-5, +.col-lg-6, +.col-lg-7, +.col-lg-8, +.col-lg-9, +.col-lg-auto, +.col-md, +.col-md-1, +.col-md-10, +.col-md-11, +.col-md-12, +.col-md-2, +.col-md-3, +.col-md-4, +.col-md-5, +.col-md-6, +.col-md-7, +.col-md-8, +.col-md-9, +.col-md-auto, +.col-sm, +.col-sm-1, +.col-sm-10, +.col-sm-11, +.col-sm-12, +.col-sm-2, +.col-sm-3, +.col-sm-4, +.col-sm-5, +.col-sm-6, +.col-sm-7, +.col-sm-8, +.col-sm-9, +.col-sm-auto, +.col-xl, +.col-xl-1, +.col-xl-10, +.col-xl-11, +.col-xl-12, +.col-xl-2, +.col-xl-3, +.col-xl-4, +.col-xl-5, +.col-xl-6, +.col-xl-7, +.col-xl-8, +.col-xl-9, +.col-xl-auto { + position: relative; + width: 100%; + min-height: 1px; + padding-right: 15px; + padding-left: 15px +} + +.col { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100% +} + +.col-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none +} + +.col-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333% +} + +.col-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667% +} + +.col-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25% +} + +.col-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333% +} + +.col-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667% +} + +.col-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50% +} + +.col-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333% +} + +.col-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667% +} + +.col-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75% +} + +.col-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333% +} + +.col-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667% +} + +.col-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100% +} + +.order-1 { + -ms-flex-order: 1; + order: 1 +} + +.order-2 { + -ms-flex-order: 2; + order: 2 +} + +.order-3 { + -ms-flex-order: 3; + order: 3 +} + +.order-4 { + -ms-flex-order: 4; + order: 4 +} + +.order-5 { + -ms-flex-order: 5; + order: 5 +} + +.order-6 { + -ms-flex-order: 6; + order: 6 +} + +.order-7 { + -ms-flex-order: 7; + order: 7 +} + +.order-8 { + -ms-flex-order: 8; + order: 8 +} + +.order-9 { + -ms-flex-order: 9; + order: 9 +} + +.order-10 { + -ms-flex-order: 10; + order: 10 +} + +.order-11 { + -ms-flex-order: 11; + order: 11 +} + +.order-12 { + -ms-flex-order: 12; + order: 12 +} + +@media (min-width:576px) { + .col-sm { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100% + } + .col-sm-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none + } + .col-sm-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333% + } + .col-sm-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667% + } + .col-sm-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25% + } + .col-sm-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333% + } + .col-sm-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667% + } + .col-sm-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50% + } + .col-sm-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333% + } + .col-sm-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667% + } + .col-sm-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75% + } + .col-sm-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333% + } + .col-sm-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667% + } + .col-sm-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100% + } + .order-sm-1 { + -ms-flex-order: 1; + order: 1 + } + .order-sm-2 { + -ms-flex-order: 2; + order: 2 + } + .order-sm-3 { + -ms-flex-order: 3; + order: 3 + } + .order-sm-4 { + -ms-flex-order: 4; + order: 4 + } + .order-sm-5 { + -ms-flex-order: 5; + order: 5 + } + .order-sm-6 { + -ms-flex-order: 6; + order: 6 + } + .order-sm-7 { + -ms-flex-order: 7; + order: 7 + } + .order-sm-8 { + -ms-flex-order: 8; + order: 8 + } + .order-sm-9 { + -ms-flex-order: 9; + order: 9 + } + .order-sm-10 { + -ms-flex-order: 10; + order: 10 + } + .order-sm-11 { + -ms-flex-order: 11; + order: 11 + } + .order-sm-12 { + -ms-flex-order: 12; + order: 12 + } +} + +@media (min-width:768px) { + .col-md { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100% + } + .col-md-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none + } + .col-md-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333% + } + .col-md-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667% + } + .col-md-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25% + } + .col-md-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333% + } + .col-md-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667% + } + .col-md-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50% + } + .col-md-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333% + } + .col-md-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667% + } + .col-md-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75% + } + .col-md-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333% + } + .col-md-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667% + } + .col-md-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100% + } + .order-md-1 { + -ms-flex-order: 1; + order: 1 + } + .order-md-2 { + -ms-flex-order: 2; + order: 2 + } + .order-md-3 { + -ms-flex-order: 3; + order: 3 + } + .order-md-4 { + -ms-flex-order: 4; + order: 4 + } + .order-md-5 { + -ms-flex-order: 5; + order: 5 + } + .order-md-6 { + -ms-flex-order: 6; + order: 6 + } + .order-md-7 { + -ms-flex-order: 7; + order: 7 + } + .order-md-8 { + -ms-flex-order: 8; + order: 8 + } + .order-md-9 { + -ms-flex-order: 9; + order: 9 + } + .order-md-10 { + -ms-flex-order: 10; + order: 10 + } + .order-md-11 { + -ms-flex-order: 11; + order: 11 + } + .order-md-12 { + -ms-flex-order: 12; + order: 12 + } +} + +@media (min-width:992px) { + .col-lg { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100% + } + .col-lg-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none + } + .col-lg-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333% + } + .col-lg-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667% + } + .col-lg-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25% + } + .col-lg-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333% + } + .col-lg-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667% + } + .col-lg-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50% + } + .col-lg-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333% + } + .col-lg-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667% + } + .col-lg-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75% + } + .col-lg-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333% + } + .col-lg-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667% + } + .col-lg-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100% + } + .order-lg-1 { + -ms-flex-order: 1; + order: 1 + } + .order-lg-2 { + -ms-flex-order: 2; + order: 2 + } + .order-lg-3 { + -ms-flex-order: 3; + order: 3 + } + .order-lg-4 { + -ms-flex-order: 4; + order: 4 + } + .order-lg-5 { + -ms-flex-order: 5; + order: 5 + } + .order-lg-6 { + -ms-flex-order: 6; + order: 6 + } + .order-lg-7 { + -ms-flex-order: 7; + order: 7 + } + .order-lg-8 { + -ms-flex-order: 8; + order: 8 + } + .order-lg-9 { + -ms-flex-order: 9; + order: 9 + } + .order-lg-10 { + -ms-flex-order: 10; + order: 10 + } + .order-lg-11 { + -ms-flex-order: 11; + order: 11 + } + .order-lg-12 { + -ms-flex-order: 12; + order: 12 + } +} + +@media (min-width:1200px) { + .col-xl { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100% + } + .col-xl-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none + } + .col-xl-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333% + } + .col-xl-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667% + } + .col-xl-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25% + } + .col-xl-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333% + } + .col-xl-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667% + } + .col-xl-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50% + } + .col-xl-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333% + } + .col-xl-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667% + } + .col-xl-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75% + } + .col-xl-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333% + } + .col-xl-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667% + } + .col-xl-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100% + } + .order-xl-1 { + -ms-flex-order: 1; + order: 1 + } + .order-xl-2 { + -ms-flex-order: 2; + order: 2 + } + .order-xl-3 { + -ms-flex-order: 3; + order: 3 + } + .order-xl-4 { + -ms-flex-order: 4; + order: 4 + } + .order-xl-5 { + -ms-flex-order: 5; + order: 5 + } + .order-xl-6 { + -ms-flex-order: 6; + order: 6 + } + .order-xl-7 { + -ms-flex-order: 7; + order: 7 + } + .order-xl-8 { + -ms-flex-order: 8; + order: 8 + } + .order-xl-9 { + -ms-flex-order: 9; + order: 9 + } + .order-xl-10 { + -ms-flex-order: 10; + order: 10 + } + .order-xl-11 { + -ms-flex-order: 11; + order: 11 + } + .order-xl-12 { + -ms-flex-order: 12; + order: 12 + } +} + +.table { + width: 100%; + max-width: 100%; + margin-bottom: 1rem; + background-color: transparent +} + +.table td, +.table th { + padding: .75rem; + vertical-align: top; + border-top: 1px solid #e9ecef +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid #e9ecef +} + +.table tbody+tbody { + border-top: 2px solid #e9ecef +} + +.table .table { + background-color: #fff +} + +.table-sm td, +.table-sm th { + padding: .3rem +} + +.table-bordered { + border: 1px solid #e9ecef +} + +.table-bordered td, +.table-bordered th { + border: 1px solid #e9ecef +} + +.table-bordered thead td, +.table-bordered thead th { + border-bottom-width: 2px +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, .05) +} + +.table-hover tbody tr:hover { + background-color: rgba(0, 0, 0, .075) +} + +.table-primary, +.table-primary>td, +.table-primary>th { + background-color: #b8daff +} + +.table-hover .table-primary:hover { + background-color: #9fcdff +} + +.table-hover .table-primary:hover>td, +.table-hover .table-primary:hover>th { + background-color: #9fcdff +} + +.table-secondary, +.table-secondary>td, +.table-secondary>th { + background-color: #dddfe2 +} + +.table-hover .table-secondary:hover { + background-color: #cfd2d6 +} + +.table-hover .table-secondary:hover>td, +.table-hover .table-secondary:hover>th { + background-color: #cfd2d6 +} + +.table-success, +.table-success>td, +.table-success>th { + background-color: #c3e6cb +} + +.table-hover .table-success:hover { + background-color: #b1dfbb +} + +.table-hover .table-success:hover>td, +.table-hover .table-success:hover>th { + background-color: #b1dfbb +} + +.table-info, +.table-info>td, +.table-info>th { + background-color: #bee5eb +} + +.table-hover .table-info:hover { + background-color: #abdde5 +} + +.table-hover .table-info:hover>td, +.table-hover .table-info:hover>th { + background-color: #abdde5 +} + +.table-warning, +.table-warning>td, +.table-warning>th { + background-color: #ffeeba +} + +.table-hover .table-warning:hover { + background-color: #ffe8a1 +} + +.table-hover .table-warning:hover>td, +.table-hover .table-warning:hover>th { + background-color: #ffe8a1 +} + +.table-danger, +.table-danger>td, +.table-danger>th { + background-color: #f5c6cb +} + +.table-hover .table-danger:hover { + background-color: #f1b0b7 +} + +.table-hover .table-danger:hover>td, +.table-hover .table-danger:hover>th { + background-color: #f1b0b7 +} + +.table-light, +.table-light>td, +.table-light>th { + background-color: #fdfdfe +} + +.table-hover .table-light:hover { + background-color: #ececf6 +} + +.table-hover .table-light:hover>td, +.table-hover .table-light:hover>th { + background-color: #ececf6 +} + +.table-dark, +.table-dark>td, +.table-dark>th { + background-color: #c6c8ca +} + +.table-hover .table-dark:hover { + background-color: #b9bbbe +} + +.table-hover .table-dark:hover>td, +.table-hover .table-dark:hover>th { + background-color: #b9bbbe +} + +.table-active, +.table-active>td, +.table-active>th { + background-color: rgba(0, 0, 0, .075) +} + +.table-hover .table-active:hover { + background-color: rgba(0, 0, 0, .075) +} + +.table-hover .table-active:hover>td, +.table-hover .table-active:hover>th { + background-color: rgba(0, 0, 0, .075) +} + +.thead-inverse th { + color: #fff; + background-color: #212529 +} + +.thead-default th { + color: #495057; + background-color: #e9ecef +} + +.table-inverse { + color: #fff; + background-color: #212529 +} + +.table-inverse td, +.table-inverse th, +.table-inverse thead th { + border-color: #32383e +} + +.table-inverse.table-bordered { + border: 0 +} + +.table-inverse.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, .05) +} + +.table-inverse.table-hover tbody tr:hover { + background-color: rgba(255, 255, 255, .075) +} + +@media (max-width:991px) { + .table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -ms-overflow-style: -ms-autohiding-scrollbar + } + .table-responsive.table-bordered { + border: 0 + } +} + +.form-control { + display: block; + width: 100%; + padding: .5rem .75rem; + font-size: 1rem; + line-height: 1.25; + color: #495057; + background-color: #fff; + background-image: none; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: .25rem; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s +} + +.form-control::-ms-expand { + background-color: transparent; + border: 0 +} + +.form-control:focus { + color: #495057; + background-color: #fff; + border-color: #80bdff; + outline: 0 +} + +.form-control::-webkit-input-placeholder { + color: #868e96; + opacity: 1 +} + +.form-control:-ms-input-placeholder { + color: #868e96; + opacity: 1 +} + +.form-control::placeholder { + color: #868e96; + opacity: 1 +} + +.form-control:disabled, +.form-control[readonly] { + background-color: #e9ecef; + opacity: 1 +} + +select.form-control:not([size]):not([multiple]) { + height: calc(2.25rem + 2px) +} + +select.form-control:focus::-ms-value { + color: #495057; + background-color: #fff +} + +.form-control-file, +.form-control-range { + display: block +} + +.col-form-label { + padding-top: calc(.5rem - 1px * 2); + padding-bottom: calc(.5rem - 1px * 2); + margin-bottom: 0 +} + +.col-form-label-lg { + padding-top: calc(.5rem - 1px * 2); + padding-bottom: calc(.5rem - 1px * 2); + font-size: 1.25rem +} + +.col-form-label-sm { + padding-top: calc(.25rem - 1px * 2); + padding-bottom: calc(.25rem - 1px * 2); + font-size: .875rem +} + +.col-form-legend { + padding-top: .5rem; + padding-bottom: .5rem; + margin-bottom: 0; + font-size: 1rem +} + +.form-control-plaintext { + padding-top: .5rem; + padding-bottom: .5rem; + margin-bottom: 0; + line-height: 1.25; + border: solid transparent; + border-width: 1px 0 +} + +.form-control-plaintext.form-control-lg, +.form-control-plaintext.form-control-sm, +.input-group-lg>.form-control-plaintext.form-control, +.input-group-lg>.form-control-plaintext.input-group-addon, +.input-group-lg>.input-group-btn>.form-control-plaintext.btn, +.input-group-sm>.form-control-plaintext.form-control, +.input-group-sm>.form-control-plaintext.input-group-addon, +.input-group-sm>.input-group-btn>.form-control-plaintext.btn { + padding-right: 0; + padding-left: 0 +} + +.form-control-sm, +.input-group-sm>.form-control, +.input-group-sm>.input-group-addon, +.input-group-sm>.input-group-btn>.btn { + padding: .25rem .5rem; + font-size: .875rem; + line-height: 1.5; + border-radius: .2rem +} + +.input-group-sm>.input-group-btn>select.btn:not([size]):not([multiple]), +.input-group-sm>select.form-control:not([size]):not([multiple]), +.input-group-sm>select.input-group-addon:not([size]):not([multiple]), +select.form-control-sm:not([size]):not([multiple]) { + height: calc(1.8125rem + 2px) +} + +.form-control-lg, +.input-group-lg>.form-control, +.input-group-lg>.input-group-addon, +.input-group-lg>.input-group-btn>.btn { + padding: .5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: .3rem +} + +.input-group-lg>.input-group-btn>select.btn:not([size]):not([multiple]), +.input-group-lg>select.form-control:not([size]):not([multiple]), +.input-group-lg>select.input-group-addon:not([size]):not([multiple]), +select.form-control-lg:not([size]):not([multiple]) { + height: calc(2.3125rem + 2px) +} + +.form-group { + margin-bottom: 1rem +} + +.form-text { + display: block; + margin-top: .25rem +} + +.form-row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -5px; + margin-left: -5px +} + +.form-row>.col, +.form-row>[class*=col-] { + padding-right: 5px; + padding-left: 5px +} + +.form-check { + position: relative; + display: block; + margin-bottom: .5rem +} + +.form-check.disabled .form-check-label { + color: #868e96 +} + +.form-check-label { + padding-left: 1.25rem; + margin-bottom: 0 +} + +.form-check-input { + position: absolute; + margin-top: .25rem; + margin-left: -1.25rem +} + +.form-check-input:only-child { + position: static +} + +.form-check-inline { + display: inline-block +} + +.form-check-inline .form-check-label { + vertical-align: middle +} + +.form-check-inline+.form-check-inline { + margin-left: .75rem +} + +.invalid-feedback { + display: none; + margin-top: .25rem; + font-size: .875rem; + color: #dc3545 +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + width: 250px; + padding: .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1; + color: #fff; + background-color: rgba(220, 53, 69, .8); + border-radius: .2rem +} + +.custom-select.is-valid, +.form-control.is-valid, +.was-validated .custom-select:valid, +.was-validated .form-control:valid { + border-color: #28a745 +} + +.custom-select.is-valid:focus, +.form-control.is-valid:focus, +.was-validated .custom-select:valid:focus, +.was-validated .form-control:valid:focus { + box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) +} + +.custom-select.is-valid~.invalid-feedback, +.custom-select.is-valid~.invalid-tooltip, +.form-control.is-valid~.invalid-feedback, +.form-control.is-valid~.invalid-tooltip, +.was-validated .custom-select:valid~.invalid-feedback, +.was-validated .custom-select:valid~.invalid-tooltip, +.was-validated .form-control:valid~.invalid-feedback, +.was-validated .form-control:valid~.invalid-tooltip { + display: block +} + +.form-check-input.is-valid+.form-check-label, +.was-validated .form-check-input:valid+.form-check-label { + color: #28a745 +} + +.custom-control-input.is-valid~.custom-control-indicator, +.was-validated .custom-control-input:valid~.custom-control-indicator { + background-color: rgba(40, 167, 69, .25) +} + +.custom-control-input.is-valid~.custom-control-description, +.was-validated .custom-control-input:valid~.custom-control-description { + color: #28a745 +} + +.custom-file-input.is-valid~.custom-file-control, +.was-validated .custom-file-input:valid~.custom-file-control { + border-color: #28a745 +} + +.custom-file-input.is-valid~.custom-file-control::before, +.was-validated .custom-file-input:valid~.custom-file-control::before { + border-color: inherit +} + +.custom-file-input.is-valid:focus, +.was-validated .custom-file-input:valid:focus { + box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) +} + +.custom-select.is-invalid, +.form-control.is-invalid, +.was-validated .custom-select:invalid, +.was-validated .form-control:invalid { + border-color: #dc3545 +} + +.custom-select.is-invalid:focus, +.form-control.is-invalid:focus, +.was-validated .custom-select:invalid:focus, +.was-validated .form-control:invalid:focus { + box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) +} + +.custom-select.is-invalid~.invalid-feedback, +.custom-select.is-invalid~.invalid-tooltip, +.form-control.is-invalid~.invalid-feedback, +.form-control.is-invalid~.invalid-tooltip, +.was-validated .custom-select:invalid~.invalid-feedback, +.was-validated .custom-select:invalid~.invalid-tooltip, +.was-validated .form-control:invalid~.invalid-feedback, +.was-validated .form-control:invalid~.invalid-tooltip { + display: block +} + +.form-check-input.is-invalid+.form-check-label, +.was-validated .form-check-input:invalid+.form-check-label { + color: #dc3545 +} + +.custom-control-input.is-invalid~.custom-control-indicator, +.was-validated .custom-control-input:invalid~.custom-control-indicator { + background-color: rgba(220, 53, 69, .25) +} + +.custom-control-input.is-invalid~.custom-control-description, +.was-validated .custom-control-input:invalid~.custom-control-description { + color: #dc3545 +} + +.custom-file-input.is-invalid~.custom-file-control, +.was-validated .custom-file-input:invalid~.custom-file-control { + border-color: #dc3545 +} + +.custom-file-input.is-invalid~.custom-file-control::before, +.was-validated .custom-file-input:invalid~.custom-file-control::before { + border-color: inherit +} + +.custom-file-input.is-invalid:focus, +.was-validated .custom-file-input:invalid:focus { + box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) +} + +.form-inline { + display: -ms-flexbox; + display: flex; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-align: center; + align-items: center +} + +.form-inline .form-check { + width: 100% +} + +@media (min-width:576px) { + .form-inline label { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + margin-bottom: 0 + } + .form-inline .form-group { + display: -ms-flexbox; + display: flex; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-align: center; + align-items: center; + margin-bottom: 0 + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle + } + .form-inline .form-control-plaintext { + display: inline-block + } + .form-inline .input-group { + width: auto + } + .form-inline .form-control-label { + margin-bottom: 0; + vertical-align: middle + } + .form-inline .form-check { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: auto; + margin-top: 0; + margin-bottom: 0 + } + .form-inline .form-check-label { + padding-left: 0 + } + .form-inline .form-check-input { + position: relative; + margin-top: 0; + margin-right: .25rem; + margin-left: 0 + } + .form-inline .custom-control { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0 + } + .form-inline .custom-control-indicator { + position: static; + display: inline-block; + margin-right: .25rem; + vertical-align: text-bottom + } + .form-inline .has-feedback .form-control-feedback { + top: 0 + } +} + +.btn { + display: inline-block; + font-weight: 400; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border: 1px solid transparent; + padding: .5rem .75rem; + font-size: 1rem; + line-height: 1.25; + border-radius: .25rem; + transition: all .15s ease-in-out +} + +.btn:focus, +.btn:hover { + text-decoration: none +} + +.btn.focus, +.btn:focus { + outline: 0; + box-shadow: 0 0 0 3px rgba(0, 123, 255, .25) +} + +.btn.disabled, +.btn:disabled { + opacity: .65 +} + +.btn.active, +.btn:active { + background-image: none +} + +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none +} + +.btn-primary { + color: #fff; + background-color: #007bff; + border-color: #007bff +} + +.btn-primary:hover { + color: #fff; + background-color: #0069d9; + border-color: #0062cc +} + +.btn-primary.focus, +.btn-primary:focus { + box-shadow: 0 0 0 3px rgba(0, 123, 255, .5) +} + +.btn-primary.disabled, +.btn-primary:disabled { + background-color: #007bff; + border-color: #007bff +} + +.btn-primary.active, +.btn-primary:active, +.show>.btn-primary.dropdown-toggle { + background-color: #0069d9; + background-image: none; + border-color: #0062cc +} + +.btn-secondary { + color: #fff; + background-color: #868e96; + border-color: #868e96 +} + +.btn-secondary:hover { + color: #fff; + background-color: #727b84; + border-color: #6c757d +} + +.btn-secondary.focus, +.btn-secondary:focus { + box-shadow: 0 0 0 3px rgba(134, 142, 150, .5) +} + +.btn-secondary.disabled, +.btn-secondary:disabled { + background-color: #868e96; + border-color: #868e96 +} + +.btn-secondary.active, +.btn-secondary:active, +.show>.btn-secondary.dropdown-toggle { + background-color: #727b84; + background-image: none; + border-color: #6c757d +} + +.btn-success { + color: #fff; + background-color: #28a745; + border-color: #28a745 +} + +.btn-success:hover { + color: #fff; + background-color: #218838; + border-color: #1e7e34 +} + +.btn-success.focus, +.btn-success:focus { + box-shadow: 0 0 0 3px rgba(40, 167, 69, .5) +} + +.btn-success.disabled, +.btn-success:disabled { + background-color: #28a745; + border-color: #28a745 +} + +.btn-success.active, +.btn-success:active, +.show>.btn-success.dropdown-toggle { + background-color: #218838; + background-image: none; + border-color: #1e7e34 +} + +.btn-info { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8 +} + +.btn-info:hover { + color: #fff; + background-color: #138496; + border-color: #117a8b +} + +.btn-info.focus, +.btn-info:focus { + box-shadow: 0 0 0 3px rgba(23, 162, 184, .5) +} + +.btn-info.disabled, +.btn-info:disabled { + background-color: #17a2b8; + border-color: #17a2b8 +} + +.btn-info.active, +.btn-info:active, +.show>.btn-info.dropdown-toggle { + background-color: #138496; + background-image: none; + border-color: #117a8b +} + +.btn-warning { + color: #111; + background-color: #ffc107; + border-color: #ffc107 +} + +.btn-warning:hover { + color: #111; + background-color: #e0a800; + border-color: #d39e00 +} + +.btn-warning.focus, +.btn-warning:focus { + box-shadow: 0 0 0 3px rgba(255, 193, 7, .5) +} + +.btn-warning.disabled, +.btn-warning:disabled { + background-color: #ffc107; + border-color: #ffc107 +} + +.btn-warning.active, +.btn-warning:active, +.show>.btn-warning.dropdown-toggle { + background-color: #e0a800; + background-image: none; + border-color: #d39e00 +} + +.btn-danger { + color: #fff; + background-color: #dc3545; + border-color: #dc3545 +} + +.btn-danger:hover { + color: #fff; + background-color: #c82333; + border-color: #bd2130 +} + +.btn-danger.focus, +.btn-danger:focus { + box-shadow: 0 0 0 3px rgba(220, 53, 69, .5) +} + +.btn-danger.disabled, +.btn-danger:disabled { + background-color: #dc3545; + border-color: #dc3545 +} + +.btn-danger.active, +.btn-danger:active, +.show>.btn-danger.dropdown-toggle { + background-color: #c82333; + background-image: none; + border-color: #bd2130 +} + +.btn-light { + color: #111; + background-color: #f8f9fa; + border-color: #f8f9fa +} + +.btn-light:hover { + color: #111; + background-color: #e2e6ea; + border-color: #dae0e5 +} + +.btn-light.focus, +.btn-light:focus { + box-shadow: 0 0 0 3px rgba(248, 249, 250, .5) +} + +.btn-light.disabled, +.btn-light:disabled { + background-color: #f8f9fa; + border-color: #f8f9fa +} + +.btn-light.active, +.btn-light:active, +.show>.btn-light.dropdown-toggle { + background-color: #e2e6ea; + background-image: none; + border-color: #dae0e5 +} + +.btn-dark { + color: #fff; + background-color: #343a40; + border-color: #343a40 +} + +.btn-dark:hover { + color: #fff; + background-color: #23272b; + border-color: #1d2124 +} + +.btn-dark.focus, +.btn-dark:focus { + box-shadow: 0 0 0 3px rgba(52, 58, 64, .5) +} + +.btn-dark.disabled, +.btn-dark:disabled { + background-color: #343a40; + border-color: #343a40 +} + +.btn-dark.active, +.btn-dark:active, +.show>.btn-dark.dropdown-toggle { + background-color: #23272b; + background-image: none; + border-color: #1d2124 +} + +.btn-outline-primary { + color: #007bff; + background-color: transparent; + background-image: none; + border-color: #007bff +} + +.btn-outline-primary:hover { + color: #fff; + background-color: #007bff; + border-color: #007bff +} + +.btn-outline-primary.focus, +.btn-outline-primary:focus { + box-shadow: 0 0 0 3px rgba(0, 123, 255, .5) +} + +.btn-outline-primary.disabled, +.btn-outline-primary:disabled { + color: #007bff; + background-color: transparent +} + +.btn-outline-primary.active, +.btn-outline-primary:active, +.show>.btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #007bff; + border-color: #007bff +} + +.btn-outline-secondary { + color: #868e96; + background-color: transparent; + background-image: none; + border-color: #868e96 +} + +.btn-outline-secondary:hover { + color: #fff; + background-color: #868e96; + border-color: #868e96 +} + +.btn-outline-secondary.focus, +.btn-outline-secondary:focus { + box-shadow: 0 0 0 3px rgba(134, 142, 150, .5) +} + +.btn-outline-secondary.disabled, +.btn-outline-secondary:disabled { + color: #868e96; + background-color: transparent +} + +.btn-outline-secondary.active, +.btn-outline-secondary:active, +.show>.btn-outline-secondary.dropdown-toggle { + color: #fff; + background-color: #868e96; + border-color: #868e96 +} + +.btn-outline-success { + color: #28a745; + background-color: transparent; + background-image: none; + border-color: #28a745 +} + +.btn-outline-success:hover { + color: #fff; + background-color: #28a745; + border-color: #28a745 +} + +.btn-outline-success.focus, +.btn-outline-success:focus { + box-shadow: 0 0 0 3px rgba(40, 167, 69, .5) +} + +.btn-outline-success.disabled, +.btn-outline-success:disabled { + color: #28a745; + background-color: transparent +} + +.btn-outline-success.active, +.btn-outline-success:active, +.show>.btn-outline-success.dropdown-toggle { + color: #fff; + background-color: #28a745; + border-color: #28a745 +} + +.btn-outline-info { + color: #17a2b8; + background-color: transparent; + background-image: none; + border-color: #17a2b8 +} + +.btn-outline-info:hover { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8 +} + +.btn-outline-info.focus, +.btn-outline-info:focus { + box-shadow: 0 0 0 3px rgba(23, 162, 184, .5) +} + +.btn-outline-info.disabled, +.btn-outline-info:disabled { + color: #17a2b8; + background-color: transparent +} + +.btn-outline-info.active, +.btn-outline-info:active, +.show>.btn-outline-info.dropdown-toggle { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8 +} + +.btn-outline-warning { + color: #ffc107; + background-color: transparent; + background-image: none; + border-color: #ffc107 +} + +.btn-outline-warning:hover { + color: #fff; + background-color: #ffc107; + border-color: #ffc107 +} + +.btn-outline-warning.focus, +.btn-outline-warning:focus { + box-shadow: 0 0 0 3px rgba(255, 193, 7, .5) +} + +.btn-outline-warning.disabled, +.btn-outline-warning:disabled { + color: #ffc107; + background-color: transparent +} + +.btn-outline-warning.active, +.btn-outline-warning:active, +.show>.btn-outline-warning.dropdown-toggle { + color: #fff; + background-color: #ffc107; + border-color: #ffc107 +} + +.btn-outline-danger { + color: #dc3545; + background-color: transparent; + background-image: none; + border-color: #dc3545 +} + +.btn-outline-danger:hover { + color: #fff; + background-color: #dc3545; + border-color: #dc3545 +} + +.btn-outline-danger.focus, +.btn-outline-danger:focus { + box-shadow: 0 0 0 3px rgba(220, 53, 69, .5) +} + +.btn-outline-danger.disabled, +.btn-outline-danger:disabled { + color: #dc3545; + background-color: transparent +} + +.btn-outline-danger.active, +.btn-outline-danger:active, +.show>.btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #dc3545; + border-color: #dc3545 +} + +.btn-outline-light { + color: #f8f9fa; + background-color: transparent; + background-image: none; + border-color: #f8f9fa +} + +.btn-outline-light:hover { + color: #fff; + background-color: #f8f9fa; + border-color: #f8f9fa +} + +.btn-outline-light.focus, +.btn-outline-light:focus { + box-shadow: 0 0 0 3px rgba(248, 249, 250, .5) +} + +.btn-outline-light.disabled, +.btn-outline-light:disabled { + color: #f8f9fa; + background-color: transparent +} + +.btn-outline-light.active, +.btn-outline-light:active, +.show>.btn-outline-light.dropdown-toggle { + color: #fff; + background-color: #f8f9fa; + border-color: #f8f9fa +} + +.btn-outline-dark { + color: #343a40; + background-color: transparent; + background-image: none; + border-color: #343a40 +} + +.btn-outline-dark:hover { + color: #fff; + background-color: #343a40; + border-color: #343a40 +} + +.btn-outline-dark.focus, +.btn-outline-dark:focus { + box-shadow: 0 0 0 3px rgba(52, 58, 64, .5) +} + +.btn-outline-dark.disabled, +.btn-outline-dark:disabled { + color: #343a40; + background-color: transparent +} + +.btn-outline-dark.active, +.btn-outline-dark:active, +.show>.btn-outline-dark.dropdown-toggle { + color: #fff; + background-color: #343a40; + border-color: #343a40 +} + +.btn-link { + font-weight: 400; + color: #007bff; + border-radius: 0 +} + +.btn-link, +.btn-link.active, +.btn-link:active, +.btn-link:disabled { + background-color: transparent +} + +.btn-link, +.btn-link:active, +.btn-link:focus { + border-color: transparent; + box-shadow: none +} + +.btn-link:hover { + border-color: transparent +} + +.btn-link:focus, +.btn-link:hover { + color: #0056b3; + text-decoration: underline; + background-color: transparent +} + +.btn-link:disabled { + color: #868e96 +} + +.btn-link:disabled:focus, +.btn-link:disabled:hover { + text-decoration: none +} + +.btn-group-lg>.btn, +.btn-lg { + padding: .5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: .3rem +} + +.btn-group-sm>.btn, +.btn-sm { + padding: .25rem .5rem; + font-size: .875rem; + line-height: 1.5; + border-radius: .2rem +} + +.btn-block { + display: block; + width: 100% +} + +.btn-block+.btn-block { + margin-top: .5rem +} + +input[type=button].btn-block, +input[type=reset].btn-block, +input[type=submit].btn-block { + width: 100% +} + +.fade { + opacity: 0; + transition: opacity .15s linear +} + +.fade.show { + opacity: 1 +} + +.collapse { + display: none +} + +.collapse.show { + display: block +} + +tr.collapse.show { + display: table-row +} + +tbody.collapse.show { + display: table-row-group +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + transition: height .35s ease +} + +.dropdown, +.dropup { + position: relative +} + +.dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: .255em; + vertical-align: .255em; + content: ""; + border-top: .3em solid; + border-right: .3em solid transparent; + border-left: .3em solid transparent +} + +.dropdown-toggle:empty::after { + margin-left: 0 +} + +.dropup .dropdown-menu { + margin-top: 0; + margin-bottom: .125rem +} + +.dropup .dropdown-toggle::after { + border-top: 0; + border-bottom: .3em solid +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: .5rem 0; + margin: .125rem 0 0; + font-size: 1rem; + color: #212529; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: .25rem +} + +.dropdown-divider { + height: 0; + margin: .5rem 0; + overflow: hidden; + border-top: 1px solid #e9ecef +} + +.dropdown-item { + display: block; + width: 100%; + padding: .25rem 1.5rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + white-space: nowrap; + background: 0 0; + border: 0 +} + +.dropdown-item:focus, +.dropdown-item:hover { + color: #16181b; + text-decoration: none; + background-color: #f8f9fa +} + +.dropdown-item.active, +.dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #007bff +} + +.dropdown-item.disabled, +.dropdown-item:disabled { + color: #868e96; + background-color: transparent +} + +.show>a { + outline: 0 +} + +.dropdown-menu.show { + display: block +} + +.dropdown-header { + display: block; + padding: .5rem 1.5rem; + margin-bottom: 0; + font-size: .875rem; + color: #868e96; + white-space: nowrap +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: -ms-inline-flexbox; + display: inline-flex; + vertical-align: middle +} + +.btn-group-vertical>.btn, +.btn-group>.btn { + position: relative; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + margin-bottom: 0 +} + +.btn-group-vertical>.btn:hover, +.btn-group>.btn:hover { + z-index: 2 +} + +.btn-group-vertical>.btn.active, +.btn-group-vertical>.btn:active, +.btn-group-vertical>.btn:focus, +.btn-group>.btn.active, +.btn-group>.btn:active, +.btn-group>.btn:focus { + z-index: 2 +} + +.btn-group .btn+.btn, +.btn-group .btn+.btn-group, +.btn-group .btn-group+.btn, +.btn-group .btn-group+.btn-group, +.btn-group-vertical .btn+.btn, +.btn-group-vertical .btn+.btn-group, +.btn-group-vertical .btn-group+.btn, +.btn-group-vertical .btn-group+.btn-group { + margin-left: -1px +} + +.btn-toolbar { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-pack: start; + justify-content: flex-start +} + +.btn-toolbar .input-group { + width: auto +} + +.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-top-right-radius: 0; + border-bottom-right-radius: 0 +} + +.btn-group>.btn:last-child:not(:first-child), +.btn-group>.dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-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-top-right-radius: 0; + border-bottom-right-radius: 0 +} + +.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0 +} + +.btn+.dropdown-toggle-split { + padding-right: .5625rem; + padding-left: .5625rem +} + +.btn+.dropdown-toggle-split::after { + margin-left: 0 +} + +.btn-group-sm>.btn+.dropdown-toggle-split, +.btn-sm+.dropdown-toggle-split { + padding-right: .375rem; + padding-left: .375rem +} + +.btn-group-lg>.btn+.dropdown-toggle-split, +.btn-lg+.dropdown-toggle-split { + padding-right: .75rem; + padding-left: .75rem +} + +.btn-group-vertical { + display: -ms-inline-flexbox; + display: inline-flex; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: center; + justify-content: center +} + +.btn-group-vertical .btn, +.btn-group-vertical .btn-group { + width: 100% +} + +.btn-group-vertical>.btn+.btn, +.btn-group-vertical>.btn+.btn-group, +.btn-group-vertical>.btn-group+.btn, +.btn-group-vertical>.btn-group+.btn-group { + margin-top: -1px; + margin-left: 0 +} + +.btn-group-vertical>.btn:not(:first-child):not(:last-child) { + border-radius: 0 +} + +.btn-group-vertical>.btn:first-child:not(:last-child) { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group-vertical>.btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0 +} + +.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-left-radius: 0; + border-top-right-radius: 0 +} + +[data-toggle=buttons]>.btn input[type=checkbox], +[data-toggle=buttons]>.btn input[type=radio], +[data-toggle=buttons]>.btn-group>.btn input[type=checkbox], +[data-toggle=buttons]>.btn-group>.btn input[type=radio] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none +} + +.input-group { + position: relative; + display: -ms-flexbox; + display: flex; + width: 100% +} + +.input-group .form-control { + position: relative; + z-index: 2; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0 +} + +.input-group .form-control:active, +.input-group .form-control:focus, +.input-group .form-control:hover { + z-index: 3 +} + +.input-group .form-control, +.input-group-addon, +.input-group-btn { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center +} + +.input-group .form-control:not(:first-child):not(:last-child), +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child) { + border-radius: 0 +} + +.input-group-addon, +.input-group-btn { + white-space: nowrap; + vertical-align: middle +} + +.input-group-addon { + padding: .5rem .75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.25; + color: #495057; + text-align: center; + background-color: #e9ecef; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: .25rem +} + +.input-group-addon.form-control-sm, +.input-group-sm>.input-group-addon, +.input-group-sm>.input-group-btn>.input-group-addon.btn { + padding: .25rem .5rem; + font-size: .875rem; + border-radius: .2rem +} + +.input-group-addon.form-control-lg, +.input-group-lg>.input-group-addon, +.input-group-lg>.input-group-btn>.input-group-addon.btn { + padding: .5rem 1rem; + font-size: 1.25rem; + border-radius: .3rem +} + +.input-group-addon input[type=checkbox], +.input-group-addon input[type=radio] { + margin-top: 0 +} + +.input-group .form-control:not(:last-child), +.input-group-addon:not(:last-child), +.input-group-btn:not(:first-child)>.btn-group:not(:last-child)>.btn, +.input-group-btn:not(:first-child)>.btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:not(:last-child)>.btn, +.input-group-btn:not(:last-child)>.btn-group>.btn, +.input-group-btn:not(:last-child)>.dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0 +} + +.input-group-addon:not(:last-child) { + border-right: 0 +} + +.input-group .form-control:not(:first-child), +.input-group-addon:not(:first-child), +.input-group-btn:not(:first-child)>.btn, +.input-group-btn:not(:first-child)>.btn-group>.btn, +.input-group-btn:not(:first-child)>.dropdown-toggle, +.input-group-btn:not(:last-child)>.btn-group:not(:first-child)>.btn, +.input-group-btn:not(:last-child)>.btn:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0 +} + +.form-control+.input-group-addon:not(:first-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:active, +.input-group-btn>.btn:focus, +.input-group-btn>.btn:hover { + z-index: 3 +} + +.input-group-btn:not(:last-child)>.btn, +.input-group-btn:not(:last-child)>.btn-group { + margin-right: -1px +} + +.input-group-btn:not(:first-child)>.btn, +.input-group-btn:not(:first-child)>.btn-group { + z-index: 2; + margin-left: -1px +} + +.input-group-btn:not(:first-child)>.btn-group:active, +.input-group-btn:not(:first-child)>.btn-group:focus, +.input-group-btn:not(:first-child)>.btn-group:hover, +.input-group-btn:not(:first-child)>.btn:active, +.input-group-btn:not(:first-child)>.btn:focus, +.input-group-btn:not(:first-child)>.btn:hover { + z-index: 3 +} + +.custom-control { + position: relative; + display: -ms-inline-flexbox; + display: inline-flex; + min-height: 1.5rem; + padding-left: 1.5rem; + margin-right: 1rem +} + +.custom-control-input { + position: absolute; + z-index: -1; + opacity: 0 +} + +.custom-control-input:checked~.custom-control-indicator { + color: #fff; + background-color: #007bff +} + +.custom-control-input:focus~.custom-control-indicator { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #007bff +} + +.custom-control-input:active~.custom-control-indicator { + color: #fff; + background-color: #b3d7ff +} + +.custom-control-input:disabled~.custom-control-indicator { + background-color: #e9ecef +} + +.custom-control-input:disabled~.custom-control-description { + color: #868e96 +} + +.custom-control-indicator { + position: absolute; + top: .25rem; + left: 0; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #ddd; + background-repeat: no-repeat; + background-position: center center; + background-size: 50% 50% +} + +.custom-checkbox .custom-control-indicator { + border-radius: .25rem +} + +.custom-checkbox .custom-control-input:checked~.custom-control-indicator { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E") +} + +.custom-checkbox .custom-control-input:indeterminate~.custom-control-indicator { + background-color: #007bff; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E") +} + +.custom-radio .custom-control-indicator { + border-radius: 50% +} + +.custom-radio .custom-control-input:checked~.custom-control-indicator { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E") +} + +.custom-controls-stacked { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column +} + +.custom-controls-stacked .custom-control { + margin-bottom: .25rem +} + +.custom-controls-stacked .custom-control+.custom-control { + margin-left: 0 +} + +.custom-select { + display: inline-block; + max-width: 100%; + height: calc(2.25rem + 2px); + padding: .375rem 1.75rem .375rem .75rem; + line-height: 1.25; + color: #495057; + vertical-align: middle; + background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center; + background-size: 8px 10px; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: .25rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none +} + +.custom-select:focus { + border-color: #80bdff; + outline: 0 +} + +.custom-select:focus::-ms-value { + color: #495057; + background-color: #fff +} + +.custom-select:disabled { + color: #868e96; + background-color: #e9ecef +} + +.custom-select::-ms-expand { + opacity: 0 +} + +.custom-select-sm { + height: calc(1.8125rem + 2px); + padding-top: .375rem; + padding-bottom: .375rem; + font-size: 75% +} + +.custom-file { + position: relative; + display: inline-block; + max-width: 100%; + height: 2.5rem; + margin-bottom: 0 +} + +.custom-file-input { + min-width: 14rem; + max-width: 100%; + height: 2.5rem; + margin: 0; + opacity: 0 +} + +.custom-file-control { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 5; + height: 2.5rem; + padding: .5rem 1rem; + line-height: 1.5; + color: #495057; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: .25rem +} + +.custom-file-control:lang(en):empty::after { + content: "Choose file..." +} + +.custom-file-control::before { + position: absolute; + top: -1px; + right: -1px; + bottom: -1px; + z-index: 6; + display: block; + height: 2.5rem; + padding: .5rem 1rem; + line-height: 1.5; + color: #495057; + background-color: #e9ecef; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 0 .25rem .25rem 0 +} + +.custom-file-control:lang(en)::before { + content: "Browse" +} + +.nav { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none +} + +.nav-link { + display: block; + padding: .5rem 1rem +} + +.nav-link:focus, +.nav-link:hover { + text-decoration: none +} + +.nav-link.disabled { + color: #868e96 +} + +.nav-tabs { + border-bottom: 1px solid #ddd +} + +.nav-tabs .nav-item { + margin-bottom: -1px +} + +.nav-tabs .nav-link { + border: 1px solid transparent; + border-top-left-radius: .25rem; + border-top-right-radius: .25rem +} + +.nav-tabs .nav-link:focus, +.nav-tabs .nav-link:hover { + border-color: #e9ecef #e9ecef #ddd +} + +.nav-tabs .nav-link.disabled { + color: #868e96; + background-color: transparent; + border-color: transparent +} + +.nav-tabs .nav-item.show .nav-link, +.nav-tabs .nav-link.active { + color: #495057; + background-color: #fff; + border-color: #ddd #ddd #fff +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0 +} + +.nav-pills .nav-link { + border-radius: .25rem +} + +.nav-pills .nav-link.active, +.show>.nav-pills .nav-link { + color: #fff; + background-color: #007bff +} + +.nav-fill .nav-item { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + text-align: center +} + +.nav-justified .nav-item { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: center +} + +.tab-content>.tab-pane { + display: none +} + +.tab-content>.active { + display: block +} + +.navbar { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; + padding: .5rem 1rem +} + +.navbar>.container, +.navbar>.container-fluid { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between +} + +.navbar-brand { + display: inline-block; + padding-top: .3125rem; + padding-bottom: .3125rem; + margin-right: 1rem; + font-size: 1.25rem; + line-height: inherit; + white-space: nowrap +} + +.navbar-brand:focus, +.navbar-brand:hover { + text-decoration: none +} + +.navbar-nav { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none +} + +.navbar-nav .nav-link { + padding-right: 0; + padding-left: 0 +} + +.navbar-nav .dropdown-menu { + position: static; + float: none +} + +.navbar-text { + display: inline-block; + padding-top: .5rem; + padding-bottom: .5rem +} + +.navbar-collapse { + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + -ms-flex-align: center; + align-items: center +} + +.navbar-toggler { + padding: .25rem .75rem; + font-size: 1.25rem; + line-height: 1; + background: 0 0; + border: 1px solid transparent; + border-radius: .25rem +} + +.navbar-toggler:focus, +.navbar-toggler:hover { + text-decoration: none +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ""; + background: no-repeat center center; + background-size: 100% 100% +} + +@media (max-width:575px) { + .navbar-expand-sm>.container, + .navbar-expand-sm>.container-fluid { + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width:576px) { + .navbar-expand-sm { + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start + } + .navbar-expand-sm .navbar-nav { + -ms-flex-direction: row; + flex-direction: row + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute + } + .navbar-expand-sm .navbar-nav .dropdown-menu-right { + right: 0; + left: auto + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem + } + .navbar-expand-sm>.container, + .navbar-expand-sm>.container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap + } + .navbar-expand-sm .navbar-collapse { + display: -ms-flexbox!important; + display: flex!important + } + .navbar-expand-sm .navbar-toggler { + display: none + } +} + +@media (max-width:767px) { + .navbar-expand-md>.container, + .navbar-expand-md>.container-fluid { + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width:768px) { + .navbar-expand-md { + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start + } + .navbar-expand-md .navbar-nav { + -ms-flex-direction: row; + flex-direction: row + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute + } + .navbar-expand-md .navbar-nav .dropdown-menu-right { + right: 0; + left: auto + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem + } + .navbar-expand-md>.container, + .navbar-expand-md>.container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap + } + .navbar-expand-md .navbar-collapse { + display: -ms-flexbox!important; + display: flex!important + } + .navbar-expand-md .navbar-toggler { + display: none + } +} + +@media (max-width:991px) { + .navbar-expand-lg>.container, + .navbar-expand-lg>.container-fluid { + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width:992px) { + .navbar-expand-lg { + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start + } + .navbar-expand-lg .navbar-nav { + -ms-flex-direction: row; + flex-direction: row + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute + } + .navbar-expand-lg .navbar-nav .dropdown-menu-right { + right: 0; + left: auto + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem + } + .navbar-expand-lg>.container, + .navbar-expand-lg>.container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap + } + .navbar-expand-lg .navbar-collapse { + display: -ms-flexbox!important; + display: flex!important + } + .navbar-expand-lg .navbar-toggler { + display: none + } +} + +@media (max-width:1199px) { + .navbar-expand-xl>.container, + .navbar-expand-xl>.container-fluid { + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width:1200px) { + .navbar-expand-xl { + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start + } + .navbar-expand-xl .navbar-nav { + -ms-flex-direction: row; + flex-direction: row + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute + } + .navbar-expand-xl .navbar-nav .dropdown-menu-right { + right: 0; + left: auto + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem + } + .navbar-expand-xl>.container, + .navbar-expand-xl>.container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap + } + .navbar-expand-xl .navbar-collapse { + display: -ms-flexbox!important; + display: flex!important + } + .navbar-expand-xl .navbar-toggler { + display: none + } +} + +.navbar-expand { + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start +} + +.navbar-expand>.container, +.navbar-expand>.container-fluid { + padding-right: 0; + padding-left: 0 +} + +.navbar-expand .navbar-nav { + -ms-flex-direction: row; + flex-direction: row +} + +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute +} + +.navbar-expand .navbar-nav .dropdown-menu-right { + right: 0; + left: auto +} + +.navbar-expand .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem +} + +.navbar-expand>.container, +.navbar-expand>.container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap +} + +.navbar-expand .navbar-collapse { + display: -ms-flexbox!important; + display: flex!important +} + +.navbar-expand .navbar-toggler { + display: none +} + +.navbar-light .navbar-brand { + color: rgba(0, 0, 0, .9) +} + +.navbar-light .navbar-brand:focus, +.navbar-light .navbar-brand:hover { + color: rgba(0, 0, 0, .9) +} + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, .5) +} + +.navbar-light .navbar-nav .nav-link:focus, +.navbar-light .navbar-nav .nav-link:hover { + color: rgba(0, 0, 0, .7) +} + +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, .3) +} + +.navbar-light .navbar-nav .active>.nav-link, +.navbar-light .navbar-nav .nav-link.active, +.navbar-light .navbar-nav .nav-link.show, +.navbar-light .navbar-nav .show>.nav-link { + color: rgba(0, 0, 0, .9) +} + +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, .5); + border-color: rgba(0, 0, 0, .1) +} + +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E") +} + +.navbar-light .navbar-text { + color: rgba(0, 0, 0, .5) +} + +.navbar-dark .navbar-brand { + color: #fff +} + +.navbar-dark .navbar-brand:focus, +.navbar-dark .navbar-brand:hover { + color: #fff +} + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, .5) +} + +.navbar-dark .navbar-nav .nav-link:focus, +.navbar-dark .navbar-nav .nav-link:hover { + color: rgba(255, 255, 255, .75) +} + +.navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, .25) +} + +.navbar-dark .navbar-nav .active>.nav-link, +.navbar-dark .navbar-nav .nav-link.active, +.navbar-dark .navbar-nav .nav-link.show, +.navbar-dark .navbar-nav .show>.nav-link { + color: #fff +} + +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, .5); + border-color: rgba(255, 255, 255, .1) +} + +.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E") +} + +.navbar-dark .navbar-text { + color: rgba(255, 255, 255, .5) +} + +.card { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, .125); + border-radius: .25rem +} + +.card-body { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1.25rem +} + +.card-title { + margin-bottom: .75rem +} + +.card-subtitle { + margin-top: -.375rem; + margin-bottom: 0 +} + +.card-text:last-child { + margin-bottom: 0 +} + +.card-link:hover { + text-decoration: none +} + +.card-link+.card-link { + margin-left: 1.25rem +} + +.card>.list-group:first-child .list-group-item:first-child { + border-top-left-radius: .25rem; + border-top-right-radius: .25rem +} + +.card>.list-group:last-child .list-group-item:last-child { + border-bottom-right-radius: .25rem; + border-bottom-left-radius: .25rem +} + +.card-header { + padding: .75rem 1.25rem; + margin-bottom: 0; + background-color: rgba(0, 0, 0, .03); + border-bottom: 1px solid rgba(0, 0, 0, .125) +} + +.card-header:first-child { + border-radius: calc(.25rem - 1px) calc(.25rem - 1px) 0 0 +} + +.card-footer { + padding: .75rem 1.25rem; + background-color: rgba(0, 0, 0, .03); + border-top: 1px solid rgba(0, 0, 0, .125) +} + +.card-footer:last-child { + border-radius: 0 0 calc(.25rem - 1px) calc(.25rem - 1px) +} + +.card-header-tabs { + margin-right: -.625rem; + margin-bottom: -.75rem; + margin-left: -.625rem; + border-bottom: 0 +} + +.card-header-pills { + margin-right: -.625rem; + margin-left: -.625rem +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem +} + +.card-img { + width: 100%; + border-radius: calc(.25rem - 1px) +} + +.card-img-top { + width: 100%; + border-top-left-radius: calc(.25rem - 1px); + border-top-right-radius: calc(.25rem - 1px) +} + +.card-img-bottom { + width: 100%; + border-bottom-right-radius: calc(.25rem - 1px); + border-bottom-left-radius: calc(.25rem - 1px) +} + +@media (min-width:576px) { + .card-deck { + display: -ms-flexbox; + display: flex; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + margin-right: -15px; + margin-left: -15px + } + .card-deck .card { + display: -ms-flexbox; + display: flex; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + -ms-flex-direction: column; + flex-direction: column; + margin-right: 15px; + margin-left: 15px + } +} + +@media (min-width:576px) { + .card-group { + display: -ms-flexbox; + display: flex; + -ms-flex-flow: row wrap; + flex-flow: row wrap + } + .card-group .card { + -ms-flex: 1 0 0%; + flex: 1 0 0% + } + .card-group .card+.card { + margin-left: 0; + border-left: 0 + } + .card-group .card:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0 + } + .card-group .card:first-child .card-img-top { + border-top-right-radius: 0 + } + .card-group .card:first-child .card-img-bottom { + border-bottom-right-radius: 0 + } + .card-group .card:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0 + } + .card-group .card:last-child .card-img-top { + border-top-left-radius: 0 + } + .card-group .card:last-child .card-img-bottom { + border-bottom-left-radius: 0 + } + .card-group .card:not(:first-child):not(:last-child) { + border-radius: 0 + } + .card-group .card:not(:first-child):not(:last-child) .card-img-bottom, + .card-group .card:not(:first-child):not(:last-child) .card-img-top { + border-radius: 0 + } +} + +.card-columns .card { + margin-bottom: .75rem +} + +@media (min-width:576px) { + .card-columns { + -webkit-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + column-gap: 1.25rem + } + .card-columns .card { + display: inline-block; + width: 100% + } +} + +.breadcrumb { + padding: .75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #e9ecef; + border-radius: .25rem +} + +.breadcrumb::after { + display: block; + clear: both; + content: "" +} + +.breadcrumb-item { + float: left +} + +.breadcrumb-item+.breadcrumb-item::before { + display: inline-block; + padding-right: .5rem; + padding-left: .5rem; + color: #868e96; + content: "/" +} + +.breadcrumb-item+.breadcrumb-item:hover::before { + text-decoration: underline +} + +.breadcrumb-item+.breadcrumb-item:hover::before { + text-decoration: none +} + +.breadcrumb-item.active { + color: #868e96 +} + +.pagination { + display: -ms-flexbox; + display: flex; + padding-left: 0; + list-style: none; + border-radius: .25rem +} + +.page-item:first-child .page-link { + margin-left: 0; + border-top-left-radius: .25rem; + border-bottom-left-radius: .25rem +} + +.page-item:last-child .page-link { + border-top-right-radius: .25rem; + border-bottom-right-radius: .25rem +} + +.page-item.active .page-link { + z-index: 2; + color: #fff; + background-color: #007bff; + border-color: #007bff +} + +.page-item.disabled .page-link { + color: #868e96; + pointer-events: none; + background-color: #fff; + border-color: #ddd +} + +.page-link { + position: relative; + display: block; + padding: .5rem .75rem; + margin-left: -1px; + line-height: 1.25; + color: #007bff; + background-color: #fff; + border: 1px solid #ddd +} + +.page-link:focus, +.page-link:hover { + color: #0056b3; + text-decoration: none; + background-color: #e9ecef; + border-color: #ddd +} + +.pagination-lg .page-link { + padding: .75rem 1.5rem; + font-size: 1.25rem; + line-height: 1.5 +} + +.pagination-lg .page-item:first-child .page-link { + border-top-left-radius: .3rem; + border-bottom-left-radius: .3rem +} + +.pagination-lg .page-item:last-child .page-link { + border-top-right-radius: .3rem; + border-bottom-right-radius: .3rem +} + +.pagination-sm .page-link { + padding: .25rem .5rem; + font-size: .875rem; + line-height: 1.5 +} + +.pagination-sm .page-item:first-child .page-link { + border-top-left-radius: .2rem; + border-bottom-left-radius: .2rem +} + +.pagination-sm .page-item:last-child .page-link { + border-top-right-radius: .2rem; + border-bottom-right-radius: .2rem +} + +.badge { + display: inline-block; + padding: .25em .4em; + font-size: 75%; + font-weight: 700; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25rem +} + +.badge:empty { + display: none +} + +.btn .badge { + position: relative; + top: -1px +} + +.badge-pill { + padding-right: .6em; + padding-left: .6em; + border-radius: 10rem +} + +.badge-primary { + color: #fff; + background-color: #007bff +} + +.badge-primary[href]:focus, +.badge-primary[href]:hover { + color: #fff; + text-decoration: none; + background-color: #0062cc +} + +.badge-secondary { + color: #fff; + background-color: #868e96 +} + +.badge-secondary[href]:focus, +.badge-secondary[href]:hover { + color: #fff; + text-decoration: none; + background-color: #6c757d +} + +.badge-success { + color: #fff; + background-color: #28a745 +} + +.badge-success[href]:focus, +.badge-success[href]:hover { + color: #fff; + text-decoration: none; + background-color: #1e7e34 +} + +.badge-info { + color: #fff; + background-color: #17a2b8 +} + +.badge-info[href]:focus, +.badge-info[href]:hover { + color: #fff; + text-decoration: none; + background-color: #117a8b +} + +.badge-warning { + color: #111; + background-color: #ffc107 +} + +.badge-warning[href]:focus, +.badge-warning[href]:hover { + color: #111; + text-decoration: none; + background-color: #d39e00 +} + +.badge-danger { + color: #fff; + background-color: #dc3545 +} + +.badge-danger[href]:focus, +.badge-danger[href]:hover { + color: #fff; + text-decoration: none; + background-color: #bd2130 +} + +.badge-light { + color: #111; + background-color: #f8f9fa +} + +.badge-light[href]:focus, +.badge-light[href]:hover { + color: #111; + text-decoration: none; + background-color: #dae0e5 +} + +.badge-dark { + color: #fff; + background-color: #343a40 +} + +.badge-dark[href]:focus, +.badge-dark[href]:hover { + color: #fff; + text-decoration: none; + background-color: #1d2124 +} + +.jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #e9ecef; + border-radius: .3rem +} + +@media (min-width:576px) { + .jumbotron { + padding: 4rem 2rem + } +} + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0 +} + +.alert { + padding: .75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: .25rem +} + +.alert-heading { + color: inherit +} + +.alert-link { + font-weight: 700 +} + +.alert-dismissible .close { + position: relative; + top: -.75rem; + right: -1.25rem; + padding: .75rem 1.25rem; + color: inherit +} + +.alert-primary { + color: #004085; + background-color: #cce5ff; + border-color: #b8daff +} + +.alert-primary hr { + border-top-color: #9fcdff +} + +.alert-primary .alert-link { + color: #002752 +} + +.alert-secondary { + color: #464a4e; + background-color: #e7e8ea; + border-color: #dddfe2 +} + +.alert-secondary hr { + border-top-color: #cfd2d6 +} + +.alert-secondary .alert-link { + color: #2e3133 +} + +.alert-success { + color: #155724; + background-color: #d4edda; + border-color: #c3e6cb +} + +.alert-success hr { + border-top-color: #b1dfbb +} + +.alert-success .alert-link { + color: #0b2e13 +} + +.alert-info { + color: #0c5460; + background-color: #d1ecf1; + border-color: #bee5eb +} + +.alert-info hr { + border-top-color: #abdde5 +} + +.alert-info .alert-link { + color: #062c33 +} + +.alert-warning { + color: #856404; + background-color: #fff3cd; + border-color: #ffeeba +} + +.alert-warning hr { + border-top-color: #ffe8a1 +} + +.alert-warning .alert-link { + color: #533f03 +} + +.alert-danger { + color: #721c24; + background-color: #f8d7da; + border-color: #f5c6cb +} + +.alert-danger hr { + border-top-color: #f1b0b7 +} + +.alert-danger .alert-link { + color: #491217 +} + +.alert-light { + color: #818182; + background-color: #fefefe; + border-color: #fdfdfe +} + +.alert-light hr { + border-top-color: #ececf6 +} + +.alert-light .alert-link { + color: #686868 +} + +.alert-dark { + color: #1b1e21; + background-color: #d6d8d9; + border-color: #c6c8ca +} + +.alert-dark hr { + border-top-color: #b9bbbe +} + +.alert-dark .alert-link { + color: #040505 +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 1rem 0 + } + to { + background-position: 0 0 + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 1rem 0 + } + to { + background-position: 0 0 + } +} + +.progress { + display: -ms-flexbox; + display: flex; + overflow: hidden; + font-size: .75rem; + line-height: 1rem; + text-align: center; + background-color: #e9ecef; + border-radius: .25rem +} + +.progress-bar { + height: 1rem; + line-height: 1rem; + color: #fff; + background-color: #007bff; + transition: width .6s ease +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem +} + +.progress-bar-animated { + -webkit-animation: progress-bar-stripes 1s linear infinite; + animation: progress-bar-stripes 1s linear infinite +} + +.media { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start +} + +.media-body { + -ms-flex: 1; + flex: 1 +} + +.list-group { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0 +} + +.list-group-item-action { + width: 100%; + color: #495057; + text-align: inherit +} + +.list-group-item-action:focus, +.list-group-item-action:hover { + color: #495057; + text-decoration: none; + background-color: #f8f9fa +} + +.list-group-item-action:active { + color: #212529; + background-color: #e9ecef +} + +.list-group-item { + position: relative; + display: block; + padding: .75rem 1.25rem; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, .125) +} + +.list-group-item:first-child { + border-top-left-radius: .25rem; + border-top-right-radius: .25rem +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: .25rem; + border-bottom-left-radius: .25rem +} + +.list-group-item:focus, +.list-group-item:hover { + text-decoration: none +} + +.list-group-item.disabled, +.list-group-item:disabled { + color: #868e96; + background-color: #fff +} + +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #007bff; + border-color: #007bff +} + +.list-group-flush .list-group-item { + border-right: 0; + border-left: 0; + border-radius: 0 +} + +.list-group-flush:first-child .list-group-item:first-child { + border-top: 0 +} + +.list-group-flush:last-child .list-group-item:last-child { + border-bottom: 0 +} + +.list-group-item-primary { + color: #004085; + background-color: #b8daff +} + +a.list-group-item-primary, +button.list-group-item-primary { + color: #004085 +} + +a.list-group-item-primary:focus, +a.list-group-item-primary:hover, +button.list-group-item-primary:focus, +button.list-group-item-primary:hover { + color: #004085; + background-color: #9fcdff +} + +a.list-group-item-primary.active, +button.list-group-item-primary.active { + color: #fff; + background-color: #004085; + border-color: #004085 +} + +.list-group-item-secondary { + color: #464a4e; + background-color: #dddfe2 +} + +a.list-group-item-secondary, +button.list-group-item-secondary { + color: #464a4e +} + +a.list-group-item-secondary:focus, +a.list-group-item-secondary:hover, +button.list-group-item-secondary:focus, +button.list-group-item-secondary:hover { + color: #464a4e; + background-color: #cfd2d6 +} + +a.list-group-item-secondary.active, +button.list-group-item-secondary.active { + color: #fff; + background-color: #464a4e; + border-color: #464a4e +} + +.list-group-item-success { + color: #155724; + background-color: #c3e6cb +} + +a.list-group-item-success, +button.list-group-item-success { + color: #155724 +} + +a.list-group-item-success:focus, +a.list-group-item-success:hover, +button.list-group-item-success:focus, +button.list-group-item-success:hover { + color: #155724; + background-color: #b1dfbb +} + +a.list-group-item-success.active, +button.list-group-item-success.active { + color: #fff; + background-color: #155724; + border-color: #155724 +} + +.list-group-item-info { + color: #0c5460; + background-color: #bee5eb +} + +a.list-group-item-info, +button.list-group-item-info { + color: #0c5460 +} + +a.list-group-item-info:focus, +a.list-group-item-info:hover, +button.list-group-item-info:focus, +button.list-group-item-info:hover { + color: #0c5460; + background-color: #abdde5 +} + +a.list-group-item-info.active, +button.list-group-item-info.active { + color: #fff; + background-color: #0c5460; + border-color: #0c5460 +} + +.list-group-item-warning { + color: #856404; + background-color: #ffeeba +} + +a.list-group-item-warning, +button.list-group-item-warning { + color: #856404 +} + +a.list-group-item-warning:focus, +a.list-group-item-warning:hover, +button.list-group-item-warning:focus, +button.list-group-item-warning:hover { + color: #856404; + background-color: #ffe8a1 +} + +a.list-group-item-warning.active, +button.list-group-item-warning.active { + color: #fff; + background-color: #856404; + border-color: #856404 +} + +.list-group-item-danger { + color: #721c24; + background-color: #f5c6cb +} + +a.list-group-item-danger, +button.list-group-item-danger { + color: #721c24 +} + +a.list-group-item-danger:focus, +a.list-group-item-danger:hover, +button.list-group-item-danger:focus, +button.list-group-item-danger:hover { + color: #721c24; + background-color: #f1b0b7 +} + +a.list-group-item-danger.active, +button.list-group-item-danger.active { + color: #fff; + background-color: #721c24; + border-color: #721c24 +} + +.list-group-item-light { + color: #818182; + background-color: #fdfdfe +} + +a.list-group-item-light, +button.list-group-item-light { + color: #818182 +} + +a.list-group-item-light:focus, +a.list-group-item-light:hover, +button.list-group-item-light:focus, +button.list-group-item-light:hover { + color: #818182; + background-color: #ececf6 +} + +a.list-group-item-light.active, +button.list-group-item-light.active { + color: #fff; + background-color: #818182; + border-color: #818182 +} + +.list-group-item-dark { + color: #1b1e21; + background-color: #c6c8ca +} + +a.list-group-item-dark, +button.list-group-item-dark { + color: #1b1e21 +} + +a.list-group-item-dark:focus, +a.list-group-item-dark:hover, +button.list-group-item-dark:focus, +button.list-group-item-dark:hover { + color: #1b1e21; + background-color: #b9bbbe +} + +a.list-group-item-dark.active, +button.list-group-item-dark.active { + color: #fff; + background-color: #1b1e21; + border-color: #1b1e21 +} + +.close { + float: right; + font-size: 1.5rem; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .5 +} + +.close:focus, +.close:hover { + color: #000; + text-decoration: none; + opacity: .75 +} + +button.close { + padding: 0; + background: 0 0; + border: 0; + -webkit-appearance: none +} + +.modal-open { + overflow: hidden +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + outline: 0 +} + +.modal.fade .modal-dialog { + transition: -webkit-transform .3s ease-out; + transition: transform .3s ease-out; + transition: transform .3s ease-out, -webkit-transform .3s ease-out; + -webkit-transform: translate(0, -25%); + transform: translate(0, -25%) +} + +.modal.show .modal-dialog { + -webkit-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; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: .3rem; + outline: 0 +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000 +} + +.modal-backdrop.fade { + opacity: 0 +} + +.modal-backdrop.show { + opacity: .5 +} + +.modal-header { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 15px; + border-bottom: 1px solid #e9ecef +} + +.modal-title { + margin-bottom: 0; + line-height: 1.5 +} + +.modal-body { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 15px +} + +.modal-footer { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 15px; + border-top: 1px solid #e9ecef +} + +.modal-footer>:not(:first-child) { + margin-left: .25rem +} + +.modal-footer>:not(:last-child) { + margin-right: .25rem +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll +} + +@media (min-width:576px) { + .modal-dialog { + max-width: 500px; + margin: 30px auto + } + .modal-sm { + max-width: 300px + } +} + +@media (min-width:992px) { + .modal-lg { + max-width: 800px + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: .875rem; + word-wrap: break-word; + opacity: 0 +} + +.tooltip.show { + opacity: .9 +} + +.tooltip .arrow { + position: absolute; + display: block; + width: 5px; + height: 5px +} + +.tooltip.bs-tooltip-auto[x-placement^=top], +.tooltip.bs-tooltip-top { + padding: 5px 0 +} + +.tooltip.bs-tooltip-auto[x-placement^=top] .arrow, +.tooltip.bs-tooltip-top .arrow { + bottom: 0 +} + +.tooltip.bs-tooltip-auto[x-placement^=top] .arrow::before, +.tooltip.bs-tooltip-top .arrow::before { + margin-left: -3px; + content: ""; + border-width: 5px 5px 0; + border-top-color: #000 +} + +.tooltip.bs-tooltip-auto[x-placement^=right], +.tooltip.bs-tooltip-right { + padding: 0 5px +} + +.tooltip.bs-tooltip-auto[x-placement^=right] .arrow, +.tooltip.bs-tooltip-right .arrow { + left: 0 +} + +.tooltip.bs-tooltip-auto[x-placement^=right] .arrow::before, +.tooltip.bs-tooltip-right .arrow::before { + margin-top: -3px; + content: ""; + border-width: 5px 5px 5px 0; + border-right-color: #000 +} + +.tooltip.bs-tooltip-auto[x-placement^=bottom], +.tooltip.bs-tooltip-bottom { + padding: 5px 0 +} + +.tooltip.bs-tooltip-auto[x-placement^=bottom] .arrow, +.tooltip.bs-tooltip-bottom .arrow { + top: 0 +} + +.tooltip.bs-tooltip-auto[x-placement^=bottom] .arrow::before, +.tooltip.bs-tooltip-bottom .arrow::before { + margin-left: -3px; + content: ""; + border-width: 0 5px 5px; + border-bottom-color: #000 +} + +.tooltip.bs-tooltip-auto[x-placement^=left], +.tooltip.bs-tooltip-left { + padding: 0 5px +} + +.tooltip.bs-tooltip-auto[x-placement^=left] .arrow, +.tooltip.bs-tooltip-left .arrow { + right: 0 +} + +.tooltip.bs-tooltip-auto[x-placement^=left] .arrow::before, +.tooltip.bs-tooltip-left .arrow::before { + right: 0; + margin-top: -3px; + content: ""; + border-width: 5px 0 5px 5px; + border-left-color: #000 +} + +.tooltip .arrow::before { + position: absolute; + border-color: transparent; + border-style: solid +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: .25rem +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + padding: 1px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: .875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: .3rem +} + +.popover .arrow { + position: absolute; + display: block; + width: 10px; + height: 5px +} + +.popover .arrow::after, +.popover .arrow::before { + position: absolute; + display: block; + border-color: transparent; + border-style: solid +} + +.popover .arrow::before { + content: ""; + border-width: 11px +} + +.popover .arrow::after { + content: ""; + border-width: 11px +} + +.popover.bs-popover-auto[x-placement^=top], +.popover.bs-popover-top { + margin-bottom: 10px +} + +.popover.bs-popover-auto[x-placement^=top] .arrow, +.popover.bs-popover-top .arrow { + bottom: 0 +} + +.popover.bs-popover-auto[x-placement^=top] .arrow::after, +.popover.bs-popover-auto[x-placement^=top] .arrow::before, +.popover.bs-popover-top .arrow::after, +.popover.bs-popover-top .arrow::before { + border-bottom-width: 0 +} + +.popover.bs-popover-auto[x-placement^=top] .arrow::before, +.popover.bs-popover-top .arrow::before { + bottom: -11px; + margin-left: -6px; + border-top-color: rgba(0, 0, 0, .25) +} + +.popover.bs-popover-auto[x-placement^=top] .arrow::after, +.popover.bs-popover-top .arrow::after { + bottom: -10px; + margin-left: -6px; + border-top-color: #fff +} + +.popover.bs-popover-auto[x-placement^=right], +.popover.bs-popover-right { + margin-left: 10px +} + +.popover.bs-popover-auto[x-placement^=right] .arrow, +.popover.bs-popover-right .arrow { + left: 0 +} + +.popover.bs-popover-auto[x-placement^=right] .arrow::after, +.popover.bs-popover-auto[x-placement^=right] .arrow::before, +.popover.bs-popover-right .arrow::after, +.popover.bs-popover-right .arrow::before { + margin-top: -8px; + border-left-width: 0 +} + +.popover.bs-popover-auto[x-placement^=right] .arrow::before, +.popover.bs-popover-right .arrow::before { + left: -11px; + border-right-color: rgba(0, 0, 0, .25) +} + +.popover.bs-popover-auto[x-placement^=right] .arrow::after, +.popover.bs-popover-right .arrow::after { + left: -10px; + border-right-color: #fff +} + +.popover.bs-popover-auto[x-placement^=bottom], +.popover.bs-popover-bottom { + margin-top: 10px +} + +.popover.bs-popover-auto[x-placement^=bottom] .arrow, +.popover.bs-popover-bottom .arrow { + top: 0 +} + +.popover.bs-popover-auto[x-placement^=bottom] .arrow::after, +.popover.bs-popover-auto[x-placement^=bottom] .arrow::before, +.popover.bs-popover-bottom .arrow::after, +.popover.bs-popover-bottom .arrow::before { + margin-left: -7px; + border-top-width: 0 +} + +.popover.bs-popover-auto[x-placement^=bottom] .arrow::before, +.popover.bs-popover-bottom .arrow::before { + top: -11px; + border-bottom-color: rgba(0, 0, 0, .25) +} + +.popover.bs-popover-auto[x-placement^=bottom] .arrow::after, +.popover.bs-popover-bottom .arrow::after { + top: -10px; + border-bottom-color: #fff +} + +.popover.bs-popover-auto[x-placement^=bottom] .popover-header::before, +.popover.bs-popover-bottom .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 20px; + margin-left: -10px; + content: ""; + border-bottom: 1px solid #f7f7f7 +} + +.popover.bs-popover-auto[x-placement^=left], +.popover.bs-popover-left { + margin-right: 10px +} + +.popover.bs-popover-auto[x-placement^=left] .arrow, +.popover.bs-popover-left .arrow { + right: 0 +} + +.popover.bs-popover-auto[x-placement^=left] .arrow::after, +.popover.bs-popover-auto[x-placement^=left] .arrow::before, +.popover.bs-popover-left .arrow::after, +.popover.bs-popover-left .arrow::before { + margin-top: -8px; + border-right-width: 0 +} + +.popover.bs-popover-auto[x-placement^=left] .arrow::before, +.popover.bs-popover-left .arrow::before { + right: -11px; + border-left-color: rgba(0, 0, 0, .25) +} + +.popover.bs-popover-auto[x-placement^=left] .arrow::after, +.popover.bs-popover-left .arrow::after { + right: -10px; + border-left-color: #fff +} + +.popover-header { + padding: 8px 14px; + margin-bottom: 0; + font-size: 1rem; + color: inherit; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-top-left-radius: calc(.3rem - 1px); + border-top-right-radius: calc(.3rem - 1px) +} + +.popover-header:empty { + display: none +} + +.popover-body { + padding: 9px 14px; + color: #212529 +} + +.carousel { + position: relative +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden +} + +.carousel-item { + position: relative; + display: none; + -ms-flex-align: center; + align-items: center; + width: 100%; + transition: -webkit-transform .6s ease; + transition: transform .6s ease; + transition: transform .6s ease, -webkit-transform .6s ease; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px +} + +.carousel-item-next, +.carousel-item-prev, +.carousel-item.active { + display: block +} + +.carousel-item-next, +.carousel-item-prev { + position: absolute; + top: 0 +} + +.carousel-item-next.carousel-item-left, +.carousel-item-prev.carousel-item-right { + -webkit-transform: translateX(0); + transform: translateX(0) +} + +@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)) { + .carousel-item-next.carousel-item-left, + .carousel-item-prev.carousel-item-right { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } +} + +.active.carousel-item-right, +.carousel-item-next { + -webkit-transform: translateX(100%); + transform: translateX(100%) +} + +@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)) { + .active.carousel-item-right, + .carousel-item-next { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0) + } +} + +.active.carousel-item-left, +.carousel-item-prev { + -webkit-transform: translateX(-100%); + transform: translateX(-100%) +} + +@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)) { + .active.carousel-item-left, + .carousel-item-prev { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0) + } +} + +.carousel-control-next, +.carousel-control-prev { + position: absolute; + top: 0; + bottom: 0; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: .5 +} + +.carousel-control-next:focus, +.carousel-control-next:hover, +.carousel-control-prev:focus, +.carousel-control-prev:hover { + color: #fff; + text-decoration: none; + outline: 0; + opacity: .9 +} + +.carousel-control-prev { + left: 0 +} + +.carousel-control-next { + right: 0 +} + +.carousel-control-next-icon, +.carousel-control-prev-icon { + display: inline-block; + width: 20px; + height: 20px; + background: transparent no-repeat center center; + background-size: 100% 100% +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M4 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E") +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M1.5 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E") +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 10px; + left: 0; + z-index: 15; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none +} + +.carousel-indicators li { + position: relative; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + background-color: rgba(255, 255, 255, .5) +} + +.carousel-indicators li::before { + position: absolute; + top: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: "" +} + +.carousel-indicators li::after { + position: absolute; + bottom: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: "" +} + +.carousel-indicators .active { + background-color: #fff +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center +} + +.align-baseline { + vertical-align: baseline!important +} + +.align-top { + vertical-align: top!important +} + +.align-middle { + vertical-align: middle!important +} + +.align-bottom { + vertical-align: bottom!important +} + +.align-text-bottom { + vertical-align: text-bottom!important +} + +.align-text-top { + vertical-align: text-top!important +} + +.bg-primary { + background-color: #007bff!important +} + +a.bg-primary:focus, +a.bg-primary:hover { + background-color: #0062cc!important +} + +.bg-secondary { + background-color: #868e96!important +} + +a.bg-secondary:focus, +a.bg-secondary:hover { + background-color: #6c757d!important +} + +.bg-success { + background-color: #28a745!important +} + +a.bg-success:focus, +a.bg-success:hover { + background-color: #1e7e34!important +} + +.bg-info { + background-color: #17a2b8!important +} + +a.bg-info:focus, +a.bg-info:hover { + background-color: #117a8b!important +} + +.bg-warning { + background-color: #ffc107!important +} + +a.bg-warning:focus, +a.bg-warning:hover { + background-color: #d39e00!important +} + +.bg-danger { + background-color: #dc3545!important +} + +a.bg-danger:focus, +a.bg-danger:hover { + background-color: #bd2130!important +} + +.bg-light { + background-color: #f8f9fa!important +} + +a.bg-light:focus, +a.bg-light:hover { + background-color: #dae0e5!important +} + +.bg-dark { + background-color: #343a40!important +} + +a.bg-dark:focus, +a.bg-dark:hover { + background-color: #1d2124!important +} + +.bg-white { + background-color: #fff!important +} + +.bg-transparent { + background-color: transparent!important +} + +.border { + border: 1px solid #e9ecef!important +} + +.border-0 { + border: 0!important +} + +.border-top-0 { + border-top: 0!important +} + +.border-right-0 { + border-right: 0!important +} + +.border-bottom-0 { + border-bottom: 0!important +} + +.border-left-0 { + border-left: 0!important +} + +.border-primary { + border-color: #007bff!important +} + +.border-secondary { + border-color: #868e96!important +} + +.border-success { + border-color: #28a745!important +} + +.border-info { + border-color: #17a2b8!important +} + +.border-warning { + border-color: #ffc107!important +} + +.border-danger { + border-color: #dc3545!important +} + +.border-light { + border-color: #f8f9fa!important +} + +.border-dark { + border-color: #343a40!important +} + +.border-white { + border-color: #fff!important +} + +.rounded { + border-radius: .25rem!important +} + +.rounded-top { + border-top-left-radius: .25rem!important; + border-top-right-radius: .25rem!important +} + +.rounded-right { + border-top-right-radius: .25rem!important; + border-bottom-right-radius: .25rem!important +} + +.rounded-bottom { + border-bottom-right-radius: .25rem!important; + border-bottom-left-radius: .25rem!important +} + +.rounded-left { + border-top-left-radius: .25rem!important; + border-bottom-left-radius: .25rem!important +} + +.rounded-circle { + border-radius: 50% +} + +.rounded-0 { + border-radius: 0 +} + +.clearfix::after { + display: block; + clear: both; + content: "" +} + +.d-none { + display: none!important +} + +.d-inline { + display: inline!important +} + +.d-inline-block { + display: inline-block!important +} + +.d-block { + display: block!important +} + +.d-table { + display: table!important +} + +.d-table-cell { + display: table-cell!important +} + +.d-flex { + display: -ms-flexbox!important; + display: flex!important +} + +.d-inline-flex { + display: -ms-inline-flexbox!important; + display: inline-flex!important +} + +@media (min-width:576px) { + .d-sm-none { + display: none!important + } + .d-sm-inline { + display: inline!important + } + .d-sm-inline-block { + display: inline-block!important + } + .d-sm-block { + display: block!important + } + .d-sm-table { + display: table!important + } + .d-sm-table-cell { + display: table-cell!important + } + .d-sm-flex { + display: -ms-flexbox!important; + display: flex!important + } + .d-sm-inline-flex { + display: -ms-inline-flexbox!important; + display: inline-flex!important + } +} + +@media (min-width:768px) { + .d-md-none { + display: none!important + } + .d-md-inline { + display: inline!important + } + .d-md-inline-block { + display: inline-block!important + } + .d-md-block { + display: block!important + } + .d-md-table { + display: table!important + } + .d-md-table-cell { + display: table-cell!important + } + .d-md-flex { + display: -ms-flexbox!important; + display: flex!important + } + .d-md-inline-flex { + display: -ms-inline-flexbox!important; + display: inline-flex!important + } +} + +@media (min-width:992px) { + .d-lg-none { + display: none!important + } + .d-lg-inline { + display: inline!important + } + .d-lg-inline-block { + display: inline-block!important + } + .d-lg-block { + display: block!important + } + .d-lg-table { + display: table!important + } + .d-lg-table-cell { + display: table-cell!important + } + .d-lg-flex { + display: -ms-flexbox!important; + display: flex!important + } + .d-lg-inline-flex { + display: -ms-inline-flexbox!important; + display: inline-flex!important + } +} + +@media (min-width:1200px) { + .d-xl-none { + display: none!important + } + .d-xl-inline { + display: inline!important + } + .d-xl-inline-block { + display: inline-block!important + } + .d-xl-block { + display: block!important + } + .d-xl-table { + display: table!important + } + .d-xl-table-cell { + display: table-cell!important + } + .d-xl-flex { + display: -ms-flexbox!important; + display: flex!important + } + .d-xl-inline-flex { + display: -ms-inline-flexbox!important; + display: inline-flex!important + } +} + +.d-print-block { + display: none!important +} + +@media print { + .d-print-block { + display: block!important + } +} + +.d-print-inline { + display: none!important +} + +@media print { + .d-print-inline { + display: inline!important + } +} + +.d-print-inline-block { + display: none!important +} + +@media print { + .d-print-inline-block { + display: inline-block!important + } +} + +@media print { + .d-print-none { + display: none!important + } +} + +.embed-responsive { + position: relative; + display: block; + width: 100%; + padding: 0; + overflow: hidden +} + +.embed-responsive::before { + display: block; + content: "" +} + +.embed-responsive .embed-responsive-item, +.embed-responsive embed, +.embed-responsive iframe, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0 +} + +.embed-responsive-21by9::before { + padding-top: 42.857143% +} + +.embed-responsive-16by9::before { + padding-top: 56.25% +} + +.embed-responsive-4by3::before { + padding-top: 75% +} + +.embed-responsive-1by1::before { + padding-top: 100% +} + +.flex-row { + -ms-flex-direction: row!important; + flex-direction: row!important +} + +.flex-column { + -ms-flex-direction: column!important; + flex-direction: column!important +} + +.flex-row-reverse { + -ms-flex-direction: row-reverse!important; + flex-direction: row-reverse!important +} + +.flex-column-reverse { + -ms-flex-direction: column-reverse!important; + flex-direction: column-reverse!important +} + +.flex-wrap { + -ms-flex-wrap: wrap!important; + flex-wrap: wrap!important +} + +.flex-nowrap { + -ms-flex-wrap: nowrap!important; + flex-wrap: nowrap!important +} + +.flex-wrap-reverse { + -ms-flex-wrap: wrap-reverse!important; + flex-wrap: wrap-reverse!important +} + +.justify-content-start { + -ms-flex-pack: start!important; + justify-content: flex-start!important +} + +.justify-content-end { + -ms-flex-pack: end!important; + justify-content: flex-end!important +} + +.justify-content-center { + -ms-flex-pack: center!important; + justify-content: center!important +} + +.justify-content-between { + -ms-flex-pack: justify!important; + justify-content: space-between!important +} + +.justify-content-around { + -ms-flex-pack: distribute!important; + justify-content: space-around!important +} + +.align-items-start { + -ms-flex-align: start!important; + align-items: flex-start!important +} + +.align-items-end { + -ms-flex-align: end!important; + align-items: flex-end!important +} + +.align-items-center { + -ms-flex-align: center!important; + align-items: center!important +} + +.align-items-baseline { + -ms-flex-align: baseline!important; + align-items: baseline!important +} + +.align-items-stretch { + -ms-flex-align: stretch!important; + align-items: stretch!important +} + +.align-content-start { + -ms-flex-line-pack: start!important; + align-content: flex-start!important +} + +.align-content-end { + -ms-flex-line-pack: end!important; + align-content: flex-end!important +} + +.align-content-center { + -ms-flex-line-pack: center!important; + align-content: center!important +} + +.align-content-between { + -ms-flex-line-pack: justify!important; + align-content: space-between!important +} + +.align-content-around { + -ms-flex-line-pack: distribute!important; + align-content: space-around!important +} + +.align-content-stretch { + -ms-flex-line-pack: stretch!important; + align-content: stretch!important +} + +.align-self-auto { + -ms-flex-item-align: auto!important; + align-self: auto!important +} + +.align-self-start { + -ms-flex-item-align: start!important; + align-self: flex-start!important +} + +.align-self-end { + -ms-flex-item-align: end!important; + align-self: flex-end!important +} + +.align-self-center { + -ms-flex-item-align: center!important; + align-self: center!important +} + +.align-self-baseline { + -ms-flex-item-align: baseline!important; + align-self: baseline!important +} + +.align-self-stretch { + -ms-flex-item-align: stretch!important; + align-self: stretch!important +} + +@media (min-width:576px) { + .flex-sm-row { + -ms-flex-direction: row!important; + flex-direction: row!important + } + .flex-sm-column { + -ms-flex-direction: column!important; + flex-direction: column!important + } + .flex-sm-row-reverse { + -ms-flex-direction: row-reverse!important; + flex-direction: row-reverse!important + } + .flex-sm-column-reverse { + -ms-flex-direction: column-reverse!important; + flex-direction: column-reverse!important + } + .flex-sm-wrap { + -ms-flex-wrap: wrap!important; + flex-wrap: wrap!important + } + .flex-sm-nowrap { + -ms-flex-wrap: nowrap!important; + flex-wrap: nowrap!important + } + .flex-sm-wrap-reverse { + -ms-flex-wrap: wrap-reverse!important; + flex-wrap: wrap-reverse!important + } + .justify-content-sm-start { + -ms-flex-pack: start!important; + justify-content: flex-start!important + } + .justify-content-sm-end { + -ms-flex-pack: end!important; + justify-content: flex-end!important + } + .justify-content-sm-center { + -ms-flex-pack: center!important; + justify-content: center!important + } + .justify-content-sm-between { + -ms-flex-pack: justify!important; + justify-content: space-between!important + } + .justify-content-sm-around { + -ms-flex-pack: distribute!important; + justify-content: space-around!important + } + .align-items-sm-start { + -ms-flex-align: start!important; + align-items: flex-start!important + } + .align-items-sm-end { + -ms-flex-align: end!important; + align-items: flex-end!important + } + .align-items-sm-center { + -ms-flex-align: center!important; + align-items: center!important + } + .align-items-sm-baseline { + -ms-flex-align: baseline!important; + align-items: baseline!important + } + .align-items-sm-stretch { + -ms-flex-align: stretch!important; + align-items: stretch!important + } + .align-content-sm-start { + -ms-flex-line-pack: start!important; + align-content: flex-start!important + } + .align-content-sm-end { + -ms-flex-line-pack: end!important; + align-content: flex-end!important + } + .align-content-sm-center { + -ms-flex-line-pack: center!important; + align-content: center!important + } + .align-content-sm-between { + -ms-flex-line-pack: justify!important; + align-content: space-between!important + } + .align-content-sm-around { + -ms-flex-line-pack: distribute!important; + align-content: space-around!important + } + .align-content-sm-stretch { + -ms-flex-line-pack: stretch!important; + align-content: stretch!important + } + .align-self-sm-auto { + -ms-flex-item-align: auto!important; + align-self: auto!important + } + .align-self-sm-start { + -ms-flex-item-align: start!important; + align-self: flex-start!important + } + .align-self-sm-end { + -ms-flex-item-align: end!important; + align-self: flex-end!important + } + .align-self-sm-center { + -ms-flex-item-align: center!important; + align-self: center!important + } + .align-self-sm-baseline { + -ms-flex-item-align: baseline!important; + align-self: baseline!important + } + .align-self-sm-stretch { + -ms-flex-item-align: stretch!important; + align-self: stretch!important + } +} + +@media (min-width:768px) { + .flex-md-row { + -ms-flex-direction: row!important; + flex-direction: row!important + } + .flex-md-column { + -ms-flex-direction: column!important; + flex-direction: column!important + } + .flex-md-row-reverse { + -ms-flex-direction: row-reverse!important; + flex-direction: row-reverse!important + } + .flex-md-column-reverse { + -ms-flex-direction: column-reverse!important; + flex-direction: column-reverse!important + } + .flex-md-wrap { + -ms-flex-wrap: wrap!important; + flex-wrap: wrap!important + } + .flex-md-nowrap { + -ms-flex-wrap: nowrap!important; + flex-wrap: nowrap!important + } + .flex-md-wrap-reverse { + -ms-flex-wrap: wrap-reverse!important; + flex-wrap: wrap-reverse!important + } + .justify-content-md-start { + -ms-flex-pack: start!important; + justify-content: flex-start!important + } + .justify-content-md-end { + -ms-flex-pack: end!important; + justify-content: flex-end!important + } + .justify-content-md-center { + -ms-flex-pack: center!important; + justify-content: center!important + } + .justify-content-md-between { + -ms-flex-pack: justify!important; + justify-content: space-between!important + } + .justify-content-md-around { + -ms-flex-pack: distribute!important; + justify-content: space-around!important + } + .align-items-md-start { + -ms-flex-align: start!important; + align-items: flex-start!important + } + .align-items-md-end { + -ms-flex-align: end!important; + align-items: flex-end!important + } + .align-items-md-center { + -ms-flex-align: center!important; + align-items: center!important + } + .align-items-md-baseline { + -ms-flex-align: baseline!important; + align-items: baseline!important + } + .align-items-md-stretch { + -ms-flex-align: stretch!important; + align-items: stretch!important + } + .align-content-md-start { + -ms-flex-line-pack: start!important; + align-content: flex-start!important + } + .align-content-md-end { + -ms-flex-line-pack: end!important; + align-content: flex-end!important + } + .align-content-md-center { + -ms-flex-line-pack: center!important; + align-content: center!important + } + .align-content-md-between { + -ms-flex-line-pack: justify!important; + align-content: space-between!important + } + .align-content-md-around { + -ms-flex-line-pack: distribute!important; + align-content: space-around!important + } + .align-content-md-stretch { + -ms-flex-line-pack: stretch!important; + align-content: stretch!important + } + .align-self-md-auto { + -ms-flex-item-align: auto!important; + align-self: auto!important + } + .align-self-md-start { + -ms-flex-item-align: start!important; + align-self: flex-start!important + } + .align-self-md-end { + -ms-flex-item-align: end!important; + align-self: flex-end!important + } + .align-self-md-center { + -ms-flex-item-align: center!important; + align-self: center!important + } + .align-self-md-baseline { + -ms-flex-item-align: baseline!important; + align-self: baseline!important + } + .align-self-md-stretch { + -ms-flex-item-align: stretch!important; + align-self: stretch!important + } +} + +@media (min-width:992px) { + .flex-lg-row { + -ms-flex-direction: row!important; + flex-direction: row!important + } + .flex-lg-column { + -ms-flex-direction: column!important; + flex-direction: column!important + } + .flex-lg-row-reverse { + -ms-flex-direction: row-reverse!important; + flex-direction: row-reverse!important + } + .flex-lg-column-reverse { + -ms-flex-direction: column-reverse!important; + flex-direction: column-reverse!important + } + .flex-lg-wrap { + -ms-flex-wrap: wrap!important; + flex-wrap: wrap!important + } + .flex-lg-nowrap { + -ms-flex-wrap: nowrap!important; + flex-wrap: nowrap!important + } + .flex-lg-wrap-reverse { + -ms-flex-wrap: wrap-reverse!important; + flex-wrap: wrap-reverse!important + } + .justify-content-lg-start { + -ms-flex-pack: start!important; + justify-content: flex-start!important + } + .justify-content-lg-end { + -ms-flex-pack: end!important; + justify-content: flex-end!important + } + .justify-content-lg-center { + -ms-flex-pack: center!important; + justify-content: center!important + } + .justify-content-lg-between { + -ms-flex-pack: justify!important; + justify-content: space-between!important + } + .justify-content-lg-around { + -ms-flex-pack: distribute!important; + justify-content: space-around!important + } + .align-items-lg-start { + -ms-flex-align: start!important; + align-items: flex-start!important + } + .align-items-lg-end { + -ms-flex-align: end!important; + align-items: flex-end!important + } + .align-items-lg-center { + -ms-flex-align: center!important; + align-items: center!important + } + .align-items-lg-baseline { + -ms-flex-align: baseline!important; + align-items: baseline!important + } + .align-items-lg-stretch { + -ms-flex-align: stretch!important; + align-items: stretch!important + } + .align-content-lg-start { + -ms-flex-line-pack: start!important; + align-content: flex-start!important + } + .align-content-lg-end { + -ms-flex-line-pack: end!important; + align-content: flex-end!important + } + .align-content-lg-center { + -ms-flex-line-pack: center!important; + align-content: center!important + } + .align-content-lg-between { + -ms-flex-line-pack: justify!important; + align-content: space-between!important + } + .align-content-lg-around { + -ms-flex-line-pack: distribute!important; + align-content: space-around!important + } + .align-content-lg-stretch { + -ms-flex-line-pack: stretch!important; + align-content: stretch!important + } + .align-self-lg-auto { + -ms-flex-item-align: auto!important; + align-self: auto!important + } + .align-self-lg-start { + -ms-flex-item-align: start!important; + align-self: flex-start!important + } + .align-self-lg-end { + -ms-flex-item-align: end!important; + align-self: flex-end!important + } + .align-self-lg-center { + -ms-flex-item-align: center!important; + align-self: center!important + } + .align-self-lg-baseline { + -ms-flex-item-align: baseline!important; + align-self: baseline!important + } + .align-self-lg-stretch { + -ms-flex-item-align: stretch!important; + align-self: stretch!important + } +} + +@media (min-width:1200px) { + .flex-xl-row { + -ms-flex-direction: row!important; + flex-direction: row!important + } + .flex-xl-column { + -ms-flex-direction: column!important; + flex-direction: column!important + } + .flex-xl-row-reverse { + -ms-flex-direction: row-reverse!important; + flex-direction: row-reverse!important + } + .flex-xl-column-reverse { + -ms-flex-direction: column-reverse!important; + flex-direction: column-reverse!important + } + .flex-xl-wrap { + -ms-flex-wrap: wrap!important; + flex-wrap: wrap!important + } + .flex-xl-nowrap { + -ms-flex-wrap: nowrap!important; + flex-wrap: nowrap!important + } + .flex-xl-wrap-reverse { + -ms-flex-wrap: wrap-reverse!important; + flex-wrap: wrap-reverse!important + } + .justify-content-xl-start { + -ms-flex-pack: start!important; + justify-content: flex-start!important + } + .justify-content-xl-end { + -ms-flex-pack: end!important; + justify-content: flex-end!important + } + .justify-content-xl-center { + -ms-flex-pack: center!important; + justify-content: center!important + } + .justify-content-xl-between { + -ms-flex-pack: justify!important; + justify-content: space-between!important + } + .justify-content-xl-around { + -ms-flex-pack: distribute!important; + justify-content: space-around!important + } + .align-items-xl-start { + -ms-flex-align: start!important; + align-items: flex-start!important + } + .align-items-xl-end { + -ms-flex-align: end!important; + align-items: flex-end!important + } + .align-items-xl-center { + -ms-flex-align: center!important; + align-items: center!important + } + .align-items-xl-baseline { + -ms-flex-align: baseline!important; + align-items: baseline!important + } + .align-items-xl-stretch { + -ms-flex-align: stretch!important; + align-items: stretch!important + } + .align-content-xl-start { + -ms-flex-line-pack: start!important; + align-content: flex-start!important + } + .align-content-xl-end { + -ms-flex-line-pack: end!important; + align-content: flex-end!important + } + .align-content-xl-center { + -ms-flex-line-pack: center!important; + align-content: center!important + } + .align-content-xl-between { + -ms-flex-line-pack: justify!important; + align-content: space-between!important + } + .align-content-xl-around { + -ms-flex-line-pack: distribute!important; + align-content: space-around!important + } + .align-content-xl-stretch { + -ms-flex-line-pack: stretch!important; + align-content: stretch!important + } + .align-self-xl-auto { + -ms-flex-item-align: auto!important; + align-self: auto!important + } + .align-self-xl-start { + -ms-flex-item-align: start!important; + align-self: flex-start!important + } + .align-self-xl-end { + -ms-flex-item-align: end!important; + align-self: flex-end!important + } + .align-self-xl-center { + -ms-flex-item-align: center!important; + align-self: center!important + } + .align-self-xl-baseline { + -ms-flex-item-align: baseline!important; + align-self: baseline!important + } + .align-self-xl-stretch { + -ms-flex-item-align: stretch!important; + align-self: stretch!important + } +} + +.float-left { + float: left!important +} + +.float-right { + float: right!important +} + +.float-none { + float: none!important +} + +@media (min-width:576px) { + .float-sm-left { + float: left!important + } + .float-sm-right { + float: right!important + } + .float-sm-none { + float: none!important + } +} + +@media (min-width:768px) { + .float-md-left { + float: left!important + } + .float-md-right { + float: right!important + } + .float-md-none { + float: none!important + } +} + +@media (min-width:992px) { + .float-lg-left { + float: left!important + } + .float-lg-right { + float: right!important + } + .float-lg-none { + float: none!important + } +} + +@media (min-width:1200px) { + .float-xl-left { + float: left!important + } + .float-xl-right { + float: right!important + } + .float-xl-none { + float: none!important + } +} + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030 +} + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030 +} + +@supports ((position:-webkit-sticky) or (position:sticky)) { + .sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020 + } +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + -webkit-clip-path: inset(50%); + clip-path: inset(50%); + border: 0 +} + +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; + -webkit-clip-path: none; + clip-path: none +} + +.w-25 { + width: 25%!important +} + +.w-50 { + width: 50%!important +} + +.w-75 { + width: 75%!important +} + +.w-100 { + width: 100%!important +} + +.h-25 { + height: 25%!important +} + +.h-50 { + height: 50%!important +} + +.h-75 { + height: 75%!important +} + +.h-100 { + height: 100%!important +} + +.mw-100 { + max-width: 100%!important +} + +.mh-100 { + max-height: 100%!important +} + +.m-0 { + margin: 0!important +} + +.mt-0 { + margin-top: 0!important +} + +.mr-0 { + margin-right: 0!important +} + +.mb-0 { + margin-bottom: 0!important +} + +.ml-0 { + margin-left: 0!important +} + +.mx-0 { + margin-right: 0!important; + margin-left: 0!important +} + +.my-0 { + margin-top: 0!important; + margin-bottom: 0!important +} + +.m-1 { + margin: .25rem!important +} + +.mt-1 { + margin-top: .25rem!important +} + +.mr-1 { + margin-right: .25rem!important +} + +.mb-1 { + margin-bottom: .25rem!important +} + +.ml-1 { + margin-left: .25rem!important +} + +.mx-1 { + margin-right: .25rem!important; + margin-left: .25rem!important +} + +.my-1 { + margin-top: .25rem!important; + margin-bottom: .25rem!important +} + +.m-2 { + margin: .5rem!important +} + +.mt-2 { + margin-top: .5rem!important +} + +.mr-2 { + margin-right: .5rem!important +} + +.mb-2 { + margin-bottom: .5rem!important +} + +.ml-2 { + margin-left: .5rem!important +} + +.mx-2 { + margin-right: .5rem!important; + margin-left: .5rem!important +} + +.my-2 { + margin-top: .5rem!important; + margin-bottom: .5rem!important +} + +.m-3 { + margin: 1rem!important +} + +.mt-3 { + margin-top: 1rem!important +} + +.mr-3 { + margin-right: 1rem!important +} + +.mb-3 { + margin-bottom: 1rem!important +} + +.ml-3 { + margin-left: 1rem!important +} + +.mx-3 { + margin-right: 1rem!important; + margin-left: 1rem!important +} + +.my-3 { + margin-top: 1rem!important; + margin-bottom: 1rem!important +} + +.m-4 { + margin: 1.5rem!important +} + +.mt-4 { + margin-top: 1.5rem!important +} + +.mr-4 { + margin-right: 1.5rem!important +} + +.mb-4 { + margin-bottom: 1.5rem!important +} + +.ml-4 { + margin-left: 1.5rem!important +} + +.mx-4 { + margin-right: 1.5rem!important; + margin-left: 1.5rem!important +} + +.my-4 { + margin-top: 1.5rem!important; + margin-bottom: 1.5rem!important +} + +.m-5 { + margin: 3rem!important +} + +.mt-5 { + margin-top: 3rem!important +} + +.mr-5 { + margin-right: 3rem!important +} + +.mb-5 { + margin-bottom: 3rem!important +} + +.ml-5 { + margin-left: 3rem!important +} + +.mx-5 { + margin-right: 3rem!important; + margin-left: 3rem!important +} + +.my-5 { + margin-top: 3rem!important; + margin-bottom: 3rem!important +} + +.p-0 { + padding: 0!important +} + +.pt-0 { + padding-top: 0!important +} + +.pr-0 { + padding-right: 0!important +} + +.pb-0 { + padding-bottom: 0!important +} + +.pl-0 { + padding-left: 0!important +} + +.px-0 { + padding-right: 0!important; + padding-left: 0!important +} + +.py-0 { + padding-top: 0!important; + padding-bottom: 0!important +} + +.p-1 { + padding: .25rem!important +} + +.pt-1 { + padding-top: .25rem!important +} + +.pr-1 { + padding-right: .25rem!important +} + +.pb-1 { + padding-bottom: .25rem!important +} + +.pl-1 { + padding-left: .25rem!important +} + +.px-1 { + padding-right: .25rem!important; + padding-left: .25rem!important +} + +.py-1 { + padding-top: .25rem!important; + padding-bottom: .25rem!important +} + +.p-2 { + padding: .5rem!important +} + +.pt-2 { + padding-top: .5rem!important +} + +.pr-2 { + padding-right: .5rem!important +} + +.pb-2 { + padding-bottom: .5rem!important +} + +.pl-2 { + padding-left: .5rem!important +} + +.px-2 { + padding-right: .5rem!important; + padding-left: .5rem!important +} + +.py-2 { + padding-top: .5rem!important; + padding-bottom: .5rem!important +} + +.p-3 { + padding: 1rem!important +} + +.pt-3 { + padding-top: 1rem!important +} + +.pr-3 { + padding-right: 1rem!important +} + +.pb-3 { + padding-bottom: 1rem!important +} + +.pl-3 { + padding-left: 1rem!important +} + +.px-3 { + padding-right: 1rem!important; + padding-left: 1rem!important +} + +.py-3 { + padding-top: 1rem!important; + padding-bottom: 1rem!important +} + +.p-4 { + padding: 1.5rem!important +} + +.pt-4 { + padding-top: 1.5rem!important +} + +.pr-4 { + padding-right: 1.5rem!important +} + +.pb-4 { + padding-bottom: 1.5rem!important +} + +.pl-4 { + padding-left: 1.5rem!important +} + +.px-4 { + padding-right: 1.5rem!important; + padding-left: 1.5rem!important +} + +.py-4 { + padding-top: 1.5rem!important; + padding-bottom: 1.5rem!important +} + +.p-5 { + padding: 3rem!important +} + +.pt-5 { + padding-top: 3rem!important +} + +.pr-5 { + padding-right: 3rem!important +} + +.pb-5 { + padding-bottom: 3rem!important +} + +.pl-5 { + padding-left: 3rem!important +} + +.px-5 { + padding-right: 3rem!important; + padding-left: 3rem!important +} + +.py-5 { + padding-top: 3rem!important; + padding-bottom: 3rem!important +} + +.m-auto { + margin: auto!important +} + +.mt-auto { + margin-top: auto!important +} + +.mr-auto { + margin-right: auto!important +} + +.mb-auto { + margin-bottom: auto!important +} + +.ml-auto { + margin-left: auto!important +} + +.mx-auto { + margin-right: auto!important; + margin-left: auto!important +} + +.my-auto { + margin-top: auto!important; + margin-bottom: auto!important +} + +@media (min-width:576px) { + .m-sm-0 { + margin: 0!important + } + .mt-sm-0 { + margin-top: 0!important + } + .mr-sm-0 { + margin-right: 0!important + } + .mb-sm-0 { + margin-bottom: 0!important + } + .ml-sm-0 { + margin-left: 0!important + } + .mx-sm-0 { + margin-right: 0!important; + margin-left: 0!important + } + .my-sm-0 { + margin-top: 0!important; + margin-bottom: 0!important + } + .m-sm-1 { + margin: .25rem!important + } + .mt-sm-1 { + margin-top: .25rem!important + } + .mr-sm-1 { + margin-right: .25rem!important + } + .mb-sm-1 { + margin-bottom: .25rem!important + } + .ml-sm-1 { + margin-left: .25rem!important + } + .mx-sm-1 { + margin-right: .25rem!important; + margin-left: .25rem!important + } + .my-sm-1 { + margin-top: .25rem!important; + margin-bottom: .25rem!important + } + .m-sm-2 { + margin: .5rem!important + } + .mt-sm-2 { + margin-top: .5rem!important + } + .mr-sm-2 { + margin-right: .5rem!important + } + .mb-sm-2 { + margin-bottom: .5rem!important + } + .ml-sm-2 { + margin-left: .5rem!important + } + .mx-sm-2 { + margin-right: .5rem!important; + margin-left: .5rem!important + } + .my-sm-2 { + margin-top: .5rem!important; + margin-bottom: .5rem!important + } + .m-sm-3 { + margin: 1rem!important + } + .mt-sm-3 { + margin-top: 1rem!important + } + .mr-sm-3 { + margin-right: 1rem!important + } + .mb-sm-3 { + margin-bottom: 1rem!important + } + .ml-sm-3 { + margin-left: 1rem!important + } + .mx-sm-3 { + margin-right: 1rem!important; + margin-left: 1rem!important + } + .my-sm-3 { + margin-top: 1rem!important; + margin-bottom: 1rem!important + } + .m-sm-4 { + margin: 1.5rem!important + } + .mt-sm-4 { + margin-top: 1.5rem!important + } + .mr-sm-4 { + margin-right: 1.5rem!important + } + .mb-sm-4 { + margin-bottom: 1.5rem!important + } + .ml-sm-4 { + margin-left: 1.5rem!important + } + .mx-sm-4 { + margin-right: 1.5rem!important; + margin-left: 1.5rem!important + } + .my-sm-4 { + margin-top: 1.5rem!important; + margin-bottom: 1.5rem!important + } + .m-sm-5 { + margin: 3rem!important + } + .mt-sm-5 { + margin-top: 3rem!important + } + .mr-sm-5 { + margin-right: 3rem!important + } + .mb-sm-5 { + margin-bottom: 3rem!important + } + .ml-sm-5 { + margin-left: 3rem!important + } + .mx-sm-5 { + margin-right: 3rem!important; + margin-left: 3rem!important + } + .my-sm-5 { + margin-top: 3rem!important; + margin-bottom: 3rem!important + } + .p-sm-0 { + padding: 0!important + } + .pt-sm-0 { + padding-top: 0!important + } + .pr-sm-0 { + padding-right: 0!important + } + .pb-sm-0 { + padding-bottom: 0!important + } + .pl-sm-0 { + padding-left: 0!important + } + .px-sm-0 { + padding-right: 0!important; + padding-left: 0!important + } + .py-sm-0 { + padding-top: 0!important; + padding-bottom: 0!important + } + .p-sm-1 { + padding: .25rem!important + } + .pt-sm-1 { + padding-top: .25rem!important + } + .pr-sm-1 { + padding-right: .25rem!important + } + .pb-sm-1 { + padding-bottom: .25rem!important + } + .pl-sm-1 { + padding-left: .25rem!important + } + .px-sm-1 { + padding-right: .25rem!important; + padding-left: .25rem!important + } + .py-sm-1 { + padding-top: .25rem!important; + padding-bottom: .25rem!important + } + .p-sm-2 { + padding: .5rem!important + } + .pt-sm-2 { + padding-top: .5rem!important + } + .pr-sm-2 { + padding-right: .5rem!important + } + .pb-sm-2 { + padding-bottom: .5rem!important + } + .pl-sm-2 { + padding-left: .5rem!important + } + .px-sm-2 { + padding-right: .5rem!important; + padding-left: .5rem!important + } + .py-sm-2 { + padding-top: .5rem!important; + padding-bottom: .5rem!important + } + .p-sm-3 { + padding: 1rem!important + } + .pt-sm-3 { + padding-top: 1rem!important + } + .pr-sm-3 { + padding-right: 1rem!important + } + .pb-sm-3 { + padding-bottom: 1rem!important + } + .pl-sm-3 { + padding-left: 1rem!important + } + .px-sm-3 { + padding-right: 1rem!important; + padding-left: 1rem!important + } + .py-sm-3 { + padding-top: 1rem!important; + padding-bottom: 1rem!important + } + .p-sm-4 { + padding: 1.5rem!important + } + .pt-sm-4 { + padding-top: 1.5rem!important + } + .pr-sm-4 { + padding-right: 1.5rem!important + } + .pb-sm-4 { + padding-bottom: 1.5rem!important + } + .pl-sm-4 { + padding-left: 1.5rem!important + } + .px-sm-4 { + padding-right: 1.5rem!important; + padding-left: 1.5rem!important + } + .py-sm-4 { + padding-top: 1.5rem!important; + padding-bottom: 1.5rem!important + } + .p-sm-5 { + padding: 3rem!important + } + .pt-sm-5 { + padding-top: 3rem!important + } + .pr-sm-5 { + padding-right: 3rem!important + } + .pb-sm-5 { + padding-bottom: 3rem!important + } + .pl-sm-5 { + padding-left: 3rem!important + } + .px-sm-5 { + padding-right: 3rem!important; + padding-left: 3rem!important + } + .py-sm-5 { + padding-top: 3rem!important; + padding-bottom: 3rem!important + } + .m-sm-auto { + margin: auto!important + } + .mt-sm-auto { + margin-top: auto!important + } + .mr-sm-auto { + margin-right: auto!important + } + .mb-sm-auto { + margin-bottom: auto!important + } + .ml-sm-auto { + margin-left: auto!important + } + .mx-sm-auto { + margin-right: auto!important; + margin-left: auto!important + } + .my-sm-auto { + margin-top: auto!important; + margin-bottom: auto!important + } +} + +@media (min-width:768px) { + .m-md-0 { + margin: 0!important + } + .mt-md-0 { + margin-top: 0!important + } + .mr-md-0 { + margin-right: 0!important + } + .mb-md-0 { + margin-bottom: 0!important + } + .ml-md-0 { + margin-left: 0!important + } + .mx-md-0 { + margin-right: 0!important; + margin-left: 0!important + } + .my-md-0 { + margin-top: 0!important; + margin-bottom: 0!important + } + .m-md-1 { + margin: .25rem!important + } + .mt-md-1 { + margin-top: .25rem!important + } + .mr-md-1 { + margin-right: .25rem!important + } + .mb-md-1 { + margin-bottom: .25rem!important + } + .ml-md-1 { + margin-left: .25rem!important + } + .mx-md-1 { + margin-right: .25rem!important; + margin-left: .25rem!important + } + .my-md-1 { + margin-top: .25rem!important; + margin-bottom: .25rem!important + } + .m-md-2 { + margin: .5rem!important + } + .mt-md-2 { + margin-top: .5rem!important + } + .mr-md-2 { + margin-right: .5rem!important + } + .mb-md-2 { + margin-bottom: .5rem!important + } + .ml-md-2 { + margin-left: .5rem!important + } + .mx-md-2 { + margin-right: .5rem!important; + margin-left: .5rem!important + } + .my-md-2 { + margin-top: .5rem!important; + margin-bottom: .5rem!important + } + .m-md-3 { + margin: 1rem!important + } + .mt-md-3 { + margin-top: 1rem!important + } + .mr-md-3 { + margin-right: 1rem!important + } + .mb-md-3 { + margin-bottom: 1rem!important + } + .ml-md-3 { + margin-left: 1rem!important + } + .mx-md-3 { + margin-right: 1rem!important; + margin-left: 1rem!important + } + .my-md-3 { + margin-top: 1rem!important; + margin-bottom: 1rem!important + } + .m-md-4 { + margin: 1.5rem!important + } + .mt-md-4 { + margin-top: 1.5rem!important + } + .mr-md-4 { + margin-right: 1.5rem!important + } + .mb-md-4 { + margin-bottom: 1.5rem!important + } + .ml-md-4 { + margin-left: 1.5rem!important + } + .mx-md-4 { + margin-right: 1.5rem!important; + margin-left: 1.5rem!important + } + .my-md-4 { + margin-top: 1.5rem!important; + margin-bottom: 1.5rem!important + } + .m-md-5 { + margin: 3rem!important + } + .mt-md-5 { + margin-top: 3rem!important + } + .mr-md-5 { + margin-right: 3rem!important + } + .mb-md-5 { + margin-bottom: 3rem!important + } + .ml-md-5 { + margin-left: 3rem!important + } + .mx-md-5 { + margin-right: 3rem!important; + margin-left: 3rem!important + } + .my-md-5 { + margin-top: 3rem!important; + margin-bottom: 3rem!important + } + .p-md-0 { + padding: 0!important + } + .pt-md-0 { + padding-top: 0!important + } + .pr-md-0 { + padding-right: 0!important + } + .pb-md-0 { + padding-bottom: 0!important + } + .pl-md-0 { + padding-left: 0!important + } + .px-md-0 { + padding-right: 0!important; + padding-left: 0!important + } + .py-md-0 { + padding-top: 0!important; + padding-bottom: 0!important + } + .p-md-1 { + padding: .25rem!important + } + .pt-md-1 { + padding-top: .25rem!important + } + .pr-md-1 { + padding-right: .25rem!important + } + .pb-md-1 { + padding-bottom: .25rem!important + } + .pl-md-1 { + padding-left: .25rem!important + } + .px-md-1 { + padding-right: .25rem!important; + padding-left: .25rem!important + } + .py-md-1 { + padding-top: .25rem!important; + padding-bottom: .25rem!important + } + .p-md-2 { + padding: .5rem!important + } + .pt-md-2 { + padding-top: .5rem!important + } + .pr-md-2 { + padding-right: .5rem!important + } + .pb-md-2 { + padding-bottom: .5rem!important + } + .pl-md-2 { + padding-left: .5rem!important + } + .px-md-2 { + padding-right: .5rem!important; + padding-left: .5rem!important + } + .py-md-2 { + padding-top: .5rem!important; + padding-bottom: .5rem!important + } + .p-md-3 { + padding: 1rem!important + } + .pt-md-3 { + padding-top: 1rem!important + } + .pr-md-3 { + padding-right: 1rem!important + } + .pb-md-3 { + padding-bottom: 1rem!important + } + .pl-md-3 { + padding-left: 1rem!important + } + .px-md-3 { + padding-right: 1rem!important; + padding-left: 1rem!important + } + .py-md-3 { + padding-top: 1rem!important; + padding-bottom: 1rem!important + } + .p-md-4 { + padding: 1.5rem!important + } + .pt-md-4 { + padding-top: 1.5rem!important + } + .pr-md-4 { + padding-right: 1.5rem!important + } + .pb-md-4 { + padding-bottom: 1.5rem!important + } + .pl-md-4 { + padding-left: 1.5rem!important + } + .px-md-4 { + padding-right: 1.5rem!important; + padding-left: 1.5rem!important + } + .py-md-4 { + padding-top: 1.5rem!important; + padding-bottom: 1.5rem!important + } + .p-md-5 { + padding: 3rem!important + } + .pt-md-5 { + padding-top: 3rem!important + } + .pr-md-5 { + padding-right: 3rem!important + } + .pb-md-5 { + padding-bottom: 3rem!important + } + .pl-md-5 { + padding-left: 3rem!important + } + .px-md-5 { + padding-right: 3rem!important; + padding-left: 3rem!important + } + .py-md-5 { + padding-top: 3rem!important; + padding-bottom: 3rem!important + } + .m-md-auto { + margin: auto!important + } + .mt-md-auto { + margin-top: auto!important + } + .mr-md-auto { + margin-right: auto!important + } + .mb-md-auto { + margin-bottom: auto!important + } + .ml-md-auto { + margin-left: auto!important + } + .mx-md-auto { + margin-right: auto!important; + margin-left: auto!important + } + .my-md-auto { + margin-top: auto!important; + margin-bottom: auto!important + } +} + +@media (min-width:992px) { + .m-lg-0 { + margin: 0!important + } + .mt-lg-0 { + margin-top: 0!important + } + .mr-lg-0 { + margin-right: 0!important + } + .mb-lg-0 { + margin-bottom: 0!important + } + .ml-lg-0 { + margin-left: 0!important + } + .mx-lg-0 { + margin-right: 0!important; + margin-left: 0!important + } + .my-lg-0 { + margin-top: 0!important; + margin-bottom: 0!important + } + .m-lg-1 { + margin: .25rem!important + } + .mt-lg-1 { + margin-top: .25rem!important + } + .mr-lg-1 { + margin-right: .25rem!important + } + .mb-lg-1 { + margin-bottom: .25rem!important + } + .ml-lg-1 { + margin-left: .25rem!important + } + .mx-lg-1 { + margin-right: .25rem!important; + margin-left: .25rem!important + } + .my-lg-1 { + margin-top: .25rem!important; + margin-bottom: .25rem!important + } + .m-lg-2 { + margin: .5rem!important + } + .mt-lg-2 { + margin-top: .5rem!important + } + .mr-lg-2 { + margin-right: .5rem!important + } + .mb-lg-2 { + margin-bottom: .5rem!important + } + .ml-lg-2 { + margin-left: .5rem!important + } + .mx-lg-2 { + margin-right: .5rem!important; + margin-left: .5rem!important + } + .my-lg-2 { + margin-top: .5rem!important; + margin-bottom: .5rem!important + } + .m-lg-3 { + margin: 1rem!important + } + .mt-lg-3 { + margin-top: 1rem!important + } + .mr-lg-3 { + margin-right: 1rem!important + } + .mb-lg-3 { + margin-bottom: 1rem!important + } + .ml-lg-3 { + margin-left: 1rem!important + } + .mx-lg-3 { + margin-right: 1rem!important; + margin-left: 1rem!important + } + .my-lg-3 { + margin-top: 1rem!important; + margin-bottom: 1rem!important + } + .m-lg-4 { + margin: 1.5rem!important + } + .mt-lg-4 { + margin-top: 1.5rem!important + } + .mr-lg-4 { + margin-right: 1.5rem!important + } + .mb-lg-4 { + margin-bottom: 1.5rem!important + } + .ml-lg-4 { + margin-left: 1.5rem!important + } + .mx-lg-4 { + margin-right: 1.5rem!important; + margin-left: 1.5rem!important + } + .my-lg-4 { + margin-top: 1.5rem!important; + margin-bottom: 1.5rem!important + } + .m-lg-5 { + margin: 3rem!important + } + .mt-lg-5 { + margin-top: 3rem!important + } + .mr-lg-5 { + margin-right: 3rem!important + } + .mb-lg-5 { + margin-bottom: 3rem!important + } + .ml-lg-5 { + margin-left: 3rem!important + } + .mx-lg-5 { + margin-right: 3rem!important; + margin-left: 3rem!important + } + .my-lg-5 { + margin-top: 3rem!important; + margin-bottom: 3rem!important + } + .p-lg-0 { + padding: 0!important + } + .pt-lg-0 { + padding-top: 0!important + } + .pr-lg-0 { + padding-right: 0!important + } + .pb-lg-0 { + padding-bottom: 0!important + } + .pl-lg-0 { + padding-left: 0!important + } + .px-lg-0 { + padding-right: 0!important; + padding-left: 0!important + } + .py-lg-0 { + padding-top: 0!important; + padding-bottom: 0!important + } + .p-lg-1 { + padding: .25rem!important + } + .pt-lg-1 { + padding-top: .25rem!important + } + .pr-lg-1 { + padding-right: .25rem!important + } + .pb-lg-1 { + padding-bottom: .25rem!important + } + .pl-lg-1 { + padding-left: .25rem!important + } + .px-lg-1 { + padding-right: .25rem!important; + padding-left: .25rem!important + } + .py-lg-1 { + padding-top: .25rem!important; + padding-bottom: .25rem!important + } + .p-lg-2 { + padding: .5rem!important + } + .pt-lg-2 { + padding-top: .5rem!important + } + .pr-lg-2 { + padding-right: .5rem!important + } + .pb-lg-2 { + padding-bottom: .5rem!important + } + .pl-lg-2 { + padding-left: .5rem!important + } + .px-lg-2 { + padding-right: .5rem!important; + padding-left: .5rem!important + } + .py-lg-2 { + padding-top: .5rem!important; + padding-bottom: .5rem!important + } + .p-lg-3 { + padding: 1rem!important + } + .pt-lg-3 { + padding-top: 1rem!important + } + .pr-lg-3 { + padding-right: 1rem!important + } + .pb-lg-3 { + padding-bottom: 1rem!important + } + .pl-lg-3 { + padding-left: 1rem!important + } + .px-lg-3 { + padding-right: 1rem!important; + padding-left: 1rem!important + } + .py-lg-3 { + padding-top: 1rem!important; + padding-bottom: 1rem!important + } + .p-lg-4 { + padding: 1.5rem!important + } + .pt-lg-4 { + padding-top: 1.5rem!important + } + .pr-lg-4 { + padding-right: 1.5rem!important + } + .pb-lg-4 { + padding-bottom: 1.5rem!important + } + .pl-lg-4 { + padding-left: 1.5rem!important + } + .px-lg-4 { + padding-right: 1.5rem!important; + padding-left: 1.5rem!important + } + .py-lg-4 { + padding-top: 1.5rem!important; + padding-bottom: 1.5rem!important + } + .p-lg-5 { + padding: 3rem!important + } + .pt-lg-5 { + padding-top: 3rem!important + } + .pr-lg-5 { + padding-right: 3rem!important + } + .pb-lg-5 { + padding-bottom: 3rem!important + } + .pl-lg-5 { + padding-left: 3rem!important + } + .px-lg-5 { + padding-right: 3rem!important; + padding-left: 3rem!important + } + .py-lg-5 { + padding-top: 3rem!important; + padding-bottom: 3rem!important + } + .m-lg-auto { + margin: auto!important + } + .mt-lg-auto { + margin-top: auto!important + } + .mr-lg-auto { + margin-right: auto!important + } + .mb-lg-auto { + margin-bottom: auto!important + } + .ml-lg-auto { + margin-left: auto!important + } + .mx-lg-auto { + margin-right: auto!important; + margin-left: auto!important + } + .my-lg-auto { + margin-top: auto!important; + margin-bottom: auto!important + } +} + +@media (min-width:1200px) { + .m-xl-0 { + margin: 0!important + } + .mt-xl-0 { + margin-top: 0!important + } + .mr-xl-0 { + margin-right: 0!important + } + .mb-xl-0 { + margin-bottom: 0!important + } + .ml-xl-0 { + margin-left: 0!important + } + .mx-xl-0 { + margin-right: 0!important; + margin-left: 0!important + } + .my-xl-0 { + margin-top: 0!important; + margin-bottom: 0!important + } + .m-xl-1 { + margin: .25rem!important + } + .mt-xl-1 { + margin-top: .25rem!important + } + .mr-xl-1 { + margin-right: .25rem!important + } + .mb-xl-1 { + margin-bottom: .25rem!important + } + .ml-xl-1 { + margin-left: .25rem!important + } + .mx-xl-1 { + margin-right: .25rem!important; + margin-left: .25rem!important + } + .my-xl-1 { + margin-top: .25rem!important; + margin-bottom: .25rem!important + } + .m-xl-2 { + margin: .5rem!important + } + .mt-xl-2 { + margin-top: .5rem!important + } + .mr-xl-2 { + margin-right: .5rem!important + } + .mb-xl-2 { + margin-bottom: .5rem!important + } + .ml-xl-2 { + margin-left: .5rem!important + } + .mx-xl-2 { + margin-right: .5rem!important; + margin-left: .5rem!important + } + .my-xl-2 { + margin-top: .5rem!important; + margin-bottom: .5rem!important + } + .m-xl-3 { + margin: 1rem!important + } + .mt-xl-3 { + margin-top: 1rem!important + } + .mr-xl-3 { + margin-right: 1rem!important + } + .mb-xl-3 { + margin-bottom: 1rem!important + } + .ml-xl-3 { + margin-left: 1rem!important + } + .mx-xl-3 { + margin-right: 1rem!important; + margin-left: 1rem!important + } + .my-xl-3 { + margin-top: 1rem!important; + margin-bottom: 1rem!important + } + .m-xl-4 { + margin: 1.5rem!important + } + .mt-xl-4 { + margin-top: 1.5rem!important + } + .mr-xl-4 { + margin-right: 1.5rem!important + } + .mb-xl-4 { + margin-bottom: 1.5rem!important + } + .ml-xl-4 { + margin-left: 1.5rem!important + } + .mx-xl-4 { + margin-right: 1.5rem!important; + margin-left: 1.5rem!important + } + .my-xl-4 { + margin-top: 1.5rem!important; + margin-bottom: 1.5rem!important + } + .m-xl-5 { + margin: 3rem!important + } + .mt-xl-5 { + margin-top: 3rem!important + } + .mr-xl-5 { + margin-right: 3rem!important + } + .mb-xl-5 { + margin-bottom: 3rem!important + } + .ml-xl-5 { + margin-left: 3rem!important + } + .mx-xl-5 { + margin-right: 3rem!important; + margin-left: 3rem!important + } + .my-xl-5 { + margin-top: 3rem!important; + margin-bottom: 3rem!important + } + .p-xl-0 { + padding: 0!important + } + .pt-xl-0 { + padding-top: 0!important + } + .pr-xl-0 { + padding-right: 0!important + } + .pb-xl-0 { + padding-bottom: 0!important + } + .pl-xl-0 { + padding-left: 0!important + } + .px-xl-0 { + padding-right: 0!important; + padding-left: 0!important + } + .py-xl-0 { + padding-top: 0!important; + padding-bottom: 0!important + } + .p-xl-1 { + padding: .25rem!important + } + .pt-xl-1 { + padding-top: .25rem!important + } + .pr-xl-1 { + padding-right: .25rem!important + } + .pb-xl-1 { + padding-bottom: .25rem!important + } + .pl-xl-1 { + padding-left: .25rem!important + } + .px-xl-1 { + padding-right: .25rem!important; + padding-left: .25rem!important + } + .py-xl-1 { + padding-top: .25rem!important; + padding-bottom: .25rem!important + } + .p-xl-2 { + padding: .5rem!important + } + .pt-xl-2 { + padding-top: .5rem!important + } + .pr-xl-2 { + padding-right: .5rem!important + } + .pb-xl-2 { + padding-bottom: .5rem!important + } + .pl-xl-2 { + padding-left: .5rem!important + } + .px-xl-2 { + padding-right: .5rem!important; + padding-left: .5rem!important + } + .py-xl-2 { + padding-top: .5rem!important; + padding-bottom: .5rem!important + } + .p-xl-3 { + padding: 1rem!important + } + .pt-xl-3 { + padding-top: 1rem!important + } + .pr-xl-3 { + padding-right: 1rem!important + } + .pb-xl-3 { + padding-bottom: 1rem!important + } + .pl-xl-3 { + padding-left: 1rem!important + } + .px-xl-3 { + padding-right: 1rem!important; + padding-left: 1rem!important + } + .py-xl-3 { + padding-top: 1rem!important; + padding-bottom: 1rem!important + } + .p-xl-4 { + padding: 1.5rem!important + } + .pt-xl-4 { + padding-top: 1.5rem!important + } + .pr-xl-4 { + padding-right: 1.5rem!important + } + .pb-xl-4 { + padding-bottom: 1.5rem!important + } + .pl-xl-4 { + padding-left: 1.5rem!important + } + .px-xl-4 { + padding-right: 1.5rem!important; + padding-left: 1.5rem!important + } + .py-xl-4 { + padding-top: 1.5rem!important; + padding-bottom: 1.5rem!important + } + .p-xl-5 { + padding: 3rem!important + } + .pt-xl-5 { + padding-top: 3rem!important + } + .pr-xl-5 { + padding-right: 3rem!important + } + .pb-xl-5 { + padding-bottom: 3rem!important + } + .pl-xl-5 { + padding-left: 3rem!important + } + .px-xl-5 { + padding-right: 3rem!important; + padding-left: 3rem!important + } + .py-xl-5 { + padding-top: 3rem!important; + padding-bottom: 3rem!important + } + .m-xl-auto { + margin: auto!important + } + .mt-xl-auto { + margin-top: auto!important + } + .mr-xl-auto { + margin-right: auto!important + } + .mb-xl-auto { + margin-bottom: auto!important + } + .ml-xl-auto { + margin-left: auto!important + } + .mx-xl-auto { + margin-right: auto!important; + margin-left: auto!important + } + .my-xl-auto { + margin-top: auto!important; + margin-bottom: auto!important + } +} + +.text-justify { + text-align: justify!important +} + +.text-nowrap { + white-space: nowrap!important +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap +} + +.text-left { + text-align: left!important +} + +.text-right { + text-align: right!important +} + +.text-center { + text-align: center!important +} + +@media (min-width:576px) { + .text-sm-left { + text-align: left!important + } + .text-sm-right { + text-align: right!important + } + .text-sm-center { + text-align: center!important + } +} + +@media (min-width:768px) { + .text-md-left { + text-align: left!important + } + .text-md-right { + text-align: right!important + } + .text-md-center { + text-align: center!important + } +} + +@media (min-width:992px) { + .text-lg-left { + text-align: left!important + } + .text-lg-right { + text-align: right!important + } + .text-lg-center { + text-align: center!important + } +} + +@media (min-width:1200px) { + .text-xl-left { + text-align: left!important + } + .text-xl-right { + text-align: right!important + } + .text-xl-center { + text-align: center!important + } +} + +.text-lowercase { + text-transform: lowercase!important +} + +.text-uppercase { + text-transform: uppercase!important +} + +.text-capitalize { + text-transform: capitalize!important +} + +.font-weight-normal { + font-weight: 400 +} + +.font-weight-bold { + font-weight: 700 +} + +.font-italic { + font-style: italic +} + +.text-white { + color: #fff!important +} + +.text-primary { + color: #007bff!important +} + +a.text-primary:focus, +a.text-primary:hover { + color: #0062cc!important +} + +.text-secondary { + color: #868e96!important +} + +a.text-secondary:focus, +a.text-secondary:hover { + color: #6c757d!important +} + +.text-success { + color: #28a745!important +} + +a.text-success:focus, +a.text-success:hover { + color: #1e7e34!important +} + +.text-info { + color: #17a2b8!important +} + +a.text-info:focus, +a.text-info:hover { + color: #117a8b!important +} + +.text-warning { + color: #ffc107!important +} + +a.text-warning:focus, +a.text-warning:hover { + color: #d39e00!important +} + +.text-danger { + color: #dc3545!important +} + +a.text-danger:focus, +a.text-danger:hover { + color: #bd2130!important +} + +.text-light { + color: #f8f9fa!important +} + +a.text-light:focus, +a.text-light:hover { + color: #dae0e5!important +} + +.text-dark { + color: #343a40!important +} + +a.text-dark:focus, +a.text-dark:hover { + color: #1d2124!important +} + +.text-muted { + color: #868e96!important +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0 +} + +.visible { + visibility: visible!important +} + +.invisible { + visibility: hidden!important +} + +h4.modal-title { + margin:0 +} +/*# sourceMappingURL=bootstrap4.min.css.map */ \ No newline at end of file diff --git a/web/libs/css/main.dash2.css b/web/libs/css/main.dash2.css index 10da0f51..4a25569a 100644 --- a/web/libs/css/main.dash2.css +++ b/web/libs/css/main.dash2.css @@ -70,6 +70,7 @@ nav h4{cursor:default;font-size:95%;padding:16px 40px;font-weight:100;text-trans .truncate{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;} img{max-width:100%} .display-table{display:table;width:100%} +.display-inline{display:inline-block} .display-table-cell{display:table-cell} .small{font-size:80%} .super-center{position:absolute;left:0;top:0;right:0;bottom:0;margin:auto;width: 4em;height: 1em;} @@ -713,4 +714,10 @@ ul.msg_list li .message { .marc-toggle label:active:after { width: 10px; +} + +/*hexagon pattern*/ +.bg-hexagon { + background-color: #054e9f; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='49' viewBox='0 0 28 49'%3E%3Cg fill-rule='evenodd'%3E%3Cg id='hexagons' fill='%23fdfdfd' fill-opacity='0.4' fill-rule='nonzero'%3E%3Cpath d='M13.99 9.25l13 7.5v15l-13 7.5L1 31.75v-15l12.99-7.5zM3 17.9v12.7l10.99 6.34 11-6.35V17.9l-11-6.34L3 17.9zM0 15l12.98-7.5V0h-2v6.35L0 12.69v2.3zm0 18.5L12.98 41v8h-2v-6.85L0 35.81v-2.3zM15 0v7.5L27.99 15H28v-2.31h-.01L17 6.35V0h-2zm0 49v-8l12.99-7.5H28v2.31h-.01L17 42.15V49h-2z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); } \ No newline at end of file diff --git a/web/libs/css/now-ui-kit.css b/web/libs/css/now-ui-kit.css new file mode 100644 index 00000000..4036ed5d --- /dev/null +++ b/web/libs/css/now-ui-kit.css @@ -0,0 +1,7545 @@ +/*! + + ========================================================= + * Now-ui-kit - v1.1.0 + ========================================================= + + * Product Page: http://www.creative-tim.com/product/now-ui-kit + * Copyright 2017 Creative Tim (http://www.creative-tim.com) + * Licensed under MIT (https://github.com/creativetimofficial/now-ui-kit/blob/master/LICENSE.md) + + * Designed by www.invisionapp.com Coded by www.creative-tim.com + + ========================================================= + + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + */ + + +/* brand Colors */ + + +/* light colors */ + + +/* ======================================================================== + * bootstrap-switch - v3.3.2 + * http://www.bootstrap-switch.org + * ======================================================================== + * Copyright 2012-2013 Mattia Larentis + * http://www.apache.org/licenses/LICENSE-2.0 + */ + +.bootstrap-switch { + display: inline-block; + direction: ltr; + cursor: pointer; + border-radius: 30px; + border: 0; + position: relative; + text-align: left; + margin-bottom: 10px; + line-height: 8px; + width: 59px !important; + height: 22px; + outline: none; + z-index: 0; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + vertical-align: middle; + -webkit-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; + margin-right: 20px; + background: rgba(44, 44, 44, 0.2); +} + +.bootstrap-switch .bootstrap-switch-container { + display: inline-flex; + top: 0; + height: 22px; + border-radius: 4px; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + width: 100px !important; +} + +.bootstrap-switch .bootstrap-switch-handle-on, +.bootstrap-switch .bootstrap-switch-handle-off, +.bootstrap-switch .bootstrap-switch-label { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; + display: inline-block !important; + height: 100%; + color: #fff; + padding: 6px 12px; + font-size: 11px; + text-indent: -5px; + line-height: 15px; + -webkit-transition: 0.25s ease-out; + transition: 0.25s ease-out; +} + +.bootstrap-switch .bootstrap-switch-handle-on, +.bootstrap-switch .bootstrap-switch-handle-off { + text-align: center; + z-index: 1; + float: left; + line-height: 11px; + width: 50% !important; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-brown, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-brown { + color: #fff; + background: #f96332; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-blue, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-blue { + color: #fff; + background: #2CA8FF; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-green, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-green { + color: #fff; + background: #18ce0f; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-orange, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-orange { + background: #FFB236; + color: #fff; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-red, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-red { + color: #fff; + background: #FF3636; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default { + color: #fff; +} + +.bootstrap-switch .bootstrap-switch-label { + text-align: center; + z-index: 100; + color: #333333; + background: #ffffff; + width: 22px !important; + height: 22px !important; + margin: 0px -11px; + border-radius: 20px; + position: absolute; + float: left; + top: 0; + left: 50%; + padding: 0; + box-shadow: 0 1px 11px rgba(0, 0, 0, 0.25); +} + +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label { + background-color: rgba(23, 23, 23, 0.4); +} + +.bootstrap-switch.bootstrap-switch-on:hover .bootstrap-switch-label { + width: 27px !important; + margin-left: -16px; +} + +.bootstrap-switch.bootstrap-switch-off:hover .bootstrap-switch-label { + width: 27px !important; + margin-left: -11px; +} + +.bootstrap-switch .bootstrap-switch-handle-on { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.bootstrap-switch .bootstrap-switch-handle-off { + text-indent: 6px; +} + +.bootstrap-switch input[type='radio'], +.bootstrap-switch input[type='checkbox'] { + position: absolute !important; + top: 0; + left: 0; + opacity: 0; + filter: alpha(opacity=0); + z-index: -1; +} + +.bootstrap-switch input[type='radio'].form-control, +.bootstrap-switch input[type='checkbox'].form-control { + height: auto; +} + +.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; +} + +.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} + +.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label { + padding: 6px 16px; + font-size: 18px; + line-height: 1.33; +} + +.bootstrap-switch.bootstrap-switch-disabled, +.bootstrap-switch.bootstrap-switch-readonly, +.bootstrap-switch.bootstrap-switch-indeterminate { + cursor: default !important; +} + +.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label, +.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label, +.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label { + opacity: 0.5; + filter: alpha(opacity=50); + cursor: default !important; +} + +.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container { + -webkit-transition: margin-left 0.5s; + transition: margin-left 0.5s; +} + +.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} + +.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-container { + margin-left: -2px !important; +} + +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-container { + margin-left: -39px !important; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label:before { + background-color: #FFFFFF; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-red~.bootstrap-switch-default { + background-color: #FF3636; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-orange~.bootstrap-switch-default { + background-color: #FFB236; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-green~.bootstrap-switch-default { + background-color: #18ce0f; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-brown~.bootstrap-switch-default { + background-color: #f96332; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-blue~.bootstrap-switch-default { + background-color: #2CA8FF; +} + +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-red, +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-brown, +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-blue, +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-orange, +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-green { + background-color: #E3E3E3; +} + +.bootstrap-switch-off .bootstrap-switch-handle-on { + opacity: 0; +} + +.bootstrap-switch-on .bootstrap-switch-handle-off { + opacity: 0; +} + + +/*! nouislider - 9.1.0 - 2016-12-10 16:00:32 */ + + +/* Functional styling; + * These styles are required for noUiSlider to function. + * You don't need to change these rules to apply your design. + */ + +.noUi-target, +.noUi-target * { + -webkit-touch-callout: none; + -webkit-tap-highlight-color: transparent; + -webkit-user-select: none; + -ms-touch-action: none; + touch-action: none; + -ms-user-select: none; + -moz-user-select: none; + user-select: none; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.noUi-target { + position: relative; + direction: ltr; +} + +.noUi-base { + width: 100%; + height: 100%; + position: relative; + z-index: 1; + /* Fix 401 */ +} + +.noUi-connect { + position: absolute; + right: 0; + top: 0; + left: 0; + bottom: 0; +} + +.noUi-origin { + position: absolute; + height: 0; + width: 0; +} + +.noUi-handle { + position: relative; + z-index: 1; +} + +.noUi-state-tap .noUi-connect, +.noUi-state-tap .noUi-origin { + -webkit-transition: top 0.3s, right 0.3s, bottom 0.3s, left 0.3s; + transition: top 0.3s, right 0.3s, bottom 0.3s, left 0.3s; +} + +.noUi-state-drag * { + cursor: inherit !important; +} + + +/* Painting and performance; + * Browsers can paint handles in their own layer. + */ + +.noUi-base, +.noUi-handle { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} + + +/* Slider size and handle placement; + */ + +.noUi-horizontal { + height: 1px; +} + +.noUi-horizontal .noUi-handle { + border-radius: 50%; + background-color: #FFFFFF; + box-shadow: 0 1px 13px 0 rgba(0, 0, 0, 0.2); + height: 15px; + width: 15px; + cursor: pointer; + margin-left: -10px; + margin-top: -7px; +} + +.noUi-vertical { + width: 18px; +} + +.noUi-vertical .noUi-handle { + width: 28px; + height: 34px; + left: -6px; + top: -17px; +} + + +/* Styling; + */ + +.noUi-target { + background-color: rgba(182, 182, 182, 0.3); + border-radius: 3px; +} + +.noUi-connect { + background: #888; + border-radius: 3px; + -webkit-transition: background 450ms; + transition: background 450ms; +} + + +/* Handles and cursors; + */ + +.noUi-draggable { + cursor: ew-resize; +} + +.noUi-vertical .noUi-draggable { + cursor: ns-resize; +} + +.noUi-handle { + border-radius: 3px; + background: #FFF; + cursor: default; + box-shadow: inset 0 0 1px #FFF, inset 0 1px 7px #EBEBEB, 0 3px 6px -3px #BBB; + -webkit-transition: 300ms ease 0s; + -moz-transition: 300ms ease 0s; + -ms-transition: 300ms ease 0s; + -o-transform: 300ms ease 0s; + transition: 300ms ease 0s; +} + +.noUi-active { + -webkit-transform: scale3d(1.5, 1.5, 1); + -moz-transform: scale3d(1.5, 1.5, 1); + -ms-transform: scale3d(1.5, 1.5, 1); + -o-transform: scale3d(1.5, 1.5, 1); + transform: scale3d(1.5, 1.5, 1); +} + + +/* Disabled state; + */ + +[disabled] .noUi-connect { + background: #B8B8B8; +} + +[disabled].noUi-target, +[disabled].noUi-handle, +[disabled] .noUi-handle { + cursor: not-allowed; +} + + +/* Base; + * + */ + +.noUi-pips, +.noUi-pips * { + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.noUi-pips { + position: absolute; + color: #999; +} + + +/* Values; + * + */ + +.noUi-value { + position: absolute; + text-align: center; +} + +.noUi-value-sub { + color: #ccc; + font-size: 10px; +} + + +/* Markings; + * + */ + +.noUi-marker { + position: absolute; + background: #CCC; +} + +.noUi-marker-sub { + background: #AAA; +} + +.noUi-marker-large { + background: #AAA; +} + + +/* Horizontal layout; + * + */ + +.noUi-pips-horizontal { + padding: 10px 0; + height: 80px; + top: 100%; + left: 0; + width: 100%; +} + +.noUi-value-horizontal { + -webkit-transform: translate3d(-50%, 50%, 0); + transform: translate3d(-50%, 50%, 0); +} + +.noUi-marker-horizontal.noUi-marker { + margin-left: -1px; + width: 2px; + height: 5px; +} + +.noUi-marker-horizontal.noUi-marker-sub { + height: 10px; +} + +.noUi-marker-horizontal.noUi-marker-large { + height: 15px; +} + + +/* Vertical layout; + * + */ + +.noUi-pips-vertical { + padding: 0 10px; + height: 100%; + top: 0; + left: 100%; +} + +.noUi-value-vertical { + -webkit-transform: translate3d(0, 50%, 0); + transform: translate3d(0, 50%, 0); + padding-left: 25px; +} + +.noUi-marker-vertical.noUi-marker { + width: 5px; + height: 2px; + margin-top: -1px; +} + +.noUi-marker-vertical.noUi-marker-sub { + width: 10px; +} + +.noUi-marker-vertical.noUi-marker-large { + width: 15px; +} + +.noUi-tooltip { + display: block; + position: absolute; + border: 1px solid #D9D9D9; + border-radius: 3px; + background: #fff; + color: #000; + padding: 5px; + text-align: center; +} + +.noUi-horizontal .noUi-tooltip { + -webkit-transform: translate(-50%, 0); + transform: translate(-50%, 0); + left: 50%; + bottom: 120%; +} + +.noUi-vertical .noUi-tooltip { + -webkit-transform: translate(0, -50%); + transform: translate(0, -50%); + top: 50%; + right: 120%; +} + +.slider.slider-neutral .noUi-connect, +.slider.slider-neutral.noUi-connect { + background-color: #FFFFFF; +} + +.slider.slider-neutral.noUi-target { + background-color: rgba(255, 255, 255, 0.3); +} + +.slider.slider-neutral .noUi-handle { + background-color: #FFFFFF; +} + +.slider.slider-primary .noUi-connect, +.slider.slider-primary.noUi-connect { + background-color: #f96332; +} + +.slider.slider-primary.noUi-target { + background-color: rgba(249, 99, 50, 0.3); +} + +.slider.slider-primary .noUi-handle { + background-color: #f96332; +} + +.slider.slider-info .noUi-connect, +.slider.slider-info.noUi-connect { + background-color: #2CA8FF; +} + +.slider.slider-info.noUi-target { + background-color: rgba(44, 168, 255, 0.3); +} + +.slider.slider-info .noUi-handle { + background-color: #2CA8FF; +} + +.slider.slider-success .noUi-connect, +.slider.slider-success.noUi-connect { + background-color: #18ce0f; +} + +.slider.slider-success.noUi-target { + background-color: rgba(24, 206, 15, 0.3); +} + +.slider.slider-success .noUi-handle { + background-color: #18ce0f; +} + +.slider.slider-warning .noUi-connect, +.slider.slider-warning.noUi-connect { + background-color: #FFB236; +} + +.slider.slider-warning.noUi-target { + background-color: rgba(255, 178, 54, 0.3); +} + +.slider.slider-warning .noUi-handle { + background-color: #FFB236; +} + +.slider.slider-danger .noUi-connect, +.slider.slider-danger.noUi-connect { + background-color: #FF3636; +} + +.slider.slider-danger.noUi-target { + background-color: rgba(255, 54, 54, 0.3); +} + +.slider.slider-danger .noUi-handle { + background-color: #FF3636; +} + + +/*! + * Datepicker for Bootstrap v1.7.0-dev (https://github.com/uxsolutions/bootstrap-datepicker) + * + * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) + */ + +.datepicker { + padding: 8px 6px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + direction: ltr; + -webkit-transform: translate3d(0, -40px, 0); + -moz-transform: translate3d(0, -40px, 0); + -o-transform: translate3d(0, -40px, 0); + -ms-transform: translate3d(0, -40px, 0); + transform: translate3d(0, -40px, 0); + transition: all 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) 0s, opacity 0.3s ease 0s, height 0s linear 0.35s; + opacity: 0; + filter: alpha(opacity=0); + visibility: hidden; + display: block; + width: 254px; + max-width: 254px; +} + +.datepicker.dropdown-menu:before { + display: none; +} + +.datepicker.datepicker-primary { + background-color: #f96332; +} + +.datepicker.datepicker-primary th, +.datepicker.datepicker-primary .day div, +.datepicker.datepicker-primary table tr td span { + color: #FFFFFF; +} + +.datepicker.datepicker-primary:after { + border-bottom-color: #f96332; +} + +.datepicker.datepicker-primary.datepicker-orient-top:after { + border-top-color: #f96332; +} + +.datepicker.datepicker-primary .dow { + color: rgba(255, 255, 255, 0.8); +} + +.datepicker.datepicker-primary table tr td.old div, +.datepicker.datepicker-primary table tr td.new div, +.datepicker.datepicker-primary table tr td span.old, +.datepicker.datepicker-primary table tr td span.new { + color: rgba(255, 255, 255, 0.4); +} + +.datepicker.datepicker-primary table tr td span:hover, +.datepicker.datepicker-primary table tr td span.focused { + background: rgba(255, 255, 255, 0.1); +} + +.datepicker.datepicker-primary .datepicker-switch:hover, +.datepicker.datepicker-primary .prev:hover, +.datepicker.datepicker-primary .next:hover, +.datepicker.datepicker-primary tfoot tr th:hover { + background: rgba(255, 255, 255, 0.2); +} + +.datepicker.datepicker-primary table tr td.active div, +.datepicker.datepicker-primary table tr td.active:hover div, +.datepicker.datepicker-primary table tr td.active.disabled div, +.datepicker.datepicker-primary table tr td.active.disabled:hover div { + background-color: #FFFFFF; + color: #f96332; +} + +.datepicker.datepicker-primary table tr td.day:hover div, +.datepicker.datepicker-primary table tr td.day.focused div { + background: rgba(255, 255, 255, 0.2); +} + +.datepicker.datepicker-primary table tr td.active:hover div, +.datepicker.datepicker-primary table tr td.active:hover:hover div, +.datepicker.datepicker-primary table tr td.active.disabled:hover div, +.datepicker.datepicker-primary table tr td.active.disabled:hover:hover div, +.datepicker.datepicker-primary table tr td.active:active div, +.datepicker.datepicker-primary table tr td.active:hover:active div, +.datepicker.datepicker-primary table tr td.active.disabled:active div, +.datepicker.datepicker-primary table tr td.active.disabled:hover:active div, +.datepicker.datepicker-primary table tr td.active.active div, +.datepicker.datepicker-primary table tr td.active:hover.active div, +.datepicker.datepicker-primary table tr td.active.disabled.active div, +.datepicker.datepicker-primary table tr td.active.disabled:hover.active div, +.datepicker.datepicker-primary table tr td.active.disabled div, +.datepicker.datepicker-primary table tr td.active:hover.disabled div, +.datepicker.datepicker-primary table tr td.active.disabled.disabled div, +.datepicker.datepicker-primary table tr td.active.disabled:hover.disabled div, +.datepicker.datepicker-primary table tr td.active[disabled] div, +.datepicker.datepicker-primary table tr td.active:hover[disabled] div, +.datepicker.datepicker-primary table tr td.active.disabled[disabled] div, +.datepicker.datepicker-primary table tr td.active.disabled:hover[disabled] div, +.datepicker.datepicker-primary table tr td span.active:hover, +.datepicker.datepicker-primary table tr td span.active:hover:hover, +.datepicker.datepicker-primary table tr td span.active.disabled:hover, +.datepicker.datepicker-primary table tr td span.active.disabled:hover:hover, +.datepicker.datepicker-primary table tr td span.active:active, +.datepicker.datepicker-primary table tr td span.active:hover:active, +.datepicker.datepicker-primary table tr td span.active.disabled:active, +.datepicker.datepicker-primary table tr td span.active.disabled:hover:active, +.datepicker.datepicker-primary table tr td span.active.active, +.datepicker.datepicker-primary table tr td span.active:hover.active, +.datepicker.datepicker-primary table tr td span.active.disabled.active, +.datepicker.datepicker-primary table tr td span.active.disabled:hover.active, +.datepicker.datepicker-primary table tr td span.active.disabled, +.datepicker.datepicker-primary table tr td span.active:hover.disabled, +.datepicker.datepicker-primary table tr td span.active.disabled.disabled, +.datepicker.datepicker-primary table tr td span.active.disabled:hover.disabled, +.datepicker.datepicker-primary table tr td span.active[disabled], +.datepicker.datepicker-primary table tr td span.active:hover[disabled], +.datepicker.datepicker-primary table tr td span.active.disabled[disabled], +.datepicker.datepicker-primary table tr td span.active.disabled:hover[disabled] { + background-color: #FFFFFF; +} + +.datepicker.datepicker-primary table tr td span.active:hover, +.datepicker.datepicker-primary table tr td span.active:hover:hover, +.datepicker.datepicker-primary table tr td span.active.disabled:hover, +.datepicker.datepicker-primary table tr td span.active.disabled:hover:hover, +.datepicker.datepicker-primary table tr td span.active:active, +.datepicker.datepicker-primary table tr td span.active:hover:active, +.datepicker.datepicker-primary table tr td span.active.disabled:active, +.datepicker.datepicker-primary table tr td span.active.disabled:hover:active, +.datepicker.datepicker-primary table tr td span.active.active, +.datepicker.datepicker-primary table tr td span.active:hover.active, +.datepicker.datepicker-primary table tr td span.active.disabled.active, +.datepicker.datepicker-primary table tr td span.active.disabled:hover.active, +.datepicker.datepicker-primary table tr td span.active.disabled, +.datepicker.datepicker-primary table tr td span.active:hover.disabled, +.datepicker.datepicker-primary table tr td span.active.disabled.disabled, +.datepicker.datepicker-primary table tr td span.active.disabled:hover.disabled, +.datepicker.datepicker-primary table tr td span.active[disabled], +.datepicker.datepicker-primary table tr td span.active:hover[disabled], +.datepicker.datepicker-primary table tr td span.active.disabled[disabled], +.datepicker.datepicker-primary table tr td span.active.disabled:hover[disabled] { + color: #f96332; +} + +.datepicker-inline { + width: 220px; +} + +.datepicker.datepicker-rtl { + direction: rtl; +} + +.datepicker.datepicker-rtl.dropdown-menu { + left: auto; +} + +.datepicker.datepicker-rtl table tr td span { + float: right; +} + +.datepicker-dropdown { + top: 0; + left: 0; +} + +.datepicker-dropdown:before { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid transparent; + border-top: 0; + border-bottom-color: rgba(0, 0, 0, 0.2); + position: absolute; +} + +.datepicker-dropdown:after { + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #fff; + border-top: 0; + position: absolute; +} + +.datepicker-dropdown.datepicker-orient-left:before { + left: 6px; +} + +.datepicker-dropdown.datepicker-orient-left:after { + left: 7px; +} + +.datepicker-dropdown.datepicker-orient-right:before { + right: 6px; +} + +.datepicker-dropdown.datepicker-orient-right:after { + right: 7px; +} + +.datepicker-dropdown.datepicker-orient-bottom:before { + top: -7px; +} + +.datepicker-dropdown.datepicker-orient-bottom:after { + top: -6px; +} + +.datepicker-dropdown.datepicker-orient-top:before { + bottom: -7px; + border-bottom: 0; + border-top: 7px solid transparent; +} + +.datepicker-dropdown.datepicker-orient-top:after { + bottom: -6px; + border-bottom: 0; + border-top: 6px solid #fff; +} + +.datepicker table { + margin: 0; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + width: 241px; + max-width: 241px; +} + +.datepicker .day div, +.datepicker th { + -webkit-transition: all 300ms ease 0s; + -moz-transition: all 300ms ease 0s; + -o-transition: all 300ms ease 0s; + -ms-transition: all 300ms ease 0s; + transition: all 300ms ease 0s; + text-align: center; + width: 30px; + height: 30px; + line-height: 2.2; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 50%; + font-weight: 300; + font-size: 14px; + border: none; + position: relative; + cursor: pointer; +} + +.datepicker th { + color: #f96332; +} + +.table-condensed>tbody>tr>td, +.table-condensed>tbody>tr>th, +.table-condensed>tfoot>tr>td, +.table-condensed>tfoot>tr>th, +.table-condensed>thead>tr>td, +.table-condensed>thead>tr>th { + padding: 2px; + text-align: center; + cursor: pointer; +} + +.table-striped .datepicker table tr td, +.table-striped .datepicker table tr th { + background-color: transparent; +} + +.datepicker table tr td.day:hover div, +.datepicker table tr td.day.focused div { + background: #eee; + cursor: pointer; +} + +.datepicker table tr td.old, +.datepicker table tr td.new { + color: #888; +} + +.datepicker table tr td.disabled, +.datepicker table tr td.disabled:hover { + background: none; + color: #888; + cursor: default; +} + +.datepicker table tr td.highlighted { + background: #d9edf7; + border-radius: 0; +} + +.datepicker table tr td.today, +.datepicker table tr td.today:hover, +.datepicker table tr td.today.disabled, +.datepicker table tr td.today.disabled:hover { + background-color: #fde19a; + background-image: -moz-linear-gradient(to bottom, #fdd49a, #fdf59a); + background-image: -ms-linear-gradient(to bottom, #fdd49a, #fdf59a); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a)); + background-image: -webkit-linear-gradient(to bottom, #fdd49a, #fdf59a); + background-image: -o-linear-gradient(to bottom, #fdd49a, #fdf59a); + background-image: linear-gradient(to bottom, #fdd49a, #fdf59a); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0); + border-color: #fdf59a #fdf59a #fbed50; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #000; +} + +.datepicker table tr td.today:hover, +.datepicker table tr td.today:hover:hover, +.datepicker table tr td.today.disabled:hover, +.datepicker table tr td.today.disabled:hover:hover, +.datepicker table tr td.today:active, +.datepicker table tr td.today:hover:active, +.datepicker table tr td.today.disabled:active, +.datepicker table tr td.today.disabled:hover:active, +.datepicker table tr td.today.active, +.datepicker table tr td.today:hover.active, +.datepicker table tr td.today.disabled.active, +.datepicker table tr td.today.disabled:hover.active, +.datepicker table tr td.today.disabled, +.datepicker table tr td.today:hover.disabled, +.datepicker table tr td.today.disabled.disabled, +.datepicker table tr td.today.disabled:hover.disabled, +.datepicker table tr td.today[disabled], +.datepicker table tr td.today:hover[disabled], +.datepicker table tr td.today.disabled[disabled], +.datepicker table tr td.today.disabled:hover[disabled] { + background-color: #fdf59a; +} + +.datepicker table tr td.today:active, +.datepicker table tr td.today:hover:active, +.datepicker table tr td.today.disabled:active, +.datepicker table tr td.today.disabled:hover:active, +.datepicker table tr td.today.active, +.datepicker table tr td.today:hover.active, +.datepicker table tr td.today.disabled.active, +.datepicker table tr td.today.disabled:hover.active { + background-color: #fbf069 \9; +} + +.datepicker table tr td.today:hover:hover { + color: #000; +} + +.datepicker table tr td.today.active:hover { + color: #fff; +} + +.datepicker table tr td.range, +.datepicker table tr td.range:hover, +.datepicker table tr td.range.disabled, +.datepicker table tr td.range.disabled:hover { + background: #eee; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.datepicker table tr td.range.today, +.datepicker table tr td.range.today:hover, +.datepicker table tr td.range.today.disabled, +.datepicker table tr td.range.today.disabled:hover { + background-color: #f3d17a; + background-image: -moz-linear-gradient(to bottom, #f3c17a, #f3e97a); + background-image: -ms-linear-gradient(to bottom, #f3c17a, #f3e97a); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a)); + background-image: -webkit-linear-gradient(to bottom, #f3c17a, #f3e97a); + background-image: -o-linear-gradient(to bottom, #f3c17a, #f3e97a); + background-image: linear-gradient(to bottom, #f3c17a, #f3e97a); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0); + border-color: #f3e97a #f3e97a #edde34; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.datepicker table tr td.range.today:hover, +.datepicker table tr td.range.today:hover:hover, +.datepicker table tr td.range.today.disabled:hover, +.datepicker table tr td.range.today.disabled:hover:hover, +.datepicker table tr td.range.today:active, +.datepicker table tr td.range.today:hover:active, +.datepicker table tr td.range.today.disabled:active, +.datepicker table tr td.range.today.disabled:hover:active, +.datepicker table tr td.range.today.active, +.datepicker table tr td.range.today:hover.active, +.datepicker table tr td.range.today.disabled.active, +.datepicker table tr td.range.today.disabled:hover.active, +.datepicker table tr td.range.today.disabled, +.datepicker table tr td.range.today:hover.disabled, +.datepicker table tr td.range.today.disabled.disabled, +.datepicker table tr td.range.today.disabled:hover.disabled, +.datepicker table tr td.range.today[disabled], +.datepicker table tr td.range.today:hover[disabled], +.datepicker table tr td.range.today.disabled[disabled], +.datepicker table tr td.range.today.disabled:hover[disabled] { + background-color: #f3e97a; +} + +.datepicker table tr td.range.today:active, +.datepicker table tr td.range.today:hover:active, +.datepicker table tr td.range.today.disabled:active, +.datepicker table tr td.range.today.disabled:hover:active, +.datepicker table tr td.range.today.active, +.datepicker table tr td.range.today:hover.active, +.datepicker table tr td.range.today.disabled.active, +.datepicker table tr td.range.today.disabled:hover.active { + background-color: #efe24b \9; +} + +.datepicker table tr td.selected, +.datepicker table tr td.selected:hover, +.datepicker table tr td.selected.disabled, +.datepicker table tr td.selected.disabled:hover { + background-color: #9e9e9e; + background-image: -moz-linear-gradient(to bottom, #b3b3b3, #808080); + background-image: -ms-linear-gradient(to bottom, #b3b3b3, #808080); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080)); + background-image: -webkit-linear-gradient(to bottom, #b3b3b3, #808080); + background-image: -o-linear-gradient(to bottom, #b3b3b3, #808080); + background-image: linear-gradient(to bottom, #b3b3b3, #808080); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0); + border-color: #808080 #808080 #595959; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.datepicker table tr td.selected:hover, +.datepicker table tr td.selected:hover:hover, +.datepicker table tr td.selected.disabled:hover, +.datepicker table tr td.selected.disabled:hover:hover, +.datepicker table tr td.selected:active, +.datepicker table tr td.selected:hover:active, +.datepicker table tr td.selected.disabled:active, +.datepicker table tr td.selected.disabled:hover:active, +.datepicker table tr td.selected.active, +.datepicker table tr td.selected:hover.active, +.datepicker table tr td.selected.disabled.active, +.datepicker table tr td.selected.disabled:hover.active, +.datepicker table tr td.selected.disabled, +.datepicker table tr td.selected:hover.disabled, +.datepicker table tr td.selected.disabled.disabled, +.datepicker table tr td.selected.disabled:hover.disabled, +.datepicker table tr td.selected[disabled], +.datepicker table tr td.selected:hover[disabled], +.datepicker table tr td.selected.disabled[disabled], +.datepicker table tr td.selected.disabled:hover[disabled] { + background-color: #808080; +} + +.datepicker table tr td.selected:active, +.datepicker table tr td.selected:hover:active, +.datepicker table tr td.selected.disabled:active, +.datepicker table tr td.selected.disabled:hover:active, +.datepicker table tr td.selected.active, +.datepicker table tr td.selected:hover.active, +.datepicker table tr td.selected.disabled.active, +.datepicker table tr td.selected.disabled:hover.active { + background-color: #666666 \9; +} + +.datepicker table tr td.active div, +.datepicker table tr td.active:hover div, +.datepicker table tr td.active.disabled div, +.datepicker table tr td.active.disabled:hover div { + background-color: #f96332; + color: #FFFFFF; + box-shadow: 0px 1px 10px 0px rgba(0, 0, 0, 0.2); +} + +.datepicker table tr td.active:hover div, +.datepicker table tr td.active:hover:hover div, +.datepicker table tr td.active.disabled:hover div, +.datepicker table tr td.active.disabled:hover:hover div, +.datepicker table tr td.active:active div, +.datepicker table tr td.active:hover:active div, +.datepicker table tr td.active.disabled:active div, +.datepicker table tr td.active.disabled:hover:active div, +.datepicker table tr td.active.active div, +.datepicker table tr td.active:hover.active div, +.datepicker table tr td.active.disabled.active div, +.datepicker table tr td.active.disabled:hover.active div, +.datepicker table tr td.active.disabled div, +.datepicker table tr td.active:hover.disabled div, +.datepicker table tr td.active.disabled.disabled div, +.datepicker table tr td.active.disabled:hover.disabled div, +.datepicker table tr td.active[disabled] div, +.datepicker table tr td.active:hover[disabled] div, +.datepicker table tr td.active.disabled[disabled] div, +.datepicker table tr td.active.disabled:hover[disabled] div { + background-color: #f96332; +} + +.datepicker table tr td.active:active, +.datepicker table tr td.active:hover:active, +.datepicker table tr td.active.disabled:active, +.datepicker table tr td.active.disabled:hover:active, +.datepicker table tr td.active.active, +.datepicker table tr td.active:hover.active, +.datepicker table tr td.active.disabled.active, +.datepicker table tr td.active.disabled:hover.active { + background-color: #003399 \9; +} + +.datepicker table tr td span { + display: block; + width: 41px; + height: 41px; + line-height: 41px; + float: left; + margin: 1%; + font-size: 14px; + cursor: pointer; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + border-radius: 50%; +} + +.datepicker table tr td span:hover, +.datepicker table tr td span.focused { + background: #eee; +} + +.datepicker table tr td span.disabled, +.datepicker table tr td span.disabled:hover { + background: none; + color: #888; + cursor: default; +} + +.datepicker table tr td span.active, +.datepicker table tr td span.active:hover, +.datepicker table tr td span.active.disabled, +.datepicker table tr td span.active.disabled:hover { + color: #fff; + background-color: #f96332; +} + +.datepicker table tr td span.active:hover, +.datepicker table tr td span.active:hover:hover, +.datepicker table tr td span.active.disabled:hover, +.datepicker table tr td span.active.disabled:hover:hover, +.datepicker table tr td span.active:active, +.datepicker table tr td span.active:hover:active, +.datepicker table tr td span.active.disabled:active, +.datepicker table tr td span.active.disabled:hover:active, +.datepicker table tr td span.active.active, +.datepicker table tr td span.active:hover.active, +.datepicker table tr td span.active.disabled.active, +.datepicker table tr td span.active.disabled:hover.active, +.datepicker table tr td span.active.disabled, +.datepicker table tr td span.active:hover.disabled, +.datepicker table tr td span.active.disabled.disabled, +.datepicker table tr td span.active.disabled:hover.disabled, +.datepicker table tr td span.active[disabled], +.datepicker table tr td span.active:hover[disabled], +.datepicker table tr td span.active.disabled[disabled], +.datepicker table tr td span.active.disabled:hover[disabled] { + background-color: #f96332; + box-shadow: 0px 1px 10px 0px rgba(0, 0, 0, 0.2); +} + +.datepicker table tr td span.active:active, +.datepicker table tr td span.active:hover:active, +.datepicker table tr td span.active.disabled:active, +.datepicker table tr td span.active.disabled:hover:active, +.datepicker table tr td span.active.active, +.datepicker table tr td span.active:hover.active, +.datepicker table tr td span.active.disabled.active, +.datepicker table tr td span.active.disabled:hover.active { + background-color: #003399 \9; +} + +.datepicker table tr td span.old, +.datepicker table tr td span.new { + color: #888; +} + +.datepicker .datepicker-switch { + width: auto; + border-radius: 0.1875rem; +} + +.datepicker .datepicker-switch, +.datepicker .prev, +.datepicker .next, +.datepicker tfoot tr th { + cursor: pointer; +} + +.datepicker .prev, +.datepicker .next { + width: 35px; + height: 35px; +} + +.datepicker i { + position: relative; + top: 2px; +} + +.datepicker .prev i { + left: -1px; +} + +.datepicker .next i { + right: -1px; +} + +.datepicker .datepicker-switch:hover, +.datepicker .prev:hover, +.datepicker .next:hover, +.datepicker tfoot tr th:hover { + background: #eee; +} + +.datepicker .prev.disabled, +.datepicker .next.disabled { + visibility: hidden; +} + +.datepicker .cw { + font-size: 10px; + width: 12px; + padding: 0 2px 0 5px; + vertical-align: middle; +} + +.input-append.date .add-on, +.input-prepend.date .add-on { + cursor: pointer; +} + +.input-append.date .add-on i, +.input-prepend.date .add-on i { + margin-top: 3px; +} + +.input-daterange input { + text-align: center; +} + +.input-daterange input:first-child { + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} + +.input-daterange input:last-child { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} + +.input-daterange .add-on { + display: inline-block; + width: auto; + min-width: 16px; + height: 18px; + padding: 4px 5px; + font-weight: normal; + line-height: 18px; + text-align: center; + text-shadow: 0 1px 0 #fff; + vertical-align: middle; + background-color: #eee; + border: 1px solid #ccc; + margin-left: -5px; + margin-right: -5px; +} + +.btn, +.navbar .navbar-nav>a.btn { + border-width: 2px; + font-weight: 400; + font-size: 0.8571em; + line-height: 1.35em; + margin: 5px 1px; + border: none; + border-radius: 0.1875rem; + padding: 11px 22px; + cursor: pointer; + background-color: #888; + color: #FFFFFF; +} + +.btn:hover, +.btn:focus, +.btn:active, +.btn.active, +.btn:active:focus, +.btn:active:hover, +.btn.active:focus, +.btn.active:hover, +.show>.btn.dropdown-toggle, +.show>.btn.dropdown-toggle:focus, +.show>.btn.dropdown-toggle:hover, +.navbar .navbar-nav>a.btn:hover, +.navbar .navbar-nav>a.btn:focus, +.navbar .navbar-nav>a.btn:active, +.navbar .navbar-nav>a.btn.active, +.navbar .navbar-nav>a.btn:active:focus, +.navbar .navbar-nav>a.btn:active:hover, +.navbar .navbar-nav>a.btn.active:focus, +.navbar .navbar-nav>a.btn.active:hover, +.show>.navbar .navbar-nav>a.btn.dropdown-toggle, +.show>.navbar .navbar-nav>a.btn.dropdown-toggle:focus, +.show>.navbar .navbar-nav>a.btn.dropdown-toggle:hover { + background-color: #979797; + color: #FFFFFF; + box-shadow: none; +} + +.btn:hover, +.navbar .navbar-nav>a.btn:hover { + box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17); +} + +.btn.disabled, +.btn.disabled:hover, +.btn.disabled:focus, +.btn.disabled.focus, +.btn.disabled:active, +.btn.disabled.active, +.btn:disabled, +.btn:disabled:hover, +.btn:disabled:focus, +.btn:disabled.focus, +.btn:disabled:active, +.btn:disabled.active, +.btn[disabled], +.btn[disabled]:hover, +.btn[disabled]:focus, +.btn[disabled].focus, +.btn[disabled]:active, +.btn[disabled].active, +fieldset[disabled] .btn, +fieldset[disabled] .btn:hover, +fieldset[disabled] .btn:focus, +fieldset[disabled] .btn.focus, +fieldset[disabled] .btn:active, +fieldset[disabled] .btn.active, +.navbar .navbar-nav>a.btn.disabled, +.navbar .navbar-nav>a.btn.disabled:hover, +.navbar .navbar-nav>a.btn.disabled:focus, +.navbar .navbar-nav>a.btn.disabled.focus, +.navbar .navbar-nav>a.btn.disabled:active, +.navbar .navbar-nav>a.btn.disabled.active, +.navbar .navbar-nav>a.btn:disabled, +.navbar .navbar-nav>a.btn:disabled:hover, +.navbar .navbar-nav>a.btn:disabled:focus, +.navbar .navbar-nav>a.btn:disabled.focus, +.navbar .navbar-nav>a.btn:disabled:active, +.navbar .navbar-nav>a.btn:disabled.active, +.navbar .navbar-nav>a.btn[disabled], +.navbar .navbar-nav>a.btn[disabled]:hover, +.navbar .navbar-nav>a.btn[disabled]:focus, +.navbar .navbar-nav>a.btn[disabled].focus, +.navbar .navbar-nav>a.btn[disabled]:active, +.navbar .navbar-nav>a.btn[disabled].active, +fieldset[disabled] .navbar .navbar-nav>a.btn, +fieldset[disabled] .navbar .navbar-nav>a.btn:hover, +fieldset[disabled] .navbar .navbar-nav>a.btn:focus, +fieldset[disabled] .navbar .navbar-nav>a.btn.focus, +fieldset[disabled] .navbar .navbar-nav>a.btn:active, +fieldset[disabled] .navbar .navbar-nav>a.btn.active { + background-color: #888; + border-color: #888; +} + +.btn.btn-simple, +.navbar .navbar-nav>a.btn.btn-simple { + color: #888; + border-color: #888; +} + +.btn.btn-simple:hover, +.btn.btn-simple:focus, +.btn.btn-simple:active, +.navbar .navbar-nav>a.btn.btn-simple:hover, +.navbar .navbar-nav>a.btn.btn-simple:focus, +.navbar .navbar-nav>a.btn.btn-simple:active { + background-color: transparent; + color: #979797; + border-color: #979797; + box-shadow: none; +} + +.btn.btn-link, +.navbar .navbar-nav>a.btn.btn-link { + color: #888; +} + +.btn.btn-link:hover, +.btn.btn-link:focus, +.btn.btn-link:active, +.navbar .navbar-nav>a.btn.btn-link:hover, +.navbar .navbar-nav>a.btn.btn-link:focus, +.navbar .navbar-nav>a.btn.btn-link:active { + background-color: transparent; + color: #979797; + text-decoration: none; + box-shadow: none; +} + +.btn:hover, +.btn:focus, +.navbar .navbar-nav>a.btn:hover, +.navbar .navbar-nav>a.btn:focus { + opacity: 1; + filter: alpha(opacity=100); + outline: 0 !important; +} + +.btn:active, +.btn.active, +.open>.btn.dropdown-toggle, +.navbar .navbar-nav>a.btn:active, +.navbar .navbar-nav>a.btn.active, +.open>.navbar .navbar-nav>a.btn.dropdown-toggle { + -webkit-box-shadow: none; + box-shadow: none; + outline: 0 !important; +} + +.btn.btn-icon, +.navbar .navbar-nav>a.btn.btn-icon { + height: 2.375rem; + min-width: 2.375rem; + width: 2.375rem; + padding: 0; + font-size: 0.9375rem; + overflow: hidden; + position: relative; + line-height: normal; +} + +.btn.btn-icon.btn-simple, +.navbar .navbar-nav>a.btn.btn-icon.btn-simple { + padding: 0; +} + +.btn.btn-icon.btn-sm, +.navbar .navbar-nav>a.btn.btn-icon.btn-sm { + height: 1.875rem; + min-width: 1.875rem; + width: 1.875rem; +} + +.btn.btn-icon.btn-sm i.fa, +.btn.btn-icon.btn-sm i.now-ui-icons, +.navbar .navbar-nav>a.btn.btn-icon.btn-sm i.fa, +.navbar .navbar-nav>a.btn.btn-icon.btn-sm i.now-ui-icons { + font-size: 0.6875rem; +} + +.btn.btn-icon.btn-lg, +.navbar .navbar-nav>a.btn.btn-icon.btn-lg { + height: 3.6rem; + min-width: 3.6rem; + width: 3.6rem; +} + +.btn.btn-icon.btn-lg i.now-ui-icons, +.btn.btn-icon.btn-lg i.fa, +.navbar .navbar-nav>a.btn.btn-icon.btn-lg i.now-ui-icons, +.navbar .navbar-nav>a.btn.btn-icon.btn-lg i.fa { + font-size: 1.325rem; +} + +.btn.btn-icon:not(.btn-footer) i.now-ui-icons, +.btn.btn-icon:not(.btn-footer) i.fa, +.navbar .navbar-nav>a.btn.btn-icon:not(.btn-footer) i.now-ui-icons, +.navbar .navbar-nav>a.btn.btn-icon:not(.btn-footer) i.fa { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-12px, -12px); + line-height: 1.5626rem; + width: 25px; +} + +.btn:not(.btn-icon) .now-ui-icons, +.navbar .navbar-nav>a.btn:not(.btn-icon) .now-ui-icons { + position: relative; + top: 1px; +} + +.btn-primary { + background-color: #f96332; + color: #FFFFFF; +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.btn-primary:active:focus, +.btn-primary:active:hover, +.btn-primary.active:focus, +.btn-primary.active:hover, +.show>.btn-primary.dropdown-toggle, +.show>.btn-primary.dropdown-toggle:focus, +.show>.btn-primary.dropdown-toggle:hover { + background-color: #fa7a50; + color: #FFFFFF; + box-shadow: none; +} + +.btn-primary:hover { + box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17); +} + +.btn-primary.disabled, +.btn-primary.disabled:hover, +.btn-primary.disabled:focus, +.btn-primary.disabled.focus, +.btn-primary.disabled:active, +.btn-primary.disabled.active, +.btn-primary:disabled, +.btn-primary:disabled:hover, +.btn-primary:disabled:focus, +.btn-primary:disabled.focus, +.btn-primary:disabled:active, +.btn-primary:disabled.active, +.btn-primary[disabled], +.btn-primary[disabled]:hover, +.btn-primary[disabled]:focus, +.btn-primary[disabled].focus, +.btn-primary[disabled]:active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary, +fieldset[disabled] .btn-primary:hover, +fieldset[disabled] .btn-primary:focus, +fieldset[disabled] .btn-primary.focus, +fieldset[disabled] .btn-primary:active, +fieldset[disabled] .btn-primary.active { + background-color: #f96332; + border-color: #f96332; +} + +.btn-primary.btn-simple { + color: #f96332; + border-color: #f96332; +} + +.btn-primary.btn-simple:hover, +.btn-primary.btn-simple:focus, +.btn-primary.btn-simple:active { + background-color: transparent; + color: #fa7a50; + border-color: #fa7a50; + box-shadow: none; +} + +.btn-primary.btn-link { + color: #f96332; +} + +.btn-primary.btn-link:hover, +.btn-primary.btn-link:focus, +.btn-primary.btn-link:active { + background-color: transparent; + color: #fa7a50; + text-decoration: none; + box-shadow: none; +} + +.btn-success { + background-color: #18ce0f; + color: #FFFFFF; +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.btn-success:active:focus, +.btn-success:active:hover, +.btn-success.active:focus, +.btn-success.active:hover, +.show>.btn-success.dropdown-toggle, +.show>.btn-success.dropdown-toggle:focus, +.show>.btn-success.dropdown-toggle:hover { + background-color: #1beb11; + color: #FFFFFF; + box-shadow: none; +} + +.btn-success:hover { + box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17); +} + +.btn-success.disabled, +.btn-success.disabled:hover, +.btn-success.disabled:focus, +.btn-success.disabled.focus, +.btn-success.disabled:active, +.btn-success.disabled.active, +.btn-success:disabled, +.btn-success:disabled:hover, +.btn-success:disabled:focus, +.btn-success:disabled.focus, +.btn-success:disabled:active, +.btn-success:disabled.active, +.btn-success[disabled], +.btn-success[disabled]:hover, +.btn-success[disabled]:focus, +.btn-success[disabled].focus, +.btn-success[disabled]:active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success, +fieldset[disabled] .btn-success:hover, +fieldset[disabled] .btn-success:focus, +fieldset[disabled] .btn-success.focus, +fieldset[disabled] .btn-success:active, +fieldset[disabled] .btn-success.active { + background-color: #18ce0f; + border-color: #18ce0f; +} + +.btn-success.btn-simple { + color: #18ce0f; + border-color: #18ce0f; +} + +.btn-success.btn-simple:hover, +.btn-success.btn-simple:focus, +.btn-success.btn-simple:active { + background-color: transparent; + color: #1beb11; + border-color: #1beb11; + box-shadow: none; +} + +.btn-success.btn-link { + color: #18ce0f; +} + +.btn-success.btn-link:hover, +.btn-success.btn-link:focus, +.btn-success.btn-link:active { + background-color: transparent; + color: #1beb11; + text-decoration: none; + box-shadow: none; +} + +.btn-info { + background-color: #2CA8FF; + color: #FFFFFF; +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.btn-info:active:focus, +.btn-info:active:hover, +.btn-info.active:focus, +.btn-info.active:hover, +.show>.btn-info.dropdown-toggle, +.show>.btn-info.dropdown-toggle:focus, +.show>.btn-info.dropdown-toggle:hover { + background-color: #4bb5ff; + color: #FFFFFF; + box-shadow: none; +} + +.btn-info:hover { + box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17); +} + +.btn-info.disabled, +.btn-info.disabled:hover, +.btn-info.disabled:focus, +.btn-info.disabled.focus, +.btn-info.disabled:active, +.btn-info.disabled.active, +.btn-info:disabled, +.btn-info:disabled:hover, +.btn-info:disabled:focus, +.btn-info:disabled.focus, +.btn-info:disabled:active, +.btn-info:disabled.active, +.btn-info[disabled], +.btn-info[disabled]:hover, +.btn-info[disabled]:focus, +.btn-info[disabled].focus, +.btn-info[disabled]:active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info, +fieldset[disabled] .btn-info:hover, +fieldset[disabled] .btn-info:focus, +fieldset[disabled] .btn-info.focus, +fieldset[disabled] .btn-info:active, +fieldset[disabled] .btn-info.active { + background-color: #2CA8FF; + border-color: #2CA8FF; +} + +.btn-info.btn-simple { + color: #2CA8FF; + border-color: #2CA8FF; +} + +.btn-info.btn-simple:hover, +.btn-info.btn-simple:focus, +.btn-info.btn-simple:active { + background-color: transparent; + color: #4bb5ff; + border-color: #4bb5ff; + box-shadow: none; +} + +.btn-info.btn-link { + color: #2CA8FF; +} + +.btn-info.btn-link:hover, +.btn-info.btn-link:focus, +.btn-info.btn-link:active { + background-color: transparent; + color: #4bb5ff; + text-decoration: none; + box-shadow: none; +} + +.btn-warning { + background-color: #FFB236; + color: #FFFFFF; +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.btn-warning:active:focus, +.btn-warning:active:hover, +.btn-warning.active:focus, +.btn-warning.active:hover, +.show>.btn-warning.dropdown-toggle, +.show>.btn-warning.dropdown-toggle:focus, +.show>.btn-warning.dropdown-toggle:hover { + background-color: #ffbe55; + color: #FFFFFF; + box-shadow: none; +} + +.btn-warning:hover { + box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17); +} + +.btn-warning.disabled, +.btn-warning.disabled:hover, +.btn-warning.disabled:focus, +.btn-warning.disabled.focus, +.btn-warning.disabled:active, +.btn-warning.disabled.active, +.btn-warning:disabled, +.btn-warning:disabled:hover, +.btn-warning:disabled:focus, +.btn-warning:disabled.focus, +.btn-warning:disabled:active, +.btn-warning:disabled.active, +.btn-warning[disabled], +.btn-warning[disabled]:hover, +.btn-warning[disabled]:focus, +.btn-warning[disabled].focus, +.btn-warning[disabled]:active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning, +fieldset[disabled] .btn-warning:hover, +fieldset[disabled] .btn-warning:focus, +fieldset[disabled] .btn-warning.focus, +fieldset[disabled] .btn-warning:active, +fieldset[disabled] .btn-warning.active { + background-color: #FFB236; + border-color: #FFB236; +} + +.btn-warning.btn-simple { + color: #FFB236; + border-color: #FFB236; +} + +.btn-warning.btn-simple:hover, +.btn-warning.btn-simple:focus, +.btn-warning.btn-simple:active { + background-color: transparent; + color: #ffbe55; + border-color: #ffbe55; + box-shadow: none; +} + +.btn-warning.btn-link { + color: #FFB236; +} + +.btn-warning.btn-link:hover, +.btn-warning.btn-link:focus, +.btn-warning.btn-link:active { + background-color: transparent; + color: #ffbe55; + text-decoration: none; + box-shadow: none; +} + +.btn-danger { + background-color: #FF3636; + color: #FFFFFF; +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.btn-danger:active:focus, +.btn-danger:active:hover, +.btn-danger.active:focus, +.btn-danger.active:hover, +.show>.btn-danger.dropdown-toggle, +.show>.btn-danger.dropdown-toggle:focus, +.show>.btn-danger.dropdown-toggle:hover { + background-color: #ff5555; + color: #FFFFFF; + box-shadow: none; +} + +.btn-danger:hover { + box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17); +} + +.btn-danger.disabled, +.btn-danger.disabled:hover, +.btn-danger.disabled:focus, +.btn-danger.disabled.focus, +.btn-danger.disabled:active, +.btn-danger.disabled.active, +.btn-danger:disabled, +.btn-danger:disabled:hover, +.btn-danger:disabled:focus, +.btn-danger:disabled.focus, +.btn-danger:disabled:active, +.btn-danger:disabled.active, +.btn-danger[disabled], +.btn-danger[disabled]:hover, +.btn-danger[disabled]:focus, +.btn-danger[disabled].focus, +.btn-danger[disabled]:active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger, +fieldset[disabled] .btn-danger:hover, +fieldset[disabled] .btn-danger:focus, +fieldset[disabled] .btn-danger.focus, +fieldset[disabled] .btn-danger:active, +fieldset[disabled] .btn-danger.active { + background-color: #FF3636; + border-color: #FF3636; +} + +.btn-danger.btn-simple { + color: #FF3636; + border-color: #FF3636; +} + +.btn-danger.btn-simple:hover, +.btn-danger.btn-simple:focus, +.btn-danger.btn-simple:active { + background-color: transparent; + color: #ff5555; + border-color: #ff5555; + box-shadow: none; +} + +.btn-danger.btn-link { + color: #FF3636; +} + +.btn-danger.btn-link:hover, +.btn-danger.btn-link:focus, +.btn-danger.btn-link:active { + background-color: transparent; + color: #ff5555; + text-decoration: none; + box-shadow: none; +} + +.btn-neutral { + background-color: #FFFFFF; + color: #f96332; +} + +.btn-neutral:hover, +.btn-neutral:focus, +.btn-neutral:active, +.btn-neutral.active, +.btn-neutral:active:focus, +.btn-neutral:active:hover, +.btn-neutral.active:focus, +.btn-neutral.active:hover, +.show>.btn-neutral.dropdown-toggle, +.show>.btn-neutral.dropdown-toggle:focus, +.show>.btn-neutral.dropdown-toggle:hover { + background-color: #FFFFFF; + color: #FFFFFF; + box-shadow: none; +} + +.btn-neutral:hover { + box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17); +} + +.btn-neutral.disabled, +.btn-neutral.disabled:hover, +.btn-neutral.disabled:focus, +.btn-neutral.disabled.focus, +.btn-neutral.disabled:active, +.btn-neutral.disabled.active, +.btn-neutral:disabled, +.btn-neutral:disabled:hover, +.btn-neutral:disabled:focus, +.btn-neutral:disabled.focus, +.btn-neutral:disabled:active, +.btn-neutral:disabled.active, +.btn-neutral[disabled], +.btn-neutral[disabled]:hover, +.btn-neutral[disabled]:focus, +.btn-neutral[disabled].focus, +.btn-neutral[disabled]:active, +.btn-neutral[disabled].active, +fieldset[disabled] .btn-neutral, +fieldset[disabled] .btn-neutral:hover, +fieldset[disabled] .btn-neutral:focus, +fieldset[disabled] .btn-neutral.focus, +fieldset[disabled] .btn-neutral:active, +fieldset[disabled] .btn-neutral.active { + background-color: #FFFFFF; + border-color: #FFFFFF; +} + +.btn-neutral.btn-danger { + color: #FF3636; +} + +.btn-neutral.btn-danger:hover, +.btn-neutral.btn-danger:focus, +.btn-neutral.btn-danger:active { + color: #ff5555; +} + +.btn-neutral.btn-info { + color: #2CA8FF; +} + +.btn-neutral.btn-info:hover, +.btn-neutral.btn-info:focus, +.btn-neutral.btn-info:active { + color: #4bb5ff; +} + +.btn-neutral.btn-warning { + color: #FFB236; +} + +.btn-neutral.btn-warning:hover, +.btn-neutral.btn-warning:focus, +.btn-neutral.btn-warning:active { + color: #ffbe55; +} + +.btn-neutral.btn-success { + color: #18ce0f; +} + +.btn-neutral.btn-success:hover, +.btn-neutral.btn-success:focus, +.btn-neutral.btn-success:active { + color: #1beb11; +} + +.btn-neutral.btn-default { + color: #888; +} + +.btn-neutral.btn-default:hover, +.btn-neutral.btn-default:focus, +.btn-neutral.btn-default:active { + color: #979797; +} + +.btn-neutral.active, +.btn-neutral:active, +.btn-neutral:active:focus, +.btn-neutral:active:hover, +.btn-neutral.active:focus, +.btn-neutral.active:hover, +.show>.btn-neutral.dropdown-toggle, +.show>.btn-neutral.dropdown-toggle:focus, +.show>.btn-neutral.dropdown-toggle:hover { + background-color: #FFFFFF; + color: #fa7a50; + box-shadow: none; +} + +.btn-neutral:hover, +.btn-neutral:focus { + color: #fa7a50; +} + +.btn-neutral:hover:not(.nav-link), +.btn-neutral:focus:not(.nav-link) { + box-shadow: none; +} + +.btn-neutral.btn-simple { + color: #FFFFFF; + border-color: #FFFFFF; +} + +.btn-neutral.btn-simple:hover, +.btn-neutral.btn-simple:focus, +.btn-neutral.btn-simple:active { + background-color: transparent; + color: #FFFFFF; + border-color: #FFFFFF; + box-shadow: none; +} + +.btn-neutral.btn-link { + color: #FFFFFF; +} + +.btn-neutral.btn-link:hover, +.btn-neutral.btn-link:focus, +.btn-neutral.btn-link:active { + background-color: transparent; + color: #FFFFFF; + text-decoration: none; + box-shadow: none; +} + +.btn:disabled, +.btn[disabled], +.btn.disabled { + opacity: 0.5; + filter: alpha(opacity=50); +} + +.btn-round { + border-width: 1px; + border-radius: 30px !important; + padding: 11px 23px; +} + +.btn-round.btn-simple { + padding: 10px 22px; +} + +.btn-simple { + border: 1px solid; + border-color: #888; + padding: 10px 22px; + background-color: transparent; +} + +.btn-simple.disabled, +.btn-simple.disabled:hover, +.btn-simple.disabled:focus, +.btn-simple.disabled.focus, +.btn-simple.disabled:active, +.btn-simple.disabled.active, +.btn-simple:disabled, +.btn-simple:disabled:hover, +.btn-simple:disabled:focus, +.btn-simple:disabled.focus, +.btn-simple:disabled:active, +.btn-simple:disabled.active, +.btn-simple[disabled], +.btn-simple[disabled]:hover, +.btn-simple[disabled]:focus, +.btn-simple[disabled].focus, +.btn-simple[disabled]:active, +.btn-simple[disabled].active, +fieldset[disabled] .btn-simple, +fieldset[disabled] .btn-simple:hover, +fieldset[disabled] .btn-simple:focus, +fieldset[disabled] .btn-simple.focus, +fieldset[disabled] .btn-simple:active, +fieldset[disabled] .btn-simple.active, +.btn-link.disabled, +.btn-link.disabled:hover, +.btn-link.disabled:focus, +.btn-link.disabled.focus, +.btn-link.disabled:active, +.btn-link.disabled.active, +.btn-link:disabled, +.btn-link:disabled:hover, +.btn-link:disabled:focus, +.btn-link:disabled.focus, +.btn-link:disabled:active, +.btn-link:disabled.active, +.btn-link[disabled], +.btn-link[disabled]:hover, +.btn-link[disabled]:focus, +.btn-link[disabled].focus, +.btn-link[disabled]:active, +.btn-link[disabled].active, +fieldset[disabled] .btn-link, +fieldset[disabled] .btn-link:hover, +fieldset[disabled] .btn-link:focus, +fieldset[disabled] .btn-link.focus, +fieldset[disabled] .btn-link:active, +fieldset[disabled] .btn-link.active { + background-color: transparent; +} + +.btn-lg { + font-size: 1em; + border-radius: 0.25rem; + padding: 15px 48px; +} + +.btn-lg.btn-simple { + padding: 14px 47px; +} + +.btn-sm { + font-size: 14px; + border-radius: 0.1875rem; + padding: 5px 15px; +} + +.btn-sm.btn-simple { + padding: 4px 14px; +} + +.btn-link { + border: 0; + padding: 0.5rem 0.7rem; + background-color: transparent; +} + +.btn-wd { + min-width: 140px; +} + +.btn-group.select { + width: 100%; +} + +.btn-group.select .btn { + text-align: left; +} + +.btn-group.select .caret { + position: absolute; + top: 50%; + margin-top: -1px; + right: 8px; +} + +.form-control::-moz-placeholder { + color: #DDDDDD; + opacity: 1; + filter: alpha(opacity=100); +} + +.form-control:-moz-placeholder { + color: #DDDDDD; + opacity: 1; + filter: alpha(opacity=100); +} + +.form-control::-webkit-input-placeholder { + color: #DDDDDD; + opacity: 1; + filter: alpha(opacity=100); +} + +.form-control:-ms-input-placeholder { + color: #DDDDDD; + opacity: 1; + filter: alpha(opacity=100); +} + +.form-control { + background-color: transparent; + border: 1px solid #E3E3E3; + border-radius: 30px; + color: #2c2c2c; + line-height: normal; + font-size: 0.8571em; + -webkit-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + -moz-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + -o-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + -ms-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + -webkit-box-shadow: none; + box-shadow: none; +} + +.has-success .form-control { + border-color: #E3E3E3; +} + +.form-control:focus { + border: 1px solid #f96332; + -webkit-box-shadow: none; + box-shadow: none; + outline: 0 !important; + color: #2c2c2c; +} + +.form-control:focus+.input-group-addon, +.form-control:focus~.input-group-addon { + border: 1px solid #f96332; + border-left: none; + background-color: transparent; +} + +.has-success .form-control, +.has-error .form-control, +.has-success .form-control:focus, +.has-error .form-control:focus { + -webkit-box-shadow: none; + box-shadow: none; +} + +.has-success .form-control:focus { + border-color: #1be611; +} + +.has-danger .form-control.form-control-success, +.has-danger .form-control.form-control-danger, +.has-success .form-control.form-control-success, +.has-success .form-control.form-control-danger { + background-image: none; +} + +.has-danger .form-control { + border-color: #ffcfcf; + color: #FF3636; + background-color: rgba(222, 222, 222, 0.1); +} + +.has-danger .form-control:focus { + background-color: #FFFFFF; +} + +.form-control+.form-control-feedback { + border-radius: 0.25rem; + font-size: 14px; + margin-top: 0; + position: absolute; + left: 18px; + bottom: -20px; + vertical-align: middle; +} + +.open .form-control { + border-radius: 0.25rem 0.25rem 0 0; + border-bottom-color: transparent; +} + +.form-control+.input-group-addon { + background-color: #FFFFFF; +} + +.has-success:after, +.has-danger:after { + font-family: 'Nucleo Outline'; + content: "\ea22"; + display: inline-block; + position: absolute; + right: 15px; + bottom: 10px; + color: #18ce0f; + font-size: 11px; +} + +.has-success.input-lg:after, +.has-danger.input-lg:after { + font-size: 13px; + top: 13px; +} + +.has-danger:after { + content: "\ea53"; + color: #FF3636; +} + +.form-group.form-group-no-border.input-lg .input-group-addon, +.input-group.form-group-no-border.input-lg .input-group-addon { + padding: 15px 0 15px 19px; +} + +.form-group.form-group-no-border.input-lg .form-control, +.input-group.form-group-no-border.input-lg .form-control { + padding: 15px 19px; +} + +.form-group.form-group-no-border.input-lg .form-control+.input-group-addon, +.input-group.form-group-no-border.input-lg .form-control+.input-group-addon { + padding: 15px 19px 15px 0; +} + +.form-group.input-lg .form-control, +.input-group.input-lg .form-control { + padding: 14px 18px; +} + +.form-group.input-lg .form-control+.input-group-addon, +.input-group.input-lg .form-control+.input-group-addon { + padding: 14px 18px 14px 0; +} + +.form-group.input-lg .input-group-addon, +.input-group.input-lg .input-group-addon { + padding: 14px 0 15px 18px; +} + +.form-group.input-lg .input-group-addon+.form-control, +.input-group.input-lg .input-group-addon+.form-control { + padding: 15px 18px 15px 16px; +} + +.form-group.form-group-no-border .form-control, +.input-group.form-group-no-border .form-control { + padding: 11px 19px; +} + +.form-group.form-group-no-border .form-control+.input-group-addon, +.input-group.form-group-no-border .form-control+.input-group-addon { + padding: 11px 19px 11px 0; +} + +.form-group.form-group-no-border .input-group-addon, +.input-group.form-group-no-border .input-group-addon { + padding: 11px 0 11px 19px; +} + +.form-group .form-control, +.input-group .form-control { + padding: 10px 18px 10px 18px; +} + +.form-group .form-control+.input-group-addon, +.input-group .form-control+.input-group-addon { + padding: 10px 18px 10px 0; +} + +.form-group .input-group-addon, +.input-group .input-group-addon { + padding: 10px 0 10px 18px; +} + +.form-group .input-group-addon+.form-control, +.form-group .input-group-addon~.form-control, +.input-group .input-group-addon+.form-control, +.input-group .input-group-addon~.form-control { + padding: 10px 19px 11px 16px; +} + +.form-group.form-group-no-border .form-control, +.form-group.form-group-no-border .form-control+.input-group-addon, +.input-group.form-group-no-border .form-control, +.input-group.form-group-no-border .form-control+.input-group-addon { + background-color: rgba(222, 222, 222, 0.3); + border: medium none; +} + +.form-group.form-group-no-border .form-control:focus, +.form-group.form-group-no-border .form-control:active, +.form-group.form-group-no-border .form-control:active, +.form-group.form-group-no-border .form-control+.input-group-addon:focus, +.form-group.form-group-no-border .form-control+.input-group-addon:active, +.form-group.form-group-no-border .form-control+.input-group-addon:active, +.input-group.form-group-no-border .form-control:focus, +.input-group.form-group-no-border .form-control:active, +.input-group.form-group-no-border .form-control:active, +.input-group.form-group-no-border .form-control+.input-group-addon:focus, +.input-group.form-group-no-border .form-control+.input-group-addon:active, +.input-group.form-group-no-border .form-control+.input-group-addon:active { + border: medium none; + background-color: rgba(222, 222, 222, 0.5); +} + +.form-group.form-group-no-border .form-control:focus+.input-group-addon, +.input-group.form-group-no-border .form-control:focus+.input-group-addon { + background-color: rgba(222, 222, 222, 0.5); +} + +.form-group.form-group-no-border .input-group-addon, +.input-group.form-group-no-border .input-group-addon { + background-color: rgba(222, 222, 222, 0.3); + border: none; +} + +.has-error .form-control-feedback, +.has-error .control-label { + color: #FF3636; +} + +.has-success .form-control-feedback, +.has-success .control-label { + color: #18ce0f; +} + +.input-group-addon { + background-color: #FFFFFF; + border: 1px solid #E3E3E3; + border-radius: 30px; + color: #555555; + padding: -0.5rem 0 -0.5rem -0.3rem; + -webkit-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + -moz-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + -o-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + -ms-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; +} + +.has-success .input-group-addon, +.has-danger .input-group-addon { + background-color: #FFFFFF; +} + +.has-danger .form-control:focus+.input-group-addon { + color: #FF3636; +} + +.has-success .form-control:focus+.input-group-addon { + color: #18ce0f; +} + +.input-group-addon+.form-control, +.input-group-addon~.form-control { + padding: -0.5rem 0.7rem; + padding-left: 18px; +} + +.input-group-addon i { + width: 17px; +} + +.input-group-focus .input-group-addon { + background-color: #FFFFFF; + border-color: #f96332; +} + +.input-group-focus.form-group-no-border .input-group-addon { + background-color: rgba(222, 222, 222, 0.5); +} + +.input-group, +.form-group { + margin-bottom: 10px; +} + +.input-group[disabled] .input-group-addon { + background-color: #E3E3E3; +} + +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child>.dropdown-toggle, +.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle) { + border-right: 0 none; +} + +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child>.dropdown-toggle, +.input-group-btn:first-child>.btn:not(:first-child) { + border-left: 0 none; +} + +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #E3E3E3; + color: #888; + cursor: not-allowed; +} + +.input-group-btn .btn { + border-width: 1px; + padding: 11px 0.7rem; +} + +.input-group-btn .btn-default:not(.btn-fill) { + border-color: #DDDDDD; +} + +.input-group-btn:last-child>.btn { + margin-left: 0; +} + +textarea.form-control { + max-width: 100%; + padding: 10px 10px 0 0; + resize: none; + border: none; + border-bottom: 1px solid #E3E3E3; + border-radius: 0; + line-height: 2; +} + +textarea.form-control:focus, +textarea.form-control:active { + border-left: none; + border-top: none; + border-right: none; +} + +.has-success.form-group .form-control, +.has-success.form-group.form-group-no-border .form-control, +.has-danger.form-group .form-control, +.has-danger.form-group.form-group-no-border .form-control { + padding-right: 40px; +} + +.form-group { + position: relative; +} + +.form-group.has-error, +.form-group.has-danger { + margin-bottom: 20px; +} + +.checkbox, +.radio { + margin-bottom: 12px; +} + +.checkbox label, +.radio label { + display: inline-block; + position: relative; + cursor: pointer; + padding-left: 35px; + line-height: 26px; + margin-bottom: 0; +} + +.radio label { + padding-left: 28px; +} + +.checkbox label::before, +.checkbox label::after { + content: " "; + display: inline-block; + position: absolute; + width: 26px; + height: 26px; + left: 0; + cursor: pointer; + border-radius: 3px; + top: 0; + background-color: transparent; + border: 1px solid #E3E3E3; + -webkit-transition: opacity 0.3s linear; + -moz-transition: opacity 0.3s linear; + -o-transition: opacity 0.3s linear; + -ms-transition: opacity 0.3s linear; + transition: opacity 0.3s linear; +} + +.checkbox label::after { + font-family: 'Nucleo Outline'; + content: "\ea22"; + top: 0px; + text-align: center; + font-size: 14px; + opacity: 0; + color: #555555; + border: 0; + background-color: inherit; +} + +.checkbox input[type="checkbox"], +.radio input[type="radio"] { + opacity: 0; + position: absolute; + visibility: hidden; +} + +.checkbox input[type="checkbox"]:checked+label::after { + opacity: 1; +} + +.checkbox input[type="checkbox"]:disabled+label, +.radio input[type="radio"]:disabled+label { + color: #9A9A9A; + opacity: .5; +} + +.checkbox input[type="checkbox"]:disabled+label::before, +.checkbox input[type="checkbox"]:disabled+label::after { + cursor: not-allowed; +} + +.checkbox input[type="checkbox"]:disabled+label, +.radio input[type="radio"]:disabled+label { + cursor: not-allowed; +} + +.checkbox.checkbox-circle label::before { + border-radius: 50%; +} + +.checkbox.checkbox-inline { + margin-top: 0; +} + +.checkbox-primary input[type="checkbox"]:checked+label::before { + background-color: #428bca; + border-color: #428bca; +} + +.checkbox-primary input[type="checkbox"]:checked+label::after { + color: #fff; +} + +.checkbox-danger input[type="checkbox"]:checked+label::before { + background-color: #d9534f; + border-color: #d9534f; +} + +.checkbox-danger input[type="checkbox"]:checked+label::after { + color: #fff; +} + +.checkbox-info input[type="checkbox"]:checked+label::before { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.checkbox-info input[type="checkbox"]:checked+label::after { + color: #fff; +} + +.checkbox-warning input[type="checkbox"]:checked+label::before { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.checkbox-warning input[type="checkbox"]:checked+label::after { + color: #fff; +} + +.checkbox-success input[type="checkbox"]:checked+label::before { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.checkbox-success input[type="checkbox"]:checked+label::after { + color: #fff; +} + +.radio label::before, +.radio label::after { + content: " "; + width: 20px; + height: 20px; + border-radius: 50%; + border: 1px solid #E3E3E3; + display: inline-block; + position: absolute; + left: 3px; + top: 3px; + padding: 1px; + -webkit-transition: opacity 0.3s linear; + -moz-transition: opacity 0.3s linear; + -o-transition: opacity 0.3s linear; + -ms-transition: opacity 0.3s linear; + transition: opacity 0.3s linear; +} + +.radio input[type="radio"]+label:after, +.radio input[type="radio"] { + opacity: 0; +} + +.radio input[type="radio"]:checked+label::after { + width: 4px; + height: 4px; + background-color: #555555; + border-color: #555555; + top: 11px; + left: 11px; + opacity: 1; +} + +.radio input[type="radio"]:checked+label::after { + opacity: 1; +} + +.radio input[type="radio"]:disabled+label { + color: #9A9A9A; +} + +.radio input[type="radio"]:disabled+label::before, +.radio input[type="radio"]:disabled+label::after { + color: #9A9A9A; +} + +.radio.radio-inline { + margin-top: 0; +} + +.progress-container { + position: relative; +} + +.progress-container+.progress-container, +.progress-container~.progress-container { + margin-top: 15px; +} + +.progress-container .progress-badge { + color: #888; + font-size: 0.8571em; + text-transform: uppercase; +} + +.progress-container .progress { + height: 1px; + border-radius: 0; + box-shadow: none; + background: rgba(222, 222, 222, 0.8); + margin-top: 14px; +} + +.progress-container .progress .progress-bar { + box-shadow: none; + background-color: #888; +} + +.progress-container .progress .progress-value { + position: absolute; + top: 2px; + right: 0; + color: #888; + font-size: 0.8571em; +} + +.progress-container.progress-neutral .progress { + background: rgba(255, 255, 255, 0.3); +} + +.progress-container.progress-neutral .progress-bar { + background: #FFFFFF; +} + +.progress-container.progress-neutral .progress-value, +.progress-container.progress-neutral .progress-badge { + color: #FFFFFF; +} + +.progress-container.progress-primary .progress { + background: rgba(249, 99, 50, 0.3); +} + +.progress-container.progress-primary .progress-bar { + background: #f96332; +} + +.progress-container.progress-primary .progress-value, +.progress-container.progress-primary .progress-badge { + color: #f96332; +} + +.progress-container.progress-info .progress { + background: rgba(44, 168, 255, 0.3); +} + +.progress-container.progress-info .progress-bar { + background: #2CA8FF; +} + +.progress-container.progress-info .progress-value, +.progress-container.progress-info .progress-badge { + color: #2CA8FF; +} + +.progress-container.progress-success .progress { + background: rgba(24, 206, 15, 0.3); +} + +.progress-container.progress-success .progress-bar { + background: #18ce0f; +} + +.progress-container.progress-success .progress-value, +.progress-container.progress-success .progress-badge { + color: #18ce0f; +} + +.progress-container.progress-warning .progress { + background: rgba(255, 178, 54, 0.3); +} + +.progress-container.progress-warning .progress-bar { + background: #FFB236; +} + +.progress-container.progress-warning .progress-value, +.progress-container.progress-warning .progress-badge { + color: #FFB236; +} + +.progress-container.progress-danger .progress { + background: rgba(255, 54, 54, 0.3); +} + +.progress-container.progress-danger .progress-bar { + background: #FF3636; +} + +.progress-container.progress-danger .progress-value, +.progress-container.progress-danger .progress-badge { + color: #FF3636; +} + + +/* badges */ + +.badge { + border-radius: 8px; + padding: 4px 8px; + text-transform: uppercase; + font-size: 0.7142em; + line-height: 12px; + background-color: transparent; + border: 1px solid; + margin-bottom: 5px; + border-radius: 0.875rem; +} + +.badge-icon { + padding: 0.4em 0.55em; +} + +.badge-icon i { + font-size: 0.8em; +} + +.badge-default { + border-color: #888; + color: #888; +} + +.badge-primary { + border-color: #f96332; + color: #f96332; +} + +.badge-info { + border-color: #2CA8FF; + color: #2CA8FF; +} + +.badge-success { + border-color: #18ce0f; + color: #18ce0f; +} + +.badge-warning { + border-color: #FFB236; + color: #FFB236; +} + +.badge-danger { + border-color: #FF3636; + color: #FF3636; +} + +.badge-neutral { + border-color: #FFFFFF; + color: #FFFFFF; +} + +.pagination .page-item .page-link { + border: 0; + border-radius: 30px !important; + transition: all .3s; + padding: 0px 11px; + margin: 0 3px; + min-width: 30px; + text-align: center; + height: 30px; + line-height: 30px; + color: #2c2c2c; + cursor: pointer; + font-size: 14px; + text-transform: uppercase; + background: transparent; +} + +.pagination .page-item .page-link:hover, +.pagination .page-item .page-link:focus { + color: #2c2c2c; + background-color: rgba(222, 222, 222, 0.3); + border: none; +} + +.pagination .arrow-margin-left, +.pagination .arrow-margin-right { + position: absolute; +} + +.pagination .arrow-margin-right { + right: 0; +} + +.pagination .arrow-margin-left { + left: 0; +} + +.pagination .page-item.active>.page-link { + color: #E3E3E3; + box-shadow: 0px 5px 25px 0px rgba(0, 0, 0, 0.2); +} + +.pagination .page-item.active>.page-link, +.pagination .page-item.active>.page-link:focus, +.pagination .page-item.active>.page-link:hover { + background-color: #888; + border-color: #888; + color: #FFFFFF; +} + +.pagination .page-item.disabled>.page-link { + opacity: .5; + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +.pagination.pagination-info .page-item.active>.page-link, +.pagination.pagination-info .page-item.active>.page-link:focus, +.pagination.pagination-info .page-item.active>.page-link:hover { + background-color: #2CA8FF; + border-color: #2CA8FF; +} + +.pagination.pagination-success .page-item.active>.page-link, +.pagination.pagination-success .page-item.active>.page-link:focus, +.pagination.pagination-success .page-item.active>.page-link:hover { + background-color: #18ce0f; + border-color: #18ce0f; +} + +.pagination.pagination-primary .page-item.active>.page-link, +.pagination.pagination-primary .page-item.active>.page-link:focus, +.pagination.pagination-primary .page-item.active>.page-link:hover { + background-color: #f96332; + border-color: #f96332; +} + +.pagination.pagination-warning .page-item.active>.page-link, +.pagination.pagination-warning .page-item.active>.page-link:focus, +.pagination.pagination-warning .page-item.active>.page-link:hover { + background-color: #FFB236; + border-color: #FFB236; +} + +.pagination.pagination-danger .page-item.active>.page-link, +.pagination.pagination-danger .page-item.active>.page-link:focus, +.pagination.pagination-danger .page-item.active>.page-link:hover { + background-color: #FF3636; + border-color: #FF3636; +} + +.pagination.pagination-neutral .page-item>.page-link { + color: #FFFFFF; +} + +.pagination.pagination-neutral .page-item>.page-link:focus, +.pagination.pagination-neutral .page-item>.page-link:hover { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +.pagination.pagination-neutral .page-item.active>.page-link, +.pagination.pagination-neutral .page-item.active>.page-link:focus, +.pagination.pagination-neutral .page-item.active>.page-link:hover { + background-color: #FFFFFF; + border-color: #FFFFFF; + color: #f96332; +} + +button, +input, +optgroup, +select, +textarea { +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: 400; +} + +small { + font-size: 60%; +} + +a { + color: #f96332; +} + +a:hover, +a:focus { + color: #f96332; +} + +h1, +.h1 { + font-size: 3.5em; + line-height: 1.15; + margin-bottom: 30px; +} + +h1 small, +.h1 small { + font-weight: 700; + text-transform: uppercase; + opacity: .8; +} + +h2, +.h2 { + font-size: 2.5em; + margin-bottom: 30px; +} + +h3, +.h3 { + font-size: 2em; + margin-bottom: 30px; + line-height: 1.4em; +} + +h4, +.h4 { + font-size: 1.714em; + line-height: 1.45em; + margin-top: 30px; + margin-bottom: 15px; +} + +h4+.category, +h4.title+.category, +.h4+.category, +.h4.title+.category { + margin-top: -10px; +} + +h5, +.h5 { + font-size: 1.57em; + line-height: 1.4em; + margin-bottom: 15px; +} + +h6, +.h6 { + font-size: 1em; + font-weight: 700; + text-transform: uppercase; +} + +p { + line-height: 1.61em; +} + +.description p, +p.description { + font-size: 1.14em; +} + +.title { + font-weight: 700; +} + +.title.title-up { + text-transform: uppercase; +} + +.title.title-up a { + color: #2c2c2c; + text-decoration: none; +} + +.title+.category { + margin-top: -25px; +} + +.description, +.card-description, +.footer-big p { + color: #9A9A9A; + font-weight: 300; +} + +.category { + text-transform: uppercase; + font-weight: 700; + color: #9A9A9A; +} + +.text-primary { + color: #f96332 !important; +} + +.text-info { + color: #2CA8FF !important; +} + +.text-success { + color: #18ce0f !important; +} + +.text-warning { + color: #FFB236 !important; +} + +.text-danger { + color: #FF3636 !important; +} + +.text-black { + color: #444; +} + +.blockquote { + border-left: none; + border: 1px solid #888; + padding: 20px; + font-size: 1.1em; + line-height: 1.8; +} + +.blockquote small { + color: #888; + font-size: 0.8571em; + text-transform: uppercase; +} + +.blockquote.blockquote-primary { + border-color: #f96332; + color: #f96332; +} + +.blockquote.blockquote-primary small { + color: #f96332; +} + +.blockquote.blockquote-danger { + border-color: #FF3636; + color: #FF3636; +} + +.blockquote.blockquote-danger small { + color: #FF3636; +} + +.blockquote.blockquote-white { + border-color: rgba(255, 255, 255, 0.8); + color: #FFFFFF; +} + +.blockquote.blockquote-white small { + color: rgba(255, 255, 255, 0.8); +} + +body { + color: #2c2c2c; + font-size: 14px; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; +} + +.main { + position: relative; + background: #FFFFFF; +} + + +/* Animations */ + +.nav-pills .nav-link, +.nav-item .nav-link, +.navbar, +.nav-tabs .nav-link { + -webkit-transition: all 300ms ease 0s; + -moz-transition: all 300ms ease 0s; + -o-transition: all 300ms ease 0s; + -ms-transition: all 300ms ease 0s; + transition: all 300ms ease 0s; +} + +.dropdown-toggle:after, +.bootstrap-switch-label:before { + -webkit-transition: all 150ms ease 0s; + -moz-transition: all 150ms ease 0s; + -o-transition: all 150ms ease 0s; + -ms-transition: all 150ms ease 0s; + transition: all 150ms ease 0s; +} + +.dropdown-toggle[aria-expanded="true"]:after { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} + +.button-bar { + display: block; + position: relative; + width: 22px; + height: 1px; + border-radius: 1px; + background: #FFFFFF; +} + +.button-bar+.button-bar { + margin-top: 7px; +} + +.button-bar:nth-child(2) { + width: 17px; +} + +.open { + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + filter: alpha(opacity=100); + visibility: visible; +} + +.separator { + height: 2px; + width: 44px; + background-color: #888; + margin: 20px auto; +} + +.separator.separator-primary { + background-color: #f96332; +} + +.nav-pills .nav-item .nav-link { + padding: 0 15.5px; + text-align: center; + height: 60px; + width: 60px; + font-weight: 400; + color: #9A9A9A; + margin-right: 19px; + background-color: rgba(222, 222, 222, 0.3); + border-radius: 30px; +} + +.nav-pills .nav-item .nav-link:hover { + background-color: rgba(222, 222, 222, 0.3); +} + +.nav-pills .nav-item .nav-link.active, +.nav-pills .nav-item .nav-link.active:focus, +.nav-pills .nav-item .nav-link.active:hover { + background-color: #9A9A9A; + color: #FFFFFF; + box-shadow: 0px 5px 35px 0px rgba(0, 0, 0, 0.3); +} + +.nav-pills .nav-item .nav-link.disabled, +.nav-pills .nav-item .nav-link:disabled, +.nav-pills .nav-item .nav-link[disabled] { + opacity: .5; +} + +.nav-pills .nav-item i { + display: block; + font-size: 20px; + line-height: 60px; +} + +.nav-pills.nav-pills-neutral .nav-item .nav-link { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +.nav-pills.nav-pills-neutral .nav-item .nav-link.active, +.nav-pills.nav-pills-neutral .nav-item .nav-link.active:focus, +.nav-pills.nav-pills-neutral .nav-item .nav-link.active:hover { + background-color: #FFFFFF; + color: #f96332; +} + +.nav-pills.nav-pills-primary .nav-item .nav-link.active, +.nav-pills.nav-pills-primary .nav-item .nav-link.active:focus, +.nav-pills.nav-pills-primary .nav-item .nav-link.active:hover { + background-color: #f96332; +} + +.nav-pills.nav-pills-info .nav-item .nav-link.active, +.nav-pills.nav-pills-info .nav-item .nav-link.active:focus, +.nav-pills.nav-pills-info .nav-item .nav-link.active:hover { + background-color: #2CA8FF; +} + +.nav-pills.nav-pills-success .nav-item .nav-link.active, +.nav-pills.nav-pills-success .nav-item .nav-link.active:focus, +.nav-pills.nav-pills-success .nav-item .nav-link.active:hover { + background-color: #18ce0f; +} + +.nav-pills.nav-pills-warning .nav-item .nav-link.active, +.nav-pills.nav-pills-warning .nav-item .nav-link.active:focus, +.nav-pills.nav-pills-warning .nav-item .nav-link.active:hover { + background-color: #FFB236; +} + +.nav-pills.nav-pills-danger .nav-item .nav-link.active, +.nav-pills.nav-pills-danger .nav-item .nav-link.active:focus, +.nav-pills.nav-pills-danger .nav-item .nav-link.active:hover { + background-color: #FF3636; +} + +.tab-space { + padding: 20px 0 50px 0px; +} + +.nav-align-center { + text-align: center; +} + +.nav-align-center .nav-pills { + display: inline-flex; +} + +.btn-twitter { + color: #55acee; +} + +.btn-twitter:hover, +.btn-twitter:focus, +.btn-twitter:active { + color: #3ea1ec; +} + +.btn-facebook { + color: #3b5998; +} + +.btn-facebook:hover, +.btn-facebook:focus, +.btn-facebook:active { + color: #344e86; +} + +.btn-google { + color: #dd4b39; +} + +.btn-google:hover, +.btn-google:focus, +.btn-google:active { + color: #d73925; +} + +.btn-linkedin { + color: #0077B5; +} + +.btn-linkedin:hover, +.btn-linkedin:focus, +.btn-linkedin:active { + color: #00669c; +} + +.nav-tabs { + border: 0; + padding: 15px 0.7rem; +} + +.nav-tabs>.nav-item>.nav-link { + color: #888; + margin: 0; + margin-right: 5px; + background-color: transparent; + border: 1px solid transparent; + border-radius: 30px; + font-size: 14px; + padding: 11px 23px; + line-height: 1.5; +} + +.nav-tabs>.nav-item>.nav-link:hover { + background-color: transparent; +} + +.nav-tabs>.nav-item>.nav-link.active { + border: 1px solid #888; + border-radius: 30px; +} + +.nav-tabs>.nav-item>.nav-link i.now-ui-icons { + font-size: 14px; + position: relative; + top: 1px; + margin-right: 3px; +} + +.nav-tabs>.nav-item.disabled>.nav-link, +.nav-tabs>.nav-item.disabled>.nav-link:hover { + color: rgba(255, 255, 255, 0.5); +} + +.nav-tabs.nav-tabs-neutral>.nav-item>.nav-link { + color: #FFFFFF; +} + +.nav-tabs.nav-tabs-neutral>.nav-item>.nav-link.active { + border-color: rgba(255, 255, 255, 0.5); + color: #FFFFFF; +} + +.nav-tabs.nav-tabs-primary>.nav-item>.nav-link.active { + border-color: #f96332; + color: #f96332; +} + +.nav-tabs.nav-tabs-info>.nav-item>.nav-link.active { + border-color: #2CA8FF; + color: #2CA8FF; +} + +.nav-tabs.nav-tabs-danger>.nav-item>.nav-link.active { + border-color: #FF3636; + color: #FF3636; +} + +.nav-tabs.nav-tabs-warning>.nav-item>.nav-link.active { + border-color: #FFB236; + color: #FFB236; +} + +.nav-tabs.nav-tabs-success>.nav-item>.nav-link.active { + border-color: #18ce0f; + color: #18ce0f; +} + +.navbar-rounded { + border-radius: 15px; +} +.navbar { + padding-top: 0.625rem; + padding-bottom: 0.625rem; + min-height: 53px; + margin-bottom: 20px; + box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.15); +} + +.navbar a { + vertical-align: middle; +} + +.navbar a:not(.btn):not(.dropdown-item) { + color: #FFFFFF; +} + +.navbar p { + display: inline-block; + margin: 0; + line-height: 21px; +} + +.navbar .navbar-nav.navbar-logo { + position: absolute; + left: 0; + right: 0; + margin: 0 auto; + width: 49px; + top: -4px; +} + +.navbar .navbar-nav .nav-link.btn { + padding: 11px 22px; +} + +.navbar .navbar-nav .nav-link.btn.btn-lg { + padding: 15px 48px; +} + +.navbar .navbar-nav .nav-link.btn.btn-sm { + padding: 5px 15px; +} + +.navbar .navbar-nav .nav-link:not(.btn) { + text-transform: uppercase; + font-size: 0.7142em; + padding: 0.5rem 0.7rem; + line-height: 1.625rem; +} + +.navbar .navbar-nav .nav-link:not(.btn) i.fa+p, +.navbar .navbar-nav .nav-link:not(.btn) i.now-ui-icons+p { + margin-left: 5px; +} + +.navbar .navbar-nav .nav-link:not(.btn) i.fa, +.navbar .navbar-nav .nav-link:not(.btn) i.now-ui-icons { + font-size: 18px; + position: relative; + top: 2px; + text-align: center; + width: 21px; +} + +.navbar .navbar-nav .nav-link:not(.btn) i.now-ui-icons { + top: 4px; + font-size: 16px; +} + +.navbar .navbar-nav .nav-link:not(.btn).profile-photo .profile-photo-small { + width: 27px; + height: 27px; +} + +.navbar .navbar-nav .nav-link:not(.btn).disabled { + opacity: .5; + color: #FFFFFF; +} + +.navbar .navbar-nav .nav-item.active .nav-link:not(.btn), +.navbar .navbar-nav .nav-item .nav-link:not(.btn):focus, +.navbar .navbar-nav .nav-item .nav-link:not(.btn):hover, +.navbar .navbar-nav .nav-item .nav-link:not(.btn):active { + background-color: rgba(255, 255, 255, 0.2); + border-radius: 0.1875rem; +} + +.navbar .logo-container { + width: 27px; + height: 27px; + overflow: hidden; + margin: 0 auto; + border-radius: 50%; + border: 1px solid transparent; +} + +.navbar .navbar-brand { + text-transform: uppercase; + font-size: 0.8571em; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + line-height: 1.625rem; +} + +.navbar .navbar-toggler { + width: 37px; + height: 27px; + outline: 0; + cursor: pointer; +} + +.navbar .navbar-toggler.navbar-toggler-left { + position: relative; + left: 0; + padding-left: 0; +} + +.navbar .navbar-toggler:hover .navbar-toggler-bar.bar2 { + width: 22px; +} + +.navbar .button-dropdown .navbar-toggler-bar:nth-child(2) { + width: 17px; +} + +.navbar.navbar-transparent { + background-color: transparent !important; + box-shadow: none; + color: #FFFFFF; + padding-top: 20px; +} + +.navbar.bg-white:not(.navbar-transparent) a:not(.dropdown-item) { + color: #888; +} + +.navbar.bg-white:not(.navbar-transparent) a:not(.dropdown-item).disabled { + opacity: .5; + color: #888; +} + +.navbar.bg-white:not(.navbar-transparent) .button-bar { + background: #888; +} + +.navbar.bg-white:not(.navbar-transparent) .nav-item.active .nav-link:not(.btn), +.navbar.bg-white:not(.navbar-transparent) .nav-item .nav-link:not(.btn):focus, +.navbar.bg-white:not(.navbar-transparent) .nav-item .nav-link:not(.btn):hover, +.navbar.bg-white:not(.navbar-transparent) .nav-item .nav-link:not(.btn):active { + background-color: rgba(222, 222, 222, 0.3); +} + +.navbar.bg-white:not(.navbar-transparent) .logo-container { + border: 1px solid #888; +} + +.bg-default { + background-color: #888 !important; +} + +.bg-primary { + background-color: #f96332 !important; +} + +.bg-info { + background-color: #2CA8FF !important; +} + +.bg-success { + background-color: #18ce0f !important; +} + +.bg-danger { + background-color: #FF3636 !important; +} + +.bg-warning { + background-color: #FFB236 !important; +} + +.bg-white { + background-color: #FFFFFF !important; +} + +.dropdown-menu { + border: 0; + box-shadow: 0px 10px 50px 0px rgba(0, 0, 0, 0.2); + border-radius: 0.125rem; + -webkit-transition: all 150ms linear; + -moz-transition: all 150ms linear; + -o-transition: all 150ms linear; + -ms-transition: all 150ms linear; + transition: all 150ms linear; + font-size: 14px; +} + +.dropdown-menu.dropdown-menu-right:before { + left: auto; + right: 10px; +} + +.dropdown-menu:before { + display: inline-block; + position: absolute; + width: 0; + height: 0; + vertical-align: middle; + content: ""; + top: -5px; + left: 10px; + right: auto; + color: #FFFFFF; + border-bottom: .4em solid; + border-right: .4em solid transparent; + border-left: .4em solid transparent; +} + +.dropdown-menu .dropdown-item { + font-size: 0.8571em; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + -webkit-transition: all 150ms linear; + -moz-transition: all 150ms linear; + -o-transition: all 150ms linear; + -ms-transition: all 150ms linear; + transition: all 150ms linear; +} + +.dropdown-menu .dropdown-item:hover, +.dropdown-menu .dropdown-item:focus { + background-color: rgba(222, 222, 222, 0.3); +} + +.dropdown-menu .dropdown-divider { + background-color: rgba(222, 222, 222, 0.5); +} + +.dropdown-menu .dropdown-header:not([href]):not([tabindex]) { + color: rgba(182, 182, 182, 0.6); + font-size: 0.7142em; + text-transform: uppercase; + font-weight: 700; +} + +.dropdown-menu.dropdown-primary { + background-color: #f95823; +} + +.dropdown-menu.dropdown-primary:before { + color: #f95823; +} + +.dropdown-menu.dropdown-primary .dropdown-header:not([href]):not([tabindex]) { + color: rgba(255, 255, 255, 0.8); +} + +.dropdown-menu.dropdown-primary .dropdown-item { + color: #FFFFFF; +} + +.dropdown-menu.dropdown-primary .dropdown-item:hover, +.dropdown-menu.dropdown-primary .dropdown-item:focus { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-primary .dropdown-divider { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-info { + background-color: #1da2ff; +} + +.dropdown-menu.dropdown-info:before { + color: #1da2ff; +} + +.dropdown-menu.dropdown-info .dropdown-header:not([href]):not([tabindex]) { + color: rgba(255, 255, 255, 0.8); +} + +.dropdown-menu.dropdown-info .dropdown-item { + color: #FFFFFF; +} + +.dropdown-menu.dropdown-info .dropdown-item:hover, +.dropdown-menu.dropdown-info .dropdown-item:focus { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-info .dropdown-divider { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-danger { + background-color: #ff2727; +} + +.dropdown-menu.dropdown-danger:before { + color: #ff2727; +} + +.dropdown-menu.dropdown-danger .dropdown-header:not([href]):not([tabindex]) { + color: rgba(255, 255, 255, 0.8); +} + +.dropdown-menu.dropdown-danger .dropdown-item { + color: #FFFFFF; +} + +.dropdown-menu.dropdown-danger .dropdown-item:hover, +.dropdown-menu.dropdown-danger .dropdown-item:focus { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-danger .dropdown-divider { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-success { + background-color: #16c00e; +} + +.dropdown-menu.dropdown-success:before { + color: #16c00e; +} + +.dropdown-menu.dropdown-success .dropdown-header:not([href]):not([tabindex]) { + color: rgba(255, 255, 255, 0.8); +} + +.dropdown-menu.dropdown-success .dropdown-item { + color: #FFFFFF; +} + +.dropdown-menu.dropdown-success .dropdown-item:hover, +.dropdown-menu.dropdown-success .dropdown-item:focus { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-success .dropdown-divider { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-warning { + background-color: #ffac27; +} + +.dropdown-menu.dropdown-warning:before { + color: #ffac27; +} + +.dropdown-menu.dropdown-warning .dropdown-header:not([href]):not([tabindex]) { + color: rgba(255, 255, 255, 0.8); +} + +.dropdown-menu.dropdown-warning .dropdown-item { + color: #FFFFFF; +} + +.dropdown-menu.dropdown-warning .dropdown-item:hover, +.dropdown-menu.dropdown-warning .dropdown-item:focus { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-warning .dropdown-divider { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown .dropdown-menu { + -webkit-transform: translate3d(0, -25px, 0); + -moz-transform: translate3d(0, -25px, 0); + -o-transform: translate3d(0, -25px, 0); + -ms-transform: translate3d(0, -25px, 0); + transform: translate3d(0, -25px, 0); + visibility: hidden; + display: block; + opacity: 0; + filter: alpha(opacity=0); +} + +.dropdown.show .dropdown-menu, +.dropdown-menu.open { + opacity: 1; + filter: alpha(opacity=100); + visibility: visible; + -webkit-transform: translate3d(0, 0px, 0); + -moz-transform: translate3d(0, 0px, 0); + -o-transform: translate3d(0, 0px, 0); + -ms-transform: translate3d(0, 0px, 0); + transform: translate3d(0, 0px, 0); +} + +.navbar .dropdown.show .dropdown-menu { + -webkit-transform: translate3d(0, 7px, 0); + -moz-transform: translate3d(0, 7px, 0); + -o-transform: translate3d(0, 7px, 0); + -ms-transform: translate3d(0, 7px, 0); + transform: translate3d(0, 7px, 0); +} + +.button-dropdown { + padding-right: 0.7rem; + cursor: pointer; +} + +.button-dropdown .dropdown-toggle { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + display: block; +} + +.button-dropdown .dropdown-toggle:after { + display: none; +} + +.alert { + border: 0; + border-radius: 0; + color: #FFFFFF; + padding-top: .9rem; + padding-bottom: .9rem; + position: relative; +} + +.alert.alert-success { + background-color: rgba(24, 206, 15, 0.8); +} + +.alert.alert-danger { + background-color: rgba(255, 54, 54, 0.8); +} + +.alert.alert-warning { + background-color: rgba(255, 178, 54, 0.8); +} + +.alert.alert-info { + background-color: rgba(44, 168, 255, 0.8); +} + +.alert.alert-primary { + background-color: rgba(249, 99, 50, 0.8); +} + +.alert .alert-icon { + display: block; + float: left; + margin-right: 15px; + margin-top: -1px; +} + +.alert strong { + text-transform: uppercase; + font-size: 12px; +} + +.alert i.fa, +.alert i.now-ui-icons { + font-size: 20px; +} + +.alert .close { + color: #FFFFFF; + opacity: .9; + text-shadow: none; + line-height: 0; + outline: 0; +} + +img { + max-width: 100%; + border-radius: 1px; +} + +.img-raised { + box-shadow: 0px 10px 25px 0px rgba(0, 0, 0, 0.3); +} + +.popover { + font-size: 14px; + box-shadow: 0px 10px 50px 0px rgba(0, 0, 0, 0.2); + border: none; + line-height: 1.7; + max-width: 240px; +} + +.popover.bs-popover-top .arrow:before, +.popover.bs-popover-left .arrow:before, +.popover.bs-popover-right .arrow:before, +.popover.bs-popover-bottom .arrow:before { + border-top-color: transparent; + border-left-color: transparent; + border-right-color: transparent; + border-bottom-color: transparent; +} + +.popover .popover-header { + color: rgba(182, 182, 182, 0.6); + font-size: 14px; + text-transform: capitalize; + font-weight: 600; + margin: 0; + margin-top: 5px; + border: none; + background-color: transparent; +} + +.popover:before { + display: none; +} + +.popover.bs-tether-element-attached-top:after { + border-bottom-color: #FFFFFF; + top: -9px; +} + +.popover.popover-primary { + background-color: #f96332; +} + +.popover.popover-primary .popover-body { + color: #FFFFFF; +} + +.popover.popover-primary.bs-popover-right .arrow:after { + border-right-color: #f96332; +} + +.popover.popover-primary.bs-popover-top .arrow:after { + border-top-color: #f96332; +} + +.popover.popover-primary.bs-popover-bottom .arrow:after { + border-bottom-color: #f96332; +} + +.popover.popover-primary.bs-popover-left .arrow:after { + border-left-color: #f96332; +} + +.popover.popover-primary .popover-header { + color: #FFFFFF; + opacity: .6; +} + +.popover.popover-info { + background-color: #2CA8FF; +} + +.popover.popover-info .popover-body { + color: #FFFFFF; +} + +.popover.popover-info.bs-popover-right .arrow:after { + border-right-color: #2CA8FF; +} + +.popover.popover-info.bs-popover-top .arrow:after { + border-top-color: #2CA8FF; +} + +.popover.popover-info.bs-popover-bottom .arrow:after { + border-bottom-color: #2CA8FF; +} + +.popover.popover-info.bs-popover-left .arrow:after { + border-left-color: #2CA8FF; +} + +.popover.popover-info .popover-header { + color: #FFFFFF; + opacity: .6; +} + +.popover.popover-warning { + background-color: #FFB236; +} + +.popover.popover-warning .popover-body { + color: #FFFFFF; +} + +.popover.popover-warning.bs-popover-right .arrow:after { + border-right-color: #FFB236; +} + +.popover.popover-warning.bs-popover-top .arrow:after { + border-top-color: #FFB236; +} + +.popover.popover-warning.bs-popover-bottom .arrow:after { + border-bottom-color: #FFB236; +} + +.popover.popover-warning.bs-popover-left .arrow:after { + border-left-color: #FFB236; +} + +.popover.popover-warning .popover-header { + color: #FFFFFF; + opacity: .6; +} + +.popover.popover-danger { + background-color: #FF3636; +} + +.popover.popover-danger .popover-body { + color: #FFFFFF; +} + +.popover.popover-danger.bs-popover-right .arrow:after { + border-right-color: #FF3636; +} + +.popover.popover-danger.bs-popover-top .arrow:after { + border-top-color: #FF3636; +} + +.popover.popover-danger.bs-popover-bottom .arrow:after { + border-bottom-color: #FF3636; +} + +.popover.popover-danger.bs-popover-left .arrow:after { + border-left-color: #FF3636; +} + +.popover.popover-danger .popover-header { + color: #FFFFFF; + opacity: .6; +} + +.popover.popover-success { + background-color: #18ce0f; +} + +.popover.popover-success .popover-body { + color: #FFFFFF; +} + +.popover.popover-success.bs-popover-right .arrow:after { + border-right-color: #18ce0f; +} + +.popover.popover-success.bs-popover-top .arrow:after { + border-top-color: #18ce0f; +} + +.popover.popover-success.bs-popover-bottom .arrow:after { + border-bottom-color: #18ce0f; +} + +.popover.popover-success.bs-popover-left .arrow:after { + border-left-color: #18ce0f; +} + +.popover.popover-success .popover-header { + color: #FFFFFF; + opacity: .6; +} + +.tooltip.bs-tooltip-right .arrow:before { + border-right-color: #FFFFFF; +} + +.tooltip.bs-tooltip-top .arrow:before { + border-top-color: #FFFFFF; +} + +.tooltip.bs-tooltip-bottom .arrow:before { + border-bottom-color: #FFFFFF; +} + +.tooltip.bs-tooltip-left .arrow:before { + border-left-color: #FFFFFF; +} + +.tooltip-inner { + padding: 0.5rem 0.7rem; + min-width: 130px; + background-color: #FFFFFF; + font-size: 14px; + color: inherit; + box-shadow: 0px 5px 25px 0px rgba(0, 0, 0, 0.2); +} + + +/* -------------------------------- + +Nucleo Outline Web Font - nucleoapp.com/ +License - nucleoapp.com/license/ +Created using IcoMoon - icomoon.io + +-------------------------------- */ + +@font-face { + font-family: 'Nucleo Outline'; + src: url("../fonts/nucleo-outline.eot"); + src: url("../fonts/nucleo-outline.eot") format("embedded-opentype"), url("../fonts/nucleo-outline.woff2") format("woff2"), url("../fonts/nucleo-outline.woff") format("woff"), url("../fonts/nucleo-outline.ttf") format("truetype"); + font-weight: normal; + font-style: normal; +} + + +/*------------------------ + base class definition +-------------------------*/ + +.now-ui-icons { + display: inline-block; + font: normal normal normal 14px/1 'Nucleo Outline'; + font-size: inherit; + speak: none; + text-transform: none; + /* Better Font Rendering */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + + +/*------------------------ + change icon size +-------------------------*/ + + +/*---------------------------------- + add a square/circle background +-----------------------------------*/ + +.now-ui-icons.circle { + padding: 0.33333333em; + vertical-align: -16%; + background-color: #eee; +} + +.now-ui-icons.circle { + border-radius: 50%; +} + + +/*------------------------ + list icons +-------------------------*/ + +.nc-icon-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} + +.nc-icon-ul>li { + position: relative; +} + +.nc-icon-ul>li>.now-ui-icons { + position: absolute; + left: -1.57142857em; + top: 0.14285714em; + text-align: center; +} + +.nc-icon-ul>li>.now-ui-icons.circle { + top: -0.19047619em; + left: -1.9047619em; +} + + +/*------------------------ + spinning icons +-------------------------*/ + +.now-ui-icons.spin { + -webkit-animation: nc-icon-spin 2s infinite linear; + -moz-animation: nc-icon-spin 2s infinite linear; + animation: nc-icon-spin 2s infinite linear; +} + +@-webkit-keyframes nc-icon-spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + } +} + +@-moz-keyframes nc-icon-spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(360deg); + } +} + +@keyframes nc-icon-spin { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} + + +/*------------------------ + rotated/flipped icons +-------------------------*/ + + +/*------------------------ + font icons +-------------------------*/ + +.now-ui-icons.ui-1_check:before { + content: "\ea22"; +} + +.now-ui-icons.ui-1_email-85:before { + content: "\ea2a"; +} + +.now-ui-icons.arrows-1_cloud-download-93:before { + content: "\ea21"; +} + +.now-ui-icons.arrows-1_cloud-upload-94:before { + content: "\ea24"; +} + +.now-ui-icons.arrows-1_minimal-down:before { + content: "\ea39"; +} + +.now-ui-icons.arrows-1_minimal-left:before { + content: "\ea3a"; +} + +.now-ui-icons.arrows-1_minimal-right:before { + content: "\ea3b"; +} + +.now-ui-icons.arrows-1_minimal-up:before { + content: "\ea3c"; +} + +.now-ui-icons.arrows-1_refresh-69:before { + content: "\ea44"; +} + +.now-ui-icons.arrows-1_share-66:before { + content: "\ea4c"; +} + +.now-ui-icons.business_badge:before { + content: "\ea09"; +} + +.now-ui-icons.business_bank:before { + content: "\ea0a"; +} + +.now-ui-icons.business_briefcase-24:before { + content: "\ea13"; +} + +.now-ui-icons.business_bulb-63:before { + content: "\ea15"; +} + +.now-ui-icons.business_chart-bar-32:before { + content: "\ea1e"; +} + +.now-ui-icons.business_chart-pie-36:before { + content: "\ea1f"; +} + +.now-ui-icons.business_globe:before { + content: "\ea2f"; +} + +.now-ui-icons.business_money-coins:before { + content: "\ea40"; +} + +.now-ui-icons.clothes_tie-bow:before { + content: "\ea5b"; +} + +.now-ui-icons.design_vector:before { + content: "\ea61"; +} + +.now-ui-icons.design_app:before { + content: "\ea08"; +} + +.now-ui-icons.design_bullet-list-67:before { + content: "\ea14"; +} + +.now-ui-icons.design_image:before { + content: "\ea33"; +} + +.now-ui-icons.design_palette:before { + content: "\ea41"; +} + +.now-ui-icons.design_scissors:before { + content: "\ea4a"; +} + +.now-ui-icons.design-2_html5:before { + content: "\ea32"; +} + +.now-ui-icons.design-2_ruler-pencil:before { + content: "\ea48"; +} + +.now-ui-icons.emoticons_satisfied:before { + content: "\ea49"; +} + +.now-ui-icons.files_box:before { + content: "\ea12"; +} + +.now-ui-icons.files_paper:before { + content: "\ea43"; +} + +.now-ui-icons.files_single-copy-04:before { + content: "\ea52"; +} + +.now-ui-icons.health_ambulance:before { + content: "\ea07"; +} + +.now-ui-icons.loader_gear:before { + content: "\ea4e"; +} + +.now-ui-icons.loader_refresh:before { + content: "\ea44"; +} + +.now-ui-icons.location_bookmark:before { + content: "\ea10"; +} + +.now-ui-icons.location_compass-05:before { + content: "\ea25"; +} + +.now-ui-icons.location_map-big:before { + content: "\ea3d"; +} + +.now-ui-icons.location_pin:before { + content: "\ea47"; +} + +.now-ui-icons.location_world:before { + content: "\ea63"; +} + +.now-ui-icons.media-1_album:before { + content: "\ea02"; +} + +.now-ui-icons.media-1_button-pause:before { + content: "\ea16"; +} + +.now-ui-icons.media-1_button-play:before { + content: "\ea18"; +} + +.now-ui-icons.media-1_button-power:before { + content: "\ea19"; +} + +.now-ui-icons.media-1_camera-compact:before { + content: "\ea1c"; +} + +.now-ui-icons.media-2_note-03:before { + content: "\ea3f"; +} + +.now-ui-icons.media-2_sound-wave:before { + content: "\ea57"; +} + +.now-ui-icons.objects_diamond:before { + content: "\ea29"; +} + +.now-ui-icons.objects_globe:before { + content: "\ea2f"; +} + +.now-ui-icons.objects_key-25:before { + content: "\ea38"; +} + +.now-ui-icons.objects_planet:before { + content: "\ea46"; +} + +.now-ui-icons.objects_spaceship:before { + content: "\ea55"; +} + +.now-ui-icons.objects_support-17:before { + content: "\ea56"; +} + +.now-ui-icons.objects_umbrella-13:before { + content: "\ea5f"; +} + +.now-ui-icons.education_agenda-bookmark:before { + content: "\ea01"; +} + +.now-ui-icons.education_atom:before { + content: "\ea0c"; +} + +.now-ui-icons.education_glasses:before { + content: "\ea2d"; +} + +.now-ui-icons.education_hat:before { + content: "\ea30"; +} + +.now-ui-icons.education_paper:before { + content: "\ea42"; +} + +.now-ui-icons.shopping_bag-16:before { + content: "\ea0d"; +} + +.now-ui-icons.shopping_basket:before { + content: "\ea0b"; +} + +.now-ui-icons.shopping_box:before { + content: "\ea11"; +} + +.now-ui-icons.shopping_cart-simple:before { + content: "\ea1d"; +} + +.now-ui-icons.shopping_credit-card:before { + content: "\ea28"; +} + +.now-ui-icons.shopping_delivery-fast:before { + content: "\ea27"; +} + +.now-ui-icons.shopping_shop:before { + content: "\ea50"; +} + +.now-ui-icons.shopping_tag-content:before { + content: "\ea59"; +} + +.now-ui-icons.sport_trophy:before { + content: "\ea5d"; +} + +.now-ui-icons.sport_user-run:before { + content: "\ea60"; +} + +.now-ui-icons.tech_controller-modern:before { + content: "\ea26"; +} + +.now-ui-icons.tech_headphones:before { + content: "\ea31"; +} + +.now-ui-icons.tech_laptop:before { + content: "\ea36"; +} + +.now-ui-icons.tech_mobile:before { + content: "\ea3e"; +} + +.now-ui-icons.tech_tablet:before { + content: "\ea58"; +} + +.now-ui-icons.tech_tv:before { + content: "\ea5e"; +} + +.now-ui-icons.tech_watch-time:before { + content: "\ea62"; +} + +.now-ui-icons.text_align-center:before { + content: "\ea05"; +} + +.now-ui-icons.text_align-left:before { + content: "\ea06"; +} + +.now-ui-icons.text_bold:before { + content: "\ea0e"; +} + +.now-ui-icons.text_caps-small:before { + content: "\ea1b"; +} + +.now-ui-icons.gestures_tap-01:before { + content: "\ea5a"; +} + +.now-ui-icons.transportation_air-baloon:before { + content: "\ea03"; +} + +.now-ui-icons.transportation_bus-front-12:before { + content: "\ea17"; +} + +.now-ui-icons.travel_info:before { + content: "\ea04"; +} + +.now-ui-icons.travel_istanbul:before { + content: "\ea34"; +} + +.now-ui-icons.ui-1_bell-53:before { + content: "\ea0f"; +} + +.now-ui-icons.ui-1_calendar-60:before { + content: "\ea1a"; +} + +.now-ui-icons.ui-1_lock-circle-open:before { + content: "\ea35"; +} + +.now-ui-icons.ui-1_send:before { + content: "\ea4d"; +} + +.now-ui-icons.ui-1_settings-gear-63:before { + content: "\ea4e"; +} + +.now-ui-icons.ui-1_simple-add:before { + content: "\ea4f"; +} + +.now-ui-icons.ui-1_simple-delete:before { + content: "\ea54"; +} + +.now-ui-icons.ui-1_simple-remove:before { + content: "\ea53"; +} + +.now-ui-icons.ui-1_zoom-bold:before { + content: "\ea64"; +} + +.now-ui-icons.ui-2_chat-round:before { + content: "\ea20"; +} + +.now-ui-icons.ui-2_favourite-28:before { + content: "\ea2b"; +} + +.now-ui-icons.ui-2_like:before { + content: "\ea37"; +} + +.now-ui-icons.ui-2_settings-90:before { + content: "\ea4b"; +} + +.now-ui-icons.ui-2_time-alarm:before { + content: "\ea5c"; +} + +.now-ui-icons.users_circle-08:before { + content: "\ea23"; +} + +.now-ui-icons.users_single-02:before { + content: "\ea51"; +} + +.modal-content { + border-radius: 0.1875rem; + border: none; + box-shadow: 0px 10px 50px 0px rgba(0, 0, 0, 0.5); +} + +.modal-content .modal-header { + border-bottom: none; + padding-top: 24px; + padding-right: 24px; + padding-bottom: 0; + padding-left: 24px; +} + +.modal-content .modal-header button { + position: absolute; + right: 27px; + top: 30px; + outline: 0; +} + +.modal-content .modal-header .title { + margin-top: 5px; + margin-bottom: 0; +} + +.modal-content .modal-body { + padding-top: 24px; + padding-right: 24px; + padding-bottom: 16px; + padding-left: 24px; + line-height: 1.9; +} + +.modal-content .modal-footer { + border-top: none; + padding-right: 24px; + padding-bottom: 16px; + padding-left: 24px; + -webkit-justify-content: space-between; + /* Safari 6.1+ */ + justify-content: space-between; +} + +.modal-content .modal-footer button { + margin: 0; + padding-left: 16px; + padding-right: 16px; + width: auto; +} + +.modal-content .modal-footer button.pull-left { + padding-left: 5px; + padding-right: 5px; + position: relative; + left: -5px; +} + +.modal-content .modal-body+.modal-footer { + padding-top: 0; +} + +.modal-backdrop { + background: rgba(0, 0, 0, 0.3); +} + +.modal.modal-mini p { + text-align: center; +} + +.modal.modal-mini .modal-dialog { + max-width: 255px; + margin: 0 auto; +} + +.modal.modal-mini .modal-profile { + width: 70px; + height: 70px; + background-color: #FFFFFF; + border-radius: 50%; + text-align: center; + line-height: 5.9; + box-shadow: 0px 5px 50px 0px rgba(0, 0, 0, 0.3); +} + +.modal.modal-mini .modal-profile i { + color: #f96332; + font-size: 21px; +} + +.modal.modal-mini .modal-profile[class*="modal-profile-"] i { + color: #FFFFFF; +} + +.modal.modal-mini .modal-profile.modal-profile-primary { + background-color: #f96332; +} + +.modal.modal-mini .modal-profile.modal-profile-danger { + background-color: #FF3636; +} + +.modal.modal-mini .modal-profile.modal-profile-warning { + background-color: #FFB236; +} + +.modal.modal-mini .modal-profile.modal-profile-success { + background-color: #18ce0f; +} + +.modal.modal-mini .modal-profile.modal-profile-info { + background-color: #2CA8FF; +} + +.modal.modal-mini .modal-footer button { + text-transform: uppercase; +} + +.modal.modal-mini .modal-footer button:first-child { + opacity: .5; +} + +.modal.modal-default .modal-content { + background-color: #FFFFFF; + color: #2c2c2c; +} + +.modal.modal-default .modal-header .close { + color: #2c2c2c; +} + +.modal.modal-primary .modal-content { + background-color: #f96332; + color: #FFFFFF; +} + +.modal.modal-primary .modal-header .close { + color: #FFFFFF; +} + +.modal.modal-danger .modal-content { + background-color: #FF3636; + color: #FFFFFF; +} + +.modal.modal-danger .modal-header .close { + color: #FFFFFF; +} + +.modal.modal-warning .modal-content { + background-color: #FFB236; + color: #FFFFFF; +} + +.modal.modal-warning .modal-header .close { + color: #FFFFFF; +} + +.modal.modal-success .modal-content { + background-color: #18ce0f; + color: #FFFFFF; +} + +.modal.modal-success .modal-header .close { + color: #FFFFFF; +} + +.modal.modal-info .modal-content { + background-color: #2CA8FF; + color: #FFFFFF; +} + +.modal.modal-info .modal-header .close { + color: #FFFFFF; +} + +.modal.show.modal-mini .modal-dialog { + -webkit-transform: translate(0, 30%); + -o-transform: translate(0, 30%); + transform: translate(0, 30%); +} + +.modal .modal-header .close { + color: #FF3636; + text-shadow: none; +} + +.modal .modal-header .close:hover, +.modal .modal-header .close:focus { + opacity: 1; +} + +.carousel-item-next, +.carousel-item-prev, +.carousel-item.active { + display: block; +} + +.carousel .carousel-inner { + box-shadow: 0px 10px 25px 0px rgba(0, 0, 0, 0.3); +} + +.carousel .now-ui-icons { + font-size: 2em; +} + +.card { + border: 0; + border-radius: 0.1875rem; + display: inline-block; + position: relative; + overflow: hidden; + width: 100%; + margin-bottom: 20px; + box-shadow: 0px 5px 25px 0px rgba(0, 0, 0, 0.2); +} + +.card .card-body { + min-height: 190px; +} + +.card[data-background-color="orange"] { + background-color: #f96332; +} + +.card[data-background-color="red"] { + background-color: #FF3636; +} + +.card[data-background-color="yellow"] { + background-color: #FFB236; +} + +.card[data-background-color="blue"] { + background-color: #2CA8FF; +} + +.card[data-background-color="green"] { + background-color: #18ce0f; +} + +.card-signup { + max-width: 350px; + margin: 0 auto; +} + +.card-signup .header { + margin-left: 20px; + margin-right: 20px; + padding: 30px 0; +} + +.card-signup .text-divider { + margin-top: 30px; + margin-bottom: 0px; + text-align: center; +} + +.card-signup .card-body { + padding-top: 0px; + padding-bottom: 0px; + min-height: auto; +} + +.card-signup .checkbox { + margin-top: 20px; +} + +.card-signup .checkbox label { + margin-left: 17px; +} + +.card-signup .checkbox .checkbox-material { + padding-right: 12px; +} + +.card-signup .social-line { + margin-top: 20px; + text-align: center; +} + +.card-signup .social-line .btn.btn-icon, +.card-signup .social-line .btn.btn-icon .btn-icon -mini { + margin-left: 5px; + margin-right: 5px; + box-shadow: 0px 5px 50px 0px rgba(0, 0, 0, 0.2); +} + +.card-signup .footer { + margin-bottom: 10px; + margin-top: 24px; +} + +.card-plain { + background: transparent; + box-shadow: none; +} + +.card-plain .header { + margin-left: 0; + margin-right: 0; +} + +.card-plain .content { + padding-left: 0; + padding-right: 0; +} + +.footer { + padding: 24px 0; +} + +.footer.footer-default { + background-color: #f2f2f2; +} + +.footer nav { + display: inline-block; + float: left; +} + +.footer ul { + margin-bottom: 0; + padding: 0; + list-style: none; +} + +.footer ul li { + display: inline-block; +} + +.footer ul li a { + color: inherit; + padding: 0.5rem; + font-size: 0.8571em; + text-transform: uppercase; + text-decoration: none; +} + +.footer ul li a:hover { + text-decoration: none; +} + +.footer .copyright { + font-size: 0.8571em; +} + +.footer:after { + display: table; + clear: both; + content: " "; +} + +.index-page .page-header { + height: 100vh; +} + +.index-page .page-header .container>.content-center { + top: 37%; +} + +.index-page .page-header .category-absolute { + position: absolute; + top: 100vh; + margin-top: -60px; + padding: 0 15px; + width: 100%; + color: rgba(255, 255, 255, 0.5); +} + +.landing-page .header { + height: 100vh; + position: relative; +} + +.landing-page .header .container { + padding-top: 26vh; + color: #FFFFFF; + z-index: 2; + position: relative; +} + +.landing-page .header .share { + margin-top: 150px; +} + +.landing-page .header h1 { + font-weight: 600; +} + +.landing-page .header .title { + color: #FFFFFF; +} + +.landing-page .section-team .team .team-player img { + max-width: 100px; +} + +.landing-page .section-team .team-player { + margin-bottom: 15px; +} + +.landing-page .section-contact-us .title { + margin-bottom: 15px; +} + +.landing-page .section-contact-us .description { + margin-bottom: 30px; +} + +.landing-page .section-contact-us .input-group, +.landing-page .section-contact-us .send-button, +.landing-page .section-contact-us .textarea-container { + padding: 0 40px; +} + +.landing-page .section-contact-us .textarea-container { + margin: 40px 0; +} + +.landing-page .section-contact-us a.btn { + margin-top: 35px; +} + +.profile-page .page-header { + min-height: 550px; +} + +.profile-page .profile-container { + color: #FFFFFF; +} + +.profile-page .photo-container { + width: 123px; + height: 123px; + border-radius: 50%; + overflow: hidden; + margin: 0 auto; + box-shadow: 0px 10px 25px 0px rgba(0, 0, 0, 0.3); +} + +.profile-page .title { + text-align: center; + margin-top: 30px; +} + +.profile-page .description, +.profile-page .category { + text-align: center; +} + +.profile-page h5.description { + max-width: 700px; + margin: 20px auto 75px; +} + +.profile-page .nav-align-center { + margin-top: 30px; +} + +.profile-page .content { + max-width: 450px; + margin: 0 auto; +} + +.profile-page .content .social-description { + display: inline-block; + max-width: 150px; + width: 145px; + text-align: center; + margin: 15px 0 0px; +} + +.profile-page .content .social-description h2 { + margin-bottom: 15px; +} + +.profile-page .button-container { + text-align: center; + margin-top: -106px; +} + +.profile-page .collections img { + margin-bottom: 30px; +} + +.profile-page .gallery { + margin-top: 45px; + padding-bottom: 50px; +} + +.section-full-page:after, +.section-full-page:before { + display: block; + content: ""; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 2; +} + +.section-full-page:before { + background-color: rgba(0, 0, 0, 0.5); +} + +.section-full-page[filter-color="purple"]:after, +.section-full-page[filter-color="primary"]:after { + background: rgba(227, 227, 227, 0.26); + /* For browsers that do not support gradients */ + background: -webkit-linear-gradient(90deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95)); + /* For Safari 5.1 to 6.0 */ + background: -o-linear-gradient(90deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95)); + /* For Opera 11.1 to 12.0 */ + background: -moz-linear-gradient(90deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95)); + /* For Firefox 3.6 to 15 */ + background: linear-gradient(0deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95)); + /* Standard syntax */ +} + +.section-full-page[data-image]:after { + opacity: .5; +} + +.section-full-page>.content, +.section-full-page>.footer { + position: relative; + z-index: 4; +} + +.section-full-page>.content { + min-height: calc(100vh - 80px); +} + +.section-full-page .full-page-background { + position: absolute; + z-index: 1; + height: 100%; + width: 100%; + display: block; + top: 0; + left: 0; + background-size: cover; + background-position: center center; +} + +.section-full-page .footer nav>ul a:not(.btn), +.section-full-page .footer, +.section-full-page .footer .copyright a { + color: #FFFFFF; +} + +.login-page .card-login { + border-radius: 0.25rem; + padding-bottom: 0.7rem; + max-width: 320px; +} + +.login-page .card-login .btn-wd { + min-width: 180px; +} + +.login-page .card-login .logo-container { + width: 65px; + margin: 0 auto; + margin-bottom: 55px; +} + +.login-page .card-login .logo-container img { + width: 100%; +} + +.login-page .card-login .input-group:last-child { + margin-bottom: 40px; +} + +.login-page .card-login.card-plain .form-control::-moz-placeholder { + color: #ebebeb; + opacity: 1; + filter: alpha(opacity=100); +} + +.login-page .card-login.card-plain .form-control:-moz-placeholder { + color: #ebebeb; + opacity: 1; + filter: alpha(opacity=100); +} + +.login-page .card-login.card-plain .form-control::-webkit-input-placeholder { + color: #ebebeb; + opacity: 1; + filter: alpha(opacity=100); +} + +.login-page .card-login.card-plain .form-control:-ms-input-placeholder { + color: #ebebeb; + opacity: 1; + filter: alpha(opacity=100); +} + +.login-page .card-login.card-plain .form-control { + border-color: rgba(255, 255, 255, 0.5); + color: #FFFFFF; +} + +.login-page .card-login.card-plain .form-control:focus { + border-color: #FFFFFF; + background-color: transparent; + color: #FFFFFF; +} + +.login-page .card-login.card-plain .has-success:after, +.login-page .card-login.card-plain .has-danger:after { + color: #FFFFFF; +} + +.login-page .card-login.card-plain .has-danger .form-control { + background-color: transparent; +} + +.login-page .card-login.card-plain .input-group-addon { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.5); + color: #FFFFFF; +} + +.login-page .card-login.card-plain .input-group-focus .input-group-addon { + background-color: transparent; + border-color: #FFFFFF; + color: #FFFFFF; +} + +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control { + background-color: rgba(255, 255, 255, 0.1); + color: #FFFFFF; +} + +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control:focus, +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control:active, +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control:active, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control:focus, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control:active, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control:active { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control+.input-group-addon, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control+.input-group-addon { + background-color: rgba(255, 255, 255, 0.1); +} + +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control+.input-group-addon:focus, +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control+.input-group-addon:active, +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control+.input-group-addon:active, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control+.input-group-addon:focus, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control+.input-group-addon:active, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control+.input-group-addon:active { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control:focus+.input-group-addon, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control:focus+.input-group-addon { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +.login-page .card-login.card-plain .form-group.form-group-no-border .input-group-addon, +.login-page .card-login.card-plain .input-group.form-group-no-border .input-group-addon { + background-color: rgba(255, 255, 255, 0.1); + border: none; + color: #FFFFFF; +} + +.login-page .card-login.card-plain .form-group.form-group-no-border.input-group-focus .input-group-addon, +.login-page .card-login.card-plain .input-group.form-group-no-border.input-group-focus .input-group-addon { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +.login-page .card-login.card-plain .input-group-addon, +.login-page .card-login.card-plain .form-group.form-group-no-border .input-group-addon, +.login-page .card-login.card-plain .input-group.form-group-no-border .input-group-addon { + color: rgba(255, 255, 255, 0.8); +} + +.login-page .link { + font-size: 10px; + color: #FFFFFF; + text-decoration: none; +} + +.section { + padding: 70px 0; + position: relative; + background: #FFFFFF; +} + +.section .row+.category { + margin-top: 15px; +} + +.section-navbars { + padding-bottom: 0; +} + +.section-full-screen { + height: 100vh; +} + +.section-signup { + padding-top: 20vh; +} + +.page-header { + height: 100vh; + max-height: 1050px; + padding: 0; + position: relative; + background-position: center center; + background-size: cover; +} + +.page-header .page-header-image { + position: absolute; + background-size: cover; + background-position: center center; + width: 100%; + height: 100%; + z-index: -1; +} + +.page-header footer { + position: absolute; + bottom: 0; + width: 100%; +} + +.page-header .container { + height: 100%; + z-index: 1; + text-align: center; + position: relative; +} + +.page-header .container>.content-center { + position: absolute; + top: 50%; + left: 50%; + -ms-transform: translate(-50%, -50%); + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + text-align: center; + padding: 0 15px; + width: 100%; + max-width: 880px; +} + +.page-header .category, +.page-header .description { + color: rgba(255, 255, 255, 0.5); +} + +.page-header.page-header-small { + height: 60vh; + max-height: 440px; +} + +.page-header:after, +.page-header:before { + position: absolute; + z-index: 0; + width: 100%; + height: 100%; + display: block; + left: 0; + top: 0; + content: ""; +} + +.page-header:before { + background-color: rgba(0, 0, 0, 0.5); +} + +.page-header[filter-color="orange"] { + background: rgba(44, 44, 44, 0.2); + /* For browsers that do not support gradients */ + background: -webkit-linear-gradient(90deg, rgba(44, 44, 44, 0.2), rgba(224, 23, 3, 0.6)); + /* For Safari 5.1 to 6.0 */ + background: -o-linear-gradient(90deg, rgba(44, 44, 44, 0.2), rgba(224, 23, 3, 0.6)); + /* For Opera 11.1 to 12.0 */ + background: -moz-linear-gradient(90deg, rgba(44, 44, 44, 0.2), rgba(224, 23, 3, 0.6)); + /* For Firefox 3.6 to 15 */ + background: linear-gradient(0deg, rgba(44, 44, 44, 0.2), rgba(224, 23, 3, 0.6)); + /* Standard syntax */ +} +.page-header[filter-color="primary"] { + background: rgba(227, 227, 227, 0.26); + /* For browsers that do not support gradients */ + background: -webkit-linear-gradient(90deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95)); + /* For Safari 5.1 to 6.0 */ + background: -o-linear-gradient(90deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95)); + /* For Opera 11.1 to 12.0 */ + background: -moz-linear-gradient(90deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95)); + /* For Firefox 3.6 to 15 */ + background: linear-gradient(0deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95)); + /* Standard syntax */ +} +.page-header .container { + z-index: 2; +} + +.clear-filter:after, +.clear-filter:before { + display: none; +} + +.section-story-overview { + padding: 50px 0; +} + +.section-story-overview .image-container { + height: 335px; + position: relative; + background-position: center center; + background-size: cover; + box-shadow: 0px 10px 25px 0px rgba(0, 0, 0, 0.3); + border-radius: .25rem; +} + +.section-story-overview .image-container+.category { + padding-top: 15px; +} + +.section-story-overview .image-container.image-right { + z-index: 2; +} + +.section-story-overview .image-container.image-right+h3.title { + margin-top: 120px; +} + +.section-story-overview .image-container.image-left { + z-index: 1; +} + +.section-story-overview .image-container:nth-child(2) { + margin-top: 420px; + margin-left: -105px; +} + +.section-story-overview p.blockquote { + width: 220px; + min-height: 180px; + text-align: left; + position: absolute; + top: 376px; + right: 155px; + z-index: 0; +} + +.section-nucleo-icons .nucleo-container img { + width: auto; + left: 0; + top: 0; + height: 100%; + position: absolute; +} + +.section-nucleo-icons .nucleo-container { + height: 335px; + position: relative; +} + +.section-nucleo-icons h5 { + margin-bottom: 35px; +} + +.section-nucleo-icons .icons-container { + position: relative; + max-width: 450px; + height: 300px; + max-height: 300px; + margin: 0 auto; +} + +.section-nucleo-icons .icons-container i { + font-size: 34px; + position: absolute; + left: 0; + top: 0; +} + +.section-nucleo-icons .icons-container i:nth-child(1) { + top: 5%; + left: 7%; +} + +.section-nucleo-icons .icons-container i:nth-child(2) { + top: 28%; + left: 24%; +} + +.section-nucleo-icons .icons-container i:nth-child(3) { + top: 40%; +} + +.section-nucleo-icons .icons-container i:nth-child(4) { + top: 18%; + left: 62%; +} + +.section-nucleo-icons .icons-container i:nth-child(5) { + top: 74%; + left: 3%; +} + +.section-nucleo-icons .icons-container i:nth-child(6) { + top: 36%; + left: 44%; + font-size: 65px; + color: #f96332; + padding: 1px; +} + +.section-nucleo-icons .icons-container i:nth-child(7) { + top: 59%; + left: 26%; +} + +.section-nucleo-icons .icons-container i:nth-child(8) { + top: 60%; + left: 69%; +} + +.section-nucleo-icons .icons-container i:nth-child(9) { + top: 72%; + left: 47%; +} + +.section-nucleo-icons .icons-container i:nth-child(10) { + top: 88%; + left: 27%; +} + +.section-nucleo-icons .icons-container i:nth-child(11) { + top: 31%; + left: 80%; +} + +.section-nucleo-icons .icons-container i:nth-child(12) { + top: 88%; + left: 68%; +} + +.section-nucleo-icons .icons-container i:nth-child(13) { + top: 5%; + left: 81%; +} + +.section-nucleo-icons .icons-container i:nth-child(14) { + top: 58%; + left: 90%; +} + +.section-nucleo-icons .icons-container i:nth-child(15) { + top: 6%; + left: 40%; +} + +.section-images { + max-height: 670px; + height: 670px; +} + +.section-images .hero-images-container, +.section-images .hero-images-container-1, +.section-images .hero-images-container-2 { + margin-top: -38vh; +} + +.section-images .hero-images-container { + max-width: 670px; +} + +.section-images .hero-images-container-1 { + max-width: 390px; + position: absolute; + top: 55%; + right: 18%; +} + +.section-images .hero-images-container-2 { + max-width: 225px; + position: absolute; + top: 68%; + right: 12%; +} + +[data-background-color="orange"] { + background-color: #e95e38; +} + +[data-background-color="black"] { + background-color: #2c2c2c; +} + +[data-background-color] { + color: #FFFFFF; +} + +[data-background-color] .title, +[data-background-color] .social-description h2, +[data-background-color] p, +[data-background-color] p.blockquote, +[data-background-color] p.blockquote small, +[data-background-color] h1, +[data-background-color] h2, +[data-background-color] h3, +[data-background-color] h4, +[data-background-color] h5, +[data-background-color] h6, +[data-background-color] a:not(.btn):not(.dropdown-item), +[data-background-color] .icons-container i { + color: #FFFFFF; +} + +[data-background-color] .separator { + background-color: #FFFFFF; +} + +[data-background-color] .navbar.bg-white p { + color: #888; +} + +[data-background-color] .description, +[data-background-color] .social-description p { + color: rgba(255, 255, 255, 0.8); +} + +[data-background-color] p.blockquote { + border-color: rgba(255, 255, 255, 0.2); +} + +[data-background-color] .checkbox label::before, +[data-background-color] .checkbox label::after, +[data-background-color] .radio label::before, +[data-background-color] .radio label::after { + border-color: rgba(255, 255, 255, 0.2); +} + +[data-background-color] .checkbox label::after, +[data-background-color] .checkbox label, +[data-background-color] .radio label { + color: #FFFFFF; +} + +[data-background-color] .checkbox input[type="checkbox"]:disabled+label, +[data-background-color] .radio input[type="radio"]:disabled+label { + color: #FFFFFF; +} + +[data-background-color] .radio input[type="radio"]:not(:disabled):hover+label::after, +[data-background-color] .radio input[type="radio"]:checked+label::after { + background-color: #FFFFFF; + border-color: #FFFFFF; +} + +[data-background-color] .form-control::-moz-placeholder { + color: #ebebeb; + opacity: 1; + filter: alpha(opacity=100); +} + +[data-background-color] .form-control:-moz-placeholder { + color: #ebebeb; + opacity: 1; + filter: alpha(opacity=100); +} + +[data-background-color] .form-control::-webkit-input-placeholder { + color: #ebebeb; + opacity: 1; + filter: alpha(opacity=100); +} + +[data-background-color] .form-control:-ms-input-placeholder { + color: #ebebeb; + opacity: 1; + filter: alpha(opacity=100); +} + +[data-background-color] .form-control { + border-color: rgba(255, 255, 255, 0.5); + color: #FFFFFF; +} + +[data-background-color] .form-control:focus { + border-color: #FFFFFF; + background-color: transparent; + color: #FFFFFF; +} + +[data-background-color] .has-success:after, +[data-background-color] .has-danger:after { + color: #FFFFFF; +} + +[data-background-color] .has-danger .form-control { + background-color: transparent; +} + +[data-background-color] .input-group-addon { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.5); + color: #FFFFFF; +} + +[data-background-color] .input-group-focus .input-group-addon { + background-color: transparent; + border-color: #FFFFFF; + color: #FFFFFF; +} + +[data-background-color] .form-group.form-group-no-border .form-control, +[data-background-color] .input-group.form-group-no-border .form-control { + background-color: rgba(255, 255, 255, 0.1); + color: #FFFFFF; +} + +[data-background-color] .form-group.form-group-no-border .form-control:focus, +[data-background-color] .form-group.form-group-no-border .form-control:active, +[data-background-color] .form-group.form-group-no-border .form-control:active, +[data-background-color] .input-group.form-group-no-border .form-control:focus, +[data-background-color] .input-group.form-group-no-border .form-control:active, +[data-background-color] .input-group.form-group-no-border .form-control:active { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +[data-background-color] .form-group.form-group-no-border .form-control+.input-group-addon, +[data-background-color] .input-group.form-group-no-border .form-control+.input-group-addon { + background-color: rgba(255, 255, 255, 0.1); +} + +[data-background-color] .form-group.form-group-no-border .form-control+.input-group-addon:focus, +[data-background-color] .form-group.form-group-no-border .form-control+.input-group-addon:active, +[data-background-color] .form-group.form-group-no-border .form-control+.input-group-addon:active, +[data-background-color] .input-group.form-group-no-border .form-control+.input-group-addon:focus, +[data-background-color] .input-group.form-group-no-border .form-control+.input-group-addon:active, +[data-background-color] .input-group.form-group-no-border .form-control+.input-group-addon:active { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +[data-background-color] .form-group.form-group-no-border .form-control:focus+.input-group-addon, +[data-background-color] .input-group.form-group-no-border .form-control:focus+.input-group-addon { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +[data-background-color] .form-group.form-group-no-border .input-group-addon, +[data-background-color] .input-group.form-group-no-border .input-group-addon { + background-color: rgba(255, 255, 255, 0.1); + border: none; + color: #FFFFFF; +} + +[data-background-color] .form-group.form-group-no-border.input-group-focus .input-group-addon, +[data-background-color] .input-group.form-group-no-border.input-group-focus .input-group-addon { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +[data-background-color] .input-group-addon, +[data-background-color] .form-group.form-group-no-border .input-group-addon, +[data-background-color] .input-group.form-group-no-border .input-group-addon { + color: rgba(255, 255, 255, 0.8); +} + +[data-background-color] .btn.btn-simple { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.5); + color: #FFFFFF; +} + +[data-background-color] .btn.btn-simple:hover, +[data-background-color] .btn.btn-simple:hover, +[data-background-color] .btn.btn-simple:focus, +[data-background-color] .btn.btn-simple:active { + background-color: transparent; + border-color: #FFFFFF; +} + +[data-background-color] .nav-tabs>.nav-item>.nav-link i.now-ui-icons { + color: #FFFFFF; +} + +[data-background-color].section-nucleo-icons .icons-container i:nth-child(6) { + color: #FFFFFF; +} + +@media screen and (max-width: 991px) { + .sidebar-collapse .navbar-collapse { + position: fixed; + display: block; + top: 0; + height: 100% !important; + width: 300px; + right: 0; + z-index: 1032; + visibility: visible; + background-color: #999; + overflow-y: visible; + border-top: none; + text-align: left; + max-height: none !important; + -webkit-transform: translate3d(300px, 0, 0); + -moz-transform: translate3d(300px, 0, 0); + -o-transform: translate3d(300px, 0, 0); + -ms-transform: translate3d(300px, 0, 0); + transform: translate3d(300px, 0, 0); + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .sidebar-collapse .navbar-collapse:before { + background: #f96332; + /* For browsers that do not support gradients */ + background: -webkit-linear-gradient(#f96332 0%, #000 80%); + /* For Safari 5.1 to 6.0 */ + background: -o-linear-gradient(#f96332 0%, #000 80%); + /* For Opera 11.1 to 12.0 */ + background: -moz-linear-gradient(#f96332 0%, #000 80%); + /* For Firefox 3.6 to 15 */ + background: linear-gradient(#f96332 0%, #000 80%); + /* Standard syntax (must be last) */ + opacity: 0.76; + filter: alpha(opacity=76); + display: block; + content: ""; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: -1; + } + .sidebar-collapse .navbar-collapse .navbar-nav:not(.navbar-logo) .nav-link { + margin: 0 1rem; + margin-top: 0.3125rem; + } + .sidebar-collapse .navbar-collapse .navbar-nav:not(.navbar-logo) .nav-link:not(.btn) { + color: #FFFFFF; + } + .sidebar-collapse .navbar-collapse .dropdown-menu .dropdown-item { + color: #FFFFFF; + } + .sidebar-collapse .navbar .navbar-nav { + margin-top: 53px; + } + .sidebar-collapse .navbar .navbar-nav .nav-link { + padding-top: 0.75rem; + padding-bottom: .75rem; + } + .sidebar-collapse .navbar .navbar-nav.navbar-logo { + top: 0; + height: 53px; + } + .sidebar-collapse .navbar .dropdown.show .dropdown-menu, + .sidebar-collapse .navbar .dropdown .dropdown-menu { + background-color: transparent; + border: 0; + transition: none; + -webkit-box-shadow: none; + box-shadow: none; + width: auto; + margin: 0 1rem; + margin-bottom: 15px; + padding-top: 0; + height: 150px; + overflow-y: scroll; + } + .sidebar-collapse .navbar .dropdown.show .dropdown-menu:before, + .sidebar-collapse .navbar .dropdown .dropdown-menu:before { + display: none; + } + .sidebar-collapse .navbar .dropdown .dropdown-item { + padding-left: 2.5rem; + } + .sidebar-collapse .navbar .dropdown .dropdown-menu { + display: none; + } + .sidebar-collapse .navbar .dropdown.show .dropdown-menu { + display: block; + } + .sidebar-collapse .navbar .dropdown-menu .dropdown-item:focus, + .sidebar-collapse .navbar .dropdown-menu .dropdown-item:hover { + color: #FFFFFF; + } + .sidebar-collapse .navbar .navbar-translate { + width: 100%; + position: relative; + display: flex; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + -ms-flex-align: center; + align-items: center; + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate3d(0px, 0, 0); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .sidebar-collapse .navbar .navbar-toggler-bar { + display: block; + position: relative; + width: 22px; + height: 1px; + border-radius: 1px; + background: #FFFFFF; + } + .sidebar-collapse .navbar .navbar-toggler-bar+.navbar-toggler-bar { + margin-top: 7px; + } + .sidebar-collapse .navbar .navbar-toggler-bar.bar2 { + width: 17px; + transition: width .2s linear; + } + .sidebar-collapse .navbar.bg-white:not(.navbar-transparent) .navbar-toggler-bar { + background: #888; + } + .sidebar-collapse .navbar .toggled .navbar-toggler-bar { + width: 24px; + } + .sidebar-collapse .navbar .toggled .navbar-toggler-bar+.navbar-toggler-bar { + margin-top: 5px; + } + .sidebar-collapse .bar1, + .sidebar-collapse .bar2, + .sidebar-collapse .bar3 { + outline: 1px solid transparent; + } + .sidebar-collapse .bar1 { + top: 0px; + -webkit-animation: topbar-back 500ms linear 0s; + -moz-animation: topbar-back 500ms linear 0s; + animation: topbar-back 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .sidebar-collapse .bar2 { + opacity: 1; + } + .sidebar-collapse .bar3 { + bottom: 0px; + -webkit-animation: bottombar-back 500ms linear 0s; + -moz-animation: bottombar-back 500ms linear 0s; + animation: bottombar-back 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .sidebar-collapse .toggled .bar1 { + top: 6px; + -webkit-animation: topbar-x 500ms linear 0s; + -moz-animation: topbar-x 500ms linear 0s; + animation: topbar-x 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .sidebar-collapse .toggled .bar2 { + opacity: 0; + } + .sidebar-collapse .toggled .bar3 { + bottom: 6px; + -webkit-animation: bottombar-x 500ms linear 0s; + -moz-animation: bottombar-x 500ms linear 0s; + animation: bottombar-x 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + @keyframes topbar-x { + 0% { + top: 0px; + transform: rotate(0deg); + } + 45% { + top: 6px; + transform: rotate(145deg); + } + 75% { + transform: rotate(130deg); + } + 100% { + transform: rotate(135deg); + } + } + @-webkit-keyframes topbar-x { + 0% { + top: 0px; + -webkit-transform: rotate(0deg); + } + 45% { + top: 6px; + -webkit-transform: rotate(145deg); + } + 75% { + -webkit-transform: rotate(130deg); + } + 100% { + -webkit-transform: rotate(135deg); + } + } + @-moz-keyframes topbar-x { + 0% { + top: 0px; + -moz-transform: rotate(0deg); + } + 45% { + top: 6px; + -moz-transform: rotate(145deg); + } + 75% { + -moz-transform: rotate(130deg); + } + 100% { + -moz-transform: rotate(135deg); + } + } + @keyframes topbar-back { + 0% { + top: 6px; + transform: rotate(135deg); + } + 45% { + transform: rotate(-10deg); + } + 75% { + transform: rotate(5deg); + } + 100% { + top: 0px; + transform: rotate(0); + } + } + @-webkit-keyframes topbar-back { + 0% { + top: 6px; + -webkit-transform: rotate(135deg); + } + 45% { + -webkit-transform: rotate(-10deg); + } + 75% { + -webkit-transform: rotate(5deg); + } + 100% { + top: 0px; + -webkit-transform: rotate(0); + } + } + @-moz-keyframes topbar-back { + 0% { + top: 6px; + -moz-transform: rotate(135deg); + } + 45% { + -moz-transform: rotate(-10deg); + } + 75% { + -moz-transform: rotate(5deg); + } + 100% { + top: 0px; + -moz-transform: rotate(0); + } + } + @keyframes bottombar-x { + 0% { + bottom: 0px; + transform: rotate(0deg); + } + 45% { + bottom: 6px; + transform: rotate(-145deg); + } + 75% { + transform: rotate(-130deg); + } + 100% { + transform: rotate(-135deg); + } + } + @-webkit-keyframes bottombar-x { + 0% { + bottom: 0px; + -webkit-transform: rotate(0deg); + } + 45% { + bottom: 6px; + -webkit-transform: rotate(-145deg); + } + 75% { + -webkit-transform: rotate(-130deg); + } + 100% { + -webkit-transform: rotate(-135deg); + } + } + @-moz-keyframes bottombar-x { + 0% { + bottom: 0px; + -moz-transform: rotate(0deg); + } + 45% { + bottom: 6px; + -moz-transform: rotate(-145deg); + } + 75% { + -moz-transform: rotate(-130deg); + } + 100% { + -moz-transform: rotate(-135deg); + } + } + @keyframes bottombar-back { + 0% { + bottom: 6px; + transform: rotate(-135deg); + } + 45% { + transform: rotate(10deg); + } + 75% { + transform: rotate(-5deg); + } + 100% { + bottom: 0px; + transform: rotate(0); + } + } + @-webkit-keyframes bottombar-back { + 0% { + bottom: 6px; + -webkit-transform: rotate(-135deg); + } + 45% { + -webkit-transform: rotate(10deg); + } + 75% { + -webkit-transform: rotate(-5deg); + } + 100% { + bottom: 0px; + -webkit-transform: rotate(0); + } + } + @-moz-keyframes bottombar-back { + 0% { + bottom: 6px; + -moz-transform: rotate(-135deg); + } + 45% { + -moz-transform: rotate(10deg); + } + 75% { + -moz-transform: rotate(-5deg); + } + 100% { + bottom: 0px; + -moz-transform: rotate(0); + } + } + @-webkit-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @-moz-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + .sidebar-collapse [class*="navbar-expand-"] .navbar-collapse { + width: 300px; + } + .sidebar-collapse .wrapper { + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .sidebar-collapse #bodyClick { + height: 100%; + width: 100%; + position: fixed; + opacity: 1; + top: 0; + left: auto; + right: 300px; + content: ""; + z-index: 9999; + overflow-x: hidden; + background-color: transparent; + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .sidebar-collapse.menu-on-left .navbar-collapse { + right: auto; + left: 0; + -webkit-transform: translate3d(-300px, 0, 0); + -moz-transform: translate3d(-300px, 0, 0); + -o-transform: translate3d(-300px, 0, 0); + -ms-transform: translate3d(-300px, 0, 0); + transform: translate3d(-300px, 0, 0); + } + .nav-open .sidebar-collapse .navbar-collapse { + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate3d(0px, 0, 0); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); + } + .nav-open .sidebar-collapse .wrapper { + -webkit-transform: translate3d(-150px, 0, 0); + -moz-transform: translate3d(-150px, 0, 0); + -o-transform: translate3d(-150px, 0, 0); + -ms-transform: translate3d(-150px, 0, 0); + transform: translate3d(-150px, 0, 0); + } + .nav-open .sidebar-collapse .navbar-translate { + -webkit-transform: translate3d(-300px, 0, 0); + -moz-transform: translate3d(-300px, 0, 0); + -o-transform: translate3d(-300px, 0, 0); + -ms-transform: translate3d(-300px, 0, 0); + transform: translate3d(-300px, 0, 0); + } + .nav-open .sidebar-collapse.menu-on-left .navbar-collapse { + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate3d(0px, 0, 0); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); + } + .nav-open .sidebar-collapse.menu-on-left .navbar-translate { + -webkit-transform: translate3d(300px, 0, 0); + -moz-transform: translate3d(300px, 0, 0); + -o-transform: translate3d(300px, 0, 0); + -ms-transform: translate3d(300px, 0, 0); + transform: translate3d(300px, 0, 0); + } + .nav-open .sidebar-collapse.menu-on-left .wrapper { + -webkit-transform: translate3d(150px, 0, 0); + -moz-transform: translate3d(150px, 0, 0); + -o-transform: translate3d(150px, 0, 0); + -ms-transform: translate3d(150px, 0, 0); + transform: translate3d(150px, 0, 0); + } + .nav-open .sidebar-collapse.menu-on-left #bodyClick { + right: auto; + left: 300px; + } + .bootstrap-collapse .navbar .navbar-collapse { + background: none !important; + } + .bootstrap-collapse .navbar .navbar-nav { + margin-top: 53px; + } + .bootstrap-collapse .navbar .navbar-nav .nav-link { + padding-top: 0.75rem; + padding-bottom: .75rem; + } + .bootstrap-collapse .navbar .navbar-nav.navbar-logo { + top: 0; + height: 53px; + } + .bootstrap-collapse .navbar .dropdown.show .dropdown-menu, + .bootstrap-collapse .navbar .dropdown .dropdown-menu { + background-color: transparent; + border: 0; + transition: none; + -webkit-box-shadow: none; + box-shadow: none; + width: auto; + margin: 0 1rem; + margin-bottom: 15px; + padding-top: 0; + height: 150px; + overflow-y: scroll; + } + .bootstrap-collapse .navbar .dropdown.show .dropdown-menu:before, + .bootstrap-collapse .navbar .dropdown .dropdown-menu:before { + display: none; + } + .bootstrap-collapse .navbar .dropdown .dropdown-item { + padding-left: 2.5rem; + } + .bootstrap-collapse .navbar .dropdown .dropdown-menu { + display: none; + } + .bootstrap-collapse .navbar .dropdown.show .dropdown-menu { + display: block; + } + .bootstrap-collapse .navbar .dropdown-menu .dropdown-item:focus, + .bootstrap-collapse .navbar .dropdown-menu .dropdown-item:hover { + color: #FFFFFF; + } + .bootstrap-collapse .navbar .navbar-translate { + width: 100%; + position: relative; + display: flex; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + -ms-flex-align: center; + align-items: center; + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate3d(0px, 0, 0); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .bootstrap-collapse .navbar .navbar-toggler-bar { + display: block; + position: relative; + width: 22px; + height: 1px; + border-radius: 1px; + background: #FFFFFF; + } + .bootstrap-collapse .navbar .navbar-toggler-bar+.navbar-toggler-bar { + margin-top: 7px; + } + .bootstrap-collapse .navbar .navbar-toggler-bar.bar2 { + width: 17px; + transition: width .2s linear; + } + .bootstrap-collapse .navbar.bg-white:not(.navbar-transparent) .navbar-toggler-bar { + background: #888; + } + .bootstrap-collapse .navbar .toggled .navbar-toggler-bar { + width: 24px; + } + .bootstrap-collapse .navbar .toggled .navbar-toggler-bar+.navbar-toggler-bar { + margin-top: 5px; + } + .bootstrap-collapse .bar1, + .bootstrap-collapse .bar2, + .bootstrap-collapse .bar3 { + outline: 1px solid transparent; + } + .bootstrap-collapse .bar1 { + top: 0px; + -webkit-animation: topbar-back 500ms linear 0s; + -moz-animation: topbar-back 500ms linear 0s; + animation: topbar-back 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .bootstrap-collapse .bar2 { + opacity: 1; + } + .bootstrap-collapse .bar3 { + bottom: 0px; + -webkit-animation: bottombar-back 500ms linear 0s; + -moz-animation: bottombar-back 500ms linear 0s; + animation: bottombar-back 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .bootstrap-collapse .toggled .bar1 { + top: 6px; + -webkit-animation: topbar-x 500ms linear 0s; + -moz-animation: topbar-x 500ms linear 0s; + animation: topbar-x 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .bootstrap-collapse .toggled .bar2 { + opacity: 0; + } + .bootstrap-collapse .toggled .bar3 { + bottom: 6px; + -webkit-animation: bottombar-x 500ms linear 0s; + -moz-animation: bottombar-x 500ms linear 0s; + animation: bottombar-x 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + @keyframes topbar-x { + 0% { + top: 0px; + transform: rotate(0deg); + } + 45% { + top: 6px; + transform: rotate(145deg); + } + 75% { + transform: rotate(130deg); + } + 100% { + transform: rotate(135deg); + } + } + @-webkit-keyframes topbar-x { + 0% { + top: 0px; + -webkit-transform: rotate(0deg); + } + 45% { + top: 6px; + -webkit-transform: rotate(145deg); + } + 75% { + -webkit-transform: rotate(130deg); + } + 100% { + -webkit-transform: rotate(135deg); + } + } + @-moz-keyframes topbar-x { + 0% { + top: 0px; + -moz-transform: rotate(0deg); + } + 45% { + top: 6px; + -moz-transform: rotate(145deg); + } + 75% { + -moz-transform: rotate(130deg); + } + 100% { + -moz-transform: rotate(135deg); + } + } + @keyframes topbar-back { + 0% { + top: 6px; + transform: rotate(135deg); + } + 45% { + transform: rotate(-10deg); + } + 75% { + transform: rotate(5deg); + } + 100% { + top: 0px; + transform: rotate(0); + } + } + @-webkit-keyframes topbar-back { + 0% { + top: 6px; + -webkit-transform: rotate(135deg); + } + 45% { + -webkit-transform: rotate(-10deg); + } + 75% { + -webkit-transform: rotate(5deg); + } + 100% { + top: 0px; + -webkit-transform: rotate(0); + } + } + @-moz-keyframes topbar-back { + 0% { + top: 6px; + -moz-transform: rotate(135deg); + } + 45% { + -moz-transform: rotate(-10deg); + } + 75% { + -moz-transform: rotate(5deg); + } + 100% { + top: 0px; + -moz-transform: rotate(0); + } + } + @keyframes bottombar-x { + 0% { + bottom: 0px; + transform: rotate(0deg); + } + 45% { + bottom: 6px; + transform: rotate(-145deg); + } + 75% { + transform: rotate(-130deg); + } + 100% { + transform: rotate(-135deg); + } + } + @-webkit-keyframes bottombar-x { + 0% { + bottom: 0px; + -webkit-transform: rotate(0deg); + } + 45% { + bottom: 6px; + -webkit-transform: rotate(-145deg); + } + 75% { + -webkit-transform: rotate(-130deg); + } + 100% { + -webkit-transform: rotate(-135deg); + } + } + @-moz-keyframes bottombar-x { + 0% { + bottom: 0px; + -moz-transform: rotate(0deg); + } + 45% { + bottom: 6px; + -moz-transform: rotate(-145deg); + } + 75% { + -moz-transform: rotate(-130deg); + } + 100% { + -moz-transform: rotate(-135deg); + } + } + @keyframes bottombar-back { + 0% { + bottom: 6px; + transform: rotate(-135deg); + } + 45% { + transform: rotate(10deg); + } + 75% { + transform: rotate(-5deg); + } + 100% { + bottom: 0px; + transform: rotate(0); + } + } + @-webkit-keyframes bottombar-back { + 0% { + bottom: 6px; + -webkit-transform: rotate(-135deg); + } + 45% { + -webkit-transform: rotate(10deg); + } + 75% { + -webkit-transform: rotate(-5deg); + } + 100% { + bottom: 0px; + -webkit-transform: rotate(0); + } + } + @-moz-keyframes bottombar-back { + 0% { + bottom: 6px; + -moz-transform: rotate(-135deg); + } + 45% { + -moz-transform: rotate(10deg); + } + 75% { + -moz-transform: rotate(-5deg); + } + 100% { + bottom: 0px; + -moz-transform: rotate(0); + } + } + @-webkit-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @-moz-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + .profile-photo .profile-photo-small { + margin-left: -2px; + } + .button-dropdown { + display: none; + } + .section-nucleo-icons .container .row>[class*="col-"]:first-child { + text-align: center; + } + .footer .copyright { + text-align: right; + } + .section-nucleo-icons .icons-container { + margin-top: 65px; + } + .navbar-nav .nav-link i.fa, + .navbar-nav .nav-link i.now-ui-icons { + opacity: .5; + } + .section-images { + height: 500px; + max-height: 500px; + } + .section-images .hero-images-container { + max-width: 500px; + } + .section-images .hero-images-container-1 { + right: 10%; + top: 68%; + max-width: 269px; + } + .section-images .hero-images-container-2 { + right: 5%; + max-width: 135px; + top: 93%; + } +} + +@media screen and (min-width: 992px) { + .burger-menu .navbar-collapse { + position: fixed; + display: block; + top: 0; + height: 100% !important; + width: 300px; + right: 0; + z-index: 1032; + visibility: visible; + background-color: #999; + overflow-y: visible; + border-top: none; + text-align: left; + max-height: none !important; + -webkit-transform: translate3d(300px, 0, 0); + -moz-transform: translate3d(300px, 0, 0); + -o-transform: translate3d(300px, 0, 0); + -ms-transform: translate3d(300px, 0, 0); + transform: translate3d(300px, 0, 0); + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .burger-menu .navbar-collapse:before { + background: #f96332; + /* For browsers that do not support gradients */ + background: -webkit-linear-gradient(#f96332 0%, #000 80%); + /* For Safari 5.1 to 6.0 */ + background: -o-linear-gradient(#f96332 0%, #000 80%); + /* For Opera 11.1 to 12.0 */ + background: -moz-linear-gradient(#f96332 0%, #000 80%); + /* For Firefox 3.6 to 15 */ + background: linear-gradient(#f96332 0%, #000 80%); + /* Standard syntax (must be last) */ + opacity: 0.76; + filter: alpha(opacity=76); + display: block; + content: ""; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: -1; + } + .burger-menu .navbar-collapse .navbar-nav:not(.navbar-logo) .nav-link { + margin: 0 1rem; + margin-top: 0.3125rem; + } + .burger-menu .navbar-collapse .navbar-nav:not(.navbar-logo) .nav-link:not(.btn) { + color: #FFFFFF; + } + .burger-menu .navbar-collapse .dropdown-menu .dropdown-item { + color: #FFFFFF; + } + .burger-menu .navbar .navbar-nav { + margin-top: 53px; + } + .burger-menu .navbar .navbar-nav .nav-link { + padding-top: 0.75rem; + padding-bottom: .75rem; + } + .burger-menu .navbar .navbar-nav.navbar-logo { + top: 0; + height: 53px; + } + .burger-menu .navbar .dropdown.show .dropdown-menu, + .burger-menu .navbar .dropdown .dropdown-menu { + background-color: transparent; + border: 0; + transition: none; + -webkit-box-shadow: none; + box-shadow: none; + width: auto; + margin: 0 1rem; + margin-bottom: 15px; + padding-top: 0; + height: 150px; + overflow-y: scroll; + } + .burger-menu .navbar .dropdown.show .dropdown-menu:before, + .burger-menu .navbar .dropdown .dropdown-menu:before { + display: none; + } + .burger-menu .navbar .dropdown .dropdown-item { + padding-left: 2.5rem; + } + .burger-menu .navbar .dropdown .dropdown-menu { + display: none; + } + .burger-menu .navbar .dropdown.show .dropdown-menu { + display: block; + } + .burger-menu .navbar .dropdown-menu .dropdown-item:focus, + .burger-menu .navbar .dropdown-menu .dropdown-item:hover { + color: #FFFFFF; + } + .burger-menu .navbar .navbar-translate { + width: 100%; + position: relative; + display: flex; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + -ms-flex-align: center; + align-items: center; + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate3d(0px, 0, 0); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .burger-menu .navbar .navbar-toggler-bar { + display: block; + position: relative; + width: 22px; + height: 1px; + border-radius: 1px; + background: #FFFFFF; + } + .burger-menu .navbar .navbar-toggler-bar+.navbar-toggler-bar { + margin-top: 7px; + } + .burger-menu .navbar .navbar-toggler-bar.bar2 { + width: 17px; + transition: width .2s linear; + } + .burger-menu .navbar.bg-white:not(.navbar-transparent) .navbar-toggler-bar { + background: #888; + } + .burger-menu .navbar .toggled .navbar-toggler-bar { + width: 24px; + } + .burger-menu .navbar .toggled .navbar-toggler-bar+.navbar-toggler-bar { + margin-top: 5px; + } + .burger-menu .bar1, + .burger-menu .bar2, + .burger-menu .bar3 { + outline: 1px solid transparent; + } + .burger-menu .bar1 { + top: 0px; + -webkit-animation: topbar-back 500ms linear 0s; + -moz-animation: topbar-back 500ms linear 0s; + animation: topbar-back 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .burger-menu .bar2 { + opacity: 1; + } + .burger-menu .bar3 { + bottom: 0px; + -webkit-animation: bottombar-back 500ms linear 0s; + -moz-animation: bottombar-back 500ms linear 0s; + animation: bottombar-back 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .burger-menu .toggled .bar1 { + top: 6px; + -webkit-animation: topbar-x 500ms linear 0s; + -moz-animation: topbar-x 500ms linear 0s; + animation: topbar-x 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .burger-menu .toggled .bar2 { + opacity: 0; + } + .burger-menu .toggled .bar3 { + bottom: 6px; + -webkit-animation: bottombar-x 500ms linear 0s; + -moz-animation: bottombar-x 500ms linear 0s; + animation: bottombar-x 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + @keyframes topbar-x { + 0% { + top: 0px; + transform: rotate(0deg); + } + 45% { + top: 6px; + transform: rotate(145deg); + } + 75% { + transform: rotate(130deg); + } + 100% { + transform: rotate(135deg); + } + } + @-webkit-keyframes topbar-x { + 0% { + top: 0px; + -webkit-transform: rotate(0deg); + } + 45% { + top: 6px; + -webkit-transform: rotate(145deg); + } + 75% { + -webkit-transform: rotate(130deg); + } + 100% { + -webkit-transform: rotate(135deg); + } + } + @-moz-keyframes topbar-x { + 0% { + top: 0px; + -moz-transform: rotate(0deg); + } + 45% { + top: 6px; + -moz-transform: rotate(145deg); + } + 75% { + -moz-transform: rotate(130deg); + } + 100% { + -moz-transform: rotate(135deg); + } + } + @keyframes topbar-back { + 0% { + top: 6px; + transform: rotate(135deg); + } + 45% { + transform: rotate(-10deg); + } + 75% { + transform: rotate(5deg); + } + 100% { + top: 0px; + transform: rotate(0); + } + } + @-webkit-keyframes topbar-back { + 0% { + top: 6px; + -webkit-transform: rotate(135deg); + } + 45% { + -webkit-transform: rotate(-10deg); + } + 75% { + -webkit-transform: rotate(5deg); + } + 100% { + top: 0px; + -webkit-transform: rotate(0); + } + } + @-moz-keyframes topbar-back { + 0% { + top: 6px; + -moz-transform: rotate(135deg); + } + 45% { + -moz-transform: rotate(-10deg); + } + 75% { + -moz-transform: rotate(5deg); + } + 100% { + top: 0px; + -moz-transform: rotate(0); + } + } + @keyframes bottombar-x { + 0% { + bottom: 0px; + transform: rotate(0deg); + } + 45% { + bottom: 6px; + transform: rotate(-145deg); + } + 75% { + transform: rotate(-130deg); + } + 100% { + transform: rotate(-135deg); + } + } + @-webkit-keyframes bottombar-x { + 0% { + bottom: 0px; + -webkit-transform: rotate(0deg); + } + 45% { + bottom: 6px; + -webkit-transform: rotate(-145deg); + } + 75% { + -webkit-transform: rotate(-130deg); + } + 100% { + -webkit-transform: rotate(-135deg); + } + } + @-moz-keyframes bottombar-x { + 0% { + bottom: 0px; + -moz-transform: rotate(0deg); + } + 45% { + bottom: 6px; + -moz-transform: rotate(-145deg); + } + 75% { + -moz-transform: rotate(-130deg); + } + 100% { + -moz-transform: rotate(-135deg); + } + } + @keyframes bottombar-back { + 0% { + bottom: 6px; + transform: rotate(-135deg); + } + 45% { + transform: rotate(10deg); + } + 75% { + transform: rotate(-5deg); + } + 100% { + bottom: 0px; + transform: rotate(0); + } + } + @-webkit-keyframes bottombar-back { + 0% { + bottom: 6px; + -webkit-transform: rotate(-135deg); + } + 45% { + -webkit-transform: rotate(10deg); + } + 75% { + -webkit-transform: rotate(-5deg); + } + 100% { + bottom: 0px; + -webkit-transform: rotate(0); + } + } + @-moz-keyframes bottombar-back { + 0% { + bottom: 6px; + -moz-transform: rotate(-135deg); + } + 45% { + -moz-transform: rotate(10deg); + } + 75% { + -moz-transform: rotate(-5deg); + } + 100% { + bottom: 0px; + -moz-transform: rotate(0); + } + } + @-webkit-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @-moz-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + .burger-menu [class*="navbar-expand-"] .navbar-collapse { + width: 300px; + } + .burger-menu .wrapper { + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .burger-menu #bodyClick { + height: 100%; + width: 100%; + position: fixed; + opacity: 1; + top: 0; + left: auto; + right: 300px; + content: ""; + z-index: 9999; + overflow-x: hidden; + background-color: transparent; + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .nav-open .burger-menu .navbar-collapse { + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate3d(0px, 0, 0); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); + } + .burger-menu .navbar-collapse { + display: block !important; + } + .burger-menu .navbar-collapse .navbar-nav { + margin-top: 53px; + height: 100%; + z-index: 2; + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + } + .burger-menu .navbar-collapse .navbar-nav .nav-item { + margin: 0; + } + .burger-menu.menu-on-left .navbar-collapse { + right: auto; + left: 0; + -webkit-transform: translate3d(-300px, 0, 0); + -moz-transform: translate3d(-300px, 0, 0); + -o-transform: translate3d(-300px, 0, 0); + -ms-transform: translate3d(-300px, 0, 0); + transform: translate3d(-300px, 0, 0); + } + .burger-menu [class*="navbar-expand-"] .navbar-nav .dropdown-menu { + position: static; + float: none; + } + .burger-menu [class*="navbar-expand-"] .navbar-toggler { + display: inline-block; + } + .burger-menu .section-navbars .navbar-collapse { + display: none !important; + } + .nav-open .burger-menu.menu-on-left .navbar .navbar-translate { + -webkit-transform: translate3d(300px, 0, 0); + -moz-transform: translate3d(300px, 0, 0); + -o-transform: translate3d(300px, 0, 0); + -ms-transform: translate3d(300px, 0, 0); + transform: translate3d(300px, 0, 0); + } + .nav-open .burger-menu .navbar .navbar-translate { + -webkit-transform: translate3d(-300px, 0, 0); + -moz-transform: translate3d(-300px, 0, 0); + -o-transform: translate3d(-300px, 0, 0); + -ms-transform: translate3d(-300px, 0, 0); + transform: translate3d(-300px, 0, 0); + } + .nav-open .burger-menu.menu-on-left .navbar-collapse { + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate3d(0px, 0, 0); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); + } + .nav-open .burger-menu.menu-on-left #bodyClick { + right: auto; + left: 300px; + } + .burger-menu.menu-on-left .navbar-brand { + float: right; + margin-right: 0; + margin-left: 1rem; + } + .navbar-nav .nav-link.profile-photo { + padding: 0; + margin: 7px 0.7rem; + } + .navbar-nav .nav-link.btn:not(.btn-sm) { + margin: 0; + } + .navbar-nav .nav-item:not(:last-child) { + margin-right: 5px; + } + .section-nucleo-icons .icons-container { + margin: 0 0 0 auto; + } + .dropdown-menu .dropdown-item { + color: inherit; + } + .footer .copyright { + float: right; + } +} + +@media screen and (min-width: 768px) { + .image-container.image-right { + top: 80px; + margin-left: -100px; + margin-bottom: 130px; + } + .image-container.image-left { + margin-right: -100px; + } +} + +@media screen and (max-width: 768px) { + .image-container.image-left { + margin-bottom: 220px; + } + .image-container.image-left p.blockquote { + margin: 0 auto; + position: relative; + right: 0; + } + .nav-tabs { + display: inline-block; + width: 100%; + padding-left: 100px; + padding-right: 100px; + text-align: center; + } + .nav-tabs .nav-item>.nav-link { + margin-bottom: 5px; + } + .landing-page .section-story-overview .image-container:nth-child(2) { + margin-left: 0; + margin-bottom: 30px; + } +} + +@media screen and (max-width: 576px) { + .navbar[class*='navbar-expand-'] .container { + margin-left: 0; + margin-right: 0; + } + .footer .copyright { + text-align: center; + } + .section-nucleo-icons .icons-container i { + font-size: 30px; + } + .section-nucleo-icons .icons-container i:nth-child(6) { + font-size: 48px; + } + .page-header .container h6.category-absolute { + width: 90%; + } +} + +@media screen and (min-width: 991px) and (max-width: 1200px) { + .section-images .hero-images-container-1 { + right: 9%; + max-width: 370px; + } + .section-images .hero-images-container-2 { + right: 2%; + max-width: 216px; + } +} + +@media screen and (max-width: 768px) { + .section-images { + height: 300px; + max-height: 300px; + } + .section-images .hero-images-container { + max-width: 380px; + } + .section-images .hero-images-container-1 { + right: 7%; + top: 87%; + max-width: 210px; + } + .section-images .hero-images-container-2 { + right: 1%; + max-width: 133px; + top: 99%; + } +} + +@media screen and (max-width: 517px) { + .alert .alert-icon { + margin-top: 10px; + } +} + +@media screen and (min-width: 1200px) { + .section-images .hero-images-container-1 { + top: 51%; + right: 21%; + } + .section-images .hero-images-container-2 { + top: 66%; + right: 14%; + } +} + +@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait) { + .section-images .hero-images-container, + .section-images .hero-images-container-1, + .section-images .hero-images-container-2 { + margin-top: -15vh; + margin-left: 80px; + } + .section-images .hero-images-container { + max-width: 300px; + } + .section-images .hero-images-container-1 { + right: 28%; + top: 40%; + } + .section-images .hero-images-container-2 { + right: 21%; + top: 55%; + } + .index-page .category-absolute { + top: 90vh; + } +} + +@media screen and (max-width: 580px) { + .alert button.close { + position: absolute; + right: 11px; + top: 50%; + transform: translateY(-50%); + } +} \ No newline at end of file diff --git a/web/libs/fonts/nucleo-outline.eot b/web/libs/fonts/nucleo-outline.eot new file mode 100644 index 0000000000000000000000000000000000000000..3625494fa6d1e2fff9a775ceef5f14173ad376b1 GIT binary patch literal 30528 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 literal 0 HcmV?d00001 diff --git a/web/libs/fonts/nucleo-outline.woff b/web/libs/fonts/nucleo-outline.woff new file mode 100644 index 0000000000000000000000000000000000000000..425ee841b3c573b2a7ffc8ad09ce8d0c17a7cbef GIT binary patch literal 18056 zcmV)(K#RY3Pew)n0RR9107i%a3jhEB0Ctc70RR91000000000000000000000000- zQ&mC$009U90027x002}VizRwbQ!g?A00Be*002Dz0034wvPQ0BZDDW#00D#m00JNY z00!CwDf|&rc001xm001@&5!hg8Xk}pl z06@S10012T001Ne0s>oTZFG1506^dX002Y)00ET975~9(Z)0Hq06`=G007JY007L5 zwxs-RVR&!=0738o0018V001BXfB^7rVQpmq074J|00A-p00J(pYnQWdZ*z1207FCo z00Th)00h~n5Fa*poMT{QU|`^4FkrA_U~+Nu31Q&NNi4}@kYZqAfB=v@GMh0cGd+=k z1I7c&v4Cj~AZCMz0stmE1xNsRoMT{Q{LMIlft7)Q(SSj35F4tmFvV0001ZobA+yQd3bBh2cLCnxN7|iqebp zZWp9C0clD{Fc0eEIOipBudMSJGV|q6_PrTkaJ=q6#4v9dVU#h(IpPODIpdrQF1g~G8*aJd7xz5yn^OEE)%^cy&_nT0 zepS+EZRJnD!gO*{hGs?6c}P{J6PBtCwZ>3u4Ykg6+ES*!BGp@*B~pW-d!HJ*{>vLv6J9p&QRYQy7z;{ULa+$AxK&53Q`tZgOs87Eg9;v#ZDn*XtrXgtA@H} zsOuJ6h_qp7wrQwahOTcL>W-oA8tR_KE+b{J)kyn>t{)hh9a`)>Qif(n7JHC%Y_SnZ zCx&LHhVDJH*q5X%HYX`V*Ut_0!cZ>_^~zAM4fV!QZw>X%P=6Wfy`erB>Tg3W8Kr+$ zD-QK|oVC3Plq6SqCK~rf+_4Kyb*ElfB*mc{^gb+3Gjt3U_lrYCWLw6Dnam4rS`)7GFn2*XntY7 zm+Cg^vuFl2>XRt)+sh~l+l#1^Dy2G+Ka1*R8_DoK3X3R3Ei{QzQM-jsR5XPkVqzpB z_!5!iY2=w_R#3CiXrlh$Vrw1cThEAIilSnB6$uGj0y`O-@L9!ZplcciG^1J= zJ-J%Q=L@TM4*KYPzmI&&@=?Dp!eAB&-3pv7BWIZ=n2;dw+nX*55QB& z6uzSZf}bMlEG!}TfrpwwG^jM{je2)s9`>}^86li$qe?0Y;d!DE-m?>WU3S94{OA-5 z*Wn}caHK5;on9phD!tA>^k;n|tBawn$A_!b!nMLp(1Sq*#=O$21jFAv>hwCn z@Ry5&g_14~p`&_T=-W|mmZ5u>P(&N`vW4Pqy<9{k=*c4M&h>RHtj829_(^WaSHkc<$fo#ym@+N|0# zbcAZDIw6{BkYoM+Mt>D;(J7-|jXE!G*NSsVGf9g?suJ7jl@7hLopqupySiU1YqKla z0<_s87O`|q6gAz_Gzp=XJLlr~fN&(u@`#j78VA=8j1&- zYnN`J^G>|B>qmH=cJt`+7v2UmcFEt%+N8ra&j}TwB`kuJzCc(NUdr0-jHGZGb%r9D z4B9NnYy*a%L}1p>pfa21>|tPFm=v?YAwjh3ScfJX8TJ9~Q_S;@5O6a>6@slr;Uh$vL{I>MlA0}&epg%!q1ED`g zY~xEMga-fN#v9RWx>hVj=~*xzt7Gqc*J0$m`S!`f?|SEgpz-T(Vo^9O+$cOKJTAOl z_*cS*gii@y6uv&x);-BCdO zJEprq_p+9f9c-G;hb1;gEmZEoXIOhM$}rLS=ex`TvPsOY%q}?38ZRJu2KH0dbihoW z52w!{ZaX3-7I4F0D%hPt1JHZyk}|&tzi6);{-b4%c{EyRsB&AS?ie9NwAAvliKM7( zgofe~Htc3^S%tZ8)G03H?D({ah-MOxrjTPvdcn{Qy`YNJvtL`AFr3M{B713!HIt5^ znWC&tEAURiVpX+nkugCM9_x0@vL22dFB$l_2GT%uyPmf^RS|Vd70o9Vm5L$~apb3I zO2ecHIvC|+l}KvTGccH1+au^>amm&tRaZ=Ek128%4MZbz0F;zuJGwowN5hIgo)CB zDvP3P*$$Ech=`6>oFoXz)r_4Yx+x*Ywp`J0r0YDmd|vT2MU>P%jl7H_UyfeCebITr0McB8erd|Zj@!#F&numw}={DU8S0irMISAgL7!*x=Z^~*KMWj z#0N>rDEPYW=M0d9*ok56BwZ9i9z;CUDWI$YLFj-TTF^rjI-pS^QE8#$1*KGp_{rpj zM_WXdfb|TUf5R!;tDKxh=WiW+A7!G!Q?oxfI#@^RgY)%lT`%Ypxj055u?j{i2e)An z5yj}M(}P>lzqw@(-1Uz?h1RawUmF9ErN-5HhIO<8m`qW&3tGx@5}m_wjRF>E46H^| zm=@Z?f^YyZ4%{o4Bc}R_2sRe3IBGNjdY8NqX2tl+YhR0nZ$`5JrnNzTQ@g^*d?}9C zM?ZrVZq+s!o<)Cr)vdQaVQAOyZ!{j8y}awcva+!<`q_LoPD4Kyd_cQ};q$#z6u54#Of5Vn4Xz73e^fN;O?@Ca|)2sF1igh)jkj?6OX zN6b`aV+NFMk88%{rOpu+N9oBAABOVqFh^EPBB*lDAHuEfJV5Tc4)zj@W)A*}QfOB9 zI)JoAm!@-esHY_C+*UL&C1XsHAS5ZCTCnov(3q(dbjD9GkxVNk8t(D7bJV$Rf;w0t zs&5biDv;={`9gcQ^^fv(I}aDON#@8 zsFRJzEM(1`3V^IEm-AKKYfJ=|?x%cLHC?zo@n8lKThDm96`t{}Vmlh#flbM>BvVAJ zZ(&}28Ekb0(D*V#;+<3_s0~>f??!Q!L(T+}P9nnlF2{P$#=Rn9c96=GsMl!&JVt6> zqpDb(*5L7^R665{8YnzWrpspYfhSQaEK&wLi=q0dPnBzPb2as$2OoS0Z90S1n3Fku zrf5}dw~}=!((+Bmsr0~PRcIW_NR z0jibj0QLYI_~p3;hX3Gk8?F6lTMcu5wz!CeCk8*b&9NUc2|nIz_MK~s)_cklF&`>6 z$G^C7cF;e&zPgJ3OLy=fdhdfVD#8;l#YNOF6hQT!TiIY!gG>Dg({6H1>k5&O8)8~M z+dzw?xMhg8+2PKNAFQB_c(4(#Z)~uuZNNl|`-5-27pC7u_*)V>gIoJeI zh*$Qo+1zSvUX1%|EqF2*p;2EaSbb7B$t~V(T=IGq8v%GB48d^a&2bs%%ubI_>_h}d z+%NFiDZqUyy+)$sd)FATqQoc#l3eBq8hNfm| zMHL;>?G$J>uFoq>J}X&eRcU%Mo7C_|OF2?J_`5!L5S)cx-HiJuj45af+6zmPms%_@ z_Oz@lKl-RFXSLpv+i;>H!Kk9l*VUA%D!EBh8XuSZhG{6OnNssJ7N9ePo^)czi8m9y zs}8aA_c#}Zt9Sbr{_9pn<@YE&w4gjj>@fP&+-^|cs_ zNX}U5;J=|cqDzAfNmqT8&2sC=?BZq|C#Lc%DbqI%N&EZZ-~ZZbU4+@iuojXPqc-?x zAHLA7HA9h+<%_6{_2HL@HdZzsZ>}_(D<9jlR+3YiX==6%GQG38&gE~Lw{3zx81d-D z8W8qEnO-35B|du=wa%VBzp{c_@GD$In-|&d1+;Mien`6fweeC9Q`xHHW&3LUcJJCI=5m`?yO?q!u*o(DFx=}L+-*CiK*h&#|9BcUS5~%!vnbxiaHH|e3KPJHlfD%>VCFBoh1SAA zG5`W?>jQs?kyz&rm1`&LudnxanVVl9%H<#DXVaoIu^i_oY{fV-QSnrD1*1;|!A?~-kM z2UpOqSM*&D6|T5jZ*I%c<}UwQeyAHFrV)0w$Tl1~&wa|P{B;l~4rXB!o!>l<*0%(} zVjJs7IKO&+HNp7O)<16jgzIG$`n(QISYTG4bJq&*%sg|LwTH~9fR-?Dyk4aY5G=s~ zBQFTk68jNyF5Yq?UGk>)-e{4hMe#+;_eW#Zh30+tote5|ndD2dq)+AJYio1Yn0EG> zj;l%N%`gg&hZL37(|cT1d^(n|-FMYHX3FW{;O+Cqg*QJa(lMhjpYk--Jl5*oca2E| zy!A8a8v=7I1}RA_baI2Bv6fNPPOx)*L_z=QM!0j zH(ChgvxpGMGt+vRrnSAN_3>ty-hW!h2+OWws-lRxT|Kv)?cdDyDPwjkTdJvL^j%Ud z^o~@HS?I_6Xi4?dSQ|GZ9VDt_VaneukI8}nY8VzBtN0t zp)~VUZG;(&gYx0pByCO>CuQJsS>G<$*>M&6Pq7w=ot9vy<#j!aZH%R8SkHK}8aMKb z8CCW&>J889H8*<2>!#|*^S(o+444cW$uyqo>}gFNDY?+%U1Ty=_o-1$Q-~;)Gg_F= zXRNWYI?39~5=~j2XF1A};^g4u!FMGS$eko=29Qh%G#1|ar=hL6Rk(NLMH>Fd3H{xV zVA^nD91>-Q_7aJW{KUDP!<^g&o%V1PdMr+dx20GN8XThcD&MItMbs978D}R{-A)I2 zBW%vi%_$i#EjCMAE8(-P>fZCLk%|HNzm*v>I~J| zJUhgMXKp^>8mzOpDy;B+90rx=xu*+-K2vXXCTXDfc;glR2@3-%wgHmV=Z67?OX=Yy z$OFLfE5n*5Npf98suJkL%v6zV6%5r8@nIwy)GoVN8>^}=wPaDMNzjEwSB;cRsNPLe z4aIcLCoEMVRv}BVtIEs^&F!ZiMU8^R! zhN;5oIAs#=o>#(!$poUN6;_!yDzXW&BMB2fo3mt;cByE_f9#}zgn#t8z|SsU=y_ol zxZ+{qI^jm)g(I#=BJHY|iBjW6Fo*(HX3^MRpD<$T;XzZes zb=8wb$qmoSS9n(1!{8?L6v2SQ;Y6y{(c>ED1rkqPz+fZJ4_1M&F@pFRY^jJ)HUG`L zN-t@MUt;?J%ZRA3oQagB!ZCy%Ot*e(ApradeW<^EWyBZhHZB|k^s^u=30Dcnp>J4> zG&L0M#3RdPy*JCkp@~~NEMgW1#Z1aA%<>_&W1%~~?*bkwjwQU=Mp)HkN~={$WlhEC z%vJ5TZ3*!P5M)C)7TIxE34q(VaL|3#4ZxQ+*Vp6KRb&_*rJC6^HJI-ibio;%m1QPQ zlIu!DRy|q%&GH*oR-JgUSd0q~$g=B6x-NOHEF)p11;omU;pp9>m(Hk`rDoC|-SO3Y zAD*9i=rTePxWWvug@eL1OfULw+lAR&ieMT8%F?q1O-~K}@-<=@Ath%}vtxpuIR(c=T7$d(Z-%oI~$DCJz2HS`d#NFUgfEYBUf! zg-)V9jb;-y;my^gS!cV}q}A2C?*XlP;lUTd>t{a)l#6W70mcE+z`2^-A2}kC7Gg7C zp1JMd<|9A{^K*?d?a17rw~H)3tRm;c?dW$c|E5#;)JJva~S zU{({Yr4#7wdgfTaf9&H;zuELC*sK+QCE8_PH=t_u;6cwt?|=Ww=^}dY!H+r4`dxP+(|qm1@#AOT5IOV?xmll25|jd;6EKt*pkY)X=p>yF zCkL#fnOfuS_hby%2rw>wwCUUb{#9Wi{6_Y`a@ivIfyKVi-}$$!FYdS^4Gr>UvP3NQ&WFo`$I5y@$9a zl_QJFjswD~TEq(rCmYJ@=BnMOb&sfwo)(%#`sPY8Ght|oq8StIJT24dW1b@s zY#UkC8TZLpZst(RPaV7NP~&J<&7kj@Ue>SOG&w&$YhY~7xM>qnMUA6;RVu}C2@x-Q z$3AP^tS`@mq$t|PL^`NWRsGCF2E>4No0X=McGP?-E9)sxjU{^UmdW~b<4~h_oq~nb zE*#qs+F;YK748ro6dn=Qg|otM3Lg>vy>MRmFT#Hn{`d3ZTN+f7Ncs{_8z~@v5_)Kk z!?t>oLBjWA%98*))K9P)hX6~!E!t5~VPF81JZqeLIQTH}93ij)`w$wAUSefgo(Q|#42DMix#Uivp{T{~tJi7sL^>Ol+3j`0=fT-V zy>5tJB$>F8OG{?G{-~*nO$qyQ%Gc2s{FLltsVS(=$y-RqT9rh&(J1e@jnV;@Z2o~& z#TieT2+6FmH$uC^OEemoWLy$pq|F=X6viI0bz-nvN&H`1T>t(rp}-^US8)VUL@@f% z9FvJ5yX-BYMJ9puGU!OAT)Uu>Ia-PqTKOS+E!VmDfGj@wB-nN=rS^vt`zFFBfP8|Q z%`JTA9qjAV_)Bp-_}1~WqFl>*`BvToiYTHFElZyNo1URmeJX?a2fB{b?2(&%PkQnU zD2$oe8GQR+9X~r$Ide)!2NgvSmqnRmb_SaG?_z8%LIv)PBN`h zES<_uRLV~7E5pcave+m!4CeO$L-lrf9x8w@dd$TKoihwO6TdvllWLQ~Fzut;{@kG% zKP|HmIK0S>d~?<`YsHi%VM$U`3nlH9`b1xccUr1gGtFF7>X}BCW$>i^#y;gWdsLM@ zzpDO!l)|g34*n7=K)y&yaxr?*XbYn)G9AnoltTyUSV7CHao6$`Fg}>-gyL2sW2Bs1 zowd7X!pJmQm=c}h!A~%e^Nu`ATz4iAp7A}Ayd5UJeYpz)IY zNk(ROCqE{+GTe^}NI6PCJgfKsz1LoYv zB#quN-1xm_(T(tyAdWA;jYX6CeHIDXXvMAdejKB}&0rE(bZ`%PKPUi#+im`Sg{Z#l ziio;XQ!YiKEBh*0NzOQfHG{<*WkV-Bo5x7jna%)l+mk=Xy#Da}t((u?d~?4KFXuq- z{e=6Le6>bNR-8OV=M^pAX(j@?)n?Oi3iJ0aK?T$u<<g|^XcB#%~UBtth0=5$7me;C0zR@pH!S_{1>6xqZ6 zU5a9K8m+Gb1cF(5=0riWGZHpb5s5_CEc(mvbkljwWe%KoXauwX!T{={gUZ#Vl<9|K zYqI=4knNv|4q3fFHMrn;nhx3@m;%YU^sW-7d@JRK)Y5 zY)LSGBvH}L51+k9#DmW~esMcaeh%>CvTz!-z$3$qG{%_tpUZ(X9?wf{YIUJ4o*U>~I9PB~2W!$+DjVc0%iEMVTyQ2>!E6 zAa|Pw8=WlIBa)lW8^NWe5<{DT&_961$ijS?5_&vqlI3#oY_10M3XACnv;_dDO`-s7 z2}9dFg}m1Vtw_rZ8nuDuzVqRS--&*$H!rF8q15V~V5C~Bf7k$F`pjw6Xd?8N)vtV+ z`4ztWmE*+%CVSD>o}PW`>DhGj^i#7>Ka~le`o#28pZLU6)1P=MjCSH*Z({K;o?Xpq zO?>T#KMXh5))0D)4qM-N`5Hfszq|?b+2~xR$A0hxobU}6DSORp;6t0bzH{#D;9Q%Z z%bX@`#xOlleuMUnZ-ig-nR|`|w?B%}-|3s1;nxBYgqH@lKPK$l*E-+;u2;C;oIz#! z6Y{D@;WFW)uTmv~UW*@n6fPe=`l!U+2_yLxgjwMT%-~yhe3?ON$Cud&fuSt4uT-oR zlkI}6GLVt(67Z3>c%@|aN1yG;1kV1Kz}heOWBv$PtX2!emn*WR|V6^J1=iXI=4wC zEwCIP082B_$6RYL!^e2#CH|2Pk0D&Pmjj-7Ags$y%F=bskX7iY^}C^)z|Ik(2Go|& z=a6L6Kqc|$ge~C}S16GhIqY9uNZTG8ovT~TE=+%Nk~#&$C^|vl6b+-`&^)~}s-|1a z&mx7UJLQ@oJ1^BrSEEb!q5k<8^}#Nkuu_h^4r7$kh_1)OJ3BnOQP-hxUx!vlCtSJi zYUsYdTQq2BkT;OAk|Y))*vOS?*f15-U=HkL1ECdN#EK#YST;pML{rAWRf>W|{gPe7 zx$-@95pdsrzcf%>qpR0azLC;1CXpnf6g&lyH$2CI`;IqP23t6#r7D&qYg2)i64Bi7y%Q8IFaxZc zG@c8AL5EL*PI-y&YT=E-JB8m8ep@&vd}`Z9hPy-g+YZ_!d!svYDJIF;Q9(>Re{Bx; zSi1L41gZKf(l8i*rbj&cw77K2rV^R=M(p)%D)oR-EY&=d`a>iuYNcqn^JDun6 zcj>vG?V4^s9cK4OSIGE(;7Ypjdt$1&IDW@%bu~|?>_W8CO)qA<0C!mZry+ubD`up- zOl~TY?f9NbO(3g8QRQ6LOj+Yj>F{ipO-{X$J3emCn3KmdDn+ljY|i<+)M&Uf|Jl>@9EWdJfb%Rw9 zuYkb<39bl*Sju>|Hd~7(veJ5M!d(aOPV41tZUf~$y_RIzEbI1CQL1vLf7CXco zGqVizR1#U^=7_%#I7%z!IescjHl=Ax`NUgF8cP!Ozzm)hO&7E&+~i6;SX;foztD=L zYwl~`B@)y^1uOIR2}32=a>2YxNQM^1vSVq}+7e6d68&vxxL~t#3nh+ znA1o`*Jx3eoK+%CJlyYJ4d&9GFRMkZvd5NzuuwTA26ctyrm7P~wW4Lm8IL*G?=OS+ z%9^9DXyX|Qf`RUK;$3OJL;Ll4UW3o-jc*v`xiE!VL`lZVuwQplHiA)~?#kM@JY)P4 z)%xAe^?|7n>-glXX_TsWT42Fbs^LuTp<~5*tYyiVVjk%N#?$&IDR2zy$aG*l570nc zWbf42fw8Mr_qL$L>Bmksr>)qq%&LM=Ne(Gk!j_k5JhaaNqjmH(lg_x?T#%)EpAQ@e z^44JMhZumkaGmf{VO@BKup#^|?~|lMc)Bs`gbrVf03LQe$u|yoOr?>KR4$O+q|3@l zb_Yks3-hc?N69ZqMd-*Mn-q#NfFIJI;_(ba|4x8LM&koRP;Nodiih2cO4_S2^&iX$vbXKg5mKmXrdzW7pik!+iH| z3N41~5cACN9v^zEJBe?4ewas7U{QRwAO&-8^cEUr%8PI15hQ`J2bq~?g>h6a@Dklb z2oiN&L4S&X_E0C7xVKYYjHXDOvQp{EeOgh=^?cRCogR!UM(@GM&tn8VIX2PLOWNLv zont4jMTUY3vJ6mWranD??@>*P(I%dnLaOf+eN$=X7Ov6dXg(P8DlFZLjQMH=)DD}D zkMMh?Z$L=QH}?%yOab|s1Iu<_Oq2d zcx3>H@G?qOxWlG*h2Np2t?&}5R7aFsv#1k;oe^eRxHWrzDGmHB&@^l;PbiM*t2reP6_ujYx4`PtiVQ} znb7$p*^kKq_tHGae&(^omlU0j0>rUiTm6A`uB2=wQ!of07Wf@LGg4IUvru_Y6q!{%Evc(QtjD1Ar+xEM*xJq_i? zOpKS8L~NmjgS~)I<`J2_oU)E|wh35RUO#F7A(yMQ1Jf_!>t;xR<__y6=O1f>(Pi6NJQ6imcCk)Z1 z`RCQjFFlS=PX<`g97XqabML-Gz)!GaDK{34Os4vRTdxnJ*TF>&EH3WfF98unlAo@4 zrXF?rNL7yC*nBljH;GE#fPMeA7h)L{Jg#S|`y^5704jc!iGEnAK5)SjZ*mix1TuqBRSU*UT06D}w@AYo!Dkn}T-CKIzI&yd3 zxoCaWvMp^n0RMOY6lwXcPax_wBbD%m+SlXhhysj5T_(2!M7lScAZ z*5uqUaWH488T7T<@IqI*iG!u&f-^=0Z6A5_Gn@4f8C60p>~NtdwiJD*rFG)4@N3fSV4^udbudcEaVskC4i; zxCbBKK>e82+sC8aA!s@c%-|)7zkTGm?2Kw|0qK-T6b$Vo4`o`I8@6D(=%!cUB^<-0 zO*%AOXwNSvHkLWRcq08MdO19DxI-mZQ#Se=isnib-9PwyG&L={YFeXetl62A0XED~ zWKe20j%~xr%9u<~edjAqXoWEI4O_`L9w9Q#DB|k+s;Fcrk%@*re7o-2nn%PRtgZb( zB%Wrw`llZ`Bd0Y<7A;xC)Ksx-DTF8%b3luhN<`HbB~_Ok`OKNWRS|`QDxgM5C2#@# z%WG?2)@9fvL!bLaUNgv+_4r@<89iBTEve%n$M(ES}@D04)bTglyTLW|fuucJx*iFOu)2=d^ z2*!UH3mrn2A%G1MKEj;R!!^kO?}$moL%>hsGqXDaFXd!yg;9wmsM4XC1_=CJ$1Y3& zVi0YW21+qbIoZfH6k01zI-u!NMJi%U6ni2nfR#atuV+#ud$O_QTLzf0%;EPPpBz(> zWW@P#Gi)usEY15*tFFd0=jjFv?ckzVE&9z2Je}eZTQwvzu&0W79XL#xRlvmc40(@*i=6pK+-;qZ7uaOjD{(yWqK%N@>e(d18-VmC^;-#u;_Do- z1`|w9FgJjH=XwUr3LCN_`)i%(YK~Dot9Qn6g@MME$#Ou6IE-n zp-OKiG_M%dn&in9-w02uj8$ zDMCaA6S+1fds3~c27&q(ELw!ts>qbG&EoM`0&9SkigxT|7FW=0p(z1bQcXta?%AW> zvYfWW7a835L5eM|B3Wh^PN zyQ{3;6up#TN`kia)2#s(L5xbm9za(&3NIFZS@@vv3E>&xOAOEBB;{;-O_fnz>Cm+w zZ38Nn)0My~#<7@pBaxpdTu4wM(=RRdo^W~M`|88xwNRVoHS&otWC_XgSI?6J!eVDO zcLnmGZzW@2~E6)3Pf$w6yvvN?Lt%i<{uR#ET zsb$);na(R0)B;UUTV+yk_g7mFcD0haP{<)x)`5-P7dNm5it-gmbBuC@ItDzzUXbld zS+)(iT*3IBszMET^jbBi`0;enS90b=Yrbt(Ym^;Os@0U@gT{ZZM3|4uj)u!+$#7_; zJh}#k>n-fugF<9QA?Rvh*E&zLywc{DE61jvU1xK7Y+7bjHA!rGKe}RQ`sigfHd+~_ z%U4)hbnqVZG9H`8;@~&nm4!d)Cx8F^KRY&k#X_Fl(P{pb#HR~t1#+i6#v!WfBrXg&6B^gC4Bt)D}L@S18_C|DCOm&s`qSSoR!bH$z6Ep0mh;sXzrj^nx`M@Ha z48v!$D9E+P2-S4`k31L})~G0}ddxhT+6buRY1St$F)XE^`DIh*d4NK~4EVwD#I&n?fPf^v) zWC@nU*29nR^sHU^!ygv*frWpG@Vf0Q!$E+&vbzY{LaNzl2lEG*dtR!$<<_Sq` zTm;AZ1|laTG92kodf~&DKK7bPH)^6=k7|sBS5S zD$787U#u$G7J)-E86}+RA*xw4OD&C}hZGl+wSNC0n`#cr)Pf$?Op1P$$gHnL$!?Xu|PGJBT005kziUFg9FUVWn>C6 zTb_z&@&QSy;Dcy9ZZ1+)k^jKcMXX^gV^R11Kvq<`*o?=~L9vB3UAaTiHL&KgtSNU= zVz4A0%4>)T76o6J77jw+KOww*R6is0#WWI3&BZoBTBBvi!tDi3V7B^05?mf4Y;N$t z(u|fhVVx|G))px89LZ!=l=*~;51kpwdT6Yv89a>JBz1K!ukY7X13O4HeY1OY#;|=O z|IL(R__mQLWomiLH&v8Ex}xoGSU-|&xtOy`Dw`Z?1a{Cv_IPNpCD00br7qjL|KV$U zGi`_}Y)UtO9kWc4U}=7lR$IOFXt7v%L-R@&XG zl`C=$IZ@v1q-5PPi2=-vn3gUphMTu?X$LjIQq;Q=Dj}Aa5NJh%W=X-fVCWR!2C5{{ zqMEZ{QsOyfVdg5cVPt1rd@MXd+>A`kKr_gZ@R(evr*o~zT&rMKl!^SQGv&s()IM{^ zcwt)%!*IgxCFWe=(l&@O={LUX%dv_9*Rm5$sp_0WFOT)z#86;(?dLoeD zVO|1TouWi!f7i+syuy=v8#$5gkRHEX=sNf+d+1*eD_)hFh34b>w-V7fb^Q zhUrF%=ONt;OR+DDim7wZxx$u%h0&U?D`llVud)?(2AiU$5nTlMh}J-30JPJ@)^D&S z8=v7zHog>XI-Q9~voeGrEu}|Z0mdPnL8H|e3r32dOd7PDS1gAbA|zvJ(L^VHcp*<3 zJ+@Ys(rXawJvZ->u^}l=zEa6MiezAUZSaBJOE?Z|%vgO_+;J|i1#ZX{;V zEba{X70;i#XyvZ+CF+$<>^o8NsN`RlGttFSIpLN7x}f<5P`^4sMTsg3m5PY1cpWFp z%M6C=Y7x$v{{ilz2eb4f;EH?s_$D(__Q7tj@trGRzOV=@%Vk-cy-u60B$NypOWNj4 zxx%?on@_|_j}7e{%RA`q7&opzd-LH%r9CrsK$paaA7&7MrpLz8W~@azTWj;-hp}W- z*_fbJ<+<>!l$I-m~!=LNu&ip*)tOkCZ_>Jd@Dn;nUz*xNgoar zLM>O8-E5%Aj<2xw0gZnv+J0}6rsZHvM00l)jsjwxJL!nnKG~tPdbFUPzFLwZHPdn} zquEo^M0}GrT3_?0=zsHg{VJ~{d;Wm$_P}umfrWYaG=#pKi`q-0bmm5{KC(6(uCZ0! zDm+$-d60jhf!_T*G2s88*?{@-rmhgDS^?fp6}dT%q_HTA79^yI%?XLE9a}2ZYedUw zB#OcbmddQy2Ttj!Tk|h^>~Ms>{(KSPB3At<%2_fIQ*a3gT zgpLqPrCJ@!GLE8X99W=i9XKV6Kg`ERLe_OMx4#&D9wh62;7E@HOM3k!E4Fb>-QhZX zScJ!fh@q8a9f^_6Wfqn7U1xjMD;|xbBK0O|bh<=?*E z@Bi+uw}Yo(CbC6-{$!`ONtXG{?4WZ(U0>J7k9z>7RY{9I+thQayuPkoHJ49GvJpz4 zt@T_%ci;}G;mfTSEA~&xyBC3r`*`Qw;2V6stD)Xz|6^cMXbUHVGn_H_!$mw2e;5ur z-6b?q%dCTkWvjTy0umLrq9cPZBCX7bjoy;D0PHcbnjRahM(5oy`I3cS(zcA8uQ^E8 zLn7fg#u5p2f}Jdq$TQkU$Jx9_qORE&Y%SSToeTDx)>h&NCG=7487$z_EGX-!-%_11 zz(A)l+aY-dW8tgiyr&pIOJH{yhhggs-rdyp<^y};mBH6Sj9ZE9?ZiG?fc<_=_+8<1 z&ma99CK!yCQ(WYHnF}EvmR+^OOQNF-^E<45NlXBFlFk6wPh^XMN(ujG25(nDm6b*U zl=m5V-vK>I=HDnuf(=y}lj)Wk$0I;2cs+3{^ZWtVVw&PH#{cZVHQ7SY z0EknTCdrd*xB-coB*n~l zX@lyH=NBBwk~2r@T3IXX0pDkp#@h}%c29=FH>k?fQclR z&ZSh~`mV5TpD_mOJSQxS*4Z5j(83aKa~jv>Vstss^jNV@`;UgG(3tC8+ia*I!HbKh z4=hT-72#kd|Ml6*ofU+(hWPEsY*!Wm6b9@0O{|HF2Tm_8B6Vu@IdI$H119PO-c${NkWME(b;uV^f8S(r!Um3WW7(n1^rS}#X{r~I#Z%o`wtUxXY16UdWHu?*~ zc${NkWME)o00Ab3|6l)qW#VRFWIzR}09qIXVE_OCc${NkU|?WE!T3*-zI3~~(Q4Ehba4p0v04|Wh_5bzOj5#|ys5~32;6S5Rc6_yqH7OWQh7iJg| z7=Re;8EhIB8e|%J8ju>W8q6D59AX^!9uyv!9{wM~AW9)nA>tx7BLE}tBs3)4C8j0N zCTb>tCXOboCtN3zC&Vb?DjF)LD)=k5EOISYE(k70F4ix0FfuT-G1xLPc${NkWME)O zWq86M$N&ONK+FY%3=IFld6vn^u&j^XpXxzA&jc!a^V9C-2 z>{+lcFoi0dC=|;Fkeh_Y>hezQKeP6hXXN-hyi^Dvnn02(^xV+$C0(bo=+aqI>hW_W(;H(|hl|Cm;w> zI6^xBXvO*ZEN%Hd1rNjy0W5ZA2fbUp>yh>Te@NWI9{R{IK#n0sC@{tZ`#8WMj&O`S za3}7<-M9z$;y&Du2k;;s!ozq3kK!>rjwkRWp2E|32G8O-JdYRfB3=T+%XkG-%ur&E z6D+XADb8??SMeHN#~XMPZ{cmcgLm;B-p2>{5Fg=Ve1cE$89v7s_!3{?YkY%m@g2U$ z5BL#3;b;7UU-27$#~=6;f8lR%R1l~kvFaW2M%tRQ%DIiHzOh}t#*a0n9iIpR6s#bF={nqBU=S$ z6PuL;QgW7g-bOjT0h(XlUT|9(#)9Y&0k0&RFAD;R1=rd-7i%e~{?SgR>DjT+uB}<^wpKe{v-A1k^`F*X+&EhgrQu4mv&Ce^FI*c` zBBjoTE6wAYBpWppL>XC`H`-OSmR-$RSMz+bmb~_BXS)sAIvKsllp!+=Nm*`5=D|i@ zvT`xd+$ZM;T5TxBk#@v#$I*FdbHhEWR5LNk(s_Nw_crK!v3~=CYSyW^L9HJcS1B#W z#D#7WPT81SMbO4h?DRE#dfex#<4BPCU~iR^rObUSWjXNLJOQfDPwF8guqd~w}-#_M{27g7^s zk~b(w<1XYVQi`tK<-slz&R??WNfA3&ur2TQkh!QzMM+!l9oc7gI!wIkj9iWry^XH> z^qvNZ#GKCZMDD8Gwn)lQ1)2vlAanTjWj|feiPltsUJqxp`H-w0SZM9wLW<-3E(eKO8=G8p1Z*4tkoUe1A}Uv{ zh)PkP{r@Ky$UZAd6TW}Z8SZM%_3 ztka6T8SVkl0A}j@he)@Y-IPX2C81_hC_NCmg-s#QlK_D(8|W&M&}tAAY-el~8(13N z36_c_g7w5ZYoK!T=Xg$T*&tH|9Yp=GZ6VC;T8lqAhheX6=QAp zUKP)HXhaJUs%WGVA^CKM=uIO@tcu#3-{Lk@Q@QK{v?wAGu*{YkJb{BZ^R|=N>YlQw zupxd=5j@q6kKfyyWILe7lg0yW3aCkZ13&nGaV?X}FzNl6>=dvu)U@}jxekqO?VTNx zk`sFK=Cod#-mLbcAWoXjLgLW0JX}}?DW3VcOg_!!YQ2Ax_TOYXP*_NK0BDJ0`@?a6 zUZ?ieZuVvS(DDR8ZVxG`Bp>iJ*{i)i5SXr&I6y8C+6nysb1?b(l?0xB04sXupQJ1d zON)G_JF}gE&1~kl|Fdb8O3NHE1`*-QHwwFcwIo-S+IE$!U3beQ4R#N954MKwCCN)# zA}(pDJ*2jWG_znW5g%m0oP`%|5K?+^aA|mux<=t`(yMc7MEGxWyrmY0i};8|$RTnZ z(l9xU&HfJ;7qtwXQD6ZA5~6$W$8QWQdED6hZwaX&+2ZO|AjPwfgZF)GNr@iB=S2(- z!#bDq5xAsN-q$dTDK7lyI@#ym#}2MNF5sMU zN~zUp)CQy8WVTpsc8AmD_IQ0T=Gf~B z%zWkf8G>#Y98(%5gohD^St7znFfxo1OEjzyZCE9%VUetdWwMEN8rFyoW5Ad&7K|M` zq3YL;*bNoS17;6%fH}qis90xUE-*d}feD7=kg!-0#fpKs!rWl)aRw^Z6POpw8|DM^ zh55n!VG>vXED$Dz1;K)c%TNd`6c$!<8%|t>;u;j!p|}B6WS0VqjN4H4D+4BnDPYRs z5foLd3RrZFHU?NMEDjbQ&!OQZlvr#M)vua(4Hc_pcn2j9@1c}pQ>nSt5g(!W1Pvdc z3|J;C3ziMbf#t%M!SY}jOb^S46~GGTF^>daG>LCud{>SxCm*Ys{I3I;G1a~brlQ2L zl_+DAv2vGQwjMep5AYz+r)#pP8&BI`2(n*hV#qvbAgx`Au$Hhp#3FH}DX|d5!&CL8 zEms5yP}n$F1!r{_%~^vPqIdv^B2QZ9vR;D~RYSBKktA1-^)7}Y8HNW+6ySh3KuNL> z!{Up6SD&fAU*>uVpjc^&#$OYGPkc7icN^&N+7WsHs$@_&s|CgE7TrQ+9^h%Lan$Sop zDo8xhsBXjREKoqZG$?FJg66(jv-!lZ1}DcU2)Sst!%+f--gu0~5{V^*s5kV8Vi}Df z#7L9w+D0DxT|iIn@$&-)GaiCWyUJKDn@W}6yh5PlI=F~Px$?e<2GgS&f-UBAS)Ppl z!ope?Fdnm&B)Pb+5XMJw6s(&4b3X3Wx9M~|o{ssZ=MO9bLVs{7Q=&7_E5WkV)5p&oy{RFT!jPy(clT6or@4M4t54KE z3C6N$yIp&@o~7oW_AlE0S)!0BlT81!OOMLQ7hEuT@fnh=U*S+6^mlCk<5Xu>T5Bhe zXOpM9Sv2(i96{M;;r#+@5#N1$^AA8{5U~FKOL3X>2_doqPy(PBB1VSw%9AJ)PloxN{~oA1%+6 z-icTjR+IElrdQ&$#hpk_R4fzC9Z;3(U+Uhr#T9g2 zT?3pgHE8n16$~IvqKC6H*dy2^*IqSkGCm4lnZ_*4n2Uw~zE9P;7OWL#I*B^{lkRJ?L_XS%7*ItbdJL7jCnVjg@$pSzeBeq z+cQoMv(KS}p;;qjoV0rueG>#>$ep2lFoQ&S9ZP8vuyBh*^6yz2=PO085KOX-k`Y$_ zJU@tD12bhXlrGH$P`G-0LWVJEBL^MTqe+@t)T#tBA+Due zTt|RFKbtXb-YmMIH4#Z72rL7)fH@+U0xsx4VY#xWJgMDespBB#wcUIQp4#M9ggDb6 zk={cxd|4gLxWIizj~*;ptk)zpoKhxf$Lv+ouVs~hx z?|Il8aVmX$>q3rF9#~6&kh&AYRj+nhEdW&##*nUTU4y3RoTK*L_dH)v9yT z58q>>i4Z0+FR7x6GA}_R_6pZVNX+1t6(_!fO$`IfnJ6`AS6u=*G_^lmt8CVbySB>w z%8~5B?BIDE66FbOA$#yluuF??9O}*Uk&YoqfW1383Bbwg3q&b^lJj-xGw$MKo``eE z9z`@FyRnU2wJ$b zbwENLrhP;T#7`x!Jxe^00tYDtN!*OpgXcdHdH5goFI1OhG5G3awv+A7FGMfLN#RDa zxLWPS#}Y@Uj7MHA&t(5UP=WTVYoO@kO~|6N62_Q&lOfH--9*)K#+CKA4uM~Y32|1v zDlk*$vKiFdx^uzqKK$A}z5iLd7q8Vw5zkSEdNN99<_yOL4w0V#ka9|7N;+mVeS9+y z0)^aQ7in1gYt^b7Za0r1$+gfN*(Yu@PT@MUjxAh`R4cDak5x7Gk{dvB_my_2QhO8$ zd~kn5Eq^$XjH1L_QQ|xhGIGO(z!CjFC}xvGk7JjMNfMnR6rM~x-ttaVnyGyImjxqq z)#U(UDXwVy>ndH_i1SHK2kzib5wOhem^Z$~k#ZhO$M^qYc)M`rFzeHHwdkCtq~xn? z{C*w*Z&dVhlAG8_;pL)ai~Nhv_7_*(8;AKSkM7{Smwz^oU0%W3Vmk1R7?S3&;Y^i@ z&V$^}?#Vc>aAz(0!qKc>U|n1Ot_T93;3QCSNd7S~gpeDWl#BRrs9|l$kF8H9!%|}Q zJljAdzKLh*y-Kmuim+$?Ldi@afPKa}-W55{7a}Htd z!Yp1giO!(m5yU$OCI~ZitYs0p${2($sX+%zg8@JUN{~RigFvLYE(k$PsZ;D3MZYf_ z$}?C_YYJeMZ&?HuqR&|9lWWJ}hLU!*T-9pFv&yk)uYVmdNv#o0R1O9WEUmQ~Rz!xT zqCadRivr!_?Qy?0^8Ty;FRSjfFbDRUh5b^C=7hR|=KCrK=6pV5tV8us*Y_P&K|*X_ zII8Lf2;CtwIijFf1QW|kR&7rSr#!|GC-M`voBQ9{;=r!O^RV2)RlrhI+?vAC4SaJJ zJTeyf&qT3)QdwOM_n=G%<=ZW54ue|`^>FR#yz-fO{Br!gJ+n08*+j+Vm6b)tEseW1 z;5O30j(oRnDe0O@OEkGH_$0VVx=7ck+z_LKjgtMl`C;-apJm8c6ZApqk~~Vr`3&VQ z4esUC#j-$M0zIn@jEchzB|cn_g&pnej4C#XwO8m zgY}#IeJU%PMOp_~l3^*24vJ&%sVm1{BqH9Uy-WAXnqSG4Lie^k)5N&@bzUdq$zo+C zTa;RjjqAxaKa3)u>AJbZV<;!Da(}_e1&wSoXng2{@jNy?%fbwKBPA^=S>Ci@w21RK z^l?Qyb|LOz*v2xz^zCI#7$VdP!Q94nrpc;K(-zy-o$z-E{dH)UYKc(ogS#$Kp5^G) zE|qOf_pp_=8#x|c*GM&Rc>ij)Q!=L@<2`23KTR7gnm9BH(oA}gQmx5a5+Rj%eoewG zoiM;rPAXlVBc$CnkDda5B-YI9@l}1jaHYcTRvW^@8@(rM>~Xu=V^Hax zbyUwuZcz=Jur^uG&ZK~g%!GHrhxu!V&6K{Ji?HnRIa&GRVb(+|^4kQ^$w}7aJ{1?P z{Fn)$T+nbuE1a(K?N=y1A!w+Eh7nRCQU@&0sfMD(rA%1izOLsNQ(h4|O6pqUzrJwX zB>X?jAJtJLs@b@8rgY1MQN+P?C6u=?IlYV$NVX*TOIz@FU) z6XCArJ-PuU#H40kNcbT$n_KtE??A8_Cw@QmTBl*!JAIPi}ar{=WOcmJSr(b#}8d)~A*wxh;AUdZluw z{-6u#HXE0)qiMR61LbwmMuq970K5*rI`>11qqm ze+6n#@mvV40W*_-3Eg>HS^JO7{NBNm^K@m6V21g)o5vvj`i#dJcI$20q!v-4+H$3a zKa4~3c-BV175w`kjW8H&LC3P1YYz3C?XV6B;#@}wrAeirF-t=&Fln#dba3w*`O`Zm zCEPCvgeFx-l%Xe893sKGY)Q#dHT2+GD{V`GQL}-8fnVF_Ui->WH{jxGLg;ngQ0n}>S zB7;EK>Oz{^+NunFvPkF?Mlqc-PtvIbsiR(_M!SHm-^EeTTD>Q!Maj|7aG!C;Amz%s zJr+n89vl-0&0tDIK8q;Vd)7VT6B;u8(L+f*i(TI{9UL{E2xP)}HL<$~ZJ?u)< z>}pVwNOZ3jeykekL}k=i4tOB>#Lr`wdXAx~&A7AaUR+w`4~f5xBb7_+W~4}5pSrD6 zPBC}aqTaQurj7~mdRCGFyO(JH-ti)8AnIlED0T;tUH3VgcEsQ8DhyPW~q|Eq{**{St5}X z+)7u1*aD;Y9mi7K0ShRMQ(Kly^^Y@LY5F#p(RyvjaPjoSYDTJ^kWmW<0h*Hop$h7dB7P=5kRDWO+C0zd&tJpg8jIVGtz6L8Ut+ zB)ocapLBngf1%;EDApC@W%_QT(MS#E@%_nSMs@FsauN|IFF(yN3#tC_eGE3bfQ*pe za|pNS?vYGbnI!WwKur{NM@rm^h;l<9cTJFX!h1g(vTx`aEI)XUQo!ofUq&=YHyP`b z0;-kzZBuRJ3E$1G7=~_rPx6tey0^mLyqAF6?`$@I(;SH^4wTfVqYjqh2&nRI=yHKd zIpl^+{;WT|P=a6=X{42sB=U|vcrTd|?&b=;PD!4TSKL{RWyl!$#4d@Fc1Y1F>w`+E z1p?dLJm)4_+=8nlFe(T>m~wSZtW*5`lntEuS$vom`hw=+k*QiPeWCiE<5~hNU?N)^ z>!e8(5{v_uTd(p+;fR5u?e<>Z+@dW&L(Peoh7hKhfmK_o&0x>7aX|=S5C(*O4@vRnocjE$GQQS$6*g0 zL+?Ck>DCeV3++BL#3$Gd4-H*}6t9qH#_vP$%nzVpX%Ah$ss*F~M-Mb#fjbbza)b+8 zCTv5wDRC0>NUWSepkUpw)DLr=kG;bE0(Va^uEg6;i3RiHD7~Ysp;DPi^bWN~N-SI9 zD=%4H?1wZAGjqoyaP%^Mu%Lzti5io!8IheHCPCHZ9Ejxs9sU21IPQ>JA+_SRg44^n zhex1iMz0C2e9$l(HQY!^!76}n+}$F<<~vF2Kr$1aXRGeUrnQdSjcp8@=LUUBGa;~( zc*L*fWR)!?$4kx8$JtLs`2pi!#%9JI{%{Ly;LZWSlEt8^2C10PC;!;$v7IDiJb>vm z#fSwX{JJ=otk5pK|HkuIlDA_K-9@6-?(x66}y_F z)r=u56-h$=6``Ru^SF?&>2+{)Mf*Kl9Rvwd4x1nHXaV2>jxg9aXnM`O^?zD*!K-j= z1FQ*kvEsWB1@i_WH&LO=A*N5tbZkUywwjZU6f^np4NLEq!HRSrD5v|y%b27@4n@=?DM(6o?8{F?=f*>~S+u!s(O z37^EbRnLKM<)CxqsnQWqSfS!)Pq7HJ(7JDAbY?unAds#ohws}W!7CO+_7(R@Gbrvx z!~i~EP>XpDU;b%0x&ZF@EF7~B?hY-42!xc_W&UdZS_!KFF+#FG*ZZaD2Krtvui}Qd zYF85sLJn6S&ii)5P^%u5_?C^{yUAgP_-Ab;E_9NAZAGESOJh}BR_-@{ky&H^!uiog z9!-pwK+M1OH}5quNTk;nQJdAH_F^G_2UcWL7YB zDS6ej&9?NXm1VuhWr9iu3>Y}iS6Cms_4M1h03ZC*TAMcqQ`}jqgdst@wmvWo7`%_3 z^6}m?u+&aM7*INPdO9F6-a5Z=mmhs;DtpT723H`UQ*qGaJ1at8eimb9m>E>R@weQf zgj5t_4$(ZM%LrQ7b%1|)aZICev`JiN+-_02mIEB6qzr*d&RUG=px-eK1^V|p8aKUz zH!--s1r0ug9|4pTOhQ)BqR8kyEr#o8ueY|Qq7pJHON@d~w5VrQq@PQr+rWZFl?ff@fhs@bxXEx=EBa;6t3TcuZ1ir6J+r?Z)OZ9Sa1lV5W7^ z=D1!8I$sU?RyxU>7j;HaQz{u=uCP=ZX88_Cs+;n9rB;0VekM$=t)NWTvN1v8r@ZfS ztQ)SDS-G+W!tziH-6Cm=M8Roi*!eU-QS2zpU(q=Ek(D&(9Yp$>Q%;EM~mA#wYYNou0895%fE2|++#~qZPIVa$j2f5UXP>-QeXxXY8H(>C?d@OO-zriVM z<+$ZW@hn}zIHzP?jQo6ta)naLqilB<`?o6mb6e#HzKpvmpx^eJ(r;pAd07<5epR5l z;r=1a5cw)sY!i2Ewaw~daW=929V4h}6&<}ikU<2U#DIkk5KvKpGC@FdXVr%qrdbTf z2M_T2G!)Tg(e*LWsL0-gw<>p=%fHFHnY`e-S`lQ;^E$Hz<@eTS1~=Vzy5AHW{sC-` z=1CCA${#<SIkiNKJ)#fZ)FYY?Hgmql4O!S=Wq|c2(i|u6evvy~zgsL06)nGi~ z`wc`Q_e^>TxvP`w*4D|Pq zwl+;v>*Bb3Oh4%NDzoFO+FIC=-OLk&m>y)f>Y#L$)gs2{A+C2E;iK9^(Vo_4S<#EP z_=S}x4!w7qaGMf#R{0-)u-@-hYhdl#A|Xy-?Z=0T0u2~EV4u_&M5j9ue(O$>bS_Ug z4e|Y)8MvSP70?mQuU4-KpNDoFs~anLcceCl2oHc?KOJ`DhA_Ae7Betg9Jq`yn)@>I zBw{E=^c<3%j$FqxNd`3*&7i#|_cEa=AsG1+rc@tRRN3O{s`*x42K&?nUG(e)T|u3?gmn zZ6^#*O8^F@{pl9O0ydl$D@qI!FbE`ul9)B%1VC$l%*O@x!v0rz7Kz3GngN@^Y%5U2 zgs39{<{F=_>4(XHN@jcCIC>94U6}k3Tj>8I9W~;cb%Pb@`>Qt0WX+HVJAk6PvQg@oT3@b52_Cu{MP(`SV2ka!%oE| zav&`(@x(80mh6L@rBhy0(q>#P0RGc-$)E%w17|a~8u{`5-b9v50Nl{-hV)OQ^ZD`{ z_BRYAZFFJUToHl9A=wqqrL~_2BeN*MWE3TV64hQ-I$2r<)PMiU6Q$fB^yi-)kw1JH z?WOX9rSv_s9RZ8)jrW1Rh7zl6J~Tg9W{uLLmw0$A6rcn!XVc^C9Ee(%%>fV3FNZaQ zgJ#Tvnfa>^%!GkK6qvwtBw|4=!`way{n9Zy(v}`JXc%k@Mpi zZ4{UFuh~&MSi56Qf0=lb;Loq^{2uGgzozSI$P8;TcZJvPDo@O_s>&_Ln@hH4kXQQd z*^d8J@`2qdfWHcyCD0Z0QsyY z1FmF8*DM4zpr&whE+Ghn_5fkB;MPf%^o2AF>a7vgbS7O^?ojMDfEA@hvce{Qn5YjcyDL5=^{{Q>pD ze|!Gr5pUT!kOxfBexsAhx?xxHP;YC#wGjO1LzlSQ73U&r0d? zi{@I91gBl$PV@OtCwA+_-Q~fx`+WAT+ghwsy<1I@IMw)HaqNUwGy^)wd&|SRyJ}3L zlu3duG^d#6Zxj4z-Yu7)93_ReEtuQm#~L|JHzB4-(j8z1)3=XWG?sEniOO-AKK`=W zCt&NVzwYe(q3OKRce^b3ezJ#yd&-on(Mcb5KgIn#ThGNtj5-2rdp!_|3DqDLM1z_n zhz462M(jpMB!~%-jG!Oi6J~(z96iuK^27;9WYYy`Nl8~KVJp3Li3r#h+7#e$c@d08 zZ{aq_N=z=f_As_3;M&52$zsZzwlr~Dc?*Lk)RZ@1LIFB`4f9$!4}CfT+phW#R!JFk zahzJfy56lz`c_844G-gRW&GDg@nsHj(Z+IPA-9mNMZI%EtR^RItnpo?U*kwwi@rE( z`8A#rV->6V`lWqgY^)EPiU)6I#c85XsRX6aPSx}(%{L@ppQ7Cy0pVr*ag0=S*FY_C zD6Q>TpF|ln8MHMgl41vWFi-2)c)#1v4+I78KNGp*Q+m=Ndz^jE;P(rCR&tXNs5zTI z8`!Hmdp03F)*}E32rzaE>S0+GVQaXy>2L8( z(};ofXiZ&)I+zUY(^IS2B&ST8x<8Dy015Lm?yqNjzH+<0ug!eO0ngQ*W!*jQJ(vZb zuyS5kwD{!J%|AuJ`{x-M?$3l-{3kq}*9n;#-E3Gj=-mbCo8V>=T$-s#%J9% z@^2oPSF!_H`F2%Asiv?2gyh)RJyKr3{#(y7yb`~x=eO$zJ1#oq27`~r!^u_^ZkHpw zU=;8UwX3bV>(}*ayKfi}6UokRoXJEnU{A<^+%RGeRE`)25pMwIu`h&juI8VYVM7)I z24;4vr<8Q_ZSD%iOBsUC1q>+-Y_JTd6&4mLBgzUU=`)5v0%vufuCO2=prBCKx0*vp z-YFLZbZpQ7eja@g8O&RJ^~AONB|#LmqbklVqJ!DaAuvHrs#<~}sIUW`hQiGbhF~=P zDPc)z-+hn!eWfMLwIHI`M}_+k0_Rr8`KY|30~-<7RrDgu2|wGB~8&+hcG?Td!%p?78%(~DuyTfNqBcNj*60H%fmB}Dx1!EPodxWAj zYS?8RuC(+B0&JsgquKygj;#b%3FEod8uE2a4A4v+Fm^)`_ySxDc@h7(O_U8zNpe_} zy3S!;>LM$yY1l`>lQYHxNG(N#h(e%}i10XsglYH7V}Y9^+?y(EKFlHR2`TdT^Dhbs zt{bh&|H?)QdSFL45G&uW#YhMq?+bS%oAXGX3f4OrgBSBi-pvhikH{Dm{PPCI0xCaj z1pAMTcUq?n-Rz!K(6;z)QCLke-Zq0<-^Tc-JxdT3kOdergJ6Q0LV36{cbzlYN%y?v zbzzr_aCSrg`R!FcRogD~^TshDc1tC7|J8#Ys^tHTX-)*xZl?2urSq8bTIZx7z6?nKZ!*t!&7S+x^(3BmF}(AZuv!TOBN8ECH; zydFD{b5(033gMM_6=b;{$%LAl)%LE)q6*hlV#<1`tc;+ZMojGh%m53R-qQ-&jD6jZ zCaxT+TgMivD%utS6ZT}(~ z4b2%j@r@ht7ZV>*RsXY!Sj=fRZ-7O7*{nvH={3SinB`(Ih5HgsfG0#7`VQ!pBAbTZcd!6hRkuTS0LU)a}qh}u_?MrOX!1|pE`K)?~_ z_e}Bh20`@wXwkz5&?c2366Kmb=)psCbW(0WXJHtiKON5V11E-;`9c2NKZj3%AKGl@ z9Ixoa7f_N$iFMCV@pTz4zq03CQ4sF|1f5z8M27nj)X@RdV5(JGjr zSPSibUy%$c^GBwX!2}N<6QYvWQ~{WHKcjDt> zkl!kogdDx%6Oh7RzPn7m{L?Qo*)Km${eSlh=8P>%&xZfBJyxO$>%&`u2c4t(x2Dv z+Gz8M7^TM5`NSTG*N5!$KAG~r>{DF=n7lZR#&pNaB=Q26$Q0PaZQ|o~jk5RM6Q;=f z?n=bh(;szLthy*Qqvjvq{Ob{2>SXQI=oQVoK$KjptiK#43tu_^ajG-^FT?(Guy)B- zp@T1GHubHVSJ#b!QEp<;tJVFLPls^=@cCfdua7vKeyuhUxVbq#dWiX#gqaMc0b2#m z@sWp0(1l|=2lD6u0qXT(IJ^gyP4&Q2Hlb?1r)UceEAm2viRs8$IRM|;#(txhBSj3A z8y_0KSSQ#*P61EceMycE21lOH1Z!(CrolO^(I5tMUIl#;nKW#;dgm~}YqOQ!x*52} zv#Aom{6trqtsG&GRQ_>_Vf`pSm!w$(@nZYa`q|-TU0v5yJJ!k**_VYiY%>~U5)?xvk?1c$hwP{8m6`ziqr4s{ z5t_-?>#`Y%0}p=?0JHPrl(6_Oo8qkH(RoMbCPu;HWwq7`B|k5*-Eif<19jNojP8$~ z{^+9;R{bqyY4|jQu`@C%p>er?nEqR3$V~;UprzcSz++yTLm=DbU(F1iqbOuE0;Lk! z@YGRy{(-#md5I*sm&knioZbOEErDel6akUbZI1q8pagw}8$XF^IO zj`iP$+V}rYJ_ZYRR=#@lEP1H+C#sy}LEO8(Sc~I16EVGJ!(y0I{N?RI3F?H(%rDun zaJ0JmvNN16`rZSpd5|ZmxWe57LAfh+l}t3f*>b8)Wd=S%<3J7!CNk2eCdI`QG;O1`re0~kU)v209sZHcm(C- zg3`xNlE+dCyrXozL3BI<_zRe15({JF?>@pG->tQ%7iP@Tv;y&%d&4}(9e%4;e_bgc zQMb)L2|OZJfECMg`kP-*x(s6?M>{GNp;4JpA5=^#4WTiY?-QLm1G_$CvnKq~?P)4j zX#Lbq83ke3NORiXD{i-o+ixr0x93Q07zj|!j_-jPH$#exqhr9nz>N!SJbMoI@;Ba% zwUhZ0=yZaw%+93~CHCCr0}m!&K~h!>WHd%E!K-FNZ^FY9@K@^wHo;z4cy75caBy@N zJ7xh{wI>n&5=rk<(0hKtU`I(4N3g7?s&oIpPtZs)4`!=bzr1vN9+Q0;EsS z*YCShbxA+L_1)r>+&yBEE)ANlo`CND0Rlx$#dY~` z(yk#D%edq3>iz8fx7YQ{)DXD#)YV;)kr8B!1E%=Opx3Ezk2irh?tMk2j5uHfW#EE1 zQywaK{PNpx-j7aYA6~*!pz_3}E#=Qgi;CfcS&!PUhufO=SLgfD=UG0x_AJ^QWB1)s z#n7ojns{6xs?ov%o|soqIO_D#^(S9-GnZYX9#h?G!Nl0W$g&iKBChJJX-gp(c+q2s z2`Kgj=Fpg{!kODEe;+iUhQZ$}w==_6F{wqDSl&h-Ez#Y+gSR7p6A_2Nq}}h@30Fu2 zgh0Adsi9;0-}49vjxu}dQC}8IP4v-vYiA$4`AcJyb|f|R!b_v+HxH#UwP-yV_W(1P z4A=u4d3}*GRkL)-fFs|nVy!O4ykhg2mJE--PSy^ z6UG1gO{L1}mk8tc-eSf%V>vTeIeX}rDlJN!)q6TxF?jOkce}YR>K#0U*c3Rl0Y=RU zw)u~iK042{L2h*^n7i=NHb;+lSaFt)&QGi#*L+xF65M)t_b>~$`uU%N1i_!rEAgzu zVmYsaj%uucdX8=wK_<=q{NYGpn+I#uuz@bB|3AXq2kD|B9^Q)!Q~=4ea)LbTyy~EY z5W1K0r^MmpUn~E1L6pOo+q3zC#V>z*;A%|ka+w#8)VlliYSYU46_@+GPv)OkKsZ}bE_aPrATDG*~zX%v& zwGm2K;U7v>E!h@2EDzQ1f~8WuencOnRY>7o`eQFJ16Bz=UDyCIm}%4BDFlq~!Y0-Q zF&R+siGOPVgDDXB%=}g~*^9H{oh*Fo& zfx#@~37@0K%gVu848ckPYBc3iwgykZI0n%flEAMr@>fhw3N5fTQ);V z0gdt2Dl1vRUK?s0HTJUmZzFbL40{TJAxfsuB#5!Hk5?`;2->|RyL6X7X^a&2sRtOV zRxN>wk3BY8Q8e0DJ9Wz!cN%*>#rZrkVyD&^vM(e;Mg5QU4*JLaMNsLYDlSu2fkK`r zf_i|`#cxQ|zd||SEbI`-=(i?yLNXmA&;dT@8u}NN^rmz%@Cfv|?+J`(rOhROZNC?3 z8Of_(yINEf!v#rV2a`r6pRi|Gt;1P!>h0f^&DIJ4qtG`#Sf()!!a_ zW}isa>U*>vSvYlow-(Cn_U-0AA+!tLxyKNYH%-?_z3jqsyB{C4kUi13bIhsZWBVYU zJ&R>1d?FkGkF_iJ=!FIr%bo}A8`Ht_0Xk2z<>2G)+;BTDsRlv$2BI^5ZECuKZcI;I zi?;zifS(?QqwbI$7lrbjMUo1kGe1;xT(*OXGf1}S$CT&0R75%Oxbp#-JgK1uNmhx7 zaioZhk0@Ft3DQtcT5LazCdC%`Hr;Z}y|pK^pI%s`9uD%w8;$$%B)l6aHy%1|F&iJe{i>2lh@(hM?x2L`;TIjajb)-zpsH~G{?8Ui#8Zf#B~kHm zb2CyE#95>pC%8=v?OL*YfG>P-*t>uuAE~2qdw;Is=IChC6oR16IS$>=s}*_tZ82c$ zg2YL5^i^Xd`5ig3@s$Sb9R9y!0nLHrc#bSZFhuCg42@4dfYQC)TcF^mO9O{Jw3R;& zn@Jnbp{+BMGh5FKt^Q!HEeFZnlBj;z?(0jGkpG{ze`tXF@6>g1R!yPVdtSh*vdKYCd1+rh#YggZgyIaNl z$ARRJ@*$R6EPpHR)x^(RGA{=7LT>cHr;Pd>F1;i|6L};!1?)UT~uTf{y&fEcp&@y zYtppL2sa z0`qBx0o#}?7?nI|Tr&cpe#gZ$X-IOh3^C2_=K~5G_S%Q0i9p5%YP&OvV&(?Wj`P$Q z=ExyxS~~eO0aP&P!6$}M#C}BPc*2qnO{KwA0h)IMxKii!WTXsiWUq~c)rLWRl0$&1 zYek{F5@Ckwpg|Y`g8`}x*Hs8tqwWf{pb2r*dF2}p$G|=ELKHFp7-wpdP%$~$1`1jz z&#Dk^nAfS;2ji&nAdLvFv}+Uxjc85_Vu%~^i!-^eTCYnsgEP&9awregL1}A|u*>H7 z+#uYg&~(r^|I%6}6x&+MjG&9P>}bQ!$K*iOXylroXcsz2 z{(*H@j+@brFXtb`5Vz?gA}$ZaPZ)v|b(+u9IIf>EmuU%a)0?o zxO*@0UGa8dexhCIAo&N@pR-pE-xj~^{~(6*TDwgj-+c%b{K+ijdO1<``MhFBP=p|GTrGK&e%vCkrFfH40JwFJeI7zd-D66_@yM7p_d0DspIIsJ83qlze zQfXtI4`o$1?f=5`0vN_=Ue;|t&g*{O?@#!05%UVGOqKhgaU7mlf+|*byJwyEMi8+g zl4^;fpz(!OR-+o0h>Olzuq1)YZQhlw;F^2C;q-Ppb6s&a^GZ}2gWF*`6XSrqpP@=Z z7_)1A%Gpg|&i)^PzV&#SL$DMcAmDbQ=1h`Bd*6zrMMjd$f_Wd*gJTg} zJ!#VAyVd)$p`fn0RWyAhPiytPQsXC6=Sl^O?`qyYk8v;0QpX@7(%LPPE_mBiZ?kvh<8#;H_gJfV3*sJ>N&CET$ zMK=!%HgN5m+e07bmQBB!(s;##jAX0giQFAf#Pw&m;5M56eFJWlzxp&xo<4%>V zFHI~i)3Qb`fF>$m!C;rHTRzPsZ@+6ki{iN)C>MXVi;a8p1QBL;R%BwYcLa18_`UA3 z-gYr!R#!IUQ(y^{)RILId%fM22ds!b4o(@1pgxQuV|a|40jtjgnPTgpf+T0rgAgXm zoUw6$q%_9n{R!`VsI2w%G*|;g;(gs0nji7Fu&wn3qGNjP{Y->=gCY$2*= 4) throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0") +}(), +function() { + function t(t, e) { + if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return !e || "object" != typeof e && "function" != typeof e ? t : e + } + + function e(t, e) { + if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); + t.prototype = Object.create(e && e.prototype, { + constructor: { + value: t, + enumerable: !1, + writable: !0, + configurable: !0 + } + }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) + } + + function n(t, e) { + if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") + } + var i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { + return typeof t + } : function(t) { + return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t + }, + o = function() { + function t(t, e) { + for (var n = 0; n < e.length; n++) { + var i = e[n]; + i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) + } + } + return function(e, n, i) { + return n && t(e.prototype, n), i && t(e, i), e + } + }(), + r = function(t) { + function e(t) { + return {}.toString.call(t).match(/\s([a-zA-Z]+)/)[1].toLowerCase() + } + + function n(t) { + return (t[0] || t).nodeType + } + + function i() { + return { + bindType: s.end, + delegateType: s.end, + handle: function(e) { + if (t(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + } + + function o() { + if (window.QUnit) return !1; + var t = document.createElement("bootstrap"); + for (var e in a) + if (void 0 !== t.style[e]) return { + end: a[e] + }; + return !1 + } + + function r(e) { + var n = this, + i = !1; + return t(this).one(l.TRANSITION_END, function() { + i = !0 + }), setTimeout(function() { + i || l.triggerTransitionEnd(n) + }, e), this + } + var s = !1, + a = { + WebkitTransition: "webkitTransitionEnd", + MozTransition: "transitionend", + OTransition: "oTransitionEnd otransitionend", + transition: "transitionend" + }, + l = { + TRANSITION_END: "bsTransitionEnd", + getUID: function(t) { + do { + t += ~~(1e6 * Math.random()) + } while (document.getElementById(t)); + return t + }, + getSelectorFromElement: function(e) { + var n = e.getAttribute("data-target"); + n && "#" !== n || (n = e.getAttribute("href") || ""); + try { + return t(n).length > 0 ? n : null + } catch (t) { + return null + } + }, + reflow: function(t) { + return t.offsetHeight + }, + triggerTransitionEnd: function(e) { + t(e).trigger(s.end) + }, + supportsTransitionEnd: function() { + return Boolean(s) + }, + typeCheckConfig: function(t, i, o) { + for (var r in o) + if (o.hasOwnProperty(r)) { + var s = o[r], + a = i[r], + l = a && n(a) ? "element" : e(a); + if (!new RegExp(s).test(l)) throw new Error(t.toUpperCase() + ': Option "' + r + '" provided type "' + l + '" but expected type "' + s + '".') + } + } + }; + return s = o(), t.fn.emulateTransitionEnd = r, l.supportsTransitionEnd() && (t.event.special[l.TRANSITION_END] = i()), l + }(jQuery), + s = (function(t) { + var e = "alert", + i = t.fn[e], + s = { + DISMISS: '[data-dismiss="alert"]' + }, + a = { + CLOSE: "close.bs.alert", + CLOSED: "closed.bs.alert", + CLICK_DATA_API: "click.bs.alert.data-api" + }, + l = { + ALERT: "alert", + FADE: "fade", + SHOW: "show" + }, + h = function() { + function e(t) { + n(this, e), this._element = t + } + return e.prototype.close = function(t) { + t = t || this._element; + var e = this._getRootElement(t); + this._triggerCloseEvent(e).isDefaultPrevented() || this._removeElement(e) + }, e.prototype.dispose = function() { + t.removeData(this._element, "bs.alert"), this._element = null + }, e.prototype._getRootElement = function(e) { + var n = r.getSelectorFromElement(e), + i = !1; + return n && (i = t(n)[0]), i || (i = t(e).closest("." + l.ALERT)[0]), i + }, e.prototype._triggerCloseEvent = function(e) { + var n = t.Event(a.CLOSE); + return t(e).trigger(n), n + }, e.prototype._removeElement = function(e) { + var n = this; + t(e).removeClass(l.SHOW), r.supportsTransitionEnd() && t(e).hasClass(l.FADE) ? t(e).one(r.TRANSITION_END, function(t) { + return n._destroyElement(e, t) + }).emulateTransitionEnd(150) : this._destroyElement(e) + }, e.prototype._destroyElement = function(e) { + t(e).detach().trigger(a.CLOSED).remove() + }, e._jQueryInterface = function(n) { + return this.each(function() { + var i = t(this), + o = i.data("bs.alert"); + o || (o = new e(this), i.data("bs.alert", o)), "close" === n && o[n](this) + }) + }, e._handleDismiss = function(t) { + return function(e) { + e && e.preventDefault(), t.close(this) + } + }, o(e, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }]), e + }(); + t(document).on(a.CLICK_DATA_API, s.DISMISS, h._handleDismiss(new h)), t.fn[e] = h._jQueryInterface, t.fn[e].Constructor = h, t.fn[e].noConflict = function() { + return t.fn[e] = i, h._jQueryInterface + } + }(jQuery), function(t) { + var e = "button", + i = t.fn[e], + r = { + ACTIVE: "active", + BUTTON: "btn", + FOCUS: "focus" + }, + s = { + DATA_TOGGLE_CARROT: '[data-toggle^="button"]', + DATA_TOGGLE: '[data-toggle="buttons"]', + INPUT: "input", + ACTIVE: ".active", + BUTTON: ".btn" + }, + a = { + CLICK_DATA_API: "click.bs.button.data-api", + FOCUS_BLUR_DATA_API: "focus.bs.button.data-api blur.bs.button.data-api" + }, + l = function() { + function e(t) { + n(this, e), this._element = t + } + return e.prototype.toggle = function() { + var e = !0, + n = !0, + i = t(this._element).closest(s.DATA_TOGGLE)[0]; + if (i) { + var o = t(this._element).find(s.INPUT)[0]; + if (o) { + if ("radio" === o.type) + if (o.checked && t(this._element).hasClass(r.ACTIVE)) e = !1; + else { + var a = t(i).find(s.ACTIVE)[0]; + a && t(a).removeClass(r.ACTIVE) + } + if (e) { + if (o.hasAttribute("disabled") || i.hasAttribute("disabled") || o.classList.contains("disabled") || i.classList.contains("disabled")) return; + o.checked = !t(this._element).hasClass(r.ACTIVE), t(o).trigger("change") + } + o.focus(), n = !1 + } + } + n && this._element.setAttribute("aria-pressed", !t(this._element).hasClass(r.ACTIVE)), e && t(this._element).toggleClass(r.ACTIVE) + }, e.prototype.dispose = function() { + t.removeData(this._element, "bs.button"), this._element = null + }, e._jQueryInterface = function(n) { + return this.each(function() { + var i = t(this).data("bs.button"); + i || (i = new e(this), t(this).data("bs.button", i)), "toggle" === n && i[n]() + }) + }, o(e, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }]), e + }(); + t(document).on(a.CLICK_DATA_API, s.DATA_TOGGLE_CARROT, function(e) { + e.preventDefault(); + var n = e.target; + t(n).hasClass(r.BUTTON) || (n = t(n).closest(s.BUTTON)), l._jQueryInterface.call(t(n), "toggle") + }).on(a.FOCUS_BLUR_DATA_API, s.DATA_TOGGLE_CARROT, function(e) { + var n = t(e.target).closest(s.BUTTON)[0]; + t(n).toggleClass(r.FOCUS, /^focus(in)?$/.test(e.type)) + }), t.fn[e] = l._jQueryInterface, t.fn[e].Constructor = l, t.fn[e].noConflict = function() { + return t.fn[e] = i, l._jQueryInterface + } + }(jQuery), function(t) { + var e = "carousel", + s = "bs.carousel", + a = "." + s, + l = t.fn[e], + h = { + interval: 5e3, + keyboard: !0, + slide: !1, + pause: "hover", + wrap: !0 + }, + c = { + interval: "(number|boolean)", + keyboard: "boolean", + slide: "(boolean|string)", + pause: "(string|boolean)", + wrap: "boolean" + }, + u = { + NEXT: "next", + PREV: "prev", + LEFT: "left", + RIGHT: "right" + }, + d = { + SLIDE: "slide" + a, + SLID: "slid" + a, + KEYDOWN: "keydown" + a, + MOUSEENTER: "mouseenter" + a, + MOUSELEAVE: "mouseleave" + a, + TOUCHEND: "touchend" + a, + LOAD_DATA_API: "load.bs.carousel.data-api", + CLICK_DATA_API: "click.bs.carousel.data-api" + }, + f = { + CAROUSEL: "carousel", + ACTIVE: "active", + SLIDE: "slide", + RIGHT: "carousel-item-right", + LEFT: "carousel-item-left", + NEXT: "carousel-item-next", + PREV: "carousel-item-prev", + ITEM: "carousel-item" + }, + p = { + ACTIVE: ".active", + ACTIVE_ITEM: ".active.carousel-item", + ITEM: ".carousel-item", + NEXT_PREV: ".carousel-item-next, .carousel-item-prev", + INDICATORS: ".carousel-indicators", + DATA_SLIDE: "[data-slide], [data-slide-to]", + DATA_RIDE: '[data-ride="carousel"]' + }, + _ = function() { + function l(e, i) { + n(this, l), this._items = null, this._interval = null, this._activeElement = null, this._isPaused = !1, this._isSliding = !1, this.touchTimeout = null, this._config = this._getConfig(i), this._element = t(e)[0], this._indicatorsElement = t(this._element).find(p.INDICATORS)[0], this._addEventListeners() + } + return l.prototype.next = function() { + this._isSliding || this._slide(u.NEXT) + }, l.prototype.nextWhenVisible = function() { + document.hidden || this.next() + }, l.prototype.prev = function() { + this._isSliding || this._slide(u.PREV) + }, l.prototype.pause = function(e) { + e || (this._isPaused = !0), t(this._element).find(p.NEXT_PREV)[0] && r.supportsTransitionEnd() && (r.triggerTransitionEnd(this._element), this.cycle(!0)), clearInterval(this._interval), this._interval = null + }, l.prototype.cycle = function(t) { + t || (this._isPaused = !1), this._interval && (clearInterval(this._interval), this._interval = null), this._config.interval && !this._isPaused && (this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval)) + }, l.prototype.to = function(e) { + var n = this; + this._activeElement = t(this._element).find(p.ACTIVE_ITEM)[0]; + var i = this._getItemIndex(this._activeElement); + if (!(e > this._items.length - 1 || e < 0)) + if (this._isSliding) t(this._element).one(d.SLID, function() { + return n.to(e) + }); + else { + if (i === e) return this.pause(), void this.cycle(); + var o = e > i ? u.NEXT : u.PREV; + this._slide(o, this._items[e]) + } + }, l.prototype.dispose = function() { + t(this._element).off(a), t.removeData(this._element, s), this._items = null, this._config = null, this._element = null, this._interval = null, this._isPaused = null, this._isSliding = null, this._activeElement = null, this._indicatorsElement = null + }, l.prototype._getConfig = function(n) { + return n = t.extend({}, h, n), r.typeCheckConfig(e, n, c), n + }, l.prototype._addEventListeners = function() { + var e = this; + this._config.keyboard && t(this._element).on(d.KEYDOWN, function(t) { + return e._keydown(t) + }), "hover" === this._config.pause && (t(this._element).on(d.MOUSEENTER, function(t) { + return e.pause(t) + }).on(d.MOUSELEAVE, function(t) { + return e.cycle(t) + }), "ontouchstart" in document.documentElement && t(this._element).on(d.TOUCHEND, function() { + e.pause(), e.touchTimeout && clearTimeout(e.touchTimeout), e.touchTimeout = setTimeout(function(t) { + return e.cycle(t) + }, 500 + e._config.interval) + })) + }, l.prototype._keydown = function(t) { + if (!/input|textarea/i.test(t.target.tagName)) switch (t.which) { + case 37: + t.preventDefault(), this.prev(); + break; + case 39: + t.preventDefault(), this.next(); + break; + default: + return + } + }, l.prototype._getItemIndex = function(e) { + return this._items = t.makeArray(t(e).parent().find(p.ITEM)), this._items.indexOf(e) + }, l.prototype._getItemByDirection = function(t, e) { + var n = t === u.NEXT, + i = t === u.PREV, + o = this._getItemIndex(e), + r = this._items.length - 1; + if ((i && 0 === o || n && o === r) && !this._config.wrap) return e; + var s = (o + (t === u.PREV ? -1 : 1)) % this._items.length; + return -1 === s ? this._items[this._items.length - 1] : this._items[s] + }, l.prototype._triggerSlideEvent = function(e, n) { + var i = this._getItemIndex(e), + o = this._getItemIndex(t(this._element).find(p.ACTIVE_ITEM)[0]), + r = t.Event(d.SLIDE, { + relatedTarget: e, + direction: n, + from: o, + to: i + }); + return t(this._element).trigger(r), r + }, l.prototype._setActiveIndicatorElement = function(e) { + if (this._indicatorsElement) { + t(this._indicatorsElement).find(p.ACTIVE).removeClass(f.ACTIVE); + var n = this._indicatorsElement.children[this._getItemIndex(e)]; + n && t(n).addClass(f.ACTIVE) + } + }, l.prototype._slide = function(e, n) { + var i = this, + o = t(this._element).find(p.ACTIVE_ITEM)[0], + s = this._getItemIndex(o), + a = n || o && this._getItemByDirection(e, o), + l = this._getItemIndex(a), + h = Boolean(this._interval), + c = void 0, + _ = void 0, + g = void 0; + if (e === u.NEXT ? (c = f.LEFT, _ = f.NEXT, g = u.LEFT) : (c = f.RIGHT, _ = f.PREV, g = u.RIGHT), a && t(a).hasClass(f.ACTIVE)) this._isSliding = !1; + else if (!this._triggerSlideEvent(a, g).isDefaultPrevented() && o && a) { + this._isSliding = !0, h && this.pause(), this._setActiveIndicatorElement(a); + var m = t.Event(d.SLID, { + relatedTarget: a, + direction: g, + from: s, + to: l + }); + r.supportsTransitionEnd() && t(this._element).hasClass(f.SLIDE) ? (t(a).addClass(_), r.reflow(a), t(o).addClass(c), t(a).addClass(c), t(o).one(r.TRANSITION_END, function() { + t(a).removeClass(c + " " + _).addClass(f.ACTIVE), t(o).removeClass(f.ACTIVE + " " + _ + " " + c), i._isSliding = !1, setTimeout(function() { + return t(i._element).trigger(m) + }, 0) + }).emulateTransitionEnd(600)) : (t(o).removeClass(f.ACTIVE), t(a).addClass(f.ACTIVE), this._isSliding = !1, t(this._element).trigger(m)), h && this.cycle() + } + }, l._jQueryInterface = function(e) { + return this.each(function() { + var n = t(this).data(s), + o = t.extend({}, h, t(this).data()); + "object" === (void 0 === e ? "undefined" : i(e)) && t.extend(o, e); + var r = "string" == typeof e ? e : o.slide; + if (n || (n = new l(this, o), t(this).data(s, n)), "number" == typeof e) n.to(e); + else if ("string" == typeof r) { + if (void 0 === n[r]) throw new Error('No method named "' + r + '"'); + n[r]() + } else o.interval && (n.pause(), n.cycle()) + }) + }, l._dataApiClickHandler = function(e) { + var n = r.getSelectorFromElement(this); + if (n) { + var i = t(n)[0]; + if (i && t(i).hasClass(f.CAROUSEL)) { + var o = t.extend({}, t(i).data(), t(this).data()), + a = this.getAttribute("data-slide-to"); + a && (o.interval = !1), l._jQueryInterface.call(t(i), o), a && t(i).data(s).to(a), e.preventDefault() + } + } + }, o(l, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }, { + key: "Default", + get: function() { + return h + } + }]), l + }(); + t(document).on(d.CLICK_DATA_API, p.DATA_SLIDE, _._dataApiClickHandler), t(window).on(d.LOAD_DATA_API, function() { + t(p.DATA_RIDE).each(function() { + var e = t(this); + _._jQueryInterface.call(e, e.data()) + }) + }), t.fn[e] = _._jQueryInterface, t.fn[e].Constructor = _, t.fn[e].noConflict = function() { + return t.fn[e] = l, _._jQueryInterface + } + }(jQuery), function(t) { + var e = "collapse", + s = "bs.collapse", + a = t.fn[e], + l = { + toggle: !0, + parent: "" + }, + h = { + toggle: "boolean", + parent: "string" + }, + c = { + SHOW: "show.bs.collapse", + SHOWN: "shown.bs.collapse", + HIDE: "hide.bs.collapse", + HIDDEN: "hidden.bs.collapse", + CLICK_DATA_API: "click.bs.collapse.data-api" + }, + u = { + SHOW: "show", + COLLAPSE: "collapse", + COLLAPSING: "collapsing", + COLLAPSED: "collapsed" + }, + d = { + WIDTH: "width", + HEIGHT: "height" + }, + f = { + ACTIVES: ".show, .collapsing", + DATA_TOGGLE: '[data-toggle="collapse"]' + }, + p = function() { + function a(e, i) { + n(this, a), this._isTransitioning = !1, this._element = e, this._config = this._getConfig(i), this._triggerArray = t.makeArray(t('[data-toggle="collapse"][href="#' + e.id + '"],[data-toggle="collapse"][data-target="#' + e.id + '"]')); + for (var o = t(f.DATA_TOGGLE), s = 0; s < o.length; s++) { + var l = o[s], + h = r.getSelectorFromElement(l); + null !== h && t(h).filter(e).length > 0 && this._triggerArray.push(l) + } + this._parent = this._config.parent ? this._getParent() : null, this._config.parent || this._addAriaAndCollapsedClass(this._element, this._triggerArray), this._config.toggle && this.toggle() + } + return a.prototype.toggle = function() { + t(this._element).hasClass(u.SHOW) ? this.hide() : this.show() + }, a.prototype.show = function() { + var e = this; + if (!this._isTransitioning && !t(this._element).hasClass(u.SHOW)) { + var n = void 0, + i = void 0; + if (this._parent && ((n = t.makeArray(t(this._parent).children().children(f.ACTIVES))).length || (n = null)), !(n && (i = t(n).data(s)) && i._isTransitioning)) { + var o = t.Event(c.SHOW); + if (t(this._element).trigger(o), !o.isDefaultPrevented()) { + n && (a._jQueryInterface.call(t(n), "hide"), i || t(n).data(s, null)); + var l = this._getDimension(); + t(this._element).removeClass(u.COLLAPSE).addClass(u.COLLAPSING), this._element.style[l] = 0, this._triggerArray.length && t(this._triggerArray).removeClass(u.COLLAPSED).attr("aria-expanded", !0), this.setTransitioning(!0); + var h = function() { + t(e._element).removeClass(u.COLLAPSING).addClass(u.COLLAPSE).addClass(u.SHOW), e._element.style[l] = "", e.setTransitioning(!1), t(e._element).trigger(c.SHOWN) + }; + if (r.supportsTransitionEnd()) { + var d = "scroll" + (l[0].toUpperCase() + l.slice(1)); + t(this._element).one(r.TRANSITION_END, h).emulateTransitionEnd(600), this._element.style[l] = this._element[d] + "px" + } else h() + } + } + } + }, a.prototype.hide = function() { + var e = this; + if (!this._isTransitioning && t(this._element).hasClass(u.SHOW)) { + var n = t.Event(c.HIDE); + if (t(this._element).trigger(n), !n.isDefaultPrevented()) { + var i = this._getDimension(); + if (this._element.style[i] = this._element.getBoundingClientRect()[i] + "px", r.reflow(this._element), t(this._element).addClass(u.COLLAPSING).removeClass(u.COLLAPSE).removeClass(u.SHOW), this._triggerArray.length) + for (var o = 0; o < this._triggerArray.length; o++) { + var s = this._triggerArray[o], + a = r.getSelectorFromElement(s); + null !== a && (t(a).hasClass(u.SHOW) || t(s).addClass(u.COLLAPSED).attr("aria-expanded", !1)) + } + this.setTransitioning(!0); + var l = function() { + e.setTransitioning(!1), t(e._element).removeClass(u.COLLAPSING).addClass(u.COLLAPSE).trigger(c.HIDDEN) + }; + this._element.style[i] = "", r.supportsTransitionEnd() ? t(this._element).one(r.TRANSITION_END, l).emulateTransitionEnd(600) : l() + } + } + }, a.prototype.setTransitioning = function(t) { + this._isTransitioning = t + }, a.prototype.dispose = function() { + t.removeData(this._element, s), this._config = null, this._parent = null, this._element = null, this._triggerArray = null, this._isTransitioning = null + }, a.prototype._getConfig = function(n) { + return n = t.extend({}, l, n), n.toggle = Boolean(n.toggle), r.typeCheckConfig(e, n, h), n + }, a.prototype._getDimension = function() { + return t(this._element).hasClass(d.WIDTH) ? d.WIDTH : d.HEIGHT + }, a.prototype._getParent = function() { + var e = this, + n = t(this._config.parent)[0], + i = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]'; + return t(n).find(i).each(function(t, n) { + e._addAriaAndCollapsedClass(a._getTargetFromElement(n), [n]) + }), n + }, a.prototype._addAriaAndCollapsedClass = function(e, n) { + if (e) { + var i = t(e).hasClass(u.SHOW); + n.length && t(n).toggleClass(u.COLLAPSED, !i).attr("aria-expanded", i) + } + }, a._getTargetFromElement = function(e) { + var n = r.getSelectorFromElement(e); + return n ? t(n)[0] : null + }, a._jQueryInterface = function(e) { + return this.each(function() { + var n = t(this), + o = n.data(s), + r = t.extend({}, l, n.data(), "object" === (void 0 === e ? "undefined" : i(e)) && e); + if (!o && r.toggle && /show|hide/.test(e) && (r.toggle = !1), o || (o = new a(this, r), n.data(s, o)), "string" == typeof e) { + if (void 0 === o[e]) throw new Error('No method named "' + e + '"'); + o[e]() + } + }) + }, o(a, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }, { + key: "Default", + get: function() { + return l + } + }]), a + }(); + t(document).on(c.CLICK_DATA_API, f.DATA_TOGGLE, function(e) { + /input|textarea/i.test(e.target.tagName) || e.preventDefault(); + var n = t(this), + i = r.getSelectorFromElement(this); + t(i).each(function() { + var e = t(this), + i = e.data(s) ? "toggle" : n.data(); + p._jQueryInterface.call(e, i) + }) + }), t.fn[e] = p._jQueryInterface, t.fn[e].Constructor = p, t.fn[e].noConflict = function() { + return t.fn[e] = a, p._jQueryInterface + } + }(jQuery), function(t) { + if ("undefined" == typeof Popper) throw new Error("Bootstrap dropdown require Popper.js (https://popper.js.org)"); + var e = "dropdown", + s = "bs.dropdown", + a = "." + s, + l = t.fn[e], + h = new RegExp("38|40|27"), + c = { + HIDE: "hide" + a, + HIDDEN: "hidden" + a, + SHOW: "show" + a, + SHOWN: "shown" + a, + CLICK: "click" + a, + CLICK_DATA_API: "click.bs.dropdown.data-api", + KEYDOWN_DATA_API: "keydown.bs.dropdown.data-api", + KEYUP_DATA_API: "keyup.bs.dropdown.data-api" + }, + u = { + DISABLED: "disabled", + SHOW: "show", + DROPUP: "dropup", + MENURIGHT: "dropdown-menu-right", + MENULEFT: "dropdown-menu-left" + }, + d = { + DATA_TOGGLE: '[data-toggle="dropdown"]', + FORM_CHILD: ".dropdown form", + MENU: ".dropdown-menu", + NAVBAR_NAV: ".navbar-nav", + VISIBLE_ITEMS: ".dropdown-menu .dropdown-item:not(.disabled)" + }, + f = { + TOP: "top-start", + TOPEND: "top-end", + BOTTOM: "bottom-start", + BOTTOMEND: "bottom-end" + }, + p = { + placement: f.BOTTOM, + offset: 0, + flip: !0 + }, + _ = { + placement: "string", + offset: "(number|string)", + flip: "boolean" + }, + g = function() { + function l(t, e) { + n(this, l), this._element = t, this._popper = null, this._config = this._getConfig(e), this._menu = this._getMenuElement(), this._inNavbar = this._detectNavbar(), this._addEventListeners() + } + return l.prototype.toggle = function() { + if (!this._element.disabled && !t(this._element).hasClass(u.DISABLED)) { + var e = l._getParentFromElement(this._element), + n = t(this._menu).hasClass(u.SHOW); + if (l._clearMenus(), !n) { + var i = { + relatedTarget: this._element + }, + o = t.Event(c.SHOW, i); + if (t(e).trigger(o), !o.isDefaultPrevented()) { + var r = this._element; + t(e).hasClass(u.DROPUP) && (t(this._menu).hasClass(u.MENULEFT) || t(this._menu).hasClass(u.MENURIGHT)) && (r = e), this._popper = new Popper(r, this._menu, this._getPopperConfig()), "ontouchstart" in document.documentElement && !t(e).closest(d.NAVBAR_NAV).length && t("body").children().on("mouseover", null, t.noop), this._element.focus(), this._element.setAttribute("aria-expanded", !0), t(this._menu).toggleClass(u.SHOW), t(e).toggleClass(u.SHOW).trigger(t.Event(c.SHOWN, i)) + } + } + } + }, l.prototype.dispose = function() { + t.removeData(this._element, s), t(this._element).off(a), this._element = null, this._menu = null, null !== this._popper && this._popper.destroy(), this._popper = null + }, l.prototype.update = function() { + this._inNavbar = this._detectNavbar(), null !== this._popper && this._popper.scheduleUpdate() + }, l.prototype._addEventListeners = function() { + var e = this; + t(this._element).on(c.CLICK, function(t) { + t.preventDefault(), t.stopPropagation(), e.toggle() + }) + }, l.prototype._getConfig = function(n) { + var i = t(this._element).data(); + return void 0 !== i.placement && (i.placement = f[i.placement.toUpperCase()]), n = t.extend({}, this.constructor.Default, t(this._element).data(), n), r.typeCheckConfig(e, n, this.constructor.DefaultType), n + }, l.prototype._getMenuElement = function() { + if (!this._menu) { + var e = l._getParentFromElement(this._element); + this._menu = t(e).find(d.MENU)[0] + } + return this._menu + }, l.prototype._getPlacement = function() { + var e = t(this._element).parent(), + n = this._config.placement; + return e.hasClass(u.DROPUP) || this._config.placement === f.TOP ? (n = f.TOP, t(this._menu).hasClass(u.MENURIGHT) && (n = f.TOPEND)) : t(this._menu).hasClass(u.MENURIGHT) && (n = f.BOTTOMEND), n + }, l.prototype._detectNavbar = function() { + return t(this._element).closest(".navbar").length > 0 + }, l.prototype._getPopperConfig = function() { + var t = { + placement: this._getPlacement(), + modifiers: { + offset: { + offset: this._config.offset + }, + flip: { + enabled: this._config.flip + } + } + }; + return this._inNavbar && (t.modifiers.applyStyle = { + enabled: !this._inNavbar + }), t + }, l._jQueryInterface = function(e) { + return this.each(function() { + var n = t(this).data(s), + o = "object" === (void 0 === e ? "undefined" : i(e)) ? e : null; + if (n || (n = new l(this, o), t(this).data(s, n)), "string" == typeof e) { + if (void 0 === n[e]) throw new Error('No method named "' + e + '"'); + n[e]() + } + }) + }, l._clearMenus = function(e) { + if (!e || 3 !== e.which && ("keyup" !== e.type || 9 === e.which)) + for (var n = t.makeArray(t(d.DATA_TOGGLE)), i = 0; i < n.length; i++) { + var o = l._getParentFromElement(n[i]), + r = t(n[i]).data(s), + a = { + relatedTarget: n[i] + }; + if (r) { + var h = r._menu; + if (t(o).hasClass(u.SHOW) && !(e && ("click" === e.type && /input|textarea/i.test(e.target.tagName) || "keyup" === e.type && 9 === e.which) && t.contains(o, e.target))) { + var f = t.Event(c.HIDE, a); + t(o).trigger(f), f.isDefaultPrevented() || ("ontouchstart" in document.documentElement && t("body").children().off("mouseover", null, t.noop), n[i].setAttribute("aria-expanded", "false"), t(h).removeClass(u.SHOW), t(o).removeClass(u.SHOW).trigger(t.Event(c.HIDDEN, a))) + } + } + } + }, l._getParentFromElement = function(e) { + var n = void 0, + i = r.getSelectorFromElement(e); + return i && (n = t(i)[0]), n || e.parentNode + }, l._dataApiKeydownHandler = function(e) { + if (!(!h.test(e.which) || /button/i.test(e.target.tagName) && 32 === e.which || /input|textarea/i.test(e.target.tagName) || (e.preventDefault(), e.stopPropagation(), this.disabled || t(this).hasClass(u.DISABLED)))) { + var n = l._getParentFromElement(this), + i = t(n).hasClass(u.SHOW); + if ((i || 27 === e.which && 32 === e.which) && (!i || 27 !== e.which && 32 !== e.which)) { + var o = t(n).find(d.VISIBLE_ITEMS).get(); + if (o.length) { + var r = o.indexOf(e.target); + 38 === e.which && r > 0 && r--, 40 === e.which && r < o.length - 1 && r++, r < 0 && (r = 0), o[r].focus() + } + } else { + if (27 === e.which) { + var s = t(n).find(d.DATA_TOGGLE)[0]; + t(s).trigger("focus") + } + t(this).trigger("click") + } + } + }, o(l, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }, { + key: "Default", + get: function() { + return p + } + }, { + key: "DefaultType", + get: function() { + return _ + } + }]), l + }(); + t(document).on(c.KEYDOWN_DATA_API, d.DATA_TOGGLE, g._dataApiKeydownHandler).on(c.KEYDOWN_DATA_API, d.MENU, g._dataApiKeydownHandler).on(c.CLICK_DATA_API + " " + c.KEYUP_DATA_API, g._clearMenus).on(c.CLICK_DATA_API, d.DATA_TOGGLE, function(e) { + e.preventDefault(), e.stopPropagation(), g._jQueryInterface.call(t(this), "toggle") + }).on(c.CLICK_DATA_API, d.FORM_CHILD, function(t) { + t.stopPropagation() + }), t.fn[e] = g._jQueryInterface, t.fn[e].Constructor = g, t.fn[e].noConflict = function() { + return t.fn[e] = l, g._jQueryInterface + } + }(jQuery), function(t) { + var e = "modal", + s = ".bs.modal", + a = t.fn[e], + l = { + backdrop: !0, + keyboard: !0, + focus: !0, + show: !0 + }, + h = { + backdrop: "(boolean|string)", + keyboard: "boolean", + focus: "boolean", + show: "boolean" + }, + c = { + HIDE: "hide.bs.modal", + HIDDEN: "hidden.bs.modal", + SHOW: "show.bs.modal", + SHOWN: "shown.bs.modal", + FOCUSIN: "focusin.bs.modal", + RESIZE: "resize.bs.modal", + CLICK_DISMISS: "click.dismiss.bs.modal", + KEYDOWN_DISMISS: "keydown.dismiss.bs.modal", + MOUSEUP_DISMISS: "mouseup.dismiss.bs.modal", + MOUSEDOWN_DISMISS: "mousedown.dismiss.bs.modal", + CLICK_DATA_API: "click.bs.modal.data-api" + }, + u = { + SCROLLBAR_MEASURER: "modal-scrollbar-measure", + BACKDROP: "modal-backdrop", + OPEN: "modal-open", + FADE: "fade", + SHOW: "show" + }, + d = { + DIALOG: ".modal-dialog", + DATA_TOGGLE: '[data-toggle="modal"]', + DATA_DISMISS: '[data-dismiss="modal"]', + FIXED_CONTENT: ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top", + NAVBAR_TOGGLER: ".navbar-toggler" + }, + f = function() { + function a(e, i) { + n(this, a), this._config = this._getConfig(i), this._element = e, this._dialog = t(e).find(d.DIALOG)[0], this._backdrop = null, this._isShown = !1, this._isBodyOverflowing = !1, this._ignoreBackdropClick = !1, this._originalBodyPadding = 0, this._scrollbarWidth = 0 + } + return a.prototype.toggle = function(t) { + return this._isShown ? this.hide() : this.show(t) + }, a.prototype.show = function(e) { + var n = this; + if (!this._isTransitioning) { + r.supportsTransitionEnd() && t(this._element).hasClass(u.FADE) && (this._isTransitioning = !0); + var i = t.Event(c.SHOW, { + relatedTarget: e + }); + t(this._element).trigger(i), this._isShown || i.isDefaultPrevented() || (this._isShown = !0, this._checkScrollbar(), this._setScrollbar(), t(document.body).addClass(u.OPEN), this._setEscapeEvent(), this._setResizeEvent(), t(this._element).on(c.CLICK_DISMISS, d.DATA_DISMISS, function(t) { + return n.hide(t) + }), t(this._dialog).on(c.MOUSEDOWN_DISMISS, function() { + t(n._element).one(c.MOUSEUP_DISMISS, function(e) { + t(e.target).is(n._element) && (n._ignoreBackdropClick = !0) + }) + }), this._showBackdrop(function() { + return n._showElement(e) + })) + } + }, a.prototype.hide = function(e) { + var n = this; + if (e && e.preventDefault(), !this._isTransitioning && this._isShown) { + var i = r.supportsTransitionEnd() && t(this._element).hasClass(u.FADE); + i && (this._isTransitioning = !0); + var o = t.Event(c.HIDE); + t(this._element).trigger(o), this._isShown && !o.isDefaultPrevented() && (this._isShown = !1, this._setEscapeEvent(), this._setResizeEvent(), t(document).off(c.FOCUSIN), t(this._element).removeClass(u.SHOW), t(this._element).off(c.CLICK_DISMISS), t(this._dialog).off(c.MOUSEDOWN_DISMISS), i ? t(this._element).one(r.TRANSITION_END, function(t) { + return n._hideModal(t) + }).emulateTransitionEnd(300) : this._hideModal()) + } + }, a.prototype.dispose = function() { + t.removeData(this._element, "bs.modal"), t(window, document, this._element, this._backdrop).off(s), this._config = null, this._element = null, this._dialog = null, this._backdrop = null, this._isShown = null, this._isBodyOverflowing = null, this._ignoreBackdropClick = null, this._scrollbarWidth = null + }, a.prototype.handleUpdate = function() { + this._adjustDialog() + }, a.prototype._getConfig = function(n) { + return n = t.extend({}, l, n), r.typeCheckConfig(e, n, h), n + }, a.prototype._showElement = function(e) { + var n = this, + i = r.supportsTransitionEnd() && t(this._element).hasClass(u.FADE); + this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE || document.body.appendChild(this._element), this._element.style.display = "block", this._element.removeAttribute("aria-hidden"), this._element.scrollTop = 0, i && r.reflow(this._element), t(this._element).addClass(u.SHOW), this._config.focus && this._enforceFocus(); + var o = t.Event(c.SHOWN, { + relatedTarget: e + }), + s = function() { + n._config.focus && n._element.focus(), n._isTransitioning = !1, t(n._element).trigger(o) + }; + i ? t(this._dialog).one(r.TRANSITION_END, s).emulateTransitionEnd(300) : s() + }, a.prototype._enforceFocus = function() { + var e = this; + t(document).off(c.FOCUSIN).on(c.FOCUSIN, function(n) { + document === n.target || e._element === n.target || t(e._element).has(n.target).length || e._element.focus() + }) + }, a.prototype._setEscapeEvent = function() { + var e = this; + this._isShown && this._config.keyboard ? t(this._element).on(c.KEYDOWN_DISMISS, function(t) { + 27 === t.which && (t.preventDefault(), e.hide()) + }) : this._isShown || t(this._element).off(c.KEYDOWN_DISMISS) + }, a.prototype._setResizeEvent = function() { + var e = this; + this._isShown ? t(window).on(c.RESIZE, function(t) { + return e.handleUpdate(t) + }) : t(window).off(c.RESIZE) + }, a.prototype._hideModal = function() { + var e = this; + this._element.style.display = "none", this._element.setAttribute("aria-hidden", !0), this._isTransitioning = !1, this._showBackdrop(function() { + t(document.body).removeClass(u.OPEN), e._resetAdjustments(), e._resetScrollbar(), t(e._element).trigger(c.HIDDEN) + }) + }, a.prototype._removeBackdrop = function() { + this._backdrop && (t(this._backdrop).remove(), this._backdrop = null) + }, a.prototype._showBackdrop = function(e) { + var n = this, + i = t(this._element).hasClass(u.FADE) ? u.FADE : ""; + if (this._isShown && this._config.backdrop) { + var o = r.supportsTransitionEnd() && i; + if (this._backdrop = document.createElement("div"), this._backdrop.className = u.BACKDROP, i && t(this._backdrop).addClass(i), t(this._backdrop).appendTo(document.body), t(this._element).on(c.CLICK_DISMISS, function(t) { + n._ignoreBackdropClick ? n._ignoreBackdropClick = !1 : t.target === t.currentTarget && ("static" === n._config.backdrop ? n._element.focus() : n.hide()) + }), o && r.reflow(this._backdrop), t(this._backdrop).addClass(u.SHOW), !e) return; + if (!o) return void e(); + t(this._backdrop).one(r.TRANSITION_END, e).emulateTransitionEnd(150) + } else if (!this._isShown && this._backdrop) { + t(this._backdrop).removeClass(u.SHOW); + var s = function() { + n._removeBackdrop(), e && e() + }; + r.supportsTransitionEnd() && t(this._element).hasClass(u.FADE) ? t(this._backdrop).one(r.TRANSITION_END, s).emulateTransitionEnd(150) : s() + } else e && e() + }, a.prototype._adjustDialog = function() { + var t = this._element.scrollHeight > document.documentElement.clientHeight; + !this._isBodyOverflowing && t && (this._element.style.paddingLeft = this._scrollbarWidth + "px"), this._isBodyOverflowing && !t && (this._element.style.paddingRight = this._scrollbarWidth + "px") + }, a.prototype._resetAdjustments = function() { + this._element.style.paddingLeft = "", this._element.style.paddingRight = "" + }, a.prototype._checkScrollbar = function() { + this._isBodyOverflowing = document.body.clientWidth < window.innerWidth, this._scrollbarWidth = this._getScrollbarWidth() + }, a.prototype._setScrollbar = function() { + var e = this; + if (this._isBodyOverflowing) { + t(d.FIXED_CONTENT).each(function(n, i) { + var o = t(i)[0].style.paddingRight, + r = t(i).css("padding-right"); + t(i).data("padding-right", o).css("padding-right", parseFloat(r) + e._scrollbarWidth + "px") + }), t(d.NAVBAR_TOGGLER).each(function(n, i) { + var o = t(i)[0].style.marginRight, + r = t(i).css("margin-right"); + t(i).data("margin-right", o).css("margin-right", parseFloat(r) + e._scrollbarWidth + "px") + }); + var n = document.body.style.paddingRight, + i = t("body").css("padding-right"); + t("body").data("padding-right", n).css("padding-right", parseFloat(i) + this._scrollbarWidth + "px") + } + }, a.prototype._resetScrollbar = function() { + t(d.FIXED_CONTENT).each(function(e, n) { + var i = t(n).data("padding-right"); + void 0 !== i && t(n).css("padding-right", i).removeData("padding-right") + }), t(d.NAVBAR_TOGGLER).each(function(e, n) { + var i = t(n).data("margin-right"); + void 0 !== i && t(n).css("margin-right", i).removeData("margin-right") + }); + var e = t("body").data("padding-right"); + void 0 !== e && t("body").css("padding-right", e).removeData("padding-right") + }, a.prototype._getScrollbarWidth = function() { + var t = document.createElement("div"); + t.className = u.SCROLLBAR_MEASURER, document.body.appendChild(t); + var e = t.getBoundingClientRect().width - t.clientWidth; + return document.body.removeChild(t), e + }, a._jQueryInterface = function(e, n) { + return this.each(function() { + var o = t(this).data("bs.modal"), + r = t.extend({}, a.Default, t(this).data(), "object" === (void 0 === e ? "undefined" : i(e)) && e); + if (o || (o = new a(this, r), t(this).data("bs.modal", o)), "string" == typeof e) { + if (void 0 === o[e]) throw new Error('No method named "' + e + '"'); + o[e](n) + } else r.show && o.show(n) + }) + }, o(a, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }, { + key: "Default", + get: function() { + return l + } + }]), a + }(); + t(document).on(c.CLICK_DATA_API, d.DATA_TOGGLE, function(e) { + var n = this, + i = void 0, + o = r.getSelectorFromElement(this); + o && (i = t(o)[0]); + var s = t(i).data("bs.modal") ? "toggle" : t.extend({}, t(i).data(), t(this).data()); + "A" !== this.tagName && "AREA" !== this.tagName || e.preventDefault(); + var a = t(i).one(c.SHOW, function(e) { + e.isDefaultPrevented() || a.one(c.HIDDEN, function() { + t(n).is(":visible") && n.focus() + }) + }); + f._jQueryInterface.call(t(i), s, this) + }), t.fn[e] = f._jQueryInterface, t.fn[e].Constructor = f, t.fn[e].noConflict = function() { + return t.fn[e] = a, f._jQueryInterface + } + }(jQuery), function(t) { + var e = "scrollspy", + s = t.fn[e], + a = { + offset: 10, + method: "auto", + target: "" + }, + l = { + offset: "number", + method: "string", + target: "(string|element)" + }, + h = { + ACTIVATE: "activate.bs.scrollspy", + SCROLL: "scroll.bs.scrollspy", + LOAD_DATA_API: "load.bs.scrollspy.data-api" + }, + c = { + DROPDOWN_ITEM: "dropdown-item", + DROPDOWN_MENU: "dropdown-menu", + ACTIVE: "active" + }, + u = { + DATA_SPY: '[data-spy="scroll"]', + ACTIVE: ".active", + NAV_LIST_GROUP: ".nav, .list-group", + NAV_LINKS: ".nav-link", + LIST_ITEMS: ".list-group-item", + DROPDOWN: ".dropdown", + DROPDOWN_ITEMS: ".dropdown-item", + DROPDOWN_TOGGLE: ".dropdown-toggle" + }, + d = { + OFFSET: "offset", + POSITION: "position" + }, + f = function() { + function s(e, i) { + var o = this; + n(this, s), this._element = e, this._scrollElement = "BODY" === e.tagName ? window : e, this._config = this._getConfig(i), this._selector = this._config.target + " " + u.NAV_LINKS + "," + this._config.target + " " + u.LIST_ITEMS + "," + this._config.target + " " + u.DROPDOWN_ITEMS, this._offsets = [], this._targets = [], this._activeTarget = null, this._scrollHeight = 0, t(this._scrollElement).on(h.SCROLL, function(t) { + return o._process(t) + }), this.refresh(), this._process() + } + return s.prototype.refresh = function() { + var e = this, + n = this._scrollElement !== this._scrollElement.window ? d.POSITION : d.OFFSET, + i = "auto" === this._config.method ? n : this._config.method, + o = i === d.POSITION ? this._getScrollTop() : 0; + this._offsets = [], this._targets = [], this._scrollHeight = this._getScrollHeight(), t.makeArray(t(this._selector)).map(function(e) { + var n = void 0, + s = r.getSelectorFromElement(e); + if (s && (n = t(s)[0]), n) { + var a = n.getBoundingClientRect(); + if (a.width || a.height) return [t(n)[i]().top + o, s] + } + return null + }).filter(function(t) { + return t + }).sort(function(t, e) { + return t[0] - e[0] + }).forEach(function(t) { + e._offsets.push(t[0]), e._targets.push(t[1]) + }) + }, s.prototype.dispose = function() { + t.removeData(this._element, "bs.scrollspy"), t(this._scrollElement).off(".bs.scrollspy"), this._element = null, this._scrollElement = null, this._config = null, this._selector = null, this._offsets = null, this._targets = null, this._activeTarget = null, this._scrollHeight = null + }, s.prototype._getConfig = function(n) { + if ("string" != typeof(n = t.extend({}, a, n)).target) { + var i = t(n.target).attr("id"); + i || (i = r.getUID(e), t(n.target).attr("id", i)), n.target = "#" + i + } + return r.typeCheckConfig(e, n, l), n + }, s.prototype._getScrollTop = function() { + return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop + }, s.prototype._getScrollHeight = function() { + return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight) + }, s.prototype._getOffsetHeight = function() { + return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height + }, s.prototype._process = function() { + var t = this._getScrollTop() + this._config.offset, + e = this._getScrollHeight(), + n = this._config.offset + e - this._getOffsetHeight(); + if (this._scrollHeight !== e && this.refresh(), t >= n) { + var i = this._targets[this._targets.length - 1]; + this._activeTarget !== i && this._activate(i) + } else { + if (this._activeTarget && t < this._offsets[0] && this._offsets[0] > 0) return this._activeTarget = null, void this._clear(); + for (var o = this._offsets.length; o--;) this._activeTarget !== this._targets[o] && t >= this._offsets[o] && (void 0 === this._offsets[o + 1] || t < this._offsets[o + 1]) && this._activate(this._targets[o]) + } + }, s.prototype._activate = function(e) { + this._activeTarget = e, this._clear(); + var n = this._selector.split(","); + n = n.map(function(t) { + return t + '[data-target="' + e + '"],' + t + '[href="' + e + '"]' + }); + var i = t(n.join(",")); + i.hasClass(c.DROPDOWN_ITEM) ? (i.closest(u.DROPDOWN).find(u.DROPDOWN_TOGGLE).addClass(c.ACTIVE), i.addClass(c.ACTIVE)) : (i.addClass(c.ACTIVE), i.parents(u.NAV_LIST_GROUP).prev(u.NAV_LINKS + ", " + u.LIST_ITEMS).addClass(c.ACTIVE)), t(this._scrollElement).trigger(h.ACTIVATE, { + relatedTarget: e + }) + }, s.prototype._clear = function() { + t(this._selector).filter(u.ACTIVE).removeClass(c.ACTIVE) + }, s._jQueryInterface = function(e) { + return this.each(function() { + var n = t(this).data("bs.scrollspy"), + o = "object" === (void 0 === e ? "undefined" : i(e)) && e; + if (n || (n = new s(this, o), t(this).data("bs.scrollspy", n)), "string" == typeof e) { + if (void 0 === n[e]) throw new Error('No method named "' + e + '"'); + n[e]() + } + }) + }, o(s, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }, { + key: "Default", + get: function() { + return a + } + }]), s + }(); + t(window).on(h.LOAD_DATA_API, function() { + for (var e = t.makeArray(t(u.DATA_SPY)), n = e.length; n--;) { + var i = t(e[n]); + f._jQueryInterface.call(i, i.data()) + } + }), t.fn[e] = f._jQueryInterface, t.fn[e].Constructor = f, t.fn[e].noConflict = function() { + return t.fn[e] = s, f._jQueryInterface + } + }(jQuery), function(t) { + var e = t.fn.tab, + i = { + HIDE: "hide.bs.tab", + HIDDEN: "hidden.bs.tab", + SHOW: "show.bs.tab", + SHOWN: "shown.bs.tab", + CLICK_DATA_API: "click.bs.tab.data-api" + }, + s = { + DROPDOWN_MENU: "dropdown-menu", + ACTIVE: "active", + DISABLED: "disabled", + FADE: "fade", + SHOW: "show" + }, + a = { + DROPDOWN: ".dropdown", + NAV_LIST_GROUP: ".nav, .list-group", + ACTIVE: ".active", + DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]', + DROPDOWN_TOGGLE: ".dropdown-toggle", + DROPDOWN_ACTIVE_CHILD: "> .dropdown-menu .active" + }, + l = function() { + function e(t) { + n(this, e), this._element = t + } + return e.prototype.show = function() { + var e = this; + if (!(this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && t(this._element).hasClass(s.ACTIVE) || t(this._element).hasClass(s.DISABLED))) { + var n = void 0, + o = void 0, + l = t(this._element).closest(a.NAV_LIST_GROUP)[0], + h = r.getSelectorFromElement(this._element); + l && (o = t.makeArray(t(l).find(a.ACTIVE)), o = o[o.length - 1]); + var c = t.Event(i.HIDE, { + relatedTarget: this._element + }), + u = t.Event(i.SHOW, { + relatedTarget: o + }); + if (o && t(o).trigger(c), t(this._element).trigger(u), !u.isDefaultPrevented() && !c.isDefaultPrevented()) { + h && (n = t(h)[0]), this._activate(this._element, l); + var d = function() { + var n = t.Event(i.HIDDEN, { + relatedTarget: e._element + }), + r = t.Event(i.SHOWN, { + relatedTarget: o + }); + t(o).trigger(n), t(e._element).trigger(r) + }; + n ? this._activate(n, n.parentNode, d) : d() + } + } + }, e.prototype.dispose = function() { + t.removeData(this._element, "bs.tab"), this._element = null + }, e.prototype._activate = function(e, n, i) { + var o = this, + l = t(n).find(a.ACTIVE)[0], + h = i && r.supportsTransitionEnd() && l && t(l).hasClass(s.FADE), + c = function() { + return o._transitionComplete(e, l, h, i) + }; + l && h ? t(l).one(r.TRANSITION_END, c).emulateTransitionEnd(150) : c(), l && t(l).removeClass(s.SHOW) + }, e.prototype._transitionComplete = function(e, n, i, o) { + if (n) { + t(n).removeClass(s.ACTIVE); + var l = t(n.parentNode).find(a.DROPDOWN_ACTIVE_CHILD)[0]; + l && t(l).removeClass(s.ACTIVE), n.setAttribute("aria-expanded", !1) + } + if (t(e).addClass(s.ACTIVE), e.setAttribute("aria-expanded", !0), i ? (r.reflow(e), t(e).addClass(s.SHOW)) : t(e).removeClass(s.FADE), e.parentNode && t(e.parentNode).hasClass(s.DROPDOWN_MENU)) { + var h = t(e).closest(a.DROPDOWN)[0]; + h && t(h).find(a.DROPDOWN_TOGGLE).addClass(s.ACTIVE), e.setAttribute("aria-expanded", !0) + } + o && o() + }, e._jQueryInterface = function(n) { + return this.each(function() { + var i = t(this), + o = i.data("bs.tab"); + if (o || (o = new e(this), i.data("bs.tab", o)), "string" == typeof n) { + if (void 0 === o[n]) throw new Error('No method named "' + n + '"'); + o[n]() + } + }) + }, o(e, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }]), e + }(); + t(document).on(i.CLICK_DATA_API, a.DATA_TOGGLE, function(e) { + e.preventDefault(), l._jQueryInterface.call(t(this), "show") + }), t.fn.tab = l._jQueryInterface, t.fn.tab.Constructor = l, t.fn.tab.noConflict = function() { + return t.fn.tab = e, l._jQueryInterface + } + }(jQuery), function(t) { + if ("undefined" == typeof Popper) throw new Error("Bootstrap tooltips require Popper.js (https://popper.js.org)"); + var e = "tooltip", + s = ".bs.tooltip", + a = t.fn[e], + l = new RegExp("(^|\\s)bs-tooltip\\S+", "g"), + h = { + animation: "boolean", + template: "string", + title: "(string|element|function)", + trigger: "string", + delay: "(number|object)", + html: "boolean", + selector: "(string|boolean)", + placement: "(string|function)", + offset: "(number|string)", + container: "(string|element|boolean)", + fallbackPlacement: "(string|array)" + }, + c = { + AUTO: "auto", + TOP: "top", + RIGHT: "right", + BOTTOM: "bottom", + LEFT: "left" + }, + u = { + animation: !0, + template: '

    ', + trigger: "hover focus", + title: "", + delay: 0, + html: !1, + selector: !1, + placement: "top", + offset: 0, + container: !1, + fallbackPlacement: "flip" + }, + d = { + SHOW: "show", + OUT: "out" + }, + f = { + HIDE: "hide" + s, + HIDDEN: "hidden" + s, + SHOW: "show" + s, + SHOWN: "shown" + s, + INSERTED: "inserted" + s, + CLICK: "click" + s, + FOCUSIN: "focusin" + s, + FOCUSOUT: "focusout" + s, + MOUSEENTER: "mouseenter" + s, + MOUSELEAVE: "mouseleave" + s + }, + p = { + FADE: "fade", + SHOW: "show" + }, + _ = { + TOOLTIP: ".tooltip", + TOOLTIP_INNER: ".tooltip-inner", + ARROW: ".arrow" + }, + g = { + HOVER: "hover", + FOCUS: "focus", + CLICK: "click", + MANUAL: "manual" + }, + m = function() { + function a(t, e) { + n(this, a), this._isEnabled = !0, this._timeout = 0, this._hoverState = "", this._activeTrigger = {}, this._popper = null, this.element = t, this.config = this._getConfig(e), this.tip = null, this._setListeners() + } + return a.prototype.enable = function() { + this._isEnabled = !0 + }, a.prototype.disable = function() { + this._isEnabled = !1 + }, a.prototype.toggleEnabled = function() { + this._isEnabled = !this._isEnabled + }, a.prototype.toggle = function(e) { + if (e) { + var n = this.constructor.DATA_KEY, + i = t(e.currentTarget).data(n); + i || (i = new this.constructor(e.currentTarget, this._getDelegateConfig()), t(e.currentTarget).data(n, i)), i._activeTrigger.click = !i._activeTrigger.click, i._isWithActiveTrigger() ? i._enter(null, i) : i._leave(null, i) + } else { + if (t(this.getTipElement()).hasClass(p.SHOW)) return void this._leave(null, this); + this._enter(null, this) + } + }, a.prototype.dispose = function() { + clearTimeout(this._timeout), t.removeData(this.element, this.constructor.DATA_KEY), t(this.element).off(this.constructor.EVENT_KEY), t(this.element).closest(".modal").off("hide.bs.modal"), this.tip && t(this.tip).remove(), this._isEnabled = null, this._timeout = null, this._hoverState = null, this._activeTrigger = null, null !== this._popper && this._popper.destroy(), this._popper = null, this.element = null, this.config = null, this.tip = null + }, a.prototype.show = function() { + var e = this; + if ("none" === t(this.element).css("display")) throw new Error("Please use show on visible elements"); + var n = t.Event(this.constructor.Event.SHOW); + if (this.isWithContent() && this._isEnabled) { + t(this.element).trigger(n); + var i = t.contains(this.element.ownerDocument.documentElement, this.element); + if (n.isDefaultPrevented() || !i) return; + var o = this.getTipElement(), + s = r.getUID(this.constructor.NAME); + o.setAttribute("id", s), this.element.setAttribute("aria-describedby", s), this.setContent(), this.config.animation && t(o).addClass(p.FADE); + var l = "function" == typeof this.config.placement ? this.config.placement.call(this, o, this.element) : this.config.placement, + h = this._getAttachment(l); + this.addAttachmentClass(h); + var c = !1 === this.config.container ? document.body : t(this.config.container); + t(o).data(this.constructor.DATA_KEY, this), t.contains(this.element.ownerDocument.documentElement, this.tip) || t(o).appendTo(c), t(this.element).trigger(this.constructor.Event.INSERTED), this._popper = new Popper(this.element, o, { + placement: h, + modifiers: { + offset: { + offset: this.config.offset + }, + flip: { + behavior: this.config.fallbackPlacement + }, + arrow: { + element: _.ARROW + } + }, + onCreate: function(t) { + t.originalPlacement !== t.placement && e._handlePopperPlacementChange(t) + }, + onUpdate: function(t) { + e._handlePopperPlacementChange(t) + } + }), t(o).addClass(p.SHOW), "ontouchstart" in document.documentElement && t("body").children().on("mouseover", null, t.noop); + var u = function() { + e.config.animation && e._fixTransition(); + var n = e._hoverState; + e._hoverState = null, t(e.element).trigger(e.constructor.Event.SHOWN), n === d.OUT && e._leave(null, e) + }; + r.supportsTransitionEnd() && t(this.tip).hasClass(p.FADE) ? t(this.tip).one(r.TRANSITION_END, u).emulateTransitionEnd(a._TRANSITION_DURATION) : u() + } + }, a.prototype.hide = function(e) { + var n = this, + i = this.getTipElement(), + o = t.Event(this.constructor.Event.HIDE), + s = function() { + n._hoverState !== d.SHOW && i.parentNode && i.parentNode.removeChild(i), n._cleanTipClass(), n.element.removeAttribute("aria-describedby"), t(n.element).trigger(n.constructor.Event.HIDDEN), null !== n._popper && n._popper.destroy(), e && e() + }; + t(this.element).trigger(o), o.isDefaultPrevented() || (t(i).removeClass(p.SHOW), "ontouchstart" in document.documentElement && t("body").children().off("mouseover", null, t.noop), this._activeTrigger[g.CLICK] = !1, this._activeTrigger[g.FOCUS] = !1, this._activeTrigger[g.HOVER] = !1, r.supportsTransitionEnd() && t(this.tip).hasClass(p.FADE) ? t(i).one(r.TRANSITION_END, s).emulateTransitionEnd(150) : s(), this._hoverState = "") + }, a.prototype.update = function() { + null !== this._popper && this._popper.scheduleUpdate() + }, a.prototype.isWithContent = function() { + return Boolean(this.getTitle()) + }, a.prototype.addAttachmentClass = function(e) { + t(this.getTipElement()).addClass("bs-tooltip-" + e) + }, a.prototype.getTipElement = function() { + return this.tip = this.tip || t(this.config.template)[0] + }, a.prototype.setContent = function() { + var e = t(this.getTipElement()); + this.setElementContent(e.find(_.TOOLTIP_INNER), this.getTitle()), e.removeClass(p.FADE + " " + p.SHOW) + }, a.prototype.setElementContent = function(e, n) { + var o = this.config.html; + "object" === (void 0 === n ? "undefined" : i(n)) && (n.nodeType || n.jquery) ? o ? t(n).parent().is(e) || e.empty().append(n) : e.text(t(n).text()): e[o ? "html" : "text"](n) + }, a.prototype.getTitle = function() { + var t = this.element.getAttribute("data-original-title"); + return t || (t = "function" == typeof this.config.title ? this.config.title.call(this.element) : this.config.title), t + }, a.prototype._getAttachment = function(t) { + return c[t.toUpperCase()] + }, a.prototype._setListeners = function() { + var e = this; + this.config.trigger.split(" ").forEach(function(n) { + if ("click" === n) t(e.element).on(e.constructor.Event.CLICK, e.config.selector, function(t) { + return e.toggle(t) + }); + else if (n !== g.MANUAL) { + var i = n === g.HOVER ? e.constructor.Event.MOUSEENTER : e.constructor.Event.FOCUSIN, + o = n === g.HOVER ? e.constructor.Event.MOUSELEAVE : e.constructor.Event.FOCUSOUT; + t(e.element).on(i, e.config.selector, function(t) { + return e._enter(t) + }).on(o, e.config.selector, function(t) { + return e._leave(t) + }) + } + t(e.element).closest(".modal").on("hide.bs.modal", function() { + return e.hide() + }) + }), this.config.selector ? this.config = t.extend({}, this.config, { + trigger: "manual", + selector: "" + }) : this._fixTitle() + }, a.prototype._fixTitle = function() { + var t = i(this.element.getAttribute("data-original-title")); + (this.element.getAttribute("title") || "string" !== t) && (this.element.setAttribute("data-original-title", this.element.getAttribute("title") || ""), this.element.setAttribute("title", "")) + }, a.prototype._enter = function(e, n) { + var i = this.constructor.DATA_KEY; + (n = n || t(e.currentTarget).data(i)) || (n = new this.constructor(e.currentTarget, this._getDelegateConfig()), t(e.currentTarget).data(i, n)), e && (n._activeTrigger["focusin" === e.type ? g.FOCUS : g.HOVER] = !0), t(n.getTipElement()).hasClass(p.SHOW) || n._hoverState === d.SHOW ? n._hoverState = d.SHOW : (clearTimeout(n._timeout), n._hoverState = d.SHOW, n.config.delay && n.config.delay.show ? n._timeout = setTimeout(function() { + n._hoverState === d.SHOW && n.show() + }, n.config.delay.show) : n.show()) + }, a.prototype._leave = function(e, n) { + var i = this.constructor.DATA_KEY; + (n = n || t(e.currentTarget).data(i)) || (n = new this.constructor(e.currentTarget, this._getDelegateConfig()), t(e.currentTarget).data(i, n)), e && (n._activeTrigger["focusout" === e.type ? g.FOCUS : g.HOVER] = !1), n._isWithActiveTrigger() || (clearTimeout(n._timeout), n._hoverState = d.OUT, n.config.delay && n.config.delay.hide ? n._timeout = setTimeout(function() { + n._hoverState === d.OUT && n.hide() + }, n.config.delay.hide) : n.hide()) + }, a.prototype._isWithActiveTrigger = function() { + for (var t in this._activeTrigger) + if (this._activeTrigger[t]) return !0; + return !1 + }, a.prototype._getConfig = function(n) { + return (n = t.extend({}, this.constructor.Default, t(this.element).data(), n)).delay && "number" == typeof n.delay && (n.delay = { + show: n.delay, + hide: n.delay + }), n.title && "number" == typeof n.title && (n.title = n.title.toString()), n.content && "number" == typeof n.content && (n.content = n.content.toString()), r.typeCheckConfig(e, n, this.constructor.DefaultType), n + }, a.prototype._getDelegateConfig = function() { + var t = {}; + if (this.config) + for (var e in this.config) this.constructor.Default[e] !== this.config[e] && (t[e] = this.config[e]); + return t + }, a.prototype._cleanTipClass = function() { + var e = t(this.getTipElement()), + n = e.attr("class").match(l); + null !== n && n.length > 0 && e.removeClass(n.join("")) + }, a.prototype._handlePopperPlacementChange = function(t) { + this._cleanTipClass(), this.addAttachmentClass(this._getAttachment(t.placement)) + }, a.prototype._fixTransition = function() { + var e = this.getTipElement(), + n = this.config.animation; + null === e.getAttribute("x-placement") && (t(e).removeClass(p.FADE), this.config.animation = !1, this.hide(), this.show(), this.config.animation = n) + }, a._jQueryInterface = function(e) { + return this.each(function() { + var n = t(this).data("bs.tooltip"), + o = "object" === (void 0 === e ? "undefined" : i(e)) && e; + if ((n || !/dispose|hide/.test(e)) && (n || (n = new a(this, o), t(this).data("bs.tooltip", n)), "string" == typeof e)) { + if (void 0 === n[e]) throw new Error('No method named "' + e + '"'); + n[e]() + } + }) + }, o(a, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }, { + key: "Default", + get: function() { + return u + } + }, { + key: "NAME", + get: function() { + return e + } + }, { + key: "DATA_KEY", + get: function() { + return "bs.tooltip" + } + }, { + key: "Event", + get: function() { + return f + } + }, { + key: "EVENT_KEY", + get: function() { + return s + } + }, { + key: "DefaultType", + get: function() { + return h + } + }]), a + }(); + return t.fn[e] = m._jQueryInterface, t.fn[e].Constructor = m, t.fn[e].noConflict = function() { + return t.fn[e] = a, m._jQueryInterface + }, m + }(jQuery)); + ! function(r) { + var a = "popover", + l = ".bs.popover", + h = r.fn[a], + c = new RegExp("(^|\\s)bs-popover\\S+", "g"), + u = r.extend({}, s.Default, { + placement: "right", + trigger: "click", + content: "", + template: '' + }), + d = r.extend({}, s.DefaultType, { + content: "(string|element|function)" + }), + f = { + FADE: "fade", + SHOW: "show" + }, + p = { + TITLE: ".popover-header", + CONTENT: ".popover-body" + }, + _ = { + HIDE: "hide" + l, + HIDDEN: "hidden" + l, + SHOW: "show" + l, + SHOWN: "shown" + l, + INSERTED: "inserted" + l, + CLICK: "click" + l, + FOCUSIN: "focusin" + l, + FOCUSOUT: "focusout" + l, + MOUSEENTER: "mouseenter" + l, + MOUSELEAVE: "mouseleave" + l + }, + g = function(s) { + function h() { + return n(this, h), t(this, s.apply(this, arguments)) + } + return e(h, s), h.prototype.isWithContent = function() { + return this.getTitle() || this._getContent() + }, h.prototype.addAttachmentClass = function(t) { + r(this.getTipElement()).addClass("bs-popover-" + t) + }, h.prototype.getTipElement = function() { + return this.tip = this.tip || r(this.config.template)[0] + }, h.prototype.setContent = function() { + var t = r(this.getTipElement()); + this.setElementContent(t.find(p.TITLE), this.getTitle()), this.setElementContent(t.find(p.CONTENT), this._getContent()), t.removeClass(f.FADE + " " + f.SHOW) + }, h.prototype._getContent = function() { + return this.element.getAttribute("data-content") || ("function" == typeof this.config.content ? this.config.content.call(this.element) : this.config.content) + }, h.prototype._cleanTipClass = function() { + var t = r(this.getTipElement()), + e = t.attr("class").match(c); + null !== e && e.length > 0 && t.removeClass(e.join("")) + }, h._jQueryInterface = function(t) { + return this.each(function() { + var e = r(this).data("bs.popover"), + n = "object" === (void 0 === t ? "undefined" : i(t)) ? t : null; + if ((e || !/destroy|hide/.test(t)) && (e || (e = new h(this, n), r(this).data("bs.popover", e)), "string" == typeof t)) { + if (void 0 === e[t]) throw new Error('No method named "' + t + '"'); + e[t]() + } + }) + }, o(h, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }, { + key: "Default", + get: function() { + return u + } + }, { + key: "NAME", + get: function() { + return a + } + }, { + key: "DATA_KEY", + get: function() { + return "bs.popover" + } + }, { + key: "Event", + get: function() { + return _ + } + }, { + key: "EVENT_KEY", + get: function() { + return l + } + }, { + key: "DefaultType", + get: function() { + return d + } + }]), h + }(s); + r.fn[a] = g._jQueryInterface, r.fn[a].Constructor = g, r.fn[a].noConflict = function() { + return r.fn[a] = h, g._jQueryInterface + } + }(jQuery) +}(); \ No newline at end of file diff --git a/web/libs/js/now-ui-kit.js b/web/libs/js/now-ui-kit.js new file mode 100644 index 00000000..a90f2b37 --- /dev/null +++ b/web/libs/js/now-ui-kit.js @@ -0,0 +1,220 @@ +/*! + + ========================================================= + * Now-ui-kit - v1.1.0 + ========================================================= + + * Product Page: https://www.creative-tim.com/product/now-ui-kit + * Copyright 2017 Creative Tim (http://www.creative-tim.com) + * Licensed under MIT (https://github.com/creativetimofficial/now-ui-kit/blob/master/LICENSE.md) + + * Designed by www.invisionapp.com Coded by www.creative-tim.com + + ========================================================= + + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + */ + +var transparent = true; + +var transparentDemo = true; +var fixedTop = false; + +var navbar_initialized, + backgroundOrange = false, + toggle_initialized = false; + +$(document).ready(function() { + try{ + // Activate the Tooltips + $('[data-toggle="tooltip"], [rel="tooltip"]').tooltip(); + + // Activate Popovers and set color for popovers + $('[data-toggle="popover"]').each(function() { + color_class = $(this).data('color'); + $(this).popover({ + template: '' + }); + }); + }catch(err){ + + } + + // Activate the image for the navbar-collapse + nowuiKit.initNavbarImage(); + + $navbar = $('.navbar[color-on-scroll]'); + scroll_distance = $navbar.attr('color-on-scroll') || 500; + + // Check if we have the class "navbar-color-on-scroll" then add the function to remove the class "navbar-transparent" so it will transform to a plain color. + +// if ($('.navbar[color-on-scroll]').length != 0) { +// nowuiKit.checkScrollForTransparentNavbar(); +// $(window).on('scroll', nowuiKit.checkScrollForTransparentNavbar) +// } + + $('.form-control').on("focus", function() { + $(this).parent('.input-group').addClass("input-group-focus"); + }).on("blur", function() { + $(this).parent(".input-group").removeClass("input-group-focus"); + }); + + // Activate bootstrapSwitch + $('.bootstrap-switch').each(function() { + $this = $(this); + data_on_label = $this.data('on-label') || ''; + data_off_label = $this.data('off-label') || ''; + + $this.bootstrapSwitch({ + onText: data_on_label, + offText: data_off_label + }); + }); + + if ($(window).width() >= 992) { + big_image = $('.page-header-image[data-parallax="true"]'); + + $(window).on('scroll', nowuiKitDemo.checkScrollForParallax); + } + + // Activate Carousel + $('.carousel').carousel({ + interval: 4000 + }); + + $('.date-picker').each(function() { + $(this).datepicker({ + templates: { + leftArrow: '', + rightArrow: '' + } + }).on('show', function() { + $('.datepicker').addClass('open'); + + datepicker_color = $(this).data('datepicker-color'); + if (datepicker_color.length != 0) { + $('.datepicker').addClass('datepicker-' + datepicker_color + ''); + } + }).on('hide', function() { + $('.datepicker').removeClass('open'); + }); + }); + + +}); + +$(window).on('resize', function() { + nowuiKit.initNavbarImage(); +}); + +$(document).on('click', '.navbar-toggler', function() { + $toggle = $(this); + + if (nowuiKit.misc.navbar_menu_visible == 1) { + $('html').removeClass('nav-open'); + nowuiKit.misc.navbar_menu_visible = 0; + $('#bodyClick').remove(); + setTimeout(function() { + $toggle.removeClass('toggled'); + }, 550); + } else { + setTimeout(function() { + $toggle.addClass('toggled'); + }, 580); + div = '
    '; + $(div).appendTo('body').click(function() { + $('html').removeClass('nav-open'); + nowuiKit.misc.navbar_menu_visible = 0; + setTimeout(function() { + $toggle.removeClass('toggled'); + $('#bodyClick').remove(); + }, 550); + }); + + $('html').addClass('nav-open'); + nowuiKit.misc.navbar_menu_visible = 1; + } +}); + +nowuiKit = { + misc: { + navbar_menu_visible: 0 + }, + + checkScrollForTransparentNavbar: debounce(function() { + if ($(document).scrollTop() > scroll_distance) { + if (transparent) { + transparent = false; + $('.navbar[color-on-scroll]').removeClass('navbar-transparent'); + } + } else { + if (!transparent) { + transparent = true; + $('.navbar[color-on-scroll]').addClass('navbar-transparent'); + } + } + }, 17), + + initNavbarImage: function() { + var $navbar = $('.navbar').find('.navbar-translate').siblings('.navbar-collapse'); + var background_image = $navbar.data('nav-image'); + + if ($(window).width() < 991 || $('body').hasClass('burger-menu')) { + if (background_image != undefined) { + $navbar.css('background', "url('" + background_image + "')") + .removeAttr('data-nav-image') + .css('background-size', "cover") + .addClass('has-image'); + } + } else if (background_image != undefined) { + $navbar.css('background', "") + .attr('data-nav-image', '' + background_image + '') + .css('background-size', "") + .removeClass('has-image'); + } + }, + + initSliders: function() { + + } +} + + +var big_image; + +// Javascript just for Demo purpose, remove it from your project +nowuiKitDemo = { + checkScrollForParallax: debounce(function() { + var current_scroll = $(this).scrollTop(); + + oVal = ($(window).scrollTop() / 3); + big_image.css({ + 'transform': 'translate3d(0,' + oVal + 'px,0)', + '-webkit-transform': 'translate3d(0,' + oVal + 'px,0)', + '-ms-transform': 'translate3d(0,' + oVal + 'px,0)', + '-o-transform': 'translate3d(0,' + oVal + 'px,0)' + }); + + }, 6) + +} + +// Returns a function, that, as long as it continues to be invoked, will not +// be triggered. The function will be called after it stops being called for +// N milliseconds. If `immediate` is passed, trigger the function on the +// leading edge, instead of the trailing. + +function debounce(func, wait, immediate) { + var timeout; + return function() { + var context = this, + args = arguments; + clearTimeout(timeout); + timeout = setTimeout(function() { + timeout = null; + if (!immediate) func.apply(context, args); + }, wait); + if (immediate && !timeout) func.apply(context, args); + }; +}; \ No newline at end of file diff --git a/web/libs/js/popper.min.js b/web/libs/js/popper.min.js new file mode 100644 index 00000000..846d6c4f --- /dev/null +++ b/web/libs/js/popper.min.js @@ -0,0 +1,834 @@ +/* + Copyright (C) Federico Zivolo 2017 + Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). + */ +(function(e, t) { + 'object' == typeof exports && 'undefined' != typeof module ? module.exports = t() : 'function' == typeof define && define.amd ? define(t) : e.Popper = t() +})(this, function() { + 'use strict'; + + function e(e) { + return e && '[object Function]' === {}.toString.call(e) + } + + function t(e, t) { + if (1 !== e.nodeType) return []; + var o = window.getComputedStyle(e, null); + return t ? o[t] : o + } + + function o(e) { + return 'HTML' === e.nodeName ? e : e.parentNode || e.host + } + + function n(e) { + if (!e || -1 !== ['HTML', 'BODY', '#document'].indexOf(e.nodeName)) return window.document.body; + var i = t(e), + r = i.overflow, + p = i.overflowX, + s = i.overflowY; + return /(auto|scroll)/.test(r + s + p) ? e : n(o(e)) + } + + function r(e) { + var o = e && e.offsetParent, + i = o && o.nodeName; + return i && 'BODY' !== i && 'HTML' !== i ? -1 !== ['TD', 'TABLE'].indexOf(o.nodeName) && 'static' === t(o, 'position') ? r(o) : o : window.document.documentElement + } + + function p(e) { + var t = e.nodeName; + return 'BODY' !== t && ('HTML' === t || r(e.firstElementChild) === e) + } + + function s(e) { + return null === e.parentNode ? e : s(e.parentNode) + } + + function d(e, t) { + if (!e || !e.nodeType || !t || !t.nodeType) return window.document.documentElement; + var o = e.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_FOLLOWING, + i = o ? e : t, + n = o ? t : e, + a = document.createRange(); + a.setStart(i, 0), a.setEnd(n, 0); + var f = a.commonAncestorContainer; + if (e !== f && t !== f || i.contains(n)) return p(f) ? f : r(f); + var l = s(e); + return l.host ? d(l.host, t) : d(e, s(t).host) + } + + function a(e) { + var t = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : 'top', + o = 'top' === t ? 'scrollTop' : 'scrollLeft', + i = e.nodeName; + if ('BODY' === i || 'HTML' === i) { + var n = window.document.documentElement, + r = window.document.scrollingElement || n; + return r[o] + } + return e[o] + } + + function f(e, t) { + var o = 2 < arguments.length && void 0 !== arguments[2] && arguments[2], + i = a(t, 'top'), + n = a(t, 'left'), + r = o ? -1 : 1; + return e.top += i * r, e.bottom += i * r, e.left += n * r, e.right += n * r, e + } + + function l(e, t) { + var o = 'x' === t ? 'Left' : 'Top', + i = 'Left' == o ? 'Right' : 'Bottom'; + return +e['border' + o + 'Width'].split('px')[0] + +e['border' + i + 'Width'].split('px')[0] + } + + function m(e, t, o, i) { + return _(t['offset' + e], o['client' + e], o['offset' + e], ie() ? o['offset' + e] + i['margin' + ('Height' === e ? 'Top' : 'Left')] + i['margin' + ('Height' === e ? 'Bottom' : 'Right')] : 0) + } + + function h() { + var e = window.document.body, + t = window.document.documentElement, + o = ie() && window.getComputedStyle(t); + return { + height: m('Height', e, t, o), + width: m('Width', e, t, o) + } + } + + function c(e) { + return se({}, e, { + right: e.left + e.width, + bottom: e.top + e.height + }) + } + + function g(e) { + var o = {}; + if (ie()) try { + o = e.getBoundingClientRect(); + var i = a(e, 'top'), + n = a(e, 'left'); + o.top += i, o.left += n, o.bottom += i, o.right += n + } catch (e) {} else o = e.getBoundingClientRect(); + var r = { + left: o.left, + top: o.top, + width: o.right - o.left, + height: o.bottom - o.top + }, + p = 'HTML' === e.nodeName ? h() : {}, + s = p.width || e.clientWidth || r.right - r.left, + d = p.height || e.clientHeight || r.bottom - r.top, + f = e.offsetWidth - s, + m = e.offsetHeight - d; + if (f || m) { + var g = t(e); + f -= l(g, 'x'), m -= l(g, 'y'), r.width -= f, r.height -= m + } + return c(r) + } + + function u(e, o) { + var i = ie(), + r = 'HTML' === o.nodeName, + p = g(e), + s = g(o), + d = n(e), + a = t(o), + l = +a.borderTopWidth.split('px')[0], + m = +a.borderLeftWidth.split('px')[0], + h = c({ + top: p.top - s.top - l, + left: p.left - s.left - m, + width: p.width, + height: p.height + }); + if (h.marginTop = 0, h.marginLeft = 0, !i && r) { + var u = +a.marginTop.split('px')[0], + b = +a.marginLeft.split('px')[0]; + h.top -= l - u, h.bottom -= l - u, h.left -= m - b, h.right -= m - b, h.marginTop = u, h.marginLeft = b + } + return (i ? o.contains(d) : o === d && 'BODY' !== d.nodeName) && (h = f(h, o)), h + } + + function b(e) { + var t = window.document.documentElement, + o = u(e, t), + i = _(t.clientWidth, window.innerWidth || 0), + n = _(t.clientHeight, window.innerHeight || 0), + r = a(t), + p = a(t, 'left'), + s = { + top: r - o.top + o.marginTop, + left: p - o.left + o.marginLeft, + width: i, + height: n + }; + return c(s) + } + + function y(e) { + var i = e.nodeName; + return 'BODY' === i || 'HTML' === i ? !1 : 'fixed' === t(e, 'position') || y(o(e)) + } + + function w(e, t, i, r) { + var p = { + top: 0, + left: 0 + }, + s = d(e, t); + if ('viewport' === r) p = b(s); + else { + var a; + 'scrollParent' === r ? (a = n(o(e)), 'BODY' === a.nodeName && (a = window.document.documentElement)) : 'window' === r ? a = window.document.documentElement : a = r; + var f = u(a, s); + if ('HTML' === a.nodeName && !y(s)) { + var l = h(), + m = l.height, + c = l.width; + p.top += f.top - f.marginTop, p.bottom = m + f.top, p.left += f.left - f.marginLeft, p.right = c + f.left + } else p = f + } + return p.left += i, p.top += i, p.right -= i, p.bottom -= i, p + } + + function v(e) { + var t = e.width, + o = e.height; + return t * o + } + + function E(e, t, o, i, n) { + var r = 5 < arguments.length && void 0 !== arguments[5] ? arguments[5] : 0; + if (-1 === e.indexOf('auto')) return e; + var p = w(o, i, r, n), + s = { + top: { + width: p.width, + height: t.top - p.top + }, + right: { + width: p.right - t.right, + height: p.height + }, + bottom: { + width: p.width, + height: p.bottom - t.bottom + }, + left: { + width: t.left - p.left, + height: p.height + } + }, + d = Object.keys(s).map(function(e) { + return se({ + key: e + }, s[e], { + area: v(s[e]) + }) + }).sort(function(e, t) { + return t.area - e.area + }), + a = d.filter(function(e) { + var t = e.width, + i = e.height; + return t >= o.clientWidth && i >= o.clientHeight + }), + f = 0 < a.length ? a[0].key : d[0].key, + l = e.split('-')[1]; + return f + (l ? '-' + l : '') + } + + function x(e, t, o) { + var i = d(t, o); + return u(o, i) + } + + function O(e) { + var t = window.getComputedStyle(e), + o = parseFloat(t.marginTop) + parseFloat(t.marginBottom), + i = parseFloat(t.marginLeft) + parseFloat(t.marginRight), + n = { + width: e.offsetWidth + i, + height: e.offsetHeight + o + }; + return n + } + + function L(e) { + var t = { + left: 'right', + right: 'left', + bottom: 'top', + top: 'bottom' + }; + return e.replace(/left|right|bottom|top/g, function(e) { + return t[e] + }) + } + + function S(e, t, o) { + o = o.split('-')[0]; + var i = O(e), + n = { + width: i.width, + height: i.height + }, + r = -1 !== ['right', 'left'].indexOf(o), + p = r ? 'top' : 'left', + s = r ? 'left' : 'top', + d = r ? 'height' : 'width', + a = r ? 'width' : 'height'; + return n[p] = t[p] + t[d] / 2 - i[d] / 2, n[s] = o === s ? t[s] - i[a] : t[L(s)], n + } + + function T(e, t) { + return Array.prototype.find ? e.find(t) : e.filter(t)[0] + } + + function C(e, t, o) { + if (Array.prototype.findIndex) return e.findIndex(function(e) { + return e[t] === o + }); + var i = T(e, function(e) { + return e[t] === o + }); + return e.indexOf(i) + } + + function N(t, o, i) { + var n = void 0 === i ? t : t.slice(0, C(t, 'name', i)); + return n.forEach(function(t) { + t.function && console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); + var i = t.function || t.fn; + t.enabled && e(i) && (o.offsets.popper = c(o.offsets.popper), o.offsets.reference = c(o.offsets.reference), o = i(o, t)) + }), o + } + + function k() { + if (!this.state.isDestroyed) { + var e = { + instance: this, + styles: {}, + attributes: {}, + flipped: !1, + offsets: {} + }; + e.offsets.reference = x(this.state, this.popper, this.reference), e.placement = E(this.options.placement, e.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding), e.originalPlacement = e.placement, e.offsets.popper = S(this.popper, e.offsets.reference, e.placement), e.offsets.popper.position = 'absolute', e = N(this.modifiers, e), this.state.isCreated ? this.options.onUpdate(e) : (this.state.isCreated = !0, this.options.onCreate(e)) + } + } + + function W(e, t) { + return e.some(function(e) { + var o = e.name, + i = e.enabled; + return i && o === t + }) + } + + function B(e) { + for (var t = [!1, 'ms', 'Webkit', 'Moz', 'O'], o = e.charAt(0).toUpperCase() + e.slice(1), n = 0; n < t.length - 1; n++) { + var i = t[n], + r = i ? '' + i + o : e; + if ('undefined' != typeof window.document.body.style[r]) return r + } + return null + } + + function D() { + return this.state.isDestroyed = !0, W(this.modifiers, 'applyStyle') && (this.popper.removeAttribute('x-placement'), this.popper.style.left = '', this.popper.style.position = '', this.popper.style.top = '', this.popper.style[B('transform')] = ''), this.disableEventListeners(), this.options.removeOnDestroy && this.popper.parentNode.removeChild(this.popper), this + } + + function H(e, t, o, i) { + var r = 'BODY' === e.nodeName, + p = r ? window : e; + p.addEventListener(t, o, { + passive: !0 + }), r || H(n(p.parentNode), t, o, i), i.push(p) + } + + function P(e, t, o, i) { + o.updateBound = i, window.addEventListener('resize', o.updateBound, { + passive: !0 + }); + var r = n(e); + return H(r, 'scroll', o.updateBound, o.scrollParents), o.scrollElement = r, o.eventsEnabled = !0, o + } + + function A() { + this.state.eventsEnabled || (this.state = P(this.reference, this.options, this.state, this.scheduleUpdate)) + } + + function M(e, t) { + return window.removeEventListener('resize', t.updateBound), t.scrollParents.forEach(function(e) { + e.removeEventListener('scroll', t.updateBound) + }), t.updateBound = null, t.scrollParents = [], t.scrollElement = null, t.eventsEnabled = !1, t + } + + function I() { + this.state.eventsEnabled && (window.cancelAnimationFrame(this.scheduleUpdate), this.state = M(this.reference, this.state)) + } + + function R(e) { + return '' !== e && !isNaN(parseFloat(e)) && isFinite(e) + } + + function U(e, t) { + Object.keys(t).forEach(function(o) { + var i = ''; - 1 !== ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(o) && R(t[o]) && (i = 'px'), e.style[o] = t[o] + i + }) + } + + function Y(e, t) { + Object.keys(t).forEach(function(o) { + var i = t[o]; + !1 === i ? e.removeAttribute(o) : e.setAttribute(o, t[o]) + }) + } + + function F(e, t, o) { + var i = T(e, function(e) { + var o = e.name; + return o === t + }), + n = !!i && e.some(function(e) { + return e.name === o && e.enabled && e.order < i.order + }); + if (!n) { + var r = '`' + t + '`'; + console.warn('`' + o + '`' + ' modifier is required by ' + r + ' modifier in order to work, be sure to include it before ' + r + '!') + } + return n + } + + function j(e) { + return 'end' === e ? 'start' : 'start' === e ? 'end' : e + } + + function K(e) { + var t = 1 < arguments.length && void 0 !== arguments[1] && arguments[1], + o = ae.indexOf(e), + i = ae.slice(o + 1).concat(ae.slice(0, o)); + return t ? i.reverse() : i + } + + function q(e, t, o, i) { + var n = e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/), + r = +n[1], + p = n[2]; + if (!r) return e; + if (0 === p.indexOf('%')) { + var s; + switch (p) { + case '%p': + s = o; + break; + case '%': + case '%r': + default: + s = i; + } + var d = c(s); + return d[t] / 100 * r + } + if ('vh' === p || 'vw' === p) { + var a; + return a = 'vh' === p ? _(document.documentElement.clientHeight, window.innerHeight || 0) : _(document.documentElement.clientWidth, window.innerWidth || 0), a / 100 * r + } + return r + } + + function G(e, t, o, i) { + var n = [0, 0], + r = -1 !== ['right', 'left'].indexOf(i), + p = e.split(/(\+|\-)/).map(function(e) { + return e.trim() + }), + s = p.indexOf(T(p, function(e) { + return -1 !== e.search(/,|\s/) + })); + p[s] && -1 === p[s].indexOf(',') && console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.'); + var d = /\s*,\s*|\s+/, + a = -1 === s ? [p] : [p.slice(0, s).concat([p[s].split(d)[0]]), [p[s].split(d)[1]].concat(p.slice(s + 1))]; + return a = a.map(function(e, i) { + var n = (1 === i ? !r : r) ? 'height' : 'width', + p = !1; + return e.reduce(function(e, t) { + return '' === e[e.length - 1] && -1 !== ['+', '-'].indexOf(t) ? (e[e.length - 1] = t, p = !0, e) : p ? (e[e.length - 1] += t, p = !1, e) : e.concat(t) + }, []).map(function(e) { + return q(e, n, t, o) + }) + }), a.forEach(function(e, t) { + e.forEach(function(o, i) { + R(o) && (n[t] += o * ('-' === e[i - 1] ? -1 : 1)) + }) + }), n + } + for (var z = Math.min, V = Math.floor, _ = Math.max, X = ['native code', '[object MutationObserverConstructor]'], Q = function(e) { + return X.some(function(t) { + return -1 < (e || '').toString().indexOf(t) + }) + }, J = 'undefined' != typeof window, Z = ['Edge', 'Trident', 'Firefox'], $ = 0, ee = 0; ee < Z.length; ee += 1) + if (J && 0 <= navigator.userAgent.indexOf(Z[ee])) { + $ = 1; + break + } + var i, te = J && Q(window.MutationObserver), + oe = te ? function(e) { + var t = !1, + o = 0, + i = document.createElement('span'), + n = new MutationObserver(function() { + e(), t = !1 + }); + return n.observe(i, { + attributes: !0 + }), + function() { + t || (t = !0, i.setAttribute('x-index', o), ++o) + } + } : function(e) { + var t = !1; + return function() { + t || (t = !0, setTimeout(function() { + t = !1, e() + }, $)) + } + }, + ie = function() { + return void 0 == i && (i = -1 !== navigator.appVersion.indexOf('MSIE 10')), i + }, + ne = function(e, t) { + if (!(e instanceof t)) throw new TypeError('Cannot call a class as a function') + }, + re = function() { + function e(e, t) { + for (var o, n = 0; n < t.length; n++) o = t[n], o.enumerable = o.enumerable || !1, o.configurable = !0, 'value' in o && (o.writable = !0), Object.defineProperty(e, o.key, o) + } + return function(t, o, i) { + return o && e(t.prototype, o), i && e(t, i), t + } + }(), + pe = function(e, t, o) { + return t in e ? Object.defineProperty(e, t, { + value: o, + enumerable: !0, + configurable: !0, + writable: !0 + }) : e[t] = o, e + }, + se = Object.assign || function(e) { + for (var t, o = 1; o < arguments.length; o++) + for (var i in t = arguments[o], t) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]); + return e + }, + de = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'], + ae = de.slice(3), + fe = { + FLIP: 'flip', + CLOCKWISE: 'clockwise', + COUNTERCLOCKWISE: 'counterclockwise' + }, + le = function() { + function t(o, i) { + var n = this, + r = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : {}; + ne(this, t), this.scheduleUpdate = function() { + return requestAnimationFrame(n.update) + }, this.update = oe(this.update.bind(this)), this.options = se({}, t.Defaults, r), this.state = { + isDestroyed: !1, + isCreated: !1, + scrollParents: [] + }, this.reference = o.jquery ? o[0] : o, this.popper = i.jquery ? i[0] : i, this.options.modifiers = {}, Object.keys(se({}, t.Defaults.modifiers, r.modifiers)).forEach(function(e) { + n.options.modifiers[e] = se({}, t.Defaults.modifiers[e] || {}, r.modifiers ? r.modifiers[e] : {}) + }), this.modifiers = Object.keys(this.options.modifiers).map(function(e) { + return se({ + name: e + }, n.options.modifiers[e]) + }).sort(function(e, t) { + return e.order - t.order + }), this.modifiers.forEach(function(t) { + t.enabled && e(t.onLoad) && t.onLoad(n.reference, n.popper, n.options, t, n.state) + }), this.update(); + var p = this.options.eventsEnabled; + p && this.enableEventListeners(), this.state.eventsEnabled = p + } + return re(t, [{ + key: 'update', + value: function() { + return k.call(this) + } + }, { + key: 'destroy', + value: function() { + return D.call(this) + } + }, { + key: 'enableEventListeners', + value: function() { + return A.call(this) + } + }, { + key: 'disableEventListeners', + value: function() { + return I.call(this) + } + }]), t + }(); + return le.Utils = ('undefined' == typeof window ? global : window).PopperUtils, le.placements = de, le.Defaults = { + placement: 'bottom', + eventsEnabled: !0, + removeOnDestroy: !1, + onCreate: function() {}, + onUpdate: function() {}, + modifiers: { + shift: { + order: 100, + enabled: !0, + fn: function(e) { + var t = e.placement, + o = t.split('-')[0], + i = t.split('-')[1]; + if (i) { + var n = e.offsets, + r = n.reference, + p = n.popper, + s = -1 !== ['bottom', 'top'].indexOf(o), + d = s ? 'left' : 'top', + a = s ? 'width' : 'height', + f = { + start: pe({}, d, r[d]), + end: pe({}, d, r[d] + r[a] - p[a]) + }; + e.offsets.popper = se({}, p, f[i]) + } + return e + } + }, + offset: { + order: 200, + enabled: !0, + fn: function(e, t) { + var o, i = t.offset, + n = e.placement, + r = e.offsets, + p = r.popper, + s = r.reference, + d = n.split('-')[0]; + return o = R(+i) ? [+i, 0] : G(i, p, s, d), 'left' === d ? (p.top += o[0], p.left -= o[1]) : 'right' === d ? (p.top += o[0], p.left += o[1]) : 'top' === d ? (p.left += o[0], p.top -= o[1]) : 'bottom' === d && (p.left += o[0], p.top += o[1]), e.popper = p, e + }, + offset: 0 + }, + preventOverflow: { + order: 300, + enabled: !0, + fn: function(e, t) { + var o = t.boundariesElement || r(e.instance.popper); + e.instance.reference === o && (o = r(o)); + var i = w(e.instance.popper, e.instance.reference, t.padding, o); + t.boundaries = i; + var n = t.priority, + p = e.offsets.popper, + s = { + primary: function(e) { + var o = p[e]; + return p[e] < i[e] && !t.escapeWithReference && (o = _(p[e], i[e])), pe({}, e, o) + }, + secondary: function(e) { + var o = 'right' === e ? 'left' : 'top', + n = p[o]; + return p[e] > i[e] && !t.escapeWithReference && (n = z(p[o], i[e] - ('right' === e ? p.width : p.height))), pe({}, o, n) + } + }; + return n.forEach(function(e) { + var t = -1 === ['left', 'top'].indexOf(e) ? 'secondary' : 'primary'; + p = se({}, p, s[t](e)) + }), e.offsets.popper = p, e + }, + priority: ['left', 'right', 'top', 'bottom'], + padding: 5, + boundariesElement: 'scrollParent' + }, + keepTogether: { + order: 400, + enabled: !0, + fn: function(e) { + var t = e.offsets, + o = t.popper, + i = t.reference, + n = e.placement.split('-')[0], + r = V, + p = -1 !== ['top', 'bottom'].indexOf(n), + s = p ? 'right' : 'bottom', + d = p ? 'left' : 'top', + a = p ? 'width' : 'height'; + return o[s] < r(i[d]) && (e.offsets.popper[d] = r(i[d]) - o[a]), o[d] > r(i[s]) && (e.offsets.popper[d] = r(i[s])), e + } + }, + arrow: { + order: 500, + enabled: !0, + fn: function(e, t) { + if (!F(e.instance.modifiers, 'arrow', 'keepTogether')) return e; + var o = t.element; + if ('string' == typeof o) { + if (o = e.instance.popper.querySelector(o), !o) return e; + } else if (!e.instance.popper.contains(o)) return console.warn('WARNING: `arrow.element` must be child of its popper element!'), e; + var i = e.placement.split('-')[0], + n = e.offsets, + r = n.popper, + p = n.reference, + s = -1 !== ['left', 'right'].indexOf(i), + d = s ? 'height' : 'width', + a = s ? 'top' : 'left', + f = s ? 'left' : 'top', + l = s ? 'bottom' : 'right', + m = O(o)[d]; + p[l] - m < r[a] && (e.offsets.popper[a] -= r[a] - (p[l] - m)), p[a] + m > r[l] && (e.offsets.popper[a] += p[a] + m - r[l]); + var h = p[a] + p[d] / 2 - m / 2, + g = h - c(e.offsets.popper)[a]; + return g = _(z(r[d] - m, g), 0), e.arrowElement = o, e.offsets.arrow = {}, e.offsets.arrow[a] = Math.round(g), e.offsets.arrow[f] = '', e + }, + element: '[x-arrow]' + }, + flip: { + order: 600, + enabled: !0, + fn: function(e, t) { + if (W(e.instance.modifiers, 'inner')) return e; + if (e.flipped && e.placement === e.originalPlacement) return e; + var o = w(e.instance.popper, e.instance.reference, t.padding, t.boundariesElement), + i = e.placement.split('-')[0], + n = L(i), + r = e.placement.split('-')[1] || '', + p = []; + switch (t.behavior) { + case fe.FLIP: + p = [i, n]; + break; + case fe.CLOCKWISE: + p = K(i); + break; + case fe.COUNTERCLOCKWISE: + p = K(i, !0); + break; + default: + p = t.behavior; + } + return p.forEach(function(s, d) { + if (i !== s || p.length === d + 1) return e; + i = e.placement.split('-')[0], n = L(i); + var a = e.offsets.popper, + f = e.offsets.reference, + l = V, + m = 'left' === i && l(a.right) > l(f.left) || 'right' === i && l(a.left) < l(f.right) || 'top' === i && l(a.bottom) > l(f.top) || 'bottom' === i && l(a.top) < l(f.bottom), + h = l(a.left) < l(o.left), + c = l(a.right) > l(o.right), + g = l(a.top) < l(o.top), + u = l(a.bottom) > l(o.bottom), + b = 'left' === i && h || 'right' === i && c || 'top' === i && g || 'bottom' === i && u, + y = -1 !== ['top', 'bottom'].indexOf(i), + w = !!t.flipVariations && (y && 'start' === r && h || y && 'end' === r && c || !y && 'start' === r && g || !y && 'end' === r && u); + (m || b || w) && (e.flipped = !0, (m || b) && (i = p[d + 1]), w && (r = j(r)), e.placement = i + (r ? '-' + r : ''), e.offsets.popper = se({}, e.offsets.popper, S(e.instance.popper, e.offsets.reference, e.placement)), e = N(e.instance.modifiers, e, 'flip')) + }), e + }, + behavior: 'flip', + padding: 5, + boundariesElement: 'viewport' + }, + inner: { + order: 700, + enabled: !1, + fn: function(e) { + var t = e.placement, + o = t.split('-')[0], + i = e.offsets, + n = i.popper, + r = i.reference, + p = -1 !== ['left', 'right'].indexOf(o), + s = -1 === ['top', 'left'].indexOf(o); + return n[p ? 'left' : 'top'] = r[t] - (s ? n[p ? 'width' : 'height'] : 0), e.placement = L(t), e.offsets.popper = c(n), e + } + }, + hide: { + order: 800, + enabled: !0, + fn: function(e) { + if (!F(e.instance.modifiers, 'hide', 'preventOverflow')) return e; + var t = e.offsets.reference, + o = T(e.instance.modifiers, function(e) { + return 'preventOverflow' === e.name + }).boundaries; + if (t.bottom < o.top || t.left > o.right || t.top > o.bottom || t.right < o.left) { + if (!0 === e.hide) return e; + e.hide = !0, e.attributes['x-out-of-boundaries'] = '' + } else { + if (!1 === e.hide) return e; + e.hide = !1, e.attributes['x-out-of-boundaries'] = !1 + } + return e + } + }, + computeStyle: { + order: 850, + enabled: !0, + fn: function(e, t) { + var o = t.x, + i = t.y, + n = e.offsets.popper, + p = T(e.instance.modifiers, function(e) { + return 'applyStyle' === e.name + }).gpuAcceleration; + void 0 !== p && console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'); + var s, d, a = void 0 === p ? t.gpuAcceleration : p, + f = r(e.instance.popper), + l = g(f), + m = { + position: n.position + }, + h = { + left: V(n.left), + top: V(n.top), + bottom: V(n.bottom), + right: V(n.right) + }, + c = 'bottom' === o ? 'top' : 'bottom', + u = 'right' === i ? 'left' : 'right', + b = B('transform'); + if (d = 'bottom' == c ? -l.height + h.bottom : h.top, s = 'right' == u ? -l.width + h.right : h.left, a && b) m[b] = 'translate3d(' + s + 'px, ' + d + 'px, 0)', m[c] = 0, m[u] = 0, m.willChange = 'transform'; + else { + var y = 'bottom' == c ? -1 : 1, + w = 'right' == u ? -1 : 1; + m[c] = d * y, m[u] = s * w, m.willChange = c + ', ' + u + } + var v = { + "x-placement": e.placement + }; + return e.attributes = se({}, v, e.attributes), e.styles = se({}, m, e.styles), e + }, + gpuAcceleration: !0, + x: 'bottom', + y: 'right' + }, + applyStyle: { + order: 900, + enabled: !0, + fn: function(e) { + return U(e.instance.popper, e.styles), Y(e.instance.popper, e.attributes), e.offsets.arrow && U(e.arrowElement, e.offsets.arrow), e + }, + onLoad: function(e, t, o, i, n) { + var r = x(n, t, e), + p = E(o.placement, r, t, e, o.modifiers.flip.boundariesElement, o.modifiers.flip.padding); + return t.setAttribute('x-placement', p), U(t, { + position: 'absolute' + }), o + }, + gpuAcceleration: void 0 + } + } + }, le +}); \ No newline at end of file diff --git a/web/libs/sass/now-ui-kit.scss b/web/libs/sass/now-ui-kit.scss new file mode 100644 index 00000000..99b53881 --- /dev/null +++ b/web/libs/sass/now-ui-kit.scss @@ -0,0 +1,57 @@ +/*! + + ========================================================= + * Now-ui-kit - v1.1.0 + ========================================================= + + * Product Page: http://www.creative-tim.com/product/now-ui-kit + * Copyright 2017 Creative Tim (http://www.creative-tim.com) + * Licensed under MIT (https://github.com/creativetimofficial/now-ui-kit/blob/master/LICENSE.md) + + * Designed by www.invisionapp.com Coded by www.creative-tim.com + + ========================================================= + + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + */ + +@import 'now-ui-kit/variables'; +@import 'now-ui-kit/mixins'; + +// Plugins CSS +@import "now-ui-kit/plugins/plugin-bootstrap-switch"; +@import "now-ui-kit/plugins/plugin-nouislider"; +@import "now-ui-kit/plugins/plugin-datepicker"; + +// Core CSS +@import "now-ui-kit/buttons"; +@import "now-ui-kit/inputs"; +@import "now-ui-kit/checkboxes-radio"; +@import "now-ui-kit/progress"; +@import "now-ui-kit/badges"; +@import "now-ui-kit/pagination"; +@import "now-ui-kit/typography"; +@import "now-ui-kit/misc"; +@import "now-ui-kit/pills"; + +// components +@import "now-ui-kit/social-buttons"; +@import "now-ui-kit/tabs"; +@import "now-ui-kit/navbar"; +@import "now-ui-kit/dropdown"; +@import "now-ui-kit/alerts"; +@import "now-ui-kit/images"; +@import "now-ui-kit/popups"; +@import "now-ui-kit/nucleo-outline"; +@import "now-ui-kit/modals"; +@import "now-ui-kit/carousel"; +@import "now-ui-kit/cards"; +@import "now-ui-kit/footers"; + +// example pages and sections +@import "now-ui-kit/example-pages"; +@import "now-ui-kit/sections"; + + +@import "now-ui-kit/responsive"; diff --git a/web/libs/sass/now-ui-kit/_alerts.scss b/web/libs/sass/now-ui-kit/_alerts.scss new file mode 100644 index 00000000..9fcf7eb5 --- /dev/null +++ b/web/libs/sass/now-ui-kit/_alerts.scss @@ -0,0 +1,54 @@ +// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten. +.alert{ + border: 0; + border-radius: 0; + color: $white-color; + padding-top: .9rem; + padding-bottom: .9rem; + position: relative; + + &.alert-success{ + background-color: $success-color-alert; + } + + &.alert-danger{ + background-color: $danger-color-alert; + } + + &.alert-warning{ + background-color: $warning-color-alert; + } + + &.alert-info{ + background-color: $info-color-alert; + } + + &.alert-primary{ + background-color: $primary-color-alert; + } + + .alert-icon{ + display: block; + float: left; + margin-right: 15px; + margin-top: -1px; + } + + strong{ + text-transform: uppercase; + font-size: 12px; + } + + i.fa, + i.now-ui-icons{ + font-size: 20px; + } + + .close{ + color: $white-color; + opacity: .9; + text-shadow: none; + line-height: 0; + outline: 0; + } +} diff --git a/web/libs/sass/now-ui-kit/_badges.scss b/web/libs/sass/now-ui-kit/_badges.scss new file mode 100644 index 00000000..b57a08c3 --- /dev/null +++ b/web/libs/sass/now-ui-kit/_badges.scss @@ -0,0 +1,39 @@ +/* badges */ +.badge{ + border-radius: 8px; + padding: 4px 8px; + text-transform: uppercase; + font-size: $font-size-mini; + line-height: 12px; + background-color: $transparent-bg; + border: $border; + margin-bottom: 5px; + border-radius: $border-radius-extreme; +} +.badge-icon{ + padding: 0.4em 0.55em; + i{ + font-size: 0.8em; + } +} +.badge-default{ + @include badge-color($default-color); +} +.badge-primary{ + @include badge-color($primary-color); +} +.badge-info{ + @include badge-color($info-color); +} +.badge-success{ + @include badge-color($success-color); +} +.badge-warning{ + @include badge-color($warning-color); +} +.badge-danger{ + @include badge-color($danger-color); +} +.badge-neutral{ + @include badge-color($white-color); +} diff --git a/web/libs/sass/now-ui-kit/_buttons.scss b/web/libs/sass/now-ui-kit/_buttons.scss new file mode 100644 index 00000000..d5948aa8 --- /dev/null +++ b/web/libs/sass/now-ui-kit/_buttons.scss @@ -0,0 +1,158 @@ +.btn, +.navbar .navbar-nav > a.btn{ + border-width: $border-thick; + font-weight: $font-weight-normal; + font-size: $font-size-small; + line-height: $line-height; + margin: 5px 1px; + border: none; + border-radius: $border-radius-small; + padding: $padding-btn-vertical $padding-btn-horizontal; + cursor: pointer; + + @include btn-styles($default-color, $default-states-color); + + &:hover, + &:focus{ + @include opacity(1); + outline: 0 !important; + } + &:active, + &.active, + .open > &.dropdown-toggle { + @include box-shadow(none); + outline: 0 !important; + } + + &.btn-icon { + // see above for color variations + height: $btn-icon-size-regular; + min-width: $btn-icon-size-regular; + width: $btn-icon-size-regular; + padding: 0; + font-size: $btn-icon-font-size-regular; + overflow: hidden; + position: relative; + line-height: normal; + + &.btn-simple{ + padding: 0; + } + + &.btn-sm{ + height: $btn-icon-size-small; + min-width: $btn-icon-size-small; + width: $btn-icon-size-small; + + i.fa, + i.now-ui-icons{ + font-size: $btn-icon-font-size-small; + } + } + + &.btn-lg{ + height: $btn-icon-size-lg; + min-width: $btn-icon-size-lg; + width: $btn-icon-size-lg; + + i.now-ui-icons, + i.fa{ + font-size: $btn-icon-font-size-lg; + } + } + + &:not(.btn-footer) i.now-ui-icons, + &:not(.btn-footer) i.fa{ + position: absolute; + top: 50%; + left: 50%; + transform: translate(-12px, -12px); + line-height: 1.5626rem; + width: 25px; + } + + } + + &:not(.btn-icon) .now-ui-icons{ + position: relative; + top: 1px; + } +} + +// Apply the mixin to the buttons +// .btn-default { @include btn-styles($default-color, $default-states-color); } +.btn-primary { @include btn-styles($primary-color, $primary-states-color); } +.btn-success { @include btn-styles($success-color, $success-states-color); } +.btn-info { @include btn-styles($info-color, $info-states-color); } +.btn-warning { @include btn-styles($warning-color, $warning-states-color); } +.btn-danger { @include btn-styles($danger-color, $danger-states-color); } +.btn-neutral { @include btn-styles($white-color, $white-color); } + +.btn{ + &:disabled, + &[disabled], + &.disabled{ + @include opacity(.5); + } +} +.btn-round{ + border-width: $border-thin; + border-radius: $btn-round-radius !important; + padding: $padding-btn-vertical $padding-round-horizontal; + + &.btn-simple{ + padding: $padding-btn-vertical - 1 $padding-round-horizontal - 1; + } +} +.btn-simple{ + border: $border; + border-color: $default-color; + padding: $padding-btn-vertical - 1 $padding-round-horizontal - 1; + background-color: $transparent-bg; +} + +.btn-simple, +.btn-link{ + &.disabled, + &:disabled, + &[disabled], + fieldset[disabled] & { + &, + &:hover, + &:focus, + &.focus, + &:active, + &.active { + background-color: $transparent-bg; + } + } +} + +.btn-lg{ + @include btn-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $border-radius-large); +} +.btn-sm{ + @include btn-size($padding-small-vertical, $padding-small-horizontal, $font-size-base, $border-radius-small); +} + +.btn-link{ + border: $none; + padding: $padding-base-vertical $padding-base-horizontal; + background-color: $transparent-bg; +} + +.btn-wd { + min-width: 140px; +} +.btn-group.select{ + width: 100%; +} +.btn-group.select .btn{ + text-align: left; +} +.btn-group.select .caret{ + position: absolute; + top: 50%; + margin-top: -1px; + right: 8px; +} diff --git a/web/libs/sass/now-ui-kit/_cards.scss b/web/libs/sass/now-ui-kit/_cards.scss new file mode 100644 index 00000000..41023108 --- /dev/null +++ b/web/libs/sass/now-ui-kit/_cards.scss @@ -0,0 +1,98 @@ +.card{ + border: 0; + border-radius: $border-radius-small; + display: inline-block; + position: relative; + overflow: hidden; + width: 100%; + margin-bottom: 20px; + box-shadow: 0px 5px 25px 0px rgba(0, 0, 0, 0.2); + + .card-body{ + min-height: 190px; + } + + &[data-background-color="orange"]{ + background-color: $primary-color; + } + + &[data-background-color="red"]{ + background-color: $danger-color; + } + + &[data-background-color="yellow"]{ + background-color: $warning-color; + } + + &[data-background-color="blue"]{ + background-color: $info-color; + } + + &[data-background-color="green"]{ + background-color: $success-color; + } +} + +.card-signup{ + max-width: 350px; + margin: 0 auto; + + .header{ + margin-left: 20px; + margin-right: 20px; + padding: 30px 0; + } + .text-divider{ + margin-top: 30px; + margin-bottom: 0px; + text-align: center; + } + .card-body{ + padding-top: 0px; + padding-bottom: 0px; + min-height: auto; + } + + .checkbox{ + margin-top: 20px; + + label{ + margin-left: 17px; + } + .checkbox-material{ + padding-right: 12px; + } + } + + .social-line{ + margin-top: 20px; + text-align: center; + + .btn.btn-icon , + .btn.btn-icon .btn-icon -mini{ + margin-left: 5px; + margin-right: 5px; + box-shadow: 0px 5px 50px 0px rgba(0, 0, 0, 0.2); + } + } + + .footer{ + margin-bottom: 10px; + margin-top: 24px; + } +} + +.card-plain{ + background: transparent; + box-shadow: none; + + .header{ + margin-left: 0; + margin-right: 0; + } + + .content{ + padding-left: 0; + padding-right: 0; + } +} diff --git a/web/libs/sass/now-ui-kit/_carousel.scss b/web/libs/sass/now-ui-kit/_carousel.scss new file mode 100644 index 00000000..155d0ec6 --- /dev/null +++ b/web/libs/sass/now-ui-kit/_carousel.scss @@ -0,0 +1,15 @@ +// display flex was causing errors +.carousel-item-next, +.carousel-item-prev, +.carousel-item.active{ + display: block; +} + +.carousel{ + .carousel-inner{ + box-shadow: $box-shadow-raised; + } + .now-ui-icons{ + font-size: 2em; + } +} diff --git a/web/libs/sass/now-ui-kit/_checkboxes-radio.scss b/web/libs/sass/now-ui-kit/_checkboxes-radio.scss new file mode 100644 index 00000000..9576ce06 --- /dev/null +++ b/web/libs/sass/now-ui-kit/_checkboxes-radio.scss @@ -0,0 +1,178 @@ +.checkbox, +.radio { + margin-bottom: 12px; +} + +.checkbox label, +.radio label { + display: inline-block; + position: relative; + cursor: pointer; + padding-left: 35px; + line-height: 26px; + margin-bottom: 0; +} +.radio label{ + padding-left: 28px; +} + +.checkbox label::before, +.checkbox label::after{ + content: " "; + display: inline-block; + position: absolute; + width: 26px; + height: 26px; + left: 0; + cursor: pointer; + border-radius: 3px; + top: 0; + background-color: transparent; + border: 1px solid $light-gray; + -webkit-transition: opacity 0.3s linear; + -moz-transition: opacity 0.3s linear; + -o-transition: opacity 0.3s linear; + -ms-transition: opacity 0.3s linear; + transition: opacity 0.3s linear; +} + + .checkbox label::after{ + font-family: 'Nucleo Outline'; + content: "\ea22"; + top: 0px; + text-align: center; + font-size: 14px; + opacity: 0; + color: $dark-background; + border: 0; + background-color: inherit; +} + +.checkbox input[type="checkbox"], +.radio input[type="radio"]{ + opacity: 0; + position: absolute; + visibility: hidden; +} +.checkbox input[type="checkbox"]:checked + label::after{ + opacity: 1; +} + +.checkbox input[type="checkbox"]:disabled + label, +.radio input[type="radio"]:disabled + label { + color: $dark-gray; + opacity: .5; +} + +.checkbox input[type="checkbox"]:disabled + label::before, +.checkbox input[type="checkbox"]:disabled + label::after{ + cursor: not-allowed; +} + +.checkbox input[type="checkbox"]:disabled + label, +.radio input[type="radio"]:disabled + label{ + cursor: not-allowed; +} + +.checkbox.checkbox-circle label::before { + border-radius: 50%; +} + +.checkbox.checkbox-inline { + margin-top: 0; +} + +.checkbox-primary input[type="checkbox"]:checked + label::before { + background-color: #428bca; + border-color: #428bca; +} + +.checkbox-primary input[type="checkbox"]:checked + label::after { + color: #fff; +} + +.checkbox-danger input[type="checkbox"]:checked + label::before { + background-color: #d9534f; + border-color: #d9534f; +} + +.checkbox-danger input[type="checkbox"]:checked + label::after { + color: #fff; +} + +.checkbox-info input[type="checkbox"]:checked + label::before { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.checkbox-info input[type="checkbox"]:checked + label::after { + color: #fff; +} + +.checkbox-warning input[type="checkbox"]:checked + label::before { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.checkbox-warning input[type="checkbox"]:checked + label::after { + color: #fff; +} + +.checkbox-success input[type="checkbox"]:checked + label::before { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.checkbox-success input[type="checkbox"]:checked + label::after { + color: #fff; +} + +.radio label::before, +.radio label::after{ + content: " "; + width: 20px; + height: 20px; + border-radius: 50%; + border: 1px solid $light-gray; + display: inline-block; + position: absolute; + left: 3px; + top: 3px; + padding: 1px; + -webkit-transition: opacity 0.3s linear; + -moz-transition: opacity 0.3s linear; + -o-transition: opacity 0.3s linear; + -ms-transition: opacity 0.3s linear; + transition: opacity 0.3s linear; +} + +.radio input[type="radio"] + label:after, +.radio input[type="radio"] { + opacity: 0; +} +.radio input[type="radio"]:checked + label::after { + width: 4px; + height: 4px; + background-color: $dark-background; + border-color: $dark-background; + top: 11px; + left: 11px; + opacity: 1; +} + +.radio input[type="radio"]:checked + label::after{ + opacity: 1; +} + +.radio input[type="radio"]:disabled + label { + color: $dark-gray; +} + +.radio input[type="radio"]:disabled + label::before, +.radio input[type="radio"]:disabled + label::after { + color: $dark-gray; +} + +.radio.radio-inline { + margin-top: 0; +} diff --git a/web/libs/sass/now-ui-kit/_dropdown.scss b/web/libs/sass/now-ui-kit/_dropdown.scss new file mode 100644 index 00000000..01d9d80a --- /dev/null +++ b/web/libs/sass/now-ui-kit/_dropdown.scss @@ -0,0 +1,106 @@ +.dropdown-menu{ + border: 0; + box-shadow: 0px 10px 50px 0px rgba(0, 0, 0, 0.2); + border-radius: $border-radius-extra-small; + @include transition($fast-transition-time, $transition-linear); + font-size: $font-size-base; + + &.dropdown-menu-right{ + &:before{ + left:auto; + right: 10px; + } + } + + &:before{ + display: inline-block; + position: absolute; + width: 0; + height: 0; + vertical-align: middle; + content: ""; + top: -5px; + left: 10px; + right: auto; + color: $white-color; + border-bottom: .4em solid; + border-right: .4em solid transparent; + border-left: .4em solid transparent; + } + + .dropdown-item{ + font-size: $font-size-small; + padding-top: $padding-base-vertical; + padding-bottom: $padding-base-vertical; + @include transition($fast-transition-time, $transition-linear); + + &:hover, + &:focus{ + background-color: $opacity-gray-3; + } + } + + .dropdown-divider{ + background-color: $opacity-gray-5; + } + + .dropdown-header:not([href]):not([tabindex]){ + color: $default-color-opacity; + font-size: $font-size-mini; + text-transform: uppercase; + font-weight: $font-weight-bold; + } + + &.dropdown-primary{ + @include dropdown-colors(darken($primary-color, 3%),$opacity-8,$white-color, $opacity-2); + } + + &.dropdown-info{ + @include dropdown-colors(darken($info-color, 3%),$opacity-8,$white-color, $opacity-2); + } + + &.dropdown-danger{ + @include dropdown-colors(darken($danger-color, 3%),$opacity-8,$white-color, $opacity-2); + } + + &.dropdown-success{ + @include dropdown-colors(darken($success-color, 3%),$opacity-8,$white-color, $opacity-2); + } + + &.dropdown-warning{ + @include dropdown-colors(darken($warning-color, 3%),$opacity-8,$white-color, $opacity-2); + } + + .dropdown &{ + @include transform-translate-y(-25px); + visibility: hidden; + display: block; + @include opacity(0); + } + + .dropdown.show &, + &.open{ + @include opacity(1); + visibility: visible; + @include transform-translate-y(0px); + } + + .navbar .dropdown.show &{ + @include transform-translate-y(7px); + } +} + +.button-dropdown{ + padding-right: $padding-base-horizontal; + cursor: pointer; + + & .dropdown-toggle{ + padding-top: $padding-base-vertical; + padding-bottom: $padding-base-vertical; + display: block; + + &:after{ + display: none; + } + } +} diff --git a/web/libs/sass/now-ui-kit/_example-pages.scss b/web/libs/sass/now-ui-kit/_example-pages.scss new file mode 100644 index 00000000..274fb93c --- /dev/null +++ b/web/libs/sass/now-ui-kit/_example-pages.scss @@ -0,0 +1,256 @@ +// style for the landing page +.index-page{ + .page-header{ + height: 125vh; + + .container{ + > .content-center{ + top: 37%; + } + } + + .category-absolute{ + position: absolute; + top: 100vh; + margin-top: -60px; + padding: 0 15px; + width: 100%; + color: rgba(255,255,255,.5); + } + } +} +.landing-page{ + + .header{ + height: 100vh; + position: relative; + + .container{ + padding-top: 26vh; + color: #FFFFFF; + z-index: 2; + position: relative; + } + + .share{ + margin-top: 150px; + } + h1{ + font-weight: 600; + } + .title{ + color: $white-color; + } + } + + .section-team{ + .team .team-player img{ + max-width: 100px; + } + + .team-player{ + margin-bottom: 15px; + } + } + + .section-contact-us{ + .title{ + margin-bottom: 15px; + } + + .description{ + margin-bottom: 30px; + } + + .input-group, + .send-button, + .textarea-container{ + padding: 0 40px; + } + + .textarea-container{ + margin: 40px 0; + } + + a.btn{ + margin-top: 35px; + } + } +} + +// style for the profile page +.profile-page{ + + .page-header{ + min-height: 550px; + } + + .profile-container{ + color: #FFFFFF; + } + .photo-container{ + width: 123px; + height: 123px; + border-radius: 50%; + overflow: hidden; + margin: 0 auto; + box-shadow: 0px 10px 25px 0px rgba(0, 0, 0, 0.3); + } + + .title{ + text-align: center; + margin-top: 30px; + } + + .description, + .category{ + text-align: center; + } + + h5.description{ + max-width: 700px; + margin: 20px auto 75px; + } + + .nav-align-center{ + margin-top: 30px; + } + + .content{ + max-width: 450px; + margin: 0 auto; + + .social-description{ + display: inline-block; + max-width: 150px; + width: 145px; + text-align: center; + margin: 15px 0 0px; + + h2{ + margin-bottom: 15px; + } + } + } + + .button-container{ + text-align: center; + margin-top: -106px; + } + + .collections{ + img{ + margin-bottom: 30px; + } + } + + .gallery{ + margin-top: 45px; + padding-bottom: 50px; + } +} + +.section-full-page{ + + &:after, + &:before{ + display: block; + content: ""; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 2; + } + + &:before{ + background-color: rgba(0,0,0,.5); + } + + &[filter-color="purple"], + &[filter-color="primary"]{ + &:after{ + @include linear-gradient(rgba($light-gray,.26), rgba($primary-color,.95)); + + } + + } + + &[data-image]:after{ + opacity: .5; + } + + > .content, + > .footer{ + position: relative; + z-index: 4; + } + + > .content{ + min-height: calc(100vh - 80px); + } + + .full-page-background{ + position: absolute; + z-index: 1; + height: 100%; + width: 100%; + display: block; + top: 0; + left: 0; + background-size: cover; + background-position: center center; + + } + + .footer nav > ul a:not(.btn), + .footer, + .footer .copyright a{ + color: $white-color; + } + +} + +.login-page{ + + .card-login{ + border-radius: $border-radius-large; + padding-bottom: $padding-base-horizontal; + max-width: 320px; + + .btn-wd{ + min-width: 180px; + } + + .logo-container{ + width: 65px; + margin: 0 auto; + margin-bottom: 55px; + + img{ + width: 100%; + } + } + + .input-group:last-child{ + margin-bottom: 40px; + } + + &.card-plain{ + @include input-coloured-bg($opacity-5, $white-color, $white-color, $transparent-bg, $opacity-1, $opacity-2); + + .input-group-addon, + .form-group.form-group-no-border .input-group-addon, + .input-group.form-group-no-border .input-group-addon{ + color: $opacity-8; + } + } + } + + .link{ + font-size: 10px; + color: $white-color; + text-decoration: none; + } +} diff --git a/web/libs/sass/now-ui-kit/_footers.scss b/web/libs/sass/now-ui-kit/_footers.scss new file mode 100644 index 00000000..a87d8aeb --- /dev/null +++ b/web/libs/sass/now-ui-kit/_footers.scss @@ -0,0 +1,44 @@ +.footer{ + padding: 24px 0; + + &.footer-default{ + background-color: #f2f2f2; + } + + nav{ + display: inline-block; + float: left; + } + + ul{ + margin-bottom: 0; + padding: 0; + list-style: none; + + li{ + display: inline-block; + + a{ + color: inherit; + padding: $padding-base-vertical; + font-size: $font-size-small; + text-transform: uppercase; + text-decoration: none; + + &:hover{ + text-decoration: none; + } + } + } + } + + .copyright{ + font-size: $font-size-small; + } + + &:after{ + display: table; + clear: both; + content: " "; + } +} diff --git a/web/libs/sass/now-ui-kit/_images.scss b/web/libs/sass/now-ui-kit/_images.scss new file mode 100644 index 00000000..d1bb4aaf --- /dev/null +++ b/web/libs/sass/now-ui-kit/_images.scss @@ -0,0 +1,7 @@ +img{ + max-width: 100%; + border-radius: 1px; +} +.img-raised{ + box-shadow: $box-shadow-raised; +} diff --git a/web/libs/sass/now-ui-kit/_inputs.scss b/web/libs/sass/now-ui-kit/_inputs.scss new file mode 100644 index 00000000..ae7c6c5a --- /dev/null +++ b/web/libs/sass/now-ui-kit/_inputs.scss @@ -0,0 +1,264 @@ +@include form-control-placeholder($medium-gray, 1); + +.form-control { + background-color: $transparent-bg; + border: 1px solid $light-gray; + border-radius: $btn-round-radius; + color: $black-color; + line-height: normal; + font-size: $font-size-small; + @include transition-input-focus-color(); + @include box-shadow(none); + + .has-success &{ + border-color: $light-gray; + } + + &:focus{ + border: 1px solid $primary-color; + @include box-shadow(none); + outline: 0 !important; + color: $black-color; + + & + .input-group-addon, + & ~ .input-group-addon{ + border: 1px solid $primary-color; + border-left: none; + background-color: $transparent-bg; + } + } + + .has-success &, + .has-error &, + .has-success &:focus, + .has-error &:focus{ + @include box-shadow(none); + } + + .has-success &:focus{ + border-color: lighten($success-color, 5%); + } + + + .has-danger &, + .has-success &{ + &.form-control-success, + &.form-control-danger{ + background-image: none; + } + } + + .has-danger &{ + border-color: lighten($danger-color, 30%); + color: $danger-color; + background-color: rgba(222,222,222, .1); + + &:focus{ + background-color: $white-color; + } + } + + & + .form-control-feedback{ + border-radius: $border-radius-large; + font-size: $font-size-base; + margin-top: 0; + position: absolute; + left: 18px; + bottom: -20px; + vertical-align: middle; + } + + .open &{ + border-radius: $border-radius-large $border-radius-large 0 0; + border-bottom-color: transparent; + } + + & + .input-group-addon{ + background-color: $white-bg; + } +} + +.has-success, +.has-danger{ + &:after{ + font-family: 'Nucleo Outline'; + content: "\ea22"; + display: inline-block; + position: absolute; + right: 15px; + bottom: 10px; + color: $success-color; + font-size: 11px; + } + + &.input-lg{ + &:after{ + font-size: 13px; + top: 13px; + } + } +} + +.has-danger{ + &:after{ + content: "\ea53"; + color: $danger-color; + } +} + +@include input-lg-padding($padding-large-vertical, $padding-input-horizontal); +@include input-base-padding($padding-input-vertical, $padding-input-horizontal); + +.form-group.form-group-no-border, +.input-group.form-group-no-border{ + .form-control, + .form-control + .input-group-addon{ + background-color: $opacity-gray-3; + border: medium none; + &:focus, + &:active, + &:active{ + border: medium none; + background-color: $opacity-gray-5; + } + } + + .form-control{ + &:focus{ + & + .input-group-addon{ + background-color: $opacity-gray-5; + } + } + } + + .input-group-addon{ + background-color: $opacity-gray-3; + border: none; + } +} + +.has-error{ + .form-control-feedback, .control-label{ + color: $danger-color; + } +} +.has-success{ + .form-control-feedback, .control-label{ + color: $success-color; + } +} + +.input-group-addon { + background-color: $white-bg; + border: 1px solid $light-gray; + border-radius: $btn-round-radius; + color: $dark-background; + padding: $padding-base-vertical - 1 0 $padding-base-vertical - 1 $padding-base-horizontal - 1; + + @include transition-input-focus-color(); + + .has-success &, + .has-danger &{ + background-color: $white-color; + } + .has-danger .form-control:focus + &{ + color: $danger-color; + } + .has-success .form-control:focus + &{ + color: $success-color; + } + + & + .form-control, + & ~ .form-control{ + @include input-size($padding-base-vertical - 1, $padding-base-horizontal); + padding-left: 18px; + } + + i{ + width: 17px; + } +} + +.input-group-focus{ + .input-group-addon{ + background-color: $white-bg; + border-color: $primary-color; + } + + &.form-group-no-border{ + .input-group-addon{ + background-color: $opacity-gray-5; + } + } +} + +.input-group, +.form-group{ + margin-bottom: 10px; +} +.input-group[disabled]{ + .input-group-addon{ + background-color: $light-gray; + } +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { + border-right: 0 none; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child) { + border-left: 0 none; +} +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + background-color: $light-gray; + color: $default-color; + cursor: not-allowed; +} + +.input-group-btn .btn{ + border-width: $border-thin; + padding: $padding-btn-vertical $padding-base-horizontal; +} +.input-group-btn .btn-default:not(.btn-fill){ + border-color: $medium-gray; +} + +.input-group-btn:last-child > .btn{ + margin-left: 0; +} +textarea.form-control{ + max-width: 100%; + padding: 10px 10px 0 0; + resize: none; + border: none; + border-bottom: 1px solid $light-gray; + border-radius: 0; + line-height: 2; + + &:focus, + &:active{ + border-left: none; + border-top: none; + border-right: none; + } +} + +.has-success, +.has-danger{ + + &.form-group .form-control, + &.form-group.form-group-no-border .form-control{ + padding-right: $padding-input-horizontal + 21; + } +} + +.form-group{ + position:relative; +} +.form-group.has-error, .form-group.has-danger{ + margin-bottom: 20px; +} diff --git a/web/libs/sass/now-ui-kit/_misc.scss b/web/libs/sass/now-ui-kit/_misc.scss new file mode 100644 index 00000000..021f35a2 --- /dev/null +++ b/web/libs/sass/now-ui-kit/_misc.scss @@ -0,0 +1,63 @@ +body{ + color: $black-color; + font-size: $font-size-base; + font-family: $sans-serif-family; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; +} + +.main{ + position: relative; + background: $white-color; +} +/* Animations */ +.nav-pills .nav-link, +.nav-item .nav-link, +.navbar, +.nav-tabs .nav-link{ + @include transition($general-transition-time, $transition-ease); +} + +//transition for dropdown caret +.dropdown-toggle:after, +.bootstrap-switch-label:before{ + @include transition($fast-transition-time, $transition-ease); +} + +.dropdown-toggle[aria-expanded="true"]:after{ + @include rotate-180(); +} + +.button-bar{ + display: block; + position: relative; + width: 22px; + height: 1px; + border-radius: 1px; + background: $white-bg; + + & + .button-bar{ + margin-top: 7px; + } + + &:nth-child(2){ + width: 17px; + } +} + +.open{ + @include transform-translate-y(0); + @include opacity(1); + visibility: visible; +} + +.separator{ + height: 2px; + width: 44px; + background-color: $default-color; + margin: 20px auto; + + &.separator-primary{ + background-color: $primary-color; + } +} diff --git a/web/libs/sass/now-ui-kit/_mixins.scss b/web/libs/sass/now-ui-kit/_mixins.scss new file mode 100644 index 00000000..4da58ad9 --- /dev/null +++ b/web/libs/sass/now-ui-kit/_mixins.scss @@ -0,0 +1,14 @@ +//Utilities +@import "mixins/transparency"; + +//Components +@import "mixins/buttons"; +@import "mixins/vendor-prefixes"; +@import "mixins/inputs"; +@import "mixins/dropdown"; +@import "mixins/badges"; +@import "mixins/navbar"; +@import "mixins/popovers"; +@import "mixins/modals"; +@import "mixins/pages"; +@import "mixins/datepicker"; diff --git a/web/libs/sass/now-ui-kit/_modals.scss b/web/libs/sass/now-ui-kit/_modals.scss new file mode 100644 index 00000000..0ccbce14 --- /dev/null +++ b/web/libs/sass/now-ui-kit/_modals.scss @@ -0,0 +1,173 @@ +// +// Modals +// Now Ui Kit Design element Dialogs +// -------------------------------------------------- +.modal-content { + + border-radius: $border-radius-small; + border: none; + box-shadow: 0px 10px 50px 0px rgba(0, 0, 0, 0.5); + // Modal header + // Top section of the modal w/ title and dismiss + .modal-header { + border-bottom: none; + padding-top: 24px; + padding-right: 24px; + padding-bottom: 0; + padding-left: 24px; + + & button{ + position: absolute; + right: 27px; + top: 30px; + outline: 0; + } + .title{ + margin-top: 5px; + margin-bottom: 0; + } + } + // Modal body + // Where all modal content resides (sibling of .modal-header and .modal-footer) + .modal-body { + padding-top: 24px; + padding-right: 24px; + padding-bottom: 16px; + padding-left: 24px; + line-height: 1.9; + } + // Footer (for actions) + .modal-footer { + border-top: none; + padding-right: 24px; + padding-bottom: 16px; + padding-left: 24px; + -webkit-justify-content: space-between; /* Safari 6.1+ */ + justify-content: space-between; + + button { + margin: 0; + padding-left: 16px; + padding-right: 16px; + width: auto; + &.pull-left { + padding-left: 5px; + padding-right: 5px; + position: relative; + left: -5px; + } + } + + } + .modal-body + .modal-footer { + padding-top: 0; + } +} +.modal-backdrop { + background: rgba(0,0,0,0.3); +} + +.modal{ + + &.modal-mini{ + p{ + text-align: center; + } + + .modal-dialog{ + max-width: 255px; + margin: 0 auto; + } + + .modal-profile{ + width: 70px; + height: 70px; + background-color: $white-color; + border-radius: 50%; + text-align: center; + line-height: 5.9; + box-shadow: 0px 5px 50px 0px rgba(0, 0, 0, 0.3); + + i{ + color: $primary-color; + font-size: 21px; + } + + &[class*="modal-profile-"]{ + i{ + color: $white-color; + } + } + + &.modal-profile-primary{ + background-color: $primary-color; + } + + &.modal-profile-danger{ + background-color: $danger-color; + } + + &.modal-profile-warning{ + background-color: $warning-color; + } + + &.modal-profile-success{ + background-color: $success-color; + } + + &.modal-profile-info{ + background-color: $info-color; + } + } + + .modal-footer{ + button{ + text-transform: uppercase; + + &:first-child{ + opacity: .5; + } + } + } + } + + &.modal-default{ + @include modal-colors($white-color, $black-color); + } + + &.modal-primary{ + @include modal-colors($primary-color, $white-color); + } + + &.modal-danger{ + @include modal-colors($danger-color, $white-color); + } + + &.modal-warning{ + @include modal-colors($warning-color, $white-color); + } + + &.modal-success{ + @include modal-colors($success-color, $white-color); + } + + &.modal-info{ + @include modal-colors($info-color, $white-color); + } + + &.show.modal-mini .modal-dialog{ + -webkit-transform: translate(0,30%); + -o-transform: translate(0,30%); + transform: translate(0,30%); + } + + .modal-header .close{ + color: $danger-color; + text-shadow: none; + + &:hover, + &:focus{ + opacity: 1; + } + } +} diff --git a/web/libs/sass/now-ui-kit/_navbar.scss b/web/libs/sass/now-ui-kit/_navbar.scss new file mode 100644 index 00000000..427b1e34 --- /dev/null +++ b/web/libs/sass/now-ui-kit/_navbar.scss @@ -0,0 +1,193 @@ +.navbar{ + padding-top: $navbar-padding-base; + padding-bottom: $navbar-padding-base; + min-height: 53px; + margin-bottom: 20px; + box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.15); + + a{ + vertical-align: middle; + + &:not(.btn):not(.dropdown-item){ + color: $white-color; + } + } + + p{ + display: inline-block; + margin: 0; + line-height: 21px; + } + + .navbar-nav{ + &.navbar-logo{ + position: absolute; + left: 0; + right: 0; + margin: 0 auto; + width: 49px; + top: -4px; + } + + .nav-link.btn{ + padding: $padding-btn-vertical $padding-btn-horizontal; + + &.btn-lg{ + padding: $padding-large-vertical $padding-large-horizontal; + } + + &.btn-sm{ + padding: $padding-small-vertical $padding-small-horizontal; + } + } + + .nav-link:not(.btn){ + text-transform: uppercase; + font-size: $font-size-mini; + padding: $padding-base-vertical $padding-base-horizontal; + line-height: $line-height-nav-link; + + i.fa + p, + i.now-ui-icons + p{ + margin-left: 5px; + } + + i.fa, + i.now-ui-icons{ + font-size: 18px; + position: relative; + top: 2px; + text-align: center; + width: 21px; + } + + i.now-ui-icons{ + top: 4px; + font-size: 16px; + } + + &.profile-photo{ + .profile-photo-small{ + width: 27px; + height: 27px; + } + } + + &.disabled{ + opacity: .5; + color: $white-color; + } + } + + .nav-item.active .nav-link:not(.btn), + .nav-item .nav-link:not(.btn):focus, + .nav-item .nav-link:not(.btn):hover, + .nav-item .nav-link:not(.btn):active{ + background-color: $opacity-2; + border-radius: $border-radius-small; + } + } + + .logo-container{ + width: 27px; + height: 27px; + overflow: hidden; + margin: 0 auto; + border-radius: 50%; + border: 1px solid transparent; + } + + .navbar-brand{ + text-transform: uppercase; + font-size: $font-size-small; + padding-top: $padding-base-vertical; + padding-bottom: $padding-base-vertical; + line-height: $line-height-nav-link; + } + + .navbar-toggler{ + width: 37px; + height: 27px; + outline: 0; + cursor: pointer; + + &.navbar-toggler-left{ + position: relative; + left: 0; + padding-left: 0; + } + + &:hover{ + & .navbar-toggler-bar.bar2{ + width: 22px; + } + } + } + + .button-dropdown{ + .navbar-toggler-bar:nth-child(2){ + width: 17px; + } + } + + &.navbar-transparent{ + background-color: $transparent-bg !important; + box-shadow: none; + color: $white-color; + padding-top: 20px; + } + + &.bg-white:not(.navbar-transparent){ + a:not(.dropdown-item){ + color: $default-color; + + &.disabled{ + opacity: .5; + color: $default-color; + } + } + + .button-bar{ + background: $default-color; + } + + .nav-item.active .nav-link:not(.btn), + .nav-item .nav-link:not(.btn):focus, + .nav-item .nav-link:not(.btn):hover, + .nav-item .nav-link:not(.btn):active{ + background-color: $opacity-gray-3; + } + + .logo-container{ + border: 1px solid $default-color; + } + } +} + +.bg-default{ + background-color: $default-color !important; +} + +.bg-primary{ + background-color: $primary-color !important; +} + +.bg-info{ + background-color: $info-color !important; +} + +.bg-success{ + background-color: $success-color !important; +} + +.bg-danger{ + background-color: $danger-color !important; +} + +.bg-warning{ + background-color: $warning-color !important; +} + +.bg-white{ + background-color: $white-color !important; +} diff --git a/web/libs/sass/now-ui-kit/_nucleo-outline.scss b/web/libs/sass/now-ui-kit/_nucleo-outline.scss new file mode 100644 index 00000000..5d44c708 --- /dev/null +++ b/web/libs/sass/now-ui-kit/_nucleo-outline.scss @@ -0,0 +1,533 @@ +/* -------------------------------- + +Nucleo Outline Web Font - nucleoapp.com/ +License - nucleoapp.com/license/ +Created using IcoMoon - icomoon.io + +-------------------------------- */ + +@font-face { + font-family: 'Nucleo Outline'; + src: url('../fonts/nucleo-outline.eot'); + src: url('../fonts/nucleo-outline.eot') format('embedded-opentype'), + url('../fonts/nucleo-outline.woff2') format('woff2'), + url('../fonts/nucleo-outline.woff') format('woff'), + url('../fonts/nucleo-outline.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +/*------------------------ + base class definition +-------------------------*/ + +.now-ui-icons { + display: inline-block; + font: normal normal normal 14px/1 'Nucleo Outline'; + font-size: inherit; + speak: none; + text-transform: none; + /* Better Font Rendering */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/*------------------------ + change icon size +-------------------------*/ + +/*---------------------------------- + add a square/circle background +-----------------------------------*/ + +.now-ui-icons.circle { + padding: 0.33333333em; + vertical-align: -16%; + background-color: #eee; +} + +.now-ui-icons.circle { + border-radius: 50%; +} + +/*------------------------ + list icons +-------------------------*/ + +.nc-icon-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} + +.nc-icon-ul > li { + position: relative; +} + +.nc-icon-ul > li > .now-ui-icons { + position: absolute; + left: -1.57142857em; + top: 0.14285714em; + text-align: center; +} + +.nc-icon-ul > li > .now-ui-icons.circle { + top: -0.19047619em; + left: -1.9047619em; +} + +/*------------------------ + spinning icons +-------------------------*/ + +.now-ui-icons.spin { + -webkit-animation: nc-icon-spin 2s infinite linear; + -moz-animation: nc-icon-spin 2s infinite linear; + animation: nc-icon-spin 2s infinite linear; +} + +@-webkit-keyframes nc-icon-spin { + 0% { + -webkit-transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(360deg); + } +} + +@-moz-keyframes nc-icon-spin { + 0% { + -moz-transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(360deg); + } +} + +@keyframes nc-icon-spin { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +/*------------------------ + rotated/flipped icons +-------------------------*/ + +/*------------------------ + font icons +-------------------------*/ + +.now-ui-icons.ui-1_check:before{ + content: "\ea22"; +} + +.now-ui-icons.ui-1_email-85:before { + content: "\ea2a"; +} + +.now-ui-icons.arrows-1_cloud-download-93:before { + content: "\ea21"; +} + +.now-ui-icons.arrows-1_cloud-upload-94:before { + content: "\ea24"; +} + +.now-ui-icons.arrows-1_minimal-down:before { + content: "\ea39"; +} + +.now-ui-icons.arrows-1_minimal-left:before { + content: "\ea3a"; +} + +.now-ui-icons.arrows-1_minimal-right:before { + content: "\ea3b"; +} + +.now-ui-icons.arrows-1_minimal-up:before { + content: "\ea3c"; +} + +.now-ui-icons.arrows-1_refresh-69:before { + content: "\ea44"; +} + +.now-ui-icons.arrows-1_share-66:before { + content: "\ea4c"; +} + +.now-ui-icons.business_badge:before { + content: "\ea09"; +} + +.now-ui-icons.business_bank:before { + content: "\ea0a"; +} + +.now-ui-icons.business_briefcase-24:before { + content: "\ea13"; +} + +.now-ui-icons.business_bulb-63:before { + content: "\ea15"; +} + +.now-ui-icons.business_chart-bar-32:before { + content: "\ea1e"; +} + +.now-ui-icons.business_chart-pie-36:before { + content: "\ea1f"; +} + +.now-ui-icons.business_globe:before { + content: "\ea2f"; +} + +.now-ui-icons.business_money-coins:before { + content: "\ea40"; +} + +.now-ui-icons.clothes_tie-bow:before { + content: "\ea5b"; +} + +.now-ui-icons.design_vector:before { + content: "\ea61"; +} + +.now-ui-icons.design_app:before { + content: "\ea08"; +} + +.now-ui-icons.design_bullet-list-67:before { + content: "\ea14"; +} + +.now-ui-icons.design_image:before { + content: "\ea33"; +} + +.now-ui-icons.design_palette:before { + content: "\ea41"; +} + +.now-ui-icons.design_scissors:before { + content: "\ea4a"; +} + +.now-ui-icons.design-2_html5:before { + content: "\ea32"; +} + +.now-ui-icons.design-2_ruler-pencil:before { + content: "\ea48"; +} + +.now-ui-icons.emoticons_satisfied:before { + content: "\ea49"; +} + +.now-ui-icons.files_box:before { + content: "\ea12"; +} + +.now-ui-icons.files_paper:before { + content: "\ea43"; +} + +.now-ui-icons.files_single-copy-04:before { + content: "\ea52"; +} + +.now-ui-icons.health_ambulance:before { + content: "\ea07"; +} + +.now-ui-icons.loader_gear:before { + content: "\ea4e"; +} + +.now-ui-icons.loader_refresh:before { + content: "\ea44"; +} + +.now-ui-icons.location_bookmark:before { + content: "\ea10"; +} + +.now-ui-icons.location_compass-05:before { + content: "\ea25"; +} + +.now-ui-icons.location_map-big:before { + content: "\ea3d"; +} + +.now-ui-icons.location_pin:before { + content: "\ea47"; +} + +.now-ui-icons.location_world:before { + content: "\ea63"; +} + +.now-ui-icons.media-1_album:before { + content: "\ea02"; +} + +.now-ui-icons.media-1_button-pause:before { + content: "\ea16"; +} + +.now-ui-icons.media-1_button-play:before { + content: "\ea18"; +} + +.now-ui-icons.media-1_button-power:before { + content: "\ea19"; +} + +.now-ui-icons.media-1_camera-compact:before { + content: "\ea1c"; +} + +.now-ui-icons.media-2_note-03:before { + content: "\ea3f"; +} + +.now-ui-icons.media-2_sound-wave:before { + content: "\ea57"; +} + +.now-ui-icons.objects_diamond:before { + content: "\ea29"; +} + +.now-ui-icons.objects_globe:before { + content: "\ea2f"; +} + +.now-ui-icons.objects_key-25:before { + content: "\ea38"; +} + +.now-ui-icons.objects_planet:before { + content: "\ea46"; +} + +.now-ui-icons.objects_spaceship:before { + content: "\ea55"; +} + +.now-ui-icons.objects_support-17:before { + content: "\ea56"; +} + +.now-ui-icons.objects_umbrella-13:before { + content: "\ea5f"; +} + +.now-ui-icons.education_agenda-bookmark:before { + content: "\ea01"; +} + +.now-ui-icons.education_atom:before { + content: "\ea0c"; +} + +.now-ui-icons.education_glasses:before { + content: "\ea2d"; +} + +.now-ui-icons.education_hat:before { + content: "\ea30"; +} + +.now-ui-icons.education_paper:before { + content: "\ea42"; +} + +.now-ui-icons.shopping_bag-16:before { + content: "\ea0d"; +} + +.now-ui-icons.shopping_basket:before { + content: "\ea0b"; +} + +.now-ui-icons.shopping_box:before { + content: "\ea11"; +} + +.now-ui-icons.shopping_cart-simple:before { + content: "\ea1d"; +} + +.now-ui-icons.shopping_credit-card:before { + content: "\ea28"; +} + +.now-ui-icons.shopping_delivery-fast:before { + content: "\ea27"; +} + +.now-ui-icons.shopping_shop:before { + content: "\ea50"; +} + +.now-ui-icons.shopping_tag-content:before { + content: "\ea59"; +} + +.now-ui-icons.sport_trophy:before { + content: "\ea5d"; +} + +.now-ui-icons.sport_user-run:before { + content: "\ea60"; +} + +.now-ui-icons.tech_controller-modern:before { + content: "\ea26"; +} + +.now-ui-icons.tech_headphones:before { + content: "\ea31"; +} + +.now-ui-icons.tech_laptop:before { + content: "\ea36"; +} + +.now-ui-icons.tech_mobile:before { + content: "\ea3e"; +} + +.now-ui-icons.tech_tablet:before { + content: "\ea58"; +} + +.now-ui-icons.tech_tv:before { + content: "\ea5e"; +} + +.now-ui-icons.tech_watch-time:before { + content: "\ea62"; +} + +.now-ui-icons.text_align-center:before { + content: "\ea05"; +} + +.now-ui-icons.text_align-left:before { + content: "\ea06"; +} + +.now-ui-icons.text_bold:before { + content: "\ea0e"; +} + +.now-ui-icons.text_caps-small:before { + content: "\ea1b"; +} + +.now-ui-icons.gestures_tap-01:before { + content: "\ea5a"; +} + +.now-ui-icons.transportation_air-baloon:before { + content: "\ea03"; +} + +.now-ui-icons.transportation_bus-front-12:before { + content: "\ea17"; +} + +.now-ui-icons.travel_info:before { + content: "\ea04"; +} + +.now-ui-icons.travel_istanbul:before { + content: "\ea34"; +} + +.now-ui-icons.ui-1_bell-53:before { + content: "\ea0f"; +} + +.now-ui-icons.ui-1_calendar-60:before { + content: "\ea1a"; +} + +.now-ui-icons.ui-1_lock-circle-open:before { + content: "\ea35"; +} + +.now-ui-icons.ui-1_send:before { + content: "\ea4d"; +} + +.now-ui-icons.ui-1_settings-gear-63:before { + content: "\ea4e"; +} + +.now-ui-icons.ui-1_simple-add:before { + content: "\ea4f"; +} + +.now-ui-icons.ui-1_simple-delete:before { + content: "\ea54"; +} + +.now-ui-icons.ui-1_simple-remove:before { + content: "\ea53"; +} + +.now-ui-icons.ui-1_zoom-bold:before { + content: "\ea64"; +} + +.now-ui-icons.ui-2_chat-round:before { + content: "\ea20"; +} + +.now-ui-icons.ui-2_favourite-28:before { + content: "\ea2b"; +} + +.now-ui-icons.ui-2_like:before { + content: "\ea37"; +} + +.now-ui-icons.ui-2_settings-90:before { + content: "\ea4b"; +} + +.now-ui-icons.ui-2_time-alarm:before { + content: "\ea5c"; +} + +.now-ui-icons.users_circle-08:before { + content: "\ea23"; +} + +.now-ui-icons.users_single-02:before { + content: "\ea51"; +} diff --git a/web/libs/sass/now-ui-kit/_pagination.scss b/web/libs/sass/now-ui-kit/_pagination.scss new file mode 100644 index 00000000..f076d9ca --- /dev/null +++ b/web/libs/sass/now-ui-kit/_pagination.scss @@ -0,0 +1,136 @@ +.pagination{ + .page-item .page-link{ + border: 0; + border-radius: 30px !important; + transition: all .3s; + padding: 0px 11px; + margin: 0 3px; + min-width: 30px; + text-align: center; + height: 30px; + line-height: 30px; + color: $black-color; + cursor: pointer; + font-size: $font-size-base; + text-transform: uppercase; + background: transparent; + + &:hover, + &:focus{ + color: $black-color; + background-color: $opacity-gray-3; + border: none; + } + } + + .arrow-margin-left, + .arrow-margin-right{ + position: absolute; + } + + .arrow-margin-right{ + right: 0; + } + + .arrow-margin-left{ + left: 0; + } + + .page-item.active > .page-link{ + color: $light-gray; + box-shadow: 0px 5px 25px 0px rgba(0, 0, 0, 0.2); + + &, + &:focus, + &:hover{ + background-color: $default-color; + border-color: $default-color; + color: $white-color; + } + } + + .page-item.disabled > .page-link{ + opacity: .5; + background-color: rgba(255,255,255, .2); + color: $white-color; + } + + // Colors + &.pagination-info{ + .page-item.active > .page-link{ + &, + &:focus, + &:hover{ + background-color: $brand-info; + border-color: $brand-info; + } + } + } + + &.pagination-success{ + .page-item.active > .page-link{ + &, + &:focus, + &:hover{ + background-color: $brand-success; + border-color: $brand-success; + } + } + } + + &.pagination-primary{ + .page-item.active > .page-link{ + &, + &:focus, + &:hover{ + background-color: $brand-primary; + border-color: $brand-primary; + } + } + } + + &.pagination-warning{ + .page-item.active > .page-link{ + &, + &:focus, + &:hover{ + background-color: $brand-warning; + border-color: $brand-warning; + } + } + } + + &.pagination-danger{ + .page-item.active > .page-link{ + &, + &:focus, + &:hover{ + background-color: $brand-danger; + border-color: $brand-danger; + } + } + } + + &.pagination-neutral{ + .page-item > .page-link{ + color: $white-color; + + &:focus, + &:hover{ + background-color: $opacity-2; + color: $white-color; + } + } + + .page-item.active > .page-link{ + &, + &:focus, + &:hover{ + background-color: $white-bg; + border-color: $white-bg; + color: $brand-primary; + } + } + } + +} diff --git a/web/libs/sass/now-ui-kit/_pills.scss b/web/libs/sass/now-ui-kit/_pills.scss new file mode 100644 index 00000000..c7637bef --- /dev/null +++ b/web/libs/sass/now-ui-kit/_pills.scss @@ -0,0 +1,131 @@ +.nav-pills{ + + .nav-item { + .nav-link{ + padding: 0 15.5px; + text-align: center; + height: 60px; + width: 60px; + font-weight: $font-weight-normal; + color: $dark-gray; + margin-right: 19px; + background-color: $opacity-gray-3; + border-radius: $btn-round-radius; + + &:hover{ + background-color: $opacity-gray-3; + } + + &.active{ + &, + &:focus, + &:hover{ + background-color: $dark-gray; + color: $white-color; + box-shadow: 0px 5px 35px 0px rgba(0, 0, 0, 0.3); + } + } + + &.disabled, + &:disabled, + &[disabled]{ + opacity: .5; + } + } + + i{ + display: block; + font-size: 20px; + line-height: 60px; + } + } + + &.nav-pills-neutral{ + .nav-item { + .nav-link{ + background-color: $opacity-2; + color: $white-color; + + &.active{ + &, + &:focus, + &:hover{ + background-color: $white-color; + color: $primary-color; + } + } + } + } + } + + &.nav-pills-primary{ + .nav-item { + .nav-link.active{ + &, + &:focus, + &:hover{ + background-color: $brand-primary; + } + } + } + } + + &.nav-pills-info{ + .nav-item { + .nav-link.active{ + &, + &:focus, + &:hover{ + background-color: $brand-info; + } + } + } + } + + &.nav-pills-success{ + .nav-item { + .nav-link.active{ + &, + &:focus, + &:hover{ + background-color: $brand-success; + } + } + } + } + + &.nav-pills-warning{ + .nav-item { + .nav-link.active{ + &, + &:focus, + &:hover{ + background-color: $brand-warning; + } + } + } + } + + &.nav-pills-danger{ + .nav-item { + .nav-link.active{ + &, + &:focus, + &:hover{ + background-color: $brand-danger; + } + } + } + } +} +.tab-space{ + padding: 20px 0 50px 0px; +} + +.nav-align-center{ + text-align: center; + + .nav-pills{ + display: inline-flex; + } +} diff --git a/web/libs/sass/now-ui-kit/_popups.scss b/web/libs/sass/now-ui-kit/_popups.scss new file mode 100644 index 00000000..4b41450a --- /dev/null +++ b/web/libs/sass/now-ui-kit/_popups.scss @@ -0,0 +1,85 @@ +.popover{ + font-size: $font-size-base; + box-shadow: 0px 10px 50px 0px rgba(0, 0, 0, 0.2); + border: none; + line-height: 1.7; + max-width: 240px; + + &.bs-popover-top .arrow:before, + &.bs-popover-left .arrow:before, + &.bs-popover-right .arrow:before, + &.bs-popover-bottom .arrow:before,{ + border-top-color: transparent; + border-left-color: transparent; + border-right-color: transparent; + border-bottom-color: transparent; + } + + .popover-header{ + color: $default-color-opacity; + font-size: $font-size-base; + text-transform: capitalize; + font-weight: $font-weight-semi; + margin: 0; + margin-top: 5px; + border: none; + background-color: transparent; + } + + &:before{ + display: none; + } + + &.bs-tether-element-attached-top:after{ + border-bottom-color:$white-color; + top: -9px; + } + + &.popover-primary{ + @include popover-color($primary-color, $white-color); + } + + &.popover-info{ + @include popover-color($info-color, $white-color); + } + + &.popover-warning{ + @include popover-color($warning-color, $white-color); + } + + &.popover-danger{ + @include popover-color($danger-color, $white-color); + } + + &.popover-success{ + @include popover-color($success-color, $white-color); + } +} + + +.tooltip{ + &.bs-tooltip-right .arrow:before{ + border-right-color:$white-color; + } + + &.bs-tooltip-top .arrow:before{ + border-top-color:$white-color; + } + + &.bs-tooltip-bottom .arrow:before{ + border-bottom-color:$white-color; + } + + &.bs-tooltip-left .arrow:before{ + border-left-color:$white-color; + } +} + +.tooltip-inner{ + padding: $padding-base-vertical $padding-base-horizontal; + min-width: 130px; + background-color: $white-color; + font-size: $font-size-base; + color: inherit; + box-shadow: 0px 5px 25px 0px rgba(0, 0, 0, 0.2); +} diff --git a/web/libs/sass/now-ui-kit/_progress.scss b/web/libs/sass/now-ui-kit/_progress.scss new file mode 100644 index 00000000..1288fc09 --- /dev/null +++ b/web/libs/sass/now-ui-kit/_progress.scss @@ -0,0 +1,126 @@ +// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten. +.progress-container{ + position: relative; + + & + .progress-container, + & ~ .progress-container{ + margin-top: $margin-base-vertical; + } + .progress-badge{ + color: $default-color; + font-size: $font-size-small; + text-transform: uppercase; + + } + + .progress { + height: 1px; + border-radius: 0; + box-shadow: none; + background: $opacity-gray-8; + margin-top: 14px; + + .progress-bar { + box-shadow: none; + background-color: $default-color; + } + + .progress-value{ + position: absolute; + top: 2px; + right: 0; + color: $default-color; + font-size: $font-size-small; + } + } + + &.progress-neutral{ + .progress{ + background: rgba(255, 255, 255, .3); + } + + .progress-bar{ + background: $white-bg; + } + + .progress-value, + .progress-badge{ + color: $white-color; + } + } + + &.progress-primary{ + .progress{ + background: $primary-color-opacity; + } + + .progress-bar{ + background: $brand-primary; + } + + .progress-value, + .progress-badge{ + color: $brand-primary; + } + } + + &.progress-info{ + .progress{ + background: $info-color-opacity; + } + + .progress-bar{ + background: $brand-info; + } + + .progress-value, + .progress-badge{ + color: $brand-info; + } + } + + &.progress-success{ + .progress{ + background: $success-color-opacity; + } + + .progress-bar{ + background: $brand-success; + } + + .progress-value, + .progress-badge{ + color: $brand-success; + } + } + + &.progress-warning{ + .progress{ + background: $warning-color-opacity; + } + + .progress-bar{ + background: $brand-warning; + } + + .progress-value, + .progress-badge{ + color: $brand-warning; + } + } + + &.progress-danger{ + .progress{ + background: $danger-color-opacity; + } + + .progress-bar{ + background: $brand-danger; + } + + .progress-value, + .progress-badge{ + color: $brand-danger; + } + } +} diff --git a/web/libs/sass/now-ui-kit/_responsive.scss b/web/libs/sass/now-ui-kit/_responsive.scss new file mode 100644 index 00000000..5b8f282e --- /dev/null +++ b/web/libs/sass/now-ui-kit/_responsive.scss @@ -0,0 +1,392 @@ +@media screen and (max-width: 991px){ + .sidebar-collapse{ + @include navbar-collapse(); + + &.menu-on-left{ + .navbar-collapse{ + right: auto; + left: 0; + @include transform-translate-x(-300px); + } + } + + .nav-open &{ + .navbar-collapse{ + @include transform-translate-x(0px); + } + + .wrapper{ + @include transform-translate-x(-150px); + } + + .navbar-translate{ + @include transform-translate-x(-300px); + } + + &.menu-on-left{ + .navbar-collapse{ + @include transform-translate-x(0px); + } + + .navbar-translate{ + @include transform-translate-x(300px); + } + + .wrapper{ + @include transform-translate-x(150px); + } + + #bodyClick{ + right: auto; + left: 300px; + } + } + } + } + + .bootstrap-collapse{ + .navbar .navbar-collapse{ + background: none !important; + } + @include navbar-responsive(); + } + + .profile-photo .profile-photo-small{ + margin-left: -2px; + } + + .button-dropdown{ + display: none; + } + + .section-nucleo-icons .container .row > [class*="col-"]:first-child{ + text-align: center; + } + + .footer{ + .copyright{ + text-align: right; + } + } + + .section-nucleo-icons .icons-container{ + margin-top: 65px; + } + + .navbar-nav{ + .nav-link{ + i.fa, + i.now-ui-icons{ + opacity: .5; + } + } + } + + .section-images{ + height: 500px; + max-height: 500px; + + .hero-images-container{ + max-width: 500px; + } + + .hero-images-container-1{ + right: 10%; + top: 68%; + max-width: 269px; + } + + .hero-images-container-2{ + right: 5%; + max-width: 135px; + top: 93%; + } + } +} + +@media screen and (min-width: 992px){ + .burger-menu{ + @include navbar-collapse(); + + .nav-open & .navbar-collapse{ + @include transform-translate-x(0px); + } + + .navbar-collapse { + display: block !important; + + .navbar-nav { + margin-top: 53px; + height: 100%; + z-index: 2; + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + + .nav-item{ + margin: 0; + } + } + } + + &.menu-on-left .navbar-collapse{ + right: auto; + left: 0; + @include transform-translate-x(-300px); + } + + [class*="navbar-expand-"]{ + .navbar-nav .dropdown-menu{ + position: static; + float: none; + } + + .navbar-toggler{ + display: inline-block; + } + } + + .section-navbars .navbar-collapse{ + display: none !important; + } + + .nav-open &{ + &.menu-on-left .navbar .navbar-translate{ + @include transform-translate-x(300px); + } + + .navbar .navbar-translate{ + @include transform-translate-x(-300px); + } + + &.menu-on-left .navbar-collapse{ + @include transform-translate-x(0px); + } + + &.menu-on-left #bodyClick{ + right: auto; + left: 300px; + } + } + + &.menu-on-left .navbar-brand{ + float: right; + margin-right: 0; + margin-left: 1rem; + } + } + + .navbar-nav{ + .nav-link{ + &.profile-photo{ + padding: 0; + margin: 7px $padding-base-horizontal; + } + + &.btn:not(.btn-sm){ + margin: 0; + } + } + + .nav-item:not(:last-child){ + margin-right: 5px; + } + + } + + .section-nucleo-icons .icons-container{ + margin: 0 0 0 auto; + } + + .dropdown-menu .dropdown-item{ + color: inherit; + } + + .footer{ + .copyright{ + float: right; + } + } +} + +@media screen and (min-width: 768px){ + .image-container{ + &.image-right{ + top: 80px; + margin-left: - 100px; + margin-bottom: 130px; + } + + &.image-left{ + margin-right: -100px; + } + } +} + +@media screen and (max-width: 768px){ + .image-container{ + &.image-left{ + margin-bottom: 220px; + + p.blockquote{ + margin: 0 auto; + position: relative; + right: 0; + } + } + } + + .nav-tabs{ + display: inline-block; + width: 100%; + padding-left: 100px; + padding-right: 100px; + text-align: center; + + .nav-item > .nav-link{ + margin-bottom: 5px; + } + } + + .landing-page .section-story-overview .image-container:nth-child(2){ + margin-left: 0; + margin-bottom: 30px; + } +} + +@media screen and (max-width: 576px){ + .navbar[class*='navbar-expand-'] .container{ + margin-left: 0; + margin-right: 0; + } + + .footer{ + .copyright{ + text-align: center; + } + } + + .section-nucleo-icons{ + .icons-container{ + i{ + font-size: 30px; + + &:nth-child(6){ + font-size: 48px; + } + } + } + } + + .page-header{ + .container h6.category-absolute{ + width: 90%; + } + } +} + +@media screen and (min-width: 991px) and (max-width: 1200px){ + .section-images{ + .hero-images-container-1{ + right: 9%; + max-width: 370px; + } + + .hero-images-container-2{ + right: 2%; + max-width: 216px; + } + } +} + +@media screen and (max-width: 768px){ + .section-images{ + height: 300px; + max-height: 300px; + + .hero-images-container{ + max-width: 380px; + } + + .hero-images-container-1{ + right: 7%; + top: 87%; + max-width: 210px; + } + + .hero-images-container-2{ + right: 1%; + max-width: 133px; + top: 99%; + } + } +} + +@media screen and (max-width: 517px) { + .alert .alert-icon{ + margin-top: 10px; + } +} + +@media screen and (min-width: 1200px) { + .section-images{ + .hero-images-container-1{ + top: 51%; + right: 21%; + } + + .hero-images-container-2{ + top: 66%; + right: 14%; + } + } +} + +// Ipad responsive portrait mode +@media only screen +and (min-device-width : 768px) +and (max-device-width : 1024px) +and ( orientation : portrait){ + .section-images .hero-images-container, + .section-images .hero-images-container-1, + .section-images .hero-images-container-2{ + margin-top: -15vh; + margin-left: 80px; + } + + .section-images .hero-images-container{ + max-width: 300px; + } + + .section-images .hero-images-container-1{ + right: 28%; + top: 40%; + } + + .section-images .hero-images-container-2{ + right: 21%; + top: 55%; + } + + .index-page .category-absolute{ + top: 90vh; + } +} + +@media screen and (max-width: 580px) { + .alert{ + button.close{ + position: absolute; + right: 11px; + top: 50%; + transform: translateY(-50%); + } + } +} diff --git a/web/libs/sass/now-ui-kit/_sections.scss b/web/libs/sass/now-ui-kit/_sections.scss new file mode 100644 index 00000000..e82c49e6 --- /dev/null +++ b/web/libs/sass/now-ui-kit/_sections.scss @@ -0,0 +1,396 @@ +.section{ + padding: 70px 0; + position: relative; + background: $white-color; + + .row + .category{ + margin-top: $margin-base-vertical; + } +} +.section-navbars{ + padding-bottom: 0; +} + +.section-full-screen{ + height: 100vh; +} +.section-signup{ + padding-top: 20vh; +} + +.page-header{ + height: 100vh; + max-height: 1050px; + padding: 0; + color: $white-color; + position: relative; + + background-position: center center; + background-size: cover; + + .page-header-image{ + position: absolute; + background-size: cover; + background-position: center center; + width: 100%; + height: 100%; + z-index: -1; + } + + footer{ + position: absolute; + bottom: 0; + width: 100%; + } + .container{ + height: 100%; + z-index: 1; + text-align: center; + position: relative; + + > .content-center{ + position: absolute; + top: 50%; + left: 50%; + + -ms-transform: translate(-50%,-50%); + -webkit-transform: translate(-50%,-50%); + transform: translate(-50%,-50%); + + text-align: center; + padding: 0 15px; + color: #FFFFFF; + width: 100%; + max-width: 880px; + } + } + .category, + .description{ + color: $opacity-5; + } + + &.page-header-small{ + height: 60vh; + max-height: 440px; + } + + &:after, + &:before{ + position: absolute; + z-index: 0; + width: 100%; + height: 100%; + display: block; + left: 0; + top: 0; + content: ""; + } + + &:before{ + background-color: rgba(0,0,0,.5); + } + + &[filter-color="orange"]{ + @include linear-gradient(rgba($black-color,.20), rgba(224, 23, 3, 0.6)); + } + + .container{ + z-index: 2; + } + +} + +.clear-filter{ + &:after, + &:before{ + display: none; + } +} + +.section-story-overview{ + padding: 50px 0; + + .image-container{ + height: 335px; + position: relative; + background-position: center center; + background-size: cover; + box-shadow: $box-shadow-raised; + border-radius: .25rem; + + & + .category{ + padding-top: 15px; + } + + &.image-right{ + z-index: 2; + + + h3.title{ + margin-top: 120px; + } + } + + &.image-left{ + z-index: 1; + } + + &:nth-child(2){ + margin-top: 420px; + margin-left: -105px; + } + } + + p.blockquote{ + width: 220px; + min-height: 180px; + text-align: left; + position: absolute; + top: 376px; + right: 155px; + z-index: 0; + } +} + +.section-nucleo-icons{ + .nucleo-container img{ + width: auto; + left: 0; + top: 0; + height: 100%; + position: absolute; + } + + .nucleo-container{ + height: 335px; + position: relative; + } + + h5{ + margin-bottom: 35px; + } + + .icons-container{ + position: relative; + max-width: 450px; + height: 300px; + max-height: 300px; + margin: 0 auto; + + } + .icons-container i{ + font-size: 34px; + position: absolute; + left: 0; + top: 0; + } + + .icons-container i:nth-child(1){ + top: 5%; + left: 7%; + } + + .icons-container i:nth-child(2){ + top: 28%; + left: 24%; + } + + .icons-container i:nth-child(3){ + top: 40%; + } + + .icons-container i:nth-child(4){ + top: 18%; + left: 62%; + } + + .icons-container i:nth-child(5){ + top: 74%; + left: 3%; + } + + .icons-container i:nth-child(6){ + top: 36%; + left: 44%; + font-size: 65px; + color: #f96332; + padding: 1px; + } + + .icons-container i:nth-child(7){ + top: 59%; + left: 26%; + } + + .icons-container i:nth-child(8){ + top: 60%; + left: 69%; + } + + .icons-container i:nth-child(9){ + top: 72%; + left: 47%; + } + + .icons-container i:nth-child(10){ + top: 88%; + left: 27%; + } + + .icons-container i:nth-child(11){ + top: 31%; + left: 80%; + } + + .icons-container i:nth-child(12){ + top: 88%; + left: 68%; + } + + .icons-container i:nth-child(13){ + top: 5%; + left: 81%; + } + + .icons-container i:nth-child(14){ + top: 58%; + left: 90%; + } + + .icons-container i:nth-child(15){ + top: 6%; + left: 40%; + } +} + +.section-images{ + max-height: 670px; + height: 670px; + + .hero-images-container, + .hero-images-container-1, + .hero-images-container-2{ + margin-top: -38vh; + } + + .hero-images-container{ + max-width: 670px; + } + + .hero-images-container-1{ + max-width: 390px; + position: absolute; + top: 55%; + right: 18%; + + } + + .hero-images-container-2{ + max-width: 225px; + position: absolute; + top: 68%; + right: 12%; + } +} + + +[data-background-color="orange"]{ + background-color: $orange-bg; +} +[data-background-color="black"]{ + background-color: $black-color; +} + +[data-background-color]{ + color: $white-color; + + .title, + .social-description h2, + p, + p.blockquote, + p.blockquote small, + h1,h2,h3,h4,h5,h6,a:not(.btn):not(.dropdown-item), + .icons-container i{ + color: $white-color; + } + + .separator{ + background-color: $white-color; + } + + .navbar.bg-white p{ + color: $default-color; + } + + .description, + .social-description p{ + color: $opacity-8; + } + + p.blockquote{ + border-color: $opacity-2; + } + + //radio and checkboxes + .checkbox label::before, + .checkbox label::after, + .radio label::before, + .radio label::after{ + border-color: $opacity-2; + } + + .checkbox label::after, + .checkbox label, + .radio label{ + color: $white-color; + } + + .checkbox input[type="checkbox"]:disabled + label, + .radio input[type="radio"]:disabled + label { + color: $white-color; + } + + .radio input[type="radio"]:not(:disabled):hover + label::after, + .radio input[type="radio"]:checked + label::after { + background-color: $white-color; + border-color: $white-color; + } + + //inputs + @include input-coloured-bg($opacity-5, $white-color, $white-color, $transparent-bg, $opacity-1, $opacity-2); + + .input-group-addon, + .form-group.form-group-no-border .input-group-addon, + .input-group.form-group-no-border .input-group-addon{ + color: $opacity-8; + } + + //buttons + .btn.btn-simple{ + background-color: $transparent-bg; + border-color: $opacity-5; + color: $white-color; + + &:hover, + &:hover, + &:focus, + &:active{ + background-color: $transparent-bg; + border-color: $white-color; + } + } + + //tabs + .nav-tabs{ + > .nav-item{ + >.nav-link{ + i.now-ui-icons{ + color: $white-color; + } + } + } + } + + &.section-nucleo-icons .icons-container i:nth-child(6){ + color: $white-color; + } +} diff --git a/web/libs/sass/now-ui-kit/_social-buttons.scss b/web/libs/sass/now-ui-kit/_social-buttons.scss new file mode 100644 index 00000000..9e6b2ba7 --- /dev/null +++ b/web/libs/sass/now-ui-kit/_social-buttons.scss @@ -0,0 +1,39 @@ +.btn-twitter{ + color: $social-twitter; + + &:hover, + &:focus, + &:active{ + color: $social-twitter-state-color; + } +} + +.btn-facebook{ + color: $social-facebook; + + &:hover, + &:focus, + &:active{ + color: $social-facebook-state-color; + } +} + +.btn-google{ + color: $social-google; + + &:hover, + &:focus, + &:active{ + color: $social-google-state-color; + } +} + +.btn-linkedin{ + color: $social-linkedin; + + &:hover, + &:focus, + &:active{ + color: $social-linkedin-state-color; + } +} diff --git a/web/libs/sass/now-ui-kit/_tabs.scss b/web/libs/sass/now-ui-kit/_tabs.scss new file mode 100644 index 00000000..7e4a32d0 --- /dev/null +++ b/web/libs/sass/now-ui-kit/_tabs.scss @@ -0,0 +1,110 @@ +// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten. + +.nav-tabs { + border: 0; + padding: $padding-large-vertical $padding-base-horizontal; + + > .nav-item{ + > .nav-link{ + color: $default-color; + margin: 0; + margin-right: 5px; + background-color: $transparent-bg; + border: 1px solid $transparent-bg; + border-radius: 30px; + font-size: $font-size-base; + padding: $padding-btn-vertical $padding-round-horizontal; + line-height: $line-height-general; + + &:hover { + background-color: $transparent-bg; + } + + &.active{ + border: 1px solid $default-color; + border-radius: 30px; + } + + i.now-ui-icons{ + font-size: 14px; + position: relative; + top: 1px; + margin-right: 3px; + } + } + + &.disabled > .nav-link, + &.disabled > .nav-link:hover { + color: rgba(255,255,255,0.5); + } + } + + &.nav-tabs-neutral{ + > .nav-item{ + > .nav-link{ + color: $white-color; + + &.active{ + border-color: $opacity-5; + color: $white-color; + } + } + } + } + + &.nav-tabs-primary{ + > .nav-item{ + > .nav-link{ + &.active{ + border-color: $primary-color; + color: $primary-color; + } + } + } + } + + &.nav-tabs-info{ + > .nav-item{ + > .nav-link{ + &.active{ + border-color: $info-color; + color: $info-color; + } + } + } + } + + &.nav-tabs-danger{ + > .nav-item{ + > .nav-link{ + &.active{ + border-color: $danger-color; + color: $danger-color; + } + } + } + } + + &.nav-tabs-warning{ + > .nav-item{ + > .nav-link{ + &.active{ + border-color: $warning-color; + color: $warning-color; + } + } + } + } + + &.nav-tabs-success{ + > .nav-item{ + > .nav-link{ + &.active{ + border-color: $success-color; + color: $success-color; + } + } + } + } + +} diff --git a/web/libs/sass/now-ui-kit/_typography.scss b/web/libs/sass/now-ui-kit/_typography.scss new file mode 100644 index 00000000..16c155aa --- /dev/null +++ b/web/libs/sass/now-ui-kit/_typography.scss @@ -0,0 +1,158 @@ +button, +input, +optgroup, +select, +textarea{ + font-family: $sans-serif-family; +} +h1,h2,h3,h4,h5,h6{ + font-weight: $font-weight-normal; +} + +small{ + font-size: 60%; +} + +a{ + color: $primary-color; + &:hover, + &:focus{ + color: $primary-color; + } +} +h1, .h1 { + font-size: $font-size-h1; + line-height: 1.15; + margin-bottom: $margin-base-vertical * 2; + + small{ + font-weight: $font-weight-bold; + text-transform: uppercase; + opacity: .8; + } +} +h2, .h2{ + font-size: $font-size-h2; + margin-bottom: $margin-base-vertical * 2; +} +h3, .h3{ + font-size: $font-size-h3; + margin-bottom: $margin-base-vertical * 2; + line-height: 1.4em; +} +h4, .h4{ + font-size: $font-size-h4; + line-height: 1.45em; + margin-top: $margin-base-vertical * 2; + margin-bottom: $margin-base-vertical; + + & + .category, + &.title + .category{ + margin-top: -10px; + } +} +h5, .h5 { + font-size: $font-size-h5; + line-height: 1.4em; + margin-bottom: 15px; +} +h6, .h6{ + font-size: $font-size-h6; + font-weight: $font-weight-bold; + text-transform: uppercase; +} +p{ + line-height: 1.61em; + + .description &, + &.description{ + font-size: 1.14em; + } +} + +.title{ + font-weight: $font-weight-bold; + + &.title-up{ + text-transform: uppercase; + + a{ + color: $black-color; + text-decoration: none; + } + } + & + .category{ + margin-top: -25px; + } +} + +.description, +.card-description, +.footer-big p{ + color: $dark-gray; + font-weight: $font-weight-light; +} +.category{ + text-transform: uppercase; + font-weight: $font-weight-bold; + color: $dark-gray; +} +.text-primary { + color: $brand-primary !important; +} +.text-info { + color: $brand-info !important; +} +.text-success { + color: $brand-success !important; +} +.text-warning { + color: $brand-warning !important; +} +.text-danger { + color: $brand-danger !important; +} +.text-black{ + color: $light-black; +} + +.blockquote{ + border-left: none; + border: 1px solid $default-color; + padding: 20px; + font-size: $font-size-blockquote; + line-height: 1.8; + + small{ + color: $default-color; + font-size: $font-size-small; + text-transform: uppercase; + } + + &.blockquote-primary{ + border-color: $primary-color; + color: $primary-color; + + small{ + color: $primary-color; + } + } + + &.blockquote-danger{ + border-color: $danger-color; + color: $danger-color; + + small{ + color: $danger-color; + } + } + + &.blockquote-white{ + border-color: $opacity-8; + color: $white-color; + + small{ + color: $opacity-8; + } + } +} diff --git a/web/libs/sass/now-ui-kit/_variables.scss b/web/libs/sass/now-ui-kit/_variables.scss new file mode 100644 index 00000000..5cdcdbae --- /dev/null +++ b/web/libs/sass/now-ui-kit/_variables.scss @@ -0,0 +1,254 @@ +//== Buttons +// +//## For each of Bootstrap's buttons, define text, background and border color. + +$sans-serif-family: 'Montserrat', 'Helvetica Neue', Arial, sans-serif; + +$none: 0 !default; +$border-thin: 1px !default; +$border-thick: 2px !default; + +$white-color: #FFFFFF !default; +$white-bg: #FFFFFF !default; +$orange-bg: #e95e38 !default; + +$smoke-bg: #F5F5F5 !default; +$light-black: #444 !default; + +$black-bg: rgba(30,30,30,.97) !default; + +$black-color: #2c2c2c !default; +$black-hr: #444444 !default; + +$light-gray: #E3E3E3 !default; +$medium-gray: #DDDDDD !default; +$dark-gray: #9A9A9A !default; + +$opacity-gray-3: rgba(222,222,222, .3) !default; +$opacity-gray-5: rgba(222,222,222, .5) !default; +$opacity-gray-8: rgba(222,222,222, .8) !default; + + +$opacity-5: rgba(255,255,255, .5) !default; +$opacity-8: rgba(255,255,255, .8) !default; + +$datepicker-color-days: rgba(255,255,255, .8) !default; +$datepicker-color-old-new-days: rgba(255,255,255, .4) !default; + + +$opacity-1: rgba(255,255,255, .1) !default; +$opacity-2: rgba(255,255,255, .2) !default; + +$transparent-bg: transparent !default; +$dark-background: #555555 !default; + +$default-color: #888 !default; +$default-states-color: lighten($default-color, 6%) !default; +$default-color-opacity: rgba(182, 182, 182, .6) !default; + +$primary-color: #f96332 !default; +$primary-states-color: lighten($primary-color, 6%) !default; +$primary-color-opacity: rgba(249, 99, 50, .3) !default; +$primary-color-alert: rgba(249, 99, 50, .8) !default; + +$success-color: #18ce0f !default; +$success-states-color: lighten($success-color, 6%) !default; +$success-color-opacity: rgba(24, 206, 15, .3) !default; +$success-color-alert: rgba(24, 206, 15, .8) !default; + +$info-color: #2CA8FF !default; +$info-states-color: lighten($info-color, 6%) !default; +$info-color-opacity: rgba(44, 168, 255, .3) !default; +$info-color-alert: rgba(44, 168, 255, .8) !default; + +$warning-color: #FFB236 !default; +$warning-states-color: lighten($warning-color, 6%) !default; +$warning-color-opacity: rgba(255, 178, 54, .3) !default; +$warning-color-alert: rgba(255, 178, 54, .8) !default; + +$danger-color: #FF3636 !default; +$danger-states-color: lighten($danger-color, 6%) !default; +$danger-color-opacity: rgba(255, 54, 54, .3) !default; +$danger-color-alert: rgba(255, 54, 54, .8) !default; + +/* brand Colors */ +$brand-primary: $primary-color !default; +$brand-info: $info-color !default; +$brand-success: $success-color !default; +$brand-warning: $warning-color !default; +$brand-danger: $danger-color !default; +$brand-inverse: $black-color !default; + +$link-disabled-color: #666666 !default; + +/* light colors */ +$light-blue: rgba($primary-color, .2); +$light-azure: rgba($info-color, .2); +$light-green: rgba($success-color, .2); +$light-orange: rgba($warning-color, .2); +$light-red: rgba($danger-color, .2); + +//== Components +// + +$padding-input-vertical: 11px !default; +$padding-input-horizontal: 19px !default; + +$padding-btn-vertical: 11px !default; +$padding-btn-horizontal: 22px !default; + +$padding-base-vertical: .5rem !default; +$padding-base-horizontal: .7rem !default; + +$padding-round-horizontal: 23px !default; + +$padding-simple-vertical: 10px !default; +$padding-simple-horizontal: 17px !default; + +$padding-large-vertical: 15px !default; +$padding-large-horizontal: 48px !default; + +$padding-small-vertical: 5px !default; +$padding-small-horizontal: 15px !default; + +// $padding-xs-vertical: 1px !default; +// $padding-xs-horizontal: 5px !default; + +$padding-label-vertical: 2px !default; +$padding-label-horizontal: 12px !default; + +$margin-large-vertical: 30px !default; +$margin-base-vertical: 15px !default; + +$margin-base-horizontal: 15px !default; + +$margin-bottom: 10px !default; +$border: 1px solid !default; +$border-radius-extra-small: 0.125rem !default; +$border-radius-small: 0.1875rem !default; +$border-radius-large: 0.25rem !default; +$border-radius-extreme: 0.875rem !default; + +$border-radius-large-top: $border-radius-large $border-radius-large 0 0 !default; +$border-radius-large-bottom: 0 0 $border-radius-large $border-radius-large !default; + +$btn-round-radius: 30px !default; + +$height-base: 55px !default; + +$btn-icon-size: 3.5rem !default; +$btn-icon-size-regular: 2.375rem !default; +$btn-icon-font-size-regular: 0.9375rem !default; +$btn-icon-font-size-small: 0.6875rem !default; +$btn-icon-size-small: 1.875rem !default; +$btn-icon-font-size-lg: 1.325rem !default; +$btn-icon-size-lg: 3.6rem !default; + +$font-size-h1: 3.5em !default; // ~ 49px +$font-size-h2: 2.5em !default; // ~ 35px +$font-size-h3: 2em !default; // ~ 28px +$font-size-h4: 1.714em !default; // ~ 24px +$font-size-h5: 1.57em !default; // ~ 22px +$font-size-h6: 1em !default; // ~ 14px + +$font-paragraph: 1em !default; +$font-size-navbar: 1em !default; +$font-size-mini: 0.7142em !default; +$font-size-small: 0.8571em !default; +$font-size-base: 14px !default; +$font-size-large: 1em !default; +$font-size-large-navbar: 20px !default; +$font-size-blockquote: 1.1em !default; // ~ 15px + +$font-weight-light: 300 !default; +$font-weight-normal: 400 !default; +$font-weight-semi: 600 !default; +$font-weight-bold: 700 !default; + +$line-height-general: 1.5 !default; +$line-height-nav-link: 1.625rem !default; +$btn-icon-line-height: 2.4em !default; +$line-height: 1.35em !default; +$line-height-lg: 54px !default; + + +$border-radius-top: 10px 10px 0 0 !default; +$border-radius-bottom: 0 0 10px 10px !default; + +$dropdown-shadow: 1px 2px 3px rgba(0, 0, 0, 0.125); +$box-shadow-raised: 0px 10px 25px 0px rgba(0, 0, 0, 0.3); + +$general-transition-time: 300ms !default; + +$slow-transition-time: 370ms !default; +$dropdown-coordinates: 29px -50px !default; + +$fast-transition-time: 150ms !default; +$select-coordinates: 50% -40px !default; + +$transition-linear: linear !default; +$transition-bezier: cubic-bezier(0.34, 1.61, 0.7, 1) !default; +$transition-ease: ease 0s; + + +//$navbar-padding-a: 9px 13px; +$navbar-margin-a: 15px 0px; + +$padding-social-a: 10px 5px; + +$navbar-margin-a-btn: 15px 0px; +$navbar-margin-a-btn-round: 16px 0px; + +$navbar-padding-a-icons: 6px 15px; +$navbar-margin-a-icons: 6px 3px; + +$navbar-padding-base: 0.625rem; +//$navbar-margin-brand: 5px 0px; + +$navbar-margin-brand-icons: 12px auto; +$navbar-margin-btn: 15px 3px; + +$height-icon-sm: 32px; +$width-icon-sm: 32px; +$padding-icon-sm: 4px; +$border-radius-icon-sm: 7px; + +$height-icon-message: 40px; +$width-icon-message: 40px; + +$height-icon-message-sm: 20px; +$width-icon-message-sm: 20px; + +$white-navbar: rgba(#FFFFFF, .96); +$primary-navbar: rgba(#34ACDC, .98); +$info-navbar: rgba(#5BCAFF, .98); +$success-navbar: rgba(#4CD964, .98); +$warning-navbar: rgba(#FF9500, .98); +$danger-navbar: rgba(#FF4C40, .98); + +$topbar-x: topbar-x !default; +$topbar-back: topbar-back !default; +$bottombar-x: bottombar-x !default; +$bottombar-back: bottombar-back !default; + +//Nucleo Icons + +$nc-font-path: '../fonts' !default; +$nc-font-size-base: 14px !default; +$nc-css-prefix: now-ui !default; +$nc-background-color: #eee !default; +$nc-li-width: (30em / 14) !default; +$nc-padding-width: (1em/3) !default; + +// Social icons color +$social-twitter: #55acee !default; +$social-twitter-state-color: darken(#55acee, 5%) !default; + +$social-facebook: #3b5998 !default; +$social-facebook-state-color: darken(#3b5998, 5%) !default; + +$social-google: #dd4b39 !default; +$social-google-state-color: darken(#dd4b39, 5%) !default; + +$social-linkedin: #0077B5 !default; +$social-linkedin-state-color: darken(#0077B5, 5%) !default; diff --git a/web/libs/sass/now-ui-kit/mixins/_badges.scss b/web/libs/sass/now-ui-kit/mixins/_badges.scss new file mode 100644 index 00000000..115b805b --- /dev/null +++ b/web/libs/sass/now-ui-kit/mixins/_badges.scss @@ -0,0 +1,4 @@ +@mixin badge-color($color) { + border-color: $color; + color: $color; +} diff --git a/web/libs/sass/now-ui-kit/mixins/_buttons.scss b/web/libs/sass/now-ui-kit/mixins/_buttons.scss new file mode 100644 index 00000000..27570e24 --- /dev/null +++ b/web/libs/sass/now-ui-kit/mixins/_buttons.scss @@ -0,0 +1,160 @@ +// Mixin for generating new styles +@mixin btn-styles($btn-color, $btn-states-color) { + background-color: $btn-color; + + &:hover, + &:focus, + &:active, + &.active, + &:active:focus, + &:active:hover, + &.active:focus, + &.active:hover, + .show > &.dropdown-toggle, + .show > &.dropdown-toggle:focus, + .show > &.dropdown-toggle:hover { + background-color: $btn-states-color; + color: $white-color; + box-shadow: none; + } + + &:hover{ + box-shadow: 0 3px 8px 0 rgba(0,0,0, 0.17); + } + + &.disabled, + &:disabled, + &[disabled], + fieldset[disabled] & { + &, + &:hover, + &:focus, + &.focus, + &:active, + &.active { + background-color: $btn-color; + border-color: $btn-color; + } + } + + // btn-neutral style + @if $btn-color == $white-color{ + color: $primary-color; + + &.btn-danger{ + color: $danger-color; + + &:hover, + &:focus, + &:active{ + color: $danger-states-color; + } + } + + &.btn-info{ + color: $info-color; + + &:hover, + &:focus, + &:active{ + color: $info-states-color; + } + } + + &.btn-warning{ + color: $warning-color; + + &:hover, + &:focus, + &:active{ + color: $warning-states-color; + } + } + + &.btn-success{ + color: $success-color; + + &:hover, + &:focus, + &:active{ + color: $success-states-color; + } + } + + &.btn-default{ + color: $default-color; + + &:hover, + &:focus, + &:active{ + color: $default-states-color; + } + } + + &.active, + &:active, + &:active:focus, + &:active:hover, + &.active:focus, + &.active:hover, + .show > &.dropdown-toggle, + .show > &.dropdown-toggle:focus, + .show > &.dropdown-toggle:hover { + background-color: $white-color; + color: $primary-states-color; + box-shadow: none; + } + + &:hover, + &:focus{ + color: $primary-states-color; + + &:not(.nav-link){ + box-shadow: none; + } + + } + + } @else { + color: $white-color; + } + + &.btn-simple{ + color: $btn-color; + border-color: $btn-color; + + &:hover, + &:focus, + &:active{ + background-color: $transparent-bg; + color: $btn-states-color; + border-color: $btn-states-color; + box-shadow: none; + } + } + + &.btn-link{ + color: $btn-color; + + &:hover, + &:focus, + &:active{ + background-color: $transparent-bg; + color: $btn-states-color; + text-decoration: none; + box-shadow: none; + } + } +} + + +@mixin btn-size($padding-vertical, $padding-horizontal, $font-size, $border){ + font-size: $font-size; + border-radius: $border; + padding: $padding-vertical $padding-horizontal; + + &.btn-simple{ + padding: $padding-vertical - 1 $padding-horizontal - 1; + } + +} diff --git a/web/libs/sass/now-ui-kit/mixins/_datepicker.scss b/web/libs/sass/now-ui-kit/mixins/_datepicker.scss new file mode 100644 index 00000000..0b7e9070 --- /dev/null +++ b/web/libs/sass/now-ui-kit/mixins/_datepicker.scss @@ -0,0 +1,121 @@ +@mixin datepicker-colors($color) { + background-color: $color; + + th, + .day div, + table tr td span{ + color: $white-color; + } + + &:after{ + border-bottom-color: $color; + } + + &.datepicker-orient-top:after{ + border-top-color: $color; + } + + .dow{ + color: $datepicker-color-days; + } + + table tr td.old div, + table tr td.new div, + table tr td span.old, + table tr td span.new{ + color: $datepicker-color-old-new-days; + } + + table tr td span:hover, + table tr td span.focused{ + background:$opacity-1; + } + + .datepicker-switch:hover, + .prev:hover, + .next:hover, + tfoot tr th:hover { + background: $opacity-2; + } + + table tr td.active div, + table tr td.active:hover div, + table tr td.active.disabled div, + table tr td.active.disabled:hover div { + + background-color: $white-color; + color: $color; + } + + table tr td.day:hover div, + table tr td.day.focused div { + background: $opacity-2; + } + + table tr td.active:hover div, + table tr td.active:hover:hover div, + table tr td.active.disabled:hover div, + table tr td.active.disabled:hover:hover div, + table tr td.active:active div, + table tr td.active:hover:active div, + table tr td.active.disabled:active div, + table tr td.active.disabled:hover:active div, + table tr td.active.active div, + table tr td.active:hover.active div, + table tr td.active.disabled.active div, + table tr td.active.disabled:hover.active div, + table tr td.active.disabled div, + table tr td.active:hover.disabled div, + table tr td.active.disabled.disabled div, + table tr td.active.disabled:hover.disabled div, + table tr td.active[disabled] div, + table tr td.active:hover[disabled] div, + table tr td.active.disabled[disabled] div, + table tr td.active.disabled:hover[disabled] div, + table tr td span.active:hover, + table tr td span.active:hover:hover, + table tr td span.active.disabled:hover, + table tr td span.active.disabled:hover:hover, + table tr td span.active:active, + table tr td span.active:hover:active, + table tr td span.active.disabled:active, + table tr td span.active.disabled:hover:active, + table tr td span.active.active, + table tr td span.active:hover.active, + table tr td span.active.disabled.active, + table tr td span.active.disabled:hover.active, + table tr td span.active.disabled, + table tr td span.active:hover.disabled, + table tr td span.active.disabled.disabled, + table tr td span.active.disabled:hover.disabled, + table tr td span.active[disabled], + table tr td span.active:hover[disabled], + table tr td span.active.disabled[disabled], + table tr td span.active.disabled:hover[disabled]{ + background-color: $white-color; + } + + table tr td span.active:hover, + table tr td span.active:hover:hover, + table tr td span.active.disabled:hover, + table tr td span.active.disabled:hover:hover, + table tr td span.active:active, + table tr td span.active:hover:active, + table tr td span.active.disabled:active, + table tr td span.active.disabled:hover:active, + table tr td span.active.active, + table tr td span.active:hover.active, + table tr td span.active.disabled.active, + table tr td span.active.disabled:hover.active, + table tr td span.active.disabled, + table tr td span.active:hover.disabled, + table tr td span.active.disabled.disabled, + table tr td span.active.disabled:hover.disabled, + table tr td span.active[disabled], + table tr td span.active:hover[disabled], + table tr td span.active.disabled[disabled], + table tr td span.active.disabled:hover[disabled]{ + color: $color; + } + +} diff --git a/web/libs/sass/now-ui-kit/mixins/_dropdown.scss b/web/libs/sass/now-ui-kit/mixins/_dropdown.scss new file mode 100644 index 00000000..638743ee --- /dev/null +++ b/web/libs/sass/now-ui-kit/mixins/_dropdown.scss @@ -0,0 +1,24 @@ +@mixin dropdown-colors($brand-color, $dropdown-header-color, $dropdown-color, $background-color ) { + background-color: $brand-color; + + &:before{ + color: $brand-color; + } + + .dropdown-header:not([href]):not([tabindex]){ + color: $dropdown-header-color; + } + + .dropdown-item{ + color: $dropdown-color; + + &:hover, + &:focus{ + background-color: $background-color; + } + } + + .dropdown-divider{ + background-color: $background-color; + } +} diff --git a/web/libs/sass/now-ui-kit/mixins/_inputs.scss b/web/libs/sass/now-ui-kit/mixins/_inputs.scss new file mode 100644 index 00000000..2246982d --- /dev/null +++ b/web/libs/sass/now-ui-kit/mixins/_inputs.scss @@ -0,0 +1,205 @@ +@mixin input-size($padding-vertical, $padding-horizontal){ + padding: $padding-vertical $padding-horizontal; +} + +@mixin form-control-placeholder($color, $opacity){ + .form-control::-moz-placeholder{ + color: $color; + @include opacity(1); + } + .form-control:-moz-placeholder{ + color: $color; + @include opacity(1); + } + .form-control::-webkit-input-placeholder{ + color: $color; + @include opacity(1); + } + .form-control:-ms-input-placeholder{ + color: $color; + @include opacity(1); + } +} + +@mixin light-form(){ + border-radius: 0; + border:0; + padding: 0; + background-color: transparent; + +} + + +@mixin input-lg-padding($padding-vertical, $padding-horizontal) { + .form-group.form-group-no-border.input-lg, + .input-group.form-group-no-border.input-lg{ + .input-group-addon{ + padding: $padding-vertical 0 $padding-vertical $padding-horizontal; + } + + .form-control{ + padding: $padding-vertical $padding-horizontal; + + & + .input-group-addon{ + padding: $padding-vertical $padding-horizontal $padding-vertical 0; + } + } + } + + .form-group.input-lg, + .input-group.input-lg{ + .form-control{ + padding: $padding-vertical - 1 $padding-horizontal - 1; + + & + .input-group-addon{ + padding: $padding-vertical - 1 $padding-horizontal - 1 $padding-vertical - 1 0; + } + } + + .input-group-addon{ + padding: $padding-vertical - 1 0 $padding-vertical $padding-horizontal - 1; + + & + .form-control{ + padding: $padding-vertical $padding-horizontal - 1 $padding-vertical $padding-horizontal - 3; + } + } + } +} + + + +@mixin input-base-padding($padding-vertical, $padding-horizontal) { + .form-group.form-group-no-border, + .input-group.form-group-no-border{ + .form-control{ + padding: $padding-vertical $padding-horizontal; + + & + .input-group-addon{ + padding: $padding-vertical $padding-horizontal $padding-vertical 0; + } + } + + .input-group-addon{ + padding: $padding-vertical 0 $padding-vertical $padding-horizontal; + } + } + + .form-group, + .input-group{ + .form-control{ + padding: $padding-vertical - 1 $padding-horizontal - 1 $padding-vertical - 1 $padding-horizontal - 1; + + & + .input-group-addon{ + padding: $padding-vertical - 1 $padding-horizontal - 1 $padding-vertical - 1 0; + } + } + + .input-group-addon{ + padding: $padding-vertical - 1 0 $padding-vertical - 1 $padding-horizontal - 1; + + & + .form-control, + & ~ .form-control{ + padding:$padding-vertical - 1 $padding-horizontal $padding-vertical $padding-horizontal - 3; + } + } + } +} + + +//color1 = $opacity-5 +//color2 = $opacity-8 +//color3 = $white-color +//color4 = $transparent-bg +//color5 = $opacity-1 +//color6 = $opacity-2 + + +@mixin input-coloured-bg($color1, $color2, $color3, $color4, $color5, $color6) { + @include form-control-placeholder(darken($color2, 8%), 1); + + .form-control{ + border-color: $color1; + color: $color2; + + &:focus{ + border-color: $color3; + background-color: $color4; + color: $color3; + } + } + + .has-success, + .has-danger{ + &:after{ + color: $color3; + } + } + + .has-danger{ + .form-control{ + background-color: $color4; + } + } + + .input-group-addon{ + background-color: $color4; + border-color: $color1; + color: $color2; + } + + .input-group-focus{ + .input-group-addon{ + background-color: $color4; + border-color: $color3; + color: $color3; + } + } + + .form-group.form-group-no-border, + .input-group.form-group-no-border{ + .form-control{ + background-color: $color5; + color: $color2; + + &:focus, + &:active, + &:active{ + background-color: $color6; + color: $color3; + } + } + + .form-control + .input-group-addon{ + background-color: $color5; + + &:focus, + &:active, + &:active{ + background-color: $color6; + color: $color3; + } + } + + .form-control{ + &:focus{ + & + .input-group-addon{ + background-color: $color6; + color: $color3; + } + } + } + + .input-group-addon{ + background-color: $color5; + border: none; + color: $color2; + } + + &.input-group-focus{ + .input-group-addon{ + background-color: $color6; + color: $color3; + } + } + } +} diff --git a/web/libs/sass/now-ui-kit/mixins/_modals.scss b/web/libs/sass/now-ui-kit/mixins/_modals.scss new file mode 100644 index 00000000..a7962848 --- /dev/null +++ b/web/libs/sass/now-ui-kit/mixins/_modals.scss @@ -0,0 +1,12 @@ +@mixin modal-colors($bg-color, $color) { + .modal-content{ + background-color: $bg-color; + color: $color; + } + + .modal-header .close{ + color: $color; + } + + +} diff --git a/web/libs/sass/now-ui-kit/mixins/_navbar.scss b/web/libs/sass/now-ui-kit/mixins/_navbar.scss new file mode 100644 index 00000000..167f5591 --- /dev/null +++ b/web/libs/sass/now-ui-kit/mixins/_navbar.scss @@ -0,0 +1,226 @@ +@mixin navbar-responsive() { + .navbar{ + .navbar-nav{ + margin-top: 53px; + + .nav-link{ + padding-top: 0.75rem; + padding-bottom: .75rem; + } + + &.navbar-logo{ + top: 0; + height: 53px; + } + } + + .dropdown.show .dropdown-menu, + .dropdown .dropdown-menu{ + background-color: transparent; + border: 0; + transition: none; + -webkit-box-shadow: none; + box-shadow: none; + width: auto; + margin: 0 1rem; + margin-bottom: 15px; + padding-top: 0; + height: 150px; + overflow-y: scroll; + + &:before{ + display: none; + } + } + + .dropdown{ + .dropdown-item{ + padding-left: 2.5rem; + } + + .dropdown-menu{ + display: none; + } + + &.show .dropdown-menu{ + display: block; + } + } + + .dropdown-menu .dropdown-item:focus, + .dropdown-menu .dropdown-item:hover{ + color: $white-color; + } + + .navbar-translate{ + width: 100%; + position: relative; + display: flex; + -ms-flex-pack: justify!important; + justify-content: space-between!important; + -ms-flex-align: center; + align-items: center; + @include transform-translate-x(0px); + @include transition (0.50s, cubic-bezier(0.685, 0.0473, 0.346, 1)); + } + + .navbar-toggler-bar{ + display: block; + position: relative; + width: 22px; + height: 1px; + border-radius: 1px; + background: $white-bg; + + & + .navbar-toggler-bar{ + margin-top: 7px; + } + + &.bar2{ + width: 17px; + transition: width .2s linear; + } + } + + &.bg-white:not(.navbar-transparent) .navbar-toggler-bar{ + background: $default-color; + } + + & .toggled .navbar-toggler-bar{ + width: 24px; + + & + .navbar-toggler-bar{ + margin-top: 5px; + } + } + + } + + .bar1, + .bar2, + .bar3 { + outline: 1px solid transparent; + } + .bar1 { + top: 0px; + @include bar-animation($topbar-back); + } + .bar2 { + opacity: 1; + } + .bar3 { + bottom: 0px; + @include bar-animation($bottombar-back); + } + .toggled .bar1 { + top: 6px; + @include bar-animation($topbar-x); + } + .toggled .bar2 { + opacity: 0; + } + .toggled .bar3 { + bottom: 6px; + @include bar-animation($bottombar-x); + } + + @include topbar-x-rotation(); + @include topbar-back-rotation(); + @include bottombar-x-rotation(); + @include bottombar-back-rotation(); + + @-webkit-keyframes fadeIn { + 0% {opacity: 0;} + 100% {opacity: 1;} + } + @-moz-keyframes fadeIn { + 0% {opacity: 0;} + 100% {opacity: 1;} + } + @keyframes fadeIn { + 0% {opacity: 0;} + 100% {opacity: 1;} + } +} + +@mixin navbar-collapse() { + .navbar-collapse{ + position: fixed; + display: block; + top: 0; + height: 100% !important; + width: 300px; + right: 0; + z-index: 1032; + visibility: visible; + background-color: #999; + overflow-y: visible; + border-top: none; + text-align: left; + + max-height: none !important; + + @include transform-translate-x(300px); + @include transition (0.50s, cubic-bezier(0.685, 0.0473, 0.346, 1)); + + &:before{ + background: $brand-primary; /* For browsers that do not support gradients */ + background: -webkit-linear-gradient($brand-primary 0%, #000 80%); /* For Safari 5.1 to 6.0 */ + background: -o-linear-gradient($brand-primary 0%, #000 80%); /* For Opera 11.1 to 12.0 */ + background: -moz-linear-gradient($brand-primary 0%, #000 80%); /* For Firefox 3.6 to 15 */ + background: linear-gradient($brand-primary 0%, #000 80%); /* Standard syntax (must be last) */ + @include opacity(.76); + + display: block; + content: ""; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: -1; + } + + .navbar-nav:not(.navbar-logo){ + .nav-link { + margin: 0 1rem; + margin-top: 0.3125rem; + + &:not(.btn){ + color: $white-color; + } + } + } + + .dropdown-menu .dropdown-item{ + color: $white-color; + } + } + + @include navbar-responsive(); + + + [class*="navbar-expand-"] .navbar-collapse{ + width: 300px; + } + + .wrapper{ + @include transition (0.50s, cubic-bezier(0.685, 0.0473, 0.346, 1)); + } + + #bodyClick{ + height: 100%; + width: 100%; + position: fixed; + opacity: 1; + top: 0; + left: auto; + right: 300px; + content: ""; + z-index: 9999; + overflow-x: hidden; + background-color: transparent; + @include transition (0.50s, cubic-bezier(0.685, 0.0473, 0.346, 1)); + } + +} diff --git a/web/libs/sass/now-ui-kit/mixins/_pages.scss b/web/libs/sass/now-ui-kit/mixins/_pages.scss new file mode 100644 index 00000000..713dfd36 --- /dev/null +++ b/web/libs/sass/now-ui-kit/mixins/_pages.scss @@ -0,0 +1,7 @@ +@mixin linear-gradient($color1, $color2){ + background: $color1; /* For browsers that do not support gradients */ + background: -webkit-linear-gradient(90deg, $color1 , $color2); /* For Safari 5.1 to 6.0 */ + background: -o-linear-gradient(90deg, $color1, $color2); /* For Opera 11.1 to 12.0 */ + background: -moz-linear-gradient(90deg, $color1, $color2); /* For Firefox 3.6 to 15 */ + background: linear-gradient(0deg, $color1 , $color2); /* Standard syntax */ +} diff --git a/web/libs/sass/now-ui-kit/mixins/_popovers.scss b/web/libs/sass/now-ui-kit/mixins/_popovers.scss new file mode 100644 index 00000000..ef9727aa --- /dev/null +++ b/web/libs/sass/now-ui-kit/mixins/_popovers.scss @@ -0,0 +1,29 @@ +@mixin popover-color($color, $text-color) { + background-color: $color; + + .popover-body{ + color: $text-color; + } + + + &.bs-popover-right .arrow:after{ + border-right-color:$color; + } + + &.bs-popover-top .arrow:after{ + border-top-color:$color; + } + + &.bs-popover-bottom .arrow:after{ + border-bottom-color:$color; + } + + &.bs-popover-left .arrow:after{ + border-left-color:$color; + } + + .popover-header{ + color: $text-color; + opacity: .6; + } +} diff --git a/web/libs/sass/now-ui-kit/mixins/_transparency.scss b/web/libs/sass/now-ui-kit/mixins/_transparency.scss new file mode 100644 index 00000000..df088adf --- /dev/null +++ b/web/libs/sass/now-ui-kit/mixins/_transparency.scss @@ -0,0 +1,8 @@ +// Opacity + +@mixin opacity($opacity) { + opacity: $opacity; + // IE8 filter + $opacity-ie: ($opacity * 100); + filter: #{alpha(opacity=$opacity-ie)}; +} diff --git a/web/libs/sass/now-ui-kit/mixins/_vendor-prefixes.scss b/web/libs/sass/now-ui-kit/mixins/_vendor-prefixes.scss new file mode 100644 index 00000000..a8708a5b --- /dev/null +++ b/web/libs/sass/now-ui-kit/mixins/_vendor-prefixes.scss @@ -0,0 +1,160 @@ +@mixin box-shadow($shadow...) { + -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1 + box-shadow: $shadow; +} + +@mixin transition-input-focus-color() { + -webkit-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + -moz-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + -o-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + -ms-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; +} + + +@mixin transition($time, $type){ + -webkit-transition: all $time $type; + -moz-transition: all $time $type; + -o-transition: all $time $type; + -ms-transition: all $time $type; + transition: all $time $type; +} + +@mixin rotate-180(){ + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} + + +@mixin transform-translate-x($value){ + -webkit-transform: translate3d($value, 0, 0); + -moz-transform: translate3d($value, 0, 0); + -o-transform: translate3d($value, 0, 0); + -ms-transform: translate3d($value, 0, 0); + transform: translate3d($value, 0, 0); +} + +@mixin transform-translate-y($value){ + -webkit-transform: translate3d(0,$value,0); + -moz-transform: translate3d(0,$value,0); + -o-transform: translate3d(0,$value,0); + -ms-transform: translate3d(0,$value,0); + transform: translate3d(0,$value,0); +} + +@mixin bar-animation($type){ + -webkit-animation: $type 500ms linear 0s; + -moz-animation: $type 500ms linear 0s; + animation: $type 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; +} + +@mixin topbar-x-rotation(){ + @keyframes topbar-x { + 0% {top: 0px; transform: rotate(0deg); } + 45% {top: 6px; transform: rotate(145deg); } + 75% {transform: rotate(130deg); } + 100% {transform: rotate(135deg); } + } + @-webkit-keyframes topbar-x { + 0% {top: 0px; -webkit-transform: rotate(0deg); } + 45% {top: 6px; -webkit-transform: rotate(145deg); } + 75% {-webkit-transform: rotate(130deg); } + 100% { -webkit-transform: rotate(135deg); } + } + @-moz-keyframes topbar-x { + 0% {top: 0px; -moz-transform: rotate(0deg); } + 45% {top: 6px; -moz-transform: rotate(145deg); } + 75% {-moz-transform: rotate(130deg); } + 100% { -moz-transform: rotate(135deg); } + } +} + +@mixin topbar-back-rotation(){ + @keyframes topbar-back { + 0% { top: 6px; transform: rotate(135deg); } + 45% { transform: rotate(-10deg); } + 75% { transform: rotate(5deg); } + 100% { top: 0px; transform: rotate(0); } + } + + @-webkit-keyframes topbar-back { + 0% { top: 6px; -webkit-transform: rotate(135deg); } + 45% { -webkit-transform: rotate(-10deg); } + 75% { -webkit-transform: rotate(5deg); } + 100% { top: 0px; -webkit-transform: rotate(0); } + } + + @-moz-keyframes topbar-back { + 0% { top: 6px; -moz-transform: rotate(135deg); } + 45% { -moz-transform: rotate(-10deg); } + 75% { -moz-transform: rotate(5deg); } + 100% { top: 0px; -moz-transform: rotate(0); } + } +} + +@mixin bottombar-x-rotation(){ + @keyframes bottombar-x { + 0% {bottom: 0px; transform: rotate(0deg);} + 45% {bottom: 6px; transform: rotate(-145deg);} + 75% {transform: rotate(-130deg);} + 100% {transform: rotate(-135deg);} + } + @-webkit-keyframes bottombar-x { + 0% {bottom: 0px; -webkit-transform: rotate(0deg);} + 45% {bottom: 6px; -webkit-transform: rotate(-145deg);} + 75% {-webkit-transform: rotate(-130deg);} + 100% {-webkit-transform: rotate(-135deg);} + } + @-moz-keyframes bottombar-x { + 0% {bottom: 0px; -moz-transform: rotate(0deg);} + 45% {bottom: 6px; -moz-transform: rotate(-145deg);} + 75% {-moz-transform: rotate(-130deg);} + 100% {-moz-transform: rotate(-135deg);} + } +} + +@mixin bottombar-back-rotation{ + @keyframes bottombar-back { + 0% { bottom: 6px;transform: rotate(-135deg);} + 45% { transform: rotate(10deg);} + 75% { transform: rotate(-5deg);} + 100% { bottom: 0px;transform: rotate(0);} + } + @-webkit-keyframes bottombar-back { + 0% {bottom: 6px;-webkit-transform: rotate(-135deg);} + 45% {-webkit-transform: rotate(10deg);} + 75% {-webkit-transform: rotate(-5deg);} + 100% {bottom: 0px;-webkit-transform: rotate(0);} + } + @-moz-keyframes bottombar-back { + 0% {bottom: 6px;-moz-transform: rotate(-135deg);} + 45% {-moz-transform: rotate(10deg);} + 75% {-moz-transform: rotate(-5deg);} + 100% {bottom: 0px;-moz-transform: rotate(0);} + } + +} + + +@mixin nc-rotate($degrees, $rotation) { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); + -webkit-transform: rotate($degrees); + -moz-transform: rotate($degrees); + -ms-transform: rotate($degrees); + -o-transform: rotate($degrees); + transform: rotate($degrees); +} + +@mixin nc-flip($horiz, $vert, $rotation) { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); + -webkit-transform: scale($horiz, $vert); + -moz-transform: scale($horiz, $vert); + -ms-transform: scale($horiz, $vert); + -o-transform: scale($horiz, $vert); + transform: scale($horiz, $vert); +} diff --git a/web/libs/sass/now-ui-kit/plugins/_plugin-bootstrap-switch.scss b/web/libs/sass/now-ui-kit/plugins/_plugin-bootstrap-switch.scss new file mode 100644 index 00000000..08fe4856 --- /dev/null +++ b/web/libs/sass/now-ui-kit/plugins/_plugin-bootstrap-switch.scss @@ -0,0 +1,304 @@ +/* ======================================================================== + * bootstrap-switch - v3.3.2 + * http://www.bootstrap-switch.org + * ======================================================================== + * Copyright 2012-2013 Mattia Larentis + * http://www.apache.org/licenses/LICENSE-2.0 + */ + + + + + + + + + + + + + + //* IMPORTANT! Creative Tim Notice: this file has major changes to fit the NOW UI Kit's design. If you want to use the plugin as it was before our changes, please get the old files from http://www.bootstrap-switch.org + + + + + + + + + + + + + + + + + + + + + + + + + +.bootstrap-switch { + display: inline-block; + direction: ltr; + cursor: pointer; + border-radius: 30px; + border: 0; + position: relative; + text-align: left; + margin-bottom: 10px; + line-height: 8px; + width: 59px !important; + height: 22px; + outline: none; + z-index: 0; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + vertical-align: middle; + -webkit-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; + margin-right: 20px; + background: rgba($black-color, .2); +} + +.bootstrap-switch .bootstrap-switch-container { + display: inline-flex; + top: 0; + height: 22px; + border-radius: 4px; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + width: 100px !important; +} +.bootstrap-switch .bootstrap-switch-handle-on, +.bootstrap-switch .bootstrap-switch-handle-off, +.bootstrap-switch .bootstrap-switch-label { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; + display: inline-block !important; + height: 100%; + color: #fff; + padding: 6px 12px; + font-size: 11px; + text-indent: -5px; + line-height: 15px; + -webkit-transition: 0.25s ease-out; + transition: 0.25s ease-out; + +} +.bootstrap-switch .bootstrap-switch-handle-on, +.bootstrap-switch .bootstrap-switch-handle-off { + text-align: center; + z-index: 1; + float: left; + line-height: 11px; + width: 50% !important; +} +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-brown, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-brown { + color: #fff; + background: $brand-primary; +} +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-blue, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-blue { + color: #fff; + background: $brand-info; +} +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-green, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-green { + color: #fff; + background: $brand-success; +} +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-orange, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-orange { + background: $brand-warning; + color: #fff; +} +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-red, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-red { + color: #fff; + background: $brand-danger; +} +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default { + color: #fff; +} +.bootstrap-switch .bootstrap-switch-label { + text-align: center; + z-index: 100; + color: #333333; + background: #ffffff; + width: 22px !important; + height: 22px !important; + margin: 0px -11px; + border-radius: 20px; + position: absolute; + float: left; + top: 0; + left: 50%; + padding: 0; + box-shadow: 0 1px 11px rgba(0, 0, 0, 0.25); +} + +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label{ + background-color: rgba(23, 23, 23, .4); +} +.bootstrap-switch.bootstrap-switch-on:hover .bootstrap-switch-label{ + width: 27px !important; + margin-left: -16px; +} +.bootstrap-switch.bootstrap-switch-off:hover .bootstrap-switch-label{ + width: 27px !important; + margin-left: -11px; +} +.bootstrap-switch .bootstrap-switch-handle-on { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +.bootstrap-switch .bootstrap-switch-handle-off { + text-indent: 6px; +} +.bootstrap-switch input[type='radio'], +.bootstrap-switch input[type='checkbox'] { + position: absolute !important; + top: 0; + left: 0; + opacity: 0; + filter: alpha(opacity=0); + z-index: -1; +} +.bootstrap-switch input[type='radio'].form-control, +.bootstrap-switch input[type='checkbox'].form-control { + height: auto; +} +.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; +} +.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label { + padding: 6px 16px; + font-size: 18px; + line-height: 1.33; +} +.bootstrap-switch.bootstrap-switch-disabled, +.bootstrap-switch.bootstrap-switch-readonly, +.bootstrap-switch.bootstrap-switch-indeterminate { + cursor: default !important; +} +.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label, +.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label, +.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label { + opacity: 0.5; + filter: alpha(opacity=50); + cursor: default !important; +} +.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container { + -webkit-transition: margin-left 0.5s; + transition: margin-left 0.5s; +} +.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} +.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +.bootstrap-switch.bootstrap-switch-focused { + // 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); +} +// .bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label, +// .bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off .bootstrap-switch-label { +// border-bottom-right-radius: 3px; +// border-top-right-radius: 3px; +// } +// .bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label, +// .bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on .bootstrap-switch-label { +// border-bottom-left-radius: 3px; +// border-top-left-radius: 3px; +// } + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-container{ + margin-left: -2px !important; +} + +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-container{ + margin-left: -39px !important; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label{ + &:before{ + background-color: #FFFFFF; + } +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-red ~ .bootstrap-switch-default{ + background-color: $brand-danger; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-orange ~ .bootstrap-switch-default{ + background-color: $brand-warning; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-green ~ .bootstrap-switch-default{ + background-color: $brand-success; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-brown ~ .bootstrap-switch-default{ + background-color: $brand-primary; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-blue ~ .bootstrap-switch-default{ + background-color: $brand-info; +} + +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-red, +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-brown, +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-blue, +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-orange, +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-green{ + background-color: $light-gray; +} + +.bootstrap-switch-off .bootstrap-switch-handle-on{ + opacity: 0; +} + +.bootstrap-switch-on .bootstrap-switch-handle-off{ + opacity: 0; +} diff --git a/web/libs/sass/now-ui-kit/plugins/_plugin-datepicker.scss b/web/libs/sass/now-ui-kit/plugins/_plugin-datepicker.scss new file mode 100644 index 00000000..9b748330 --- /dev/null +++ b/web/libs/sass/now-ui-kit/plugins/_plugin-datepicker.scss @@ -0,0 +1,520 @@ +/*! + * Datepicker for Bootstrap v1.7.0-dev (https://github.com/uxsolutions/bootstrap-datepicker) + * + * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) + */ + +.datepicker { + padding: 8px 6px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + direction: ltr; + @include transform-translate-y(-40px); + transition: all 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) 0s, opacity 0.3s ease 0s, height 0s linear 0.35s; + + @include opacity(0); + visibility: hidden; + display: block; + width: 254px; + max-width: 254px; + + &.dropdown-menu:before{ + display: none; + } + + &.datepicker-primary{ + @include datepicker-colors($primary-color); + } +} +.datepicker-inline { + width: 220px; +} +.datepicker.datepicker-rtl { + direction: rtl; +} +.datepicker.datepicker-rtl.dropdown-menu { + left: auto; +} +.datepicker.datepicker-rtl table tr td span { + float: right; +} +.datepicker-dropdown { + top: 0; + left: 0; +} +.datepicker-dropdown:before { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid transparent; + border-top: 0; + border-bottom-color: rgba(0, 0, 0, 0.2); + position: absolute; +} +.datepicker-dropdown:after { + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #fff; + border-top: 0; + position: absolute; +} +.datepicker-dropdown.datepicker-orient-left:before { + left: 6px; +} +.datepicker-dropdown.datepicker-orient-left:after { + left: 7px; +} +.datepicker-dropdown.datepicker-orient-right:before { + right: 6px; +} +.datepicker-dropdown.datepicker-orient-right:after { + right: 7px; +} +.datepicker-dropdown.datepicker-orient-bottom:before { + top: -7px; +} +.datepicker-dropdown.datepicker-orient-bottom:after { + top: -6px; +} +.datepicker-dropdown.datepicker-orient-top:before { + bottom: -7px; + border-bottom: 0; + border-top: 7px solid transparent; +} +.datepicker-dropdown.datepicker-orient-top:after { + bottom: -6px; + border-bottom: 0; + border-top: 6px solid #fff; +} +.datepicker table { + margin: 0; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + width: 241px; + max-width: 241px; +} +.datepicker .day div, +.datepicker th { + @include transition($general-transition-time, $transition-ease); + text-align: center; + width: 30px; + height: 30px; + line-height: 2.2; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 50%; + font-weight: $font-weight-light; + font-size: $font-size-base; + border: none; + position: relative; + cursor: pointer; +} + +.datepicker th{ + color: $primary-color; +} + +.table-condensed > tbody > tr > td, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > td, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > thead > tr > th{ + padding: 2px; + text-align: center; + cursor: pointer; +} + +.table-striped .datepicker table tr td, +.table-striped .datepicker table tr th { + background-color: transparent; +} +.datepicker table tr td.day:hover div, +.datepicker table tr td.day.focused div { + background: #eee; + cursor: pointer; +} +.datepicker table tr td.old, +.datepicker table tr td.new { + color: $default-color; +} +.datepicker table tr td.disabled, +.datepicker table tr td.disabled:hover { + background: none; + color: $default-color ; + cursor: default; +} +.datepicker table tr td.highlighted { + background: #d9edf7; + border-radius: 0; +} +.datepicker table tr td.today, +.datepicker table tr td.today:hover, +.datepicker table tr td.today.disabled, +.datepicker table tr td.today.disabled:hover { + background-color: #fde19a; + background-image: -moz-linear-gradient(to bottom, #fdd49a, #fdf59a); + background-image: -ms-linear-gradient(to bottom, #fdd49a, #fdf59a); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a)); + background-image: -webkit-linear-gradient(to bottom, #fdd49a, #fdf59a); + background-image: -o-linear-gradient(to bottom, #fdd49a, #fdf59a); + background-image: linear-gradient(to bottom, #fdd49a, #fdf59a); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0); + border-color: #fdf59a #fdf59a #fbed50; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #000; +} +.datepicker table tr td.today:hover, +.datepicker table tr td.today:hover:hover, +.datepicker table tr td.today.disabled:hover, +.datepicker table tr td.today.disabled:hover:hover, +.datepicker table tr td.today:active, +.datepicker table tr td.today:hover:active, +.datepicker table tr td.today.disabled:active, +.datepicker table tr td.today.disabled:hover:active, +.datepicker table tr td.today.active, +.datepicker table tr td.today:hover.active, +.datepicker table tr td.today.disabled.active, +.datepicker table tr td.today.disabled:hover.active, +.datepicker table tr td.today.disabled, +.datepicker table tr td.today:hover.disabled, +.datepicker table tr td.today.disabled.disabled, +.datepicker table tr td.today.disabled:hover.disabled, +.datepicker table tr td.today[disabled], +.datepicker table tr td.today:hover[disabled], +.datepicker table tr td.today.disabled[disabled], +.datepicker table tr td.today.disabled:hover[disabled] { + background-color: #fdf59a; +} +.datepicker table tr td.today:active, +.datepicker table tr td.today:hover:active, +.datepicker table tr td.today.disabled:active, +.datepicker table tr td.today.disabled:hover:active, +.datepicker table tr td.today.active, +.datepicker table tr td.today:hover.active, +.datepicker table tr td.today.disabled.active, +.datepicker table tr td.today.disabled:hover.active { + background-color: #fbf069 \9; +} +.datepicker table tr td.today:hover:hover { + color: #000; +} +.datepicker table tr td.today.active:hover { + color: #fff; +} +.datepicker table tr td.range, +.datepicker table tr td.range:hover, +.datepicker table tr td.range.disabled, +.datepicker table tr td.range.disabled:hover { + background: #eee; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.datepicker table tr td.range.today, +.datepicker table tr td.range.today:hover, +.datepicker table tr td.range.today.disabled, +.datepicker table tr td.range.today.disabled:hover { + background-color: #f3d17a; + background-image: -moz-linear-gradient(to bottom, #f3c17a, #f3e97a); + background-image: -ms-linear-gradient(to bottom, #f3c17a, #f3e97a); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a)); + background-image: -webkit-linear-gradient(to bottom, #f3c17a, #f3e97a); + background-image: -o-linear-gradient(to bottom, #f3c17a, #f3e97a); + background-image: linear-gradient(to bottom, #f3c17a, #f3e97a); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0); + border-color: #f3e97a #f3e97a #edde34; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.datepicker table tr td.range.today:hover, +.datepicker table tr td.range.today:hover:hover, +.datepicker table tr td.range.today.disabled:hover, +.datepicker table tr td.range.today.disabled:hover:hover, +.datepicker table tr td.range.today:active, +.datepicker table tr td.range.today:hover:active, +.datepicker table tr td.range.today.disabled:active, +.datepicker table tr td.range.today.disabled:hover:active, +.datepicker table tr td.range.today.active, +.datepicker table tr td.range.today:hover.active, +.datepicker table tr td.range.today.disabled.active, +.datepicker table tr td.range.today.disabled:hover.active, +.datepicker table tr td.range.today.disabled, +.datepicker table tr td.range.today:hover.disabled, +.datepicker table tr td.range.today.disabled.disabled, +.datepicker table tr td.range.today.disabled:hover.disabled, +.datepicker table tr td.range.today[disabled], +.datepicker table tr td.range.today:hover[disabled], +.datepicker table tr td.range.today.disabled[disabled], +.datepicker table tr td.range.today.disabled:hover[disabled] { + background-color: #f3e97a; +} +.datepicker table tr td.range.today:active, +.datepicker table tr td.range.today:hover:active, +.datepicker table tr td.range.today.disabled:active, +.datepicker table tr td.range.today.disabled:hover:active, +.datepicker table tr td.range.today.active, +.datepicker table tr td.range.today:hover.active, +.datepicker table tr td.range.today.disabled.active, +.datepicker table tr td.range.today.disabled:hover.active { + background-color: #efe24b \9; +} +.datepicker table tr td.selected, +.datepicker table tr td.selected:hover, +.datepicker table tr td.selected.disabled, +.datepicker table tr td.selected.disabled:hover { + background-color: #9e9e9e; + background-image: -moz-linear-gradient(to bottom, #b3b3b3, #808080); + background-image: -ms-linear-gradient(to bottom, #b3b3b3, #808080); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080)); + background-image: -webkit-linear-gradient(to bottom, #b3b3b3, #808080); + background-image: -o-linear-gradient(to bottom, #b3b3b3, #808080); + background-image: linear-gradient(to bottom, #b3b3b3, #808080); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0); + border-color: #808080 #808080 #595959; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.datepicker table tr td.selected:hover, +.datepicker table tr td.selected:hover:hover, +.datepicker table tr td.selected.disabled:hover, +.datepicker table tr td.selected.disabled:hover:hover, +.datepicker table tr td.selected:active, +.datepicker table tr td.selected:hover:active, +.datepicker table tr td.selected.disabled:active, +.datepicker table tr td.selected.disabled:hover:active, +.datepicker table tr td.selected.active, +.datepicker table tr td.selected:hover.active, +.datepicker table tr td.selected.disabled.active, +.datepicker table tr td.selected.disabled:hover.active, +.datepicker table tr td.selected.disabled, +.datepicker table tr td.selected:hover.disabled, +.datepicker table tr td.selected.disabled.disabled, +.datepicker table tr td.selected.disabled:hover.disabled, +.datepicker table tr td.selected[disabled], +.datepicker table tr td.selected:hover[disabled], +.datepicker table tr td.selected.disabled[disabled], +.datepicker table tr td.selected.disabled:hover[disabled] { + background-color: #808080; +} +.datepicker table tr td.selected:active, +.datepicker table tr td.selected:hover:active, +.datepicker table tr td.selected.disabled:active, +.datepicker table tr td.selected.disabled:hover:active, +.datepicker table tr td.selected.active, +.datepicker table tr td.selected:hover.active, +.datepicker table tr td.selected.disabled.active, +.datepicker table tr td.selected.disabled:hover.active { + background-color: #666666 \9; +} +.datepicker table tr td.active div, +.datepicker table tr td.active:hover div, +.datepicker table tr td.active.disabled div, +.datepicker table tr td.active.disabled:hover div { + + background-color: $primary-color; + color: $white-color; + box-shadow: 0px 1px 10px 0px rgba(0, 0, 0, 0.2); +} +.datepicker table tr td.active:hover div, +.datepicker table tr td.active:hover:hover div, +.datepicker table tr td.active.disabled:hover div, +.datepicker table tr td.active.disabled:hover:hover div, +.datepicker table tr td.active:active div, +.datepicker table tr td.active:hover:active div, +.datepicker table tr td.active.disabled:active div, +.datepicker table tr td.active.disabled:hover:active div, +.datepicker table tr td.active.active div, +.datepicker table tr td.active:hover.active div, +.datepicker table tr td.active.disabled.active div, +.datepicker table tr td.active.disabled:hover.active div, +.datepicker table tr td.active.disabled div, +.datepicker table tr td.active:hover.disabled div, +.datepicker table tr td.active.disabled.disabled div, +.datepicker table tr td.active.disabled:hover.disabled div, +.datepicker table tr td.active[disabled] div, +.datepicker table tr td.active:hover[disabled] div, +.datepicker table tr td.active.disabled[disabled] div, +.datepicker table tr td.active.disabled:hover[disabled] div{ + background-color: $primary-color; +} +.datepicker table tr td.active:active, +.datepicker table tr td.active:hover:active, +.datepicker table tr td.active.disabled:active, +.datepicker table tr td.active.disabled:hover:active, +.datepicker table tr td.active.active, +.datepicker table tr td.active:hover.active, +.datepicker table tr td.active.disabled.active, +.datepicker table tr td.active.disabled:hover.active { + background-color: #003399 \9; +} +.datepicker table tr td span { + display: block; + width: 41px; + height: 41px; + line-height: 41px; + float: left; + margin: 1%; + font-size: $font-size-base; + cursor: pointer; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + border-radius: 50%; + +} +.datepicker table tr td span:hover, +.datepicker table tr td span.focused { + background: #eee; +} +.datepicker table tr td span.disabled, +.datepicker table tr td span.disabled:hover { + background: none; + color: $default-color; + cursor: default; +} +.datepicker table tr td span.active, +.datepicker table tr td span.active:hover, +.datepicker table tr td span.active.disabled, +.datepicker table tr td span.active.disabled:hover { + color: #fff; + background-color: $primary-color; +} +.datepicker table tr td span.active:hover, +.datepicker table tr td span.active:hover:hover, +.datepicker table tr td span.active.disabled:hover, +.datepicker table tr td span.active.disabled:hover:hover, +.datepicker table tr td span.active:active, +.datepicker table tr td span.active:hover:active, +.datepicker table tr td span.active.disabled:active, +.datepicker table tr td span.active.disabled:hover:active, +.datepicker table tr td span.active.active, +.datepicker table tr td span.active:hover.active, +.datepicker table tr td span.active.disabled.active, +.datepicker table tr td span.active.disabled:hover.active, +.datepicker table tr td span.active.disabled, +.datepicker table tr td span.active:hover.disabled, +.datepicker table tr td span.active.disabled.disabled, +.datepicker table tr td span.active.disabled:hover.disabled, +.datepicker table tr td span.active[disabled], +.datepicker table tr td span.active:hover[disabled], +.datepicker table tr td span.active.disabled[disabled], +.datepicker table tr td span.active.disabled:hover[disabled] { + background-color: $primary-color; + box-shadow: 0px 1px 10px 0px rgba(0, 0, 0, 0.2); +} +.datepicker table tr td span.active:active, +.datepicker table tr td span.active:hover:active, +.datepicker table tr td span.active.disabled:active, +.datepicker table tr td span.active.disabled:hover:active, +.datepicker table tr td span.active.active, +.datepicker table tr td span.active:hover.active, +.datepicker table tr td span.active.disabled.active, +.datepicker table tr td span.active.disabled:hover.active { + background-color: #003399 \9; +} +.datepicker table tr td span.old, +.datepicker table tr td span.new { + color: $default-color; +} +.datepicker .datepicker-switch { + width: auto; + border-radius: $border-radius-small; +} +.datepicker .datepicker-switch, +.datepicker .prev, +.datepicker .next, +.datepicker tfoot tr th { + cursor: pointer; +} + +.datepicker{ + .prev, + .next{ + width: 35px; + height: 35px; + } + + i{ + position: relative; + top: 2px; + } + + .prev i{ + left: -1px; + } + + .next i{ + right: -1px; + } +} + +.datepicker .datepicker-switch:hover, +.datepicker .prev:hover, +.datepicker .next:hover, +.datepicker tfoot tr th:hover { + background: #eee; +} +.datepicker .prev.disabled, +.datepicker .next.disabled { + visibility: hidden; +} +.datepicker .cw { + font-size: 10px; + width: 12px; + padding: 0 2px 0 5px; + vertical-align: middle; +} +.input-append.date .add-on, +.input-prepend.date .add-on { + cursor: pointer; +} +.input-append.date .add-on i, +.input-prepend.date .add-on i { + margin-top: 3px; +} +.input-daterange input { + text-align: center; +} +.input-daterange input:first-child { + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} +.input-daterange input:last-child { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} +.input-daterange .add-on { + display: inline-block; + width: auto; + min-width: 16px; + height: 18px; + padding: 4px 5px; + font-weight: normal; + line-height: 18px; + text-align: center; + text-shadow: 0 1px 0 #fff; + vertical-align: middle; + background-color: #eee; + border: 1px solid #ccc; + margin-left: -5px; + margin-right: -5px; +} diff --git a/web/libs/sass/now-ui-kit/plugins/_plugin-nouislider.scss b/web/libs/sass/now-ui-kit/plugins/_plugin-nouislider.scss new file mode 100644 index 00000000..9f28c481 --- /dev/null +++ b/web/libs/sass/now-ui-kit/plugins/_plugin-nouislider.scss @@ -0,0 +1,351 @@ +/*! nouislider - 9.1.0 - 2016-12-10 16:00:32 */ + + +/* Functional styling; + * These styles are required for noUiSlider to function. + * You don't need to change these rules to apply your design. + */ +.noUi-target, +.noUi-target * { +-webkit-touch-callout: none; +-webkit-tap-highlight-color: rgba(0,0,0,0); +-webkit-user-select: none; +-ms-touch-action: none; + touch-action: none; +-ms-user-select: none; +-moz-user-select: none; + user-select: none; +-moz-box-sizing: border-box; + box-sizing: border-box; +} +.noUi-target { + position: relative; + direction: ltr; +} +.noUi-base { + width: 100%; + height: 100%; + position: relative; + z-index: 1; /* Fix 401 */ +} +.noUi-connect { + position: absolute; + right: 0; + top: 0; + left: 0; + bottom: 0; +} +.noUi-origin { + position: absolute; + height: 0; + width: 0; +} +.noUi-handle { + position: relative; + z-index: 1; +} +.noUi-state-tap .noUi-connect, +.noUi-state-tap .noUi-origin { +-webkit-transition: top 0.3s, right 0.3s, bottom 0.3s, left 0.3s; + transition: top 0.3s, right 0.3s, bottom 0.3s, left 0.3s; +} +.noUi-state-drag * { + cursor: inherit !important; +} + +/* Painting and performance; + * Browsers can paint handles in their own layer. + */ +.noUi-base, +.noUi-handle { + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); +} + +/* Slider size and handle placement; + */ +.noUi-horizontal { + height: 1px; +} +.noUi-horizontal .noUi-handle { + border-radius: 50%; + background-color: $white-color; + box-shadow: 0 1px 13px 0 rgba(0, 0, 0, 0.2); + height:15px; + width:15px; + cursor:pointer; + margin-left: -10px; + margin-top: -7px; +} +.noUi-vertical { + width: 18px; +} +.noUi-vertical .noUi-handle { + width: 28px; + height: 34px; + left: -6px; + top: -17px; +} + +/* Styling; + */ +.noUi-target { + background-color: rgba(182, 182, 182, .3); + border-radius: 3px; +} +.noUi-connect { + background: $default-color; + border-radius: 3px; +-webkit-transition: background 450ms; + transition: background 450ms; +} + +/* Handles and cursors; + */ +.noUi-draggable { + cursor: ew-resize; +} +.noUi-vertical .noUi-draggable { + cursor: ns-resize; +} +.noUi-handle { + // border: 1px solid #D9D9D9; + border-radius: 3px; + background: #FFF; + cursor: default; + box-shadow: inset 0 0 1px #FFF, + inset 0 1px 7px #EBEBEB, + 0 3px 6px -3px #BBB; + -webkit-transition: $general-transition-time $transition-ease; + -moz-transition: $general-transition-time $transition-ease; + -ms-transition: $general-transition-time $transition-ease; + -o-transform: $general-transition-time $transition-ease; + transition: $general-transition-time $transition-ease; +} +.noUi-active { + -webkit-transform: scale3d(1.5,1.5,1); + -moz-transform: scale3d(1.5,1.5,1); + -ms-transform: scale3d(1.5,1.5,1); + -o-transform: scale3d(1.5,1.5,1); + transform: scale3d(1.5,1.5,1); +} + +/* Disabled state; + */ + +[disabled] .noUi-connect { + background: #B8B8B8; +} +[disabled].noUi-target, +[disabled].noUi-handle, +[disabled] .noUi-handle { + cursor: not-allowed; +} + +/* Base; + * + */ +.noUi-pips, +.noUi-pips * { +-moz-box-sizing: border-box; + box-sizing: border-box; +} +.noUi-pips { + position: absolute; + color: #999; +} + +/* Values; + * + */ +.noUi-value { + position: absolute; + text-align: center; +} +.noUi-value-sub { + color: #ccc; + font-size: 10px; +} + +/* Markings; + * + */ +.noUi-marker { + position: absolute; + background: #CCC; +} +.noUi-marker-sub { + background: #AAA; +} +.noUi-marker-large { + background: #AAA; +} + +/* Horizontal layout; + * + */ +.noUi-pips-horizontal { + padding: 10px 0; + height: 80px; + top: 100%; + left: 0; + width: 100%; +} +.noUi-value-horizontal { + -webkit-transform: translate3d(-50%,50%,0); + transform: translate3d(-50%,50%,0); +} + +.noUi-marker-horizontal.noUi-marker { + margin-left: -1px; + width: 2px; + height: 5px; +} +.noUi-marker-horizontal.noUi-marker-sub { + height: 10px; +} +.noUi-marker-horizontal.noUi-marker-large { + height: 15px; +} + +/* Vertical layout; + * + */ +.noUi-pips-vertical { + padding: 0 10px; + height: 100%; + top: 0; + left: 100%; +} +.noUi-value-vertical { + -webkit-transform: translate3d(0,50%,0); + transform: translate3d(0,50%,0); + padding-left: 25px; +} + +.noUi-marker-vertical.noUi-marker { + width: 5px; + height: 2px; + margin-top: -1px; +} +.noUi-marker-vertical.noUi-marker-sub { + width: 10px; +} +.noUi-marker-vertical.noUi-marker-large { + width: 15px; +} + +.noUi-tooltip { + display: block; + position: absolute; + border: 1px solid #D9D9D9; + border-radius: 3px; + background: #fff; + color: #000; + padding: 5px; + text-align: center; +} +.noUi-horizontal .noUi-tooltip { +-webkit-transform: translate(-50%, 0); + transform: translate(-50%, 0); + left: 50%; + bottom: 120%; +} +.noUi-vertical .noUi-tooltip { +-webkit-transform: translate(0, -50%); + transform: translate(0, -50%); + top: 50%; + right: 120%; +} + + +.slider { + + &.slider-neutral{ + & .noUi-connect, + &.noUi-connect{ + background-color: $white-color; + } + + &.noUi-target{ + background-color: rgba(255,255,255, .3); + } + + & .noUi-handle{ + background-color: $white-color; + } + } + + &.slider-primary{ + & .noUi-connect, + &.noUi-connect{ + background-color: $primary-color; + } + + &.noUi-target{ + background-color: $primary-color-opacity; + } + + & .noUi-handle{ + background-color: $brand-primary; + } + } + + &.slider-info{ + & .noUi-connect, + &.noUi-connect{ + background-color: $brand-info; + } + + &.noUi-target{ + background-color: $info-color-opacity; + } + + & .noUi-handle{ + background-color: $brand-info; + } + } + &.slider-success{ + & .noUi-connect, + &.noUi-connect{ + background-color: $brand-success; + } + + &.noUi-target{ + background-color: $success-color-opacity; + } + + & .noUi-handle{ + background-color: $brand-success; + } + } + &.slider-warning{ + & .noUi-connect, + &.noUi-connect{ + background-color: $brand-warning; + } + + &.noUi-target{ + background-color: $warning-color-opacity; + } + + & .noUi-handle{ + background-color: $brand-warning; + } + } + &.slider-danger{ + & .noUi-connect, + &.noUi-connect{ + background-color: $brand-danger; + } + + &.noUi-target{ + background-color: $danger-color-opacity; + } + + & .noUi-handle{ + background-color: $brand-danger; + } + } + +} diff --git a/web/pages/blocks/header-favicon.ejs b/web/pages/blocks/header-favicon.ejs new file mode 100644 index 00000000..b8f37bcc --- /dev/null +++ b/web/pages/blocks/header-favicon.ejs @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/web/pages/blocks/header-meta.ejs b/web/pages/blocks/header-meta.ejs new file mode 100644 index 00000000..8d5d9ae8 --- /dev/null +++ b/web/pages/blocks/header-meta.ejs @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/web/pages/blocks/header.ejs b/web/pages/blocks/header.ejs index a02bd0f6..4e58fa8d 100644 --- a/web/pages/blocks/header.ejs +++ b/web/pages/blocks/header.ejs @@ -1,10 +1,6 @@ <%-lang.Shinobi%> - - - - - +<% include header-meta.ejs %> @@ -14,18 +10,7 @@ - - - - - - - - - - - - +<% include header-favicon.ejs %> diff --git a/web/pages/blocks/mainpermissions.ejs b/web/pages/blocks/mainpermissions.ejs index 79d1d0e0..8ef0115d 100644 --- a/web/pages/blocks/mainpermissions.ejs +++ b/web/pages/blocks/mainpermissions.ejs @@ -1,19 +1,12 @@ -