Files
YschcmsService/src/main/resources/templates/themes/scholar-blue/assets/css/main.css
T
chenxing a3bee60b61 feat(B4): 友链页脚 Logo 渲染-5主题 img+名称并排,渲染期补基准
- PortalLink 模型已有 logoUrl,渲染缺口在模板:5 套 footer 增 th:if logo 图(url.upload 补基准+alt 名称+lazy)
- 5 套 main.css 增 .link-logo(高20px/contain/垂直居中/过宽截断)
- PortalSsrIT+2 例(有 logo 渲染图/无 logo 纯文字无 link-logo);mvn -o test 260/260 全绿
2026-09-07 20:22:44 +08:00

1308 lines
40 KiB
CSS

/* =====================================================================
scholar-blue · 学院蓝主题(参考语言:经典学院派门户)
设计语言:深蓝顶栏/品牌行 + 白底主导航(吸顶反蓝) + 主蓝半透明下拉面板
+ 居中双线栏目标题 + 日期方块 + 深蓝圆环纹理页脚
色彩令牌全部走 CSS 变量,theme.json color 参数经 :root 覆盖真实生效。
===================================================================== */
/* ---------------------------------------------------------------------
1. 设计令牌(与 theme.json params 一一对应,禁止出现未消费的声明)
--------------------------------------------------------------------- */
:root {
--sp-primary: #0a5aa8; /* 主色:顶栏/品牌行/标题/强调 */
--sp-primary-dark: #033d70; /* 主色加深:hover/渐变端/页脚深端 */
--sp-primary-light: #1167bb; /* 主色提亮:亮线条/hover 链接/角标 */
--sp-nav-bg: #ffffff; /* 主导航条底色(白条学院风) */
--sp-footer-bg: #0b4781; /* 页脚主底 */
--sp-text: #333333; /* 正文 */
--sp-text-light: #777777; /* 次要文字 */
--sp-bg: #eff2f6; /* 页面底色 */
--sp-card-bg: #ffffff; /* 卡片底 */
--sp-border: #e3e7ee; /* 边框/分隔线 */
--sp-ink-on-dark: #ffffff; /* 深底主文字 */
--sp-ink-on-dark-soft: rgba(255,255,255,.72); /* 深底次要文字 */
--sp-ink-on-dark-faint: rgba(255,255,255,.45);
--sp-panel: rgba(10,90,168,.94); /* 下拉面板(主色半透明) */
--sp-shadow-sm: 0 1px 4px rgba(3,61,112,.08);
--sp-shadow-md: 0 6px 18px rgba(3,61,112,.12);
--sp-shadow-lg: 0 14px 34px rgba(3,61,112,.18);
--sp-radius: 6px;
--sp-radius-lg: 10px;
--sp-speed: .28s;
--sp-font: "Microsoft YaHei", "PingFang SC", "Hiragino Sans GB", "Helvetica Neue", Arial, sans-serif;
}
/* ---------------------------------------------------------------------
2. Reset 与基础
--------------------------------------------------------------------- */
* { margin: 0; padding: 0; box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
font-family: var(--sp-font);
font-size: 14px;
line-height: 1.7;
color: var(--sp-text);
background: var(--sp-bg);
word-break: break-word;
}
ul, ol { list-style: none; }
a { color: var(--sp-primary); text-decoration: none; transition: color var(--sp-speed) ease; }
a:hover { color: var(--sp-primary-light); }
img { max-width: 100%; display: block; border: 0; }
button { font-family: inherit; cursor: pointer; }
input, button, select, textarea { font-size: inherit; color: inherit; }
::selection { background: var(--sp-primary); color: #fff; }
/* 跳转链接:仅键盘聚焦时可见 */
.skip-link {
position: absolute; left: -999px; top: 0; z-index: 300;
background: var(--sp-primary-dark); color: #fff;
padding: 8px 18px; border-radius: 0 0 var(--sp-radius) 0;
}
.skip-link:focus { left: 0; color: #fff; }
/* 通用容器 */
.sp-container {
width: 1200px; max-width: calc(100% - 40px);
margin: 0 auto;
}
/* 屏幕阅读器专用 */
.sp-visually-hidden {
position: absolute; width: 1px; height: 1px;
margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap;
}
/* 置顶徽章 */
.sp-top-badge {
display: inline-block; flex: none;
padding: 0 7px; line-height: 18px;
font-size: 12px; color: #fff;
background: var(--sp-primary-light);
border-radius: 2px;
letter-spacing: 1px;
}
/* 空状态 */
.sp-empty {
padding: 56px 20px;
text-align: center;
color: var(--sp-text-light);
}
.sp-empty p:first-child { font-size: 16px; margin-bottom: 8px; }
.sp-empty-hint { font-size: 13px; color: var(--sp-text-light); opacity: .75; }
/* ---------------------------------------------------------------------
3. 顶栏(深蓝细条:日期 + 院系切换)
--------------------------------------------------------------------- */
.sp-topbar {
background: linear-gradient(90deg, var(--sp-primary-dark), var(--sp-primary));
color: var(--sp-ink-on-dark-soft);
font-size: 13px;
}
.sp-topbar-inner {
width: 1200px; max-width: calc(100% - 40px);
margin: 0 auto;
display: flex; align-items: center; justify-content: space-between;
min-height: 36px;
}
.sp-topbar-date { letter-spacing: .5px; }
.sp-topbar-side { position: relative; }
/* 院系切换:细字 + 箭头,展开为深蓝面板 */
.sp-colleges { position: relative; }
.sp-colleges-toggle {
display: inline-flex; align-items: center; gap: 6px;
padding: 4px 2px;
cursor: pointer;
}
.sp-colleges-toggle a { color: var(--sp-ink-on-dark-soft); }
.sp-colleges-toggle a:hover { color: #fff; }
.sp-colleges-arrow {
font-style: normal; font-size: 10px;
transition: transform var(--sp-speed) ease;
}
.sp-colleges:hover .sp-colleges-arrow { transform: rotate(180deg); }
.sp-colleges-menu {
position: absolute; right: 0; top: calc(100% + 6px);
min-width: 180px; max-height: 280px; overflow: auto;
background: var(--sp-panel);
backdrop-filter: blur(4px);
border-top: 2px solid var(--sp-primary-light);
border-radius: 0 0 var(--sp-radius) var(--sp-radius);
box-shadow: var(--sp-shadow-lg);
padding: 6px 0;
opacity: 0; visibility: hidden; transform: translateY(-6px);
transition: opacity var(--sp-speed) ease, transform var(--sp-speed) ease, visibility var(--sp-speed);
z-index: 120;
}
.sp-colleges:hover .sp-colleges-menu,
.sp-colleges:focus-within .sp-colleges-menu {
opacity: 1; visibility: visible; transform: translateY(0);
}
.sp-colleges-menu li a {
display: block;
padding: 7px 16px;
color: var(--sp-ink-on-dark);
font-size: 13px;
border-left: 2px solid transparent;
transition: background var(--sp-speed) ease, border-color var(--sp-speed) ease, padding-left var(--sp-speed) ease;
}
.sp-colleges-menu li a:hover {
background: var(--sp-primary-dark);
border-left-color: var(--sp-primary-light);
padding-left: 20px;
color: #fff;
}
.sp-colleges-menu li.active a {
background: rgba(255,255,255,.08);
border-left-color: var(--sp-primary-light);
color: #fff;
}
/* ---------------------------------------------------------------------
4. 品牌行(深蓝主区:徽标 + 站名 + 圆角搜索)
--------------------------------------------------------------------- */
.sp-brandbar {
background: linear-gradient(100deg, var(--sp-primary-dark) 0%, var(--sp-primary) 62%, var(--sp-primary-light) 130%);
color: var(--sp-ink-on-dark);
position: relative;
overflow: hidden;
}
/* 品牌行右侧淡圆环装饰(CSS 绘制,无图片依赖) */
.sp-brandbar::before,
.sp-brandbar::after {
content: "";
position: absolute;
border-radius: 50%;
border: 26px solid rgba(255,255,255,.05);
pointer-events: none;
}
.sp-brandbar::before { width: 320px; height: 320px; right: -80px; top: -170px; }
.sp-brandbar::after { width: 200px; height: 200px; right: 180px; bottom: -140px; border-width: 16px; }
.sp-brandbar-inner {
width: 1200px; max-width: calc(100% - 40px);
margin: 0 auto;
display: flex; align-items: center; justify-content: space-between;
gap: 24px;
padding: 22px 0;
position: relative; z-index: 1;
}
.sp-brand {
display: flex; align-items: center; gap: 14px;
min-width: 0;
}
/* 徽标容器:白衬圆角方块,校徽任何底色都干净 */
.sp-brand-badge {
flex: none;
width: 58px; height: 58px;
display: inline-flex; align-items: center; justify-content: center;
background: rgba(255,255,255,.94);
border-radius: var(--sp-radius);
box-shadow: 0 2px 8px rgba(3,61,112,.35);
overflow: hidden;
}
.sp-brand-badge--plain { color: var(--sp-primary); }
.sp-logo { width: 100%; height: 100%; object-fit: contain; }
.sp-site-name {
color: var(--sp-ink-on-dark);
font-size: 27px;
font-weight: 700;
letter-spacing: 2px;
line-height: 1.3;
text-shadow: 0 2px 6px rgba(3,61,112,.4);
white-space: nowrap;
overflow: hidden; text-overflow: ellipsis;
max-width: 560px;
}
.sp-site-name:hover { color: #fff; }
/* 搜索:白色胶囊(学院风记忆点) */
.sp-search {
flex: none;
display: flex; align-items: center;
width: 300px; max-width: 36%;
background: #fff;
border-radius: 999px;
padding: 3px 4px 3px 18px;
box-shadow: 0 3px 10px rgba(3,61,112,.28);
}
.sp-search input {
flex: 1; min-width: 0;
border: 0; outline: none;
background: transparent;
font-size: 13px; color: var(--sp-text);
line-height: 30px;
}
.sp-search input::placeholder { color: #a9b3c0; }
.sp-search button {
flex: none;
width: 32px; height: 32px;
border: 0; border-radius: 50%;
background: var(--sp-primary);
color: #fff;
display: inline-flex; align-items: center; justify-content: center;
transition: background var(--sp-speed) ease, transform var(--sp-speed) ease;
}
.sp-search button:hover { background: var(--sp-primary-light); transform: scale(1.06); }
/* ---------------------------------------------------------------------
5. 主导航(白底条 + 主蓝半透明下拉面板 + 吸顶反蓝)
--------------------------------------------------------------------- */
.sp-nav {
background: var(--sp-nav-bg);
box-shadow: var(--sp-shadow-sm);
position: relative;
z-index: 100;
}
/* 顶部主蓝细线:把导航条与品牌行缝在一起 */
.sp-nav::before {
content: "";
display: block; height: 3px;
background: linear-gradient(90deg, var(--sp-primary), var(--sp-primary-light));
}
.sp-nav-inner {
width: 1200px; max-width: calc(100% - 40px);
margin: 0 auto;
position: relative;
}
.sp-nav-toggle { display: none; }
.sp-nav-list {
display: flex;
justify-content: space-between;
}
.sp-nav-list > li { position: relative; flex: 1 1 auto; text-align: center; }
.sp-nav-list > li > a {
display: flex; align-items: center; justify-content: center; gap: 5px;
position: relative;
padding: 0 10px;
height: 52px;
font-size: 16px;
font-weight: 600;
letter-spacing: 1px;
color: var(--sp-primary-dark);
white-space: nowrap;
transition: color var(--sp-speed) ease, background var(--sp-speed) ease;
}
/* 底部指示条:hover/当前项 */
.sp-nav-list > li > a::after {
content: "";
position: absolute; left: 50%; bottom: 0;
width: 0; height: 3px;
background: var(--sp-primary);
transform: translateX(-50%);
transition: width var(--sp-speed) ease;
}
.sp-nav-list > li:hover > a,
.sp-nav-list > li.active > a {
color: var(--sp-primary);
background: rgba(10,90,168,.06);
}
.sp-nav-list > li:hover > a::after,
.sp-nav-list > li.active > a::after { width: 56%; }
.sp-caret {
font-style: normal; font-size: 11px;
opacity: .65;
transition: transform var(--sp-speed) ease;
}
.sp-nav-list > li:hover .sp-caret { transform: rotate(180deg); }
/* —— 下拉面板:主蓝半透明、顶部亮线、项 hover 加深 + 左亮条(红线第一优先级) —— */
.sp-sub {
position: absolute; left: 50%; top: 100%;
transform: translate(-50%, 10px);
min-width: 176px;
background: var(--sp-panel);
backdrop-filter: blur(6px);
border-top: 3px solid var(--sp-primary-light);
border-radius: 0 0 var(--sp-radius) var(--sp-radius);
box-shadow: var(--sp-shadow-lg);
padding: 6px 0;
text-align: left;
opacity: 0; visibility: hidden;
transition: opacity var(--sp-speed) ease, transform var(--sp-speed) ease, visibility var(--sp-speed);
z-index: 110;
}
.sp-nav-list > li:hover .sp-sub,
.sp-nav-list > li:focus-within .sp-sub {
opacity: 1; visibility: visible;
transform: translate(-50%, 0);
}
/* 面板小尖角 */
.sp-sub::before {
content: "";
position: absolute; left: 50%; top: -8px;
width: 12px; height: 12px;
background: var(--sp-primary);
transform: translateX(-50%) rotate(45deg);
border-radius: 2px 0 0 0;
}
.sp-sub li a {
display: block;
position: relative;
margin: 2px 8px;
padding: 9px 14px 9px 22px;
font-size: 14px;
color: var(--sp-ink-on-dark);
border-radius: 4px;
white-space: nowrap;
transition: background var(--sp-speed) ease, padding-left var(--sp-speed) ease, color var(--sp-speed) ease;
}
/* 项前细刻度线 */
.sp-sub li a::before {
content: "";
position: absolute; left: 10px; top: 50%;
width: 4px; height: 4px;
margin-top: -2px;
background: rgba(255,255,255,.5);
border-radius: 50%;
transition: background var(--sp-speed) ease, box-shadow var(--sp-speed) ease;
}
.sp-sub li a:hover {
background: var(--sp-primary-dark);
padding-left: 26px;
color: #fff;
}
.sp-sub li a:hover::before {
background: var(--sp-primary-light);
box-shadow: 0 0 6px var(--sp-primary-light);
}
/* —— 吸顶反蓝(.sp-nav--fixed 由 main.js 滚动加挂) —— */
.sp-nav--fixed {
position: fixed; left: 0; right: 0; top: 0;
background: linear-gradient(90deg, var(--sp-primary-dark), var(--sp-primary));
box-shadow: var(--sp-shadow-md);
animation: sp-nav-drop var(--sp-speed) ease;
}
@keyframes sp-nav-drop {
from { transform: translateY(-100%); }
to { transform: translateY(0); }
}
.sp-nav--fixed::before { height: 0; }
.sp-nav--fixed .sp-nav-list > li > a { color: var(--sp-ink-on-dark); }
.sp-nav--fixed .sp-nav-list > li:hover > a,
.sp-nav--fixed .sp-nav-list > li.active > a {
color: #fff;
background: rgba(255,255,255,.1);
}
.sp-nav--fixed .sp-nav-list > li > a::after { background: var(--sp-primary-light); }
/* 吸顶态下拉:底色更沉,与蓝条衔接 */
.sp-nav--fixed .sp-sub { background: rgba(3,61,112,.96); }
.sp-nav--fixed .sp-sub::before { background: var(--sp-primary-dark); }
/* 吸顶占位,防跳变(main.js 加挂时同步高度,解锁即移除) */
.sp-nav-holder { display: block; }
/* ---------------------------------------------------------------------
6. 首页 banner(通栏轮播 + 圆形箭头 + 底部圆点)
--------------------------------------------------------------------- */
.sp-banner {
position: relative;
overflow: hidden;
background: var(--sp-primary-dark);
}
.sp-banner-slides { position: relative; height: 520px; }
.sp-banner-slide {
position: absolute; inset: 0;
opacity: 0; visibility: hidden;
transition: opacity .8s ease, visibility .8s ease;
}
.sp-banner-slide.active { opacity: 1; visibility: visible; z-index: 1; }
.sp-banner-slide img {
width: 100%; height: 100%;
object-fit: cover;
}
/* 底部渐隐遮罩上承标题 */
.sp-banner-slide::after {
content: "";
position: absolute; left: 0; right: 0; bottom: 0;
height: 120px;
background: linear-gradient(180deg, transparent, rgba(3,61,112,.66));
pointer-events: none;
}
.sp-banner-slide.active img { animation: sp-banner-zoom 6.5s ease forwards; }
@keyframes sp-banner-zoom {
from { transform: scale(1); }
to { transform: scale(1.045); }
}
.sp-banner-title {
position: absolute; left: 6%; bottom: 34px;
z-index: 2;
max-width: 70%;
color: #fff;
font-size: 24px;
font-weight: 600;
letter-spacing: 1px;
text-shadow: 0 2px 8px rgba(3,61,112,.6);
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
/* 圆形半透明箭头(建平语言) */
.sp-banner-arrow {
position: absolute; top: 50%; z-index: 3;
width: 52px; height: 52px; margin-top: -26px;
border: 2px solid rgba(255,255,255,.75);
border-radius: 50%;
background: rgba(3,61,112,.25);
color: #fff;
font-size: 26px; line-height: 1;
display: inline-flex; align-items: center; justify-content: center;
padding-bottom: 4px;
opacity: 0;
transition: opacity var(--sp-speed) ease, background var(--sp-speed) ease, border-color var(--sp-speed) ease;
}
.sp-banner:hover .sp-banner-arrow { opacity: 1; }
.sp-banner-arrow:hover { background: var(--sp-primary); border-color: #fff; }
.sp-banner-arrow.prev { left: 26px; }
.sp-banner-arrow.next { right: 26px; }
/* 圆点指示器 */
.sp-banner-dots {
position: absolute; left: 0; right: 0; bottom: 18px;
z-index: 3;
display: flex; justify-content: center; gap: 10px;
}
.sp-banner-dots button {
width: 10px; height: 10px;
border: 0; border-radius: 50%;
background: rgba(255,255,255,.55);
transition: background var(--sp-speed) ease, transform var(--sp-speed) ease;
}
.sp-banner-dots button:hover { background: #fff; }
.sp-banner-dots button.active {
background: #fff;
transform: scale(1.25);
box-shadow: 0 0 0 3px rgba(255,255,255,.25);
}
/* ---------------------------------------------------------------------
7. 区块标题(居中双线 + 下短横)与区块通用
--------------------------------------------------------------------- */
.sp-section { margin-top: 40px; }
.sp-block-head {
position: relative;
text-align: center;
padding: 14px 0 12px;
border-top: 1px solid var(--sp-border);
border-bottom: 1px solid var(--sp-border);
}
.sp-block-head h2 {
display: inline-block;
position: relative;
font-size: 22px;
font-weight: 700;
letter-spacing: 3px;
color: var(--sp-primary-dark);
}
/* 标题下短横:主蓝 3px */
.sp-block-tick {
position: absolute; left: 50%; bottom: -2px;
width: 42px; height: 3px;
transform: translateX(-50%);
background: var(--sp-primary);
border-radius: 2px;
}
/* 栏目卡头变体:左右布局(标题居左 + 更多居右) */
.sp-block-head--bar {
text-align: left;
padding: 0 0 10px;
border-top: 0;
border-bottom: 2px solid var(--sp-primary);
display: flex; align-items: baseline; justify-content: space-between;
}
.sp-block-head--bar h2 {
font-size: 19px;
letter-spacing: 1px;
padding-left: 12px;
position: relative;
}
/* 标题左侧竖条 */
.sp-block-head--bar h2::before {
content: "";
position: absolute; left: 0; top: 6px; bottom: 6px;
width: 4px;
background: var(--sp-primary);
border-radius: 2px;
}
.sp-block-head--bar .sp-block-tick { display: none; }
.sp-more {
font-size: 13px;
font-weight: 400;
color: var(--sp-text-light);
letter-spacing: 0;
transition: color var(--sp-speed) ease, transform var(--sp-speed) ease;
}
.sp-more:hover { color: var(--sp-primary); transform: translateX(3px); }
/* ---------------------------------------------------------------------
8. 头条区(左:头条推荐列表 / 右:图片新闻)
--------------------------------------------------------------------- */
.sp-headline {
display: grid;
grid-template-columns: 7fr 5fr;
gap: 28px;
}
/* grid 项允许收缩到轨道内:否则 nowrap 省略文本会把 auto 最小宽撑破容器(移动端横向溢出) */
.sp-headline > * { min-width: 0; }
.sp-headline-card,
.sp-focus-card {
background: var(--sp-card-bg);
border-radius: var(--sp-radius-lg);
box-shadow: var(--sp-shadow-sm);
padding: 6px 22px 18px;
}
/* 头条推荐 */
.sp-headline-list li {
display: flex; align-items: center; gap: 10px;
padding: 10px 2px;
border-bottom: 1px dashed var(--sp-border);
}
.sp-headline-list li:last-child { border-bottom: 0; }
.sp-headline-list li a {
flex: 1; min-width: 0;
color: var(--sp-text);
font-size: 15px;
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
transition: color var(--sp-speed) ease, padding-left var(--sp-speed) ease;
}
.sp-headline-list li a:hover { color: var(--sp-primary); padding-left: 4px; }
.sp-headline-list time { flex: none; color: var(--sp-text-light); font-size: 13px; }
/* 头条头条:大标题 + 元信息 */
.sp-headline-lead {
display: block !important;
padding: 14px 2px 16px !important;
}
.sp-lead-title {
display: block;
font-size: 19px !important;
font-weight: 700;
color: var(--sp-primary-dark) !important;
line-height: 1.5;
white-space: normal !important;
overflow: hidden;
max-height: 3em;
}
.sp-lead-title:hover { color: var(--sp-primary) !important; padding-left: 0 !important; }
.sp-lead-meta {
display: flex; align-items: center; gap: 10px;
margin-top: 8px;
font-size: 13px; color: var(--sp-text-light);
}
/* 图片新闻 */
.sp-focus-lead {
display: block;
margin-top: 14px;
border-radius: var(--sp-radius);
overflow: hidden;
position: relative;
}
.sp-focus-cover { display: block; aspect-ratio: 16/9; overflow: hidden; background: var(--sp-bg); }
.sp-focus-cover img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s ease; }
.sp-focus-lead:hover .sp-focus-cover img { transform: scale(1.05); }
.sp-focus-title {
position: absolute; left: 0; right: 0; bottom: 0;
padding: 26px 14px 10px;
color: #fff; font-size: 15px; font-weight: 600;
background: linear-gradient(180deg, transparent, rgba(3,61,112,.82));
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.sp-focus-rows { margin-top: 10px; }
.sp-focus-rows li a {
display: flex; align-items: center; gap: 12px;
padding: 8px 0;
}
.sp-row-cover {
flex: none;
width: 104px; height: 66px;
border-radius: 4px;
overflow: hidden;
background: var(--sp-bg);
}
.sp-row-cover img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s ease; }
.sp-focus-rows li a:hover .sp-row-cover img { transform: scale(1.06); }
.sp-row-title {
flex: 1; min-width: 0;
color: var(--sp-text);
font-size: 14px;
line-height: 1.55;
max-height: 3.1em;
overflow: hidden;
transition: color var(--sp-speed) ease;
}
.sp-focus-rows li a:hover .sp-row-title { color: var(--sp-primary); }
/* ---------------------------------------------------------------------
9. 栏目区块(白卡三列 + 日期方块行)
--------------------------------------------------------------------- */
.sp-blocks {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 24px;
margin-top: 14px;
}
.sp-block {
background: var(--sp-card-bg);
border-radius: var(--sp-radius-lg);
box-shadow: var(--sp-shadow-sm);
padding: 18px 20px 14px;
display: flex; flex-direction: column;
min-width: 0;
transition: box-shadow var(--sp-speed) ease, transform var(--sp-speed) ease;
}
.sp-block:hover { box-shadow: var(--sp-shadow-md); transform: translateY(-2px); }
.sp-block-list { flex: 1; }
/* 区块头条(有封面图文 / 无封面纯文) */
.sp-block-featured { border-bottom: 1px solid var(--sp-border); }
.sp-block-featured > a {
display: block;
padding: 12px 0 14px;
}
.sp-feat-cover {
display: block;
aspect-ratio: 16/9;
border-radius: var(--sp-radius);
overflow: hidden;
background: var(--sp-bg);
margin-bottom: 10px;
}
.sp-feat-cover img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s ease; }
.sp-block-featured > a:hover .sp-feat-cover img { transform: scale(1.04); }
.sp-feat-title {
display: block;
font-size: 16px; font-weight: 700;
color: var(--sp-primary-dark);
line-height: 1.5;
max-height: 3em;
overflow: hidden;
transition: color var(--sp-speed) ease;
}
.sp-block-featured > a:hover .sp-feat-title { color: var(--sp-primary); }
.sp-feat-summary {
display: block;
margin-top: 6px;
font-size: 13px; color: var(--sp-text-light);
line-height: 1.65;
max-height: 3.3em;
overflow: hidden;
}
.sp-feat-meta {
display: flex; align-items: center; gap: 10px;
margin-top: 8px;
font-size: 12px; color: var(--sp-text-light);
}
/* 列表行:日期方块 + 标题(建平通知公告语言) */
.sp-block-item {
display: flex; align-items: center; gap: 12px;
padding: 8px 0;
border-bottom: 1px dashed var(--sp-border);
}
.sp-block-item:last-child { border-bottom: 0; }
.sp-date-chip {
flex: none;
width: 46px;
text-align: center;
border-radius: 4px;
overflow: hidden;
background: var(--sp-bg);
border: 1px solid var(--sp-border);
transition: background var(--sp-speed) ease, border-color var(--sp-speed) ease;
}
.sp-date-chip b {
display: block;
font-size: 17px; line-height: 24px;
font-weight: 700;
color: var(--sp-primary);
background: rgba(10,90,168,.08);
transition: color var(--sp-speed) ease;
}
.sp-date-chip i {
display: block;
font-style: normal;
font-size: 10px; line-height: 16px;
color: var(--sp-text-light);
transform: scale(.92);
}
.sp-block-item:hover .sp-date-chip {
background: var(--sp-primary);
border-color: var(--sp-primary);
}
.sp-block-item:hover .sp-date-chip b { color: #fff; background: transparent; }
.sp-block-item:hover .sp-date-chip i { color: rgba(255,255,255,.8); }
.sp-block-item-title {
flex: 1; min-width: 0;
font-size: 14px;
color: var(--sp-text);
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
transition: color var(--sp-speed) ease;
}
.sp-block-item:hover .sp-block-item-title { color: var(--sp-primary); }
/* ---------------------------------------------------------------------
10. 列表/详情/单页公共:页面卡 + 面包屑 + 页题
--------------------------------------------------------------------- */
.sp-page { padding: 28px 0 48px; }
.sp-page-card {
background: var(--sp-card-bg);
border-radius: var(--sp-radius-lg);
box-shadow: var(--sp-shadow-sm);
padding: 26px 32px 34px;
min-height: 420px;
}
.sp-crumb {
display: flex; align-items: center; flex-wrap: wrap; gap: 8px;
font-size: 13px;
color: var(--sp-text-light);
padding-bottom: 14px;
border-bottom: 1px solid var(--sp-border);
margin-bottom: 20px;
}
.sp-crumb a { color: var(--sp-text-light); }
.sp-crumb a:hover { color: var(--sp-primary); }
.sp-crumb-sep { color: #c3cad4; }
.sp-crumb-current { color: var(--sp-primary); }
.sp-page-title {
position: relative;
font-size: 23px;
font-weight: 700;
letter-spacing: 1px;
color: var(--sp-primary-dark);
padding-left: 16px;
margin-bottom: 22px;
}
.sp-page-title::before {
content: "";
position: absolute; left: 0; top: 5px; bottom: 5px;
width: 5px;
border-radius: 3px;
background: linear-gradient(180deg, var(--sp-primary), var(--sp-primary-light));
}
/* ---------------------------------------------------------------------
11. 列表页:图文行 + 行式列表 + 分页
--------------------------------------------------------------------- */
.sp-article-list > li { border-bottom: 1px solid var(--sp-border); }
.sp-article-list > li:last-child { border-bottom: 0; }
/* 图文行 */
.sp-article-row {
display: flex; gap: 20px;
padding: 18px 2px;
}
.sp-item-cover {
flex: none;
width: 216px; aspect-ratio: 3/2;
border-radius: var(--sp-radius);
overflow: hidden;
background: var(--sp-bg);
}
.sp-item-cover img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s ease; }
.sp-article-row:hover .sp-item-cover img { transform: scale(1.05); }
.sp-item-body { flex: 1; min-width: 0; padding-top: 4px; }
.sp-item-title a {
font-size: 17px; font-weight: 600;
color: var(--sp-text);
line-height: 1.5;
transition: color var(--sp-speed) ease;
}
.sp-item-title a:hover { color: var(--sp-primary); }
.sp-item-summary {
margin-top: 8px;
font-size: 13px; color: var(--sp-text-light);
line-height: 1.7;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.sp-item-meta {
display: flex; align-items: center; gap: 12px;
margin-top: 10px;
font-size: 12px; color: var(--sp-text-light);
}
/* 行式(无封面):刻度符号 + 标题 + 右侧日期 */
.sp-article-line {
display: flex; align-items: center; gap: 12px;
padding: 13px 2px;
}
.sp-line-tick {
flex: none;
width: 6px; height: 6px;
background: var(--sp-primary);
transform: rotate(45deg);
opacity: .85;
transition: transform var(--sp-speed) ease;
}
.sp-article-line:hover .sp-line-tick { transform: rotate(45deg) scale(1.35); }
.sp-line-main { flex: 1; min-width: 0; }
.sp-line-title {
display: block;
font-size: 15px;
color: var(--sp-text);
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
transition: color var(--sp-speed) ease, padding-left var(--sp-speed) ease;
}
.sp-article-line:hover .sp-line-title { color: var(--sp-primary); padding-left: 4px; }
.sp-article-line .sp-item-summary { margin-top: 4px; -webkit-line-clamp: 1; }
.sp-line-side {
flex: none;
display: flex; align-items: center; gap: 10px;
font-size: 13px; color: var(--sp-text-light);
}
/* 分页 */
.sp-pagination {
display: flex; justify-content: center; flex-wrap: wrap; gap: 8px;
margin-top: 30px;
}
.sp-pagination a {
min-width: 36px; height: 36px;
display: inline-flex; align-items: center; justify-content: center;
padding: 0 10px;
font-size: 14px;
color: var(--sp-text);
background: var(--sp-bg);
border: 1px solid var(--sp-border);
border-radius: 4px;
transition: all var(--sp-speed) ease;
}
.sp-pagination a:hover {
color: #fff;
background: var(--sp-primary);
border-color: var(--sp-primary);
}
.sp-pagination a.active {
color: #fff;
background: var(--sp-primary);
border-color: var(--sp-primary);
font-weight: 700;
box-shadow: 0 3px 8px rgba(10,90,168,.35);
}
.sp-pagination a.disabled {
opacity: .45; pointer-events: none;
}
/* ---------------------------------------------------------------------
12. 详情/单页:文章排版
--------------------------------------------------------------------- */
.sp-article-title {
text-align: center;
font-size: 24px;
font-weight: 700;
color: var(--sp-primary-dark);
line-height: 1.5;
padding: 6px 20px 0;
}
.sp-article-meta {
display: flex; justify-content: center; flex-wrap: wrap; gap: 6px 22px;
padding: 14px 0 18px;
margin-bottom: 24px;
font-size: 13px; color: var(--sp-text-light);
border-bottom: 1px solid var(--sp-border);
position: relative;
}
/* 标题下居中短横(与区块标题语言呼应) */
.sp-article-meta::before {
content: "";
position: absolute; left: 50%; top: -12px;
width: 42px; height: 3px;
transform: translateX(-50%);
background: var(--sp-primary);
border-radius: 2px;
}
.sp-article-content {
font-size: 15px;
line-height: 1.9;
color: var(--sp-text);
}
.sp-article-content p { margin: 0 0 14px; }
.sp-article-content h1, .sp-article-content h2,
.sp-article-content h3, .sp-article-content h4 {
margin: 22px 0 12px;
color: var(--sp-primary-dark);
font-weight: 700;
}
.sp-article-content h2 { font-size: 19px; }
.sp-article-content h3 { font-size: 17px; }
.sp-article-content h4 { font-size: 15px; }
.sp-article-content img {
max-width: 100%;
height: auto;
border-radius: var(--sp-radius);
margin: 6px auto 14px;
box-shadow: var(--sp-shadow-sm);
}
.sp-article-content ul, .sp-article-content ol {
margin: 0 0 14px; padding-left: 26px;
}
.sp-article-content ul li { list-style: disc; }
.sp-article-content ol li { list-style: decimal; }
.sp-article-content li { margin-bottom: 6px; }
.sp-article-content blockquote {
margin: 14px 0;
padding: 12px 18px;
background: rgba(10,90,168,.05);
border-left: 4px solid var(--sp-primary);
border-radius: 0 var(--sp-radius) var(--sp-radius) 0;
color: var(--sp-text-light);
}
.sp-article-content table {
width: 100%;
border-collapse: collapse;
margin: 14px 0;
font-size: 14px;
}
.sp-article-content th, .sp-article-content td {
border: 1px solid var(--sp-border);
padding: 8px 12px;
text-align: left;
}
.sp-article-content th {
background: rgba(10,90,168,.06);
color: var(--sp-primary-dark);
font-weight: 600;
}
.sp-article-content a { color: var(--sp-primary-light); text-decoration: underline; }
.sp-article-content hr {
border: 0; height: 1px;
background: var(--sp-border);
margin: 20px 0;
}
.sp-article-content video, .sp-article-content audio { max-width: 100%; }
/* 上下篇 */
.sp-sibling {
display: grid; grid-template-columns: 1fr 1fr; gap: 16px;
margin-top: 34px;
padding-top: 22px;
border-top: 1px solid var(--sp-border);
}
.sp-sib, .sp-sib-none {
display: block;
padding: 12px 16px;
border: 1px solid var(--sp-border);
border-radius: var(--sp-radius);
background: var(--sp-bg);
min-width: 0;
transition: border-color var(--sp-speed) ease, background var(--sp-speed) ease, box-shadow var(--sp-speed) ease;
}
.sp-sib:hover {
border-color: var(--sp-primary);
background: var(--sp-card-bg);
box-shadow: var(--sp-shadow-sm);
}
.sp-sib.next { text-align: right; }
.sp-sib-label {
display: block;
font-size: 12px;
color: var(--sp-primary);
letter-spacing: 2px;
margin-bottom: 4px;
}
.sp-sib-title {
display: block;
font-size: 14px;
color: var(--sp-text);
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.sp-sib-none { opacity: .6; }
.sp-sib-none .sp-sib-label { color: var(--sp-text-light); }
/* ---------------------------------------------------------------------
13. 页脚(深蓝渐变 + 同心圆环纹理 + 三栏 + 底条)
--------------------------------------------------------------------- */
.sp-footer {
position: relative;
margin-top: 56px;
color: var(--sp-ink-on-dark);
background: linear-gradient(160deg, var(--sp-footer-bg) 0%, var(--sp-primary-dark) 100%);
overflow: hidden;
}
/* 同心圆环纹理(CSS 绘制,呼应校徽环形语言) */
.sp-ring {
position: absolute;
border-radius: 50%;
border: 2px solid rgba(255,255,255,.06);
pointer-events: none;
}
.sp-ring--1 { width: 460px; height: 460px; right: -140px; top: -160px; border-width: 30px; }
.sp-ring--2 { width: 300px; height: 300px; right: -60px; top: -80px; border-width: 18px; }
.sp-ring--3 { width: 520px; height: 520px; left: -200px; bottom: -300px; border-width: 34px; }
.sp-footer-inner {
width: 1200px; max-width: calc(100% - 40px);
margin: 0 auto;
position: relative; z-index: 1;
display: grid;
grid-template-columns: 1.1fr 1.2fr 1.4fr;
gap: 40px;
padding: 44px 0 36px;
}
.sp-footer-inner > * { min-width: 0; }
.sp-footer-brand {
display: flex; align-items: center; gap: 14px;
}
.sp-footer-badge {
flex: none;
width: 66px; height: 66px;
display: inline-flex; align-items: center; justify-content: center;
background: rgba(255,255,255,.94);
border-radius: var(--sp-radius);
overflow: hidden;
box-shadow: 0 2px 10px rgba(3,61,112,.4);
}
.sp-footer-badge--plain { color: var(--sp-primary); }
.sp-footer-logo { width: 100%; height: 100%; object-fit: contain; }
.sp-footer-site {
font-size: 21px;
font-weight: 700;
letter-spacing: 1.5px;
line-height: 1.45;
text-shadow: 0 2px 6px rgba(3,61,112,.4);
}
.sp-footer-info { padding-top: 6px; }
.sp-footer-line {
display: flex; align-items: baseline; gap: 10px;
margin-bottom: 10px;
font-size: 13px;
color: var(--sp-ink-on-dark-soft);
line-height: 1.7;
}
.sp-dot {
flex: none;
width: 6px; height: 6px;
background: var(--sp-primary-light);
border-radius: 50%;
transform: translateY(-2px);
box-shadow: 0 0 6px rgba(17,103,187,.9);
}
.sp-footer-links {
padding-top: 6px;
display: grid; grid-template-columns: 1fr 1fr; gap: 8px 28px;
}
.sp-group-name {
display: inline-block;
font-size: 13px; font-weight: 600;
color: #fff;
padding-bottom: 4px;
margin-bottom: 6px;
border-bottom: 2px solid var(--sp-primary-light);
}
.sp-links-row {
display: flex; flex-wrap: wrap; gap: 4px 14px;
margin-bottom: 10px;
}
.sp-links-row a {
font-size: 13px;
color: var(--sp-ink-on-dark-soft);
transition: color var(--sp-speed) ease, padding-left var(--sp-speed) ease;
}
.sp-links-row a:hover { color: #fff; padding-left: 2px; }
.sp-footer-bottom {
position: relative; z-index: 1;
border-top: 1px solid rgba(255,255,255,.14);
text-align: center;
padding: 16px 0;
font-size: 13px;
color: var(--sp-ink-on-dark-faint);
letter-spacing: 1px;
}
/* ---------------------------------------------------------------------
14. 响应式:1200 / 992 / 768 三档
--------------------------------------------------------------------- */
@media (max-width: 1240px) {
.sp-container, .sp-topbar-inner, .sp-brandbar-inner, .sp-nav-inner { max-width: calc(100% - 40px); }
}
@media (max-width: 992px) {
.sp-site-name { font-size: 22px; max-width: 380px; }
.sp-search { width: 240px; }
.sp-nav-list { flex-wrap: wrap; justify-content: flex-start; }
.sp-nav-list > li { flex: 0 0 auto; }
.sp-nav-list > li > a { height: 46px; font-size: 15px; padding: 0 12px; }
.sp-headline { grid-template-columns: 1fr; }
.sp-blocks { grid-template-columns: repeat(2, 1fr); }
.sp-banner-slides { height: 380px; }
.sp-banner-title { font-size: 19px; bottom: 28px; }
.sp-footer-inner { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 768px) {
/* —— 品牌行收纳 —— */
.sp-brandbar-inner { flex-direction: column; align-items: stretch; gap: 14px; padding: 16px 0; }
.sp-site-name { font-size: 19px; max-width: none; white-space: normal; }
.sp-brand { justify-content: center; }
.sp-search { width: 100%; max-width: none; }
/* —— 移动端导航:抽屉展开 —— */
.sp-nav-toggle {
display: inline-flex; flex-direction: column; justify-content: center; gap: 5px;
width: 44px; height: 40px;
padding: 8px;
border: 1px solid var(--sp-border);
border-radius: var(--sp-radius);
background: var(--sp-card-bg);
}
.sp-nav-toggle span {
display: block; height: 2px;
background: var(--sp-primary);
border-radius: 2px;
transition: transform var(--sp-speed) ease, opacity var(--sp-speed) ease;
}
.sp-nav-toggle[aria-expanded="true"] span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.sp-nav-toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.sp-nav-toggle[aria-expanded="true"] span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
.sp-nav-inner { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 8px 0; }
/* 吸顶在移动端直接融入文档流配色 */
.sp-nav--fixed { position: sticky; animation: none; }
.sp-nav-list {
display: none;
position: absolute; left: -20px; right: -20px; top: 100%;
flex-direction: column;
background: var(--sp-card-bg);
box-shadow: var(--sp-shadow-md);
border-top: 1px solid var(--sp-border);
padding: 6px 16px 12px;
max-height: 68vh; overflow: auto;
}
.sp-nav-list.sp-open { display: flex; }
.sp-nav-list > li { text-align: left; border-bottom: 1px solid var(--sp-border); }
.sp-nav-list > li:last-child { border-bottom: 0; }
.sp-nav-list > li > a { height: 46px; justify-content: flex-start; }
.sp-nav-list > li > a::after { display: none; }
/* 移动端二级:手风琴内联展开(.sp-sub-open 由 main.js 控制) */
.sp-sub {
position: static;
display: none;
transform: none;
opacity: 1; visibility: visible;
background: var(--sp-bg);
border-top: 0;
box-shadow: none;
border-radius: 0;
margin: 0 -8px 8px;
padding: 4px 0;
}
.sp-sub::before { display: none; }
.sp-sub li a { color: var(--sp-text); margin: 0 8px; }
.sp-sub li a:hover { background: rgba(10,90,168,.08); color: var(--sp-primary); }
.sp-sub li a::before { background: var(--sp-primary); opacity: .5; }
.sp-nav-list li.sp-sub-open .sp-sub { display: block; }
.sp-nav-list li.has-sub > a { cursor: pointer; }
/* —— 内容收纳 —— */
.sp-banner-slides { height: 240px; }
.sp-banner-title { font-size: 15px; left: 16px; bottom: 20px; max-width: 85%; }
.sp-banner-arrow { display: none; }
.sp-section { margin-top: 28px; }
.sp-blocks { grid-template-columns: 1fr; }
.sp-block-head h2 { font-size: 19px; }
.sp-article-row { flex-direction: column; gap: 12px; }
.sp-item-cover { width: 100%; }
.sp-article-line { flex-wrap: wrap; }
.sp-line-side { width: 100%; padding-left: 18px; }
.sp-page-card { padding: 18px 16px 24px; }
.sp-article-title { font-size: 20px; padding: 0; }
.sp-article-meta { gap: 4px 14px; }
.sp-sibling { grid-template-columns: 1fr; }
.sp-sib-title { white-space: normal; }
.sp-footer-inner { grid-template-columns: 1fr; gap: 26px; padding: 32px 0 26px; }
.sp-footer-links { grid-template-columns: 1fr; }
.sp-ring--1 { width: 300px; height: 300px; border-width: 20px; }
}
/* ---------------------------------------------------------------------
15. 动效偏好:尊重系统减弱动态设置
--------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: .01ms !important;
animation-iteration-count: 1 !important;
transition-duration: .01ms !important;
}
}
/* B4 友链 Logo:与名称并排小图(高度 ~20px,垂直居中;过宽截断不撑破页脚) */
.links-group a .link-logo,
.sp-links-row a .link-logo {
height: 20px;
width: auto;
max-width: 64px;
object-fit: contain;
vertical-align: middle;
margin-right: 4px;
border-radius: 2px;
}