Files
wordpress-theme-aksrt/assets/css/frontend/nav/mobile-toggle.css
T
kate522 77164fee45 fix(nav): header publish menu + userbox card polish
Unpaint multi-type 发布 wrapper, fix light-menu ink, avatar unread
dot clipping, check-in REST double namespace, and user-card VIP/check-in layout.
2026-07-22 08:49:27 +08:00

815 lines
16 KiB
CSS

/* Mobile toggle */
.nav-toggle {
display: flex;
}
@media (max-width: 991px) {
.site-brand {
max-width: min(46vw, 311px);
}
.site-brand__media {
padding: 0 8px;
}
.nav-publish-btn {
display: none;
}
}
/* Desktop search icon: hide on mobile (use drawer search instead) */
@media (max-width: 767px) {
.site-brand {
max-width: min(62vw, 260px);
padding: 7px 0;
}
.site-brand__media {
padding: 0;
}
#search-toggle {
display: none;
}
/* Search panel only makes sense alongside the desktop search icon */
.nav-search-panel {
display: none !important;
}
}
@media (min-width: 768px) {
ul.nav-desktop,
.nav-desktop--fallback {
display: flex;
}
.nav-auth {
display: flex;
}
.nav-auth-dropdown {
display: flex;
}
.nav-toggle {
display: none;
}
}
/* ============================================================
* Header Layout Variants (desktop ≥768px)
* Layout 1: Standard — brand left, nav flex-1, actions right
* Layout 2: Centered — brand left, nav centered with flex, actions right
* Layout 3: Compact — brand left, nav pushed right, actions right
* ============================================================ */
@media (min-width: 768px) {
/* Layout 2: center the nav between brand and actions */
body.header-layout-2 .nav-desktop {
flex: 1;
justify-content: center;
}
body.header-layout-2 .nav-actions {
flex-shrink: 0;
}
/* Layout 3: push nav to the right side */
body.header-layout-3 .site-nav__row {
justify-content: flex-start;
}
body.header-layout-3 .nav-desktop {
flex: 1;
justify-content: flex-end;
margin-left: 24px;
}
body.header-layout-3 .nav-actions {
margin-left: 8px;
}
}
.nav-mobile-strip {
display: none;
width: calc(100% + 8px);
margin: 0 -4px;
padding: 0 0 12px;
}
.nav-mobile-strip__menu,
.nav-mobile-strip__menu ul {
display: flex;
align-items: center;
gap: 8px;
overflow-x: auto;
margin: 0;
padding: 0;
list-style: none;
scrollbar-width: none;
-ms-overflow-style: none;
}
.nav-mobile-strip__menu::-webkit-scrollbar,
.nav-mobile-strip__menu ul::-webkit-scrollbar {
display: none;
}
.nav-mobile-strip__menu a {
display: inline-flex;
align-items: center;
min-height: 34px;
padding: 0 12px;
border-radius: var(--radius-pill, 999px);
background: var(--surface-2);
color: var(--color-ink-2);
white-space: nowrap;
text-decoration: none;
font-size: 0.875rem;
font-weight: 500;
}
.nav-mobile-strip__menu .current-menu-item > a,
.nav-mobile-strip__menu .current_page_item > a {
background: var(--color-primary);
color: var(--color-on-primary, #fff);
}
@media (max-width: 767px) {
.nav-mobile-strip {
display: block;
}
}
/* ============================================================
* User avatar + dropdown
* ============================================================ */
.nav-user {
position: relative;
}
.nav-user__toggle {
width: 36px;
height: 36px;
border-radius: var(--radius-avatar);
padding: 0;
border: none; /* 对齐 zibll:头像无边框 */
cursor: pointer;
/* Allow unread corner badge to paint outside the avatar circle. */
overflow: visible;
background: var(--surface-2);
transition: box-shadow var(--dur-fast, 0.15s) var(--ease);
}
.nav-user__toggle:hover {
box-shadow: 0 0 0 2px var(--color-primary-soft);
}
.nav-user__toggle img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
border-radius: inherit;
}
.user-dropdown {
position: absolute;
top: calc(100% + 8px);
right: 0;
width: 260px;
max-width: calc(100vw - 32px);
padding: 12px 0;
background: var(--surface-1);
border: 1px solid var(--color-line);
border-radius: var(--radius-lg, 8px);
box-shadow: var(--shadow-lg);
z-index: 1100;
opacity: 0;
visibility: hidden;
transform: translateY(-6px);
transition: opacity 0.2s, transform 0.2s, visibility 0.2s;
}
.user-dropdown.is-open {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
.user-dropdown__profile {
display: flex;
align-items: center;
gap: 12px;
padding: 8px 16px 14px;
}
.user-dropdown__profile img {
width: 44px;
height: 44px;
border-radius: var(--radius-avatar);
object-fit: cover;
flex-shrink: 0;
}
.user-dropdown__name {
font-weight: 700;
font-size: 0.9375rem;
color: var(--color-ink);
}
.user-dropdown__email {
font-size: 0.75rem;
color: var(--color-ink-4);
word-break: break-all;
margin-top: 2px;
}
.user-dropdown__sep {
height: 1px;
background: var(--color-line);
margin: 6px 0;
}
.user-dropdown a,
.user-dropdown button {
display: flex;
align-items: center;
gap: 10px;
width: 100%;
padding: 0 16px;
height: 44px;
border: none;
background: none;
font-size: 0.875rem;
color: var(--color-ink);
text-align: left;
cursor: pointer;
transition: background var(--dur-fast, 0.15s) var(--ease),
color var(--dur-fast, 0.15s) var(--ease);
}
.user-dropdown a:hover,
.user-dropdown button:hover {
background: var(--surface-3);
color: var(--color-primary-active);
}
/* dropdown 项内的 SVG 图标 */
.user-dropdown__item svg {
width: 16px;
height: 16px;
flex-shrink: 0;
opacity: 0.85;
}
.user-dropdown__item span:first-of-type:not(.user-dropdown__pill) {
flex: 1;
min-width: 0;
}
/* 未读消息数 badge */
.user-dropdown__badge {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 18px;
height: 18px;
padding: 0 5px;
margin-left: auto;
font-size: 11px;
font-weight: 600;
color: #fff;
background: var(--color-error, #ef4444);
border-radius: 9px;
line-height: 1;
}
.user-dropdown__credits {
display: flex;
align-items: center;
gap: 10px;
padding: 0 16px;
height: 44px;
font-size: 0.875rem;
color: var(--color-ink-2);
}
.user-dropdown__credits i {
color: var(--color-warning);
flex-shrink: 0;
}
.user-dropdown__credits-label {
flex: 1;
}
.user-dropdown__credits-value {
font-weight: 600;
color: var(--color-primary);
}
.user-dropdown__logout {
color: var(--color-error) !important;
}
.user-dropdown__logout svg {
color: var(--color-error);
}
.user-dropdown__logout:hover {
background: rgba(239, 68, 68, 0.08) !important;
color: var(--color-error) !important;
}
.user-dropdown .badge-dot {
margin-left: auto;
min-width: 8px;
height: 8px;
border-radius: var(--radius-pill);
background: var(--color-error);
}
/* ============================================================
* Search panel
* ============================================================ */
.nav-search-panel {
display: none;
padding: 12px 0 16px;
border-top: 1px solid var(--color-line);
}
.nav-search-panel.is-open {
display: block;
}
.nav-searchbox {
margin: 0;
}
.nav-searchbox__field {
display: flex;
align-items: center;
gap: 10px;
min-height: 42px;
padding: 0 6px 0 14px;
border: 1px solid var(--color-line);
border-radius: var(--radius-pill, 999px);
background: var(--surface-3);
box-sizing: border-box;
transition: border-color var(--dur-fast, 0.15s) var(--ease), box-shadow var(--dur-fast, 0.15s) var(--ease), background var(--dur-fast, 0.15s) var(--ease);
}
.nav-searchbox__icon {
order: 1;
flex: 0 0 16px;
width: 16px;
height: 16px;
color: var(--color-ink-4);
pointer-events: none;
}
.nav-searchbox__input {
order: 2;
flex: 1;
min-width: 0;
width: auto;
height: 40px;
padding: 0;
border: 0;
background: transparent;
color: var(--color-ink);
font-size: 0.9rem;
line-height: 1.2;
box-sizing: border-box;
}
.nav-searchbox__input:focus {
outline: none;
}
.nav-searchbox__input::placeholder {
color: var(--color-ink-4);
}
.nav-searchbox__submit {
order: 3;
flex: 0 0 auto;
height: 30px;
min-width: 64px;
padding: 0 14px;
border: 0;
border-radius: var(--radius-pill, 999px);
background: var(--color-primary);
color: #fff;
font-size: 0.8125rem;
font-weight: 600;
line-height: 1;
white-space: nowrap;
cursor: pointer;
}
.nav-searchbox__field:focus-within {
border-color: var(--color-primary);
box-shadow: 0 0 0 3px var(--color-primary-soft);
background: var(--surface-1);
}
.nav-searchbox__submit:hover {
background: var(--color-primary-active);
}
/* ============================================================
* Mobile drawer / mobile header
* ============================================================ */
.mobile-header.nav-drawer-backdrop {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.45);
z-index: 1200;
opacity: 0;
visibility: hidden;
transition: opacity 0.3s ease, visibility 0.3s;
}
.mobile-header.nav-drawer-backdrop.is-open {
opacity: 1;
visibility: visible;
}
.mobile-header.nav-drawer {
position: fixed;
top: 0;
right: 0;
width: min(100vw, 360px);
height: 100vh;
max-height: 100dvh;
background: var(--surface-page);
z-index: 1210;
box-shadow: var(--shadow-drawer);
transform: translateX(100%);
transition: transform 0.32s var(--ease-out, ease);
display: flex;
flex-direction: column;
overflow: auto;
pointer-events: none;
visibility: hidden;
}
.mobile-header.nav-drawer.is-open {
transform: translateX(0);
pointer-events: auto;
visibility: visible;
}
.mobile-navbar {
display: flex;
flex-direction: column;
min-height: 100%;
}
.mobile-navbar .navbar-brand {
max-width: calc(100% - 52px);
padding: 7px 0;
}
.mobile-navbar .navbar-logo {
padding: 0;
}
.nav-drawer-backdrop {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.45);
z-index: 1200;
opacity: 0;
visibility: hidden;
transition: opacity 0.3s ease, visibility 0.3s;
}
.nav-drawer-backdrop.is-open {
opacity: 1;
visibility: visible;
}
.nav-drawer {
position: fixed;
top: 0;
right: 0;
width: min(100vw, 360px);
height: 100vh;
max-height: 100dvh;
background: var(--surface-page);
z-index: 1210;
box-shadow: var(--shadow-drawer);
transform: translateX(100%);
transition: transform 0.32s var(--ease-out, ease);
display: flex;
flex-direction: column;
overflow: auto;
pointer-events: none;
visibility: hidden;
}
.nav-drawer.is-open {
transform: translateX(0);
pointer-events: auto;
visibility: visible;
}
.nav-drawer__head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
padding: 16px 20px;
border-bottom: 1px solid var(--color-line);
font-weight: 700;
font-size: 1rem;
}
.site-brand--drawer {
max-width: calc(100% - 52px);
padding: 7px 0;
}
.site-brand--drawer .site-brand__media {
padding: 0;
}
.nav-drawer__search {
padding: 16px 20px 0;
}
.nav-drawer__search .nav-searchbox__field {
min-height: 40px;
}
.nav-drawer__search .nav-searchbox__input {
height: 38px;
}
.nav-drawer__search .nav-searchbox__submit {
height: 28px;
min-width: 58px;
padding: 0 12px;
font-size: 0.75rem;
}
.nav-searchbox__meta {
display: grid;
gap: 10px;
margin-top: 12px;
}
.nav-searchbox__types {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.nav-searchbox__type {
display: inline-flex;
align-items: center;
min-height: 32px;
padding: 0 12px;
border: 1px solid var(--color-line);
border-radius: var(--radius-pill, 999px);
background: var(--surface-2);
color: var(--color-ink-3);
font-size: 0.8125rem;
font-weight: 600;
cursor: pointer;
}
.nav-searchbox__type.is-active {
border-color: var(--color-primary);
background: var(--color-primary-soft);
color: var(--color-primary);
}
.nav-searchbox__category-wrap {
position: relative;
}
.nav-searchbox__category {
appearance: none;
width: 100%;
min-height: 36px;
padding: 0 34px 0 12px;
border: 1px solid var(--color-line);
border-radius: var(--radius-pill, 999px);
background: var(--surface-2);
color: var(--color-ink);
font: 500 0.875rem/1 var(--font-ui);
}
.nav-searchbox__category-wrap::after {
content: '';
position: absolute;
right: 12px;
top: 50%;
transform: translateY(-50%);
width: 0;
height: 0;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-top: 5px solid var(--color-ink-3);
pointer-events: none;
}
.nav-searchbox__category:disabled {
opacity: 0.56;
cursor: not-allowed;
}
.nav-drawer__menu {
flex: 1;
padding: 16px 20px 32px;
}
.nav-drawer__menu a {
display: block;
padding: 14px 0;
font-size: 1rem;
font-weight: 500;
color: var(--color-ink);
border-bottom: 1px solid var(--color-line-soft);
}
.nav-drawer__menu a:hover {
color: var(--color-primary-active);
}
.nav-drawer__menu ul {
list-style: none;
margin: 0;
padding: 0;
}
.nav-drawer__auth {
padding: 20px;
display: flex;
flex-direction: column;
gap: 12px;
border-top: 1px solid var(--color-line);
}
.nav-drawer__auth .btn-outline,
.nav-drawer__auth .btn-primary {
width: 100%;
height: 44px;
}
.nav-drawer__publish {
padding: 0 20px 20px;
}
.nav-drawer__publish .btn-primary {
width: 100%;
min-height: 44px;
justify-content: center;
gap: 8px;
}
/* ============================================================
* Header user box (Zibll-like sub-user-box grid)
* ============================================================ */
.nav-user__toggle {
position: relative;
}
.nav-user__dot {
position: absolute;
top: -1px;
right: -1px;
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--color-error, #ef4444);
border: 2px solid var(--surface-1, #fff);
box-sizing: content-box;
pointer-events: none;
z-index: 2;
}
.nav-user__guest-avatar {
width: 36px;
height: 36px;
border-radius: 50%;
display: inline-flex;
align-items: center;
justify-content: center;
background: var(--surface-2);
color: var(--color-ink-3);
}
.user-dropdown {
width: 300px;
padding: 14px 12px 12px;
}
.user-dropdown__profile.user-info {
position: relative;
padding-right: 42px;
}
.user-dropdown__meta {
min-width: 0;
flex: 1;
}
.user-dropdown__name {
display: flex;
align-items: center;
gap: 6px;
flex-wrap: wrap;
}
/* Beat generic `.user-dropdown a { width:100%; height:44px }` sizing. */
.user-dropdown a.user-dropdown__msg,
.user-dropdown__msg {
position: absolute;
top: 8px;
right: 8px;
width: 34px !important;
height: 34px !important;
min-width: 34px;
max-width: 34px;
border-radius: 50%;
display: inline-flex !important;
align-items: center;
justify-content: center;
gap: 0 !important;
padding: 0 !important;
background: var(--surface-2);
color: var(--color-ink-3);
box-sizing: border-box;
}
.user-dropdown a.user-dropdown__msg:hover,
.user-dropdown__msg:hover {
background: var(--surface-3);
color: var(--color-primary);
}
.user-dropdown__msg .user-dropdown__badge {
position: absolute;
top: -4px;
right: -4px;
margin: 0;
}
.user-dropdown__guest-title {
padding: 4px 8px 12px;
text-align: center;
font-weight: 700;
color: var(--color-ink);
}
.user-dropdown__actions {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 8px 4px;
padding: 4px 2px 2px;
}
.user-dropdown__actions--admin {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.user-dropdown__action {
display: flex !important;
flex-direction: column;
align-items: center;
justify-content: flex-start;
gap: 6px !important;
width: auto !important;
height: auto !important;
min-height: 0;
padding: 6px 4px !important;
text-align: center !important;
font-size: 12px !important;
line-height: 1.25;
color: var(--color-ink-3) !important;
background: transparent !important;
}
.user-dropdown__action:hover {
background: transparent !important;
color: var(--color-primary) !important;
}
.user-dropdown__action-icon {
width: 40px;
height: 40px;
border-radius: 50%;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 15px;
color: #fff;
}
.user-dropdown__action-icon.is-blue { background: linear-gradient(135deg, #60a5fa, #3b82f6); }
.user-dropdown__action-icon.is-purple { background: linear-gradient(135deg, #a78bfa, #8b5cf6); }
.user-dropdown__action-icon.is-green { background: linear-gradient(135deg, #34d399, #10b981); }
.user-dropdown__action-icon.is-red { background: linear-gradient(135deg, #f87171, #ef4444); }
.user-dropdown__action-icon.is-yellow { background: linear-gradient(135deg, #fbbf24, #f59e0b); color: #1f2937; }
.user-dropdown__action.is-danger {
color: var(--color-error, #ef4444) !important;
}
.user-dropdown__credits {
margin-top: 2px;
border-radius: 12px;
background: var(--surface-2);
margin-left: 4px;
margin-right: 4px;
width: auto;
}