Files
fj/style.css
T
selfreleaseandDevin 42d5606ab5 feat: 配乐改用即梦生成音频文件,双曲目可选
- 新增 bgm/ 目录:bell.m4a(晨钟)/ valley.m4a(空山),96k AAC
- 配乐开关升级为曲 select(关/晨钟/空山),移动端走底部面板
- Web Audio 合成引擎整体移除,改 <audio> 循环 + 手动淡入淡出
- 目标音量 0.25,压在人声之下;旧布尔偏好迁移为"晨钟"
- deploy.sh 同步 bgm/ 目录;run.md 同步说明

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-05 12:19:52 +08:00

717 lines
22 KiB
CSS
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ===== 基础与配色 ===== */
:root {
--paper: #f6f1e6;
--paper-deep: #efe6d3;
--ink: #2b2620;
--ink-soft: #5c5347;
--cinnabar: #9e2b25;
--cinnabar-deep: #7c1f1a;
--gold: #b08a4f;
--gold-soft: #d3b98a;
--hairline: rgba(94, 72, 45, 0.22);
--radius: 10px;
--shadow: 0 10px 30px rgba(73, 48, 24, 0.12);
font-size: 16px;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html, body { height: 100%; }
body {
font-family: "Songti SC", "STSong", "Noto Serif SC", "Noto Serif CJK SC", "SimSun", serif;
color: var(--ink);
background:
radial-gradient(1200px 600px at 50% -8%, rgba(158, 43, 37, 0.07), transparent 60%),
radial-gradient(900px 500px at 85% 110%, rgba(176, 138, 79, 0.10), transparent 55%),
repeating-linear-gradient(0deg, transparent 0 26px, rgba(94, 72, 45, 0.025) 26px 27px),
var(--paper);
line-height: 1.6;
display: flex;
flex-direction: column;
overflow: hidden; /* 一屏内显示,页面本身不滚动 */
}
/* ===== 左上角品牌 Logo ===== */
.site-logo {
position: fixed;
top: 16px;
left: 26px;
z-index: 30;
display: flex;
align-items: center;
gap: 10px;
user-select: none;
}
.logo-mark {
width: 32px;
height: 32px;
border-radius: 6px;
box-shadow: 0 3px 10px rgba(158, 43, 37, 0.3);
}
.logo-text {
font-size: 0.85rem;
font-weight: 700;
letter-spacing: 0.35em;
color: var(--cinnabar);
}
/* ===== 主体:铺满全宽、撑满剩余高度 ===== */
.page {
flex: 1;
min-height: 0;
width: 100%;
padding: 22px 40px 26px;
display: flex;
flex-direction: column;
gap: 16px;
}
.hero {
flex: none;
display: flex;
align-items: center;
justify-content: center;
gap: 26px;
}
.seal {
width: 56px;
height: 56px;
flex: none;
display: grid;
place-items: center;
background: linear-gradient(145deg, var(--cinnabar), var(--cinnabar-deep));
color: #fdf8ee;
font-size: 1.25rem;
font-weight: 700;
letter-spacing: 0.1em;
writing-mode: vertical-rl;
border-radius: 6px;
box-shadow: var(--shadow), inset 0 0 0 3px rgba(253, 248, 238, 0.35);
transform: rotate(-3deg);
user-select: none;
}
/* 3 字及以上:改长条形印章,避免文字挤出 */
.seal[data-chars="3"] {
height: 84px;
font-size: 1.05rem;
letter-spacing: 0.05em;
}
.seal[data-chars="4"],
.seal[data-chars="5"] {
height: 96px;
font-size: 0.9rem;
letter-spacing: 0.02em;
}
.sutra-title {
font-size: clamp(1.7rem, 3.2vw, 2.5rem);
letter-spacing: 0.28em;
font-weight: 700;
white-space: nowrap;
}
.subtitle {
margin-top: 6px;
text-align: center;
color: var(--ink-soft);
letter-spacing: 0.5em;
text-indent: 0.5em;
font-size: 0.9rem;
}
/* ===== 卡片面板 ===== */
.panel {
background: rgba(255, 252, 245, 0.78);
border: 1px solid var(--hairline);
border-radius: var(--radius);
box-shadow: var(--shadow);
}
/* ===== 播放控制栏(一行放下全部控件) ===== */
.player-card { flex: none; padding: 14px 22px 12px; }
.player-row {
display: flex;
align-items: center;
gap: 20px;
flex-wrap: wrap;
}
.btn-play {
width: 52px;
height: 52px;
flex: none;
border: none;
border-radius: 50%;
cursor: pointer;
display: grid;
place-items: center;
color: #fdf8ee;
background: linear-gradient(145deg, var(--cinnabar), var(--cinnabar-deep));
box-shadow: 0 6px 16px rgba(158, 43, 37, 0.35);
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.btn-play:hover { transform: scale(1.05); box-shadow: 0 8px 20px rgba(158, 43, 37, 0.45); }
.btn-play:active { transform: scale(0.97); }
.btn-play:focus-visible { outline: 3px solid var(--gold); outline-offset: 3px; }
.btn-play .icon { width: 24px; height: 24px; fill: currentColor; }
.btn-play .icon-stop { display: none; }
.btn-play.playing .icon-play { display: none; }
.btn-play.playing .icon-stop { display: block; }
/* 音频准备中:按钮轻微呼吸脉冲,提示正在合成/合并 */
.btn-play.preparing { cursor: wait; animation: preparing-pulse 1.3s ease-in-out infinite; }
@keyframes preparing-pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.55; }
}
.player-meta { display: flex; align-items: center; gap: 12px; }
.voice-label { font-size: 0.85rem; color: var(--ink-soft); letter-spacing: 0.2em; white-space: nowrap; }
#voice-select {
appearance: none;
font-family: inherit;
font-size: 0.92rem;
color: var(--ink);
background:
linear-gradient(45deg, transparent 50%, var(--gold) 50%) right 14px center / 7px 7px no-repeat,
linear-gradient(135deg, var(--gold) 50%, transparent 50%) right 9px center / 7px 7px no-repeat,
rgba(255, 255, 255, 0.7);
border: 1px solid var(--hairline);
border-radius: 8px;
padding: 8px 34px 8px 12px;
cursor: pointer;
min-width: 220px;
}
#voice-select:focus-visible { outline: 3px solid var(--gold-soft); outline-offset: 1px; }
#timer-select,
#rate-select,
#bgm-select,
#sutra-select {
appearance: none;
font-family: inherit;
font-size: 0.86rem;
color: var(--ink-soft);
letter-spacing: 0.08em;
background:
linear-gradient(45deg, transparent 50%, var(--gold) 50%) right 12px center / 6px 6px no-repeat,
linear-gradient(135deg, var(--gold) 50%, transparent 50%) right 8px center / 6px 6px no-repeat,
transparent;
border: 1px solid var(--hairline);
border-radius: 6px;
padding: 6px 26px 6px 10px;
cursor: pointer;
}
#timer-select:focus-visible, #rate-select:focus-visible, #bgm-select:focus-visible, #sutra-select:focus-visible { outline: 3px solid var(--gold-soft); outline-offset: 1px; }
#sutra-select { color: var(--ink); font-size: 0.9rem; }
/* ===== 字号 / 排版工具(并入控制栏) ===== */
.tool-group { display: flex; align-items: center; gap: 8px; }
.field-pair { display: flex; align-items: center; gap: 8px; }
.tool-name { font-size: 0.8rem; color: var(--ink-soft); letter-spacing: 0.2em; }
.size-btn, .layout-btn, .sutra-btn, .pager-btn {
font-family: inherit;
border: 1px solid var(--hairline);
background: transparent;
color: var(--ink-soft);
border-radius: 6px;
cursor: pointer;
transition: all 0.15s ease;
}
.size-btn { width: 36px; height: 32px; font-size: 0.88rem; }
.layout-btn, .sutra-btn, .pager-btn { padding: 6px 14px; font-size: 0.86rem; letter-spacing: 0.1em; }
.size-btn:hover, .layout-btn:hover, .sutra-btn:hover, .pager-btn:hover { border-color: var(--gold); color: var(--ink); }
.size-btn.active, .layout-btn.active, .sutra-btn.active {
background: var(--cinnabar);
border-color: var(--cinnabar);
color: #fdf8ee;
}
.size-btn:focus-visible, .layout-btn:focus-visible, .sutra-btn:focus-visible, .pager-btn:focus-visible {
outline: 3px solid var(--gold-soft);
outline-offset: 1px;
}
.pager-btn:disabled { opacity: 0.4; cursor: default; }
.pager-btn:disabled:hover { border-color: var(--hairline); color: var(--ink-soft); }
.status {
flex: 1;
min-width: 180px;
text-align: right;
font-size: 0.84rem;
color: var(--ink-soft);
letter-spacing: 0.05em;
}
.status.error { color: var(--cinnabar); }
/* 移动端强制换行占位 / 折叠按钮 / 文字标签 / 底部选择器按钮(桌面端隐藏) */
.flex-break { display: none; }
.expand-btn { display: none; }
.play-label, .expand-label { display: none; }
.sheet-btn { display: none; }
/* 定时剩余时间胶囊(仅移动端定时激活时显示,桌面端看状态栏) */
.sleep-remaining { display: none; }
.progress {
display: flex;
gap: 5px;
margin-top: 12px;
}
.progress .dot {
flex: 1;
height: 4px;
border-radius: 2px;
background: rgba(94, 72, 45, 0.15);
transition: background 0.3s ease;
cursor: pointer; /* 点击跳到对应段开始诵读 */
}
.progress .dot.done { background: var(--gold); }
.progress .dot.now { background: var(--cinnabar); }
/* ===== 经文纸面:撑满剩余高度 ===== */
.sutra-paper {
flex: 1;
min-height: 0;
background:
radial-gradient(800px 400px at 50% 0%, rgba(176, 138, 79, 0.06), transparent 60%),
#fdfaf2;
border: 1px solid var(--hairline);
border-radius: var(--radius);
box-shadow: var(--shadow);
padding: clamp(20px, 3vh, 44px) clamp(28px, 4vw, 72px);
position: relative;
display: flex;
justify-content: center;
}
.sutra-paper::before,
.sutra-paper::after {
content: "";
position: absolute;
inset: 10px;
border: 1px solid rgba(176, 138, 79, 0.28);
border-radius: 6px;
pointer-events: none;
}
.sutra-paper::after { inset: 14px; border-color: rgba(176, 138, 79, 0.14); }
/* 横排:多栏铺满整宽,整体垂直居中 */
.sutra {
flex: 1;
min-width: 0;
align-self: center;
max-height: 100%;
overflow: auto;
text-align: justify;
letter-spacing: 0.12em;
column-width: 22em;
column-gap: 3.5em;
column-fill: balance;
column-rule: 1px solid rgba(176, 138, 79, 0.18);
scrollbar-width: thin;
}
.sutra.size-sm { font-size: 1.05rem; line-height: 2; }
.sutra.size-md { font-size: 1.3rem; line-height: 2.05; }
.sutra.size-lg { font-size: 1.55rem; line-height: 2.1; }
/* 品名标题:横排为居中标题块 */
.chap {
text-align: center;
font-size: 0.92em;
font-weight: 700;
letter-spacing: 0.35em;
color: var(--cinnabar);
padding: 0.4em 0 0.35em;
break-after: avoid; /* 标题不与正文分列 */
}
.chap-gloss {
display: inline-block;
margin-inline-start: 0.8em;
font-weight: 400;
font-size: 0.78em;
letter-spacing: 0.15em;
color: var(--gold);
}
.seg {
display: block;
cursor: pointer;
border-radius: 4px;
padding: 2px 4px;
margin-bottom: 0.45em;
transition: background 0.25s ease, color 0.25s ease;
}
.seg:hover { background: rgba(176, 138, 79, 0.14); }
/* 诵读中高亮:朱砂底纹 + 左侧竖条 + 下划线,长文中一眼定位 */
.seg.playing {
background: rgba(158, 43, 37, 0.12);
color: var(--cinnabar-deep);
box-shadow:
inset 3px 0 0 var(--cinnabar),
inset 0 -1px 0 var(--cinnabar);
padding-left: 8px;
}
.seg.done { color: var(--ink-soft); }
/* 逐字光标:当前段内未读字变淡、已读字回朱砂色、光标字挂金线下划 */
.seg.playing .ch { color: rgba(92, 83, 71, 0.5); transition: color 0.15s ease; }
.seg.playing .ch.read { color: var(--cinnabar-deep); }
.seg.playing .ch.cur {
color: var(--cinnabar);
box-shadow: inset 0 -2px 0 var(--gold);
}
body.night .seg.playing .ch { color: rgba(176, 160, 132, 0.55); }
body.night .seg.playing .ch.read { color: #f0c9c2; }
/* 竖排:从右往左逐列铺满整宽 */
.sutra.vertical {
writing-mode: vertical-rl;
flex: 0 0 auto;
width: auto;
align-self: stretch;
height: 100%;
text-align: left;
column-width: auto;
column-rule: none;
overflow-x: auto;
overflow-y: hidden;
letter-spacing: 0.22em;
}
.sutra.vertical .seg.playing { box-shadow: inset 0 3px 0 var(--cinnabar), inset 2px 0 0 var(--cinnabar); padding-left: 1px; }
/* "回到诵读处"浮动胶囊:当前段滚出视野时出现 */
.jump-now {
position: absolute;
right: 16px;
bottom: 16px;
z-index: 10;
font-family: inherit;
font-size: 0.78rem;
letter-spacing: 0.12em;
color: var(--cinnabar);
background: rgba(255, 252, 245, 0.95);
border: 1px solid var(--gold);
border-radius: 18px;
padding: 8px 14px;
cursor: pointer;
box-shadow: var(--shadow);
transition: transform 0.15s ease;
}
.jump-now:active { transform: scale(0.96); }
.jump-now[hidden] { display: none; }
body.night .jump-now { background: rgba(43, 36, 27, 0.92); }
/* 竖排:品名与正文恢复内联流式排布 */
.sutra.vertical .chap {
display: inline;
padding: 0;
}
.sutra.vertical .chap-name::after { content: " "; }
.sutra.vertical .chap-gloss { display: none; }
.sutra.vertical .seg { display: inline; margin: 0; padding: 0 1px; }
/* ===== 分页条 ===== */
.pager {
flex: none;
display: flex;
align-items: center;
justify-content: center;
gap: 18px;
}
.pager[hidden] { display: none; }
.page-info {
font-size: 0.85rem;
color: var(--ink-soft);
letter-spacing: 0.15em;
min-width: 96px;
text-align: center;
}
/* ===== 页脚 ===== */
.site-footer {
flex: none;
border-top: 1px solid var(--hairline);
padding: 10px 32px 12px;
text-align: center;
font-size: 0.78rem;
color: var(--ink-soft);
}
.site-footer a { color: var(--cinnabar); text-decoration: none; border-bottom: 1px solid var(--gold-soft); }
.site-footer a:hover { color: var(--cinnabar-deep); }
/* ===== 响应式 ===== */
@media (max-width: 900px) {
.page { padding: 16px 20px 20px; }
.status { text-align: left; }
}
@media (max-width: 640px) {
/* Logo 与印章重叠,小屏隐藏 */
.site-logo { display: none; }
.page { padding: 12px 12px 14px; gap: 10px; }
.hero { gap: 12px; }
.seal { width: 44px; height: 44px; font-size: 1rem; }
.seal[data-chars="3"] { height: 62px; font-size: 0.9rem; }
.seal[data-chars="4"], .seal[data-chars="5"] { height: 74px; font-size: 0.8rem; }
.sutra-title { font-size: 1.35rem; letter-spacing: 0.12em; }
.subtitle { font-size: 0.78rem; letter-spacing: 0.3em; text-indent: 0.3em; margin-top: 4px; }
/* 控制栏:折叠为一行文字按钮(▶ 播放 长条 + 设置),点"设置"展开全部控件 */
.player-card { padding: 6px 8px; }
.player-row { gap: 6px; }
.btn-play {
order: 1;
flex: 1;
width: auto;
height: 34px;
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
gap: 7px;
font-size: 0.88rem;
letter-spacing: 0.15em;
}
.btn-play .icon { width: 15px; height: 15px; }
.btn-play .play-label { display: inline; }
.player-meta { flex: 1; min-width: 0; order: 2; }
.flex-break { display: block; order: 3; flex-basis: 100%; height: 0; }
.flex-break-2 { order: 6; } /* 展开态第二处换行:经典/字号 与 模式 分两行 */
.tool-group { gap: 6px; }
/* 经典下拉(field-pair 结构)与字号同行展开 */
.player-row > .field-pair { order: 4; flex: 1; min-width: 0; }
.player-row > .field-pair .sheet-btn, .player-row > .field-pair select { flex: 1; min-width: 0; }
.tool-group[aria-label="字号"] { order: 5; flex: 1; justify-content: center; }
.tool-group[aria-label="排版"] { order: 6; display: none; } /* 手机端不提供竖排 */
/* 模式组:循环/夜间两个开关等宽一行,配乐/定时/语速三个带标签下拉再占一行 */
.tool-group[aria-label="模式"] { order: 7; flex: 1 1 100%; flex-wrap: wrap; }
.tool-group[aria-label="模式"] .layout-btn { flex: 1 1 46%; text-align: center; }
.tool-group[aria-label="模式"] .field-pair { flex: 1 1 30%; }
.tool-group[aria-label="模式"] select, .tool-group[aria-label="模式"] .field-pair .sheet-btn { flex: 1; min-width: 0; }
.tool-group[aria-label="模式"] .tool-name {
display: flex;
align-items: center;
font-size: 0.68rem;
color: var(--gold);
letter-spacing: 0.06em;
}
.status { display: none; } /* 手机端去掉状态文字,只留经书内容 */
/* 定时剩余胶囊:折叠/展开态均可见,夹在播放与设置之间 */
.sleep-remaining.show {
display: inline-flex;
align-items: center;
order: 2;
flex: none;
height: 34px;
padding: 0 11px;
font-size: 0.75rem;
letter-spacing: 0.06em;
color: var(--cinnabar);
border: 1px solid var(--gold);
border-radius: 6px;
font-variant-numeric: tabular-nums;
}
.player-meta { order: 2; } /* 展开态音色仍排第二位 */
/* 设置:与播放按钮同行的文字按钮 */
.expand-btn {
display: flex;
align-items: center;
justify-content: center;
order: 8;
flex: none;
height: 34px;
padding: 0 14px;
font-family: inherit;
font-size: 0.8rem;
letter-spacing: 0.12em;
color: var(--ink-soft);
background: transparent;
border: 1px solid var(--hairline);
border-radius: 6px;
cursor: pointer;
transition: color 0.15s ease, border-color 0.15s ease;
}
.expand-btn svg { display: none; }
.expand-btn .expand-label { display: inline; }
.expand-btn:hover { border-color: var(--gold); color: var(--ink); }
.expand-btn:focus-visible { outline: 3px solid var(--gold-soft); outline-offset: 1px; }
.expand-btn.open { color: var(--cinnabar); border-color: var(--cinnabar); }
.player-card.expanded .expand-btn { order: 9; flex: 1 1 100%; } /* 展开后"收起"独占一行垫底 */
/* 折叠态:隐藏音色/经典/字号/排版控件与进度条,只留居中的播放按钮 */
.player-card:not(.expanded) .player-meta,
.player-card:not(.expanded) .tool-group,
.player-card:not(.expanded) .field-pair,
.player-card:not(.expanded) .progress,
.player-card:not(.expanded) .flex-break { display: none; }
.player-card:not(.expanded) .player-row { justify-content: center; }
.player-card.expanded { padding-bottom: 8px; }
.voice-label { display: none; }
.tool-name { display: none; } /* 默认隐藏小标签;模式组内定时/语速需要标签才可读 */
#voice-select { min-width: 0; width: 100%; padding: 5px 30px 5px 10px; font-size: 0.82rem; }
/* 触屏控件紧凑化 */
.size-btn { width: 34px; height: 30px; font-size: 0.8rem; }
.layout-btn, .sutra-btn, .pager-btn { padding: 5px 8px; font-size: 0.78rem; min-height: 30px; }
.sutra-paper { padding: 18px 16px; }
.sutra-paper::before { inset: 6px; }
.sutra-paper::after { inset: 9px; }
.sutra { column-width: auto; }
.sutra.size-sm { font-size: 0.95rem; line-height: 1.9; }
.sutra.size-md { font-size: 1.12rem; line-height: 1.95; }
.sutra.size-lg { font-size: 1.32rem; line-height: 2; }
.pager { gap: 12px; }
.page-info { min-width: 0; font-size: 0.8rem; }
.site-footer { padding: 8px 14px; font-size: 0.7rem; }
#timer-select, #rate-select, #bgm-select { min-height: 30px; padding-top: 4px; padding-bottom: 4px; font-size: 0.78rem; }
/* 原生下拉隐藏,改由底部升起面板选择 */
#voice-select, #timer-select, #rate-select, #bgm-select, #sutra-select { display: none; }
.sheet-btn {
display: flex;
align-items: center;
justify-content: space-between;
gap: 6px;
flex: 1;
min-width: 0;
min-height: 30px;
font-family: inherit;
font-size: 0.78rem;
letter-spacing: 0.08em;
color: var(--ink-soft);
background: transparent;
border: 1px solid var(--hairline);
border-radius: 6px;
padding: 5px 10px;
cursor: pointer;
}
.sheet-btn::after {
content: "▾";
flex: none;
font-size: 0.7rem;
color: var(--gold);
}
.sheet-btn-text {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.progress { margin-top: 6px; }
}
/* ===== 夜间模式:暗色宣纸底,整体降明度保留朱砂鎏金气质 ===== */
body.night {
--paper: #211c16;
--paper-deep: #1a1611;
--ink: #e8dcc2;
--ink-soft: #b0a084;
--cinnabar: #c96a5c;
--cinnabar-deep: #a04a3e;
--gold: #b9975f;
--gold-soft: #5f4e30;
--hairline: rgba(190, 158, 105, 0.28);
--shadow: 0 10px 30px rgba(0, 0, 0, 0.45);
background:
radial-gradient(1200px 600px at 50% -8%, rgba(201, 106, 92, 0.06), transparent 60%),
radial-gradient(900px 500px at 85% 110%, rgba(185, 151, 95, 0.08), transparent 55%),
repeating-linear-gradient(0deg, transparent 0 26px, rgba(190, 158, 105, 0.02) 26px 27px),
#211c16;
}
body.night .panel { background: rgba(43, 36, 27, 0.85); }
body.night .sutra-paper {
background:
radial-gradient(800px 400px at 50% 0%, rgba(185, 151, 95, 0.05), transparent 60%),
#292219;
}
body.night .sutra-paper::before { border-color: rgba(185, 151, 95, 0.22); }
body.night .sutra-paper::after { border-color: rgba(185, 151, 95, 0.11); }
body.night #voice-select { background-color: rgba(43, 36, 27, 0.9); color: var(--ink); }
body.night #timer-select, body.night #rate-select, body.night #bgm-select, body.night #sutra-select { background-color: rgba(43, 36, 27, 0.6); }
body.night .progress .dot { background: rgba(190, 158, 105, 0.2); }
body.night .seg:hover { background: rgba(185, 151, 95, 0.12); }
body.night .seg.playing { background: rgba(201, 106, 92, 0.16); color: #f0c9c2; }
/* ===== 底部升起选择面板(移动端) ===== */
.sheet-mask {
position: fixed;
inset: 0;
z-index: 80;
background: rgba(26, 20, 12, 0.45);
opacity: 0;
transition: opacity 0.2s ease;
}
.sheet-mask.open { opacity: 1; }
.sheet-panel {
position: fixed;
left: 0;
right: 0;
bottom: 0;
z-index: 81;
background: var(--paper);
border-radius: 16px 16px 0 0;
box-shadow: 0 -8px 30px rgba(0, 0, 0, 0.18);
padding: 8px 0 max(14px, env(safe-area-inset-bottom));
transform: translateY(105%);
transition: transform 0.26s cubic-bezier(0.2, 0.8, 0.3, 1);
max-height: 62vh;
display: flex;
flex-direction: column;
}
.sheet-panel.open { transform: translateY(0); }
.sheet-grabber {
width: 36px;
height: 4px;
border-radius: 2px;
background: var(--hairline);
margin: 2px auto 8px;
flex: none;
}
.sheet-title {
text-align: center;
font-size: 0.78rem;
color: var(--ink-soft);
letter-spacing: 0.24em;
padding-bottom: 8px;
border-bottom: 1px solid var(--hairline);
flex: none;
}
.sheet-opts { overflow-y: auto; }
.sheet-opt {
padding: 13px 16px;
text-align: center;
font-size: 1rem;
letter-spacing: 0.12em;
color: var(--ink);
border-bottom: 1px solid var(--hairline);
cursor: pointer;
}
.sheet-opt:last-child { border-bottom: none; }
/* 面板内的 optgroup 分组标题(佛经 / 道家) */
.sheet-group {
padding: 10px 16px 4px;
text-align: center;
font-size: 0.72rem;
letter-spacing: 0.3em;
color: var(--gold);
}
.sheet-opt.sel { color: var(--cinnabar); font-weight: 700; }
.sheet-opt:active { background: rgba(176, 138, 79, 0.12); }
.sheet-cancel {
margin: 8px 16px 0;
padding: 11px;
text-align: center;
font-size: 0.85rem;
letter-spacing: 0.2em;
color: var(--ink-soft);
border: 1px solid var(--hairline);
border-radius: 10px;
cursor: pointer;
flex: none;
}
.sheet-cancel:active { background: rgba(176, 138, 79, 0.12); }