Limit Login Attempts Reloaded - Version 2.25.0

Version Description

  • Dashboard widged added.
  • Security indicator added.
Download this release

Release Info

Developer wpchefgadget
Plugin Icon 128x128 Limit Login Attempts Reloaded
Version 2.25.0
Comparing to
See all releases

Code changes from version 2.24.1 to 2.25.0

assets/css/limit-login-attempts.css CHANGED
@@ -1 +1 @@
1
- .limit-login-page-settings .field-col{display:inline-block;margin-right:20px}.limit-login-page-settings .limit-login-log table{background-color:#fff}.limit-login-page-settings .limit-login-log table th,.limit-login-page-settings .limit-login-log table td{padding:10px}.limit-login-page-settings .limit-login-log table tr:nth-child(even){background-color:rgba(0,0,0,0.09)}.limit-login-page-settings #limit-login-app-setup-code{width:85%}.limit-login-page-settings .nav-tab-wrapper{position:relative}.limit-login-page-settings .nav-tab-wrapper .llar-failover-link{font-size:14px;float:right;line-height:2}.limit-login-page-settings .limit-login-app-dashboard .llar-table-scroll-wrap{max-height:400px;overflow-y:auto}.limit-login-page-settings .limit-login-app-dashboard .form-table{background-color:#fff;border:1px solid #f4f4f4;border-top:3px solid #3c8dbc;position:relative}.limit-login-page-settings .limit-login-app-dashboard .form-table.llar-preloader:before{content:"";display:block;width:100%;height:100%;background-color:rgba(255,255,255,0.7);z-index:999;position:absolute;top:0;left:0}.limit-login-page-settings .limit-login-app-dashboard .form-table th{font-weight:bold;border-bottom:1px solid #dbdbdb !important}.limit-login-page-settings .limit-login-app-dashboard .form-table th,.limit-login-page-settings .limit-login-app-dashboard .form-table td{padding:10px;border:1px solid #b9b9b9}.limit-login-page-settings .limit-login-app-dashboard .form-table th.llar-col-nowrap,.limit-login-page-settings .limit-login-app-dashboard .form-table td.llar-col-nowrap{white-space:nowrap}.limit-login-page-settings .limit-login-app-dashboard .form-table td button{line-height:1;margin-right:5px}.limit-login-page-settings .limit-login-app-dashboard .form-table td button:last-child{margin-right:0}.limit-login-page-settings .limit-login-app-dashboard .form-table td button .dashicons{vertical-align:middle}.limit-login-page-settings .limit-login-app-dashboard .form-table td.llar-app-log-actions{text-align:center}.limit-login-page-settings .limit-login-app-dashboard .form-table td.llar-app-log-actions .llar-app-log-action-btn{display:inline-block;line-height:20px;cursor:pointer}.limit-login-page-settings .limit-login-app-dashboard .form-table td.llar-app-log-actions .llar-app-log-action-btn i{vertical-align:middle}.limit-login-page-settings .limit-login-app-dashboard .form-table td.llar-app-log-actions .llar-app-log-action-btn:hover i{color:#3c8dbc}.limit-login-page-settings .limit-login-app-dashboard .form-table tr:nth-child(even){background-color:#f9f9f9}.limit-login-page-settings .limit-login-app-dashboard .llar-table-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:15px 0 5px}.limit-login-page-settings .limit-login-app-dashboard .llar-table-header h3{margin:0}.limit-login-page-settings .limit-login-app-dashboard .llar-table-header .right-link{line-height:1.625}.limit-login-page-settings .limit-login-app-dashboard .llar-table-header .right-link a{font-size:14px}.limit-login-page-settings .limit-login-app-dashboard .llar-table-header .right-link .llar-tooltip{text-decoration:none;font-size:12px;display:inline-block}.limit-login-page-settings .limit-login-app-dashboard .llar-table-header .right-link .llar-tooltip:before{display:none}.limit-login-page-settings .limit-login-app-dashboard .llar-table-header .right-link .llar-tooltip:hover:before{display:block;right:0;left:auto}.limit-login-page-settings .limit-login-app-dashboard .llar-app-log-pagination>a{font-size:16px;line-height:1.625}.limit-login-page-settings .limit-login-app-dashboard .llar-app-log-pagination .spinner{float:none}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules .app-rules-col{-webkit-box-flex:0;-ms-flex:0 0 49%;flex:0 0 49%}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules .app-rules-col .form-table select{width:100%}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules .app-rules-col .form-table .origin{float:right;opacity:0.5}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules .app-rules-col .form-table .llar-app-acl-action-col{text-align:center}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules .app-rules-col .form-table .llar-app-rule-pass{background-color:#cffbe8}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules .app-rules-col .form-table .llar-app-rule-allow{background-color:#abdfff}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules .app-rules-col .form-table .llar-app-rule-deny{background-color:#fd2c2c3d}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules .app-rules-col .form-table .llar-app-acl-remove{color:crimson;border-color:crimson}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section{background-color:#fff;padding:15px;border:1px solid #b9b9b9;border-top:3px solid #3c8dbc}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-mode{display:inline-block;margin-right:5px;vertical-align:top}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-toggle-countries-list{-webkit-text-decoration-style:dotted;text-decoration-style:dotted;vertical-align:middle;line-height:1.6}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;max-height:400px;overflow-y:auto}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list:first-child{margin-top:0}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list .llar-country{-webkit-box-flex:0;-ms-flex:0 0 10%;flex:0 0 10%}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list .llar-country label{padding-bottom:10px;display:inline-block}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list.llar-all-countries-selected{display:inline;vertical-align:middle;overflow:hidden}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list.llar-all-countries-selected .llar-country{margin-bottom:0;display:inline-block;margin-right:10px}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list.llar-all-countries-selected .llar-country label{padding-bottom:0;white-space:nowrap}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list.llar-all-countries-list{display:none;margin:10px 0}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list.llar-all-countries-list.visible{display:-webkit-box;display:-ms-flexbox;display:flex;border-top:1px solid #dddada;padding-top:10px}.limit-login-page-settings .llar-app-notice{background-color:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);padding:15px;border-radius:3px;margin-top:20px;margin-bottom:20px;font-size:14px;border-left:5px solid #ffba00}.limit-login-page-settings .llar-app-notice.success{border-color:#46b450}.limit-login-page-settings .llar-app-notice p{font-size:inherit;margin:0 0 20px}.limit-login-page-settings .llar-app-notice p:last-child{margin-bottom:0}.limit-login-page-settings input[name="admin_notify_email"]{min-width:243px}.limit-login-page-settings .llar-protect-notice{font-size:15px;color:#848484;margin-left:10px}.limit-login-page-settings .llar-protect-notice a{color:#222222;text-decoration:none;border-bottom:1px dashed}.limit-login-page-settings .llar-show-app-fields{position:absolute;right:15px;top:15px;color:#bdbdbd}.limit-login-page-settings .llar-show-app-fields:hover{color:#222}.limit-login-page-settings .llar-app-field{display:none}.limit-login-page-settings .llar-app-field.active{display:table-row}.llar-notice-review,.llar-notice-notify{display:-webkit-box;display:-ms-flexbox;display:flex;padding:15px 20px 0 !important;border-left:4px solid #333 !important}.llar-notice-review .llar-review-image img,.llar-notice-notify .llar-review-image img{margin-top:10px;margin-bottom:20px}.llar-notice-review .llar-review-image span,.llar-notice-notify .llar-review-image span{font-size:80px;color:orange;width:80px;height:auto;margin-bottom:20px}.llar-notice-review .llar-review-info,.llar-notice-notify .llar-review-info{-webkit-box-flex:1;-ms-flex:1;flex:1;margin-left:30px}.llar-notice-review .llar-review-info .llar-buttons,.llar-notice-notify .llar-review-info .llar-buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.llar-notice-review .llar-review-info .llar-buttons li,.llar-notice-notify .llar-review-info .llar-buttons li{margin-right:10px}.llar-notice-review .llar-review-info .llar-buttons li .dashicons,.llar-notice-notify .llar-review-info .llar-buttons li .dashicons{margin-right:5px}.llar-accordion .ui-accordion-header{font-weight:bold;background:#778899;color:#fff}.llar-accordion .ui-accordion-header.ui-accordion-header-active{background:#87CEFA}.custom-app-tab{position:relative}.custom-app-tab .spinner{float:none}.custom-app-tab .llar-app-ajax-msg{font-size:13px;margin-top:5px;display:block}.custom-app-tab .llar-app-ajax-msg.error{color:red}.custom-app-tab .llar-app-ajax-msg.success{color:green}.custom-app-tab .llar-delete-app{color:#dc3232;position:absolute;bottom:15px;right:15px}.custom-app-tab .llar-delete-app:hover{opacity:0.8}.custom-app-tab .llar-why-use-premium-text{margin-top:20px}.custom-app-tab .llar-why-use-premium-text .title{font-weight:bold;font-size:16px;color:#4d4d4d}.custom-app-tab .llar-why-use-premium-text ul li .dashicons{color:#3ab54a;font-size:25px;width:25px;top:-2px;position:relative}#llar-progress-bar{position:fixed;top:0;height:6px;left:0;width:100%;z-index:999999;background-color:#eee}#llar-progress-bar span{height:100%;position:absolute;display:block;width:0;background-color:#00b357;-webkit-transition:width 0.4s;transition:width 0.4s}#llar-header-upgrade-message{text-align:center;background-color:#f5f0c0;color:#222;padding:10px;margin-left:-20px;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.2);box-shadow:0 0 3px rgba(0,0,0,0.2)}#llar-header-upgrade-message p{margin:0}#llar-header-upgrade-message p .dashicons{color:#f2a64c;margin-right:5px}.settings_page_limit-login-attempts .update-nag{display:none}#llar-welcome-page{padding:50px 0}#llar-welcome-page img{max-width:100%;height:auto}#llar-welcome-page .llar-welcome-page-container{width:100%;max-width:760px;margin:0 auto 30px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 0 4px rgba(0,0,0,0.1);box-shadow:0 0 4px rgba(0,0,0,0.1)}#llar-welcome-page .llar-welcome-page-container.llar-premium{border-top:5px solid #50c1cd}#llar-welcome-page .llar-welcome-page-container .llar-welcome-page-section{padding:20px;text-align:center}#llar-welcome-page .llar-welcome-page-container .llar-welcome-page-section .llar-logo{text-align:center;margin-top:20px;margin-bottom:30px}#llar-welcome-page .llar-welcome-page-container .llar-welcome-page-section h2{font-size:2.4em;line-height:1.4}#llar-welcome-page .llar-welcome-page-container .llar-welcome-page-section h3{font-size:1.5em;line-height:1.4}#llar-welcome-page .llar-welcome-page-container .llar-welcome-page-section p{font-size:17px;color:#444}#llar-welcome-page .llar-welcome-page-container .llar-welcome-page-video-wrap img{width:100%;height:auto;cursor:pointer}#llar-welcome-page .llar-welcome-page-features{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 15px;counter-reset:cnt1}#llar-welcome-page .llar-welcome-page-features .llar-feature-item{-webkit-box-flex:0;-ms-flex:0 0 24%;flex:0 0 24%;text-align:center;margin-bottom:40px;position:relative;padding-bottom:60px}#llar-welcome-page .llar-welcome-page-features .llar-feature-item:before{content:counter(cnt1);counter-increment:cnt1;position:absolute;left:50%;-webkit-transform:translatex(-50%);transform:translatex(-50%);bottom:0;font-size:1em;font-weight:600;width:40px;height:40px;line-height:40px;text-align:center;border-radius:50%;background-color:#ecedef;color:#979aaa}#llar-welcome-page .llar-welcome-page-features .llar-feature-item:after{position:absolute;content:'';left:-39%;width:69%;height:1px;bottom:1.4em;background-color:#ecedef}#llar-welcome-page .llar-welcome-page-features .llar-feature-item:nth-child(4n+1):after{display:none}#llar-welcome-page .llar-welcome-page-features .llar-feature-item .llar-feature-image{margin-bottom:15px}#llar-welcome-page .llar-welcome-page-features .llar-feature-item .llar-feature-info .llar-feature-title{font-weight:bold;margin-bottom:15px}#llar-welcome-page .llar-welcome-page-features .llar-feature-item .llar-feature-info .llar-feature-desc{color:#979aaa}@media (max-width: 768px){#llar-welcome-page .llar-welcome-page-features{display:block}}#llar-welcome-page .llar-why-recommend{text-align:left;font-size:17px}#llar-welcome-page .llar-why-recommend ul li span{margin-right:5px;width:auto;height:auto;font-size:25px;vertical-align:middle;color:green}#llar-welcome-page .llar-welcome-list{font-size:17px;text-align:left;line-height:1.4;list-style:none}#llar-welcome-page .llar-welcome-list li span{margin-right:10px;width:auto;height:auto;font-size:22px;vertical-align:top;color:orange}#llar-welcome-page .llar-upgrade-btn-wrap{padding:20px}#llar-welcome-page .llar-upgrade-btn-wrap a{display:inline-block;background-color:#e27800;color:#fff;font-size:22px;padding:20px;text-decoration:none;font-weight:600}#llar-welcome-page .llar-upgrade-btn-wrap a:hover{background-color:#af5d00}#llar-welcome-page .llar-upgrade-questions{font-size:17px}.dashboard_page_llar-welcome .update-nag,.dashboard_page_llar-welcome .notice,.toplevel_page_limit-login-attempts .update-nag,.toplevel_page_limit-login-attempts .notice{display:none}.dashboard_page_llar-welcome .video-container,.toplevel_page_limit-login-attempts .video-container{position:relative;padding-bottom:56.1%;height:0;overflow:hidden}.dashboard_page_llar-welcome .video-container iframe,.toplevel_page_limit-login-attempts .video-container iframe{position:absolute;top:0;left:0;width:100%;height:100%}.jconfirm .jconfirm-box div.jconfirm-closeIcon{top:-2px !important;right:-2px !important}.llar-tooltip{text-decoration:underline;-webkit-text-decoration-style:dotted;text-decoration-style:dotted;cursor:pointer;position:relative}.llar-tooltip:before{content:attr(data-text);position:absolute;width:200px;padding:5px;background-color:rgba(0,0,0,0.8);color:#fff;font-size:13px;top:100%;z-index:999;visibility:hidden;opacity:0;-webkit-transition:all .2s;transition:all .2s;font-weight:300;cursor:auto}.llar-tooltip:hover:before{visibility:visible;opacity:1}#toplevel_page_limit-login-attempts .wp-menu-image.svg{background-size:25px auto !important;margin-top:7px}#llar-dashboard-page{padding-top:10px}#llar-dashboard-page *{-webkit-box-sizing:border-box;box-sizing:border-box}#llar-dashboard-page ul,#llar-dashboard-page ol{margin-left:0}#llar-dashboard-page ul li,#llar-dashboard-page ol li{list-style-position:inside}#llar-dashboard-page .dashboard-header{background-color:#0071a0;color:#fff;text-align:center;padding:15px}#llar-dashboard-page .dashboard-header h1{color:#fff}#llar-dashboard-page .section-title{font-weight:bold;padding:15px;border-bottom:1px solid #e4e4e4;font-size:14px;text-align:left}#llar-dashboard-page .section-content{padding:15px;overflow:hidden}#llar-dashboard-page .dashboard-section-1{margin-bottom:20px;background-color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}#llar-dashboard-page .dashboard-section-1>[class^="info-box-"]{text-align:center;-webkit-box-flex:0;-ms-flex:0 0 33.333%;flex:0 0 33.333%;max-width:33.333%;border-right:1px solid #e4e4e4}#llar-dashboard-page .dashboard-section-1>[class^="info-box-"]:last-child{border:0}#llar-dashboard-page .dashboard-section-1>[class^="info-box-"] .title{font-weight:600;font-size:16px;line-height:1.5;margin-bottom:10px}#llar-dashboard-page .dashboard-section-1 .info-box-1 .chart{max-width:300px;position:relative;margin-bottom:15px;margin-left:auto;margin-right:auto}#llar-dashboard-page .dashboard-section-1 .info-box-1 .chart .llar-retries-count{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);font-size:28px;font-weight:bold}#llar-dashboard-page .dashboard-section-1 .info-box-1 .desc{font-size:15px}#llar-dashboard-page .dashboard-section-1 .info-box-1 .actions{margin-top:5px}#llar-dashboard-page .dashboard-section-1 .info-box-2 .llar-chart-wrap{width:100%;max-width:80%;margin:0 auto;clear:both}#llar-dashboard-page .dashboard-section-1 .info-box-2 .llar-chart-wrap canvas{height:300px}#llar-dashboard-page .dashboard-section-1 .info-box-2 .chart-stats-legend{text-align:center;margin-top:10px}#llar-dashboard-page .dashboard-section-1 .info-box-3{text-align:left}#llar-dashboard-page .dashboard-section-1 .info-box-3 .desc{margin-bottom:20px}#llar-dashboard-page .dashboard-section-1 .info-box-3 .actions{text-align:center;padding-top:20px}#llar-dashboard-page .dashboard-section-1 .info-box-3 .actions a{text-transform:uppercase;font-size:16px;margin-bottom:5px}#llar-dashboard-page .dashboard-section-1.custom .info-box-2{-webkit-box-flex:0;-ms-flex:0 0 66.666%;flex:0 0 66.666%;max-width:66.666%}#llar-dashboard-page .dashboard-section-2{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:20px}#llar-dashboard-page .dashboard-section-2>[class^="info-box-"]{-webkit-box-flex:0;-ms-flex:0 0 calc(50% - 10px);flex:0 0 calc(50% - 10px);min-height:100px;background-color:#fff;border:1px solid #e4e4e4;padding:15px}#llar-dashboard-page .dashboard-section-2>[class^="info-box-"]:last-child{margin-right:0}#llar-dashboard-page .dashboard-section-2 .info-box-1{padding:0}#llar-dashboard-page .dashboard-section-2 .info-box-1 .notifications-list{padding:0;margin:0}#llar-dashboard-page .dashboard-section-2 .info-box-1 .notifications-list li{margin:0;border-bottom:1px solid #e4e4e4}#llar-dashboard-page .dashboard-section-2 .info-box-1 .notifications-list li:last-child{border:0}#llar-dashboard-page .dashboard-section-2 .info-box-1 .notifications-list li a{text-decoration:none;padding:15px;font-size:15px;display:block}#llar-dashboard-page .dashboard-section-2 .info-box-1 .notifications-list li a:hover{background-color:#f9f9f9}#llar-dashboard-page .dashboard-section-2 .info-box-2{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}#llar-dashboard-page .dashboard-section-2 .info-box-2 .info-box-icon{-webkit-box-flex:0;-ms-flex:0 0 100px;flex:0 0 100px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-right:15px}#llar-dashboard-page .dashboard-section-2 .info-box-2 .info-box-icon .dashicons{color:#0073a0;font-size:50px;width:auto;height:auto}#llar-dashboard-page .dashboard-section-2 .info-box-2 .info-box-content{-webkit-box-flex:1;-ms-flex:1;flex:1}#llar-dashboard-page .dashboard-section-2 .info-box-2 .info-box-content .title{font-size:20px;font-weight:bold;margin-bottom:10px;line-height:1.5}#llar-dashboard-page .dashboard-section-2 .info-box-2 .info-box-content .desc{font-size:15px;margin-bottom:15px}#llar-dashboard-page .dashboard-section-2 .info-box-2 .info-box-content .actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#llar-dashboard-page .dashboard-section-3{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;background-color:#fff;margin-bottom:20px}#llar-dashboard-page .dashboard-section-3>[class^="info-box-"]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:30px 15px 30px 0;-webkit-box-flex:1;-ms-flex:1;flex:1;border-right:1px solid #e4e4e4}#llar-dashboard-page .dashboard-section-3>[class^="info-box-"] .info-box-icon{-webkit-box-flex:0;-ms-flex:0 0 100px;flex:0 0 100px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#llar-dashboard-page .dashboard-section-3>[class^="info-box-"] .info-box-icon .dashicons{color:#a1a2a2;font-size:60px;width:auto;height:auto}#llar-dashboard-page .dashboard-section-3>[class^="info-box-"] .info-box-content{-webkit-box-flex:1;-ms-flex:1;flex:1}#llar-dashboard-page .dashboard-section-3>[class^="info-box-"] .info-box-content .title{font-size:20px;font-weight:bold;margin-bottom:10px;line-height:1.3}#llar-dashboard-page .dashboard-section-3>[class^="info-box-"] .info-box-content .title a{text-decoration:none}#llar-dashboard-page .dashboard-section-3>[class^="info-box-"] .info-box-content .desc{font-size:15px;margin-bottom:15px}#llar-dashboard-page .dashboard-section-3>[class^="info-box-"] .info-box-content .actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#llar-dashboard-page .dashboard-section-4{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:20px}#llar-dashboard-page .dashboard-section-4>[class^="info-box-"]{-webkit-box-flex:0;-ms-flex:0 0 calc(50% - 10px);flex:0 0 calc(50% - 10px);min-height:100px;background-color:#fff;border:1px solid #e4e4e4;padding:15px}#llar-dashboard-page .dashboard-section-4>[class^="info-box-"]:last-child{margin-right:0}#llar-dashboard-page .dashboard-section-4 .info-box-1{padding:0}#llar-dashboard-page .dashboard-section-4 .info-box-1 .section-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#llar-dashboard-page .dashboard-section-4 .info-box-1 .section-title .section-title-info{color:#a7a7a7;font-weight:400}#llar-dashboard-page .dashboard-section-4 .info-box-1 .lockouts-by-country-table{width:100%;border-collapse:collapse}#llar-dashboard-page .dashboard-section-4 .info-box-1 .lockouts-by-country-table tr th,#llar-dashboard-page .dashboard-section-4 .info-box-1 .lockouts-by-country-table tr td{padding:10px;border:1px solid #cecece}#llar-dashboard-page .dashboard-section-4 .info-box-1 .lockouts-by-country-table tr th{background-color:#000;color:#fff;text-align:left}#llar-dashboard-page .dashboard-section-4 .info-box-1 .lockouts-by-country-table tr:nth-child(odd) td{background-color:#eff0ef}#llar-dashboard-page .dashboard-section-4 .info-box-1 .lockouts-by-country-table tr td .flag-icon{width:24px;vertical-align:middle;margin-right:10px}#llar-dashboard-page .dashboard-section-4 .info-box-1 .countries-table-info{color:#a7a7a7;font-weight:400;margin-top:5px;margin-bottom:0;float:left}#llar-dashboard-page .dashboard-section-4 .info-box-1 .countries-table-info-right{color:#2271b1;font-weight:400;margin-top:5px;margin-bottom:0;float:right}#llar-dashboard-page .dashboard-section-4 .info-box-2{padding:0}#llar-dashboard-page .dashboard-section-4 .info-box-2 .section-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#llar-dashboard-page .dashboard-section-4 .info-box-2 .section-title .section-title-info{color:#a7a7a7;font-weight:400}#llar-dashboard-page .dashboard-section-4 .info-box-2 .llar-chart-wrap{width:100%;max-width:80%;margin:0 auto;clear:both}#llar-dashboard-page .dashboard-section-4 .info-box-2 .llar-chart-wrap canvas{height:300px}
1
+ .limit-login-page-settings .field-col{display:inline-block;margin-right:20px}.limit-login-page-settings .limit-login-log table{background-color:#fff}.limit-login-page-settings .limit-login-log table th,.limit-login-page-settings .limit-login-log table td{padding:10px}.limit-login-page-settings .limit-login-log table tr:nth-child(even){background-color:rgba(0,0,0,0.09)}.limit-login-page-settings #limit-login-app-setup-code{width:85%}.limit-login-page-settings .nav-tab-wrapper{position:relative}.limit-login-page-settings .nav-tab-wrapper .llar-failover-link{font-size:14px;float:right;line-height:2}.limit-login-page-settings .limit-login-app-dashboard .llar-table-scroll-wrap{max-height:400px;overflow-y:auto}.limit-login-page-settings .limit-login-app-dashboard .form-table{background-color:#fff;border:1px solid #f4f4f4;border-top:3px solid #3c8dbc;position:relative}.limit-login-page-settings .limit-login-app-dashboard .form-table.llar-preloader:before{content:"";display:block;width:100%;height:100%;background-color:rgba(255,255,255,0.7);z-index:999;position:absolute;top:0;left:0}.limit-login-page-settings .limit-login-app-dashboard .form-table th{font-weight:bold;border-bottom:1px solid #dbdbdb !important}.limit-login-page-settings .limit-login-app-dashboard .form-table th,.limit-login-page-settings .limit-login-app-dashboard .form-table td{padding:10px;border:1px solid #b9b9b9}.limit-login-page-settings .limit-login-app-dashboard .form-table th.llar-col-nowrap,.limit-login-page-settings .limit-login-app-dashboard .form-table td.llar-col-nowrap{white-space:nowrap}.limit-login-page-settings .limit-login-app-dashboard .form-table td button{line-height:1;margin-right:5px}.limit-login-page-settings .limit-login-app-dashboard .form-table td button:last-child{margin-right:0}.limit-login-page-settings .limit-login-app-dashboard .form-table td button .dashicons{vertical-align:middle}.limit-login-page-settings .limit-login-app-dashboard .form-table td.llar-app-log-actions{text-align:center}.limit-login-page-settings .limit-login-app-dashboard .form-table td.llar-app-log-actions .llar-app-log-action-btn{display:inline-block;line-height:20px;cursor:pointer}.limit-login-page-settings .limit-login-app-dashboard .form-table td.llar-app-log-actions .llar-app-log-action-btn i{vertical-align:middle}.limit-login-page-settings .limit-login-app-dashboard .form-table td.llar-app-log-actions .llar-app-log-action-btn:hover i{color:#3c8dbc}.limit-login-page-settings .limit-login-app-dashboard .form-table tr:nth-child(even){background-color:#f9f9f9}.limit-login-page-settings .limit-login-app-dashboard .llar-table-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:15px 0 5px}.limit-login-page-settings .limit-login-app-dashboard .llar-table-header h3{margin:0}.limit-login-page-settings .limit-login-app-dashboard .llar-table-header .right-link{line-height:1.625}.limit-login-page-settings .limit-login-app-dashboard .llar-table-header .right-link a{font-size:14px}.limit-login-page-settings .limit-login-app-dashboard .llar-table-header .right-link .llar-tooltip{text-decoration:none;font-size:12px;display:inline-block}.limit-login-page-settings .limit-login-app-dashboard .llar-table-header .right-link .llar-tooltip:before{display:none}.limit-login-page-settings .limit-login-app-dashboard .llar-table-header .right-link .llar-tooltip:hover:before{display:block;right:0;left:auto}.limit-login-page-settings .limit-login-app-dashboard .llar-app-log-pagination>a{font-size:16px;line-height:1.625}.limit-login-page-settings .limit-login-app-dashboard .llar-app-log-pagination .spinner{float:none}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules .app-rules-col{-webkit-box-flex:0;-ms-flex:0 0 49%;flex:0 0 49%}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules .app-rules-col .form-table select{width:100%}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules .app-rules-col .form-table .origin{float:right;opacity:0.5}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules .app-rules-col .form-table .llar-app-acl-action-col{text-align:center}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules .app-rules-col .form-table .llar-app-rule-pass{background-color:#cffbe8}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules .app-rules-col .form-table .llar-app-rule-allow{background-color:#abdfff}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules .app-rules-col .form-table .llar-app-rule-deny{background-color:#fd2c2c3d}.limit-login-page-settings .limit-login-app-dashboard .llar-app-acl-rules .app-rules-col .form-table .llar-app-acl-remove{color:crimson;border-color:crimson}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section{background-color:#fff;padding:15px;border:1px solid #b9b9b9;border-top:3px solid #3c8dbc}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-mode{display:inline-block;margin-right:5px;vertical-align:top}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-toggle-countries-list{-webkit-text-decoration-style:dotted;text-decoration-style:dotted;vertical-align:middle;line-height:1.6}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;max-height:400px;overflow-y:auto}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list:first-child{margin-top:0}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list .llar-country{-webkit-box-flex:0;-ms-flex:0 0 10%;flex:0 0 10%}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list .llar-country label{padding-bottom:10px;display:inline-block}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list.llar-all-countries-selected{display:inline;vertical-align:middle;overflow:hidden}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list.llar-all-countries-selected .llar-country{margin-bottom:0;display:inline-block;margin-right:10px}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list.llar-all-countries-selected .llar-country label{padding-bottom:0;white-space:nowrap}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list.llar-all-countries-list{display:none;margin:10px 0}.limit-login-page-settings .limit-login-app-dashboard .llar-block-country-section .llar-block-country-list.llar-all-countries-list.visible{display:-webkit-box;display:-ms-flexbox;display:flex;border-top:1px solid #dddada;padding-top:10px}.limit-login-page-settings .llar-app-notice{background-color:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);padding:15px;border-radius:3px;margin-top:20px;margin-bottom:20px;font-size:14px;border-left:5px solid #ffba00}.limit-login-page-settings .llar-app-notice.success{border-color:#46b450}.limit-login-page-settings .llar-app-notice p{font-size:inherit;margin:0 0 20px}.limit-login-page-settings .llar-app-notice p:last-child{margin-bottom:0}.limit-login-page-settings input[name="admin_notify_email"]{min-width:243px}.limit-login-page-settings .llar-protect-notice{font-size:15px;color:#848484;margin-left:10px}.limit-login-page-settings .llar-protect-notice a{color:#222222;text-decoration:none;border-bottom:1px dashed}.limit-login-page-settings .llar-show-app-fields{position:absolute;right:15px;top:15px;color:#bdbdbd}.limit-login-page-settings .llar-show-app-fields:hover{color:#222}.limit-login-page-settings .llar-app-field{display:none}.limit-login-page-settings .llar-app-field.active{display:table-row}.llar-notice-review,.llar-notice-notify{display:-webkit-box;display:-ms-flexbox;display:flex;padding:15px 20px 0 !important;border-left:4px solid #333 !important}.llar-notice-review .llar-review-image img,.llar-notice-notify .llar-review-image img{margin-top:10px;margin-bottom:20px}.llar-notice-review .llar-review-image span,.llar-notice-notify .llar-review-image span{font-size:80px;color:orange;width:80px;height:auto;margin-bottom:20px}.llar-notice-review .llar-review-info,.llar-notice-notify .llar-review-info{-webkit-box-flex:1;-ms-flex:1;flex:1;margin-left:30px}.llar-notice-review .llar-review-info .llar-buttons,.llar-notice-notify .llar-review-info .llar-buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.llar-notice-review .llar-review-info .llar-buttons li,.llar-notice-notify .llar-review-info .llar-buttons li{margin-right:10px}.llar-notice-review .llar-review-info .llar-buttons li .dashicons,.llar-notice-notify .llar-review-info .llar-buttons li .dashicons{margin-right:5px}.llar-accordion .ui-accordion-header{font-weight:bold;background:#778899;color:#fff}.llar-accordion .ui-accordion-header.ui-accordion-header-active{background:#87CEFA}.custom-app-tab{position:relative}.custom-app-tab .spinner{float:none}.custom-app-tab .llar-app-ajax-msg{font-size:13px;margin-top:5px;display:block}.custom-app-tab .llar-app-ajax-msg.error{color:red}.custom-app-tab .llar-app-ajax-msg.success{color:green}.custom-app-tab .llar-delete-app{color:#dc3232;position:absolute;bottom:15px;right:15px}.custom-app-tab .llar-delete-app:hover{opacity:0.8}.custom-app-tab .llar-why-use-premium-text{margin-top:20px}.custom-app-tab .llar-why-use-premium-text .title{font-weight:bold;font-size:16px;color:#4d4d4d}.custom-app-tab .llar-why-use-premium-text ul li .dashicons{color:#3ab54a;font-size:25px;width:25px;top:-2px;position:relative}#llar-progress-bar{position:fixed;top:0;height:6px;left:0;width:100%;z-index:999999;background-color:#eee}#llar-progress-bar span{height:100%;position:absolute;display:block;width:0;background-color:#00b357;-webkit-transition:width 0.4s;transition:width 0.4s}#llar-header-upgrade-message{text-align:center;background-color:#f5f0c0;color:#222;padding:10px;margin-left:-20px;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.2);box-shadow:0 0 3px rgba(0,0,0,0.2)}#llar-header-upgrade-message p{margin:0}#llar-header-upgrade-message p .dashicons{color:#f2a64c;margin-right:5px}.settings_page_limit-login-attempts .update-nag{display:none}#llar-welcome-page{padding:50px 0}#llar-welcome-page img{max-width:100%;height:auto}#llar-welcome-page .llar-welcome-page-container{width:100%;max-width:760px;margin:0 auto 30px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 0 4px rgba(0,0,0,0.1);box-shadow:0 0 4px rgba(0,0,0,0.1)}#llar-welcome-page .llar-welcome-page-container.llar-premium{border-top:5px solid #50c1cd}#llar-welcome-page .llar-welcome-page-container .llar-welcome-page-section{padding:20px;text-align:center}#llar-welcome-page .llar-welcome-page-container .llar-welcome-page-section .llar-logo{text-align:center;margin-top:20px;margin-bottom:30px}#llar-welcome-page .llar-welcome-page-container .llar-welcome-page-section h2{font-size:2.4em;line-height:1.4}#llar-welcome-page .llar-welcome-page-container .llar-welcome-page-section h3{font-size:1.5em;line-height:1.4}#llar-welcome-page .llar-welcome-page-container .llar-welcome-page-section p{font-size:17px;color:#444}#llar-welcome-page .llar-welcome-page-container .llar-welcome-page-video-wrap img{width:100%;height:auto;cursor:pointer}#llar-welcome-page .llar-welcome-page-features{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 15px;counter-reset:cnt1}#llar-welcome-page .llar-welcome-page-features .llar-feature-item{-webkit-box-flex:0;-ms-flex:0 0 24%;flex:0 0 24%;text-align:center;margin-bottom:40px;position:relative;padding-bottom:60px}#llar-welcome-page .llar-welcome-page-features .llar-feature-item:before{content:counter(cnt1);counter-increment:cnt1;position:absolute;left:50%;-webkit-transform:translatex(-50%);transform:translatex(-50%);bottom:0;font-size:1em;font-weight:600;width:40px;height:40px;line-height:40px;text-align:center;border-radius:50%;background-color:#ecedef;color:#979aaa}#llar-welcome-page .llar-welcome-page-features .llar-feature-item:after{position:absolute;content:'';left:-39%;width:69%;height:1px;bottom:1.4em;background-color:#ecedef}#llar-welcome-page .llar-welcome-page-features .llar-feature-item:nth-child(4n+1):after{display:none}#llar-welcome-page .llar-welcome-page-features .llar-feature-item .llar-feature-image{margin-bottom:15px}#llar-welcome-page .llar-welcome-page-features .llar-feature-item .llar-feature-info .llar-feature-title{font-weight:bold;margin-bottom:15px}#llar-welcome-page .llar-welcome-page-features .llar-feature-item .llar-feature-info .llar-feature-desc{color:#979aaa}@media (max-width: 768px){#llar-welcome-page .llar-welcome-page-features{display:block}}#llar-welcome-page .llar-why-recommend{text-align:left;font-size:17px}#llar-welcome-page .llar-why-recommend ul li span{margin-right:5px;width:auto;height:auto;font-size:25px;vertical-align:middle;color:green}#llar-welcome-page .llar-welcome-list{font-size:17px;text-align:left;line-height:1.4;list-style:none}#llar-welcome-page .llar-welcome-list li span{margin-right:10px;width:auto;height:auto;font-size:22px;vertical-align:top;color:orange}#llar-welcome-page .llar-upgrade-btn-wrap{padding:20px}#llar-welcome-page .llar-upgrade-btn-wrap a{display:inline-block;background-color:#e27800;color:#fff;font-size:22px;padding:20px;text-decoration:none;font-weight:600}#llar-welcome-page .llar-upgrade-btn-wrap a:hover{background-color:#af5d00}#llar-welcome-page .llar-upgrade-questions{font-size:17px}.dashboard_page_llar-welcome .update-nag,.dashboard_page_llar-welcome .notice,.toplevel_page_limit-login-attempts .update-nag,.toplevel_page_limit-login-attempts .notice{display:none}.dashboard_page_llar-welcome .video-container,.toplevel_page_limit-login-attempts .video-container{position:relative;padding-bottom:56.1%;height:0;overflow:hidden}.dashboard_page_llar-welcome .video-container iframe,.toplevel_page_limit-login-attempts .video-container iframe{position:absolute;top:0;left:0;width:100%;height:100%}.jconfirm .jconfirm-box div.jconfirm-closeIcon{top:-2px !important;right:-2px !important}.llar-tooltip{text-decoration:underline;-webkit-text-decoration-style:dotted;text-decoration-style:dotted;cursor:pointer;position:relative}.llar-tooltip:before{content:attr(data-text);position:absolute;width:200px;padding:5px;background-color:rgba(0,0,0,0.8);color:#fff;font-size:13px;top:100%;z-index:999;visibility:hidden;opacity:0;-webkit-transition:all .2s;transition:all .2s;font-weight:300;cursor:auto}.llar-tooltip:hover:before{visibility:visible;opacity:1}#toplevel_page_limit-login-attempts .wp-menu-image.svg{background-size:25px auto !important;margin-top:7px}.llar-alert-icon-animation{-webkit-animation-duration:10s;animation-duration:10s;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-delay:3s;animation-delay:3s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-direction:normal;animation-direction:normal;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:running;animation-play-state:running;-webkit-animation-name:shake;animation-name:shake}#menu-settings li{position:relative}#menu-settings li .llar-alert-icon-animation{position:absolute;right:5px;top:7px;min-width:15px;line-height:15px;height:15px}@-webkit-keyframes shake{1%, 9%{-webkit-transform:translate3d(-1px, 0, 0);transform:translate3d(-1px, 0, 0)}2%, 8%{-webkit-transform:translate3d(2px, 0, 0);transform:translate3d(2px, 0, 0)}3%, 5%, 7%{-webkit-transform:translate3d(-3px, 0, 0);transform:translate3d(-3px, 0, 0)}4%, 6%{-webkit-transform:translate3d(3px, 0, 0);transform:translate3d(3px, 0, 0)}}@keyframes shake{1%, 9%{-webkit-transform:translate3d(-1px, 0, 0);transform:translate3d(-1px, 0, 0)}2%, 8%{-webkit-transform:translate3d(2px, 0, 0);transform:translate3d(2px, 0, 0)}3%, 5%, 7%{-webkit-transform:translate3d(-3px, 0, 0);transform:translate3d(-3px, 0, 0)}4%, 6%{-webkit-transform:translate3d(3px, 0, 0);transform:translate3d(3px, 0, 0)}}#llar-dashboard-page{padding-top:10px}#llar-dashboard-page *{-webkit-box-sizing:border-box;box-sizing:border-box}#llar-dashboard-page ul,#llar-dashboard-page ol{margin-left:0}#llar-dashboard-page ul li,#llar-dashboard-page ol li{list-style-position:inside}#llar-dashboard-page .dashboard-header{background-color:#0071a0;color:#fff;text-align:center;padding:15px}#llar-dashboard-page .dashboard-header h1{color:#fff}#llar-dashboard-page .section-title{font-weight:bold;padding:15px;border-bottom:1px solid #e4e4e4;font-size:14px;text-align:left}#llar-dashboard-page .section-content{padding:15px;overflow:hidden}#llar-dashboard-page .dashboard-section-1{margin-bottom:20px;background-color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}#llar-dashboard-page .dashboard-section-1>[class^="info-box-"]{text-align:center;-webkit-box-flex:0;-ms-flex:0 0 33.333%;flex:0 0 33.333%;max-width:33.333%;border-right:1px solid #e4e4e4}#llar-dashboard-page .dashboard-section-1>[class^="info-box-"]:last-child{border:0}#llar-dashboard-page .dashboard-section-1>[class^="info-box-"] .title{font-weight:600;font-size:16px;line-height:1.5;margin-bottom:10px}#llar-dashboard-page .dashboard-section-1 .info-box-1 .chart{max-width:300px;position:relative;margin-bottom:15px;margin-left:auto;margin-right:auto}#llar-dashboard-page .dashboard-section-1 .info-box-1 .chart .llar-retries-count{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);font-size:28px;font-weight:bold}#llar-dashboard-page .dashboard-section-1 .info-box-1 .desc{font-size:15px}#llar-dashboard-page .dashboard-section-1 .info-box-1 .actions{margin-top:5px}#llar-dashboard-page .dashboard-section-1 .info-box-2 .llar-chart-wrap{width:100%;max-width:80%;margin:0 auto;clear:both}#llar-dashboard-page .dashboard-section-1 .info-box-2 .llar-chart-wrap canvas{height:300px}#llar-dashboard-page .dashboard-section-1 .info-box-2 .chart-stats-legend{text-align:center;margin-top:10px}#llar-dashboard-page .dashboard-section-1 .info-box-3{text-align:left}#llar-dashboard-page .dashboard-section-1 .info-box-3 .desc{margin-bottom:20px}#llar-dashboard-page .dashboard-section-1 .info-box-3 .actions{text-align:center;padding-top:20px}#llar-dashboard-page .dashboard-section-1 .info-box-3 .actions a{text-transform:uppercase;font-size:16px;margin-bottom:5px}#llar-dashboard-page .dashboard-section-1.custom .info-box-2{-webkit-box-flex:0;-ms-flex:0 0 66.666%;flex:0 0 66.666%;max-width:66.666%}#llar-dashboard-page .dashboard-section-2{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:20px}#llar-dashboard-page .dashboard-section-2>[class^="info-box-"]{-webkit-box-flex:0;-ms-flex:0 0 calc(50% - 10px);flex:0 0 calc(50% - 10px);min-height:100px;background-color:#fff;border:1px solid #e4e4e4;padding:15px}#llar-dashboard-page .dashboard-section-2>[class^="info-box-"]:last-child{margin-right:0}#llar-dashboard-page .dashboard-section-2 .info-box-1{padding:0}#llar-dashboard-page .dashboard-section-2 .info-box-1 .notifications-list{padding:0;margin:0}#llar-dashboard-page .dashboard-section-2 .info-box-1 .notifications-list li{margin:0;border-bottom:1px solid #e4e4e4}#llar-dashboard-page .dashboard-section-2 .info-box-1 .notifications-list li:last-child{border:0}#llar-dashboard-page .dashboard-section-2 .info-box-1 .notifications-list li a{text-decoration:none;padding:15px;font-size:15px;display:block}#llar-dashboard-page .dashboard-section-2 .info-box-1 .notifications-list li a:hover{background-color:#f9f9f9}#llar-dashboard-page .dashboard-section-2 .info-box-2{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}#llar-dashboard-page .dashboard-section-2 .info-box-2 .info-box-icon{-webkit-box-flex:0;-ms-flex:0 0 100px;flex:0 0 100px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-right:15px}#llar-dashboard-page .dashboard-section-2 .info-box-2 .info-box-icon .dashicons{color:#0073a0;font-size:50px;width:auto;height:auto}#llar-dashboard-page .dashboard-section-2 .info-box-2 .info-box-content{-webkit-box-flex:1;-ms-flex:1;flex:1}#llar-dashboard-page .dashboard-section-2 .info-box-2 .info-box-content .title{font-size:20px;font-weight:bold;margin-bottom:10px;line-height:1.5}#llar-dashboard-page .dashboard-section-2 .info-box-2 .info-box-content .desc{font-size:15px;margin-bottom:15px}#llar-dashboard-page .dashboard-section-2 .info-box-2 .info-box-content .actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#llar-dashboard-page .dashboard-section-3{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;background-color:#fff;margin-bottom:20px}#llar-dashboard-page .dashboard-section-3>[class^="info-box-"]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:30px 15px 30px 0;-webkit-box-flex:1;-ms-flex:1;flex:1;border-right:1px solid #e4e4e4}#llar-dashboard-page .dashboard-section-3>[class^="info-box-"] .info-box-icon{-webkit-box-flex:0;-ms-flex:0 0 100px;flex:0 0 100px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#llar-dashboard-page .dashboard-section-3>[class^="info-box-"] .info-box-icon .dashicons{color:#a1a2a2;font-size:60px;width:auto;height:auto}#llar-dashboard-page .dashboard-section-3>[class^="info-box-"] .info-box-content{-webkit-box-flex:1;-ms-flex:1;flex:1}#llar-dashboard-page .dashboard-section-3>[class^="info-box-"] .info-box-content .title{font-size:20px;font-weight:bold;margin-bottom:10px;line-height:1.3}#llar-dashboard-page .dashboard-section-3>[class^="info-box-"] .info-box-content .title a{text-decoration:none}#llar-dashboard-page .dashboard-section-3>[class^="info-box-"] .info-box-content .desc{font-size:15px;margin-bottom:15px}#llar-dashboard-page .dashboard-section-3>[class^="info-box-"] .info-box-content .actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#llar-dashboard-page .dashboard-section-4{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:20px}#llar-dashboard-page .dashboard-section-4>[class^="info-box-"]{-webkit-box-flex:0;-ms-flex:0 0 calc(50% - 10px);flex:0 0 calc(50% - 10px);min-height:100px;background-color:#fff;border:1px solid #e4e4e4;padding:15px}#llar-dashboard-page .dashboard-section-4>[class^="info-box-"]:last-child{margin-right:0}#llar-dashboard-page .dashboard-section-4 .info-box-1{padding:0}#llar-dashboard-page .dashboard-section-4 .info-box-1 .section-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#llar-dashboard-page .dashboard-section-4 .info-box-1 .section-title .section-title-info{color:#a7a7a7;font-weight:400}#llar-dashboard-page .dashboard-section-4 .info-box-1 .lockouts-by-country-table{width:100%;border-collapse:collapse}#llar-dashboard-page .dashboard-section-4 .info-box-1 .lockouts-by-country-table tr th,#llar-dashboard-page .dashboard-section-4 .info-box-1 .lockouts-by-country-table tr td{padding:10px;border:1px solid #cecece}#llar-dashboard-page .dashboard-section-4 .info-box-1 .lockouts-by-country-table tr th{background-color:#000;color:#fff;text-align:left}#llar-dashboard-page .dashboard-section-4 .info-box-1 .lockouts-by-country-table tr:nth-child(odd) td{background-color:#eff0ef}#llar-dashboard-page .dashboard-section-4 .info-box-1 .lockouts-by-country-table tr td .flag-icon{width:24px;vertical-align:middle;margin-right:10px}#llar-dashboard-page .dashboard-section-4 .info-box-1 .countries-table-info{color:#a7a7a7;font-weight:400;margin-top:5px;margin-bottom:0;float:left}#llar-dashboard-page .dashboard-section-4 .info-box-1 .countries-table-info-right{color:#2271b1;font-weight:400;margin-top:5px;margin-bottom:0;float:right}#llar-dashboard-page .dashboard-section-4 .info-box-2{padding:0}#llar-dashboard-page .dashboard-section-4 .info-box-2 .section-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#llar-dashboard-page .dashboard-section-4 .info-box-2 .section-title .section-title-info{color:#a7a7a7;font-weight:400}#llar-dashboard-page .dashboard-section-4 .info-box-2 .llar-chart-wrap{width:100%;max-width:80%;margin:0 auto;clear:both}#llar-dashboard-page .dashboard-section-4 .info-box-2 .llar-chart-wrap canvas{height:300px}#llar-admin-dashboard-widgets .widget-title{padding-bottom:15px;border-bottom:1px solid #e4e4e4;font-size:14px;text-align:left}#llar-admin-dashboard-widgets .widget-content{overflow:hidden}#llar-admin-dashboard-widgets .llar-widget{margin-bottom:20px;background-color:#fff;text-align:center}#llar-admin-dashboard-widgets .llar-widget .chart{max-width:300px;position:relative;margin-bottom:15px;margin-left:auto;margin-right:auto}#llar-admin-dashboard-widgets .llar-widget .chart .llar-retries-count{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);font-size:28px;font-weight:bold}#llar-admin-dashboard-widgets .llar-widget .title{font-weight:600;font-size:16px;line-height:1.5;margin-bottom:10px}#llar-admin-dashboard-widgets .llar-widget .desc{font-size:15px}#llar-admin-dashboard-widgets .llar-widget .actions{margin-top:5px}#llar-admin-dashboard-widgets .llar-widget.widget-2 .llar-chart-wrap{width:100%;margin:0 auto;clear:both}#llar-admin-dashboard-widgets .llar-widget.widget-2 .llar-chart-wrap canvas{height:300px}#llar-admin-dashboard-widgets .llar-widget.widget-2 .chart-stats-legend{text-align:center;margin-top:10px}
assets/sass/_admin-dashboard-widgets.scss ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #llar-admin-dashboard-widgets {
2
+
3
+ .widget-title {
4
+ //font-weight: bold;
5
+ padding-bottom: 15px;
6
+ border-bottom: 1px solid #e4e4e4;
7
+ font-size: 14px;
8
+ text-align: left;
9
+ }
10
+ .widget-content {
11
+ overflow: hidden;
12
+ }
13
+
14
+ .llar-widget {
15
+ margin-bottom: 20px;
16
+ background-color: #fff;
17
+ text-align: center;
18
+
19
+ .chart {
20
+ //margin-bottom: 10px;
21
+ max-width: 300px;
22
+ //display: inline-block;
23
+ position: relative;
24
+ margin-bottom: 15px;
25
+ margin-left: auto;
26
+ margin-right: auto;
27
+
28
+ .llar-retries-count {
29
+ position: absolute;
30
+ top: 50%;
31
+ left: 50%;
32
+ transform: translate(-50%, -50%);
33
+ font-size: 28px;
34
+ font-weight: bold;
35
+ }
36
+ }
37
+
38
+ .title {
39
+ font-weight: 600;
40
+ font-size: 16px;
41
+ line-height: 1.5;
42
+ margin-bottom: 10px;
43
+ }
44
+
45
+ .desc {
46
+ font-size: 15px;
47
+ }
48
+
49
+ .actions {
50
+ margin-top: 5px;
51
+ }
52
+
53
+ &.widget-2 {
54
+
55
+ .llar-chart-wrap {
56
+ width: 100%;
57
+ margin: 0 auto;
58
+ clear: both;
59
+
60
+ canvas {
61
+ height: 300px;
62
+ }
63
+ }
64
+
65
+ .chart-stats-legend {
66
+ text-align: center;
67
+ margin-top: 10px;
68
+ }
69
+ }
70
+ }
71
+ }
assets/sass/limit-login-attempts.scss CHANGED
@@ -708,4 +708,48 @@
708
  }
