You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

1760 lines
57 KiB

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>个人中心 - 青核 Youthome</title>
<style>
/* ============================================================
青核 Youthome 设计系统 - 浅色主题
============================================================ */
:root {
/* 品牌色 */
--primary: #17B0CF;
--primary-hover: #1298B3;
--primary-active: #0E8098;
--primary-light: #73D3E6;
--primary-lighter: #BCEAF3;
--primary-bg: rgba(23, 176, 207, 0.1);
/* 中性色 */
--page-bg: #F7F8FA;
--card-bg: #FFFFFF;
--sidebar-bg: #FFFFFF;
--hover-bg: #F5F5F5;
--bg-active: var(--primary-bg);
/* 文字色 */
--text-primary: #333333;
--text-secondary: #666666;
--text-tertiary: #999999;
--text-placeholder: #BFBFBF;
--text-white: #FFFFFF;
/* 边框 */
--border: #E8E8E8;
--border-light: #F0F0F0;
/* 功能色 */
--success: #52C41A;
--success-bg: #F6FFED;
--warning: #FAAD14;
--warning-bg: #FFFBE6;
--error: #F5222D;
--error-bg: #FFF1F0;
--orange: #FF9F45;
--orange-bg: #FFF1DE;
/* 阴影 */
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04);
--shadow-card: 0 2px 12px rgba(0, 0, 0, 0.05);
--shadow-md: 0 4px 16px rgba(0, 0, 0, 0.06);
--shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.08);
--shadow-float: 0 12px 40px rgba(0, 0, 0, 0.1);
/* 圆角 */
--radius-sm: 10px;
--radius-md: 12px;
--radius-lg: 14px;
--radius-xl: 16px;
--radius-full: 9999px;
/* 尺寸 */
--sidebar-width: 230px;
--right-sidebar-width: 320px;
--topbar-height: 56px;
--page-padding: 24px;
/* 过渡 */
--transition-fast: 0.15s ease;
--transition-base: 0.2s ease;
--transition-slow: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Segoe UI',
'SF Pro Display', 'Helvetica Neue', 'Microsoft YaHei', sans-serif;
background: var(--page-bg);
color: var(--text-primary);
font-size: 14px;
line-height: 1.57;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
svg { stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; }
button { font-family: inherit; cursor: pointer; border: none; background: none; }
a { text-decoration: none; color: inherit; }
/* 全局滚动条 */
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-thumb { background: #D9D9D9; border-radius: 4px; }
::-webkit-scrollbar-thumb:hover { background: #BFBFBF; }
::-webkit-scrollbar-track { background: transparent; }
/* ============================================================
整体布局
============================================================ */
.app {
width: 1920px;
max-width: 100%;
overflow: hidden;
margin: 0 auto;
min-height: 100vh;
display: flex;
position: relative;
box-sizing: border-box;
background: var(--page-bg);
}
/* ============================================================
左侧边栏
============================================================ */
.sidebar {
width: var(--sidebar-width);
background: var(--sidebar-bg);
border-right: 1px solid var(--border);
display: flex;
flex-direction: column;
flex-shrink: 0;
position: sticky;
top: 0;
height: 100vh;
overflow-y: auto;
box-sizing: border-box;
z-index: 20;
}
.sidebar::-webkit-scrollbar { width: 4px; }
.sidebar::-webkit-scrollbar-thumb { background: #E0E0E0; border-radius: 2px; }
/* Logo 区域 */
.sidebar-logo {
padding: 24px 20px 20px;
display: flex;
align-items: center;
gap: 10px;
flex-shrink: 0;
}
.logo-icon {
width: 36px;
height: 36px;
border-radius: 10px;
background: linear-gradient(135deg, var(--primary-light), var(--primary));
display: flex;
align-items: center;
justify-content: center;
color: #fff;
font-size: 16px;
font-weight: 700;
box-shadow: 0 4px 12px rgba(23, 176, 207, 0.3);
}
.logo-text {
font-size: 20px;
font-weight: 700;
color: var(--text-primary);
letter-spacing: 0.5px;
}
.logo-text span { color: var(--primary); }
/* 发布按钮 */
.publish-btn {
margin: 0 16px 20px;
height: 44px;
background: linear-gradient(135deg, var(--primary-light), var(--primary));
color: #fff;
border-radius: var(--radius-md);
font-size: 14px;
font-weight: 600;
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
cursor: pointer;
transition: all var(--transition-base);
box-shadow: 0 4px 12px rgba(23, 176, 207, 0.25);
flex-shrink: 0;
}
.publish-btn:hover {
transform: translateY(-1px);
box-shadow: 0 6px 16px rgba(23, 176, 207, 0.35);
}
.publish-btn svg { width: 18px; height: 18px; }
/* 导航区域 */
.sidebar-nav {
flex: 1;
padding: 0 12px 16px;
display: flex;
flex-direction: column;
gap: 2px;
}
.nav-section-title {
font-size: 12px;
font-weight: 600;
color: var(--text-tertiary);
padding: 12px 14px 8px;
letter-spacing: 0.5px;
}
.nav-item {
display: flex;
align-items: center;
gap: 12px;
height: 44px;
padding: 0 14px;
border-radius: var(--radius-sm);
font-size: 14px;
font-weight: 500;
color: var(--text-secondary);
cursor: pointer;
transition: all var(--transition-fast);
position: relative;
}
.nav-item:hover {
background: var(--hover-bg);
color: var(--text-primary);
}
.nav-item.active {
background: var(--primary-bg);
color: var(--primary);
font-weight: 600;
}
.nav-item.active::before {
content: '';
position: absolute;
left: -12px;
top: 50%;
transform: translateY(-50%);
width: 3px;
height: 20px;
background: var(--primary);
border-radius: 0 3px 3px 0;
}
.nav-item svg {
width: 20px;
height: 20px;
}
.nav-badge {
margin-left: auto;
min-width: 20px;
height: 20px;
padding: 0 6px;
background: var(--primary);
color: #fff;
font-size: 11px;
font-weight: 600;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
}
/* 底部用户卡片 */
.sidebar-footer {
padding: 16px;
border-top: 1px solid var(--border-light);
flex-shrink: 0;
}
.sidebar-user-card {
display: flex;
align-items: center;
gap: 12px;
padding: 12px;
border-radius: var(--radius-md);
cursor: pointer;
background: var(--primary-bg);
transition: all var(--transition-fast);
}
.sidebar-user-card:hover { background: rgba(23, 176, 207, 0.15); }
.sidebar-avatar {
width: 40px;
height: 40px;
border-radius: 50%;
background: linear-gradient(135deg, var(--primary-light), var(--primary));
display: flex;
align-items: center;
justify-content: center;
color: #fff;
font-size: 14px;
font-weight: 600;
flex-shrink: 0;
}
.sidebar-user-info { flex: 1; min-width: 0; }
.sidebar-user-name {
font-size: 13px;
font-weight: 600;
color: var(--text-primary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.sidebar-user-desc {
font-size: 11px;
color: var(--text-secondary);
margin-top: 2px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.sidebar-user-arrow {
width: 16px;
height: 16px;
color: var(--text-tertiary);
flex-shrink: 0;
}
/* ============================================================
主内容区
============================================================ */
.main-content {
flex: 1;
background: var(--page-bg);
padding: 24px 40px 40px;
display: flex;
gap: 24px;
min-width: 0;
box-sizing: border-box;
height: 100vh;
overflow-y: auto;
}
.main-content::-webkit-scrollbar { width: 8px; }
.main-content::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }
img { max-width: 100%; height: auto; display: block; }
/* 左侧主列 */
.profile-column {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 20px;
}
/* ============================================================
个人资料头部卡片
============================================================ */
.profile-header-card {
background: var(--card-bg);
border-radius: var(--radius-lg);
overflow: hidden;
position: relative;
border: 1px solid var(--border-light);
box-shadow: var(--shadow-sm);
box-sizing: border-box;
}
/* 封面 */
.profile-cover {
height: 180px;
background: linear-gradient(135deg, var(--primary) 0%, var(--primary-light) 100%);
position: relative;
overflow: hidden;
}
.profile-cover::before {
content: '';
position: absolute;
inset: 0;
background-image:
radial-gradient(circle at 20% 30%, rgba(255,255,255,0.15) 0%, transparent 40%),
radial-gradient(circle at 80% 70%, rgba(255,255,255,0.1) 0%, transparent 35%);
}
.profile-cover::after {
content: '';
position: absolute;
inset: 0;
background-image:
radial-gradient(circle at 1px 1px, rgba(255,255,255,0.08) 1px, transparent 0);
background-size: 32px 32px;
}
.profile-cover-actions {
position: absolute;
top: 16px;
right: 20px;
display: flex;
gap: 8px;
z-index: 2;
}
.cover-icon-btn {
width: 34px;
height: 34px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.2);
backdrop-filter: blur(8px);
display: flex;
align-items: center;
justify-content: center;
color: #fff;
cursor: pointer;
transition: all var(--transition-fast);
border: none;
}
.cover-icon-btn:hover { background: rgba(255, 255, 255, 0.3); }
.cover-icon-btn svg { width: 16px; height: 16px; }
/* 资料主体 */
.profile-body {
padding: 0 28px 24px;
position: relative;
}
.profile-top-row {
display: flex;
gap: 24px;
margin-top: -54px;
}
.profile-avatar-wrap {
position: relative;
flex-shrink: 0;
}
.profile-avatar {
width: 108px;
height: 108px;
border-radius: 50%;
background: linear-gradient(135deg, var(--primary-light), var(--primary));
display: flex;
align-items: center;
justify-content: center;
color: #fff;
font-size: 40px;
font-weight: 700;
border: 4px solid var(--card-bg);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
position: relative;
z-index: 1;
}
.online-indicator {
position: absolute;
bottom: 8px;
right: 8px;
width: 22px;
height: 22px;
background: var(--success);
border-radius: 50%;
border: 3px solid var(--card-bg);
z-index: 2;
}
.profile-info {
flex: 1;
padding-top: 58px;
}
.profile-name-row {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 6px;
}
.profile-name {
font-size: 22px;
font-weight: 700;
color: var(--text-primary);
}
.verified-badge {
width: 20px;
height: 20px;
color: var(--primary);
display: flex;
align-items: center;
justify-content: center;
}
.profile-school {
font-size: 14px;
color: var(--text-secondary);
margin-bottom: 8px;
display: flex;
align-items: center;
gap: 6px;
}
.profile-school svg { width: 14px; height: 14px; color: var(--text-tertiary); }
.profile-bio {
font-size: 14px;
color: var(--text-secondary);
line-height: 1.6;
}
.profile-actions {
display: flex;
gap: 10px;
align-items: flex-start;
padding-top: 58px;
flex-shrink: 0;
}
.btn-edit {
height: 38px;
padding: 0 22px;
border-radius: var(--radius-full);
font-size: 14px;
font-weight: 600;
background: var(--primary);
color: #fff;
cursor: pointer;
transition: all var(--transition-fast);
display: flex;
align-items: center;
gap: 6px;
box-shadow: 0 2px 8px rgba(23, 176, 207, 0.25);
}
.btn-edit:hover {
background: var(--primary-hover);
box-shadow: 0 4px 12px rgba(23, 176, 207, 0.35);
}
.btn-edit svg { width: 16px; height: 16px; }
.btn-share {
height: 38px;
padding: 0 20px;
border-radius: var(--radius-full);
font-size: 14px;
font-weight: 500;
background: var(--bg-card);
color: var(--text-secondary);
border: 1px solid var(--border);
cursor: pointer;
transition: all var(--transition-fast);
display: flex;
align-items: center;
gap: 6px;
}
.btn-share:hover {
border-color: var(--primary);
color: var(--primary);
}
.btn-share svg { width: 16px; height: 16px; }
/* 数据统计行 */
.profile-stats {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 8px;
padding: 20px 0 4px;
border-top: 1px solid var(--border-light);
margin-top: 20px;
}
.stat-item {
display: flex;
flex-direction: column;
align-items: center;
cursor: pointer;
padding: 10px 8px;
border-radius: var(--radius-md);
transition: background var(--transition-fast);
}
.stat-item:hover { background: var(--hover-bg); }
.stat-num {
font-size: 22px;
font-weight: 700;
color: var(--text-primary);
line-height: 1.2;
}
.stat-label {
font-size: 13px;
color: var(--text-secondary);
margin-top: 6px;
}
/* ============================================================
标签页
============================================================ */
.profile-tabs {
display: flex;
gap: 4px;
background: var(--card-bg);
border-radius: var(--radius-full);
padding: 4px;
border: 1px solid var(--border-light);
align-self: flex-start;
box-shadow: var(--shadow-sm);
}
.profile-tab {
padding: 8px 24px;
font-size: 14px;
font-weight: 500;
color: var(--text-secondary);
cursor: pointer;
border-radius: var(--radius-full);
transition: all var(--transition-fast);
white-space: nowrap;
}
.profile-tab:hover { color: var(--text-primary); }
.profile-tab.active {
background: var(--primary);
color: #fff;
font-weight: 600;
box-shadow: 0 2px 8px rgba(23, 176, 207, 0.25);
}
/* ============================================================
内容网格
============================================================ */
.content-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 24px;
}
.content-card {
background: var(--card-bg);
border-radius: var(--radius-md);
overflow: hidden;
cursor: pointer;
transition: all var(--transition-base);
border: 1px solid var(--border-light);
box-shadow: var(--shadow-sm);
box-sizing: border-box;
display: flex;
flex-direction: column;
}
.content-card:hover {
transform: translateY(-3px);
box-shadow: var(--shadow-md);
border-color: var(--border);
}
.card-thumbnail {
position: relative;
aspect-ratio: 4/3;
overflow: hidden;
flex-shrink: 0;
}
.card-thumbnail-gradient {
position: absolute;
inset: 0;
}
.card-play-icon {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 48px;
height: 48px;
border-radius: 50%;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(4px);
display: flex;
align-items: center;
justify-content: center;
color: #fff;
opacity: 0;
transition: all var(--transition-base);
}
.content-card:hover .card-play-icon { opacity: 1; }
.card-play-icon svg { width: 22px; height: 22px; margin-left: 2px; }
.card-badge {
position: absolute;
top: 10px;
left: 10px;
padding: 4px 10px;
background: rgba(0, 0, 0, 0.55);
backdrop-filter: blur(6px);
color: #fff;
font-size: 11px;
font-weight: 500;
border-radius: 6px;
display: flex;
align-items: center;
gap: 4px;
z-index: 2;
}
.card-badge svg { width: 12px; height: 12px; }
.card-duration {
position: absolute;
bottom: 10px;
right: 10px;
padding: 2px 8px;
background: rgba(0, 0, 0, 0.65);
color: #fff;
font-size: 11px;
font-weight: 500;
border-radius: 4px;
z-index: 2;
}
.card-info {
padding: 14px 16px 16px;
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.card-title {
font-size: 14px;
font-weight: 500;
color: var(--text-primary);
line-height: 1.5;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
min-height: 42px;
}
.card-stats {
display: flex;
align-items: center;
gap: 16px;
margin-top: 12px;
font-size: 12px;
color: var(--text-tertiary);
flex-shrink: 0;
}
.card-stat {
display: flex;
align-items: center;
gap: 4px;
}
.card-stat svg { width: 14px; height: 14px; }
/* 动态卡片变体 */
.post-card .card-thumbnail {
aspect-ratio: 4/3;
}
.post-card-images {
position: absolute;
inset: 0;
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 2px;
padding: 2px;
}
.post-img-cell {
border-radius: 4px;
overflow: hidden;
}
.notification-work-card[data-post="canteen"] .post-img-cell:nth-child(1) { background: linear-gradient(135deg, #f9d976, #f39f5a); }
.notification-work-card[data-post="canteen"] .post-img-cell:nth-child(2) { background: linear-gradient(135deg, #ee8572, #d95862); }
.notification-work-card[data-post="canteen"] .post-img-cell:nth-child(3) { background: linear-gradient(135deg, #7dd5a1, #3dbb94); }
.notification-work-card[data-post="canteen"] .post-img-cell:nth-child(4) { background: linear-gradient(135deg, #a6dfe2, #54bfc9); }
.notification-work-card[data-post="milk-tea"] .post-img-cell:nth-child(1) { background: linear-gradient(135deg, #a7e7d2, #65cdb5); }
.notification-work-card[data-post="milk-tea"] .post-img-cell:nth-child(2) { background: linear-gradient(135deg, #f8d5aa, #eead7a); }
.notification-work-card[data-post="milk-tea"] .post-img-cell:nth-child(3) { background: linear-gradient(135deg, #efb9be, #db8fa6); }
.notification-work-card[data-post="milk-tea"] .post-img-cell:nth-child(4) { background: linear-gradient(135deg, #9fd6e9, #60bcd4); }
/* ============================================================
右侧边栏
============================================================ */
.right-sidebar {
width: var(--right-sidebar-width);
flex-shrink: 0;
display: flex;
flex-direction: column;
gap: 16px;
position: sticky;
top: 24px;
height: fit-content;
box-sizing: border-box;
}
.side-card {
background: var(--card-bg);
border-radius: var(--radius-lg);
padding: 20px;
border: 1px solid var(--border-light);
box-shadow: var(--shadow-sm);
box-sizing: border-box;
overflow: hidden;
}
.side-card-title {
font-size: 15px;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 16px;
display: flex;
align-items: center;
gap: 8px;
}
.side-card-title svg {
width: 18px;
height: 18px;
color: var(--primary);
}
/* 等级卡片 */
.level-display {
display: flex;
align-items: center;
gap: 14px;
margin-bottom: 16px;
}
.level-badge {
width: 56px;
height: 56px;
border-radius: 50%;
background: linear-gradient(135deg, var(--primary-light), var(--primary));
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: #fff;
flex-shrink: 0;
box-shadow: 0 4px 12px rgba(23, 176, 207, 0.25);
}
.level-text {
font-size: 10px;
font-weight: 500;
opacity: 0.9;
}
.level-num {
font-size: 20px;
font-weight: 700;
line-height: 1;
margin-top: 2px;
}
.level-info { flex: 1; }
.level-name {
font-size: 14px;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 4px;
}
.level-exp-text {
font-size: 12px;
color: var(--text-secondary);
}
.level-exp-text span { color: var(--primary); font-weight: 600; }
.progress-bar {
height: 6px;
background: var(--hover-bg);
border-radius: 3px;
overflow: hidden;
}
.progress-fill {
height: 100%;
background: linear-gradient(90deg, var(--primary-light), var(--primary));
border-radius: 3px;
width: 65%;
transition: width 0.3s;
}
/* 签到卡片 */
.checkin-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16px;
}
.checkin-streak {
display: flex;
align-items: center;
gap: 6px;
font-size: 13px;
color: var(--text-secondary);
}
.checkin-streak strong {
color: var(--primary);
font-size: 18px;
font-weight: 700;
}
.checkin-streak svg {
width: 16px;
height: 16px;
color: var(--warning);
}
.checkin-btn {
width: 100%;
height: 44px;
background: linear-gradient(135deg, var(--primary-light), var(--primary));
color: #fff;
border: none;
border-radius: var(--radius-md);
font-size: 15px;
font-weight: 600;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
transition: all var(--transition-base);
box-shadow: 0 4px 12px rgba(23, 176, 207, 0.25);
}
.checkin-btn:hover {
transform: translateY(-1px);
box-shadow: 0 6px 16px rgba(23, 176, 207, 0.35);
}
.checkin-btn svg { width: 18px; height: 18px; }
.checkin-days {
display: flex;
justify-content: space-between;
margin-top: 16px;
}
.day-item {
display: flex;
flex-direction: column;
align-items: center;
gap: 6px;
}
.day-dot {
width: 26px;
height: 26px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 11px;
font-weight: 600;
}
.day-dot.active {
background: var(--primary);
color: #fff;
box-shadow: 0 2px 8px rgba(23, 176, 207, 0.3);
}
.day-dot.done {
background: var(--primary-bg);
color: var(--primary);
}
.day-dot.todo {
background: var(--hover-bg);
color: var(--text-tertiary);
}
.day-label {
font-size: 11px;
color: var(--text-tertiary);
}
/* 数据概览卡片 */
.data-list {
display: flex;
flex-direction: column;
gap: 16px;
}
.data-item {
display: flex;
align-items: center;
justify-content: space-between;
}
.data-item-left {
display: flex;
align-items: center;
gap: 10px;
}
.data-icon {
width: 38px;
height: 38px;
border-radius: var(--radius-sm);
display: flex;
align-items: center;
justify-content: center;
color: var(--primary);
background: var(--primary-bg);
}
.data-icon svg { width: 18px; height: 18px; }
.data-label {
font-size: 13px;
color: var(--text-secondary);
}
.data-value {
font-size: 17px;
font-weight: 700;
color: var(--text-primary);
text-align: right;
}
.data-trend {
font-size: 11px;
color: var(--success);
display: flex;
align-items: center;
gap: 2px;
justify-content: flex-end;
margin-top: 2px;
}
.data-trend.down { color: var(--error); }
.data-trend svg { width: 10px; height: 10px; }
</style>
<link rel="stylesheet" href="../css/web-refresh.css?v=20261020-brand-color">
</head>
<body class="profile-page">
<div class="app" style="height: 1083px;">
<!-- ===== 左侧边栏 ===== -->
<aside class="sidebar">
<!-- Logo -->
<div class="sidebar-logo">
<div class="logo-icon">青</div>
<span class="logo-text"><span>青</span>核</span>
</div>
<!-- 发布按钮 -->
<button class="publish-btn">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
<line x1="12" y1="5" x2="12" y2="19"></line>
<line x1="5" y1="12" x2="19" y2="12"></line>
</svg>
发布内容
</button>
<!-- 导航 -->
<nav class="sidebar-nav">
<div class="nav-section-title">探索</div>
<div class="nav-item">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path>
<polyline points="9 22 9 12 15 12 15 22"></polyline>
</svg>
首页
</div>
<div class="nav-item">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M19 20H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v1m2 13a2 2 0 0 1-2-2V7m2 13a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2m-4-3H9M7 16h6M7 8h6v4H7V8z"></path>
</svg>
动态
</div>
<div class="nav-item">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polygon points="23 7 16 12 23 17 23 7"></polygon>
<rect x="1" y="5" width="15" height="14" rx="2" ry="2"></rect>
</svg>
视频
</div>
<div class="nav-item">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect>
<line x1="16" y1="2" x2="16" y2="6"></line>
<line x1="8" y1="2" x2="8" y2="6"></line>
<line x1="3" y1="10" x2="21" y2="10"></line>
</svg>
活动
</div>
<div class="nav-item">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"></path>
</svg>
话题广场
</div>
<div class="nav-section-title">我的</div>
<div class="nav-item active">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path>
<circle cx="12" cy="7" r="4"></circle>
</svg>
个人中心
</div>
<div class="nav-item">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
</svg>
<span>消息通知</span>
<span class="nav-badge">3</span>
</div>
<div class="nav-item">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"></path>
</svg>
我的收藏
</div>
<div class="nav-item">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<circle cx="12" cy="12" r="3"></circle>
<path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path>
</svg>
设置
</div>
</nav>
<!-- 底部用户卡片 -->
<div class="sidebar-footer">
<div class="sidebar-user-card">
<div class="sidebar-avatar">林</div>
<div class="sidebar-user-info">
<div class="sidebar-user-name">林小夏</div>
<div class="sidebar-user-desc">复旦大学</div>
</div>
<svg class="sidebar-user-arrow" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="9 18 15 12 9 6"></polyline>
</svg>
</div>
</div>
</aside>
<!-- ===== 主内容区 ===== -->
<main class="main-content">
<!-- ===== 个人资料主列 ===== -->
<div class="profile-column">
<!-- 个人资料头部卡片 -->
<div class="profile-header-card">
<div class="profile-cover">
<div class="profile-cover-actions">
<button class="cover-icon-btn" type="button" title="更换封面" data-profile-action="cover">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"></path>
<circle cx="12" cy="13" r="4"></circle>
</svg>
</button>
<button class="cover-icon-btn" type="button" title="更多" aria-label="更多主页操作" aria-expanded="false" data-profile-action="more">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<circle cx="12" cy="12" r="1"></circle>
<circle cx="19" cy="12" r="1"></circle>
<circle cx="5" cy="12" r="1"></circle>
</svg>
</button>
</div>
<div class="profile-more-menu" hidden>
<button type="button" data-profile-menu="copy">复制主页链接</button>
<button type="button" data-profile-menu="settings">账号设置</button>
</div>
</div>
<div class="profile-body">
<div class="profile-top-row">
<div class="profile-avatar-wrap">
<div class="profile-avatar">林</div>
<div class="online-indicator"></div>
</div>
<div class="profile-info">
<div class="profile-name-row">
<span class="profile-name">林小夏</span>
<div class="verified-badge" title="已认证">
<svg viewBox="0 0 24 24" fill="currentColor">
<path d="M12 2l2.4 2.8 3.6-.6 1.2 3.4 3 2-1.8 3 1.8 3-3 2-1.2 3.4-3.6-.6L12 22l-2.4-2.8-3.6.6-1.2-3.4-3-2 1.8-3-1.8-3 3-2 1.2-3.4 3.6.6L12 2zm-1.2 14.8l5.2-5.2-1.4-1.4-3.8 3.8-1.8-1.8-1.4 1.4 3.2 3.2z"></path>
</svg>
</div>
</div>
<div class="profile-school">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M22 10v6M2 10l10-5 10 5-10 5z"></path>
<path d="M6 12v5c3 3 9 3 12 0v-5"></path>
</svg>
复旦大学 · 计算机科学与技术系 · 大二
</div>
<div class="profile-identity-row">
<span>已实名</span><span>上海</span><span>校园创作者</span>
</div>
<div class="profile-bio">热爱编程的大二学生,正在学习前端开发,欢迎一起交流探讨技术~</div>
</div>
<div class="profile-actions">
<button class="btn-edit">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path>
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path>
</svg>
编辑资料
</button>
<button class="btn-share">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<circle cx="18" cy="5" r="3"></circle>
<circle cx="6" cy="12" r="3"></circle>
<circle cx="18" cy="19" r="3"></circle>
<line x1="8.59" y1="13.51" x2="15.42" y2="17.49"></line>
<line x1="15.41" y1="6.51" x2="8.59" y2="10.49"></line>
</svg>
分享主页
</button>
</div>
</div>
<!-- 数据统计行 -->
<div class="profile-stats">
<div class="stat-item">
<span class="stat-num">42</span>
<span class="stat-label">动态</span>
</div>
<div class="stat-item">
<span class="stat-num">289</span>
<span class="stat-label">关注</span>
</div>
<div class="stat-item">
<span class="stat-num">1,256</span>
<span class="stat-label">粉丝</span>
</div>
<div class="stat-item">
<span class="stat-num">8,432</span>
<span class="stat-label">获赞</span>
</div>
<div class="stat-item">
<span class="stat-num">2,180</span>
<span class="stat-label">积分</span>
</div>
</div>
</div>
</div>
<!-- 标签页 -->
<div class="profile-tabs">
<div class="profile-tab active">作品</div>
<div class="profile-tab">收藏</div>
<div class="profile-tab">喜欢</div>
<div class="profile-tab">浏览历史</div>
</div>
<!-- 内容网格 -->
<div class="content-grid">
<!-- Card 1 - 视频 -->
<div class="content-card" data-href="video-detail.html?video=study-vlog">
<div class="card-thumbnail">
<div class="card-thumbnail-gradient" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);"></div>
<div class="card-badge">
<svg viewBox="0 0 24 24" fill="currentColor"><polygon points="5 3 19 12 5 21 5 3"></polygon></svg>
视频
</div>
<div class="card-play-icon">
<svg viewBox="0 0 24 24" fill="currentColor"><polygon points="5 3 19 12 5 21 5 3"></polygon></svg>
</div>
<span class="card-duration">03:24</span>
</div>
<div class="card-info">
<div class="card-title">期末复习vlog | 图书馆打卡12小时高效学习日常</div>
<div class="card-stats">
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
<circle cx="12" cy="12" r="3"></circle>
</svg>
4.3万
</div>
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path>
</svg>
1567
</div>
</div>
</div>
</div>
<!-- Card 2 - 视频 -->
<div class="content-card" data-href="video-detail.html?video=dorm-makeover">
<div class="card-thumbnail">
<div class="card-thumbnail-gradient" style="background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);"></div>
<div class="card-badge">
<svg viewBox="0 0 24 24" fill="currentColor"><polygon points="5 3 19 12 5 21 5 3"></polygon></svg>
视频
</div>
<div class="card-play-icon">
<svg viewBox="0 0 24 24" fill="currentColor"><polygon points="5 3 19 12 5 21 5 3"></polygon></svg>
</div>
<span class="card-duration">01:47</span>
</div>
<div class="card-info">
<div class="card-title">宿舍改造vlog | 花500块变身ins风小窝</div>
<div class="card-stats">
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
<circle cx="12" cy="12" r="3"></circle>
</svg>
8.2万
</div>
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path>
</svg>
1823
</div>
</div>
</div>
</div>
<!-- Card 3 - 动态 -->
<div class="content-card post-card" data-href="post-detail.html?post=study-week">
<div class="card-thumbnail">
<div class="post-card-images">
<div class="post-img-cell" style="background: linear-gradient(135deg, #84fab0 0%, #8fd3f4 100%);"></div>
<div class="post-img-cell" style="background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%);"></div>
<div class="post-img-cell" style="background: linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%);"></div>
<div class="post-img-cell" style="background: linear-gradient(135deg, #ff9a9e 0%, #fecfef 100%);"></div>
</div>
<div class="card-badge">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
<polyline points="14 2 14 8 20 8"></polyline>
</svg>
动态
</div>
</div>
<div class="card-info">
<div class="card-title">期末复习周开始了,今天在图书馆学习了8小时!高数太难了</div>
<div class="card-stats">
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path>
</svg>
48
</div>
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
</svg>
12
</div>
</div>
</div>
</div>
<!-- Card 4 - 视频 -->
<div class="content-card" data-href="video-detail.html?video=volunteer-day">
<div class="card-thumbnail">
<div class="card-thumbnail-gradient" style="background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);"></div>
<div class="card-badge">
<svg viewBox="0 0 24 24" fill="currentColor"><polygon points="5 3 19 12 5 21 5 3"></polygon></svg>
视频
</div>
<div class="card-play-icon">
<svg viewBox="0 0 24 24" fill="currentColor"><polygon points="5 3 19 12 5 21 5 3"></polygon></svg>
</div>
<span class="card-duration">02:15</span>
</div>
<div class="card-info">
<div class="card-title">志愿服务vlog | 周末敬老院做义工的一天</div>
<div class="card-stats">
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
<circle cx="12" cy="12" r="3"></circle>
</svg>
2.4万
</div>
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path>
</svg>
678
</div>
</div>
</div>
</div>
<!-- Card 5 - 动态 -->
<!-- Card 6 - 视频 -->
<div class="content-card post-card" data-href="post-detail.html?post=hotpot-weekend" data-editor-id="editor-node-muaxy026-1">
<div class="card-thumbnail">
<div class="post-card-images">
<div class="post-img-cell" style="background: linear-gradient(135deg, #FED7AA, #FB923C);"></div>
<div class="post-img-cell" style="background: linear-gradient(135deg, #FECACA, #F87171);"></div>
<div class="post-img-cell" style="background: linear-gradient(135deg, #C4B5FD, #8B5CF6);"></div>
<div class="post-img-cell" style="background: linear-gradient(135deg, #93C5FD, #3B82F6);"></div>
</div>
<div class="card-badge">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
<polyline points="14 2 14 8 20 8"></polyline>
</svg>
动态
</div>
</div>
<div class="card-info">
<div class="card-title">周末和室友去吃了火锅,太满足了!这家店的毛肚真的绝了</div>
<div class="card-stats">
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path>
</svg>
86
</div>
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
</svg>
18
</div>
</div>
</div>
</div><div class="content-card" data-href="video-detail.html?video=campus-food">
<div class="card-thumbnail">
<div class="card-thumbnail-gradient" style="background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);"></div>
<div class="card-badge">
<svg viewBox="0 0 24 24" fill="currentColor"><polygon points="5 3 19 12 5 21 5 3"></polygon></svg>
视频
</div>
<div class="card-play-icon">
<svg viewBox="0 0 24 24" fill="currentColor"><polygon points="5 3 19 12 5 21 5 3"></polygon></svg>
</div>
<span class="card-duration">04:02</span>
</div>
<div class="card-info">
<div class="card-title">校园美食探店 | 学校周边最好吃的10家店测评</div>
<div class="card-stats">
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
<circle cx="12" cy="12" r="3"></circle>
</svg>
6.7万
</div>
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path>
</svg>
2341
</div>
</div>
</div>
</div>
<!-- Card 7 - 动态 -->
<div class="content-card post-card" data-href="post-detail.html?post=vscode-extensions">
<div class="card-thumbnail">
<div class="post-card-images">
<div class="post-img-cell" style="background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%);"></div>
<div class="post-img-cell" style="background: linear-gradient(135deg, #d299c2 0%, #fef9d7 100%);"></div>
<div class="post-img-cell" style="background: linear-gradient(135deg, #f6d365 0%, #fda085 100%);"></div>
<div class="post-img-cell" style="background: linear-gradient(135deg, #84fab0 0%, #8fd3f4 100%);"></div>
</div>
<div class="card-badge">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
<polyline points="14 2 14 8 20 8"></polyline>
</svg>
动态
</div>
</div>
<div class="card-info">
<div class="card-title">分享一个超好用的VS Code插件合集,提升开发效率必备!</div>
<div class="card-stats">
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path>
</svg>
128
</div>
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
</svg>
34
</div>
</div>
</div>
</div>
<!-- Card 8 - 视频 -->
<div class="content-card" data-href="video-detail.html?video=freshman-guide">
<div class="card-thumbnail">
<div class="card-thumbnail-gradient" style="background: linear-gradient(135deg, #a18cd1 0%, #fbc2eb 100%);"></div>
<div class="card-badge">
<svg viewBox="0 0 24 24" fill="currentColor"><polygon points="5 3 19 12 5 21 5 3"></polygon></svg>
视频
</div>
<div class="card-play-icon">
<svg viewBox="0 0 24 24" fill="currentColor"><polygon points="5 3 19 12 5 21 5 3"></polygon></svg>
</div>
<span class="card-duration">05:30</span>
</div>
<div class="card-info">
<div class="card-title">大一新生必看 | 校园生存指南与社团选择建议</div>
<div class="card-stats">
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
<circle cx="12" cy="12" r="3"></circle>
</svg>
12.5万
</div>
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path>
</svg>
4521
</div>
</div>
</div>
</div>
<!-- Card 9 - 动态 -->
<div class="content-card post-card" data-href="post-detail.html?post=campus-sunset">
<div class="card-thumbnail">
<div class="post-card-images">
<div class="post-img-cell" style="background: linear-gradient(135deg, #93C5FD, #3B82F6);"></div>
<div class="post-img-cell" style="background: linear-gradient(135deg, #67E8F9, #06B6D4);"></div>
<div class="post-img-cell" style="background: linear-gradient(135deg, #A7F3D0, #10B981);"></div>
<div class="post-img-cell" style="background: linear-gradient(135deg, #FDE68A, #F59E0B);"></div>
</div>
<div class="card-badge">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
<polyline points="14 2 14 8 20 8"></polyline>
</svg>
动态
</div>
</div>
<div class="card-info">
<div class="card-title">今天的天空好美啊,随手拍了一张,校园的晚霞永远最治愈</div>
<div class="card-stats">
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path>
</svg>
64
</div>
<div class="card-stat">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
</svg>
8
</div>
</div>
</div>
</div>
</div>
</div>
<!-- ===== 右侧边栏 ===== -->
<aside class="right-sidebar">
<!-- 我的等级 -->
<div class="side-card">
<div class="side-card-title">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon>
</svg>
我的等级
</div>
<div class="level-display">
<div class="level-badge">
<span class="level-text">LV</span>
<span class="level-num">3</span>
</div>
<div class="level-info">
<div class="level-name">校园新星</div>
<div class="level-exp-text"><span>650</span> / 1000 EXP</div>
</div>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 65%;"></div>
</div>
</div>
<!-- 今日签到 -->
<div class="side-card checkin-card">
<div class="side-card-title">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M8 2v4"></path>
<path d="M16 2v4"></path>
<rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect>
<path d="M3 10h18"></path>
</svg>
今日签到
</div>
<div class="checkin-header">
<div class="checkin-streak">
<svg viewBox="0 0 24 24" fill="currentColor">
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"></path>
</svg>
连续签到 <strong>7</strong> 天
</div>
</div>
<button class="checkin-btn">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path>
<polyline points="22 4 12 14.01 9 11.01"></polyline>
</svg>
立即签到
</button>
<div class="checkin-days">
<div class="day-item">
<div class="day-dot done">一</div>
<span class="day-label">周一</span>
</div>
<div class="day-item">
<div class="day-dot done">二</div>
<span class="day-label">周二</span>
</div>
<div class="day-item">
<div class="day-dot done">三</div>
<span class="day-label">周三</span>
</div>
<div class="day-item">
<div class="day-dot done">四</div>
<span class="day-label">周四</span>
</div>
<div class="day-item">
<div class="day-dot done">五</div>
<span class="day-label">周五</span>
</div>
<div class="day-item">
<div class="day-dot done">六</div>
<span class="day-label">周六</span>
</div>
<div class="day-item">
<div class="day-dot active">日</div>
<span class="day-label">周日</span>
</div>
</div>
</div>
<!-- 数据概览 -->
<div class="side-card">
<div class="side-card-title">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<line x1="18" y1="20" x2="18" y2="10"></line>
<line x1="12" y1="20" x2="12" y2="4"></line>
<line x1="6" y1="20" x2="6" y2="14"></line>
</svg>
数据概览
</div>
<div class="data-list">
<div class="data-item">
<div class="data-item-left">
<div class="data-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
<polyline points="14 2 14 8 20 8"></polyline>
</svg>
</div>
<span class="data-label">本周发布</span>
</div>
<div>
<div class="data-value">12</div>
<div class="data-trend">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="18 15 12 9 6 15"></polyline>
</svg>
20%
</div>
</div>
</div>
<div class="data-item">
<div class="data-item-left">
<div class="data-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path>
</svg>
</div>
<span class="data-label">互动数</span>
</div>
<div>
<div class="data-value">328</div>
<div class="data-trend">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="18 15 12 9 6 15"></polyline>
</svg>
15%
</div>
</div>
</div>
<div class="data-item">
<div class="data-item-left">
<div class="data-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path>
<circle cx="9" cy="7" r="4"></circle>
<path d="M23 21v-2a4 4 0 0 0-3-3.87"></path>
<path d="M16 3.13a4 4 0 0 1 0 7.75"></path>
</svg>
</div>
<span class="data-label">新增粉丝</span>
</div>
<div>
<div class="data-value">86</div>
<div class="data-trend down">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="6 9 12 15 18 9"></polyline>
</svg>
5%
</div>
</div>
</div>
</div>
</div>
</aside>
</main>
</div>
<script src="../js/web-local-data.js?v=20261016-local" defer></script>
<script src="../js/web-api.js?v=20261020-api" defer></script>
<script src="../js/web-shell.js?v=20261013-publish" defer></script>
<script src="../js/web-publishing.js?v=20261016-local" defer></script>
</body>
</html>