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
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>
|
|
|
|
|