709
  }
710
 
711
- @import "dashboard-page";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
708
  }
709
  }
710
 
711
+ .llar-alert-icon-animation {
712
+ animation-duration: 10s;
713
+ animation-timing-function: ease-out;
714
+ animation-delay: 3s;
715
+ animation-iteration-count: infinite;
716
+ animation-direction: normal;
717
+ animation-fill-mode: both;
718
+ animation-play-state: running;
719
+ animation-name: shake;
720
+ }
721
+
722
+ #menu-settings {
723
+ li {
724
+ position: relative;
725
+ .llar-alert-icon-animation {
726
+ position: absolute;
727
+ right: 5px;
728
+ top: 7px;
729
+ min-width: 15px;
730
+ line-height: 15px;
731
+ height: 15px;
732
+ }
733
+ }
734
+ }
735
+
736
+ @keyframes shake {
737
+ 1%, 9% {
738
+ transform: translate3d(-1px, 0, 0);
739
+ }
740
+
741
+ 2%, 8% {
742
+ transform: translate3d(2px, 0, 0);
743
+ }
744
+
745
+ 3%, 5%, 7% {
746
+ transform: translate3d(-3px, 0, 0);
747
+ }
748
+
749
+ 4%, 6% {
750
+ transform: translate3d(3px, 0, 0);
751
+ }
752
+ }
753
+
754
+ @import "dashboard-page";
755
+ @import "admin-dashboard-widgets";
core/LimitLoginAttempts.php CHANGED
@@ -129,13 +129,19 @@ class Limit_Login_Attempts {
129
 
130
  add_action( 'admin_print_scripts-toplevel_page_limit-login-attempts', array( $this, 'load_admin_scripts' ) );
131
  add_action( 'admin_print_scripts-settings_page_limit-login-attempts', array( $this, 'load_admin_scripts' ) );
 
132
 
133
  add_action( 'admin_init', array( $this, 'welcome_page_redirect' ), 9999 );
 
134
  add_action( 'admin_head', array( $this, 'welcome_page_hide_menu' ) );
135
 
 
 
136
  add_action( 'login_footer', array( $this, 'login_page_gdpr_message' ) );
137
  add_action( 'login_footer', array( $this, 'login_page_render_js' ), 9999 );
138
 
 
 
139
  register_activation_hook( LLA_PLUGIN_FILE, array( $this, 'activation' ) );
140
  }
