Files
ChronicleOfTheImmortalClan/src/renderer/ui/styles.css
T
thzxx 98b60076f0 v0.1.4: 百年定局(终局/大比/寄读/春秋原)
- 望气定鼎:stats 追踪四维(人兴/道兴/威名/香火)+ 十二称号分档 + 铭文诗
  春秋原页预演称号,落印定局(青册留档,不阻继续游历)
- 太虚大比:每五年征召,点将三关(初试/拔擢/问鼎)复用战斗结算,
  名次四档红利(声望/灵石/全场好感),史书战报自动落笔
- 宗门寄读:随机宗门收徒(适龄少年),寄读 2-4 年期间每季寄资源,
  期满三选:归来精进(可触发突破+随机机运)或续读深造;低概率择师不回
- 求经台:藏书阁≥3 解锁,两年一访得稀有功法
- 春秋原复盘页:气数四维图/岁末族簿汇编/生卒与突破年表/大比年表
- 修复:大比征召曾因月份条件错过整年;抢在百年庆典前的优先级倒置
- 测试 161→176(评分边界/称号分档/大比三轨/寄读全链/求经冷却)
2026-08-23 09:00:17 +08:00

1478 lines
33 KiB
CSS

/* ============================================================
仙途家族志 · 水墨中国风主题
墨为底、纸为面、朱砂点睛、泥金饰边
============================================================ */
:root {
--ink-bg: #100d0a;
--ink-bg2: #16120d;
--ink-deep: #0b0906;
--paper: #f2e9d4;
--paper-dim: #e3d6b8;
--paper-dark: #cdbfa0;
--ink: #2a2214;
--ink-soft: #554a35;
--ink-faint: #8b7f66;
--vermilion: #a93b2e;
--vermilion-soft: #c05a41;
--vermilion-bright: #d06a4c;
--gold: #b3913e;
--gold-soft: #c7a44b;
--green: #56704d;
--blue-ink: #4d616e;
font-size: 15px;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html,
body,
#root {
height: 100%;
}
body {
background: var(--ink-bg);
color: var(--paper);
font-family: "STKaiti", "KaiTi", "Kaiti SC", "华文楷体", "楷体", "Noto Serif SC", "Source Han Serif SC", serif;
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.app {
height: 100vh;
display: flex;
flex-direction: column;
}
/* ---------- 纸纹 overlay ---------- */
.paper-tex {
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' seed='7'/><feColorMatrix type='saturate' values='0'/></filter><rect width='160' height='160' filter='url(%23n)' opacity='0.55'/></svg>");
background-blend-mode: multiply;
background-size: 160px 160px;
}
::-webkit-scrollbar {
width: 9px;
height: 9px;
}
::-webkit-scrollbar-thumb {
background: linear-gradient(180deg, #3d3527, #574e3a);
border-radius: 6px;
border: 2px solid rgba(0, 0, 0, 0.4);
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-corner {
background: transparent;
}
::selection {
background: rgba(169, 59, 46, 0.45);
color: #fdf6e3;
}
/* ---------- 通用 ---------- */
.btn {
background: linear-gradient(180deg, #20180f, #191209);
border: 1px solid #3d3221;
color: #d8c8a8;
padding: 6px 14px;
border-radius: 3px;
cursor: pointer;
font-family: inherit;
font-size: 0.95rem;
letter-spacing: 1px;
transition: all 0.16s ease;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.45), inset 0 1px 0 rgba(255, 236, 190, 0.05);
}
.btn:hover:not(:disabled) {
border-color: var(--gold);
color: var(--gold-soft);
box-shadow: 0 0 14px rgba(179, 145, 62, 0.25), 0 2px 6px rgba(0, 0, 0, 0.45);
}
.btn:active:not(:disabled) {
transform: translateY(1px);
}
.btn:disabled {
opacity: 0.34;
cursor: not-allowed;
}
.btn-primary {
background: linear-gradient(180deg, #b54739, #8e2f24);
border-color: #d06a4c;
color: #fef3dc;
text-shadow: 0 1px 2px rgba(60, 12, 6, 0.5);
}
.btn-primary:hover:not(:disabled) {
border-color: var(--gold-soft);
box-shadow: 0 0 18px rgba(192, 90, 65, 0.5);
}
.btn-danger {
border-color: #6b3228;
color: #d08b7a;
}
.btn-sm {
padding: 2px 9px;
font-size: 0.85rem;
border-radius: 2px;
}
.btn-lg {
padding: 10px 34px;
font-size: 1.12rem;
letter-spacing: 4px;
}
/* ---------- 宣纸卡片 ---------- */
.card {
background:
linear-gradient(178deg, rgba(255, 250, 232, 0.5), rgba(210, 190, 150, 0.25)),
linear-gradient(180deg, #f2e9d4, #e8d8b8);
background-color: var(--paper);
color: var(--ink);
border: 1px solid #b7a379;
border-radius: 3px;
padding: 12px 14px;
box-shadow:
0 3px 14px rgba(0, 0, 0, 0.5),
inset 0 0 0 1px rgba(255, 250, 235, 0.55),
inset 0 0 40px rgba(122, 98, 52, 0.12);
background-image:
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='170' height='170'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' seed='4'/><feColorMatrix type='saturate' values='0'/></filter><rect width='170' height='170' filter='url(%23n)' opacity='0.05'/></svg>"),
linear-gradient(175deg, rgba(255, 251, 236, 0.72), var(--paper-dim));
}
.card-title {
color: #64451e;
font-size: 1.06rem;
margin-bottom: 8px;
letter-spacing: 3px;
position: relative;
padding-bottom: 6px;
}
.card-title::after {
content: "";
position: absolute;
left: 0;
bottom: 0;
width: 52px;
height: 2px;
border-radius: 2px;
background: linear-gradient(90deg, var(--vermilion), rgba(169, 59, 46, 0.05));
}
.dim {
color: #6d6150;
font-size: 0.9rem;
}
.dim2 {
color: #96896e;
font-size: 0.85rem;
}
.good {
color: #4e6b42;
}
.bad {
color: #a13b2c;
}
.warn {
color: #a06f18;
}
.gold {
color: #8a6416;
}
/* ---------- 印章式图标 ---------- */
.s-icon,
.res-icon,
.bld-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 22px;
height: 22px;
border-radius: 4px;
background: linear-gradient(180deg, #453012, #271a08);
border: 1px solid #8a6d2f;
color: #f2ddb0;
font-size: 0.85rem;
vertical-align: middle;
flex-shrink: 0;
user-select: none;
box-shadow:
inset 0 1px 0 rgba(255, 240, 200, 0.16),
0 2px 5px rgba(0, 0, 0, 0.45);
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.6);
}
.res-icon {
width: 18px;
height: 18px;
font-size: 0.68rem;
border-radius: 3px;
background: linear-gradient(180deg, #38270f, #1e1507);
}
.bld-icon {
width: 32px;
height: 32px;
font-size: 1.08rem;
border-radius: 5px;
background: linear-gradient(180deg, #4d3a20, #2b1d0c);
color: #f4dda5;
}
/* ---------- 状态条(墨染) ---------- */
.bar {
height: 7px;
background: rgba(35, 27, 14, 0.75);
border: 1px solid rgba(76, 62, 35, 0.6);
border-radius: 5px;
overflow: hidden;
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.55);
}
.bar > div {
height: 100%;
background: linear-gradient(90deg, #6d7a54, #86b5a2 60%, #b8d9c4);
border-radius: 4px;
transition: width 0.35s ease;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.35);
}
.bar.bar-red > div {
background: linear-gradient(90deg, #8e2f24, #c05a41 60%, #e08a6d);
}
/* ---------- 走笔分隔线 ---------- */
.brush-line {
height: 3px;
border-radius: 3px;
background: linear-gradient(
90deg,
transparent 0%,
rgba(179, 145, 62, 0.55) 12%,
rgba(179, 145, 62, 0.25) 30%,
rgba(179, 145, 62, 0.6) 46%,
rgba(169, 59, 46, 0.42) 62%,
rgba(179, 145, 62, 0.25) 80%,
transparent 100%
);
margin: 10px 0;
}
/* ---------- 印章 ---------- */
.seal {
display: inline-flex;
align-items: center;
justify-content: center;
background: var(--vermilion);
color: #f8efd9;
font-family: "STKaiti", "KaiTi", serif;
border-radius: 3px;
box-shadow:
0 2px 6px rgba(0, 0, 0, 0.6),
inset 0 0 6px rgba(255, 220, 200, 0.35);
padding: 2px 5px;
font-size: 0.72rem;
letter-spacing: 1px;
transform: rotate(-2deg);
}
/* ============================================================
BOOT · 谷口研墨,远山入卷
============================================================ */
.boot {
position: relative;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 30px;
overflow: hidden;
background:
radial-gradient(ellipse at 50% 8%, #35281a 0%, #181209 48%, #0e0b07 100%);
}
.boot-bg {
position: absolute;
inset: 0;
opacity: 0.9;
pointer-events: none;
}
.boot-bg::after {
content: "";
position: absolute;
inset: 0;
background:
radial-gradient(ellipse at 50% 20%, rgba(0, 0, 0, 0) 0%, rgba(10, 8, 5, 0.55) 75%),
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='150' height='150'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/><feColorMatrix type='saturate' values='0'/></filter><rect width='150' height='150' filter='url(%23n)' opacity='0.06'/></svg>");
}
.boot-bg img {
width: 100%;
height: 100%;
object-fit: cover;
opacity: 0.95;
filter: saturate(1.12) brightness(1.15) contrast(1.06);
}
.boot-inner {
position: relative;
z-index: 2;
display: flex;
flex-direction: column;
align-items: center;
gap: 12px;
}
.boot-title {
font-size: 4.6rem;
color: #f3e9cd;
letter-spacing: 22px;
text-indent: 22px;
line-height: 1.1;
font-weight: 700;
text-shadow:
0 2px 0 rgba(20, 12, 4, 0.85),
0 6px 24px rgba(0, 0, 0, 0.9),
0 0 60px rgba(220, 170, 90, 0.18);
}
.boot-tagline {
letter-spacing: 13px;
color: #c8ac72;
font-size: 0.95rem;
text-shadow: 0 1px 6px rgba(0, 0, 0, 0.8);
}
.boot-en {
letter-spacing: 5px;
color: #7d6c4a;
font-size: 0.72rem;
}
.boot-divider {
width: 380px;
height: 2px;
margin-top: 6px;
background: linear-gradient(90deg, transparent, rgba(240, 220, 170, 0.5), transparent);
position: relative;
}
.boot-divider::after {
content: "◆";
position: absolute;
left: 50%;
top: -0.62em;
transform: translateX(-50%);
color: var(--vermilion-soft);
font-size: 0.8rem;
text-shadow: 0 0 8px rgba(192, 90, 65, 0.8);
}
.boot-actions {
display: flex;
flex-direction: column;
gap: 11px;
width: 330px;
}
.boot-newgame {
padding: 13px 0;
font-size: 1.18rem;
letter-spacing: 10px;
background: linear-gradient(180deg, #b54739, #8e2f24);
border: 1px solid #d98a66;
color: #fdf3da;
border-radius: 3px;
cursor: pointer;
font-family: inherit;
text-shadow: 0 1px 2px rgba(70, 15, 8, 0.65);
box-shadow: 0 8px 26px rgba(140, 40, 24, 0.35), inset 0 1px 0 rgba(255, 240, 210, 0.28);
transition: all 0.18s;
}
.boot-newgame:hover {
box-shadow: 0 10px 32px rgba(180, 60, 35, 0.5), inset 0 1px 0 rgba(255, 240, 210, 0.3);
border-color: var(--gold-soft);
}
.boot-slot {
display: flex;
align-items: center;
gap: 12px;
background:
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' seed='3'/><feColorMatrix type='saturate' values='0'/></filter><rect width='160' height='160' filter='url(%23n)' opacity='0.045'/></svg>"),
linear-gradient(180deg, #241b11 0%, #1c140c 100%);
border: 1px solid #3a3021;
border-radius: 3px;
padding: 10px 14px;
cursor: pointer;
transition: all 0.18s;
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.5);
}
.boot-slot:hover {
border-color: var(--gold);
transform: translateY(-1px);
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.6);
}
.boot-slot .slot-no {
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid #4d3f28;
border-radius: 50%;
color: var(--gold-soft);
font-size: 0.85rem;
flex-shrink: 0;
}
.boot-slot-empty {
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
background: rgba(12, 9, 5, 0.45);
border: 1px dashed #3a3021;
min-height: 52px;
}
/* ============================================================
新游戏
============================================================ */
.newgame {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
background:
radial-gradient(ellipse at 60% 30%, #261c10, #100c08 85%);
}
.newgame-box {
width: 560px;
display: flex;
flex-direction: column;
gap: 16px;
padding: 26px 30px;
}
.newgame .card-title {
font-size: 1.6rem;
color: #d9bd85;
letter-spacing: 10px;
}
.field {
display: flex;
align-items: center;
gap: 12px;
}
.field label {
width: 80px;
color: #b09f7c;
letter-spacing: 2px;
}
.field input,
.field select {
flex: 1;
background: rgba(14, 11, 7, 0.8);
border: 1px solid #3a3021;
color: #ecdcb8;
padding: 8px 10px;
border-radius: 3px;
font-family: inherit;
font-size: 1rem;
outline: none;
}
.field input:focus,
.field select:focus {
border-color: var(--gold);
box-shadow: 0 0 10px rgba(179, 145, 62, 0.25);
}
.diff-grid {
display: flex;
gap: 8px;
}
.diff-opt {
flex: 1;
text-align: center;
padding: 10px;
background: rgba(20, 15, 9, 0.65);
border: 1px solid #3a3021;
border-radius: 3px;
cursor: pointer;
color: #cbbd9e;
transition: all 0.16s;
}
.diff-opt:hover {
border-color: #6b5836;
}
.diff-opt.sel {
border-color: var(--vermilion-soft);
color: #f3e6c8;
background: linear-gradient(180deg, #2b1d12, #1f150c);
box-shadow: 0 0 12px rgba(169, 59, 46, 0.3);
}
/* ============================================================
TOPBAR · 檐下横匾
============================================================ */
.topbar {
display: flex;
align-items: center;
gap: 14px;
padding: 9px 18px;
background: linear-gradient(180deg, #1d1710 0%, #141009 100%);
border-bottom: 1px solid #3a3021;
flex-shrink: 0;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.55);
position: relative;
}
.topbar::after {
content: "";
position: absolute;
left: 0;
right: 0;
bottom: -3px;
height: 3px;
background: linear-gradient(
90deg,
transparent,
rgba(179, 145, 62, 0.35) 20%,
transparent 50%,
rgba(169, 59, 46, 0.28) 78%,
transparent
);
pointer-events: none;
}
.topbar .fam-name {
font-size: 1.34rem;
color: #dfc283;
letter-spacing: 6px;
font-weight: 700;
text-shadow: 0 2px 8px rgba(0, 0, 0, 0.9);
white-space: nowrap;
}
.topbar .date {
white-space: nowrap;
color: #a08f6b;
font-size: 0.98rem;
letter-spacing: 1px;
background: rgba(38, 29, 16, 0.65);
border: 1px solid #33291a;
border-radius: 2px;
padding: 3px 10px;
}
.speed-ctl {
display: flex;
align-items: center;
gap: 1px;
}
.speed-btn {
width: 30px;
height: 30px;
background: rgba(10, 8, 5, 0.6);
border: 1px solid #33291a;
color: #8f8264;
cursor: pointer;
font-family: inherit;
font-size: 0.85rem;
transition: all 0.15s;
}
.speed-btn:hover {
color: #d8c392;
border-color: #5b4a2e;
}
.speed-btn.sel {
background: linear-gradient(180deg, #4a3620, #352718);
border-color: var(--gold);
color: var(--gold-soft);
box-shadow: inset 0 0 8px rgba(179, 145, 62, 0.3);
}
.ress {
display: flex;
gap: 12px;
align-items: center;
margin-left: auto;
font-size: 0.95rem;
white-space: nowrap;
}
.res-item {
display: flex;
align-items: center;
gap: 5px;
color: #cbbd9e;
background: rgba(38, 29, 16, 0.6);
border: 1px solid #2f2517;
padding: 3px 9px;
border-radius: 2px;
}
.res-icon {
font-size: 0.95rem;
}
.topbar .btn-sm {
margin-left: 6px;
}
/* ---------- tabs ---------- */
.tabs {
display: flex;
gap: 3px;
padding: 0 16px;
background: linear-gradient(180deg, #181209, #110d08);
border-bottom: 1px solid #2b2214;
flex-shrink: 0;
}
.tab {
padding: 9px 20px;
color: #8f7f5d;
cursor: pointer;
border-bottom: 2px solid transparent;
letter-spacing: 4px;
user-select: none;
font-size: 0.98rem;
position: relative;
transition: color 0.15s;
}
.tab:hover {
color: #c9b787;
}
.tab.sel {
color: #e8cf96;
border-bottom-color: var(--vermilion);
text-shadow: 0 0 18px rgba(192, 90, 65, 0.35);
}
.tab.sel::before {
content: "〓";
margin-right: 8px;
font-size: 0.6rem;
color: var(--vermilion-soft);
vertical-align: 2px;
}
.main {
flex: 1;
display: flex;
overflow: hidden;
}
.main-left {
flex: 1;
overflow-y: auto;
padding: 16px;
background:
radial-gradient(ellipse at 15% 8%, rgba(64, 48, 24, 0.5) 0%, transparent 55%),
radial-gradient(ellipse at 85% 90%, rgba(46, 34, 18, 0.55) 0%, transparent 50%),
#110d08;
}
.main-right {
width: 330px;
border-left: 1px solid #2b2214;
background: linear-gradient(180deg, #0d0a06, #120e09);
display: flex;
flex-direction: column;
flex-shrink: 0;
overflow: hidden;
}
/* ============================================================
家族成员
============================================================ */
.member-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(232px, 1fr));
gap: 12px;
}
.member-card {
position: relative;
background:
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='170' height='170'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' seed='9'/><feColorMatrix type='saturate' values='0'/></filter><rect width='170' height='170' filter='url(%23n)' opacity='0.05'/></svg>"),
linear-gradient(180deg, #f4ecd9 0%, #e9dabc 100%);
color: var(--ink);
border: 1px solid #b9a77e;
border-radius: 3px;
padding: 12px 12px 10px;
cursor: pointer;
transition: all 0.18s;
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.55),
inset 0 0 0 1px rgba(255, 252, 242, 0.6),
inset 0 0 32px rgba(130, 100, 50, 0.1);
}
.member-card:hover {
border-color: var(--gold);
transform: translateY(-2px);
box-shadow:
0 10px 22px rgba(0, 0, 0, 0.55),
0 0 0 1px rgba(226, 197, 122, 0.25),
inset 0 0 0 1px rgba(255, 252, 242, 0.6);
}
.member-card.dead {
opacity: 0.5;
filter: saturate(0.55);
}
.member-card.dead:hover {
opacity: 0.65;
}
.mc-head {
display: flex;
align-items: center;
gap: 10px;
}
.m-avatar {
width: 46px;
height: 46px;
border-radius: 50%;
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.36rem;
color: #f8efd9;
font-weight: 700;
background: radial-gradient(circle at 34% 28%, #b6503d, #8c2f22 70%);
border: 2px solid rgba(249, 236, 208, 0.85);
box-shadow:
0 3px 8px rgba(80, 20, 10, 0.5),
inset 0 0 10px rgba(90, 22, 12, 0.55);
text-shadow: 0 1px 2px rgba(70, 15, 8, 0.7);
font-family: "STXingkai", "STKaiti", "KaiTi", serif;
}
.member-name {
display: flex;
align-items: center;
gap: 8px;
font-size: 1.12rem;
color: #2e2415;
font-weight: 700;
letter-spacing: 1px;
}
.member-realm {
font-size: 0.82rem;
color: #6d5b3e;
margin-top: 2px;
}
.member-tags {
display: flex;
gap: 5px;
flex-wrap: wrap;
margin-top: 6px;
}
.mc-foot {
margin-top: 8px;
}
.mc-foot .bar {
height: 6px;
}
.tag {
background: rgba(44, 33, 18, 0.85);
border: 1px solid #5a4727;
color: #d9c49a;
font-size: 0.72rem;
padding: 1px 7px;
border-radius: 2px;
letter-spacing: 0.5px;
}
.tag.gold-t {
background: rgba(140, 90, 22, 0.9);
border-color: var(--gold);
color: #ffe9b0;
}
.tag.head-t {
background: var(--vermilion);
border-color: #d9825f;
color: #ffeedd;
box-shadow: 0 0 8px rgba(169, 59, 46, 0.4);
}
/* ---------- 军情 feed ---------- */
.feed {
padding: 10px;
overflow-y: auto;
flex: 1;
}
.feed-item {
padding: 5px 8px;
border-left: 2px solid transparent;
margin-bottom: 3px;
font-size: 0.85rem;
line-height: 1.5;
border-radius: 2px;
}
.feed-item:hover {
background: rgba(255, 235, 190, 0.03);
}
.feed-item.k-info {
color: #8b7c5e;
}
.feed-item.k-good {
border-left-color: #86a06a;
color: #b3c99a;
}
.feed-item.k-bad {
border-left-color: var(--vermilion);
color: #d99a85;
}
.feed-item.k-war {
border-left-color: #c28552;
color: #e0b98a;
}
.feed-item.k-chronicle {
border-left-color: var(--gold);
color: #e0c688;
}
.feed-item.k-event {
border-left-color: #7d93a4;
color: #a9bfcf;
}
.feed-date {
color: #5c5140;
font-size: 0.72rem;
margin-right: 6px;
}
.feed-title {
padding: 10px 12px 6px;
color: #caa95c;
letter-spacing: 5px;
font-size: 0.85rem;
border-bottom: 1px solid #29200f;
background: linear-gradient(180deg, #151009, #100c07);
}
/* ============================================================
领地
============================================================ */
.bld-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(248px, 1fr));
gap: 12px;
}
.bld-card {
background:
linear-gradient(180deg, #f4ecd9 0%, #e7d7b6 100%);
color: var(--ink);
border: 1px solid #b9a77e;
border-radius: 3px;
padding: 14px;
display: flex;
flex-direction: column;
min-height: 190px;
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.55),
inset 0 0 0 1px rgba(255, 252, 242, 0.6),
inset 0 0 36px rgba(130, 100, 50, 0.1);
}
.bld-head {
display: flex;
align-items: center;
gap: 9px;
font-size: 1.06rem;
font-weight: 700;
color: #3a2d17;
}
.bld-icon {
font-size: 1.5rem;
filter: saturate(0.8);
}
.bld-lv {
margin-left: auto;
color: #a04b33;
letter-spacing: 2px;
font-size: 0.9rem;
}
.bld-desc {
color: #6d5b3e;
font-size: 0.85rem;
margin: 7px 0;
min-height: 38px;
line-height: 1.5;
}
.bld-prod {
font-size: 0.85rem;
color: #3e5a66;
margin-bottom: 10px;
border-top: 1px dashed rgba(90, 72, 40, 0.35);
padding-top: 7px;
}
.bld-card.uc { /* 未建 */
background:
linear-gradient(180deg, rgba(244, 236, 217, 0.45), rgba(231, 215, 182, 0.3));
border-style: dashed;
color: #4a3d29;
filter: saturate(0.6);
}
/* ============================================================
坊市 / 外交 / 探秘
============================================================ */
.market-table {
width: 100%;
border-collapse: collapse;
background:
linear-gradient(180deg, #f4ecd9, #e9dabc);
color: var(--ink);
border: 1px solid #b9a77e;
border-radius: 3px;
overflow: hidden;
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.55), inset 0 0 0 1px rgba(255, 252, 242, 0.55);
}
.market-table th {
text-align: left;
color: #64451e;
font-weight: 700;
background: rgba(120, 92, 42, 0.12);
border-bottom: 1px solid #b3a075;
padding: 8px 10px;
font-size: 0.9rem;
letter-spacing: 2px;
}
.market-table td {
padding: 8px 10px;
border-bottom: 1px dashed rgba(120, 98, 55, 0.3);
font-size: 0.92rem;
}
.market-table tr:hover td {
background: rgba(179, 145, 62, 0.08);
}
.market-table .btn {
background: linear-gradient(180deg, #efe4c8, #e2d2ab);
border-color: #a08c5c;
color: #4a3620;
}
.market-table .btn:hover {
border-color: var(--vermilion);
color: #8a2f22;
}
.help-text {
color: #a2906c;
font-size: 0.85rem;
line-height: 1.8;
max-width: 680px;
background: rgba(24, 18, 10, 0.72);
border: 1px solid #33291a;
border-left: 3px solid var(--vermilion);
padding: 11px 14px;
border-radius: 2px;
margin: 0 0 14px;
}
.npc-row {
display: flex;
align-items: center;
gap: 14px;
padding: 12px 14px;
background: linear-gradient(180deg, #f4ecd9, #e9dabc);
color: var(--ink);
border: 1px solid #b9a77e;
border-radius: 3px;
margin-bottom: 8px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.5);
}
.npc-name {
min-width: 136px;
font-size: 1.05rem;
font-weight: 700;
color: #3a2d17;
}
.relation-bar {
flex: 1;
}
.relation-num {
width: 92px;
text-align: right;
font-size: 0.85rem;
}
.npc-row .btn {
background: linear-gradient(180deg, #efe4c8, #dfcfa8);
border-color: #a08c5c;
color: #4a3620;
}
.npc-row .btn:hover {
border-color: var(--vermilion);
color: #8a2f22;
}
.mission-card {
background: linear-gradient(180deg, #f4ecd9, #e9dabc);
color: var(--ink);
border: 1px solid #b9a77e;
border-radius: 3px;
padding: 14px;
margin-bottom: 10px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.5);
}
.squad-picker {
display: flex;
gap: 7px;
flex-wrap: wrap;
margin: 8px 0;
}
.squadian {
padding: 4px 10px;
border: 1px solid #a08c5c;
border-radius: 2px;
cursor: pointer;
font-size: 0.85rem;
color: #64502e;
background: #f7f0de;
transition: all 0.14s;
}
.squadian:hover {
border-color: var(--gold);
}
.squadian.sel {
border-color: var(--vermilion);
color: #9c3526;
background: rgba(169, 59, 46, 0.1);
}
/* ============================================================
史书
============================================================ */
.chronicle-list {
max-width: 760px;
background: linear-gradient(180deg, #f4ecd9, #e9dabc);
color: var(--ink);
border: 1px solid #b9a77e;
border-radius: 3px;
padding: 6px 16px;
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.55), inset 0 0 40px rgba(130, 100, 50, 0.1);
}
.ch-item {
display: flex;
gap: 14px;
padding: 9px 0;
border-bottom: 1px dashed rgba(120, 98, 55, 0.32);
font-size: 0.95rem;
line-height: 1.6;
color: #3c2f1a;
}
.ch-item:last-child {
border-bottom: none;
}
.ch-year {
color: #a04b33;
white-space: nowrap;
min-width: 92px;
letter-spacing: 1px;
}
.ch-item .tag {
background: rgba(120, 92, 42, 0.16);
border-color: #b3a075;
color: #7a5d2e;
}
/* ============================================================
弹出镸面
============================================================ */
.modal-outer {
position: fixed;
inset: 0;
background: rgba(5, 4, 2, 0.82);
backdrop-filter: blur(2px);
display: flex;
align-items: center;
justify-content: center;
z-index: 50;
}
.modal {
position: relative;
width: 570px;
max-height: 82vh;
overflow-y: auto;
border-radius: 2px;
padding: 26px 30px 24px;
background:
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='170' height='170'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' seed='11'/><feColorMatrix type='saturate' values='0'/></filter><rect width='170' height='170' filter='url(%23n)' opacity='0.05'/></svg>"),
linear-gradient(180deg, #f7efdd 0%, #ecdfc0 100%);
color: var(--ink);
box-shadow:
0 26px 60px rgba(0, 0, 0, 0.85),
inset 0 0 0 1px rgba(255, 251, 240, 0.65),
inset 0 0 60px rgba(130, 100, 50, 0.13);
border: 1px solid #9c8a60;
}
.modal::before,
.modal::after {
content: "";
position: absolute;
left: -1px;
right: -1px;
height: 9px;
background: linear-gradient(180deg, #6b5638, #4b3b24);
border: 1px solid #8a7248;
border-radius: 3px;
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.6);
pointer-events: none;
z-index: 3;
}
.modal::before {
top: -5px;
}
.modal::after {
bottom: -5px;
}
.modal-title {
font-size: 1.5rem;
color: #8c2f22;
letter-spacing: 6px;
text-align: center;
margin-bottom: 5px;
font-weight: 700;
text-shadow: 0 1px 0 rgba(255, 250, 235, 0.8);
}
.modal-cat {
text-align: center;
color: #97835c;
font-size: 0.82rem;
margin-bottom: 14px;
letter-spacing: 2px;
}
.modal-text {
font-size: 1.03rem;
line-height: 1.9;
margin-bottom: 18px;
color: #342a18;
border-top: 1px solid rgba(169, 59, 46, 0.25);
padding-top: 14px;
border-bottom: 1px solid rgba(120, 98, 55, 0.25);
padding-bottom: 14px;
}
.modal-opts {
display: flex;
flex-direction: column;
gap: 9px;
}
.opt-btn {
background: #fbf5e5;
border: 1px solid #b3a075;
padding: 11px 16px;
border-radius: 2px;
cursor: pointer;
text-align: left;
font-family: inherit;
color: #342a18;
font-size: 0.98rem;
transition: all 0.15s;
box-shadow: inset 0 1px 0 rgba(255, 255, 250, 0.6);
}
.opt-btn:hover {
border-color: var(--vermilion);
background: #fdf8ea;
box-shadow: 0 0 0 1px rgba(169, 59, 46, 0.15), inset 0 1px 0 rgba(255, 255, 250, 0.6);
}
.opt-btn:hover .hint {
color: #9c3526;
}
.opt-btn .hint {
display: block;
color: #97835c;
font-size: 0.8rem;
margin-top: 3px;
}
/* ---------- member modal ---------- */
.member-modal {
width: 650px;
}
.mm-sec {
margin-top: 12px;
border-top: 1px dashed rgba(120, 98, 55, 0.35);
padding-top: 10px;
}
.mm-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 3px 14px;
font-size: 0.94rem;
}
.mm-line {
display: flex;
justify-content: space-between;
padding: 2px 0;
color: #6d5b3e;
}
.mm-line b {
color: #342a18;
font-weight: 700;
}
/* ---------- 战报 · 砚阵 ---------- */
.battle-modal {
width: 640px;
background:
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='170' height='170'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' seed='6'/><feColorMatrix type='saturate' values='0'/></filter><rect width='170' height='170' filter='url(%23n)' opacity='0.04'/></svg>"),
linear-gradient(180deg, #1b1410 0%, #120d09 100%);
border-color: #4d3e2a;
color: #e8dbba;
}
.battle-modal::before,
.battle-modal::after {
background: linear-gradient(180deg, #3a2f1e, #241c11);
border-color: #5b4a2e;
}
.battle-modal .modal-title {
color: #d8b879;
text-shadow: 0 2px 6px rgba(0, 0, 0, 0.8);
}
.battle-modal .modal-cat {
color: #8f7f5d;
}
.battle-lines {
background: rgba(10, 8, 5, 0.75);
border: 1px solid #3a3021;
border-radius: 3px;
padding: 16px;
line-height: 1.9;
font-size: 0.97rem;
color: #d9c99f;
margin-bottom: 14px;
box-shadow: inset 0 2px 12px rgba(0, 0, 0, 0.7);
}
.battle-lines div:first-child {
color: var(--gold-soft);
letter-spacing: 2px;
}
/* ---------- 谱系 ---------- */
.genealogy-row {
display: flex;
gap: 14px;
margin-bottom: 14px;
background: linear-gradient(180deg, rgba(242, 233, 212, 0.035), rgba(242, 233, 212, 0.015));
border: 1px solid rgba(140, 120, 80, 0.22);
border-radius: 3px;
padding: 12px 14px;
}
.genealogy-gen {
writing-mode: vertical-rl;
color: #cdaa63;
letter-spacing: 6px;
font-size: 0.95rem;
border-right: 1px solid rgba(140, 120, 80, 0.25);
padding-right: 10px;
flex-shrink: 0;
}
.genealogy-body {
flex: 1;
display: flex;
flex-direction: column;
gap: 12px;
}
.genealogy-unit {
display: flex;
flex-direction: column;
gap: 6px;
border-left: 3px solid rgba(150, 128, 88, 0.35);
padding-left: 10px;
}
.genealogy-parents {
display: flex;
align-items: center;
gap: 8px;
}
.genealogy-matron {
color: #a09374;
font-size: 0.9rem;
}
.genealogy-drop {
height: 12px;
border-left: 2px solid rgba(150, 128, 88, 0.4);
margin-left: 30px;
}
.genealogy-children,
.genealogy-singles {
display: flex;
gap: 8px;
flex-wrap: wrap;
}
.gene-node {
background: linear-gradient(180deg, #f4ecd9, #e7d6b4);
color: #2e2415;
border: 1px solid #b3a075;
border-radius: 3px;
padding: 5px 10px;
min-width: 108px;
cursor: pointer;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 252, 240, 0.6);
transition: all 0.14s;
}
.gene-node:hover {
border-color: var(--gold);
transform: translateY(-1px);
}
.gene-dead {
filter: saturate(0.4);
opacity: 0.55;
background: linear-gradient(180deg, #d9cfb8, #c8bb9e);
}
.gene-head {
border-color: var(--vermilion);
box-shadow: 0 0 0 1px rgba(169, 59, 46, 0.25), 0 2px 6px rgba(0, 0, 0, 0.5);
}
.gene-name {
display: flex;
align-items: center;
font-size: 0.94rem;
font-weight: 700;
letter-spacing: 1px;
}
.gene-sub {
font-size: 0.75rem;
color: #6d5b3e;
margin-top: 1px;
display: flex;
align-items: center;
flex-wrap: wrap;
}
.gene-node .tag {
font-size: 0.62rem;
padding: 0 4px;
}
.genealogy-gen + .genealogy-body:has(.genealogy-singles:empty) .genealogy-singles {
display: none;
}
/* ---------- 媒人提示 / 年度族簿 ---------- */
.matchmaker-strip {
background: linear-gradient(180deg, rgba(240, 214, 160, 0.12), rgba(240, 214, 160, 0.05));
border: 1px solid rgba(216, 178, 116, 0.35);
border-left: 3px solid var(--gold);
color: #d8c08a;
padding: 9px 14px;
margin-bottom: 12px;
border-radius: 3px;
cursor: pointer;
font-size: 0.92rem;
letter-spacing: 1px;
transition: border-color 0.15s;
}
.matchmaker-strip:hover {
border-color: var(--gold-soft);
border-left-color: var(--gold);
}
.underline {
text-decoration: underline;
text-underline-offset: 3px;
color: var(--gold-soft);
}
.yearpaper-modal {
width: 520px;
}
.yearpaper-modal .modal-text {
border-top: 1px dashed rgba(120, 98, 55, 0.4);
border-bottom: 1px dashed rgba(120, 98, 55, 0.4);
}
.modal-squad .squad-picker {
background: rgba(180, 150, 90, 0.08);
border-radius: 3px;
padding: 8px;
}
/* ============================================================
设置 & 杂项
============================================================ */
.set-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 11px 4px;
border-bottom: 1px dashed rgba(144, 122, 76, 0.3);
max-width: 660px;
color: #cdbd97;
font-size: 0.96rem;
}
.toast {
position: fixed;
bottom: 26px;
left: 50%;
transform: translateX(-50%);
background: linear-gradient(180deg, #2b1f10, #1c1409);
border: 1px solid var(--gold);
color: var(--gold-soft);
padding: 9px 24px;
border-radius: 2px;
z-index: 99;
font-size: 0.95rem;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.7);
letter-spacing: 2px;
}
.gameover-banner {
text-align: center;
padding: 70px 20px;
}
.gameover-banner h1 {
color: #a9402f;
letter-spacing: 14px;
font-size: 2.8rem;
margin-bottom: 16px;
text-shadow: 0 4px 18px rgba(0, 0, 0, 0.8);
}
/* ---------- 春秋原 & 结局 ---------- */
.legacy-peak {
display: flex;
align-items: center;
justify-content: center;
background: radial-gradient(circle at 35% 30%, #6e5630, #2c2110 75%);
border: 1px solid #7a6434;
border-radius: 50%;
box-shadow: 0 0 26px rgba(179, 145, 62, 0.28), inset 0 0 18px rgba(0, 0, 0, 0.6);
}
.legacy-glyph {
font-size: 2.4rem;
color: #efd9a2;
letter-spacing: 4px;
text-shadow: 0 2px 14px rgba(0, 0, 0, 0.8);
}
.resolve-dim {
display: flex;
align-items: center;
gap: 12px;
padding: 4px 0;
}
.resolve-modal {
width: 560px;
background:
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='170' height='170'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='2' seed='14'/><feColorMatrix type='saturate' values='0'/></filter><rect width='170' height='170' filter='url(%23n)' opacity='0.055'/></svg>"),
linear-gradient(180deg, #f6edd7 0%, #e8d9b8 100%);
}
.resolve-title {
text-align: center;
font-size: 2.1rem;
letter-spacing: 10px;
color: #8c2f22;
margin: 10px 0 14px;
font-weight: 700;
text-shadow: 0 1px 0 rgba(255, 250, 235, 0.8), 0 4px 16px rgba(140, 47, 34, 0.25);
}
.resolve-dims {
border-top: 1px solid rgba(169, 59, 46, 0.3);
border-bottom: 1px solid rgba(120, 98, 55, 0.3);
padding: 10px 4px;
}
.resolve-poem {
text-align: center;
margin: 16px 0 8px;
line-height: 2.1;
color: #4a3c26;
font-size: 1.06rem;
letter-spacing: 2px;
}
.resolve-stamp {
text-align: center;
color: #a06f18;
letter-spacing: 6px;
font-size: 0.82rem;
}
/* ---------- 宗祠碑录 ---------- */
.monument-strip {
margin-bottom: 14px;
background: rgba(20, 15, 9, 0.72);
border: 1px solid #33291a;
border-radius: 3px;
padding: 10px 16px;
}
.monument-strip .card-title {
color: #cdaa63;
}