perch-design / css /theme.css
hongcoding's picture
feat: Warm Paper 设计系统开源(48 CSS + 令牌 + 实时预览)
f402bb3 verified
Raw History Blame Contribute Delete
7.48 kB
/* Perch · Warm Paper 主题(Claude 式设计语言,详见 docs/design-system.md) */
:root {
--bg: #faf9f5;
--bg-elevated: #f0eee6;
--bg-sunken: #e8e5db;
--border: #e3dfd3;
--text: #1f1e1b;
--text-secondary: #6b6862;
--text-tertiary: #9c988d;
--accent: #d97757;
--accent-soft: #f4e3dc;
--success: #7a9b76;
--warning: #c9a227;
--danger: #c05b4d;
--font-serif: "Source Serif 4", "Songti SC", Georgia, serif;
--font-sans: "Inter", "PingFang SC", system-ui, -apple-system, sans-serif;
--font-mono: "JetBrains Mono", "SF Mono", Menlo, monospace;
--radius-control: 10px;
--radius-card: 14px;
--radius-float: 16px;
--radius-chip: 8px; /* 小按钮/内嵌标签的次级圆角(控件 10px 之下的一档) */
--ease: cubic-bezier(0.2, 0, 0, 1);
--dur: 150ms;
--shadow-float: 0 4px 24px rgba(31, 30, 27, 0.08);
/* 模态遮罩(抽屉/浮层后面的那层暗纱),深浅色各自取值 */
--scrim: rgba(31, 30, 27, 0.28);
/* 浮窗毛玻璃(design-system §7:85% 暖纸底 + 20px 背景模糊) */
--glass: rgba(250, 249, 245, 0.85);
--glass-blur: blur(20px);
}
@media (prefers-color-scheme: dark) {
:root {
--bg: #262521;
--bg-elevated: #2f2e29;
--bg-sunken: #1e1d1a;
--border: #3b3a34;
--text: #edeae0;
--text-secondary: #a8a49a;
--text-tertiary: #79766d;
--accent: #e08a6e;
--accent-soft: #45342d;
--shadow-float: 0 4px 24px rgba(0, 0, 0, 0.35);
--glass: rgba(38, 37, 33, 0.85);
--scrim: rgba(0, 0, 0, 0.4);
}
}
/* 契约 10A 外观:`data-theme` 显式覆盖段(设置里选「浅色/深色」时由 App 挂到
<html> 上)。`system` 不设属性 → 上面的 matchMedia 继续生效;这里的显式段
写在 matchMedia 之后,同特异性下后写者赢,因此能盖过系统偏好。 */
[data-theme="light"] {
--bg: #faf9f5;
--bg-elevated: #f0eee6;
--bg-sunken: #e8e5db;
--border: #e3dfd3;
--text: #1f1e1b;
--text-secondary: #6b6862;
--text-tertiary: #9c988d;
--accent: #d97757;
--accent-soft: #f4e3dc;
--shadow-float: 0 4px 24px rgba(31, 30, 27, 0.08);
--glass: rgba(250, 249, 245, 0.85);
--scrim: rgba(31, 30, 27, 0.28);
}
[data-theme="dark"] {
--bg: #262521;
--bg-elevated: #2f2e29;
--bg-sunken: #1e1d1a;
--border: #3b3a34;
--text: #edeae0;
--text-secondary: #a8a49a;
--text-tertiary: #79766d;
--accent: #e08a6e;
--accent-soft: #45342d;
--shadow-float: 0 4px 24px rgba(0, 0, 0, 0.35);
--glass: rgba(38, 37, 33, 0.85);
--scrim: rgba(0, 0, 0, 0.4);
}
* {
box-sizing: border-box;
}
html,
body,
#root {
height: 100%;
margin: 0;
}
body {
background: var(--bg);
color: var(--text);
font-family: var(--font-sans);
font-size: 14.5px;
line-height: 1.65;
-webkit-font-smoothing: antialiased;
user-select: none;
cursor: default;
}
h1,
h2,
h3 {
font-family: var(--font-serif);
font-weight: 600;
letter-spacing: -0.01em;
line-height: 1.3;
margin: 0;
}
::selection {
background: var(--accent-soft);
}
:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 2px;
}
/* 滚动条:细、暖、低调 */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-thumb {
background: var(--border);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--text-tertiary);
}
@media (prefers-reduced-motion: reduce) {
* {
transition: none !important;
animation: none !important;
}
}
/* ═══════════════════════════════════════════════════════════════════
Gemini 外观(dev-duotheme · 双皮肤)——`[data-style="gemini"]` 覆盖段。
与 `data-theme` 两轴正交(照 dev-tidy 的显式覆盖模式,追加在末尾):
本段每条选择器都要求 data-style="gemini",Warm Paper(无该属性 /
="warm")零影响。段内顺序即层叠顺序:
1) Gemini 浅色默认(data-theme 缺省且系统浅色,或 data-theme="light")
2) 系统深色(media 内 :not([data-theme="light"]),特异性 0,2,0 盖过 1)
3) 显式 data-theme="dark"(与 2 同特异性、写在其后 → 后写者赢;
系统浅色时 2 不命中,由它兜底)
配色取自 Google/Material(见回复《Gemini 风格规范》):白底 +
#dadce0 发丝线 + Google Blue 单主色 + 蓝→紫→粉签名渐变三令牌。
═══════════════════════════════════════════════════════════════ */
/* 1) Gemini 浅色(纯白底 · Material 中性灰阶 · Google Blue) */
[data-style="gemini"] {
--bg: #ffffff;
--bg-elevated: #f8f9fa;
--bg-sunken: #f1f3f4;
--border: #dadce0;
--text: #1f1f1f;
--text-secondary: #5f6368;
--text-tertiary: #80868b;
--accent: #1a73e8;
--accent-hover: #1967d2; /* 按钮 hover:Google Blue 700 */
--accent-soft: #e8f0fe; /* 蓝 50:激活态浅蓝底/选区 */
--success: #188038;
--warning: #e37400;
--danger: #d93025;
/* Gemini 全 sans(「极简」的关键一刀):所有衬线位换 Google Sans 展示栈,
正文同栈换 Text 字身;macOS 无 Google Sans → SF Pro Display/Text 接住。 */
--font-serif: "Google Sans Display", "Google Sans", "SF Pro Display",
-apple-system, BlinkMacSystemFont, "PingFang SC", system-ui, sans-serif;
--font-sans: "Google Sans Text", "Google Sans", "SF Pro Text", -apple-system,
BlinkMacSystemFont, "PingFang SC", system-ui, sans-serif;
/* --font-mono 不动:代码永远等宽 */
/* 签名渐变三令牌(蓝 → 紫 → 珊瑚粉)。使用纪律:只允许
品牌标 / 欢迎页大标题高光 / Ultra 档强调 三处,其余黑白灰 + 单主色。 */
--grad-start: #4285f4;
--grad-mid: #9b72cb;
--grad-end: #d96570;
--radius-card: 16px; /* Material 大圆角档(8/12/16/28);控件/浮层令牌不动 */
--shadow-float: 0 1px 2px rgba(60, 64, 67, 0.1), 0 1px 3px rgba(60, 64, 67, 0.14);
--glass: rgba(255, 255, 255, 0.85);
--scrim: rgba(32, 33, 36, 0.32);
}
/* 2) Gemini 深色(跟随系统:Google dark gray #1e1f20 系) */
@media (prefers-color-scheme: dark) {
[data-style="gemini"]:not([data-theme="light"]) {
--bg: #1e1f20;
--bg-elevated: #282a2c;
--bg-sunken: #131314;
--border: #3c4043;
--text: #e3e3e3;
--text-secondary: #9aa0a6;
--text-tertiary: #80868b;
--accent: #8ab4f8;
--accent-hover: #a8c7fa; /* 深色 hover 走「浅变体」(Google 深色态加亮) */
--accent-soft: #1e3a5f;
--success: #81c995;
--warning: #fdd663;
--danger: #f28b82;
--shadow-float: 0 1px 3px rgba(0, 0, 0, 0.55);
--glass: rgba(30, 31, 32, 0.85);
--scrim: rgba(0, 0, 0, 0.5);
}
}
/* 3) Gemini 显式深色(设置里选「深色」→ data-theme="dark";与 2 同款取值) */
[data-style="gemini"][data-theme="dark"] {
--bg: #1e1f20;
--bg-elevated: #282a2c;
--bg-sunken: #131314;
--border: #3c4043;
--text: #e3e3e3;
--text-secondary: #9aa0a6;
--text-tertiary: #80868b;
--accent: #8ab4f8;
--accent-hover: #a8c7fa;
--accent-soft: #1e3a5f;
--success: #81c995;
--warning: #fdd663;
--danger: #f28b82;
--shadow-float: 0 1px 3px rgba(0, 0, 0, 0.55);
--glass: rgba(30, 31, 32, 0.85);
--scrim: rgba(0, 0, 0, 0.5);
}