事项名称
+ + + +简介
+ +| 服务对象 | +服务对象 | +
|---|---|
| 事项类别 | +事项类别 | +
| 办理地点 | +办理地点 | +
| 办理时限 | +办理时限 | +
| 承诺时限 | +承诺时限 | +
| 咨询电话 | +咨询电话 | +
| 监督投诉 | +监督投诉电话 | +
diff --git a/src/main/resources/templates/themes/campus-glow/assets/css/main.css b/src/main/resources/templates/themes/campus-glow/assets/css/main.css
index a16cc7d..bdbb40e 100644
--- a/src/main/resources/templates/themes/campus-glow/assets/css/main.css
+++ b/src/main/resources/templates/themes/campus-glow/assets/css/main.css
@@ -400,3 +400,257 @@ button { font-family: inherit; cursor: pointer; }
.cg-gallery-item img { height: 230px; }
.cg-qr:hover img { transform: scale(1.6); }
}
+
+
+/* =====================================================================
+ 首页布局模式区块补齐(v2 手册 §A.3 · P-A3,S7)
+ 对应 fragments/home-blocks.html 新增的 5 个 fragment:compact / image_wall / links / quick_links / notice_bar。
+ 本包三条硬约束说明:
+ · §2.5 坑③(全宽区块根补 grid-column)在本包**不适用**:.cg-home 无任何布局规则(非网格),
+ 区块用"全幅 section > .cg-container"惯用结构天然占满整行——补 grid-column 只会留死声明。
+ · 网格轨道一律 minmax(0,1fr)(本包 .cg-news-grid/.cg-media-grid 基线用的是裸 1fr,
+ 新节按记忆教训改用 minmax,避免中文 min-content 撑破窄视口;不动既有两行以守住"已有形态不改")。
+ · 颜色只用本包既有令牌;#fff 与 color-mix() 是本包既有习惯(顶栏/导航/侧栏已如此写),未新增色值。
+ ===================================================================== */
+
+/* 区块壳:与 .cg-block-card / .cg-media-card 同值(本包习惯是各形态各写一份,不合并选择器) */
+.cg-compact, .cg-wall, .cg-friend, .cg-quick { padding: 40px 0 0; }
+.cg-sec-card {
+ background: var(--cg-card-bg); border: 1px solid var(--cg-border);
+ border-radius: var(--cg-radius); box-shadow: var(--cg-shadow); padding: 26px 30px;
+}
+
+/* 形态四 compact:圆角日期块 + 单行标题 */
+.cg-compact-list { display: grid; grid-template-columns: 1fr 1fr; column-gap: 48px; }
+.cg-compact-list li {
+ display: flex; align-items: center; gap: 14px; min-width: 0;
+ padding: 11px 2px; border-bottom: 1px dashed var(--cg-border);
+}
+.cg-compact-list li:nth-last-child(-n+2) { border-bottom: 0; }
+.cg-date-chip {
+ flex: none; display: inline-flex; flex-direction: column; align-items: center; justify-content: center;
+ width: 56px; line-height: 1.25; color: #fff; border-radius: 10px;
+ background: linear-gradient(135deg, var(--cg-primary), var(--cg-primary-dark));
+ box-shadow: 0 3px 8px rgba(10, 98, 68, .22);
+}
+.cg-date-chip b { font-size: 20px; font-weight: 700; }
+.cg-date-chip i { font-style: normal; font-size: 11px; opacity: .82; letter-spacing: .5px; }
+.cg-compact-title {
+ flex: 1; min-width: 0; font-size: 15px; color: var(--cg-text);
+ white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
+}
+.cg-compact-title:hover { color: var(--cg-primary); }
+
+/* 形态五 image_wall:四列图墙 + 底部渐变题注(渐变写法同 .cg-gallery-cap,色值为该规则既有) */
+.cg-wall-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; }
+.cg-wall-item { position: relative; border-radius: 10px; overflow: hidden; }
+.cg-wall-item a { display: block; }
+.cg-wall-item img {
+ width: 100%; height: 156px; object-fit: cover;
+ transition: transform .3s ease, box-shadow .3s ease;
+}
+.cg-wall-item:hover img { transform: translateY(-4px); box-shadow: 0 14px 28px rgba(10, 98, 68, .22); }
+.cg-wall-cap {
+ position: absolute; left: 0; right: 0; bottom: 0; padding: 26px 12px 9px;
+ color: #fff; font-size: 14px;
+ background: linear-gradient(180deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, .55));
+ white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
+}
+
+/* 形态六 links:友情链接分组(分组标题带强调色竖条;logo 用页脚同款 .cg-link-logo) */
+.cg-friend-group {
+ margin: 16px 0 8px; padding-left: 10px; font-size: 14px; font-weight: 600;
+ color: var(--cg-primary-dark); border-left: 3px solid var(--cg-accent);
+}
+.cg-friend-group:first-of-type { margin-top: 0; }
+.cg-friend-links { display: flex; flex-wrap: wrap; gap: 8px 12px; }
+.cg-friend-links li { flex: none; }
+.cg-friend-links a {
+ display: inline-flex; align-items: center; gap: 6px; padding: 5px 14px;
+ font-size: 13px; color: var(--cg-text); background: var(--cg-bg);
+ border: 1px solid var(--cg-border); border-radius: 999px; transition: color .2s, border-color .2s;
+}
+.cg-friend-links a:hover { color: var(--cg-primary); border-color: var(--cg-primary); }
+
+/* 新区块一 quick_links:六列宫格 → 三列 → 两列(入口名居中,悬停走本包渐变语言) */
+.cg-quick-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 12px; }
+.cg-quick-link {
+ display: flex; align-items: center; justify-content: center; min-height: 58px; padding: 8px 10px;
+ font-size: 14px; text-align: center; color: var(--cg-text);
+ background: var(--cg-bg); border: 1px solid var(--cg-border); border-radius: 10px;
+ transition: color .2s, background .2s, transform .2s, box-shadow .2s;
+}
+.cg-quick-link:hover {
+ color: #fff; background: linear-gradient(135deg, var(--cg-primary), var(--cg-primary-dark));
+ border-color: var(--cg-primary); transform: translateY(-3px); box-shadow: var(--cg-shadow);
+}
+
+/* 新区块二 notice_bar:整幅横条(与 .cg-ticker 同层级,不是卡片)。
+ info 用主色浅底、warn 用强调色浅底——本包有 --cg-accent 令牌,故不需要像 mint-breeze 那样自持 warn 三件套。 */
+.cg-notice { border-top: 1px solid var(--cg-border); border-bottom: 1px solid var(--cg-border); background: var(--cg-card-bg); }
+.cg-notice-inner { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; padding-top: 12px; padding-bottom: 12px; font-size: 14px; }
+.cg-notice-tag {
+ flex: none; font-size: 13px; font-weight: 600; color: #fff; padding: 4px 14px; border-radius: 0 0 10px 10px;
+ background: linear-gradient(135deg, var(--cg-primary), var(--cg-primary-dark));
+}
+.cg-notice-link, .cg-notice-text { flex: 1; min-width: 0; color: var(--cg-text); }
+.cg-notice-link { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
+.cg-notice-link:hover { color: var(--cg-primary); text-decoration: underline; text-underline-offset: 3px; }
+.cg-notice-info { border-top-color: color-mix(in srgb, var(--cg-primary) 30%, var(--cg-border)); background: color-mix(in srgb, var(--cg-primary) 7%, var(--cg-card-bg)); }
+.cg-notice-warn { border-top-color: color-mix(in srgb, var(--cg-accent) 45%, var(--cg-border)); background: color-mix(in srgb, var(--cg-accent) 9%, var(--cg-card-bg)); }
+.cg-notice-warn .cg-notice-tag { background: linear-gradient(135deg, var(--cg-accent), #ff9f4d); }
+.cg-notice-warn .cg-notice-link:hover { color: var(--cg-accent); }
+
+@media (max-width: 992px) {
+ .cg-sec-card { padding: 20px 18px; }
+ .cg-wall-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
+ .cg-quick-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
+}
+@media (max-width: 768px) {
+ .cg-compact-list { grid-template-columns: 1fr; }
+ .cg-compact-list li:nth-last-child(-n+2) { border-bottom: 1px dashed var(--cg-border); }
+ .cg-compact-list li:last-child { border-bottom: 0; }
+ .cg-compact, .cg-wall, .cg-friend, .cg-quick { padding-top: 26px; }
+ .cg-quick-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
+ .cg-notice-inner { flex-direction: column; align-items: flex-start; gap: 4px; }
+ .cg-notice-link { white-space: normal; }
+}
+
+/* =====================================================================
+ 服务中心 / 事项指南(v2 手册 §A.3 · P-A3,S7 新建 service.html + guide.html)
+ 页壳、面包屑、页题、分页、空态、标题/元信息/正文全部复用本包既有
+ .cg-list-main / .cg-page-card / .cg-breadcrumb / .cg-page-title / .cg-pagination /
+ .cg-empty / .cg-article-title / .cg-article-meta / .cg-article-content,
+ 本节只补事项特有的件;色值只用本包令牌(#fff、#ff9f4d 为本包既有习惯)。
+ ===================================================================== */
+
+/* 筛选面板:分组行 + 胶囊选项(active 走本包主色渐变) */
+.cg-svc-filters {
+ border: 1px solid var(--cg-border); border-radius: 10px;
+ background: var(--cg-bg); padding: 8px 14px; margin-bottom: 18px;
+}
+.cg-svc-filter-group { display: flex; align-items: flex-start; gap: 12px; padding: 7px 0; }
+.cg-svc-filter-group + .cg-svc-filter-group { border-top: 1px dashed var(--cg-border); }
+.cg-svc-filter-label { flex: none; min-width: 60px; font-size: 13px; font-weight: 600; color: var(--cg-primary-dark); padding-top: 3px; }
+.cg-svc-filter-options { display: flex; flex-wrap: wrap; gap: 8px; min-width: 0; }
+.cg-chip {
+ display: inline-flex; align-items: center; gap: 5px; padding: 2px 12px;
+ font-size: 13px; color: var(--cg-text-light);
+ background: var(--cg-card-bg); border: 1px solid var(--cg-border); border-radius: 999px;
+ transition: color .2s, border-color .2s, background .2s;
+}
+.cg-chip em { font-style: normal; font-size: 12px; opacity: .75; }
+.cg-chip:hover { color: var(--cg-primary); border-color: var(--cg-primary); }
+.cg-chip.active {
+ color: #fff; border-color: var(--cg-primary);
+ background: linear-gradient(135deg, var(--cg-primary), var(--cg-primary-dark));
+}
+
+/* 工具条:搜索框(圆角同 .cg-site-search,但方角贴合卡片)+ 清除筛选 */
+.cg-svc-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 16px; }
+.cg-svc-search { display: flex; flex: 1; min-width: 0; }
+.cg-svc-search input {
+ flex: 1; min-width: 0; padding: 9px 14px; font-size: 14px; font-family: inherit;
+ border: 1px solid var(--cg-border); border-right: 0; border-radius: 8px 0 0 8px;
+ background: var(--cg-bg); color: var(--cg-text); outline: none;
+}
+.cg-svc-search input:focus { border-color: var(--cg-primary); background: var(--cg-card-bg); }
+.cg-svc-search button {
+ flex: none; padding: 9px 24px; border: 0; border-radius: 0 8px 8px 0;
+ background: var(--cg-primary); color: #fff; font-size: 14px; transition: background .2s;
+}
+.cg-svc-search button:hover { background: var(--cg-primary-dark); }
+.cg-svc-clear { flex: none; font-size: 13px; color: var(--cg-primary); }
+.cg-svc-clear:hover { color: var(--cg-accent); text-decoration: underline; text-underline-offset: 3px; }
+
+/* 事项卡网格:三列 → 两列 → 单列;轨道 minmax(0,·) 防中文 min-content 撑破窄视口 */
+.cg-svc-list { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
+.cg-svc-item {
+ display: flex; gap: 14px; align-items: flex-start; min-width: 0; padding: 16px;
+ background: var(--cg-card-bg); border: 1px solid var(--cg-border); border-radius: 10px;
+ transition: transform .25s ease, box-shadow .25s ease, border-color .25s ease;
+}
+.cg-svc-item:hover { transform: translateY(-3px); border-color: var(--cg-primary); box-shadow: var(--cg-shadow); }
+.cg-svc-item-cover { flex: none; width: 108px; border-radius: 8px; overflow: hidden; }
+.cg-svc-item-cover img { width: 100%; height: 72px; object-fit: cover; }
+.cg-svc-item-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
+.cg-svc-item-title { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; min-width: 0; }
+.cg-svc-item-name {
+ font-size: 15px; font-weight: 600; color: var(--cg-text); line-height: 1.5;
+ display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
+}
+.cg-svc-item:hover .cg-svc-item-name { color: var(--cg-primary); }
+.cg-svc-item-summary {
+ font-size: 13px; color: var(--cg-text-light);
+ display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
+}
+.cg-svc-item-meta { margin-top: auto; display: flex; flex-wrap: wrap; gap: 4px 12px; font-size: 12px; color: var(--cg-text-light); }
+
+/* 标签:办理方式用主色浅底;"可在线办理"是第二优先级信息,用强调色描边区分而不是引入新色相 */
+.cg-tag {
+ flex: none; font-size: 12px; line-height: 1.6; padding: 1px 9px; border-radius: 4px;
+ color: var(--cg-primary); background: color-mix(in srgb, var(--cg-primary) 10%, var(--cg-card-bg));
+}
+.cg-tag.online { color: var(--cg-accent); background: transparent; border: 1px solid color-mix(in srgb, var(--cg-accent) 55%, transparent); }
+
+/* 指南页:办理按钮、基本信息表、章节题、附件、跳转条、相关服务 */
+.cg-svc-apply { display: flex; align-items: center; gap: 14px; margin: 18px 0; }
+.cg-svc-apply-btn {
+ display: inline-block; padding: 10px 32px; font-size: 15px; color: #fff;
+ border-radius: 999px; background: linear-gradient(135deg, var(--cg-primary), var(--cg-primary-dark));
+ box-shadow: 0 6px 16px rgba(10, 98, 68, .26); transition: transform .2s ease, box-shadow .2s ease;
+}
+.cg-svc-apply-btn:hover { transform: translateY(-2px); box-shadow: 0 10px 22px rgba(10, 98, 68, .34); }
+.cg-svc-apply-hint { font-size: 13px; color: var(--cg-text-light); }
+.cg-svc-summary { font-size: 15px; color: var(--cg-text-light); line-height: 1.85; margin-bottom: 18px; }
+
+.cg-svc-info { width: 100%; border-collapse: collapse; margin-bottom: 18px; font-size: 14px; }
+.cg-svc-info th, .cg-svc-info td { border: 1px solid var(--cg-border); padding: 10px 14px; text-align: left; vertical-align: top; }
+.cg-svc-info th { width: 132px; font-weight: 500; color: var(--cg-text-light); background: var(--cg-bg); }
+
+.cg-svc-section { margin-top: 22px; }
+.cg-svc-section h2 {
+ font-size: 18px; font-weight: 600; color: var(--cg-primary-dark);
+ padding-left: 12px; margin-bottom: 10px; border-left: 4px solid var(--cg-accent);
+}
+.cg-svc-section .cg-article-content { padding-top: 0; }
+.cg-svc-attachments > ul { display: flex; flex-direction: column; gap: 8px; }
+.cg-svc-attachments a { font-size: 14px; color: var(--cg-primary-dark); }
+.cg-svc-attachments a:hover { color: var(--cg-primary); text-decoration: underline; text-underline-offset: 3px; }
+.cg-svc-att-size { margin-left: 8px; font-size: 12px; color: var(--cg-text-light); }
+
+.cg-svc-links { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 24px; padding-top: 18px; border-top: 1px dashed var(--cg-border); }
+.cg-svc-links a {
+ padding: 4px 18px; font-size: 14px; color: var(--cg-primary);
+ border: 1px solid var(--cg-primary); border-radius: 999px; transition: color .2s, background .2s;
+}
+.cg-svc-links a:hover { color: #fff; background: var(--cg-primary); }
+
+.cg-svc-related { margin-top: 30px; padding: 18px 20px; border: 1px solid var(--cg-border); border-radius: 10px; background: var(--cg-bg); }
+.cg-svc-related-title { font-size: 17px; font-weight: 600; color: var(--cg-primary-dark); margin-bottom: 6px; }
+.cg-svc-related-list > li + li { border-top: 1px dashed var(--cg-border); }
+.cg-svc-related-list a { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 0; min-width: 0; }
+.cg-svc-related-name { flex: 1; min-width: 0; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
+.cg-svc-related-list a:hover .cg-svc-related-name { color: var(--cg-primary); }
+.cg-svc-related-meta { flex: none; display: inline-flex; align-items: center; gap: 8px; font-size: 12px; color: var(--cg-text-light); }
+
+/* 表格 caption 仅面向读屏(本包 .cg-skip-link 是跳转链接专用,语义不同,不复用) */
+.cg-visually-hidden {
+ position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
+ overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
+}
+
+@media (max-width: 992px) {
+ .cg-svc-list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
+}
+@media (max-width: 768px) {
+ .cg-svc-list { grid-template-columns: minmax(0, 1fr); }
+ .cg-svc-toolbar { flex-direction: column; align-items: stretch; }
+ .cg-svc-clear { align-self: flex-start; }
+ .cg-svc-info th { width: 92px; padding: 9px 10px; }
+ .cg-svc-info td { padding: 9px 10px; }
+ .cg-svc-item { flex-direction: column; }
+ .cg-svc-item-cover { width: 100%; }
+ .cg-svc-item-cover img { height: 158px; }
+ .cg-svc-apply { flex-wrap: wrap; gap: 8px; }
+}
diff --git a/src/main/resources/templates/themes/campus-glow/fragments/home-blocks.html b/src/main/resources/templates/themes/campus-glow/fragments/home-blocks.html
index 7a3132f..a505ebc 100644
--- a/src/main/resources/templates/themes/campus-glow/fragments/home-blocks.html
+++ b/src/main/resources/templates/themes/campus-glow/fragments/home-blocks.html
@@ -148,3 +148,133 @@
+
+
+
+ 分组友情链接
+
+
+
+ 链接名
+
+
事项服务暂时不可用,请稍后再试
+事项数据服务暂不可达,稍后刷新即可恢复
+简介
+ +| 服务对象 | +服务对象 | +
|---|---|
| 事项类别 | +事项类别 | +
| 办理地点 | +办理地点 | +
| 办理时限 | +办理时限 | +
| 承诺时限 | +承诺时限 | +
| 咨询电话 | +咨询电话 | +
| 监督投诉 | +监督投诉电话 | +
事项服务暂时不可用,请稍后再试
+事项数据服务暂不可达,稍后刷新即可恢复
+未找到符合条件的服务事项
+服务中心暂未上架事项
+换个筛选条件或关键词试试
+事项发布后将在此展示
+