'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' );