c2997a11c2
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (push) Successful in 1s
CI/CD Pipeline / Check push changed paths (push) Successful in 11s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 32s
CI/CD Pipeline / Build Staging API Image (push) Successful in 36s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 33s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 49s
CI/CD Pipeline / Integration Tests (push) Successful in 2m54s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 1m52s
CI/CD Pipeline / Validate - Python (mypy + alembic) (push) Successful in 3m44s
CI/CD Pipeline / Frontend Unit Tests (push) Failing after 4m2s
CI/CD Pipeline / Validate - Style (push) Successful in 4m8s
CI/CD Pipeline / Staging E2E Tests (push) Failing after 2m31s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 3m38s
CI/CD Pipeline / Validate - Security (push) Successful in 10m8s
CI/CD Pipeline / Unit Tests (push) Successful in 10m26s
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Build Production Web Image (push) Failing after 29h7m23s
CI/CD Pipeline / Retag skipped Staging API Image (push) Failing after 29h17m7s
CI/CD Pipeline / PR Build Web Image (push) Failing after 29h17m58s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 29h17m21s
CI/CD Pipeline / PR Build API Image (push) Failing after 29h17m22s
CI/CD Pipeline / Deploy Production (push) Failing after 29h6m41s
CI/CD Pipeline / Build Production Worker Image (push) Failing after 29h6m46s
CI/CD Pipeline / Build Production API Image (push) Failing after 29h6m46s
CI/CD Pipeline / CI Gate (push) Failing after 29h6m46s
CI/CD Pipeline / Retag skipped Staging Worker Image (push) Failing after 29h16m30s
CI/CD Pipeline / Retag skipped Staging Web Image (push) Failing after 29h16m30s
CI/CD Pipeline / Canary Release to Production (push) Failing after 29h6m41s
CI/CD Pipeline / Frontend Lint (push) Failing after 29h17m15s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 29h17m22s
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com> Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
270 lines
5.0 KiB
CSS
270 lines
5.0 KiB
CSS
/* Phase 1 Header 样式 + 手机端适配
|
|
v2: 增加积分徽章、升级按钮、会员金冠 */
|
|
.xx-top-nav {
|
|
height: 68px;
|
|
position: sticky;
|
|
top: 0;
|
|
z-index: var(--z-fixed);
|
|
background: var(--bg-glass);
|
|
backdrop-filter: blur(16px);
|
|
border-bottom: 1px solid var(--border-color);
|
|
}
|
|
|
|
.xx-top-nav-inner {
|
|
max-width: 1440px;
|
|
margin: 0 auto;
|
|
height: 100%;
|
|
padding: 0 var(--space-lg);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.xx-brand {
|
|
display: flex;
|
|
gap: 10px;
|
|
align-items: center;
|
|
font-size: var(--font-size-xl);
|
|
font-weight: var(--font-weight-extrabold);
|
|
border: none;
|
|
background: none;
|
|
cursor: pointer;
|
|
color: var(--text-primary);
|
|
padding: 0;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.xx-logo {
|
|
width: 38px;
|
|
height: 38px;
|
|
border-radius: var(--radius-md);
|
|
background: var(--gradient-primary);
|
|
display: grid;
|
|
place-items: center;
|
|
color: var(--text-inverse);
|
|
box-shadow: var(--shadow-primary);
|
|
font-size: var(--font-size-xl);
|
|
}
|
|
|
|
/* 桌面端导航链接 */
|
|
.xx-nav-links {
|
|
display: flex;
|
|
gap: var(--space-md);
|
|
color: var(--text-secondary);
|
|
font-weight: var(--font-weight-bold);
|
|
}
|
|
|
|
.xx-nav-links button {
|
|
border: none;
|
|
background: none;
|
|
cursor: pointer;
|
|
color: var(--text-secondary);
|
|
padding: 6px 4px;
|
|
font-size: var(--font-size-base);
|
|
font-weight: var(--font-weight-bold);
|
|
transition: color var(--transition-fast);
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.xx-nav-links button:hover {
|
|
color: var(--primary-color);
|
|
}
|
|
|
|
.xx-nav-links button.active {
|
|
color: var(--primary-color);
|
|
}
|
|
|
|
/* 右侧区域 */
|
|
.xx-right-section {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
/* v2: 顶部积分徽章 */
|
|
.xx-header-points {
|
|
cursor: pointer;
|
|
}
|
|
|
|
/* v2: 升级会员按钮 */
|
|
.xx-upgrade-btn {
|
|
background: linear-gradient(135deg, #f59e0b, #ef4444);
|
|
border: none;
|
|
font-weight: 700;
|
|
box-shadow: 0 2px 8px rgba(245, 158, 11, 0.3);
|
|
}
|
|
|
|
.xx-upgrade-btn:hover {
|
|
background: linear-gradient(135deg, #d97706, #dc2626) !important;
|
|
color: #fff !important;
|
|
}
|
|
|
|
/* v2: 会员金冠按钮 */
|
|
.xx-crown-btn {
|
|
font-weight: 700;
|
|
color: #d97706;
|
|
padding: 2px 8px;
|
|
}
|
|
|
|
.xx-crown-btn:hover {
|
|
background: rgba(245, 158, 11, 0.1) !important;
|
|
color: #b45309 !important;
|
|
}
|
|
|
|
.xx-user-menu {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--space-sm);
|
|
cursor: pointer;
|
|
color: var(--text-primary);
|
|
font-size: var(--font-size-base);
|
|
}
|
|
|
|
.xx-avatar {
|
|
width: 34px;
|
|
height: 34px;
|
|
background: var(--primary-soft);
|
|
color: var(--primary-dark);
|
|
}
|
|
|
|
/* 汉堡菜单按钮(默认隐藏) */
|
|
.xx-hamburger {
|
|
display: none;
|
|
border: none;
|
|
background: none;
|
|
cursor: pointer;
|
|
font-size: var(--font-size-xl);
|
|
color: var(--text-secondary);
|
|
padding: var(--space-sm);
|
|
}
|
|
|
|
/* 手机端导航抽屉内容 */
|
|
.xx-mobile-nav {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-xs);
|
|
}
|
|
|
|
/* v2: 手机端积分/会员行 */
|
|
.xx-mobile-points-row {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 10px;
|
|
padding: 8px 4px 16px;
|
|
margin-bottom: 12px;
|
|
border-bottom: 1px solid var(--border-color);
|
|
}
|
|
|
|
.xx-mobile-member-tag {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
font-size: 12px;
|
|
font-weight: 700;
|
|
color: #d97706;
|
|
background: #fef3c7;
|
|
padding: 4px 10px;
|
|
border-radius: 999px;
|
|
}
|
|
|
|
.xx-mobile-nav-item {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
padding: 12px var(--space-md);
|
|
border: none;
|
|
background: none;
|
|
cursor: pointer;
|
|
font-size: var(--font-size-md);
|
|
color: var(--color-gray-700);
|
|
border-radius: var(--radius-sm);
|
|
transition: background var(--transition-fast);
|
|
width: 100%;
|
|
text-align: left;
|
|
}
|
|
|
|
.xx-mobile-nav-item:hover {
|
|
background: var(--bg-tertiary);
|
|
}
|
|
|
|
.xx-mobile-nav-item.active {
|
|
background: var(--primary-soft);
|
|
color: var(--primary-color);
|
|
font-weight: var(--font-weight-semibold);
|
|
}
|
|
|
|
.xx-mobile-nav-icon {
|
|
font-size: 18px;
|
|
width: 24px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
/* ===== 手机端响应式 ===== */
|
|
@media (max-width: 768px) {
|
|
.xx-top-nav {
|
|
height: 56px;
|
|
}
|
|
|
|
.xx-top-nav-inner {
|
|
padding: 0 12px;
|
|
gap: 6px;
|
|
}
|
|
|
|
.xx-brand-text {
|
|
display: none;
|
|
}
|
|
|
|
/* 隐藏桌面端导航 */
|
|
.xx-nav-links {
|
|
display: none;
|
|
}
|
|
|
|
/* 显示汉堡菜单 */
|
|
.xx-hamburger {
|
|
display: block;
|
|
}
|
|
|
|
/* 隐藏用户名 */
|
|
.xx-username {
|
|
display: none;
|
|
}
|
|
|
|
/* 手机端:缩小升级按钮文字 */
|
|
.xx-upgrade-btn {
|
|
padding: 0 8px !important;
|
|
font-size: 12px !important;
|
|
height: 28px;
|
|
}
|
|
|
|
.xx-crown-btn {
|
|
padding: 0 4px !important;
|
|
font-size: 12px !important;
|
|
height: 28px;
|
|
}
|
|
}
|
|
|
|
/* 小屏幕平板:导航文字缩小 */
|
|
@media (min-width: 769px) and (max-width: 1024px) {
|
|
.xx-nav-links {
|
|
gap: var(--space-sm);
|
|
}
|
|
|
|
.xx-nav-links button {
|
|
font-size: 13px;
|
|
}
|
|
|
|
.xx-header-points {
|
|
transform: scale(0.9);
|
|
transform-origin: center;
|
|
}
|
|
|
|
.xx-upgrade-btn {
|
|
font-size: 12px !important;
|
|
padding: 0 10px !important;
|
|
}
|
|
}
|