公开页补齐自引用 Canonical 与按类型的结构化数据,图片补上说明文字。

后台设置和内容编辑改成可导航布局;部署用访客 origin 生成 Canonical,避免落到容器地址。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-20 00:11:24 +08:00
parent 2b3d122e56
commit 40bbad2c82
51 changed files with 3042 additions and 1318 deletions

View File

@@ -3127,28 +3127,10 @@ body:has([data-admin-viewport]) {
}
}
/* 后台公告/单页编辑:取消画布内边距,顶栏贴紧 admin-topbar 钉住,避免缝里透出下方内容 */
.admin-canvas:has(.j13-compose-page) {
padding: 0;
}
/* 用户管理吸顶:顶内边距挪到 .admin-users-page,sticky 才能贴紧顶栏而不提前定住 */
.admin-canvas:has(.admin-users-stick) {
padding-top: 0;
}
.admin-canvas .j13-compose-page,
.admin-canvas .j13-compose-stage {
min-height: 100%;
}
.admin-canvas .j13-compose-stage {
border: 0;
border-radius: 0;
box-shadow: none;
}
.admin-canvas .j13-compose-toolbar {
top: 0;
border-radius: 0;
background: var(--panel);
}
/* 移动端导航抽屉 */
.admin-drawer {
@@ -3590,79 +3572,569 @@ a.j13-mention-token:hover {
font-size: 12.5px;
}
/* 站点设置:顶栏横向 tab,窄屏横向滚动 */
.admin-settings-tabs {
display: flex;
align-items: stretch;
gap: 0.125rem;
overflow-x: auto;
margin: 0 0 1.25rem;
border-bottom: 1px solid var(--line);
scrollbar-width: thin;
/* 站点设置:限宽左对齐,不写入后台公共主容器 */
.admin-canvas:has(.admin-settings-page) {
background: var(--bg);
}
.admin-settings-tab {
appearance: none;
flex-shrink: 0;
display: inline-flex;
align-items: center;
gap: 0.35rem;
border: none;
background: transparent;
padding: 0.7rem 0.95rem;
margin-bottom: -1px;
font-family: inherit;
font-size: 13.5px;
font-weight: 500;
line-height: 1.3;
color: var(--ink-2);
cursor: pointer;
white-space: nowrap;
border-bottom: 2px solid transparent;
transition: color 0.15s ease, border-color 0.15s ease;
@media (min-width: 1920px) {
.admin-canvas:has(.admin-settings-page) {
padding-left: 3rem; /* 宽屏距主导航最多约 48px;1024+ 默认 2rem */
}
}
.admin-settings-tab:hover:not([aria-selected="true"]) {
color: var(--ink);
.admin-settings-page {
width: 100%;
max-width: 1120px;
margin-inline: 0;
container-type: inline-size;
container-name: settings-page;
}
.admin-settings-tab[aria-selected="true"] {
color: var(--accent);
font-weight: 600;
border-bottom-color: var(--accent);
.admin-settings-page > .mb-5 {
margin-bottom: 1.25rem;
}
.admin-settings-tab:focus-visible {
outline: 2px solid var(--accent);
outline-offset: -2px;
}
.admin-settings-tab-soon {
font-size: 10.5px;
font-weight: 500;
color: var(--ink-3);
}
.admin-settings-grid {
.admin-settings-work {
display: grid;
grid-template-columns: 1fr;
gap: 1rem;
grid-template-columns: 10rem minmax(0, 1fr);
gap: 1.5rem;
align-items: start;
}
@media (min-width: 1024px) {
.admin-settings-grid {
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
.admin-settings-nav-col {
min-width: 0;
}
.admin-settings-nav {
display: flex;
flex-direction: column;
gap: 0.15rem;
}
.admin-settings-nav-link {
display: flex;
align-items: center;
width: 100%;
min-height: 2.25rem;
padding: 0.4rem 0.7rem;
border-radius: 0.65rem;
font-size: 13.5px;
font-weight: 500;
line-height: 1.35;
color: var(--ink-2);
text-align: left;
border: none;
background: transparent;
cursor: pointer;
font-family: inherit;
text-decoration: none;
}
.admin-settings-nav-link:hover {
background: var(--panel-2);
color: var(--ink);
}
.admin-settings-nav-link:visited {
color: var(--ink-2);
}
.admin-settings-nav-link[aria-current="page"],
.admin-settings-nav-link[aria-current="page"]:visited {
background: var(--nav-active-bg);
color: var(--nav-active-ink);
font-weight: 600;
}
.admin-settings-nav-link:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 2px;
}
.admin-settings-nav-soon {
margin-top: 0.5rem;
padding-top: 0.5rem;
border-top: 1px solid var(--line);
}
.admin-settings-nav-soon-summary {
display: flex;
align-items: center;
gap: 0.35rem;
width: 100%;
min-height: 2rem;
padding: 0.3rem 0.7rem;
border-radius: 0.5rem;
font-size: 12px;
font-weight: 550;
line-height: 1.35;
color: var(--ink-3);
cursor: pointer;
list-style: none;
font-family: inherit;
}
.admin-settings-nav-soon-summary::-webkit-details-marker,
.admin-settings-nav-soon-summary::marker {
display: none;
content: "";
}
.admin-settings-nav-soon-summary::before {
content: "";
width: 0.35rem;
height: 0.35rem;
border-right: 1.5px solid currentColor;
border-bottom: 1.5px solid currentColor;
transform: rotate(-45deg);
flex-shrink: 0;
}
.admin-settings-nav-soon[open] .admin-settings-nav-soon-summary::before {
transform: rotate(45deg);
}
.admin-settings-nav-soon-summary:hover {
background: var(--panel-2);
color: var(--ink-2);
}
.admin-settings-nav-soon-summary:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 2px;
}
.admin-settings-nav-soon-list {
margin: 0.15rem 0 0;
padding: 0 0.7rem 0.2rem;
list-style: none;
display: flex;
flex-direction: column;
gap: 0.15rem;
}
.admin-settings-nav-soon-list li {
font-size: 12.5px;
line-height: 1.45;
color: var(--ink-3);
pointer-events: none;
}
.admin-settings-main {
min-width: 0;
display: flex;
flex-direction: column;
gap: 1.25rem;
container-type: inline-size;
container-name: settings-form;
}
.admin-settings-stack {
display: flex;
flex-direction: column;
gap: 1.25rem;
min-width: 0;
}
.admin-settings-group {
background: var(--panel);
border: 1px solid var(--line);
border-radius: var(--r);
overflow: hidden;
}
.admin-settings-group-head {
padding: 1.25rem 1.25rem 0.75rem;
}
.admin-settings-group-title {
margin: 0;
font-size: 15px;
font-weight: 650;
color: var(--ink);
}
.admin-settings-group-desc {
margin: 0.3rem 0 0;
font-size: 12.5px;
line-height: 1.5;
color: var(--ink-3);
}
.admin-settings-group-body {
display: flex;
flex-direction: column;
gap: 1rem;
padding: 0 1.25rem 1.25rem;
}
.admin-settings-group-footer {
padding: 0 1.25rem 1.25rem;
}
.admin-settings-group:has(.admin-settings-group-footer) .admin-settings-group-body {
padding-bottom: 0.75rem;
}
.admin-settings-git-json-wrap {
min-width: 0;
display: flex;
flex-direction: column;
min-height: 12rem;
}
.admin-settings-git-json {
min-height: 12rem;
width: 100%;
resize: vertical;
}
.admin-settings-md {
min-width: 0;
min-height: 16rem;
display: flex;
flex-direction: column;
border: 1px solid var(--line);
border-radius: 12px;
padding: 0.35rem 0.85rem 0.55rem;
background: var(--panel);
}
.admin-settings-git-summary {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.35rem 0.85rem;
margin-top: 0.75rem;
padding-top: 0.75rem;
border-top: 1px solid var(--line);
font-size: 12.5px;
line-height: 1.45;
color: var(--ink-3);
}
.admin-settings-git-summary-kicker {
font-weight: 600;
color: var(--ink-2);
}
.admin-settings-git-summary-src {
display: inline-flex;
align-items: center;
gap: 0.3rem;
color: var(--ink-2);
}
.admin-settings-git-summary-src strong {
font-weight: 600;
color: var(--ink);
}
.admin-settings-row {
display: grid;
grid-template-columns: 10.75rem minmax(0, 1fr);
gap: 0.35rem 1.5rem;
align-items: start;
}
.admin-settings-row-label {
min-width: 0;
padding-top: 0.5rem;
}
.admin-settings-row-name {
display: block;
font-size: 14px;
font-weight: 550;
line-height: 1.4;
color: var(--ink);
overflow-wrap: anywhere;
}
.admin-settings-row-hint {
margin: 0.25rem 0 0;
font-size: 12.5px;
line-height: 1.45;
color: var(--ink-3);
}
.admin-settings-row-hint.is-below {
margin-top: 0.4rem;
}
.admin-settings-row-error {
margin: 0.35rem 0 0;
font-size: 12.5px;
line-height: 1.45;
color: var(--danger);
}
.admin-settings-row-control {
min-width: 0;
}
.admin-settings-control-text {
max-width: min(32.5rem, 100%);
}
.admin-settings-control-long {
max-width: min(40rem, 100%);
}
.admin-settings-control-select {
max-width: min(22.5rem, 100%);
}
.admin-settings-control-num {
max-width: min(11.25rem, 100%);
}
.admin-settings-actions {
display: grid;
grid-template-columns: 10.75rem minmax(0, 1fr);
gap: 0.35rem 1.5rem;
align-items: center;
}
.admin-settings-actions-inner {
grid-column: 2;
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.75rem 1rem;
min-width: 0;
}
.admin-settings-actions-status {
margin: 0;
font-size: 12.5px;
line-height: 1.4;
color: var(--ink-3);
}
.admin-settings-actions-status.is-error {
color: var(--danger);
}
.admin-settings-actions-btns {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.5rem;
}
.admin-settings-actions .btn:disabled {
opacity: 0.72;
}
.admin-settings-instant {
font-size: 12.5px;
color: var(--ink-3);
}
.admin-settings-divider {
height: 1px;
background: var(--line);
margin: 0.1rem 0;
}
.admin-brand-lockup-preview {
max-width: min(32.5rem, 100%);
border-radius: 12px;
overflow: hidden;
background: var(--panel-2);
box-shadow: inset 0 0 0 1px var(--line);
}
.admin-brand-lockup-preview-bar {
min-height: 68px;
padding: 0 1rem;
display: flex;
align-items: center;
}
.admin-brand-slots {
display: flex;
flex-wrap: wrap;
gap: 1rem;
}
.admin-brand-slot-card {
flex: 1 1 11.5rem;
max-width: 16rem;
min-width: 10.5rem;
}
.admin-brand-swatch {
height: 5.5rem;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
padding: 0.75rem;
overflow: hidden;
}
.admin-brand-swatch img {
max-height: 4rem;
max-width: 100%;
object-fit: contain;
}
.admin-brand-swatch-light {
background: #f4f6f3;
color: #3d4a44;
box-shadow: inset 0 0 0 1px rgba(15, 23, 42, 0.08);
}
.admin-brand-swatch-dark {
background: #1a221e;
color: #c5d0ca;
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.1);
}
.admin-brand-swatch-neutral {
background: var(--panel-2);
color: var(--ink-3);
box-shadow: inset 0 0 0 1px var(--line);
}
.admin-settings-keywords {
display: flex;
flex-wrap: wrap;
gap: 0.4rem;
margin-bottom: 0.65rem;
}
.admin-settings-kw {
display: inline-flex;
align-items: center;
gap: 0.25rem;
max-width: 100%;
border-radius: 999px;
padding: 0.2rem 0.65rem;
font-size: 12.5px;
color: var(--ink);
background: var(--panel-2);
box-shadow: inset 0 0 0 1px var(--line);
overflow-wrap: anywhere;
}
.admin-footer-item {
border-radius: 12px;
padding: 0.85rem;
box-shadow: inset 0 0 0 1px var(--line);
display: flex;
flex-direction: column;
gap: 0.85rem;
}
.admin-footer-preview {
max-width: min(40rem, 100%);
border-radius: 12px;
padding: 0.75rem 1rem;
background: var(--panel-2);
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 0.5rem 1rem;
}
@container settings-page (max-width: 1039px) {
.admin-settings-work {
grid-template-columns: minmax(0, 1fr);
gap: 1rem;
}
.admin-settings-nav {
flex-direction: row;
flex-wrap: wrap;
gap: 0.35rem;
}
.admin-settings-nav-link {
width: auto;
min-height: 2rem;
padding: 0.3rem 0.7rem;
background: var(--panel-2);
}
.admin-settings-nav-soon {
flex: 1 1 100%;
margin-top: 0.15rem;
padding-top: 0.5rem;
}
.admin-settings-nav-soon-list {
flex-direction: row;
flex-wrap: wrap;
gap: 0.35rem 0.85rem;
padding: 0.15rem 0.15rem 0;
}
}
/* 基本信息里的品牌槽:窄屏单列,宽屏浅色 / 暗色 / Favicon 并排 */
.admin-brand-grid {
display: grid;
grid-template-columns: 1fr;
gap: 1rem;
align-items: start;
@container settings-form (max-width: 719px) {
.admin-settings-row,
.admin-settings-actions {
grid-template-columns: minmax(0, 1fr);
gap: 0.35rem;
}
.admin-settings-row-label {
padding-top: 0;
}
.admin-settings-actions-inner {
grid-column: 1;
}
}
@media (min-width: 900px) {
.admin-brand-grid {
grid-template-columns: repeat(3, minmax(0, 1fr));
/* 填满可视区:提交导入 JSON / 公告与单页正文,底部操作钉在视口内 */
@media (min-width: 1024px) {
.admin-canvas:has(.admin-settings-page.is-fill) {
display: flex;
flex-direction: column;
overflow: hidden;
padding-bottom: 1.25rem;
}
.admin-brand-keywords {
grid-column: 1 / -1;
.admin-settings-page.is-fill {
flex: 1 1 auto;
min-height: 0;
display: flex;
flex-direction: column;
}
.admin-settings-page.is-fill > .mb-5 {
flex-shrink: 0;
}
.admin-settings-page.is-fill .admin-settings-work {
flex: 1 1 auto;
min-height: 0;
align-items: stretch;
}
.admin-settings-page.is-fill .admin-settings-main,
.admin-settings-page.is-fill .admin-settings-stack {
flex: 1 1 auto;
min-height: 0;
display: flex;
flex-direction: column;
}
.admin-settings-page.is-fill .admin-settings-stack {
overflow: auto;
}
.admin-settings-page.is-fill .admin-settings-group.is-fill {
flex: 1 1 auto;
min-height: 0;
display: flex;
flex-direction: column;
}
.admin-settings-page.is-fill .admin-settings-group.is-fill .admin-settings-group-head,
.admin-settings-page.is-fill .admin-settings-group.is-fill .admin-settings-group-footer {
flex-shrink: 0;
}
.admin-settings-page.is-fill .admin-settings-group.is-fill .admin-settings-group-body {
flex: 1 1 auto;
min-height: 0;
display: flex;
flex-direction: column;
}
.admin-settings-git-editor,
.admin-settings-md-editor {
flex: 1 1 auto;
min-height: 12rem;
align-items: stretch;
}
.admin-settings-git-editor .admin-settings-row-control,
.admin-settings-md-editor .admin-settings-row-control {
min-height: 0;
height: 100%;
display: flex;
flex-direction: column;
}
.admin-settings-git-json-wrap,
.admin-settings-md {
flex: 1 1 auto;
min-height: 0;
max-width: none;
}
.admin-settings-md {
display: flex;
flex-direction: column;
border: 1px solid var(--line);
border-radius: 12px;
padding: 0.35rem 0.85rem 0.55rem;
background: var(--panel);
}
.admin-settings-md .j13-md-editor {
flex: 1 1 auto;
min-height: 0;
}
.admin-settings-md .j13-md-textarea,
.admin-settings-md .j13-md-preview {
min-height: 0;
}
.admin-settings-git-json {
flex: 1 1 auto;
min-height: 0;
height: 100%;
overflow: auto;
resize: none;
}
@container settings-form (max-width: 719px) {
.admin-settings-git-editor,
.admin-settings-md-editor {
grid-template-rows: auto minmax(0, 1fr);
}
}
}
.admin-field-shell.has-count .admin-field-input {
padding-right: 0.5rem;
}
.admin-field-count.is-infield {
flex-shrink: 0;
padding: 0 10px 0 4px;
}
.admin-field-shell.is-area.has-count {
position: relative;
}
.admin-field-shell.is-area .admin-field-count.is-infield {
position: absolute;
top: 8px;
right: 10px;
padding: 0;
z-index: 1;
}
.admin-field-shell.is-area.has-count .admin-field-input {
padding-right: 3.5rem;
padding-top: 10px;
}
.j13-brand-slot {
@@ -3979,38 +4451,59 @@ a.j13-mention-token:hover {
/* 策略条:横向排布,压缩垂直占用 */
.admin-content-policy {
display: flex;
align-items: center;
align-items: flex-start;
gap: 0.65rem 0.85rem;
flex-wrap: wrap;
flex-shrink: 0;
padding: 0.5rem 0.75rem;
padding: 0.55rem 0.75rem;
border: 1px solid var(--line);
border-radius: 12px;
background: var(--panel);
}
.admin-content-policy-lead {
display: flex;
flex-direction: column;
gap: 0.15rem;
flex: 0 1 13.5rem;
min-width: 8.5rem;
padding-top: 0.2rem;
}
.admin-content-policy-title {
font-size: 12px;
font-weight: 650;
color: var(--ink-3);
flex-shrink: 0;
}
.admin-content-policy-scope {
font-size: 11.5px;
line-height: 1.4;
color: var(--ink-3);
}
.admin-content-policy-row {
display: flex;
align-items: center;
gap: 0.35rem 0.5rem;
flex: 1 1 auto;
flex: 1 1 18rem;
min-width: 0;
flex-wrap: wrap;
}
.admin-content-policy-chip {
display: inline-flex;
align-items: center;
flex-wrap: nowrap;
gap: 0.5rem;
padding: 0.28rem 0.55rem;
border-radius: 10px;
background: var(--panel-2);
border: 1px solid transparent;
min-height: 2.25rem;
max-width: 100%;
flex: 0 1 auto;
}
.admin-content-policy-chip-copy {
display: flex;
flex-direction: column;
min-width: 0;
gap: 0.05rem;
}
.admin-content-policy-chip-label {
font-size: 12.5px;
@@ -4018,6 +4511,15 @@ a.j13-mention-token:hover {
color: var(--ink);
white-space: nowrap;
}
.admin-content-policy-chip-how {
font-size: 11px;
font-weight: 500;
color: var(--ink-3);
white-space: nowrap;
}
.admin-content-policy-chip-ctrl {
flex-wrap: nowrap;
}
/* 内容管理:PC 左中右三栏等高;仅列表区滚动 */
.admin-content-triptych {