MediaWiki:Citizen.css:修订间差异
MediaWiki界面页面
更多操作
苹果风主题 |
苹果设计系统重构 v2 |
||
| 第1行: | 第1行: | ||
/* | /* | ||
* Kuke Wiki — Apple Design System for Citizen | |||
* 完整重构版 v2. 分层: tokens → 字体 → 排版 → 材质 → 组件 → 首页 → 系统偏好 | |||
* 回退方式: 清空本页 (MediaWiki:Citizen.css) 即可恢复 Citizen 原生外观。 | |||
*/ | |||
/* | /* ============================================================ | ||
1. DESIGN TOKENS — 覆盖 Citizen 的 OKLCH 分量 (浅色) | |||
============================================================ */ | |||
:root { | :root { | ||
/* 主色: Apple Blue #0071e3 */ | |||
--color-progressive-oklch__l: 56.29%; | |||
--color-progressive-oklch__c: 0.1933; | |||
/* Apple | |||
--color-progressive-oklch__l: 56. | |||
--color-progressive-oklch__c: 0. | |||
--color-progressive-oklch__h: 256.16; | --color-progressive-oklch__h: 256.16; | ||
--color-progressive-hsl__h: 211; | --color-progressive-hsl__h: 211; | ||
--color-progressive-hsl__s: 100%; | --color-progressive-hsl__s: 100%; | ||
--color-progressive-hsl__l: | --color-progressive-hsl__l: 44.5%; | ||
/* | /* 表面: 纯白页面, 极淡冷灰递进 (#fff → #f5f5f7 → #e8e8ed) */ | ||
--color-surface-0-oklch__l: 100%; | --color-surface-0-oklch__l: 100%; | ||
--color-surface-0-oklch__c: 0; | --color-surface-0-oklch__c: 0.004; | ||
--color-surface- | --color-surface-0-oklch__h: 286; | ||
--color-surface- | --color-surface-0-hsl__h: 240; | ||
--color-surface- | --color-surface-0-hsl__s: 12%; | ||
--color-surface- | --color-surface-0-hsl__l: 100%; | ||
--delta-lightness-surface-base: - | --delta-lightness-surface-base: -1.5%; | ||
/* | /* 文字层级: #1d1d1f / #1d1d1f / #6e6e73 / #86868b */ | ||
--color-emphasized-oklch__l: | --color-emphasized-oklch__l: 23.16%; | ||
--color-emphasized-oklch__c: 0. | --color-emphasized-oklch__c: 0.0038; | ||
--color-base-oklch__l: | --color-base-oklch__l: 26%; | ||
--color-base-oklch__c: 0.004; | --color-base-oklch__c: 0.004; | ||
--color-subtle-oklch__l: | --color-subtle-oklch__l: 53.99%; | ||
--color-subtle-oklch__c: 0. | --color-subtle-oklch__c: 0.0077; | ||
--color-placeholder-oklch__l: 62%; | --color-placeholder-oklch__l: 62.17%; | ||
--color-placeholder-oklch__c: 0. | --color-placeholder-oklch__c: 0.0074; | ||
--color-disabled-oklch__l: 72%; | |||
--color-disabled-oklch__c: 0.006; | |||
/* 状态变化更克制 */ | |||
--delta-lightness-state-base: 3%; | |||
/* 毛玻璃: 苹果导航栏配方 */ | |||
--backdrop-filter-frosted-glass: saturate(180%) blur(20px); | |||
/* 形状 */ | |||
--border-radius-base: 10px; | |||
--border-radius-pill: 980px; | |||
--border-color-base: rgb( 0 0 0 / 0.09 ); | |||
/* 阴影: 苹果的多层柔和投影, 而非单层黑块 */ | |||
--shadow-opacity: 0.06; | |||
--box-shadow-small: 0 1px 2px rgb( 0 0 0 / 0.04 ), 0 1px 1px rgb( 0 0 0 / 0.03 ); | |||
--box-shadow-medium: 0 4px 12px rgb( 0 0 0 / 0.06 ), 0 1px 3px rgb( 0 0 0 / 0.05 ); | |||
--box-shadow-large: 0 18px 40px rgb( 0 0 0 / 0.10 ), 0 4px 12px rgb( 0 0 0 / 0.06 ); | |||
/* 缓动 */ | |||
--transition-timing-function-ease: cubic-bezier( 0.4, 0, 0.2, 1 ); | |||
--transition-timing-function-ease-out: cubic-bezier( 0.16, 1, 0.3, 1 ); | |||
--transform-image-hover: scale( 1.035 ); | |||
/* | /* --- Apple 私有令牌 (ap- 命名空间) --- */ | ||
-- | --ap-hairline: rgb( 0 0 0 / 0.09 ); | ||
-- | --ap-hairline-strong: rgb( 0 0 0 / 0.14 ); | ||
-- | --ap-tint: rgb( 255 255 255 / 0.72 ); | ||
--ap-fill-quaternary: rgb( 120 120 128 / 0.08 ); | |||
--ap-fill-tertiary: rgb( 120 120 128 / 0.12 ); | |||
--ap-scrollbar: rgb( 0 0 0 / 0.2 ); | |||
--ap-scrollbar-hover: rgb( 0 0 0 / 0.35 ); | |||
--ap-accent: #0071e3; | |||
--ap-accent-hover: #0077ed; | |||
--ap-radius-card: 18px; | |||
--ap-radius-panel: 22px; | |||
--ap-ease: cubic-bezier( 0.4, 0, 0.2, 1 ); | |||
--ap-ease-out: cubic-bezier( 0.16, 1, 0.3, 1 ); | |||
/* | /* 留白节奏 (8pt 网格 × 苹果的宽松倍率) */ | ||
-- | --ap-space-1: 0.5rem; | ||
-- | --ap-space-2: 1rem; | ||
--ap-space-3: 1.5rem; | |||
--ap-space-4: 2rem; | |||
--ap-space-5: 3rem; | |||
--ap-space-6: 4.5rem; | |||
--ap-space-7: 6.5rem; | |||
} | } | ||
/* | /* --- 暗色: 三种选择器都要覆盖 --- */ | ||
.skin-theme-clientpref-night, | .skin-theme-clientpref-night, | ||
.skin-theme-clientpref-black { | .skin-theme-clientpref-black { | ||
--color-progressive-oklch__l: 62. | --color-progressive-oklch__l: 62.43%; | ||
--color-progressive-oklch__c: 0. | --color-progressive-oklch__c: 0.2056; | ||
--color-progressive-hsl__l: | --color-progressive-oklch__h: 255.49; | ||
--color-surface-0-oklch__l: | --color-progressive-hsl__h: 211; | ||
--color-surface-0-oklch__c: 0; | --color-progressive-hsl__s: 100%; | ||
--delta-lightness-surface-base: | --color-progressive-hsl__l: 52%; | ||
--color-surface-0-oklch__l: 12%; | |||
--color-surface-0-oklch__c: 0.004; | |||
--color-surface-0-oklch__h: 286; | |||
--color-surface-0-hsl__h: 240; | |||
--color-surface-0-hsl__s: 8%; | |||
--color-surface-0-hsl__l: 7%; | |||
--delta-lightness-surface-base: 2.8%; | |||
--color-emphasized-oklch__l: 97%; | --color-emphasized-oklch__l: 97%; | ||
--color-emphasized-oklch__c: 0. | --color-emphasized-oklch__c: 0.003; | ||
--color-base-oklch__l: | --color-base-oklch__l: 90%; | ||
--color-base-oklch__c: 0. | --color-base-oklch__c: 0.004; | ||
--color-subtle-oklch__l: | --color-subtle-oklch__l: 68%; | ||
--color-subtle-oklch__c: 0. | --color-subtle-oklch__c: 0.008; | ||
-- | --color-placeholder-oklch__l: 58%; | ||
--border-color- | --color-disabled-oklch__l: 45%; | ||
--border-color-base: rgb( 255 255 255 / 0.11 ); | |||
--shadow-opacity: 0.5; | --shadow-opacity: 0.5; | ||
--box-shadow- | --box-shadow-small: 0 1px 2px rgb( 0 0 0 / 0.4 ); | ||
--box-shadow-medium: 0 4px 14px rgb( 0 0 0 / 0.45 ); | |||
--box-shadow-large: 0 20px 44px rgb( 0 0 0 / 0.55 ); | |||
--ap-hairline: rgb( 255 255 255 / 0.11 ); | |||
--ap-hairline-strong: rgb( 255 255 255 / 0.18 ); | |||
--ap-tint: rgb( 30 30 32 / 0.72 ); | |||
--ap-fill-quaternary: rgb( 118 118 128 / 0.18 ); | |||
--ap-fill-tertiary: rgb( 118 118 128 / 0.24 ); | |||
--ap-scrollbar: rgb( 255 255 255 / 0.22 ); | |||
--ap-scrollbar-hover: rgb( 255 255 255 / 0.38 ); | |||
--ap-accent: #0a84ff; | |||
--ap-accent-hover: #409cff; | |||
} | } | ||
@media ( prefers-color-scheme: dark ) { | @media ( prefers-color-scheme: dark ) { | ||
.skin-theme-clientpref-os { | .skin-theme-clientpref-os { | ||
--color-progressive-oklch__l: 62. | --color-progressive-oklch__l: 62.43%; | ||
--color-progressive-oklch__c: 0. | --color-progressive-oklch__c: 0.2056; | ||
--color-progressive-hsl__l: | --color-progressive-oklch__h: 255.49; | ||
--color-surface-0-oklch__l: | --color-progressive-hsl__h: 211; | ||
--color-surface-0-oklch__c: 0; | --color-progressive-hsl__s: 100%; | ||
--delta-lightness-surface-base: | --color-progressive-hsl__l: 52%; | ||
--color-surface-0-oklch__l: 12%; | |||
--color-surface-0-oklch__c: 0.004; | |||
--color-surface-0-oklch__h: 286; | |||
--color-surface-0-hsl__h: 240; | |||
--color-surface-0-hsl__s: 8%; | |||
--color-surface-0-hsl__l: 7%; | |||
--delta-lightness-surface-base: 2.8%; | |||
--color-emphasized-oklch__l: 97%; | --color-emphasized-oklch__l: 97%; | ||
--color-emphasized-oklch__c: 0. | --color-emphasized-oklch__c: 0.003; | ||
--color-base-oklch__l: | --color-base-oklch__l: 90%; | ||
--color-base-oklch__c: 0. | --color-base-oklch__c: 0.004; | ||
--color-subtle-oklch__l: | --color-subtle-oklch__l: 68%; | ||
--color-subtle-oklch__c: 0. | --color-subtle-oklch__c: 0.008; | ||
-- | --color-placeholder-oklch__l: 58%; | ||
--border-color- | --color-disabled-oklch__l: 45%; | ||
--border-color-base: rgb( 255 255 255 / 0.11 ); | |||
--shadow-opacity: 0.5; | --shadow-opacity: 0.5; | ||
--box-shadow- | --box-shadow-small: 0 1px 2px rgb( 0 0 0 / 0.4 ); | ||
--box-shadow-medium: 0 4px 14px rgb( 0 0 0 / 0.45 ); | |||
--box-shadow-large: 0 20px 44px rgb( 0 0 0 / 0.55 ); | |||
--ap-hairline: rgb( 255 255 255 / 0.11 ); | |||
--ap-hairline-strong: rgb( 255 255 255 / 0.18 ); | |||
--ap-tint: rgb( 30 30 32 / 0.72 ); | |||
--ap-fill-quaternary: rgb( 118 118 128 / 0.18 ); | |||
--ap-fill-tertiary: rgb( 118 118 128 / 0.24 ); | |||
--ap-scrollbar: rgb( 255 255 255 / 0.22 ); | |||
--ap-scrollbar-hover: rgb( 255 255 255 / 0.38 ); | |||
--ap-accent: #0a84ff; | |||
--ap-accent-hover: #409cff; | |||
} | } | ||
} | } | ||
/* | /* ============================================================ | ||
2. 字体栈与渲染 | |||
============================================================ */ | |||
:root { | :root { | ||
-- | --font-family-citizen-base: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'SF Pro Display', 'Helvetica Neue', 'Segoe UI Variable Text', 'Segoe UI', Inter; | ||
-- | --font-family-citizen-serif: 'New York', 'Iowan Old Style', 'Source Serif Pro', Georgia; | ||
--font-family-citizen-monospace: 'SF Mono', ui-monospace, Menlo, 'Cascadia Code', 'JetBrains Mono', Consolas; | |||
--font-family-language-base: 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei UI', 'Microsoft YaHei'; | |||
--font-family-language-serif: 'Songti SC', 'Source Han Serif SC', 'Noto Serif CJK SC', SimSun; | |||
--font-family-language-monospace: 'PingFang SC', 'Microsoft YaHei UI'; | |||
--font-size-medium: 1.0625rem; | |||
--line-height-content: 1.55; | |||
--font-weight-semi-bold: 590; | |||
--font-weight-bold: 680; | |||
} | |||
html { | |||
-- | -webkit-text-size-adjust: 100%; | ||
} | |||
body { | |||
-- | -webkit-font-smoothing: antialiased; | ||
-- | -moz-osx-font-smoothing: grayscale; | ||
text-rendering: optimizeLegibility; | |||
font-synthesis-weight: none; | |||
letter-spacing: normal; | |||
} | |||
/* ============================================================ | |||
3. 排版 — SF 的光学字距对照表 | |||
拉丁文字号越大字距越负; 中文一律 normal (负字距会让汉字粘连) | |||
============================================================ */ | |||
.mw-body-content, | |||
.citizen-body { | |||
font-size: var( --font-size-medium ); | |||
line-height: 1.55; | |||
} | } | ||
.mw-parser-output p { | |||
margin: 0 0 1.05em; | |||
text-wrap: pretty; | |||
max-width: 74ch; | |||
} | } | ||
h1, | |||
h2, | |||
h3, | |||
h4, | |||
h5, | |||
h6, | |||
.citizen-page-heading, | |||
.mw-headline { | |||
font-family: var( --font-family-citizen-base ), var( --font-family-language-base ), system-ui, sans-serif; | |||
font-weight: 600; | font-weight: 600; | ||
letter-spacing: -0. | line-height: 1.1; | ||
text-wrap: balance; | |||
color: var( --color-emphasized ); | |||
} | |||
.citizen-page-heading, | |||
h1 { | |||
font-size: clamp( 2rem, 1.35rem + 2.2vw, 2.75rem ); | |||
letter-spacing: -0.021em; | |||
line-height: 1.08; | |||
} | |||
.mw-parser-output h2 { | |||
font-size: clamp( 1.5rem, 1.2rem + 1vw, 1.875rem ); | |||
letter-spacing: -0.02em; | |||
margin: 2.6em 0 0.62em; | |||
padding-bottom: 0; | |||
border-bottom: 0; | |||
line-height: 1.14; | line-height: 1.14; | ||
} | } | ||
.mw- | .mw-parser-output h3 { | ||
font-size: 1.3125rem; | |||
font-size: | letter-spacing: -0.016em; | ||
letter-spacing: -0. | margin: 2em 0 0.55em; | ||
line-height: 1.2; | |||
} | } | ||
/* | .mw-parser-output h4 { | ||
.mw-body h2 { | font-size: 1.125rem; | ||
letter-spacing: -0.014em; | |||
margin: 1.7em 0 0.5em; | |||
font- | } | ||
.mw-parser-output h5, | |||
.mw-parser-output h6 { | |||
font-size: 1rem; | |||
letter-spacing: -0.01em; | |||
margin: 1.5em 0 0.45em; | |||
color: var( --color-subtle ); | |||
} | |||
/* 第一个标题不要多余的上边距 */ | |||
.mw-parser-output > h2:first-child, | |||
.mw-parser-output > h3:first-child { | |||
margin-top: 0; | |||
} | |||
/* 中文: 关闭负字距, 放宽行高 */ | |||
html:lang( zh ) body, | |||
html:lang( zh-cn ) body, | |||
html:lang( zh-hans ) body, | |||
html:lang( ja ) body, | |||
html:lang( ko ) body { | |||
letter-spacing: normal; | |||
} | |||
html:lang( zh ) h1, | |||
html:lang( zh ) h2, | |||
html:lang( zh ) h3, | |||
html:lang( zh ) h4, | |||
html:lang( zh ) h5, | |||
html:lang( zh ) h6, | |||
html:lang( zh ) .citizen-page-heading, | |||
html:lang( zh-cn ) h1, | |||
html:lang( zh-cn ) h2, | |||
html:lang( zh-cn ) h3, | |||
html:lang( zh-cn ) .citizen-page-heading, | |||
html:lang( zh-hans ) h1, | |||
html:lang( zh-hans ) h2, | |||
html:lang( zh-hans ) h3, | |||
html:lang( zh-hans ) .citizen-page-heading { | |||
letter-spacing: -0.003em; | |||
} | |||
html:lang( zh ) .mw-parser-output p, | |||
html:lang( zh ) .mw-parser-output li, | |||
html:lang( zh-cn ) .mw-parser-output p, | |||
html:lang( zh-hans ) .mw-parser-output p { | |||
line-height: 1.75; | |||
max-width: 40em; | |||
} | |||
/* 强调与小字 */ | |||
strong, | |||
b { | |||
font-weight: 600; | |||
color: var( --color-emphasized ); | |||
} | } | ||
. | small, | ||
.citizen-footer__desc, | |||
.citizen-siteStats__label { | |||
font-size: 0.75rem; | |||
letter-spacing: -0.005em; | |||
} | } | ||
/* | /* ============================================================ | ||
.mw- | 4. 链接 | ||
============================================================ */ | |||
.mw-parser-output a:not( .image ):not( .cdx-button ) { | |||
color: var( --ap-accent ); | |||
text-decoration: none; | text-decoration: none; | ||
transition: color 0. | transition: color 0.15s var( --ap-ease ); | ||
} | } | ||
.mw- | .mw-parser-output a:not( .image ):not( .cdx-button ):hover { | ||
color: var( --ap-accent-hover ); | |||
text-decoration: underline; | text-decoration: underline; | ||
text-underline-offset: 0.2em; | text-underline-offset: 0.2em; | ||
text-decoration-thickness: | text-decoration-thickness: 0.06em; | ||
} | |||
.mw-parser-output a.new, | |||
.mw-parser-output a.new:hover { | |||
color: #d93025; | |||
} | |||
/* ============================================================ | |||
5. 材质与形状 — 顶栏 / 侧栏 / 浮层 | |||
============================================================ */ | |||
.citizen-header, | |||
.citizen-sticky-header { | |||
background-color: var( --ap-tint ); | |||
-webkit-backdrop-filter: saturate( 180% ) blur( 20px ); | |||
backdrop-filter: saturate( 180% ) blur( 20px ); | |||
border-color: var( --ap-hairline ); | |||
box-shadow: none; | |||
} | } | ||
.citizen-header__inner { | |||
border-bottom: 1px solid var( --ap-hairline ); | |||
} | |||
.citizen-drawer__card, | |||
.citizen-menu__card, | |||
.citizen-search__card, | |||
.citizen-search-box__card, | |||
.citizen-dropdown .citizen-menu__card, | |||
.citizen-share-dialog { | |||
border-radius: var( --ap-radius-panel ); | |||
border: 1px solid var( --ap-hairline ); | |||
box-shadow: var( --box-shadow-large ); | |||
background-color: var( --color-surface-1 ); | |||
-webkit-backdrop-filter: saturate( 180% ) blur( 24px ); | |||
backdrop-filter: saturate( 180% ) blur( 24px ); | |||
overflow: hidden; | |||
} | |||
.citizen-menu__content-list a, | |||
.citizen-drawer__menu a { | |||
border-radius: 8px; | |||
transition: background-color 0.14s var( --ap-ease ); | |||
} | |||
.citizen-menu__heading { | |||
font-size: 0.6875rem; | |||
font-weight: 600; | |||
letter-spacing: 0.06em; | |||
text-transform: uppercase; | |||
color: var( --color-placeholder ); | |||
} | |||
/* ============================================================ | |||
6. 按钮 — 药丸 + 按压回弹 | |||
============================================================ */ | |||
.cdx-button, | .cdx-button, | ||
.citizen-cdx-button--size-large, | |||
.mw-ui-button { | .mw-ui-button { | ||
border-radius: var( --border-radius-pill ); | border-radius: var( --border-radius-pill ); | ||
font-weight: 500; | font-weight: 500; | ||
letter-spacing: -0. | letter-spacing: -0.012em; | ||
transition: | border-color: var( --ap-hairline-strong ); | ||
transition: background-color 0.16s var( --ap-ease ), transform 0.12s var( --ap-ease ), box-shadow 0.16s var( --ap-ease ); | |||
} | } | ||
.cdx-button:active, | .cdx-button:active, | ||
.mw-ui-button:active { | .mw-ui-button:active, | ||
.citizen-cdx-button--size-large:active { | |||
transform: scale( 0.96 ); | transform: scale( 0.96 ); | ||
} | } | ||
.cdx-button--weight-primary, | |||
.cdx-button--action-progressive.cdx-button--weight-primary { | |||
background-color: var( --ap-accent ); | |||
border-color: transparent; | |||
color: #fff; | |||
box-shadow: none; | |||
} | |||
.cdx-button--weight-primary:hover { | |||
background-color: var( --ap-accent-hover ); | |||
} | |||
.cdx-button--icon-only { | |||
border-radius: var( --border-radius-circle ); | |||
} | |||
.citizen-page-actions__item .cdx-button, | |||
.citizen-header__item .cdx-button { | |||
border-color: transparent; | |||
} | |||
/* ============================================================ | |||
7. 搜索框 — 胶囊 + 内嵌填充 | |||
============================================================ */ | |||
.citizen-search__form, | |||
.citizen-search-box__form, | |||
.citizen-search__input, | .citizen-search__input, | ||
#searchInput { | |||
border-radius: var( --border-radius-pill ); | border-radius: var( --border-radius-pill ); | ||
background-color: var( --ap-fill-quaternary ); | |||
border-color: transparent; | |||
transition: background-color 0.18s var( --ap-ease ), box-shadow 0.18s var( --ap-ease ); | |||
} | } | ||
.citizen-search__form:focus-within, | |||
.citizen-search-box__form:focus-within { | |||
.citizen- | background-color: var( --color-surface-0 ); | ||
box-shadow: 0 0 0 3.5px rgb( 0 113 227 / 0.25 ), var( --box-shadow-medium ); | |||
box-shadow: 0 | |||
} | } | ||
/* | /* ============================================================ | ||
.wikitable { | 8. 内容组件 | ||
border-radius: | ============================================================ */ | ||
.mw-parser-output table.wikitable { | |||
border-radius: 14px; | |||
border: 1px solid var( --ap-hairline ); | |||
border-collapse: separate; | border-collapse: separate; | ||
border-spacing: 0; | border-spacing: 0; | ||
overflow: hidden; | overflow: hidden; | ||
font-size: 0.9375rem; | |||
box-shadow: none; | |||
} | } | ||
.wikitable > * > tr > th, | .mw-parser-output table.wikitable > * > tr > th, | ||
.wikitable > * > tr > td { | .mw-parser-output table.wikitable > * > tr > td { | ||
border: 0; | border: 0; | ||
border-bottom: 1px solid var( -- | border-bottom: 1px solid var( --ap-hairline ); | ||
padding: 0.7rem 1rem; | |||
} | } | ||
.wikitable > * > tr:last-child > td { | .mw-parser-output table.wikitable > * > tr:last-child > td { | ||
border-bottom: 0; | border-bottom: 0; | ||
} | } | ||
.wikitable > * > tr > th { | .mw-parser-output table.wikitable > * > tr > th { | ||
background-color: var( --color-surface-2 ); | background-color: var( --color-surface-2 ); | ||
font-weight: 600; | font-weight: 600; | ||
letter-spacing: -0.008em; | |||
} | } | ||
pre, | .mw-parser-output pre, | ||
.mw-parser-output code, | |||
.mw-highlight pre { | |||
font-family: var( --font-family-citizen-monospace ), monospace; | |||
font-size: 0.875em; | |||
} | |||
.mw-parser-output pre, | |||
.mw-highlight pre { | .mw-highlight pre { | ||
border-radius: 12px; | border-radius: 12px; | ||
border: 1px solid var( -- | border: 1px solid var( --ap-hairline ); | ||
padding: 1rem 1. | background-color: var( --color-surface-1 ); | ||
padding: 1rem 1.15rem; | |||
line-height: 1.55; | |||
} | } | ||
code | .mw-parser-output code { | ||
border-radius: 6px; | border-radius: 6px; | ||
padding: 0.12em 0.38em; | |||
background-color: var( --ap-fill-quaternary ); | |||
border: 0; | |||
} | } | ||
.mw-parser-output blockquote { | |||
. | border-left: 3px solid var( --ap-accent ); | ||
border-radius: 0 10px 10px 0; | |||
background-color: var( --color-surface-1 ); | |||
padding: 0.9rem 1.25rem; | |||
margin: 1.6em 0; | |||
font-size: 1.0625rem; | |||
} | |||
.mw-parser-output hr { | |||
border: 0; | |||
border-top: 1px solid var( --ap-hairline ); | |||
margin: var( --ap-space-5 ) 0; | |||
} | |||
.mw-parser-output img, | |||
.mw-parser-output .thumbimage { | |||
border-radius: 12px; | border-radius: 12px; | ||
border: 0; | border: 0; | ||
} | } | ||
.mw- | .mw-parser-output .thumb .thumbinner { | ||
border-radius: 8px; | border-radius: 14px; | ||
border: 1px solid var( --ap-hairline ); | |||
background-color: var( --color-surface-1 ); | |||
padding: 8px; | |||
} | |||
/* ============================================================ | |||
9. 页面框架 / 页脚 / 目录 | |||
============================================================ */ | |||
.citizen-page-header { | |||
padding-bottom: var( --ap-space-2 ); | |||
} | |||
.citizen-page-heading { | |||
margin-bottom: 0.25rem; | |||
} | |||
.citizen-toc .citizen-menu__content-list a { | |||
letter-spacing: -0.008em; | |||
font-size: 0.875rem; | |||
} | |||
.citizen-footer { | |||
border-top: 1px solid var( --ap-hairline ); | |||
background-color: var( --color-surface-1 ); | |||
} | |||
.citizen-footer__content, | |||
.citizen-footer__bottom { | |||
font-size: 0.75rem; | |||
color: var( --color-subtle ); | |||
letter-spacing: -0.004em; | |||
} | |||
.citizen-siteStats__item { | |||
border-radius: 12px; | |||
background-color: var( --ap-fill-quaternary ); | |||
border: 0; | |||
} | } | ||
/* | /* ============================================================ | ||
10. 首页 — 苹果发布页式分段布局 | |||
============================================================ */ | |||
.kuke-hero { | .kuke-hero { | ||
text-align: center; | text-align: center; | ||
padding: | padding: var( --ap-space-7 ) var( --ap-space-2 ) var( --ap-space-6 ); | ||
margin-bottom: var( --ap-space-4 ); | |||
} | } | ||
.kuke-hero__title { | .kuke-hero__title { | ||
font-size: clamp( 2. | font-size: clamp( 2.75rem, 1.6rem + 5.2vw, 5rem ); | ||
font-weight: | font-weight: 640; | ||
letter-spacing: -0. | line-height: 1.05; | ||
letter-spacing: -0.018em; | |||
margin: 0 0 var( --ap-space-2 ); | |||
background: linear-gradient( 180deg, var( --color-emphasized ), var( --color-subtle ) ); | text-wrap: balance; | ||
background-image: linear-gradient( 180deg, var( --color-emphasized ) 0%, var( --color-subtle ) 165% ); | |||
-webkit-background-clip: text; | -webkit-background-clip: text; | ||
background-clip: text; | background-clip: text; | ||
color: transparent; | |||
} | } | ||
.kuke-hero__sub { | .kuke-hero__sub { | ||
font-size: clamp( 1. | font-size: clamp( 1.0625rem, 0.9rem + 0.7vw, 1.5rem ); | ||
line-height: 1.42; | |||
font-weight: 400; | |||
color: var( --color-subtle ); | color: var( --color-subtle ); | ||
margin- | max-width: 34em; | ||
margin: 0 auto var( --ap-space-4 ) !important; | |||
letter-spacing: 0; | |||
} | |||
.kuke-cta { | |||
display: inline-block; | |||
padding: 0.72em 1.75em; | |||
border-radius: var( --border-radius-pill ); | |||
background-color: var( --ap-accent ); | |||
color: #fff !important; | |||
font-size: 1.0625rem; | |||
font-weight: 500; | |||
letter-spacing: -0.01em; | letter-spacing: -0.01em; | ||
text-decoration: none !important; | |||
margin: 0 0.35rem 0.6rem; | |||
transition: background-color 0.16s var( --ap-ease ), transform 0.12s var( --ap-ease ); | |||
} | |||
.kuke-cta:hover { | |||
background-color: var( --ap-accent-hover ); | |||
color: #fff !important; | |||
} | |||
.kuke-cta:active { | |||
transform: scale( 0.96 ); | |||
} | |||
.kuke-cta--ghost { | |||
background-color: transparent; | |||
color: var( --ap-accent ) !important; | |||
box-shadow: inset 0 0 0 1px var( --ap-accent ); | |||
} | |||
.kuke-cta--ghost:hover { | |||
background-color: rgb( 0 113 227 / 0.08 ); | |||
color: var( --ap-accent ) !important; | |||
} | |||
.kuke-section { | |||
padding: var( --ap-space-6 ) 0; | |||
border-top: 1px solid var( --ap-hairline ); | |||
} | |||
.kuke-section__title { | |||
font-size: clamp( 1.75rem, 1.3rem + 1.8vw, 2.5rem ) !important; | |||
font-weight: 620 !important; | |||
letter-spacing: -0.018em; | |||
text-align: center; | |||
margin: 0 0 0.5em !important; | |||
border: 0 !important; | |||
padding: 0 !important; | |||
text-wrap: balance; | |||
} | |||
.kuke-section__lead { | |||
text-align: center; | |||
color: var( --color-subtle ); | |||
font-size: 1.0625rem; | |||
max-width: 36em; | |||
margin: 0 auto var( --ap-space-4 ) !important; | |||
} | } | ||
.kuke-grid { | .kuke-grid { | ||
display: grid; | display: grid; | ||
grid-template-columns: repeat( auto-fit, minmax( | grid-template-columns: repeat( auto-fit, minmax( 260px, 1fr ) ); | ||
gap: | gap: var( --ap-space-2 ); | ||
margin: | margin: 0; | ||
padding: 0; | |||
list-style: none; | |||
} | } | ||
.kuke-card { | .kuke-card { | ||
display: block; | |||
padding: var( --ap-space-3 ); | |||
border-radius: var( --ap-radius-card ); | |||
background-color: var( --color-surface-1 ); | background-color: var( --color-surface-1 ); | ||
border: 1px solid var( -- | border: 1px solid var( --ap-hairline ); | ||
box-shadow: none; | |||
transition: transform 0.32s var( --ap-ease-out ), box-shadow 0.32s var( --ap-ease-out ), background-color 0.2s var( --ap-ease ); | |||
transition: transform 0. | |||
} | } | ||
.kuke-card:hover { | .kuke-card:hover { | ||
transform: translateY( - | transform: translateY( -4px ); | ||
box-shadow: | box-shadow: var( --box-shadow-large ); | ||
} | |||
.kuke-card__icon { | |||
font-size: 1.75rem; | |||
line-height: 1; | |||
display: block; | |||
margin-bottom: 0.75rem; | |||
} | } | ||
.kuke- | .kuke-card__title { | ||
. | font-size: 1.1875rem !important; | ||
margin: 0 0 0. | font-weight: 600 !important; | ||
font-size: | letter-spacing: -0.014em; | ||
margin: 0 0 0.4rem !important; | |||
border: 0 !important; | |||
padding: 0 !important; | |||
color: var( --color-emphasized ); | |||
} | |||
.kuke-card__text { | |||
font-size: 0.9375rem !important; | |||
line-height: 1.5 !important; | |||
color: var( --color-subtle ); | |||
margin: 0 !important; | |||
max-width: none !important; | |||
} | } | ||
.kuke- | .kuke-stats { | ||
display: grid; | |||
grid-template-columns: repeat( auto-fit, minmax( 150px, 1fr ) ); | |||
gap: var( --ap-space-2 ); | |||
text-align: center; | |||
margin: 0; | margin: 0; | ||
padding: 0; | |||
list-style: none; | list-style: none; | ||
} | } | ||
.kuke- | .kuke-stat__num { | ||
display: block; | |||
font-size: clamp( 2rem, 1.5rem + 2vw, 3rem ); | |||
font-weight: 620; | |||
letter-spacing: -0.022em; | |||
line-height: 1; | |||
color: var( --ap-accent ); | |||
} | } | ||
.kuke- | .kuke-stat__label { | ||
color: var( --color- | display: block; | ||
margin-top: 0.4rem; | |||
font-size: 0.8125rem; | |||
color: var( --color-subtle ); | |||
} | } | ||
/* | /* ============================================================ | ||
11. 滚动条 / 选中 / 焦点环 | |||
============================================================ */ | |||
* { | * { | ||
scrollbar-width: thin; | scrollbar-width: thin; | ||
scrollbar-color: var( -- | scrollbar-color: var( --ap-scrollbar ) transparent; | ||
} | } | ||
| 第313行: | 第741行: | ||
width: 9px; | width: 9px; | ||
height: 9px; | height: 9px; | ||
} | |||
::-webkit-scrollbar-track { | |||
background: transparent; | |||
} | } | ||
::-webkit-scrollbar-thumb { | ::-webkit-scrollbar-thumb { | ||
background-color: | background-color: var( --ap-scrollbar ); | ||
border-radius: | border-radius: 980px; | ||
border: 2px solid transparent; | border: 2px solid transparent; | ||
background-clip: content-box; | background-clip: content-box; | ||
| 第323行: | 第755行: | ||
::-webkit-scrollbar-thumb:hover { | ::-webkit-scrollbar-thumb:hover { | ||
background-color: | background-color: var( --ap-scrollbar-hover ); | ||
} | } | ||
:: | ::selection { | ||
background: | background-color: rgb( 0 113 227 / 0.24 ); | ||
} | } | ||
a:focus-visible, | |||
:focus-visible { | button:focus-visible, | ||
outline: 2px solid var( -- | input:focus-visible, | ||
select:focus-visible, | |||
textarea:focus-visible, | |||
summary:focus-visible, | |||
.cdx-button:focus-visible { | |||
outline: 2px solid var( --ap-accent ); | |||
outline-offset: 2px; | outline-offset: 2px; | ||
border-radius: | border-radius: 8px; | ||
} | |||
/* ============================================================ | |||
12. 系统偏好 | |||
============================================================ */ | |||
@media ( prefers-reduced-motion: reduce ) { | |||
.kuke-card, | |||
.kuke-cta, | |||
.cdx-button { | |||
transition: none; | |||
} | |||
.kuke-card:hover { | |||
transform: none; | |||
} | |||
} | |||
@media ( max-width: 720px ) { | |||
.kuke-hero { | |||
padding: var( --ap-space-5 ) var( --ap-space-1 ) var( --ap-space-4 ); | |||
} | |||
.kuke-section { | |||
padding: var( --ap-space-5 ) 0; | |||
} | |||
} | } | ||
2026年8月19日 (三) 15:51的版本
/*
* Kuke Wiki — Apple Design System for Citizen
* 完整重构版 v2. 分层: tokens → 字体 → 排版 → 材质 → 组件 → 首页 → 系统偏好
* 回退方式: 清空本页 (MediaWiki:Citizen.css) 即可恢复 Citizen 原生外观。
*/
/* ============================================================
1. DESIGN TOKENS — 覆盖 Citizen 的 OKLCH 分量 (浅色)
============================================================ */
:root {
/* 主色: Apple Blue #0071e3 */
--color-progressive-oklch__l: 56.29%;
--color-progressive-oklch__c: 0.1933;
--color-progressive-oklch__h: 256.16;
--color-progressive-hsl__h: 211;
--color-progressive-hsl__s: 100%;
--color-progressive-hsl__l: 44.5%;
/* 表面: 纯白页面, 极淡冷灰递进 (#fff → #f5f5f7 → #e8e8ed) */
--color-surface-0-oklch__l: 100%;
--color-surface-0-oklch__c: 0.004;
--color-surface-0-oklch__h: 286;
--color-surface-0-hsl__h: 240;
--color-surface-0-hsl__s: 12%;
--color-surface-0-hsl__l: 100%;
--delta-lightness-surface-base: -1.5%;
/* 文字层级: #1d1d1f / #1d1d1f / #6e6e73 / #86868b */
--color-emphasized-oklch__l: 23.16%;
--color-emphasized-oklch__c: 0.0038;
--color-base-oklch__l: 26%;
--color-base-oklch__c: 0.004;
--color-subtle-oklch__l: 53.99%;
--color-subtle-oklch__c: 0.0077;
--color-placeholder-oklch__l: 62.17%;
--color-placeholder-oklch__c: 0.0074;
--color-disabled-oklch__l: 72%;
--color-disabled-oklch__c: 0.006;
/* 状态变化更克制 */
--delta-lightness-state-base: 3%;
/* 毛玻璃: 苹果导航栏配方 */
--backdrop-filter-frosted-glass: saturate(180%) blur(20px);
/* 形状 */
--border-radius-base: 10px;
--border-radius-pill: 980px;
--border-color-base: rgb( 0 0 0 / 0.09 );
/* 阴影: 苹果的多层柔和投影, 而非单层黑块 */
--shadow-opacity: 0.06;
--box-shadow-small: 0 1px 2px rgb( 0 0 0 / 0.04 ), 0 1px 1px rgb( 0 0 0 / 0.03 );
--box-shadow-medium: 0 4px 12px rgb( 0 0 0 / 0.06 ), 0 1px 3px rgb( 0 0 0 / 0.05 );
--box-shadow-large: 0 18px 40px rgb( 0 0 0 / 0.10 ), 0 4px 12px rgb( 0 0 0 / 0.06 );
/* 缓动 */
--transition-timing-function-ease: cubic-bezier( 0.4, 0, 0.2, 1 );
--transition-timing-function-ease-out: cubic-bezier( 0.16, 1, 0.3, 1 );
--transform-image-hover: scale( 1.035 );
/* --- Apple 私有令牌 (ap- 命名空间) --- */
--ap-hairline: rgb( 0 0 0 / 0.09 );
--ap-hairline-strong: rgb( 0 0 0 / 0.14 );
--ap-tint: rgb( 255 255 255 / 0.72 );
--ap-fill-quaternary: rgb( 120 120 128 / 0.08 );
--ap-fill-tertiary: rgb( 120 120 128 / 0.12 );
--ap-scrollbar: rgb( 0 0 0 / 0.2 );
--ap-scrollbar-hover: rgb( 0 0 0 / 0.35 );
--ap-accent: #0071e3;
--ap-accent-hover: #0077ed;
--ap-radius-card: 18px;
--ap-radius-panel: 22px;
--ap-ease: cubic-bezier( 0.4, 0, 0.2, 1 );
--ap-ease-out: cubic-bezier( 0.16, 1, 0.3, 1 );
/* 留白节奏 (8pt 网格 × 苹果的宽松倍率) */
--ap-space-1: 0.5rem;
--ap-space-2: 1rem;
--ap-space-3: 1.5rem;
--ap-space-4: 2rem;
--ap-space-5: 3rem;
--ap-space-6: 4.5rem;
--ap-space-7: 6.5rem;
}
/* --- 暗色: 三种选择器都要覆盖 --- */
.skin-theme-clientpref-night,
.skin-theme-clientpref-black {
--color-progressive-oklch__l: 62.43%;
--color-progressive-oklch__c: 0.2056;
--color-progressive-oklch__h: 255.49;
--color-progressive-hsl__h: 211;
--color-progressive-hsl__s: 100%;
--color-progressive-hsl__l: 52%;
--color-surface-0-oklch__l: 12%;
--color-surface-0-oklch__c: 0.004;
--color-surface-0-oklch__h: 286;
--color-surface-0-hsl__h: 240;
--color-surface-0-hsl__s: 8%;
--color-surface-0-hsl__l: 7%;
--delta-lightness-surface-base: 2.8%;
--color-emphasized-oklch__l: 97%;
--color-emphasized-oklch__c: 0.003;
--color-base-oklch__l: 90%;
--color-base-oklch__c: 0.004;
--color-subtle-oklch__l: 68%;
--color-subtle-oklch__c: 0.008;
--color-placeholder-oklch__l: 58%;
--color-disabled-oklch__l: 45%;
--border-color-base: rgb( 255 255 255 / 0.11 );
--shadow-opacity: 0.5;
--box-shadow-small: 0 1px 2px rgb( 0 0 0 / 0.4 );
--box-shadow-medium: 0 4px 14px rgb( 0 0 0 / 0.45 );
--box-shadow-large: 0 20px 44px rgb( 0 0 0 / 0.55 );
--ap-hairline: rgb( 255 255 255 / 0.11 );
--ap-hairline-strong: rgb( 255 255 255 / 0.18 );
--ap-tint: rgb( 30 30 32 / 0.72 );
--ap-fill-quaternary: rgb( 118 118 128 / 0.18 );
--ap-fill-tertiary: rgb( 118 118 128 / 0.24 );
--ap-scrollbar: rgb( 255 255 255 / 0.22 );
--ap-scrollbar-hover: rgb( 255 255 255 / 0.38 );
--ap-accent: #0a84ff;
--ap-accent-hover: #409cff;
}
@media ( prefers-color-scheme: dark ) {
.skin-theme-clientpref-os {
--color-progressive-oklch__l: 62.43%;
--color-progressive-oklch__c: 0.2056;
--color-progressive-oklch__h: 255.49;
--color-progressive-hsl__h: 211;
--color-progressive-hsl__s: 100%;
--color-progressive-hsl__l: 52%;
--color-surface-0-oklch__l: 12%;
--color-surface-0-oklch__c: 0.004;
--color-surface-0-oklch__h: 286;
--color-surface-0-hsl__h: 240;
--color-surface-0-hsl__s: 8%;
--color-surface-0-hsl__l: 7%;
--delta-lightness-surface-base: 2.8%;
--color-emphasized-oklch__l: 97%;
--color-emphasized-oklch__c: 0.003;
--color-base-oklch__l: 90%;
--color-base-oklch__c: 0.004;
--color-subtle-oklch__l: 68%;
--color-subtle-oklch__c: 0.008;
--color-placeholder-oklch__l: 58%;
--color-disabled-oklch__l: 45%;
--border-color-base: rgb( 255 255 255 / 0.11 );
--shadow-opacity: 0.5;
--box-shadow-small: 0 1px 2px rgb( 0 0 0 / 0.4 );
--box-shadow-medium: 0 4px 14px rgb( 0 0 0 / 0.45 );
--box-shadow-large: 0 20px 44px rgb( 0 0 0 / 0.55 );
--ap-hairline: rgb( 255 255 255 / 0.11 );
--ap-hairline-strong: rgb( 255 255 255 / 0.18 );
--ap-tint: rgb( 30 30 32 / 0.72 );
--ap-fill-quaternary: rgb( 118 118 128 / 0.18 );
--ap-fill-tertiary: rgb( 118 118 128 / 0.24 );
--ap-scrollbar: rgb( 255 255 255 / 0.22 );
--ap-scrollbar-hover: rgb( 255 255 255 / 0.38 );
--ap-accent: #0a84ff;
--ap-accent-hover: #409cff;
}
}
/* ============================================================
2. 字体栈与渲染
============================================================ */
:root {
--font-family-citizen-base: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'SF Pro Display', 'Helvetica Neue', 'Segoe UI Variable Text', 'Segoe UI', Inter;
--font-family-citizen-serif: 'New York', 'Iowan Old Style', 'Source Serif Pro', Georgia;
--font-family-citizen-monospace: 'SF Mono', ui-monospace, Menlo, 'Cascadia Code', 'JetBrains Mono', Consolas;
--font-family-language-base: 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei UI', 'Microsoft YaHei';
--font-family-language-serif: 'Songti SC', 'Source Han Serif SC', 'Noto Serif CJK SC', SimSun;
--font-family-language-monospace: 'PingFang SC', 'Microsoft YaHei UI';
--font-size-medium: 1.0625rem;
--line-height-content: 1.55;
--font-weight-semi-bold: 590;
--font-weight-bold: 680;
}
html {
-webkit-text-size-adjust: 100%;
}
body {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
font-synthesis-weight: none;
letter-spacing: normal;
}
/* ============================================================
3. 排版 — SF 的光学字距对照表
拉丁文字号越大字距越负; 中文一律 normal (负字距会让汉字粘连)
============================================================ */
.mw-body-content,
.citizen-body {
font-size: var( --font-size-medium );
line-height: 1.55;
}
.mw-parser-output p {
margin: 0 0 1.05em;
text-wrap: pretty;
max-width: 74ch;
}
h1,
h2,
h3,
h4,
h5,
h6,
.citizen-page-heading,
.mw-headline {
font-family: var( --font-family-citizen-base ), var( --font-family-language-base ), system-ui, sans-serif;
font-weight: 600;
line-height: 1.1;
text-wrap: balance;
color: var( --color-emphasized );
}
.citizen-page-heading,
h1 {
font-size: clamp( 2rem, 1.35rem + 2.2vw, 2.75rem );
letter-spacing: -0.021em;
line-height: 1.08;
}
.mw-parser-output h2 {
font-size: clamp( 1.5rem, 1.2rem + 1vw, 1.875rem );
letter-spacing: -0.02em;
margin: 2.6em 0 0.62em;
padding-bottom: 0;
border-bottom: 0;
line-height: 1.14;
}
.mw-parser-output h3 {
font-size: 1.3125rem;
letter-spacing: -0.016em;
margin: 2em 0 0.55em;
line-height: 1.2;
}
.mw-parser-output h4 {
font-size: 1.125rem;
letter-spacing: -0.014em;
margin: 1.7em 0 0.5em;
}
.mw-parser-output h5,
.mw-parser-output h6 {
font-size: 1rem;
letter-spacing: -0.01em;
margin: 1.5em 0 0.45em;
color: var( --color-subtle );
}
/* 第一个标题不要多余的上边距 */
.mw-parser-output > h2:first-child,
.mw-parser-output > h3:first-child {
margin-top: 0;
}
/* 中文: 关闭负字距, 放宽行高 */
html:lang( zh ) body,
html:lang( zh-cn ) body,
html:lang( zh-hans ) body,
html:lang( ja ) body,
html:lang( ko ) body {
letter-spacing: normal;
}
html:lang( zh ) h1,
html:lang( zh ) h2,
html:lang( zh ) h3,
html:lang( zh ) h4,
html:lang( zh ) h5,
html:lang( zh ) h6,
html:lang( zh ) .citizen-page-heading,
html:lang( zh-cn ) h1,
html:lang( zh-cn ) h2,
html:lang( zh-cn ) h3,
html:lang( zh-cn ) .citizen-page-heading,
html:lang( zh-hans ) h1,
html:lang( zh-hans ) h2,
html:lang( zh-hans ) h3,
html:lang( zh-hans ) .citizen-page-heading {
letter-spacing: -0.003em;
}
html:lang( zh ) .mw-parser-output p,
html:lang( zh ) .mw-parser-output li,
html:lang( zh-cn ) .mw-parser-output p,
html:lang( zh-hans ) .mw-parser-output p {
line-height: 1.75;
max-width: 40em;
}
/* 强调与小字 */
strong,
b {
font-weight: 600;
color: var( --color-emphasized );
}
small,
.citizen-footer__desc,
.citizen-siteStats__label {
font-size: 0.75rem;
letter-spacing: -0.005em;
}
/* ============================================================
4. 链接
============================================================ */
.mw-parser-output a:not( .image ):not( .cdx-button ) {
color: var( --ap-accent );
text-decoration: none;
transition: color 0.15s var( --ap-ease );
}
.mw-parser-output a:not( .image ):not( .cdx-button ):hover {
color: var( --ap-accent-hover );
text-decoration: underline;
text-underline-offset: 0.2em;
text-decoration-thickness: 0.06em;
}
.mw-parser-output a.new,
.mw-parser-output a.new:hover {
color: #d93025;
}
/* ============================================================
5. 材质与形状 — 顶栏 / 侧栏 / 浮层
============================================================ */
.citizen-header,
.citizen-sticky-header {
background-color: var( --ap-tint );
-webkit-backdrop-filter: saturate( 180% ) blur( 20px );
backdrop-filter: saturate( 180% ) blur( 20px );
border-color: var( --ap-hairline );
box-shadow: none;
}
.citizen-header__inner {
border-bottom: 1px solid var( --ap-hairline );
}
.citizen-drawer__card,
.citizen-menu__card,
.citizen-search__card,
.citizen-search-box__card,
.citizen-dropdown .citizen-menu__card,
.citizen-share-dialog {
border-radius: var( --ap-radius-panel );
border: 1px solid var( --ap-hairline );
box-shadow: var( --box-shadow-large );
background-color: var( --color-surface-1 );
-webkit-backdrop-filter: saturate( 180% ) blur( 24px );
backdrop-filter: saturate( 180% ) blur( 24px );
overflow: hidden;
}
.citizen-menu__content-list a,
.citizen-drawer__menu a {
border-radius: 8px;
transition: background-color 0.14s var( --ap-ease );
}
.citizen-menu__heading {
font-size: 0.6875rem;
font-weight: 600;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var( --color-placeholder );
}
/* ============================================================
6. 按钮 — 药丸 + 按压回弹
============================================================ */
.cdx-button,
.citizen-cdx-button--size-large,
.mw-ui-button {
border-radius: var( --border-radius-pill );
font-weight: 500;
letter-spacing: -0.012em;
border-color: var( --ap-hairline-strong );
transition: background-color 0.16s var( --ap-ease ), transform 0.12s var( --ap-ease ), box-shadow 0.16s var( --ap-ease );
}
.cdx-button:active,
.mw-ui-button:active,
.citizen-cdx-button--size-large:active {
transform: scale( 0.96 );
}
.cdx-button--weight-primary,
.cdx-button--action-progressive.cdx-button--weight-primary {
background-color: var( --ap-accent );
border-color: transparent;
color: #fff;
box-shadow: none;
}
.cdx-button--weight-primary:hover {
background-color: var( --ap-accent-hover );
}
.cdx-button--icon-only {
border-radius: var( --border-radius-circle );
}
.citizen-page-actions__item .cdx-button,
.citizen-header__item .cdx-button {
border-color: transparent;
}
/* ============================================================
7. 搜索框 — 胶囊 + 内嵌填充
============================================================ */
.citizen-search__form,
.citizen-search-box__form,
.citizen-search__input,
#searchInput {
border-radius: var( --border-radius-pill );
background-color: var( --ap-fill-quaternary );
border-color: transparent;
transition: background-color 0.18s var( --ap-ease ), box-shadow 0.18s var( --ap-ease );
}
.citizen-search__form:focus-within,
.citizen-search-box__form:focus-within {
background-color: var( --color-surface-0 );
box-shadow: 0 0 0 3.5px rgb( 0 113 227 / 0.25 ), var( --box-shadow-medium );
}
/* ============================================================
8. 内容组件
============================================================ */
.mw-parser-output table.wikitable {
border-radius: 14px;
border: 1px solid var( --ap-hairline );
border-collapse: separate;
border-spacing: 0;
overflow: hidden;
font-size: 0.9375rem;
box-shadow: none;
}
.mw-parser-output table.wikitable > * > tr > th,
.mw-parser-output table.wikitable > * > tr > td {
border: 0;
border-bottom: 1px solid var( --ap-hairline );
padding: 0.7rem 1rem;
}
.mw-parser-output table.wikitable > * > tr:last-child > td {
border-bottom: 0;
}
.mw-parser-output table.wikitable > * > tr > th {
background-color: var( --color-surface-2 );
font-weight: 600;
letter-spacing: -0.008em;
}
.mw-parser-output pre,
.mw-parser-output code,
.mw-highlight pre {
font-family: var( --font-family-citizen-monospace ), monospace;
font-size: 0.875em;
}
.mw-parser-output pre,
.mw-highlight pre {
border-radius: 12px;
border: 1px solid var( --ap-hairline );
background-color: var( --color-surface-1 );
padding: 1rem 1.15rem;
line-height: 1.55;
}
.mw-parser-output code {
border-radius: 6px;
padding: 0.12em 0.38em;
background-color: var( --ap-fill-quaternary );
border: 0;
}
.mw-parser-output blockquote {
border-left: 3px solid var( --ap-accent );
border-radius: 0 10px 10px 0;
background-color: var( --color-surface-1 );
padding: 0.9rem 1.25rem;
margin: 1.6em 0;
font-size: 1.0625rem;
}
.mw-parser-output hr {
border: 0;
border-top: 1px solid var( --ap-hairline );
margin: var( --ap-space-5 ) 0;
}
.mw-parser-output img,
.mw-parser-output .thumbimage {
border-radius: 12px;
border: 0;
}
.mw-parser-output .thumb .thumbinner {
border-radius: 14px;
border: 1px solid var( --ap-hairline );
background-color: var( --color-surface-1 );
padding: 8px;
}
/* ============================================================
9. 页面框架 / 页脚 / 目录
============================================================ */
.citizen-page-header {
padding-bottom: var( --ap-space-2 );
}
.citizen-page-heading {
margin-bottom: 0.25rem;
}
.citizen-toc .citizen-menu__content-list a {
letter-spacing: -0.008em;
font-size: 0.875rem;
}
.citizen-footer {
border-top: 1px solid var( --ap-hairline );
background-color: var( --color-surface-1 );
}
.citizen-footer__content,
.citizen-footer__bottom {
font-size: 0.75rem;
color: var( --color-subtle );
letter-spacing: -0.004em;
}
.citizen-siteStats__item {
border-radius: 12px;
background-color: var( --ap-fill-quaternary );
border: 0;
}
/* ============================================================
10. 首页 — 苹果发布页式分段布局
============================================================ */
.kuke-hero {
text-align: center;
padding: var( --ap-space-7 ) var( --ap-space-2 ) var( --ap-space-6 );
margin-bottom: var( --ap-space-4 );
}
.kuke-hero__title {
font-size: clamp( 2.75rem, 1.6rem + 5.2vw, 5rem );
font-weight: 640;
line-height: 1.05;
letter-spacing: -0.018em;
margin: 0 0 var( --ap-space-2 );
text-wrap: balance;
background-image: linear-gradient( 180deg, var( --color-emphasized ) 0%, var( --color-subtle ) 165% );
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.kuke-hero__sub {
font-size: clamp( 1.0625rem, 0.9rem + 0.7vw, 1.5rem );
line-height: 1.42;
font-weight: 400;
color: var( --color-subtle );
max-width: 34em;
margin: 0 auto var( --ap-space-4 ) !important;
letter-spacing: 0;
}
.kuke-cta {
display: inline-block;
padding: 0.72em 1.75em;
border-radius: var( --border-radius-pill );
background-color: var( --ap-accent );
color: #fff !important;
font-size: 1.0625rem;
font-weight: 500;
letter-spacing: -0.01em;
text-decoration: none !important;
margin: 0 0.35rem 0.6rem;
transition: background-color 0.16s var( --ap-ease ), transform 0.12s var( --ap-ease );
}
.kuke-cta:hover {
background-color: var( --ap-accent-hover );
color: #fff !important;
}
.kuke-cta:active {
transform: scale( 0.96 );
}
.kuke-cta--ghost {
background-color: transparent;
color: var( --ap-accent ) !important;
box-shadow: inset 0 0 0 1px var( --ap-accent );
}
.kuke-cta--ghost:hover {
background-color: rgb( 0 113 227 / 0.08 );
color: var( --ap-accent ) !important;
}
.kuke-section {
padding: var( --ap-space-6 ) 0;
border-top: 1px solid var( --ap-hairline );
}
.kuke-section__title {
font-size: clamp( 1.75rem, 1.3rem + 1.8vw, 2.5rem ) !important;
font-weight: 620 !important;
letter-spacing: -0.018em;
text-align: center;
margin: 0 0 0.5em !important;
border: 0 !important;
padding: 0 !important;
text-wrap: balance;
}
.kuke-section__lead {
text-align: center;
color: var( --color-subtle );
font-size: 1.0625rem;
max-width: 36em;
margin: 0 auto var( --ap-space-4 ) !important;
}
.kuke-grid {
display: grid;
grid-template-columns: repeat( auto-fit, minmax( 260px, 1fr ) );
gap: var( --ap-space-2 );
margin: 0;
padding: 0;
list-style: none;
}
.kuke-card {
display: block;
padding: var( --ap-space-3 );
border-radius: var( --ap-radius-card );
background-color: var( --color-surface-1 );
border: 1px solid var( --ap-hairline );
box-shadow: none;
transition: transform 0.32s var( --ap-ease-out ), box-shadow 0.32s var( --ap-ease-out ), background-color 0.2s var( --ap-ease );
}
.kuke-card:hover {
transform: translateY( -4px );
box-shadow: var( --box-shadow-large );
}
.kuke-card__icon {
font-size: 1.75rem;
line-height: 1;
display: block;
margin-bottom: 0.75rem;
}
.kuke-card__title {
font-size: 1.1875rem !important;
font-weight: 600 !important;
letter-spacing: -0.014em;
margin: 0 0 0.4rem !important;
border: 0 !important;
padding: 0 !important;
color: var( --color-emphasized );
}
.kuke-card__text {
font-size: 0.9375rem !important;
line-height: 1.5 !important;
color: var( --color-subtle );
margin: 0 !important;
max-width: none !important;
}
.kuke-stats {
display: grid;
grid-template-columns: repeat( auto-fit, minmax( 150px, 1fr ) );
gap: var( --ap-space-2 );
text-align: center;
margin: 0;
padding: 0;
list-style: none;
}
.kuke-stat__num {
display: block;
font-size: clamp( 2rem, 1.5rem + 2vw, 3rem );
font-weight: 620;
letter-spacing: -0.022em;
line-height: 1;
color: var( --ap-accent );
}
.kuke-stat__label {
display: block;
margin-top: 0.4rem;
font-size: 0.8125rem;
color: var( --color-subtle );
}
/* ============================================================
11. 滚动条 / 选中 / 焦点环
============================================================ */
* {
scrollbar-width: thin;
scrollbar-color: var( --ap-scrollbar ) transparent;
}
::-webkit-scrollbar {
width: 9px;
height: 9px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background-color: var( --ap-scrollbar );
border-radius: 980px;
border: 2px solid transparent;
background-clip: content-box;
}
::-webkit-scrollbar-thumb:hover {
background-color: var( --ap-scrollbar-hover );
}
::selection {
background-color: rgb( 0 113 227 / 0.24 );
}
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
summary:focus-visible,
.cdx-button:focus-visible {
outline: 2px solid var( --ap-accent );
outline-offset: 2px;
border-radius: 8px;
}
/* ============================================================
12. 系统偏好
============================================================ */
@media ( prefers-reduced-motion: reduce ) {
.kuke-card,
.kuke-cta,
.cdx-button {
transition: none;
}
.kuke-card:hover {
transform: none;
}
}
@media ( max-width: 720px ) {
.kuke-hero {
padding: var( --ap-space-5 ) var( --ap-space-1 ) var( --ap-space-4 );
}
.kuke-section {
padding: var( --ap-space-5 ) 0;
}
}