Files
wordpress-theme-aksrt/header.php
T
kate522 41366e7fc4 feat(auth): rebuild the sign-in surfaces on the shared sign-card contract
The login/register page and the auth modal had drifted into a parallel
system: floating-input fields, a sign-page-card shell and a bespoke
jio-auth-modal wrapper that none of the theme's own sign CSS targeted.
The reference card rules (.sign, .sign-img, .sign-content, .line-form-input,
.scale-placeholder, .social_loginbar, .title-h-left, #u_sign .modal-dialog,
.qrcode-signin-container) have been in main.css all along, so the fix is to
render the reference DOM instead of re-styling a second one.

auth-content.php now emits one .sign.jio-panel.blur-bg.relative card with a
.tab-content of #tab-sign-in / #tab-sign-up / #tab-resetpassword /
#tab-qrcode-signin / #tab-bind panes. Each pane opens with a
.title-h-left.fa-2x heading plus a .muted-color.px12 link, fields are
.relative.line-form.mb10 > .line-form-input + .scale-placeholder +
.line-form-line, the verification trigger is the .yztx.abs-right captchsubmit
button, and submits are .but.radius.jb-blue|jb-green.padding-lg.btn-block.
Social entries come from the shared render_social_buttons() separator +
.social_loginbar, and the OAuth bind pane uses the oauth-data-box avatar card.

The modal shell is #u_sign.modal > .modal-dialog > .sign-content >
.sign-img.absolute.hide-sm + .sign, and the page shell is the reference
.container.sign-page > .row.sign-row.gutters-5 > .col-md-6(.col-md-offset-6/
.col-md-offset-3).sign-col with a .fixed.lazyload background and a blurred
fixed footer. auth.js drives .in instead of .is-open, toggles the new
password/signin-mode/invite-gate controls and no longer touches the retired
markup. The page also drops two footer-hook removals that targeted functions
which no longer exist, and opts out of the fixed-nav offset.

The sign page's custom theme setting now actually applies: Router answers
jio_forced_theme_mode, jioData.themeForced wins over the stored cookie in
theme.js, theme-toggle positions are suppressed, and the page marks html/body
dark or white accordingly.

sign.css shrinks from ~114 lines of bespoke component styling to a thin
positioning layer, and the retired classes are gone rather than kept.

Verification: php -l on every changed PHP file, node --check on both JS files,
node --test across widget-system, navigation and front-submit (873 passing),
and tools/audit-psr4-paths.php / audit-admin-contracts.php both at 0 errors.
assets/js/runtime/main.min.js was rebuilt because theme.js gained the forced
theme branch.
2026-11-04 16:04:24 +08:00

70 lines
2.8 KiB
PHP

<?php
/**
* Site header: document shell + legacy-contract top navigation.
*
* @package Jio
*/
defined('ABSPATH') || exit;
$jio_header_settings = class_exists('\Jio\Settings\Settings')
? \Jio\Settings\Settings::read_domain('page_display', 'header-nav')
: [];
$jio_header_layout = sanitize_key((string) ($jio_header_settings['header_layout'] ?? '1'));
if (!in_array($jio_header_layout, ['1', '2', '3'], true)) {
$jio_header_layout = '1';
}
$jio_mobile_layout = sanitize_key((string) ($jio_header_settings['mobile_header_layout'] ?? 'center'));
if (!in_array($jio_mobile_layout, ['center', 'left'], true)) {
$jio_mobile_layout = 'center';
}
$jio_mobile_align = sanitize_key((string) ($jio_header_settings['mobile_navbar_align'] ?? 'left'));
if (!in_array($jio_mobile_align, ['top', 'left', 'right'], true)) {
$jio_mobile_align = 'left';
}
$jio_initial_theme_mode = '';
if (class_exists('\Jio\Settings\Settings') && method_exists('\Jio\Settings\Settings', 'initial_theme_mode')) {
$jio_initial_theme_mode = (string) apply_filters('jio_initial_theme_mode', \Jio\Settings\Settings::initial_theme_mode());
}
$jio_has_initial_theme = in_array($jio_initial_theme_mode, ['dark', 'light'], true);
$jio_body_classes = [];
// legacy: body.nav-fixed drives top padding + hero pull-under-nav. The sign
// page lays out its own shell, so it opts out of the fixed-nav offset.
$jio_is_sign_page = function_exists('jio_is_auth_page_request') && jio_is_auth_page_request();
if (!$jio_is_sign_page && (!isset($jio_header_settings['nav_fixed']) || !empty($jio_header_settings['nav_fixed']))) {
$jio_body_classes[] = 'nav-fixed';
} elseif (!$jio_is_sign_page) {
$jio_body_classes[] = 'has-static-nav';
}
if ($jio_initial_theme_mode === 'dark') {
$jio_body_classes[] = 'theme-dark';
$jio_body_classes[] = 'dark-theme';
} elseif ($jio_initial_theme_mode === 'light') {
$jio_body_classes[] = 'white-theme';
}
$jio_body_classes[] = 'header-layout-' . $jio_header_layout;
$jio_body_classes[] = 'mobile-header-' . $jio_mobile_layout;
$jio_body_classes[] = 'mobile-nav-' . $jio_mobile_align;
?><!DOCTYPE html>
<html lang="<?php echo esc_attr(str_replace('_', '-', get_bloginfo('language'))); ?>"<?php echo $jio_initial_theme_mode === 'dark' ? ' class="dark"' : ''; ?><?php echo $jio_has_initial_theme ? ' data-theme="' . esc_attr($jio_initial_theme_mode) . '"' : ''; ?>>
<head>
<meta charset="<?php bloginfo('charset'); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0, viewport-fit=cover">
<?php wp_head(); ?>
</head>
<body <?php body_class($jio_body_classes); ?><?php echo $jio_has_initial_theme ? ' data-theme="' . esc_attr($jio_initial_theme_mode) . '"' : ''; ?>>
<?php wp_body_open(); ?>
<?php
if (function_exists('jio_header')) {
jio_header();
}
\Jio\WidgetSystem\WidgetAreas::render('all_top_fluid', 'fluid-widget-wrap');
?>