141
 
@@ -147,6 +153,33 @@ class Limit_Login_Attempts {
147
  set_transient( 'llar_welcome_redirect', true, 30 );
148
  }
149
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
150
  /**
151
  * Redirect to Welcome page after installed
152
  */
@@ -617,7 +650,7 @@ class Limit_Login_Attempts {
617
 
618
  add_menu_page(
619
  'Limit Login Attempts',
620
- 'Limit Login Attempts',
621
  'manage_options',
622
  $this->_options_page_slug,
623
  array( $this, 'options_page' ),
@@ -625,7 +658,7 @@ class Limit_Login_Attempts {
625
  );
626
  }
627
 
628
- add_options_page( 'Limit Login Attempts', 'Limit Login Attempts', 'manage_options', $this->_options_page_slug, array( $this, 'options_page' ) );
629
 
630
  add_dashboard_page(
631
  'Welcome to Limit Login Attempts Reloaded',
@@ -640,6 +673,31 @@ class Limit_Login_Attempts {
640
  return file_get_contents( LLA_PLUGIN_DIR . '/assets/img/logo.svg' );
641
  }
642
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
643
  /**
644
  * Get the correct options page URI
645
  *
129
 
130
  add_action( 'admin_print_scripts-toplevel_page_limit-login-attempts', array( $this, 'load_admin_scripts' ) );
131
  add_action( 'admin_print_scripts-settings_page_limit-login-attempts', array( $this, 'load_admin_scripts' ) );
132
+ add_action( 'admin_print_scripts-index.php', array( $this, 'load_admin_scripts' ) );
133
 
134
  add_action( 'admin_init', array( $this, 'welcome_page_redirect' ), 9999 );
135
+ add_action( 'admin_init', array( $this, 'setup_cookie' ), 10 );
136
  add_action( 'admin_head', array( $this, 'welcome_page_hide_menu' ) );
137
 
138
+ add_action( 'admin_menu', array( $this, 'setting_menu_alert_icon' ) );
139
+
140
  add_action( 'login_footer', array( $this, 'login_page_gdpr_message' ) );
141
  add_action( 'login_footer', array( $this, 'login_page_render_js' ), 9999 );
142
 
143
+ add_action( 'wp_dashboard_setup', array( $this, 'register_dashboard_widgets' ) );
144
+
145
  register_activation_hook( LLA_PLUGIN_FILE, array( $this, 'activation' ) );
146
  }
147
 
153
  set_transient( 'llar_welcome_redirect', true, 30 );
154
  }
155
 
156
+ public function setup_cookie() {
157
+
158
+ if (empty($_GET['page']) || $_GET['page'] !== $this->_options_page_slug) return;
159
+
160
+ $cookie_name = 'llar_menu_alert_icon_shown';
161
+
162
+ if (empty($_COOKIE[$cookie_name])) {
163
+ setcookie($cookie_name, '1', time() + 24 * 3600);
164
+ }
165
+ }
166
+
167
+ public function register_dashboard_widgets() {
168
+ wp_add_dashboard_widget(
169
+ 'llar_stats_widget',
170
+ __( 'Limit Login Attempts Reloaded', 'limit-login-attempts-reloaded' ),
171
+ array( $this, 'dashboard_widgets_content' ),
172
+ null,
173
+ null,
174
+ 'normal',
175
+ 'high'
176
+ );
177
+ }
178
+
179
+ public function dashboard_widgets_content() {
180
+ include_once( LLA_PLUGIN_DIR . '/views/admin-dashboard-widgets.php' );
181
+ }
182
+
183
  /**
184
  * Redirect to Welcome page after installed
185
  */
650
 
651
  add_menu_page(
652
  'Limit Login Attempts',
653
+ 'Limit Login Attempts' . $this->menu_alert_icon(),
654
  'manage_options',
655
  $this->_options_page_slug,
656
  array( $this, 'options_page' ),
658
  );
659
  }
660
 
661
+ add_options_page( 'Limit Login Attempts', 'Limit Login Attempts' . $this->menu_alert_icon(), 'manage_options', $this->_options_page_slug, array( $this, 'options_page' ) );
662
 
663
  add_dashboard_page(
664
  'Welcome to Limit Login Attempts Reloaded',
673
  return file_get_contents( LLA_PLUGIN_DIR . '/assets/img/logo.svg' );
674
  }
675
 
676
+ private function menu_alert_icon() {
677
+
678
+ if( !empty( $_COOKIE['llar_menu_alert_icon_shown'] ) || $this->get_option( 'active_app' ) !== 'local')
679
+ return '';
680
+
681
+ $retries_count = 0;
682
+ $retries_stats = $this->get_option( 'retries_stats' );
683
+
684
+ if( $retries_stats && array_key_exists( date_i18n( 'Y-m-d' ), $retries_stats ) ) {
685
+ $retries_count = (int) $retries_stats[date_i18n( 'Y-m-d' )];
686
+ }
687
+
688
+ if( $retries_count < 100 ) return '';
689
+
690
+ return ' <span class="update-plugins count-1 llar-alert-icon-animation"><span class="plugin-count">!</span></span>';
691
+ }
692
+
693
+ public function setting_menu_alert_icon() {
694
+ global $menu;
695
+ if( !$this->get_option( 'show_top_level_menu_item' ) && !empty( $menu[80][0] ) ) {
696
+
697
+ $menu[80][0] .= $this->menu_alert_icon();
698
+ }
699
+ }
700
+
701
  /**
702
  * Get the correct options page URI
703
  *
limit-login-attempts-reloaded.php CHANGED
@@ -5,7 +5,7 @@ Description: Limit the rate of login attempts for each IP address.
5
  Author: Limit Login Attempts Reloaded
6
  Author URI: https://www.limitloginattempts.com/
7
  Text Domain: limit-login-attempts-reloaded
8
- Version: 2.24.1
9
 
10
  Copyright 2008 - 2012 Johan Eenfeldt, 2016 - 2022 Limit Login Attempts Reloaded
11
  */
5
  Author: Limit Login Attempts Reloaded
6
  Author URI: https://www.limitloginattempts.com/
7
  Text Domain: limit-login-attempts-reloaded
8
+ Version: 2.25.0
9
 
10
  Copyright 2008 - 2012 Johan Eenfeldt, 2016 - 2022 Limit Login Attempts Reloaded
11
  */
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.com/donate?hosted_button_id=FKD4MYFCMNVQQ
4
  Tags: brute force, login, security, firewall, protection
5
  Requires at least: 3.0
6
  Tested up to: 5.9
7
- Stable tag: 2.24.1
8
 
9
  Block excessive login attempts and protect your site against brute force attacks. Simple, yet powerful tools to improve site performance.
10
 
@@ -98,6 +98,10 @@ Please follow this link: <a href="https://www.limitloginattempts.com/resources/"
98
 
99
  == Changelog ==
100
 
 
 
 
 
101
  = 2.24.1 =
102
  * Fixed E_ERROR occurring in rare cases when the log table is corrupted.
103
 
4
  Tags: brute force, login, security, firewall, protection
5
  Requires at least: 3.0
6
  Tested up to: 5.9
7
+ Stable tag: 2.25.0
8
 
9
  Block excessive login attempts and protect your site against brute force attacks. Simple, yet powerful tools to improve site performance.
10
 
98
 
99
  == Changelog ==
100
 
101
+ = 2.25.0 =
102
+ * Dashboard widged added.
103
+ * Security indicator added.
104
+
105
  = 2.24.1 =
106
  * Fixed E_ERROR occurring in rare cases when the log table is corrupted.
107
 
views/admin-dashboard-widgets.php ADDED
@@ -0,0 +1,250 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if (!defined('ABSPATH')) exit();
4
+
5
+ $active_app = ( $this->get_option( 'active_app' ) === 'custom' && $this->app ) ? 'custom' : 'local';
6
+
7
+ $retries_chart_title = '';
8
+ $retries_chart_desc = '';
9
+ $retries_chart_color = '';
10
+ $retries_chart_show_actions = false;
11
+
12
+ $api_stats = false;
13
+ $retries_count = 0;
14
+ if ($active_app === 'local') {
15
+
16
+ $retries_stats = $this->get_option('retries_stats');
17
+
18
+ if ($retries_stats) {
19
+ if (array_key_exists(date_i18n('Y-m-d'), $retries_stats)) {
20
+ $retries_count = (int)$retries_stats[date_i18n('Y-m-d')];
21
+ }
22
+ }
23
+
24
+ if ($retries_count === 0) {
25
+
26
+ $retries_chart_title = __('Hooray! Zero failed login attempts today', 'limit-login-attempts-reloaded');
27
+ $retries_chart_color = '#66CC66';
28
+ } else if ($retries_count < 100) {
29
+
30
+ $retries_chart_title = sprintf(_n('%d failed login attempt ', '%d failed login attempts ', $retries_count, 'limit-login-attempts-reloaded'), $retries_count);
31
+ $retries_chart_title .= __('today', 'limit-login-attempts-reloaded');
32
+ $retries_chart_desc = __('Your site might have been discovered by hackers', 'limit-login-attempts-reloaded');
33
+ $retries_chart_color = '#FFCC66';
34
+ } else {
35
+
36
+ $retries_chart_title = __('Warning: More than 100 failed login attempts today', 'limit-login-attempts-reloaded');
37
+ $retries_chart_desc = __('Your site is likely under a brute-force attack', 'limit-login-attempts-reloaded');
38
+ $retries_chart_color = '#FF6633';
39
+ $retries_chart_show_actions = true;
40
+ }
41
+
42
+ } else {
43
+
44
+ $api_stats = $this->app->stats();
45
+
46
+ if ($api_stats && !empty($api_stats['attempts']['count'])) {
47
+
48
+ $retries_count = (int)end($api_stats['attempts']['count']);
49
+ }
50
+
51
+ $retries_chart_title = __('Failed Login Attempts Today', 'limit-login-attempts-reloaded');
52
+ $retries_chart_desc = __('All failed login attempts have been neutralized in the cloud', 'limit-login-attempts-reloaded');
53
+ $retries_chart_color = '#66CC66';
54
+ }
55
+
56
+ ?>
57
+
58
+ <div id="llar-admin-dashboard-widgets">
59
+ <div class="llar-widget">
60
+ <div class="widget-content">
61
+ <div class="chart">
62
+ <canvas id="llar-attack-velocity-chart"></canvas>
63
+ <span class="llar-retries-count"><?php echo esc_html($retries_count); ?></span>
64
+ </div>
65
+ <script type="text/javascript">
66
+ (function () {
67
+
68
+ var ctx = document.getElementById('llar-attack-velocity-chart').getContext('2d');
69
+ var llar_retries_chart = new Chart(ctx, {
70
+ type: 'doughnut',
71
+ data: {
72
+ datasets: [{
73
+ data: [1],
74
+ value: <?php echo esc_js($retries_count); ?>,
75
+ backgroundColor: ['<?php echo esc_js($retries_chart_color); ?>'],
76
+ borderWidth: [0]
77
+ }]
78
+ },
79
+ options: {
80
+ responsive: true,
81
+ cutoutPercentage: 70,
82
+ title: {
83
+ display: false,
84
+ // text: 'Local Attack Velocity'
85
+ },
86
+ tooltips: {
87
+ enabled: false
88
+ },
89
+ layout: {
90
+ padding: {
91
+ // bottom: 40
92
+ }
93
+ },
94
+ valueLabel: {
95
+ display: true,
96
+ fontSize: 25,
97
+ color: '#3e76c1',
98
+ backgroundColor: 'rgba(0,0,0,0)',
99
+ bottomMarginPercentage: -6
100
+ },
101
+ }
102
+ });
103
+
104
+ })();
105
+ </script>
106
+ <div class="title"><?php echo esc_html($retries_chart_title); ?></div>
107
+ <div class="desc"><?php echo $retries_chart_desc; ?></div>
108
+ <?php if ($retries_chart_show_actions) : ?>
109
+ <div class="actions">
110
+ <ol>
111
+ <li><?php _e('Change your password to something more secure.', 'limit-login-attempts-reloaded'); ?></li>
112
+ <li><?php _e('Make sure WordPress and all your plugins are updated.', 'limit-login-attempts-reloaded'); ?></li>
113
+ <li><?php echo sprintf(__('<a href="%s" target="_blank">Update to Premium</a> Limit Login Attempts Reloaded.', 'limit-login-attempts-reloaded'), 'https://www.limitloginattempts.com/info.php?from=dashboard-widget'); ?></li>
114
+ </ol>
115
+ </div>
116
+ <?php endif; ?>
117
+ </div>
118
+ </div>
119
+ <div class="llar-widget widget-2">
120
+ <div class="widget-content">
121
+ <?php
122
+ $chart2_label = '';
123
+ $chart2_labels = array();
124
+ $chart2_datasets = array();
125
+
126
+ if ($active_app === 'custom') {
127
+
128
+ $stats_dates = array();
129
+ $stats_values = array();
130
+ $date_format = trim(get_option('date_format'), ' yY,._:;-/\\');
131
+ $date_format = str_replace('F', 'M', $date_format);
132
+
133
+ $dataset = array(
134
+ 'label' => __('Failed Login Attempts', 'limit-login-attempts-reloaded'),
135
+ 'data' => [],
136
+ 'backgroundColor' => 'rgb(54, 162, 235)',
137
+ 'borderColor' => 'rgb(54, 162, 235)',
138
+ 'fill' => false,
139
+ );
140
+
141
+ if ($api_stats && !empty($api_stats['attempts'])) {
142
+
143
+ foreach ($api_stats['attempts']['at'] as $timest) {
144
+
145
+ $stats_dates[] = date($date_format, $timest);
146
+ }
147
+
148
+ $chart2_label = __('Requests', 'limit-login-attempts-reloaded');
149
+ $chart2_labels = $stats_dates;
150
+
151
+ $dataset['data'] = $api_stats['attempts']['count'];
152
+ }
153
+
154
+ $chart2_datasets[] = $dataset;
155
+
156
+ } else {
157
+
158
+ $date_format = trim(get_option('date_format'), ' yY,._:;-/\\');
159
+ $date_format = str_replace('F', 'M', $date_format);
160
+
161
+ $retries_stats = $this->get_option('retries_stats');
162
+
163
+ if (is_array($retries_stats) && $retries_stats) {
164
+
165
+ $daterange = new DatePeriod(
166
+ new DateTime(key($retries_stats)),
167
+ new DateInterval('P1D'),
168
+ new DateTime()
169
+ );
170
+
171
+ $chart2_data = array();
172
+ foreach ($daterange as $date) {
173
+
174
+ $chart2_labels[] = $date->format($date_format);
175
+ $chart2_data[] = (!empty($retries_stats[$date->format("Y-m-d")])) ? $retries_stats[$date->format("Y-m-d")] : 0;
176
+ }
177
+
178
+ } else {
179
+
180
+ $chart2_labels[] = (new DateTime())->format($date_format);
181
+ $chart2_data[] = 0;
182
+ }
183
+
184
+
185
+ $chart2_datasets[] = array(
186
+ 'label' => __('Failed Login Attempts', 'limit-login-attempts-reloaded'),
187
+ 'data' => $chart2_data,
188
+ 'backgroundColor' => 'rgb(54, 162, 235)',
189
+ 'borderColor' => 'rgb(54, 162, 235)',
190
+ 'fill' => false,
191
+ );
192
+ }
193
+
194
+ ?>
195
+
196
+ <div class="llar-chart-wrap">
197
+ <canvas id="llar-api-requests-chart" style=""></canvas>
198
+ </div>
199
+
200
+ <script type="text/javascript">
201
+ (function () {
202
+
203
+ var ctx = document.getElementById('llar-api-requests-chart').getContext('2d');
204
+ var llar_stat_chart = new Chart(ctx, {
205
+ type: 'line',
206
+ data: {
207
+ labels: <?php echo json_encode($chart2_labels); ?>,
208
+ datasets: <?php echo json_encode($chart2_datasets); ?>
209
+ },
210
+ options: {
211
+ responsive: true,
212
+ maintainAspectRatio: false,
213
+ tooltips: {
214
+ mode: 'index',
215
+ intersect: false,
216
+ },
217
+ hover: {
218
+ mode: 'nearest',
219
+ intersect: true
220
+ },
221
+ scales: {
222
+ xAxes: [{
223
+ display: true,
224
+ scaleLabel: {
225
+ display: false
226
+ }
227
+ }],
228
+ yAxes: [{
229
+ display: true,
230
+ scaleLabel: {
231
+ display: false
232
+ },
233
+ ticks: {
234
+ beginAtZero: true,
235
+ userCallback: function (label, index, labels) {
236
+ if (Math.floor(label) === label) {
237
+ return label;
238
+ }
239
+ },
240
+ }
241
+ }]
242
+ }
243
+ }
244
+ });
245
+
246
+ })();
247
+ </script>
248
+ </div>
249
+ </div>
250
+ </div>