'light',
'accent_color' => '#6c63ff',
'logo_id' => 0,
'logo_padding_top' => 20,
'logo_padding_bottom'=> 20,
'show_signup' => 0,
'show_login_heading' => 0,
'login_top_percent' => 20,
);
return wp_parse_args( get_option( 'above_black_options', array() ), $defaults );
}
// =============================================================================
// ADMIN — SETTINGS PAGE
// =============================================================================
add_action( 'admin_menu', 'above_black_add_settings_page' );
function above_black_add_settings_page() {
add_options_page(
esc_html__( 'Above Black', 'above-black' ),
esc_html__( 'Above Black', 'above-black' ),
'manage_options',
'above-black',
'above_black_render_settings_page'
);
}
add_action( 'admin_init', 'above_black_register_settings' );
function above_black_register_settings() {
register_setting(
'above_black_options_group',
'above_black_options',
array( 'sanitize_callback' => 'above_black_sanitize_options' )
);
}
function above_black_sanitize_options( $input ) {
$sanitized = array();
$sanitized['color_mode'] = ( isset( $input['color_mode'] ) && 'dark' === $input['color_mode'] )
? 'dark' : 'light';
$accent = isset( $input['accent_color'] ) ? sanitize_hex_color( $input['accent_color'] ) : '';
$sanitized['accent_color'] = ! empty( $accent ) ? $accent : '#6c63ff';
$sanitized['logo_id'] = isset( $input['logo_id'] ) ? absint( $input['logo_id'] ) : 0;
$pad_top = isset( $input['logo_padding_top'] ) ? absint( $input['logo_padding_top'] ) : 20;
$sanitized['logo_padding_top'] = max( 0, min( 200, $pad_top ) );
$pad_bottom = isset( $input['logo_padding_bottom'] ) ? absint( $input['logo_padding_bottom'] ) : 20;
$sanitized['logo_padding_bottom'] = max( 0, min( 200, $pad_bottom ) );
$sanitized['show_signup'] = ! empty( $input['show_signup'] ) ? 1 : 0;
$sanitized['show_login_heading'] = ! empty( $input['show_login_heading'] ) ? 1 : 0;
// Login top position — clamp to 0–90 so the box is always reachable.
$top = isset( $input['login_top_percent'] ) ? intval( $input['login_top_percent'] ) : 20;
$sanitized['login_top_percent'] = max( 0, min( 90, $top ) );
return $sanitized;
}
add_action( 'admin_enqueue_scripts', 'above_black_admin_scripts' );
function above_black_admin_scripts( $hook ) {
if ( 'settings_page_above-black' !== $hook ) {
return;
}
wp_enqueue_style( 'wp-color-picker' );
wp_enqueue_script( 'wp-color-picker' );
wp_enqueue_media();
wp_enqueue_script(
'above-black-admin',
ABOVE_BLACK_PLUGIN_URL . 'assets/admin.js',
array( 'jquery', 'wp-color-picker' ),
ABOVE_BLACK_VERSION,
true
);
}
function above_black_render_settings_page() {
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
$options = above_black_get_options();
$logo_url = $options['logo_id'] ? wp_get_attachment_image_url( $options['logo_id'], 'medium' ) : '';
?>
/* =========================================================
ABOVE BLACK — Login Styles v
Mode:
========================================================= */
/* ── Page Background ──────────────────────────────────── */
body.login {
background-color: !important;
margin: 0 !important;
padding: 0 !important;
min-height: 100vh !important;
position: relative !important;
overflow-x: hidden !important;
}
/* ── Noise Texture ────────────────────────────────────── */
body.login::after {
content: "" !important;
position: fixed !important;
inset: 0 !important;
background: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E") !important;
opacity: !important;
mix-blend-mode: overlay !important;
z-index: 0 !important;
pointer-events: none !important;
}
/* ── Login Box — centred horizontally, distance from top controlled by setting */
#login {
position: absolute !important;
top: % !important;
left: 50% !important;
transform: translateX(-50%) !important;
z-index: 10 !important;
width: calc(100% - 40px) !important;
max-width: 360px !important;
padding: 40px !important;
margin: 0 !important;
background: !important;
color: !important;
border: 1px solid !important;
border-radius: 16px !important;
box-shadow:
0 4px 6px -1px ,
0 2px 4px -1px !important;
backdrop-filter: blur(24px) !important;
-webkit-backdrop-filter: blur(24px) !important;
box-sizing: border-box !important;
}
/* ── Custom Logo ──────────────────────────────────────── */
.login #above-black-logo {
display: block !important;
text-align: center !important;
margin: 0 auto !important;
line-height: 1 !important;
padding-top: px !important;
padding-bottom: px !important;
}
.login #above-black-logo img {
max-width: 180px !important;
max-height: 80px !important;
width: auto !important;
height: auto !important;
display: inline-block !important;
}
/* ── Hide Default WP Logo ─────────────────────────────── */
.login h1,
.login h1 a {
display: none !important;
}
/* ── Login Heading ────────────────────────────────────── */
.login .message.custom-welcome-text {
border-left: none !important;
background: transparent !important;
padding: 0 !important;
margin: 0 0 20px 0 !important;
box-shadow: none !important;
text-align: center !important;
color: !important;
font-size: 30px !important;
font-weight: 600 !important;
}
/* ── Form Container ───────────────────────────────────── */
.login form {
background: transparent !important;
border: none !important;
box-shadow: none !important;
padding: 0 !important;
margin: 0 !important;
}
.login form .clear,
.login .clear,
.login form br {
display: none !important;
}
/* ── Labels ───────────────────────────────────────────── */
.login label {
color: !important;
font-size: 14px !important;
font-weight: 500 !important;
margin-bottom: 8px !important;
}
/* ── Inputs ───────────────────────────────────────────── */
.login input[type="text"],
.login input[type="password"],
.login input[type="email"] {
background-color: !important;
border: 1px solid !important;
color: !important;
border-radius: 8px !important;
font-size: 14px !important;
padding: 10px 12px !important;
width: 100% !important;
box-shadow: none !important;
transition: all 0.2s ease-in-out !important;
}
.login input[type="text"]:focus,
.login input[type="password"]:focus,
.login input[type="email"]:focus {
border-color: !important;
box-shadow: 0 0 0 2px !important;
outline: none !important;
}
.login input[type="checkbox"] {
background-color: !important;
border: 1px solid !important;
border-radius: 4px !important;
width: 16px !important;
height: 16px !important;
cursor: pointer !important;
}
/* ── Primary Button ───────────────────────────────────── */
.login .button-primary,
.login input[type="submit"] {
background: !important;
border: 1px solid !important;
border-radius: 8px !important;
color: #ffffff !important;
box-shadow: 0 1px 2px 0 rgba(0,0,0,0.15) !important;
font-size: 18px !important;
font-weight: 600 !important;
padding: 10px 20px !important;
height: auto !important;
width: 100% !important;
text-shadow: none !important;
transition: filter 0.2s ease-in-out !important;
cursor: pointer !important;
}
.login .button-primary:hover,
.login .button-primary:focus,
.login input[type="submit"]:hover,
.login input[type="submit"]:focus {
filter: brightness(1.15) !important;
background: !important;
border-color: !important;
color: #ffffff !important;
opacity: 1 !important;
}
.wp-core-ui .button-group.button-large .button,
.wp-core-ui .button.button-large {
line-height: 1.4em !important;
}
/* ── Navigation Links ─────────────────────────────────── */
.login #nav,
.login #backtoblog {
text-align: center !important;
padding: 0 !important;
margin: 16px 0 0 0 !important;
float: none !important;
}
.login #nav a,
.login #backtoblog a {
color: !important;
font-size: 12px !important;
text-decoration: none !important;
transition: color 0.15s ease !important;
}
.login #nav a:hover,
.login #backtoblog a:hover {
color: !important;
text-decoration: underline !important;
}
/* ── Footer Note ──────────────────────────────────────── */
.login .custom-footer-text {
text-align: center !important;
margin: 20px 0 0 0 !important;
color: !important;
font-size: 12px !important;
font-weight: 500 !important;
}
/* ── Hidden Elements ──────────────────────────────────── */
.login #language-switcher,
.login .language-switcher {
display: none !important;
}
.login #backtoblog {
display: none !important;
}
/* ── Password Eye — grey default ──────────────────────── */
.login .wp-hide-pw,
.login .wp-hide-pw .dashicons {
color: #9e9ea7 !important;
}
.login .wp-hide-pw:hover,
.login .wp-hide-pw:hover .dashicons,
.login .wp-hide-pw:focus,
.login .wp-hide-pw:focus .dashicons {
color: !important;
}
/* ── Hide ? Tooltip Next to Remember Me ──────────────── */
.login .forgetmenot > button,
.login .forgetmenot button.button-link,
.login button.wp-login-tooltip,
.login .wp-login-tooltip,
#login-page-notice,
.login-page-notice,
.login .notice-container {
display: none !important;
}
/* ── Remove \f223 dashicon after Remember Me label ────── */
.login .forgetmenot label::after,
.login .forgetmenot label::before {
content: none !important;
display: none !important;
}
/* ── Remember Me row — checkbox + label vertically centred */
.login .forgetmenot {
display: flex !important;
align-items: center !important;
gap: 8px !important;
margin: 0 !important;
}
.login .forgetmenot input[type="checkbox"] {
flex-shrink: 0 !important;
margin: 0 !important;
position: relative !important;
top: 0 !important;
}
.login .forgetmenot label {
margin: 0 !important;
line-height: 1 !important;
vertical-align: middle !important;
cursor: pointer !important;
}
/* ── Password field bottom margin ────────────────────── */
.login input#user_pass {
margin-bottom: 0px !important;
}
/* ── Login box top padding ────────────────────────────── */
.login div#login {
padding-top: 20px !important;
}
/* ── Remember Me row bottom spacing ──────────────────── */
.login p.forgetmenot {
padding-bottom: 16px !important;
}
/* ── Hide help icon (dashicons-editor-help) ──────────── */
.login .dashicons-editor-help:before {
display: none !important;
}
/* ── Hide Privacy Policy Link ─────────────────────────── */
.login .privacy-policy-page-link,
#login .privacy-policy-page-link,
.login p.privacy-policy-page-link,
.login #login-page-notice {
display: none !important;
}
'
. '
'
. '';
}
}
$heading_html = ! empty( $options['show_login_heading'] )
? 'Login
'
: '';
if ( empty( $message ) ) {
return $logo_html . $heading_html;
}
return $logo_html . $message;
}
add_filter( 'login_headerurl', 'above_black_login_logo_url' );
function above_black_login_logo_url() {
return home_url();
}
add_filter( 'login_headertext', 'above_black_login_logo_title' );
function above_black_login_logo_title() {
return get_bloginfo( 'name' );
}
add_action( 'login_enqueue_scripts', 'above_black_login_scripts' );
function above_black_login_scripts() {
$options = above_black_get_options();
$show_signup = ! empty( $options['show_signup'] ) ? 1 : 0;
wp_enqueue_script(
'above-black-login',
ABOVE_BLACK_PLUGIN_URL . 'assets/login.js',
array(),
ABOVE_BLACK_VERSION,
true
);
wp_localize_script(
'above-black-login',
'aboveBlackLogin',
array(
'showSignup' => $show_signup,
)
);
}
add_filter( 'login_display_language_dropdown', '__return_false' );