家谱现有接口调试50%

This commit is contained in:
rain
2026-07-09 17:29:25 +08:00
commit 6050508144
262 changed files with 63354 additions and 0 deletions
+187
View File
@@ -0,0 +1,187 @@
.about-hero .container {
min-height: 440px;
padding-top: 74px;
padding-bottom: 74px;
}
.hero-copy {
position: relative;
padding-left: 28px;
}
.hero-copy:before {
content: "";
position: absolute;
left: 0;
top: 58px;
width: 4px;
height: 132px;
border-radius: 999px;
background: linear-gradient(180deg, var(--red), var(--gold));
}
.about-tags {
display: flex;
gap: 12px;
margin-top: 28px;
flex-wrap: wrap;
}
.about-tags span {
padding: 10px 14px;
border: 1px solid rgba(224, 211, 189, .78);
border-radius: 999px;
color: #6d766f;
background: rgba(255,253,248,.74);
box-shadow: 0 14px 32px rgba(72, 57, 38, .06);
font-weight: 800;
transition: transform .22s ease, color .22s ease, background .22s ease;
}
.about-tags span:hover {
color: #fff;
background: var(--green);
transform: translateY(-3px);
}
.about-seal {
position: relative;
min-height: 260px;
overflow: hidden;
display: grid;
place-items: center;
text-align: center;
color: #fff;
background: linear-gradient(155deg, var(--green-dark), var(--green));
}
.about-seal:before {
content: "";
position: absolute;
inset: 0;
background:
linear-gradient(rgba(255,255,255,.08) 1px, transparent 1px),
linear-gradient(90deg, rgba(255,255,255,.08) 1px, transparent 1px);
background-size: 34px 34px;
opacity: .34;
}
.seal-orb {
position: absolute;
right: 76px;
top: 40px;
width: 110px;
height: 110px;
border-radius: 50%;
background: rgba(255,255,255,.16);
box-shadow: 0 0 40px rgba(255,255,255,.1);
animation: sealPulse 4s ease-in-out infinite;
}
.about-seal span {
position: relative;
z-index: 2;
width: 96px;
height: 96px;
margin-bottom: 20px;
border-radius: 50%;
display: grid;
place-items: center;
color: var(--red);
background: rgba(255,255,255,.94);
font-family: "SimSun", "Songti SC", serif;
font-size: 48px;
font-weight: 800;
transition: transform .24s ease, background .24s ease;
}
.about-seal:hover span {
transform: rotate(-8deg) scale(1.08);
}
.about-seal p {
position: relative;
z-index: 2;
margin: 0;
color: rgba(255,255,255,.84);
font-size: 22px;
}
.values-section {
position: relative;
overflow: hidden;
}
.values-section:before {
content: "";
position: absolute;
left: 50%;
top: 58px;
width: 520px;
height: 180px;
border-radius: 50%;
background: radial-gradient(circle, rgba(196, 146, 69, .09), transparent 68%);
transform: translateX(-50%);
}
.value-card {
min-height: 190px;
position: relative;
overflow: hidden;
}
.value-card:after {
content: "";
position: absolute;
left: -42%;
top: 0;
width: 36%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255,255,255,.54), transparent);
transform: skewX(-18deg);
transition: left .56s ease;
}
.value-card:hover:after {
left: 112%;
}
.value-icon {
width: 48px;
height: 48px;
margin-bottom: 18px;
border-radius: 14px;
display: grid;
place-items: center;
color: var(--red);
background: #f7e4dc;
font-family: "SimSun", "Songti SC", serif;
font-size: 22px;
font-weight: 900;
transition: transform .26s ease, background .26s ease, color .26s ease;
}
.value-card:hover .value-icon {
color: #fff;
background: var(--red);
transform: rotate(-6deg) scale(1.08);
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover {
--lift: -6px;
}
@keyframes sealPulse {
0%, 100% { opacity: .55; transform: scale(.92); }
50% { opacity: .9; transform: scale(1.08); }
}
@media (max-width: 720px) {
.hero-copy { padding-left: 0; }
.hero-copy:before { display: none; }
}
+258
View File
@@ -0,0 +1,258 @@
.app-hero .container {
min-height: 500px;
padding-top: 74px;
padding-bottom: 74px;
}
.hero-copy {
position: relative;
padding-left: 28px;
}
.hero-copy:before {
content: "";
position: absolute;
left: 0;
top: 58px;
width: 4px;
height: 132px;
border-radius: 999px;
background: linear-gradient(180deg, var(--red), var(--gold));
}
.hero-buttons {
display: flex;
gap: 16px;
flex-wrap: wrap;
margin-top: 28px;
}
.app-stats {
display: flex;
gap: 12px;
margin-top: 24px;
flex-wrap: wrap;
}
.app-stats span {
padding: 10px 14px;
border: 1px solid rgba(224, 211, 189, .78);
border-radius: 999px;
color: #6d766f;
background: rgba(255,253,248,.74);
box-shadow: 0 14px 32px rgba(72, 57, 38, .06);
font-weight: 800;
transition: transform .22s ease, color .22s ease, background .22s ease;
}
.app-stats span:hover {
color: #fff;
background: var(--green);
transform: translateY(-3px);
}
.app-shot-wrap {
position: relative;
min-height: 390px;
display: flex;
align-items: center;
justify-content: center;
gap: 30px;
overflow: hidden;
background:
radial-gradient(circle at 18% 20%, rgba(200,59,50,.12), transparent 24%),
radial-gradient(circle at 80% 24%, rgba(71,111,99,.16), transparent 30%),
linear-gradient(135deg, #f7efe2, #edf4ef);
}
.app-shot-wrap:before {
content: "";
position: absolute;
inset: 22px;
border: 1px solid rgba(224, 211, 189, .62);
border-radius: 22px;
pointer-events: none;
}
.app-orbit {
position: absolute;
right: 64px;
top: 44px;
width: 96px;
height: 96px;
border-radius: 50%;
background: rgba(196, 146, 69, .18);
animation: appOrbit 4.2s ease-in-out infinite;
}
.phone-shot {
position: relative;
z-index: 2;
width: 185px;
height: 380px;
object-fit: cover;
object-position: top center;
border: 8px solid #252b28;
border-radius: 28px;
box-shadow: 0 26px 60px rgba(33, 28, 22, .2);
transition: transform .3s ease, box-shadow .3s ease;
}
.phone-shot.first {
animation: phoneFloatA 4s ease-in-out infinite;
}
.phone-shot.second {
transform: translateY(28px);
animation: phoneFloatB 4s ease-in-out infinite;
}
.app-shot-wrap:hover .phone-shot {
box-shadow: 0 34px 70px rgba(33, 28, 22, .26);
}
.app-feature-section {
position: relative;
overflow: hidden;
}
.app-feature-section:before {
content: "";
position: absolute;
left: 50%;
top: 58px;
width: 520px;
height: 180px;
border-radius: 50%;
background: radial-gradient(circle, rgba(196, 146, 69, .09), transparent 68%);
transform: translateX(-50%);
}
.app-feature-card {
min-height: 190px;
position: relative;
overflow: hidden;
}
.app-feature-card:after {
content: "";
position: absolute;
left: -42%;
top: 0;
width: 36%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255,255,255,.54), transparent);
transform: skewX(-18deg);
transition: left .56s ease;
}
.app-feature-card:hover:after {
left: 112%;
}
.app-icon {
width: 48px;
height: 48px;
margin-bottom: 18px;
border-radius: 14px;
display: grid;
place-items: center;
color: var(--red);
background: #f7e4dc;
font-family: "SimSun", "Songti SC", serif;
font-size: 22px;
font-weight: 900;
transition: transform .26s ease, background .26s ease, color .26s ease;
}
.app-feature-card:hover .app-icon {
color: #fff;
background: var(--red);
transform: rotate(-6deg) scale(1.08);
}
.app-promotion-section {
/* 应用推广列表承载后端推广内容,不在 JS 中写样式 */
background: #fffdf8;
}
.promotion-list {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 18px;
}
.promotion-card {
overflow: hidden;
border: 1px solid var(--line);
border-radius: 8px;
background: #fffaf0;
box-shadow: 0 18px 42px rgba(57, 48, 36, .08);
transition: transform .24s ease, border-color .24s ease, box-shadow .24s ease;
}
.promotion-card:hover {
border-color: rgba(196, 146, 69, .42);
box-shadow: 0 24px 54px rgba(57, 48, 36, .12);
transform: translateY(-4px);
}
.promotion-card img {
width: 100%;
aspect-ratio: 16 / 9;
object-fit: cover;
display: block;
background: #f3eadc;
}
.promotion-card div {
padding: 18px;
}
.promotion-card h3 {
margin-bottom: 8px;
color: var(--ink);
font-size: 22px;
}
.promotion-card p {
margin: 0 0 12px;
color: var(--muted);
line-height: 1.75;
}
.promotion-card span {
color: var(--red);
font-weight: 900;
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover {
--lift: -6px;
}
@keyframes phoneFloatA {
0%, 100% { transform: translateY(0) rotate(-1deg); }
50% { transform: translateY(-8px) rotate(1deg); }
}
@keyframes phoneFloatB {
0%, 100% { transform: translateY(28px) rotate(1deg); }
50% { transform: translateY(18px) rotate(-1deg); }
}
@keyframes appOrbit {
0%, 100% { opacity: .5; transform: scale(.92); }
50% { opacity: 1; transform: scale(1.08); }
}
@media (max-width: 720px) {
.hero-copy { padding-left: 0; }
.hero-copy:before { display: none; }
.phone-shot.second { display: none; }
.promotion-list { grid-template-columns: 1fr; }
}
+153
View File
@@ -0,0 +1,153 @@
.article-hero .container {
min-height: 440px;
padding-top: 74px;
padding-bottom: 74px;
}
.hero-copy {
position: relative;
padding-left: 28px;
}
.hero-copy:before {
content: "";
position: absolute;
left: 0;
top: 58px;
width: 4px;
height: 132px;
border-radius: 999px;
background: linear-gradient(180deg, var(--red), var(--gold));
}
.article-meta {
display: flex;
gap: 12px;
margin-top: 28px;
flex-wrap: wrap;
}
.article-meta span {
padding: 10px 14px;
border: 1px solid rgba(224, 211, 189, .78);
border-radius: 999px;
color: #6d766f;
background: rgba(255,253,248,.74);
font-weight: 800;
}
.article-cover-detail {
position: relative;
overflow: hidden;
display: grid;
place-items: center;
text-align: center;
color: #fff;
background:
radial-gradient(circle at 72% 24%, rgba(255,255,255,.35) 0 9%, transparent 10%),
linear-gradient(135deg, #e7c89e, #b94135 48%, #143d57);
}
.article-cover-detail:after {
content: "";
position: absolute;
left: -40%;
top: 0;
width: 34%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255,255,255,.3), transparent);
transform: skewX(-18deg);
transition: left .58s ease;
}
.article-cover-detail:hover:after { left: 112%; }
.article-cover-detail span {
width: 86px;
height: 86px;
border-radius: 50%;
display: grid;
place-items: center;
color: var(--red);
background: rgba(255,253,248,.94);
font-family: "SimSun", "Songti SC", serif;
font-size: 44px;
font-weight: 800;
}
.article-cover-detail p {
margin: 18px 0 0;
color: rgba(255,255,255,.9);
font-size: 22px;
}
.article-layout {
display: grid;
grid-template-columns: minmax(0, 820px) 300px;
gap: 28px;
align-items: start;
}
.article-content,
.article-side {
border: 1px solid var(--line);
border-radius: 18px;
background: rgba(255,253,248,.82);
box-shadow: 0 20px 54px rgba(57, 48, 36, .08);
}
.article-content {
padding: 42px;
}
.article-content p {
color: #5f665f;
font-size: 18px;
line-height: 2;
}
.article-content h2 {
margin-top: 34px;
font-size: 32px;
}
.article-side {
position: sticky;
top: 108px;
padding: 24px;
}
.article-side a {
display: block;
margin-top: 12px;
padding: 14px 16px;
border: 1px solid var(--line);
border-radius: 14px;
color: #6f4a37;
background: #fbf7ed;
transition: transform .22s ease, color .22s ease, background .22s ease;
}
.article-side a:hover {
color: #fff;
background: var(--green);
transform: translateX(5px);
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover { --lift: -6px; }
@media (max-width: 980px) {
.article-layout { grid-template-columns: 1fr; }
.article-side { position: static; }
}
@media (max-width: 720px) {
.hero-copy { padding-left: 0; }
.hero-copy:before { display: none; }
.article-content { padding: 28px; }
}
+210
View File
@@ -0,0 +1,210 @@
.create-hero .container {
min-height: 440px;
padding-top: 74px;
padding-bottom: 74px;
}
.hero-copy {
position: relative;
padding-left: 28px;
}
.hero-copy:before {
content: "";
position: absolute;
left: 0;
top: 58px;
width: 4px;
height: 132px;
border-radius: 999px;
background: linear-gradient(180deg, var(--red), var(--gold));
}
.create-tags {
display: flex;
gap: 12px;
margin-top: 28px;
flex-wrap: wrap;
}
.create-tags span {
padding: 10px 14px;
border: 1px solid rgba(224, 211, 189, .78);
border-radius: 999px;
color: #6d766f;
background: rgba(255,253,248,.74);
box-shadow: 0 14px 32px rgba(72, 57, 38, .06);
font-weight: 800;
transition: transform .22s ease, color .22s ease, background .22s ease;
}
.create-tags span:hover {
color: #fff;
background: var(--green);
transform: translateY(-3px);
}
.process-card {
position: relative;
overflow: hidden;
display: grid;
align-content: center;
}
.process-card:before {
content: "";
position: absolute;
inset: 0;
background:
linear-gradient(rgba(196,146,69,.06) 1px, transparent 1px),
linear-gradient(90deg, rgba(196,146,69,.06) 1px, transparent 1px);
background-size: 34px 34px;
opacity: .72;
}
.process-card h3,
.process-card .step-list {
position: relative;
z-index: 2;
}
.process-orb {
position: absolute;
right: -70px;
top: -80px;
width: 220px;
height: 220px;
border-radius: 50%;
background: radial-gradient(circle, rgba(200, 59, 50, .13), transparent 62%);
animation: createPulse 4s ease-in-out infinite;
}
.step-list {
display: grid;
gap: 16px;
margin-top: 18px;
}
.step-list p {
display: flex;
gap: 14px;
align-items: center;
margin: 0;
color: var(--muted);
transition: transform .22s ease, color .22s ease;
}
.step-list p:hover {
color: var(--green-dark);
transform: translateX(6px);
}
.step-list b {
width: 38px;
height: 38px;
border-radius: 50%;
display: grid;
place-items: center;
color: #fff;
background: var(--green);
flex: 0 0 auto;
box-shadow: 0 12px 28px rgba(71, 111, 99, .18);
transition: transform .22s ease, background .22s ease;
}
.step-list p:hover b {
background: var(--red);
transform: scale(1.08);
}
.create-form-section {
position: relative;
overflow: hidden;
}
.create-form-section:before {
content: "";
position: absolute;
left: 50%;
top: 58px;
width: 520px;
height: 180px;
border-radius: 50%;
background: radial-gradient(circle, rgba(196, 146, 69, .09), transparent 68%);
transform: translateX(-50%);
}
.create-form {
max-width: 720px;
position: relative;
overflow: hidden;
padding: 36px;
}
.form-ornament {
position: absolute;
right: -82px;
top: -88px;
width: 220px;
height: 220px;
border-radius: 50%;
background: radial-gradient(circle, rgba(71, 111, 99, .12), transparent 66%);
}
.create-form h2,
.create-form .form-note,
.create-form .form-grid {
position: relative;
z-index: 2;
}
.form-note {
margin-bottom: 22px;
color: var(--muted);
line-height: 1.8;
}
.create-form .input,
.create-form textarea {
transition: border-color .22s ease, box-shadow .22s ease, background .22s ease, transform .22s ease;
}
.create-region-picker {
/* 创建家谱页地区选择器占满表单宽度,编码通过隐藏字段提交 */
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px;
}
.create-form .input:focus,
.create-form textarea:focus {
outline: none;
border-color: rgba(200, 59, 50, .62);
background: #fffdf8;
box-shadow: 0 0 0 4px rgba(200, 59, 50, .08);
transform: translateY(-2px);
}
.submit-btn {
width: 100%;
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover {
--lift: -6px;
}
@keyframes createPulse {
0%, 100% { opacity: .5; transform: scale(.92); }
50% { opacity: 1; transform: scale(1.08); }
}
@media (max-width: 720px) {
.hero-copy { padding-left: 0; }
.hero-copy:before { display: none; }
.create-region-picker { grid-template-columns: 1fr; }
}
+213
View File
@@ -0,0 +1,213 @@
.culture-hero .container {
min-height: 440px;
padding-top: 74px;
padding-bottom: 74px;
}
.hero-copy {
position: relative;
padding-left: 28px;
}
.hero-copy:before {
content: "";
position: absolute;
left: 0;
top: 58px;
width: 4px;
height: 132px;
border-radius: 999px;
background: linear-gradient(180deg, var(--red), var(--gold));
}
.culture-stats {
display: flex;
gap: 12px;
margin-top: 28px;
flex-wrap: wrap;
}
.culture-stats span {
padding: 10px 14px;
border: 1px solid rgba(224, 211, 189, .78);
border-radius: 999px;
color: #6d766f;
background: rgba(255,253,248,.74);
box-shadow: 0 14px 32px rgba(72, 57, 38, .06);
font-weight: 800;
transition: transform .22s ease, color .22s ease, background .22s ease;
}
.culture-stats span:hover {
color: #fff;
background: var(--green);
transform: translateY(-3px);
}
.culture-quote {
position: relative;
min-height: 260px;
overflow: hidden;
display: flex;
flex-direction: column;
justify-content: center;
color: #fff;
background:
linear-gradient(180deg, rgba(33,63,56,.18), rgba(33,63,56,.86)),
linear-gradient(135deg, #476f63, #c49245 50%, #c83b32);
}
.culture-quote:before {
content: "";
position: absolute;
inset: 0;
background:
linear-gradient(rgba(255,255,255,.08) 1px, transparent 1px),
linear-gradient(90deg, rgba(255,255,255,.08) 1px, transparent 1px);
background-size: 34px 34px;
opacity: .34;
}
.quote-moon {
position: absolute;
right: 72px;
top: 34px;
width: 92px;
height: 92px;
border-radius: 50%;
background: rgba(255,255,255,.32);
box-shadow: 0 0 34px rgba(255,255,255,.12);
animation: moonFloat 4s ease-in-out infinite;
}
.culture-quote span {
position: relative;
z-index: 2;
width: 64px;
height: 64px;
margin-bottom: 24px;
border-radius: 50%;
display: grid;
place-items: center;
color: var(--red);
background: rgba(255,255,255,.94);
font-family: "SimSun", "Songti SC", serif;
font-size: 30px;
font-weight: 800;
transition: transform .24s ease, background .24s ease;
}
.culture-quote:hover span {
transform: rotate(-8deg) scale(1.08);
}
.culture-quote p {
position: relative;
z-index: 2;
margin: 0;
color: rgba(255,255,255,.86);
font-size: 22px;
line-height: 1.7;
}
.article-section {
position: relative;
overflow: hidden;
}
.article-section:before {
content: "";
position: absolute;
left: 50%;
top: 58px;
width: 520px;
height: 180px;
border-radius: 50%;
background: radial-gradient(circle, rgba(196, 146, 69, .09), transparent 68%);
transform: translateX(-50%);
}
.article-card {
position: relative;
overflow: hidden;
border-radius: 18px;
background: #fff;
border: 1px solid var(--line);
box-shadow: 0 18px 48px rgba(57, 48, 36, .07);
transition: transform .24s ease, box-shadow .24s ease, border-color .24s ease;
}
.article-card:hover {
border-color: rgba(196, 146, 69, .42);
box-shadow: 0 24px 60px rgba(57, 48, 36, .11);
}
.article-cover {
position: relative;
height: 190px;
overflow: hidden;
background:
radial-gradient(circle at 74% 28%, rgba(255,255,255,.7) 0 8%, transparent 9%),
linear-gradient(135deg, #e7c89e, #b94135 48%, #143d57);
}
.article-cover:after {
content: "";
position: absolute;
left: -42%;
top: 0;
width: 36%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255,255,255,.34), transparent);
transform: skewX(-18deg);
transition: left .58s ease;
}
.article-card:hover .article-cover:after {
left: 112%;
}
.article-cover span {
position: absolute;
left: 22px;
bottom: 20px;
padding: 7px 12px;
border-radius: 999px;
color: var(--green-dark);
background: rgba(255,253,248,.86);
font-weight: 800;
font-size: 13px;
}
.article-card:nth-child(2) .article-cover {
background: linear-gradient(135deg, #dfd1b5, #6b7f70 48%, #26302c);
}
.article-card:nth-child(3) .article-cover {
background: linear-gradient(135deg, #f0d8ac, #c49245 45%, #7d342d);
}
.article-body { padding: 24px; }
.article-body h3 { transition: color .22s ease; }
.article-card:hover .article-body h3 { color: var(--red); }
.article-body p { color: var(--muted); line-height: 1.75; }
.article-body span { color: #9a8f82; font-size: 14px; }
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover {
--lift: -6px;
}
@keyframes moonFloat {
0%, 100% { transform: translateY(0) scale(1); opacity: .72; }
50% { transform: translateY(-8px) scale(1.04); opacity: .92; }
}
@media (max-width: 720px) {
.hero-copy { padding-left: 0; }
.hero-copy:before { display: none; }
}
+86
View File
@@ -0,0 +1,86 @@
.download-hero .container {
min-height: 440px;
padding-top: 74px;
padding-bottom: 74px;
}
.hero-copy {
position: relative;
padding-left: 28px;
}
.hero-copy:before {
content: "";
position: absolute;
left: 0;
top: 58px;
width: 4px;
height: 132px;
border-radius: 999px;
background: linear-gradient(180deg, var(--red), var(--gold));
}
.detail-actions {
display: flex;
gap: 14px;
margin-top: 30px;
flex-wrap: wrap;
}
.qr-card {
display: grid;
place-items: center;
text-align: center;
}
.qr-box {
width: 170px;
height: 170px;
padding: 16px;
border-radius: 24px;
background:
linear-gradient(90deg, var(--green) 12px, transparent 12px) 0 0 / 32px 32px,
linear-gradient(var(--green) 12px, transparent 12px) 0 0 / 32px 32px,
#fffdf8;
border: 1px solid var(--line);
display: grid;
place-items: center;
box-shadow: inset 0 0 0 12px #fffdf8;
}
.qr-box span {
width: 62px;
height: 62px;
border-radius: 50%;
display: grid;
place-items: center;
color: #fff;
background: var(--red);
font-weight: 900;
}
.qr-card p,
.download-card p {
color: var(--muted);
line-height: 1.8;
}
.download-card {
transition: transform .24s ease, border-color .24s ease, box-shadow .24s ease;
}
.download-card:hover {
border-color: rgba(196, 146, 69, .42);
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover { --lift: -6px; }
@media (max-width: 720px) {
.hero-copy { padding-left: 0; }
.hero-copy:before { display: none; }
}
+160
View File
@@ -0,0 +1,160 @@
.page-family-detail [data-family-detail].is-loading {
/* 详情接口加载时只改变透明度,具体状态由公共 is-loading 类控制 */
opacity: .82;
}
.detail-hero .container {
min-height: 440px;
padding-top: 74px;
padding-bottom: 74px;
}
.hero-copy {
position: relative;
padding-left: 28px;
}
.hero-copy:before {
content: "";
position: absolute;
left: 0;
top: 58px;
width: 4px;
height: 132px;
border-radius: 999px;
background: linear-gradient(180deg, var(--red), var(--gold));
}
.detail-actions {
display: flex;
gap: 14px;
margin-top: 30px;
flex-wrap: wrap;
}
.family-summary {
position: relative;
overflow: hidden;
display: grid;
align-content: center;
gap: 24px;
color: #fff;
background:
linear-gradient(180deg, rgba(33,63,56,.18), rgba(33,63,56,.88)),
linear-gradient(135deg, #476f63, #c49245 52%, #8f4634);
}
.family-summary:before {
content: "";
position: absolute;
inset: 0;
background:
linear-gradient(rgba(255,255,255,.08) 1px, transparent 1px),
linear-gradient(90deg, rgba(255,255,255,.08) 1px, transparent 1px);
background-size: 34px 34px;
opacity: .38;
}
.family-summary > * {
position: relative;
z-index: 2;
}
.summary-badge {
width: fit-content;
padding: 8px 14px;
border-radius: 999px;
color: var(--green-dark);
background: rgba(255,253,248,.88);
font-weight: 800;
}
.summary-grid {
/* 接口统计数据会替换这里的四个格子,固定列数避免加载后跳动 */
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 12px;
}
.summary-grid span {
min-height: 84px;
padding: 16px;
border-radius: 16px;
display: grid;
place-items: center;
background: rgba(255,255,255,.13);
border: 1px solid rgba(255,255,255,.18);
}
.summary-grid b {
display: block;
font-size: 30px;
}
.detail-layout {
/* 详情页侧栏和正文为本页独有布局,不放入公共样式 */
display: grid;
grid-template-columns: 330px 1fr;
gap: 26px;
align-items: start;
}
.detail-panel,
.content-card,
.mini-card {
border: 1px solid var(--line);
border-radius: 18px;
background: rgba(255,253,248,.78);
box-shadow: 0 20px 54px rgba(57, 48, 36, .08);
}
.detail-panel {
padding: 26px;
position: sticky;
top: 108px;
}
.detail-panel p,
.content-card p,
.mini-card p {
color: var(--muted);
line-height: 1.8;
}
.detail-main {
display: grid;
gap: 24px;
}
.content-card {
padding: 30px;
}
.mini-card {
min-height: 170px;
padding: 24px;
transition: transform .24s ease, border-color .24s ease, box-shadow .24s ease;
}
.mini-card:hover {
border-color: rgba(196, 146, 69, .42);
box-shadow: 0 24px 60px rgba(57, 48, 36, .11);
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover { --lift: -6px; }
@media (max-width: 900px) {
.detail-layout { grid-template-columns: 1fr; }
.detail-panel { position: static; }
.summary-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 720px) {
.hero-copy { padding-left: 0; }
.hero-copy:before { display: none; }
}
+27
View File
@@ -0,0 +1,27 @@
/* 找回密码页只保留单页装饰,公共认证卡片样式在 public.css */
.recover-card {
position: relative;
overflow: hidden;
}
.recover-card:before {
content: "";
position: absolute;
right: -80px;
top: -90px;
width: 220px;
height: 220px;
border-radius: 50%;
background: radial-gradient(circle, rgba(200, 59, 50, .13), transparent 64%);
}
.recover-card > * {
position: relative;
z-index: 2;
}
@media (max-width: 620px) {
.code-row {
grid-template-columns: 1fr;
}
}
+265
View File
@@ -0,0 +1,265 @@
.page-genealogy {
background: #fbf7ed;
}
.genealogy-hero .container {
min-height: 470px;
padding-top: 76px;
padding-bottom: 76px;
}
.hero-copy {
position: relative;
padding-left: 28px;
}
.hero-copy:before {
content: "";
position: absolute;
left: 0;
top: 58px;
width: 4px;
height: 136px;
border-radius: 999px;
background: linear-gradient(180deg, var(--red), var(--gold));
}
.genealogy-stats {
display: flex;
gap: 12px;
margin-top: 28px;
padding: 8px;
border: 1px solid rgba(224, 211, 189, .78);
border-radius: 18px;
background: rgba(255,253,248,.74);
box-shadow: 0 16px 36px rgba(72, 57, 38, .07);
}
.genealogy-stats div {
min-width: 118px;
padding: 12px 16px;
border-radius: 12px;
}
.genealogy-stats div + div {
border-left: 1px solid rgba(218, 201, 174, .78);
}
.genealogy-stats strong {
display: block;
color: var(--green);
font-size: 24px;
line-height: 1.1;
}
.genealogy-stats span {
color: #6d766f;
font-size: 14px;
}
.tree-preview {
position: relative;
min-height: 300px;
display: grid;
gap: 14px;
align-content: center;
overflow: hidden;
background:
linear-gradient(90deg, rgba(255,253,248,.95), rgba(255,253,248,.78)),
radial-gradient(circle at 78% 22%, rgba(196,146,69,.2), transparent 28%);
transform-style: preserve-3d;
}
.tree-glow {
position: absolute;
right: -70px;
top: -80px;
width: 210px;
height: 210px;
border-radius: 50%;
background: radial-gradient(circle, rgba(200, 59, 50, .13), transparent 62%);
animation: treePulse 4.2s ease-in-out infinite;
}
.tree-row {
position: relative;
z-index: 2;
display: flex;
justify-content: center;
gap: 16px;
flex-wrap: wrap;
}
.tree-row span {
min-width: 110px;
padding: 14px 18px;
border: 1px solid #dac9ae;
border-radius: 14px;
text-align: center;
color: var(--green-dark);
background: rgba(255,250,241,.9);
box-shadow: 0 12px 28px rgba(69, 53, 35, .06);
font-weight: 800;
transition: transform .24s ease, color .24s ease, background .24s ease, box-shadow .24s ease;
}
.tree-preview:hover .tree-row span {
animation: nodeFloat 1.9s ease-in-out infinite;
}
.tree-row span:hover {
color: #fff;
background: var(--green);
box-shadow: 0 16px 32px rgba(71, 111, 99, .22);
}
.tree-row.branch span:nth-child(2) { animation-delay: .08s; }
.tree-row.branch span:nth-child(3) { animation-delay: .16s; }
.tree-row.generation span:nth-child(2) { animation-delay: .08s; }
.tree-row.generation span:nth-child(3) { animation-delay: .16s; }
.tree-row.generation span:nth-child(4) { animation-delay: .24s; }
.tree-line {
position: relative;
z-index: 1;
width: min(360px, 70%);
height: 1px;
margin: 0 auto;
background: linear-gradient(90deg, transparent, rgba(196, 146, 69, .5), transparent);
}
.tree-line.short {
width: min(500px, 86%);
}
.capability-section {
position: relative;
overflow: hidden;
}
.capability-section:before {
content: "";
position: absolute;
left: 50%;
top: 58px;
width: 520px;
height: 180px;
border-radius: 50%;
background: radial-gradient(circle, rgba(196, 146, 69, .09), transparent 68%);
transform: translateX(-50%);
pointer-events: none;
}
.feature-card {
min-height: 210px;
position: relative;
overflow: hidden;
}
.feature-card:after {
content: "";
position: absolute;
left: -40%;
top: 0;
width: 36%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255,255,255,.48), transparent);
transform: skewX(-18deg);
transition: left .56s ease;
}
.feature-card:hover:after {
left: 110%;
}
.icon-word {
width: 48px;
height: 48px;
margin-bottom: 18px;
border-radius: 14px;
display: grid;
place-items: center;
color: var(--red);
background: #f7e4dc;
font-size: 22px;
font-weight: 900;
transition: transform .26s ease, background .26s ease, color .26s ease;
}
.feature-card:hover .icon-word {
color: #fff;
background: var(--red);
transform: rotate(-6deg) scale(1.08);
}
.coedit-section {
background:
radial-gradient(circle at 18% 20%, rgba(200, 59, 50, .08), transparent 24%),
#f7efe2;
}
.coedit-card {
min-height: 260px;
padding: 34px;
}
.coedit-card .btn {
margin-top: 12px;
}
.process-card {
min-height: 260px;
padding: 34px;
}
.step-list {
display: grid;
gap: 16px;
margin-top: 20px;
}
.step-list p {
display: flex;
gap: 14px;
align-items: center;
margin: 0;
color: var(--muted);
}
.step-list b {
width: 38px;
height: 38px;
border-radius: 50%;
display: grid;
place-items: center;
color: #fff;
background: var(--green);
flex: 0 0 auto;
box-shadow: 0 12px 28px rgba(71, 111, 99, .18);
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover {
--lift: -6px;
}
@keyframes nodeFloat {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-5px); }
}
@keyframes treePulse {
0%, 100% { opacity: .5; transform: scale(.92); }
50% { opacity: 1; transform: scale(1.08); }
}
@media (max-width: 720px) {
.hero-copy { padding-left: 0; }
.hero-copy:before { display: none; }
.genealogy-stats { flex-direction: column; }
.genealogy-stats div + div { border-left: 0; border-top: 1px solid rgba(218, 201, 174, .78); }
}
+211
View File
@@ -0,0 +1,211 @@
.help-hero .container {
min-height: 440px;
padding-top: 74px;
padding-bottom: 74px;
}
.hero-copy {
position: relative;
padding-left: 28px;
}
.hero-copy:before {
content: "";
position: absolute;
left: 0;
top: 58px;
width: 4px;
height: 132px;
border-radius: 999px;
background: linear-gradient(180deg, var(--red), var(--gold));
}
.help-tags {
display: flex;
gap: 12px;
margin-top: 28px;
flex-wrap: wrap;
}
.help-tags span {
padding: 10px 14px;
border: 1px solid rgba(224, 211, 189, .78);
border-radius: 999px;
color: #6d766f;
background: rgba(255,253,248,.74);
box-shadow: 0 14px 32px rgba(72, 57, 38, .06);
font-weight: 800;
transition: transform .22s ease, color .22s ease, background .22s ease;
}
.help-tags span:hover {
color: #fff;
background: var(--green);
transform: translateY(-3px);
}
.help-card {
position: relative;
overflow: hidden;
display: grid;
align-content: center;
gap: 14px;
}
.help-card:before {
content: "";
position: absolute;
inset: 0;
background:
linear-gradient(rgba(196,146,69,.06) 1px, transparent 1px),
linear-gradient(90deg, rgba(196,146,69,.06) 1px, transparent 1px);
background-size: 34px 34px;
opacity: .72;
}
.help-card h3,
.help-card p,
.help-card .btn,
.help-icon {
position: relative;
z-index: 2;
}
.help-orb {
position: absolute;
right: -70px;
top: -80px;
width: 220px;
height: 220px;
border-radius: 50%;
background: radial-gradient(circle, rgba(200, 59, 50, .13), transparent 62%);
animation: helpPulse 4s ease-in-out infinite;
}
.help-icon {
width: 52px;
height: 52px;
border-radius: 16px;
display: grid;
place-items: center;
color: #fff;
background: var(--green);
font-size: 26px;
font-weight: 900;
box-shadow: 0 14px 32px rgba(71, 111, 99, .2);
transition: transform .26s ease, background .26s ease;
}
.help-card:hover .help-icon {
background: var(--red);
transform: rotate(-8deg) scale(1.08);
}
.faq-section {
position: relative;
overflow: hidden;
}
.faq-section:before {
content: "";
position: absolute;
left: 50%;
top: 58px;
width: 520px;
height: 180px;
border-radius: 50%;
background: radial-gradient(circle, rgba(196, 146, 69, .09), transparent 68%);
transform: translateX(-50%);
}
.faq-list {
/* 帮助文章接口会替换 FAQ 内容,固定列表容器宽度避免加载后跳动 */
position: relative;
max-width: 880px;
margin: 0 auto;
display: grid;
gap: 14px;
}
.faq-list details {
padding: 22px 24px;
border: 1px solid var(--line);
border-radius: 18px;
background: #fffdf8;
box-shadow: 0 12px 34px rgba(57, 48, 36, .06);
transition: transform .24s ease, box-shadow .24s ease, border-color .24s ease, background .24s ease;
}
.faq-list.is-loading {
min-height: 220px;
}
.faq-list details:hover,
.faq-list details[open] {
border-color: rgba(196, 146, 69, .42);
box-shadow: 0 22px 54px rgba(57, 48, 36, .1);
}
.faq-list summary {
position: relative;
cursor: pointer;
color: var(--ink);
font-size: 20px;
font-weight: 800;
list-style: none;
padding-left: 34px;
}
.faq-list summary::-webkit-details-marker {
display: none;
}
.faq-list summary:before {
content: "";
position: absolute;
left: 0;
top: 8px;
width: 0;
height: 0;
border-top: 7px solid transparent;
border-bottom: 7px solid transparent;
border-left: 10px solid var(--green-dark);
transition: transform .24s ease, border-left-color .24s ease;
}
.faq-list details[open] summary:before {
border-left-color: var(--red);
transform: rotate(90deg);
}
.faq-list p {
margin: 14px 0 0;
padding-left: 34px;
color: var(--muted);
line-height: 1.8;
animation: faqReveal .24s ease both;
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover {
--lift: -6px;
}
@keyframes helpPulse {
0%, 100% { opacity: .5; transform: scale(.92); }
50% { opacity: 1; transform: scale(1.08); }
}
@keyframes faqReveal {
from { opacity: 0; transform: translateY(-4px); }
to { opacity: 1; transform: translateY(0); }
}
@media (max-width: 720px) {
.hero-copy { padding-left: 0; }
.hero-copy:before { display: none; }
}
+1398
View File
File diff suppressed because it is too large Load Diff
+17
View File
@@ -0,0 +1,17 @@
/* 加入家谱页只保留单页差异,公共认证卡片样式在 public.css */
.page-join-genealogy .auth-card {
width: min(500px, 100%);
}
.invite-box {
padding: 14px;
border: 1px dashed var(--gold);
border-radius: 22px;
background: #fffaf1;
}
.page-join-genealogy textarea.input {
/* 申请说明需要多行输入,仍复用公共输入框视觉 */
min-height: 112px;
resize: vertical;
}
+54
View File
@@ -0,0 +1,54 @@
/* 登录页只保留单页差异,公共认证卡片样式在 public.css */
.page-login .auth-card {
width: min(440px, 100%);
}
.login-mode-tabs {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 8px;
margin: 18px 0 16px;
padding: 4px;
border: 1px solid rgba(138, 64, 42, .14);
border-radius: 8px;
background: rgba(255, 255, 255, .72);
}
/* 登录方式按钮只负责状态呈现,切换逻辑在 auth-pages.js */
.login-mode-tab {
min-height: 38px;
border: 0;
border-radius: 6px;
background: transparent;
color: var(--muted);
font: inherit;
cursor: pointer;
}
.login-mode-tab.is-active {
background: var(--brand);
color: #fff;
box-shadow: 0 8px 20px rgba(138, 64, 42, .18);
}
.login-mode-panel[hidden] {
display: none;
}
.page-login .code-row {
display: grid;
grid-template-columns: minmax(0, 1fr) 124px;
gap: 10px;
}
@media (max-width: 720px) {
.page-login .auth-layout {
align-items: start;
}
}
@media (max-width: 620px) {
.page-login .code-row {
grid-template-columns: 1fr;
}
}
+126
View File
@@ -0,0 +1,126 @@
.notice-hero .container {
min-height: 420px;
padding-top: 74px;
padding-bottom: 74px;
}
.hero-copy {
position: relative;
padding-left: 28px;
}
.hero-copy:before {
content: "";
position: absolute;
left: 0;
top: 58px;
width: 4px;
height: 132px;
border-radius: 999px;
background: linear-gradient(180deg, var(--red), var(--gold));
}
.article-meta {
display: flex;
gap: 12px;
margin-top: 28px;
flex-wrap: wrap;
}
.article-meta span {
padding: 10px 14px;
border: 1px solid rgba(224, 211, 189, .78);
border-radius: 999px;
color: #6d766f;
background: rgba(255,253,248,.74);
font-weight: 800;
}
.notice-card {
display: grid;
place-items: center;
text-align: center;
color: #fff;
background: linear-gradient(145deg, var(--green-dark), var(--green));
}
.notice-card span {
width: 88px;
height: 88px;
border-radius: 50%;
display: grid;
place-items: center;
color: var(--red);
background: rgba(255,253,248,.94);
font-family: "SimSun", "Songti SC", serif;
font-size: 42px;
font-weight: 900;
}
.notice-card p {
margin: 18px 0 0;
color: rgba(255,255,255,.88);
font-size: 22px;
}
.notice-layout {
display: grid;
grid-template-columns: minmax(0, 820px) 300px;
gap: 28px;
align-items: start;
}
.notice-content,
.notice-side {
border: 1px solid var(--line);
border-radius: 18px;
background: rgba(255,253,248,.82);
box-shadow: 0 20px 54px rgba(57, 48, 36, .08);
}
.notice-content {
padding: 42px;
}
.notice-content p {
color: #5f665f;
font-size: 18px;
line-height: 2;
}
.notice-side {
padding: 24px;
}
.notice-side a {
display: block;
margin-top: 12px;
padding: 14px 16px;
border: 1px solid var(--line);
border-radius: 14px;
color: #6f4a37;
background: #fbf7ed;
transition: transform .22s ease, color .22s ease, background .22s ease;
}
.notice-side a:hover {
color: #fff;
background: var(--green);
transform: translateX(5px);
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover { --lift: -6px; }
@media (max-width: 900px) {
.notice-layout { grid-template-columns: 1fr; }
}
@media (max-width: 720px) {
.hero-copy { padding-left: 0; }
.hero-copy:before { display: none; }
}
+243
View File
@@ -0,0 +1,243 @@
.plaza-hero .container {
min-height: 440px;
padding-top: 74px;
padding-bottom: 74px;
}
.hero-copy {
position: relative;
padding-left: 28px;
}
.hero-copy:before {
content: "";
position: absolute;
left: 0;
top: 58px;
width: 4px;
height: 132px;
border-radius: 999px;
background: linear-gradient(180deg, var(--red), var(--gold));
}
.plaza-stats {
display: flex;
gap: 12px;
margin-top: 28px;
flex-wrap: wrap;
}
.plaza-stats span {
padding: 12px 16px;
border: 1px solid rgba(224, 211, 189, .78);
border-radius: 16px;
color: #6d766f;
background: rgba(255, 253, 248, .74);
box-shadow: 0 14px 32px rgba(72, 57, 38, .06);
}
.plaza-stats b {
margin-right: 6px;
color: var(--green);
font-size: 22px;
}
.search-card {
position: relative;
display: grid;
gap: 20px;
align-content: center;
overflow: hidden;
}
.search-card h3 {
position: relative;
z-index: 2;
}
.search-ornament {
position: absolute;
right: -70px;
top: -84px;
width: 220px;
height: 220px;
border-radius: 50%;
background: radial-gradient(circle, rgba(200, 59, 50, .13), transparent 62%);
animation: plazaPulse 4s ease-in-out infinite;
}
.search-toolbar {
position: relative;
z-index: 2;
padding: 8px;
border: 1px solid rgba(224, 211, 189, .78);
border-radius: 999px;
background: rgba(255, 250, 241, .82);
}
.search-card .input {
flex: 1 1 280px;
border: 0;
background: transparent;
}
.search-card .tag-row {
position: relative;
z-index: 2;
}
.family-card.featured {
min-height: 300px;
position: relative;
overflow: hidden;
display: flex;
flex-direction: column;
justify-content: flex-end;
color: #fff;
background:
linear-gradient(180deg, rgba(28, 48, 45, .18), rgba(21, 55, 51, .84)),
linear-gradient(135deg, #476f63, #a95c3e);
border-radius: 18px;
padding: 28px;
box-shadow: 0 22px 58px rgba(42, 65, 59, .16);
}
.family-card.featured:before {
content: "";
position: absolute;
inset: 0;
background:
linear-gradient(rgba(255, 255, 255, .08) 1px, transparent 1px),
linear-gradient(90deg, rgba(255, 255, 255, .08) 1px, transparent 1px);
background-size: 34px 34px;
opacity: .45;
}
.family-card.featured h3,
.family-card.featured p,
.family-card.featured .tag-row,
.family-badge {
position: relative;
z-index: 2;
}
.family-card.featured p {
color: rgba(255, 255, 255, .82);
}
.family-badge {
width: fit-content;
margin-bottom: auto;
padding: 7px 12px;
border-radius: 999px;
color: var(--green-dark);
background: rgba(255, 253, 248, .86);
font-weight: 800;
font-size: 13px;
}
.family-card-shine {
position: absolute;
left: -40%;
top: 0;
width: 34%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .28), transparent);
transform: skewX(-18deg);
transition: left .6s ease;
}
.family-card.featured:hover .family-card-shine {
left: 112%;
}
.family-lite {
min-height: 300px;
position: relative;
overflow: hidden;
}
.family-lite:after {
content: "";
position: absolute;
right: -60px;
bottom: -70px;
width: 170px;
height: 170px;
border-radius: 50%;
background: radial-gradient(circle, rgba(196, 146, 69, .13), transparent 68%);
transition: transform .28s ease, opacity .28s ease;
}
.family-lite:hover:after {
transform: scale(1.25);
opacity: .8;
}
.family-icon {
width: 52px;
height: 52px;
margin-bottom: 24px;
border-radius: 16px;
display: grid;
place-items: center;
color: var(--red);
background: #f7e4dc;
font-family: "SimSun", "Songti SC", serif;
font-size: 26px;
font-weight: 800;
transition: transform .26s ease, background .26s ease, color .26s ease;
}
.family-lite:hover .family-icon {
color: #fff;
background: var(--red);
transform: rotate(-6deg) scale(1.08);
}
.tag {
transition: transform .22s ease, color .22s ease, background .22s ease;
}
.tag:hover {
color: #fff;
background: var(--green);
transform: translateY(-2px);
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover {
--lift: -6px;
}
@keyframes plazaPulse {
0%,
100% {
opacity: .5;
transform: scale(.92);
}
50% {
opacity: 1;
transform: scale(1.08);
}
}
@media (max-width: 720px) {
.hero-copy {
padding-left: 0;
}
.hero-copy:before {
display: none;
}
.search-toolbar {
border-radius: 18px;
}
}
+722
View File
@@ -0,0 +1,722 @@
.page-profile-module {
background: #f8f4ec;
}
.module-hero {
position: relative;
overflow: hidden;
padding: 58px 0 42px;
background:
radial-gradient(circle at 76% 18%, rgba(196, 146, 69, .16), transparent 25%),
linear-gradient(125deg, #fffaf0 0%, #f5eadb 52%, #eaf2ee 100%);
}
.module-hero:before {
content: "";
position: absolute;
inset: 0;
background-image:
linear-gradient(rgba(138, 50, 43, .05) 1px, transparent 1px),
linear-gradient(90deg, rgba(138, 50, 43, .05) 1px, transparent 1px);
background-size: 64px 64px;
mask-image: linear-gradient(90deg, transparent, #000 14%, #000 86%, transparent);
}
.module-hero .container {
position: relative;
z-index: 2;
}
.module-kicker {
width: fit-content;
margin-bottom: 18px;
padding: 8px 14px;
border-radius: 999px;
color: var(--red);
background: rgba(248, 229, 223, .92);
font-weight: 900;
}
.module-title-row {
display: flex;
justify-content: space-between;
gap: 22px;
align-items: flex-end;
}
.module-title-row h1 {
margin-bottom: 12px;
font-size: 48px;
}
.module-title-row p {
max-width: 780px;
margin: 0;
color: #636c65;
font-size: 17px;
line-height: 1.9;
}
.module-layout {
display: grid;
grid-template-columns: 280px minmax(0, 1fr);
gap: 24px;
align-items: start;
}
.module-nav,
.module-panel,
.module-card {
border: 1px solid rgba(224, 211, 189, .86);
border-radius: 18px;
background: rgba(255,253,248,.88);
box-shadow: 0 22px 58px rgba(57, 48, 36, .08);
}
.module-nav {
position: sticky;
top: 106px;
display: grid;
gap: 8px;
padding: 16px;
}
.module-nav a {
padding: 14px 16px;
border-radius: 14px;
color: #5e665f;
font-weight: 900;
transition: transform .22s ease, color .22s ease, background .22s ease;
}
.module-nav a:hover,
.module-nav a.active {
color: var(--red);
background: #f8e5df;
transform: translateX(4px);
}
.module-main {
display: grid;
gap: 20px;
}
.module-panel {
padding: 28px;
}
.module-panel h2 {
margin-bottom: 10px;
font-family: "SimSun", "Songti SC", serif;
font-size: 32px;
}
.module-panel > p {
color: var(--muted);
line-height: 1.85;
}
.module-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 18px;
}
.module-grid.two {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.module-card {
position: relative;
overflow: hidden;
min-height: 170px;
padding: 22px;
transition: transform .22s ease, border-color .22s ease, box-shadow .22s ease;
}
.module-action-card {
/* 按钮型模块卡片用于消息中心操作,保留卡片视觉但去掉浏览器按钮默认样式 */
width: 100%;
text-align: left;
cursor: pointer;
font: inherit;
}
.notification-row.is-unread {
/* 未读消息用轻量背景强调,不新增内联样式 */
border-color: rgba(200, 59, 50, .28);
background: #fff7f2;
}
.join-apply-row {
/* 加入申请行复用 module-row,只补充审核业务的按钮对齐 */
align-items: center;
}
.join-apply-row .bottom-actions {
justify-content: flex-end;
}
.generation-row {
/* 字辈谱行复用 module-row,补充按钮型 pill 的对齐和点击反馈 */
align-items: center;
}
.generation-row .pill {
border: 0;
cursor: pointer;
font: inherit;
}
.lineage-row {
/* 世系人物行使用 button 承载点击详情,保留列表卡片视觉 */
width: 100%;
text-align: left;
cursor: pointer;
font: inherit;
}
.lineage-row.is-selected {
border-color: rgba(200, 59, 50, .38);
background: #fff6f1;
}
.lineage-toolbar {
/* 搜索栏只做世系图页面差异布局,不放到 JS 内联样式 */
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 12px;
margin-bottom: 16px;
}
.lineage-toolbar input {
min-height: 46px;
padding: 12px 14px;
border: 1px solid var(--line);
border-radius: 8px;
background: #fffdf8;
color: var(--ink);
font: inherit;
outline: none;
}
.lineage-tree-wrap {
overflow-x: auto;
padding: 18px;
border: 1px solid var(--line);
border-radius: 8px;
background: #fffdf8;
}
.lineage-tree-wrap.is-compact {
max-height: 420px;
}
.lineage-tree,
.lineage-tree ul {
/* 树结构只负责层级缩进,避免用 JS 计算位置 */
display: grid;
gap: 12px;
margin: 0;
padding-left: 24px;
list-style: none;
}
.lineage-tree {
padding-left: 0;
}
.lineage-node {
min-width: 168px;
padding: 12px 14px;
border: 1px solid rgba(224, 211, 189, .86);
border-radius: 8px;
background: #fff7f2;
color: var(--ink);
text-align: left;
cursor: pointer;
font: inherit;
}
.lineage-node strong,
.lineage-node span {
display: block;
}
.lineage-node span {
margin-top: 4px;
color: var(--muted);
font-size: 13px;
}
.member-admin-row {
/* 成员管理行保留列表结构,右侧放权限和移除操作 */
align-items: center;
}
.row-actions {
display: flex;
gap: 10px;
flex-wrap: wrap;
justify-content: flex-end;
}
.pill.is-danger {
color: #8a322b;
background: #fde8e2;
}
.article-row {
/* 谱文列表行复用模块列表视觉,单独保留类名方便后续文章样式调整 */
align-items: center;
}
.feed-row {
/* 家族圈动态行右侧承载点赞和评论按钮 */
align-items: center;
}
.feed-row small {
display: block;
margin-top: 6px;
color: var(--muted);
}
.album-row,
.album-photo-row {
/* 相册和照片行使用独立类名,便于后续相册页单独调样式 */
align-items: center;
}
.album-photo-form {
margin-top: 18px;
}
.upload-control {
/* 公共上传按钮使用 label 触发文件选择,避免 JS 注入按钮样式 */
width: fit-content;
min-height: 42px;
display: inline-flex;
align-items: center;
justify-content: center;
margin-top: 10px;
padding: 10px 14px;
border-radius: 8px;
color: var(--red);
background: #f8e5df;
font-weight: 900;
cursor: pointer;
}
.upload-input {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip: rect(0 0 0 0);
white-space: nowrap;
}
.upload-status {
margin: 8px 0 0;
color: var(--muted);
font-size: 14px;
}
.ceremony-row,
.ceremony-gift-row,
.merit-row {
/* 贺礼、献礼和功德记录行复用模块列表,仅补业务类名方便维护 */
align-items: center;
}
.ceremony-gift-form {
margin-top: 18px;
}
.growth-row {
/* 成长记录行复用模块列表,单独留类名方便后续调整 */
align-items: center;
}
.memo-row {
/* 备忘录行复用模块列表,单独留类名方便后续调整 */
align-items: center;
}
.vip-package-list {
/* 会员套餐列表用网格呈现,套餐卡片由接口数据渲染 */
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 16px;
margin: 18px 0;
}
.vip-package-card {
min-height: 188px;
padding: 20px;
border: 1px solid rgba(224, 211, 189, .86);
border-radius: 8px;
background: #fffdf8;
color: var(--ink);
text-align: left;
cursor: pointer;
font: inherit;
transition: border-color .22s ease, box-shadow .22s ease, transform .22s ease;
}
.vip-package-card:hover,
.vip-package-card.is-selected {
border-color: rgba(200, 59, 50, .48);
box-shadow: 0 18px 42px rgba(57, 48, 36, .1);
transform: translateY(-2px);
}
.vip-package-name,
.vip-package-card strong,
.vip-package-card small {
display: block;
}
.vip-package-name {
margin-bottom: 12px;
color: var(--red);
font-weight: 900;
}
.vip-package-card strong {
margin-bottom: 6px;
font-size: 30px;
}
.vip-package-card small {
color: var(--muted);
}
.vip-package-card p {
margin: 14px 0 0;
color: var(--muted);
line-height: 1.7;
}
.vip-order-form {
margin-top: 20px;
}
.vip-order-row {
/* 会员订单行只补业务类名,方便和其他 module-row 分开维护 */
align-items: center;
}
.security-form {
/* 安全设置表单复用编辑表单结构,只补模块间距 */
margin-top: 16px;
}
.security-danger {
border-color: rgba(138, 50, 43, .28);
background: #fff7f2;
}
.security-danger .editor-field input,
.security-danger .editor-field textarea {
background: #fffdf8;
}
.region-profile-form {
/* 个人资料地区表单使用公共地区选择器,样式集中在 CSS */
margin-top: 16px;
}
.profile-region-picker {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px;
}
.profile-region-picker select {
min-height: 48px;
padding: 12px 14px;
border: 1px solid var(--line);
border-radius: 8px;
background: #fffdf8;
color: var(--ink);
font: inherit;
outline: none;
}
.profile-create-family-form {
/* 个人中心创建家谱页复用编辑表单,只保留页面级间距 */
margin-top: 16px;
}
.module-card:hover {
border-color: rgba(196, 146, 69, .42);
box-shadow: 0 24px 60px rgba(57, 48, 36, .11);
}
.module-card.is-selected {
border-color: rgba(200, 59, 50, .5);
background: #fff6f1;
box-shadow: 0 24px 60px rgba(200, 59, 50, .12);
}
.module-card:after {
content: "";
position: absolute;
inset: 0 auto 0 -42%;
width: 34%;
background: linear-gradient(90deg, transparent, rgba(255,255,255,.52), transparent);
transform: skewX(-18deg);
transition: left .54s ease;
}
.module-card:hover:after {
left: 112%;
}
.module-card .icon {
width: 46px;
height: 46px;
margin-bottom: 18px;
border-radius: 14px;
display: grid;
place-items: center;
color: var(--red);
background: #f8e5df;
font-weight: 900;
}
.module-card h3 {
margin-bottom: 8px;
font-size: 23px;
}
.module-card p {
color: var(--muted);
line-height: 1.75;
}
.module-list {
display: grid;
gap: 14px;
}
.module-row {
display: grid;
grid-template-columns: 1fr auto;
gap: 16px;
align-items: center;
padding: 18px 20px;
border: 1px solid var(--line);
border-radius: 15px;
background: #fffdf8;
}
.module-row h3 {
margin-bottom: 4px;
font-size: 22px;
}
.module-row p {
margin: 0;
color: var(--muted);
}
.pill {
padding: 7px 12px;
border-radius: 999px;
color: var(--red);
background: #f8e5df;
font-weight: 900;
white-space: nowrap;
}
.form-like {
display: grid;
overflow: hidden;
border: 1px solid var(--line);
border-radius: 16px;
background: #fffdf8;
}
.form-like p {
display: grid;
grid-template-columns: 170px 1fr auto;
gap: 16px;
margin: 0;
padding: 18px 20px;
border-bottom: 1px solid var(--line);
align-items: center;
}
.form-like p:last-child {
border-bottom: 0;
}
.form-like span {
color: var(--muted);
}
.form-like b {
color: var(--ink);
}
.bottom-actions {
display: flex;
gap: 14px;
flex-wrap: wrap;
}
.editor-form {
display: grid;
gap: 18px;
}
.profile-data-form {
/* 个人资料编辑表单只补充本页间距,基础控件继续复用 editor-form。 */
margin-top: 14px;
}
.editor-field {
display: grid;
gap: 10px;
}
.editor-field label {
color: var(--ink);
font-weight: 900;
}
.editor-field input,
.editor-field select,
.editor-field textarea {
width: 100%;
min-height: 48px;
padding: 12px 14px;
border: 1px solid var(--line);
border-radius: 8px;
background: #fffdf8;
color: var(--ink);
font: inherit;
outline: none;
transition: border-color .2s ease, box-shadow .2s ease;
}
.editor-field textarea {
min-height: 160px;
resize: vertical;
}
.editor-field input:focus,
.editor-field select:focus,
.editor-field textarea:focus {
border-color: rgba(200, 59, 50, .45);
box-shadow: 0 0 0 4px rgba(200, 59, 50, .08);
}
.editor-two {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 16px;
}
.profile-form-actions {
/* 保存状态跟随按钮排列,避免用 JS 写入临时样式。 */
align-items: center;
}
.form-status {
color: var(--muted);
font-weight: 800;
}
.generation-batch-form {
/* 批量字辈表单复用编辑表单,只补充本页预览前的间距。 */
margin-top: 14px;
}
.generation-batch-check {
display: flex;
gap: 10px;
align-items: center;
color: var(--muted);
font-weight: 800;
}
.generation-batch-check input {
width: 18px;
height: 18px;
accent-color: var(--red);
}
.generation-batch-actions {
align-items: center;
}
.generation-batch-preview {
margin-top: 18px;
}
.upload-box {
min-height: 136px;
border: 1px dashed rgba(138, 50, 43, .28);
border-radius: 8px;
display: grid;
place-items: center;
color: var(--red);
background: #fff8f2;
font-weight: 900;
cursor: pointer;
}
.switch-row {
display: flex;
gap: 18px;
flex-wrap: wrap;
align-items: center;
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover {
--lift: -5px;
}
@media (max-width: 1060px) {
.module-layout,
.module-grid,
.module-grid.two,
.vip-package-list {
grid-template-columns: 1fr;
}
.module-nav {
position: static;
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 720px) {
.module-title-row {
display: grid;
}
.module-title-row h1 {
font-size: 38px;
}
.module-nav {
grid-template-columns: 1fr;
}
.form-like p,
.module-row,
.editor-two,
.profile-region-picker {
grid-template-columns: 1fr;
}
}
+613
View File
@@ -0,0 +1,613 @@
.page-profile {
background: #f8f4ec;
}
.profile-hero {
position: relative;
overflow: hidden;
padding: 62px 0 34px;
background:
radial-gradient(circle at 78% 12%, rgba(196, 146, 69, .18), transparent 25%),
linear-gradient(125deg, #fffaf0 0%, #f4eadb 48%, #eaf2ee 100%);
}
.profile-hero:before {
content: "";
position: absolute;
inset: 0;
background-image:
linear-gradient(rgba(138, 50, 43, .05) 1px, transparent 1px),
linear-gradient(90deg, rgba(138, 50, 43, .05) 1px, transparent 1px);
background-size: 64px 64px;
mask-image: linear-gradient(90deg, transparent, #000 14%, #000 86%, transparent);
}
.profile-hero-grid {
position: relative;
z-index: 2;
display: grid;
grid-template-columns: minmax(0, 1fr) 420px;
gap: 24px;
align-items: stretch;
}
.profile-card,
.profile-stats,
.panel,
.side-card {
border: 1px solid rgba(224, 211, 189, .84);
border-radius: 18px;
background: rgba(255, 253, 248, .86);
box-shadow: 0 22px 58px rgba(57, 48, 36, .08);
}
.profile-card {
display: grid;
grid-template-columns: 116px 1fr;
gap: 28px;
padding: 34px;
align-items: center;
}
.avatar-wrap {
position: relative;
width: 108px;
height: 108px;
}
.avatar {
width: 108px;
height: 108px;
border-radius: 28px;
display: grid;
place-items: center;
color: #fff;
background:
radial-gradient(circle at 30% 24%, rgba(255, 255, 255, .38), transparent 24%),
linear-gradient(145deg, var(--red), #ee8d60 52%, var(--green));
font-family: "SimSun", "Songti SC", serif;
font-size: 46px;
font-weight: 900;
box-shadow: 0 18px 40px rgba(200, 59, 50, .18);
}
.avatar-wrap span {
position: absolute;
right: -4px;
bottom: -4px;
width: 28px;
height: 28px;
border: 5px solid #fffdf8;
border-radius: 50%;
background: #31bf6b;
}
.profile-info h1 {
margin-bottom: 12px;
font-size: 44px;
}
.profile-info p {
max-width: 720px;
color: #636c65;
font-size: 17px;
line-height: 1.9;
}
.profile-tags,
.mini-actions {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.profile-tags span,
.mini-actions span {
padding: 7px 12px;
border-radius: 999px;
color: var(--red);
background: #f8e5df;
font-size: 14px;
font-weight: 800;
}
.profile-stats {
display: grid;
grid-template-columns: repeat(2, 1fr);
padding: 22px;
gap: 14px;
}
.profile-stats div {
min-height: 116px;
padding: 20px;
border-radius: 14px;
display: grid;
align-content: center;
background: rgba(247, 239, 226, .72);
}
.profile-stats strong {
color: var(--green);
font-size: 34px;
line-height: 1;
}
.profile-stats span,
.panel-head p,
.data-list span,
.todo-list span,
.family-card p,
.feature-tile p,
.content-tile p {
color: var(--muted);
line-height: 1.75;
}
.dashboard-section {
padding-top: 42px;
}
.dashboard-layout {
display: grid;
grid-template-columns: 300px minmax(0, 1fr);
gap: 24px;
align-items: start;
}
.dashboard-side {
position: sticky;
top: 106px;
display: grid;
gap: 20px;
}
.side-card,
.panel {
padding: 26px;
}
.side-card h2,
.panel h2 {
margin-bottom: 8px;
font-family: "SimSun", "Songti SC", serif;
font-size: 30px;
}
.user-actions {
display: grid;
gap: 10px;
}
.user-actions a,
.todo-list a {
display: block;
padding: 15px 16px;
border: 1px solid var(--line);
border-radius: 14px;
background: #fbf7ed;
transition: transform .22s ease, border-color .22s ease, background .22s ease, color .22s ease;
}
.user-actions a:hover,
.todo-list a:hover {
transform: translateX(5px);
border-color: rgba(71, 111, 99, .28);
background: #eef4ef;
}
.user-actions span,
.todo-list b {
display: block;
color: var(--ink);
font-weight: 900;
}
.user-actions b {
display: block;
margin-top: 4px;
color: var(--muted);
font-size: 13px;
}
.logout-link span {
color: var(--red);
}
.card-head,
.panel-head {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 18px;
margin-bottom: 22px;
}
.card-head span {
padding: 6px 11px;
border-radius: 999px;
color: #fff;
background: var(--red);
font-weight: 800;
}
.todo-list,
.dashboard-main {
display: grid;
gap: 18px;
}
.panel-head.compact {
margin-bottom: 18px;
}
.panel-head h2 {
margin-bottom: 6px;
}
.family-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 18px;
}
.family-card {
display: grid;
grid-template-columns: 112px 1fr;
gap: 20px;
min-height: 190px;
padding: 20px;
border: 1px solid var(--line);
border-radius: 16px;
background: #fffdf8;
transition: transform .22s ease, border-color .22s ease, box-shadow .22s ease;
}
.family-card:hover,
.feature-tile:hover,
.content-tile:hover {
border-color: rgba(196, 146, 69, .42);
box-shadow: 0 22px 52px rgba(57, 48, 36, .1);
}
.book-cover {
min-height: 150px;
border-radius: 10px;
display: grid;
place-items: center;
color: #fffdf8;
background:
linear-gradient(90deg, transparent calc(100% - 16px), rgba(255, 255, 255, .7) calc(100% - 15px), transparent calc(100% - 14px)),
linear-gradient(135deg, #0f405c, #092c42);
font-family: "SimSun", "Songti SC", serif;
font-size: 22px;
line-height: 1.7;
text-align: center;
box-shadow: inset -12px 0 0 rgba(255, 255, 255, .08);
}
.book-cover.alt {
background:
linear-gradient(90deg, transparent calc(100% - 16px), rgba(255, 255, 255, .7) calc(100% - 15px), transparent calc(100% - 14px)),
linear-gradient(135deg, #173c35, #785f35);
}
.family-card h3,
.feature-tile h3,
.content-tile h3 {
margin-bottom: 8px;
font-size: 24px;
}
.feature-grid,
.content-grid,
.service-grid {
display: grid;
gap: 16px;
}
.management-grid {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.feature-tile,
.content-tile {
position: relative;
overflow: hidden;
min-height: 170px;
padding: 22px;
border: 1px solid var(--line);
border-radius: 16px;
background: #fffdf8;
transition: transform .22s ease, border-color .22s ease, box-shadow .22s ease;
}
.feature-tile span,
.content-tile span {
width: 48px;
height: 48px;
margin-bottom: 18px;
border-radius: 14px;
display: grid;
place-items: center;
color: var(--red);
background: #f7e4dc;
font-weight: 900;
}
.feature-tile:after,
.content-tile:after {
content: "";
position: absolute;
inset: 0 auto 0 -42%;
width: 34%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .52), transparent);
transform: skewX(-18deg);
transition: left .54s ease;
}
.feature-tile:hover:after,
.content-tile:hover:after {
left: 112%;
}
.content-grid {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.content-tile.large {
grid-column: span 2;
color: #fff;
background: linear-gradient(145deg, var(--green-dark), var(--green));
}
.content-tile.large p,
.content-tile.large h3 {
color: rgba(255, 255, 255, .86);
}
.content-tile.large span {
color: var(--green-dark);
background: rgba(255, 253, 248, .9);
}
.profile-data-layout {
display: grid;
grid-template-columns: 1.15fr .85fr;
gap: 18px;
}
.link-btn {
flex: 0 0 auto;
padding: 9px 14px;
border-radius: 999px;
color: var(--red);
background: #f8e5df;
font-weight: 900;
}
.data-list {
display: grid;
border-top: 1px solid var(--line);
}
.data-list p {
display: grid;
grid-template-columns: 150px 1fr;
gap: 16px;
margin: 0;
padding: 16px 0;
border-bottom: 1px solid var(--line);
}
.data-list b {
color: var(--ink);
}
.service-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.service-grid a {
min-height: 88px;
padding: 18px;
border-radius: 14px;
display: grid;
place-items: center;
color: #6f4a37;
background: #fbf7ed;
border: 1px solid var(--line);
font-weight: 900;
transition: transform .22s ease, color .22s ease, background .22s ease;
}
.service-grid a:hover {
color: #fff;
background: var(--green);
transform: translateY(-3px);
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover {
--lift: -5px;
}
.logout-modal {
position: fixed;
inset: 0;
z-index: 80;
display: grid;
place-items: center;
padding: 24px;
opacity: 0;
pointer-events: none;
transition: opacity .22s ease;
}
.logout-modal.show {
opacity: 1;
pointer-events: auto;
}
.logout-modal-backdrop {
position: absolute;
inset: 0;
background: rgba(32, 35, 34, .46);
backdrop-filter: blur(10px);
}
.logout-dialog {
position: relative;
z-index: 1;
width: min(420px, 100%);
padding: 34px;
border-radius: 8px;
background: #fff;
box-shadow: 0 28px 80px rgba(61, 73, 68, .24);
text-align: center;
transform: translateY(12px) scale(.98);
transition: transform .22s ease;
}
.logout-modal.show .logout-dialog {
transform: translateY(0) scale(1);
}
.logout-close {
position: absolute;
top: 14px;
right: 14px;
width: 34px;
height: 34px;
border: 0;
border-radius: 50%;
background: #f4f1eb;
color: #7f786f;
font-size: 24px;
line-height: 1;
cursor: pointer;
transition: transform .2s ease, background .2s ease, color .2s ease;
}
.logout-close:hover {
transform: rotate(90deg);
background: var(--red-soft);
color: var(--red);
}
.logout-icon {
display: inline-grid;
place-items: center;
width: 58px;
height: 58px;
border-radius: 50%;
margin-bottom: 16px;
background: var(--red-soft);
color: var(--red);
font-weight: 800;
}
.logout-dialog h2 {
margin: 0 0 10px;
font-size: 24px;
color: var(--ink);
}
.logout-dialog p {
margin: 0;
color: var(--muted);
line-height: 1.8;
}
.logout-actions {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
margin-top: 26px;
}
.logout-actions .btn {
justify-content: center;
}
.logout-modal-open {
overflow: hidden;
}
@media (max-width: 1120px) {
.profile-hero-grid,
.dashboard-layout,
.profile-data-layout {
grid-template-columns: 1fr;
}
.dashboard-side {
position: static;
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.content-grid,
.management-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 760px) {
.profile-hero {
padding-top: 36px;
}
.profile-card {
grid-template-columns: 1fr;
padding: 24px;
}
.profile-info h1 {
font-size: 36px;
}
.profile-stats,
.dashboard-side,
.family-grid,
.content-grid,
.management-grid,
.service-grid {
grid-template-columns: 1fr;
}
.family-card {
grid-template-columns: 88px 1fr;
}
.book-cover {
min-height: 120px;
font-size: 18px;
}
.content-tile.large {
grid-column: span 1;
}
.panel-head,
.card-head {
display: grid;
}
.data-list p {
grid-template-columns: 1fr;
gap: 4px;
}
.logout-dialog {
padding: 30px 22px;
}
.logout-actions {
grid-template-columns: 1fr;
}
}
+126
View File
@@ -0,0 +1,126 @@
.promo-hero .container {
min-height: 440px;
padding-top: 74px;
padding-bottom: 74px;
}
.hero-copy {
position: relative;
padding-left: 28px;
}
.hero-copy:before {
content: "";
position: absolute;
left: 0;
top: 58px;
width: 4px;
height: 132px;
border-radius: 999px;
background: linear-gradient(180deg, var(--red), var(--gold));
}
.promo-tags {
display: flex;
gap: 12px;
margin-top: 28px;
flex-wrap: wrap;
}
.promo-tags span {
padding: 10px 14px;
border: 1px solid rgba(224, 211, 189, .78);
border-radius: 999px;
color: #6d766f;
background: rgba(255, 253, 248, .74);
font-weight: 800;
transition: transform .22s ease, color .22s ease, background .22s ease;
}
.promo-tags span:hover {
color: #fff;
background: var(--green);
transform: translateY(-3px);
}
.album-preview {
display: grid;
grid-template-columns: 1.2fr 1fr;
grid-template-rows: repeat(2, 130px);
gap: 14px;
overflow: hidden;
}
.album-photo {
border-radius: 18px;
background: radial-gradient(circle at 72% 24%, rgba(255, 255, 255, .75) 0 8%, transparent 9%), linear-gradient(135deg, #e7c89e, #b94135 48%, #143d57);
box-shadow: 0 16px 36px rgba(57, 48, 36, .08);
transition: transform .26s ease;
}
.album-photo.large {
grid-row: 1 / 3;
background: linear-gradient(180deg, rgba(28, 48, 45, .1), rgba(21, 55, 51, .72)), url("../images/ancestral-hall.png") center/cover;
}
.album-photo.warm {
background: linear-gradient(135deg, #f0d8ac, #c49245 45%, #7d342d);
}
.album-photo.green {
background: linear-gradient(135deg, #dfd1b5, #6b7f70 48%, #26302c);
}
.album-preview:hover .album-photo {
transform: scale(1.025);
}
.album-card {
min-height: 180px;
position: relative;
overflow: hidden;
}
.album-card:after {
content: "";
position: absolute;
left: -42%;
top: 0;
width: 36%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .54), transparent);
transform: skewX(-18deg);
transition: left .56s ease;
}
.album-card:hover:after {
left: 112%;
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover {
--lift: -6px;
}
@media (max-width: 720px) {
.hero-copy {
padding-left: 0;
}
.hero-copy:before {
display: none;
}
.album-preview {
grid-template-columns: 1fr;
grid-template-rows: repeat(4, 120px);
}
.album-photo.large {
grid-row: auto;
}
}
+140
View File
@@ -0,0 +1,140 @@
.promo-hero .container {
min-height: 440px;
padding-top: 74px;
padding-bottom: 74px;
}
.hero-copy {
position: relative;
padding-left: 28px;
}
.hero-copy:before {
content: "";
position: absolute;
left: 0;
top: 58px;
width: 4px;
height: 132px;
border-radius: 999px;
background: linear-gradient(180deg, var(--red), var(--gold));
}
.promo-tags {
display: flex;
gap: 12px;
margin-top: 28px;
flex-wrap: wrap;
}
.promo-tags span {
padding: 10px 14px;
border: 1px solid rgba(224, 211, 189, .78);
border-radius: 999px;
color: #6d766f;
background: rgba(255, 253, 248, .74);
font-weight: 800;
transition: transform .22s ease, color .22s ease, background .22s ease;
}
.promo-tags span:hover {
color: #fff;
background: var(--green);
transform: translateY(-3px);
}
.video-preview {
min-height: 300px;
position: relative;
overflow: hidden;
display: flex;
flex-direction: column;
justify-content: flex-end;
color: #fff;
background: linear-gradient(180deg, rgba(31, 63, 55, .1), rgba(25, 39, 34, .86)), url("../images/ancestral-hall.png") center/cover;
}
.video-preview:before {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(rgba(255, 255, 255, .08) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, .08) 1px, transparent 1px);
background-size: 34px 34px;
opacity: .35;
}
.video-preview h3,
.video-preview p,
.play-button {
position: relative;
z-index: 2;
}
.video-preview p {
color: rgba(255, 255, 255, .8);
}
.play-button {
width: 64px;
height: 64px;
margin-bottom: 46px;
border-radius: 50%;
background: rgba(255, 255, 255, .94);
box-shadow: 0 14px 34px rgba(0, 0, 0, .2);
transition: transform .24s ease;
}
.play-button:after {
content: "";
position: absolute;
left: 26px;
top: 19px;
border-top: 13px solid transparent;
border-bottom: 13px solid transparent;
border-left: 20px solid var(--red);
}
.video-preview:hover .play-button {
transform: scale(1.08);
}
.video-card {
min-height: 180px;
position: relative;
overflow: hidden;
}
.video-card:after {
content: "";
position: absolute;
left: -42%;
top: 0;
width: 36%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .54), transparent);
transform: skewX(-18deg);
transition: left .56s ease;
}
.video-card:hover:after {
left: 112%;
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover {
--lift: -6px;
}
@media (max-width: 720px) {
.hero-copy {
padding-left: 0;
}
.hero-copy:before {
display: none;
}
}
+900
View File
@@ -0,0 +1,900 @@
:root {
--red: #c83b32;
--red-soft: #f4ded8;
--green: #476f63;
--green-dark: #213f38;
--gold: #c49245;
--ink: #26302c;
--muted: #737b76;
--paper: #fbf7ed;
--paper-2: #f7efe2;
--line: #eadfce;
--white: #fffdf8;
--shadow: 0 24px 70px rgba(69, 53, 35, .12);
}
.auth-layer-message {
/* 认证页 layui 消息提示皮肤,替代浏览器原生 alert。 */
min-width: 160px;
border-radius: 999px !important;
background: rgba(38, 48, 44, .94) !important;
box-shadow: 0 16px 42px rgba(38, 48, 44, .24) !important;
}
.auth-layer-message .layui-layer-content {
padding: 10px 18px !important;
color: #fffdf8 !important;
font-size: 14px;
font-weight: 800;
line-height: 1.6;
text-align: center;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
color: var(--ink);
font-family: "Microsoft YaHei", "PingFang SC", Arial, sans-serif;
background: var(--paper);
}
a {
color: inherit;
text-decoration: none;
}
img {
max-width: 100%;
display: block;
}
@media (hover: hover) and (pointer: fine) {
a,
.btn,
.card,
button,
summary {
cursor: pointer;
}
}
.container {
width: min(1280px, calc(100% - 72px));
margin: 0 auto;
}
.site-header {
position: sticky;
top: 0;
z-index: 20;
background:
linear-gradient(115deg, rgba(110, 38, 32, .96) 0%, rgba(200, 59, 50, .96) 48%, rgba(139, 52, 39, .96) 100%);
border-bottom: 1px solid rgba(255, 253, 248, .2);
box-shadow:
0 4px 0 rgba(93, 30, 26, .2),
0 18px 38px rgba(83, 32, 26, .34),
0 30px 70px rgba(83, 32, 26, .22);
backdrop-filter: blur(18px);
}
.nav {
height: 82px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 28px;
}
.brand {
display: flex !important;
align-items: center;
gap: 12px;
padding: 8px 14px;
border-radius: 999px;
background: rgba(255, 253, 248, .92);
box-shadow: 0 10px 28px rgba(63, 28, 22, .18);
font-size: 24px;
font-weight: 800;
white-space: nowrap;
}
.brand-logo {
display: block;
width: 270px;
height: auto;
}
.footer .brand-logo {
width: 270px;
}
.auth-page-brand .brand-logo {
width: 220px;
}
.brand-logo-mark {
width: 48px;
height: 48px;
}
.brand-text {
color: var(--ink);
font-weight: 900;
}
.brand-mark {
width: 40px;
height: 40px;
border-radius: 50%;
display: grid;
place-items: center;
color: #fff;
background: var(--red);
box-shadow: 0 10px 24px rgba(200, 59, 50, .22);
font-weight: 800;
}
.nav-links {
display: flex;
align-items: center;
gap: 26px;
color: rgba(255, 253, 248, .78);
font-size: 15px;
white-space: nowrap;
}
.nav-links a.active,
.nav-links a:hover {
color: #fff7d8;
}
.nav-links a,
.nav-actions a {
position: relative;
transition: color .22s ease, transform .22s ease;
}
.nav-links a:after {
content: "";
position: absolute;
left: 0;
right: 0;
bottom: -10px;
height: 2px;
border-radius: 999px;
background: linear-gradient(90deg, #f5d99b, #fff3c8);
transform: scaleX(0);
transform-origin: center;
transition: transform .24s ease;
}
.nav-links a.active:after,
.nav-links a:hover:after {
transform: scaleX(1);
}
.nav-actions {
display: flex;
align-items: center;
gap: 14px;
color: rgba(255, 253, 248, .86);
font-size: 15px;
white-space: nowrap;
}
.btn {
min-width: 118px;
height: 44px;
padding: 0 24px;
border-radius: 999px;
display: inline-flex;
align-items: center;
justify-content: center;
border: 1px solid transparent;
font-weight: 800;
transition: transform .22s ease, box-shadow .22s ease, border-color .22s ease, background .22s ease;
will-change: transform;
}
.btn:hover {
transform: translateY(-2px);
}
.btn.primary {
color: #fff;
background: var(--red);
box-shadow: 0 14px 30px rgba(200, 59, 50, .24);
}
.btn.primary:hover {
box-shadow: 0 18px 38px rgba(200, 59, 50, .3);
}
.site-header .btn.primary {
color: #8f332b;
background: linear-gradient(135deg, #fff8e6, #f1d49a);
box-shadow: 0 12px 28px rgba(64, 26, 21, .22);
}
.site-header .btn.primary:hover {
box-shadow: 0 16px 34px rgba(64, 26, 21, .3);
}
.btn.ghost {
color: var(--red);
border-color: rgba(200, 59, 50, .28);
background: rgba(255, 255, 255, .68);
}
.inner-hero {
position: relative;
overflow: hidden;
background:
radial-gradient(circle at 82% 12%, rgba(196, 146, 69, .16), transparent 24%),
linear-gradient(125deg, #fffaf0 0%, #f7efe2 48%, #edf4ef 100%);
}
.inner-hero:before {
content: "";
position: absolute;
inset: 0;
background-image:
linear-gradient(rgba(138, 50, 43, .05) 1px, transparent 1px),
linear-gradient(90deg, rgba(138, 50, 43, .05) 1px, transparent 1px);
background-size: 68px 68px;
mask-image: linear-gradient(90deg, transparent, #000 14%, #000 86%, transparent);
}
.inner-hero .container {
position: relative;
z-index: 2;
min-height: 410px;
padding: 68px 0 72px;
display: grid;
grid-template-columns: .9fr 1.1fr;
gap: 54px;
align-items: center;
}
.eyebrow {
display: inline-flex;
align-items: center;
gap: 12px;
margin-bottom: 22px;
color: #8a5a3b;
font-weight: 800;
}
.eyebrow:before {
content: "";
width: 42px;
height: 2px;
background: var(--red);
}
h1,
h2,
h3,
h4,
p {
margin-top: 0;
}
h1 {
margin-bottom: 20px;
color: var(--ink);
font-family: "SimSun", "Songti SC", serif;
font-size: 52px;
line-height: 1.16;
}
h2 {
margin-bottom: 14px;
font-family: "SimSun", "Songti SC", serif;
font-size: 42px;
line-height: 1.25;
}
h3 {
margin-bottom: 12px;
font-size: 23px;
}
.lead {
max-width: 620px;
margin-bottom: 0;
color: #645d52;
font-size: 18px;
line-height: 1.9;
}
.hero-card {
min-height: 260px;
padding: 28px;
border: 1px solid rgba(224, 211, 189, .88);
border-radius: 24px;
background: rgba(255, 253, 248, .92);
box-shadow: var(--shadow);
}
.section {
padding: 76px 0;
}
.section.alt {
background: #fffdf8;
}
.section-head {
margin-bottom: 34px;
text-align: center;
}
.section-head p {
max-width: 720px;
margin: 14px auto 0;
color: var(--muted);
font-size: 17px;
line-height: 1.9;
}
.grid-2,
.grid-3,
.grid-4 {
display: grid;
gap: 22px;
}
.grid-2 {
grid-template-columns: repeat(2, 1fr);
}
.grid-3 {
grid-template-columns: repeat(3, 1fr);
}
.grid-4 {
grid-template-columns: repeat(4, 1fr);
}
.card {
padding: 24px;
border-radius: 18px;
background: #fffdf8;
border: 1px solid var(--line);
box-shadow: 0 16px 42px rgba(57, 48, 36, .07);
transition: transform .24s ease, box-shadow .24s ease, border-color .24s ease, background .24s ease;
will-change: transform;
}
.card:hover {
transform: translateY(-6px);
border-color: rgba(196, 146, 69, .38);
box-shadow: 0 24px 60px rgba(57, 48, 36, .11);
}
.card.soft {
background: #fbf7ed;
}
.card.dark {
color: #fff;
background: linear-gradient(155deg, var(--green-dark), var(--green));
}
.card.dark p {
color: rgba(255, 255, 255, .78);
}
.card p,
.muted {
color: var(--muted);
line-height: 1.8;
}
.tag-row {
display: flex;
gap: 10px;
flex-wrap: wrap;
}
.tag {
padding: 6px 12px;
border-radius: 999px;
color: var(--green);
background: #eaf0eb;
font-size: 14px;
font-weight: 700;
}
.toolbar {
display: flex;
gap: 12px;
align-items: center;
flex-wrap: wrap;
}
.input,
select,
textarea {
width: 100%;
min-height: 48px;
padding: 0 16px;
border: 1px solid #e2d4bf;
border-radius: 999px;
color: var(--ink);
background: #fbf8f1;
font: inherit;
}
textarea {
min-height: 128px;
padding: 14px 16px;
border-radius: 18px;
resize: vertical;
}
.form-grid {
display: grid;
gap: 16px;
}
.form-card {
max-width: 560px;
margin: 0 auto;
padding: 34px;
}
.auth-layout {
min-height: calc(100vh - 82px);
display: grid;
place-items: center;
padding: 62px 24px;
background:
radial-gradient(circle at 18% 20%, rgba(200, 59, 50, .09), transparent 24%),
linear-gradient(125deg, #fffaf0, #f7efe2 54%, #edf4ef);
}
/* 认证类页面共用祖堂背景,登录、注册、找回密码只保留自己的差异样式 */
.auth-scenic-layout {
position: relative;
isolation: isolate;
min-height: 100vh;
padding: 56px 24px 72px;
place-items: center;
background:
linear-gradient(90deg, rgba(255, 253, 248, .86), rgba(255, 253, 248, .46) 45%, rgba(255, 253, 248, .88)),
linear-gradient(135deg, rgba(200, 59, 50, .08), transparent 34%),
url("../images/ancestral-hall-new.png") center / cover no-repeat;
}
.auth-scenic-layout:before {
content: "";
position: absolute;
inset: 0;
z-index: -1;
background:
linear-gradient(180deg, rgba(251, 247, 237, .42), rgba(251, 247, 237, .86)),
radial-gradient(circle at 50% 42%, rgba(255, 253, 248, .3), transparent 30%);
backdrop-filter: blur(2px);
}
.auth-page-brand {
position: absolute;
left: clamp(18px, 4vw, 56px);
top: clamp(18px, 4vw, 42px);
z-index: 3;
}
/* 认证卡片公共样式,避免登录、注册、找回密码页面重复维护 */
.auth-card {
width: min(440px, 100%);
padding: 38px;
border-radius: 16px;
border-color: rgba(224, 211, 189, .9);
background: rgba(255, 253, 248, .94);
box-shadow: 0 26px 70px rgba(57, 48, 36, .16);
}
.auth-card:hover {
transform: none;
}
.auth-card h1 {
margin-bottom: 12px;
font-size: 40px;
}
.auth-card .lead {
margin-bottom: 28px;
font-size: 16px;
}
.auth-card .form-grid {
gap: 14px;
}
.auth-card .input {
height: 50px;
background: #fffaf1;
}
.auth-card .btn.primary,
.auth-card .btn.ghost {
position: relative;
overflow: hidden;
height: 50px;
}
.auth-card .btn.primary {
width: 100%;
margin-top: 2px;
}
.auth-card .btn.primary:before,
.auth-card .btn.ghost:before {
content: "";
position: absolute;
top: 0;
bottom: 0;
left: -45%;
width: 38%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .34), transparent);
transform: skewX(-18deg);
transition: left .48s ease;
}
.auth-card .btn.primary:hover,
.auth-card .btn.ghost:hover {
transform: translateY(-3px) scale(1.012);
}
.auth-card .btn.primary:hover {
box-shadow: 0 18px 42px rgba(200, 59, 50, .34);
}
.auth-card .btn.ghost:hover {
color: #fff;
border-color: rgba(200, 59, 50, .2);
background: var(--red);
box-shadow: 0 16px 34px rgba(200, 59, 50, .2);
}
.auth-card .btn.primary:hover:before,
.auth-card .btn.ghost:hover:before {
left: 110%;
}
.auth-card .btn.primary:active,
.auth-card .btn.ghost:active {
transform: translateY(-1px) scale(.99);
}
.auth-links {
display: flex;
justify-content: space-between;
gap: 16px;
color: #8a5a3b;
font-weight: 800;
}
.auth-links a {
transition: color .22s ease, transform .22s ease;
}
.auth-links a:hover {
color: var(--red);
transform: translateY(-1px);
}
.auth-captcha-box {
/* 认证页滑动验证挂载点,TAC 内部 DOM 由第三方库生成 */
display: flex;
justify-content: center;
}
.auth-captcha-box:empty {
display: none;
}
.auth-captcha-box #tianai-captcha-parent {
max-width: 100%;
}
.auth-captcha-modal {
/* 认证页滑动验证弹窗挂载点,TAC 内部 DOM 由第三方库生成 */
position: fixed;
inset: 0;
z-index: 1000;
display: grid;
place-items: center;
padding: 24px;
background: rgba(38, 48, 44, .32);
backdrop-filter: blur(4px);
}
.auth-captcha-modal:empty {
display: none;
}
.auth-captcha-modal #tianai-captcha-parent {
max-width: min(318px, calc(100vw - 32px));
max-height: calc(100vh - 32px);
}
/* 验证码输入和按钮的通用双列布局,窄屏在页面 CSS 中改为单列 */
.code-row {
display: grid;
grid-template-columns: 1fr auto;
gap: 12px;
}
/* 接口请求期间的公共状态,只由 JS 切换 class,不在 JS 内写样式 */
.is-loading {
pointer-events: none;
opacity: .72;
}
/* 接口列表为空时的统一占位样式 */
.api-empty {
padding: 22px;
border: 1px dashed var(--line);
border-radius: 14px;
color: var(--muted);
background: rgba(255, 253, 248, .7);
text-align: center;
font-weight: 800;
}
.footer {
padding: 60px 0 36px;
color: rgba(255, 255, 255, .78);
background: #3f3a35;
}
.footer-grid {
display: grid;
grid-template-columns: 1.2fr repeat(3, 1fr);
gap: 48px;
padding-bottom: 38px;
border-bottom: 1px solid rgba(255, 255, 255, .12);
}
.footer h4 {
margin: 0 0 18px;
color: #fff;
font-size: 17px;
}
.footer p,
.footer a {
display: block;
color: inherit;
margin: 10px 0;
line-height: 1.8;
}
.footer a {
width: fit-content;
transition: color .22s ease, transform .22s ease;
}
.footer a:hover {
color: #fff;
transform: translateX(4px);
}
.footer .brand {
padding: 0;
border-radius: 0;
background: transparent;
box-shadow: none;
}
.footer .brand:hover {
transform: translateX(0) translateY(-2px);
}
.copyright,
.footer-legal {
padding-top: 28px;
color: rgba(255, 255, 255, .48);
font-size: 14px;
}
.footer-legal {
display: flex;
align-items: center;
justify-content: flex-start;
gap: 14px;
flex-wrap: wrap;
text-align: left;
}
.footer-legal a {
display: inline-flex;
width: auto;
margin: 0;
color: inherit;
font-size: inherit;
line-height: inherit;
}
.footer-legal a:hover {
color: #fff;
transform: none;
}
.profile-layer-confirm {
border-radius: 8px !important;
overflow: hidden;
}
.profile-layer-confirm .layui-layer-title {
height: 50px;
line-height: 50px;
border-bottom: 1px solid rgba(224, 211, 189, .72);
background: #fffaf0;
color: var(--ink);
font-weight: 900;
}
.profile-layer-confirm .layui-layer-content {
color: var(--muted);
line-height: 1.8;
}
.profile-layer-confirm .layui-layer-btn a {
border-radius: 999px;
}
.profile-layer-confirm .layui-layer-btn .layui-layer-btn0 {
border-color: var(--red);
background: var(--red);
}
.pending-layer-dialog {
border-radius: 8px !important;
overflow: hidden;
box-shadow: 0 20px 60px rgba(38, 30, 21, .18) !important;
}
.pending-layer-dialog .layui-layer-title {
height: 52px;
line-height: 52px;
border-bottom: 1px solid rgba(224, 211, 189, .72);
background: #fffaf0;
color: var(--ink);
font-weight: 900;
font-size: 16px;
}
.pending-layer-dialog .layui-layer-content {
padding: 28px 28px 16px !important;
color: var(--ink);
font-size: 16px;
line-height: 1.8;
text-align: center;
}
.pending-layer-dialog .layui-layer-btn {
padding: 0 24px 24px;
text-align: center;
}
.pending-layer-dialog .layui-layer-btn a {
height: 38px;
min-width: 108px;
padding: 0 24px;
border-radius: 999px;
line-height: 38px;
font-weight: 800;
}
.pending-layer-dialog .layui-layer-btn .layui-layer-btn0 {
border-color: var(--red);
background: var(--red);
}
.profile-popup-select {
display: grid;
gap: 10px;
padding: 4px 0;
}
.profile-popup-select button {
width: 100%;
min-height: 42px;
border: 1px solid var(--line);
border-radius: 8px;
background: #fffdf8;
color: var(--ink);
font: inherit;
font-weight: 900;
cursor: pointer;
transition: border-color .2s ease, color .2s ease, background .2s ease;
}
.profile-popup-select button:hover {
border-color: rgba(200, 59, 50, .38);
color: var(--red);
background: #fff4ef;
}
@media (max-width: 1120px) {
.nav-links {
display: none;
}
.inner-hero .container,
.grid-2 {
grid-template-columns: 1fr;
}
.grid-3,
.grid-4 {
grid-template-columns: repeat(2, 1fr);
}
.footer-grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 720px) {
.container {
width: calc(100% - 28px);
}
.nav-actions a:not(.btn) {
display: none;
}
.inner-hero .container {
padding: 46px 0 54px;
}
h1 {
font-size: 38px;
}
h2 {
font-size: 32px;
}
.grid-3,
.grid-4,
.footer-grid {
grid-template-columns: 1fr;
}
.auth-scenic-layout {
padding: 36px 14px 48px;
align-items: start;
}
.auth-card {
padding: 28px 22px;
}
.auth-card h1 {
font-size: 34px;
}
}
@media (prefers-reduced-motion: reduce) {
*,
*:before,
*:after {
animation-duration: .01ms !important;
animation-iteration-count: 1 !important;
scroll-behavior: auto !important;
transition-duration: .01ms !important;
}
}
+10
View File
@@ -0,0 +1,10 @@
/* 注册页只保留单页差异,公共认证卡片样式在 public.css */
.page-register .auth-links {
justify-content: center;
}
@media (max-width: 720px) {
.page-register .auth-layout {
align-items: start;
}
}
+119
View File
@@ -0,0 +1,119 @@
.result-hero .container {
min-height: 420px;
padding-top: 74px;
padding-bottom: 74px;
}
.hero-copy {
position: relative;
padding-left: 28px;
}
.hero-copy:before {
content: "";
position: absolute;
left: 0;
top: 58px;
width: 4px;
height: 132px;
border-radius: 999px;
background: linear-gradient(180deg, var(--red), var(--gold));
}
.result-search {
display: grid;
gap: 18px;
align-content: center;
}
.result-search .toolbar {
padding: 8px;
border: 1px solid rgba(224, 211, 189, .78);
border-radius: 999px;
background: rgba(255, 250, 241, .82);
}
.result-search .input {
flex: 1 1 260px;
border: 0;
background: transparent;
}
.result-list {
display: grid;
gap: 18px;
max-width: 920px;
margin: 0 auto;
}
.result-card {
position: relative;
overflow: hidden;
padding: 26px;
border: 1px solid var(--line);
border-radius: 18px;
background: rgba(255, 253, 248, .82);
box-shadow: 0 18px 48px rgba(57, 48, 36, .07);
transition: transform .24s ease, border-color .24s ease, box-shadow .24s ease;
}
.result-card:after {
content: "";
position: absolute;
right: -70px;
bottom: -80px;
width: 180px;
height: 180px;
border-radius: 50%;
background: radial-gradient(circle, rgba(196, 146, 69, .13), transparent 68%);
transition: transform .28s ease;
}
.result-card:hover {
border-color: rgba(196, 146, 69, .42);
box-shadow: 0 24px 60px rgba(57, 48, 36, .11);
}
.result-card:hover:after {
transform: scale(1.2);
}
.result-card span {
display: inline-flex;
margin-bottom: 12px;
padding: 7px 12px;
border-radius: 999px;
color: var(--green-dark);
background: #e8f0eb;
font-weight: 800;
font-size: 13px;
}
.result-card p {
margin: 0;
color: var(--muted);
line-height: 1.8;
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover {
--lift: -6px;
}
@media (max-width: 720px) {
.hero-copy {
padding-left: 0;
}
.hero-copy:before {
display: none;
}
.result-search .toolbar {
border-radius: 18px;
}
}
+111
View File
@@ -0,0 +1,111 @@
.ticket-hero .container {
min-height: 420px;
padding-top: 74px;
padding-bottom: 74px;
}
.hero-copy {
position: relative;
padding-left: 28px;
}
.hero-copy:before {
content: "";
position: absolute;
left: 0;
top: 58px;
width: 4px;
height: 132px;
border-radius: 999px;
background: linear-gradient(180deg, var(--red), var(--gold));
}
.ticket-tip {
display: grid;
place-items: center;
text-align: center;
background: linear-gradient(145deg, var(--green-dark), var(--green));
color: #fff;
}
.ticket-tip span {
width: 88px;
height: 88px;
border-radius: 50%;
display: grid;
place-items: center;
color: var(--red);
background: rgba(255, 253, 248, .94);
font-size: 28px;
font-weight: 900;
}
.ticket-tip p {
max-width: 360px;
margin: 18px 0 0;
color: rgba(255, 255, 255, .86);
line-height: 1.8;
}
.ticket-layout {
display: grid;
grid-template-columns: minmax(0, 720px) 320px;
gap: 26px;
align-items: start;
}
.ticket-form {
max-width: none;
}
.ticket-form textarea {
min-height: 150px;
padding-top: 16px;
border-radius: 18px;
resize: vertical;
}
.ticket-side {
padding: 26px;
border: 1px solid var(--line);
border-radius: 18px;
background: rgba(255, 253, 248, .82);
box-shadow: 0 20px 54px rgba(57, 48, 36, .08);
}
.ticket-side p {
color: var(--muted);
line-height: 1.8;
}
.ticket-side a {
display: inline-flex;
margin-top: 10px;
color: var(--red);
font-weight: 800;
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover {
--lift: -6px;
}
@media (max-width: 900px) {
.ticket-layout {
grid-template-columns: 1fr;
}
}
@media (max-width: 720px) {
.hero-copy {
padding-left: 0;
}
.hero-copy:before {
display: none;
}
}
+169
View File
@@ -0,0 +1,169 @@
.surname-detail-hero .container {
min-height: 440px;
padding-top: 74px;
padding-bottom: 74px;
}
.hero-copy {
position: relative;
padding-left: 28px;
}
.hero-copy:before {
content: "";
position: absolute;
left: 0;
top: 58px;
width: 4px;
height: 132px;
border-radius: 999px;
background: linear-gradient(180deg, var(--red), var(--gold));
}
.detail-actions {
display: flex;
gap: 14px;
margin-top: 30px;
flex-wrap: wrap;
}
.surname-emblem {
position: relative;
overflow: hidden;
display: grid;
place-items: center;
text-align: center;
color: #fff;
background:
radial-gradient(circle at 72% 24%, rgba(255, 255, 255, .28) 0 10%, transparent 11%),
linear-gradient(135deg, #476f63, #c49245 54%, #8f4634);
}
.surname-emblem span {
width: 112px;
height: 112px;
border-radius: 50%;
display: grid;
place-items: center;
color: var(--red);
background: rgba(255, 253, 248, .95);
font-family: "SimSun", "Songti SC", serif;
font-size: 58px;
font-weight: 800;
transition: transform .24s ease;
}
.surname-emblem:hover span {
transform: rotate(-8deg) scale(1.08);
}
.surname-emblem p {
margin: 18px 0 0;
color: rgba(255, 255, 255, .9);
font-size: 22px;
}
.surname-detail-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 24px;
}
.content-card,
.related-panel {
border: 1px solid var(--line);
border-radius: 18px;
background: rgba(255, 253, 248, .82);
box-shadow: 0 20px 54px rgba(57, 48, 36, .08);
}
.content-card {
padding: 30px;
}
.content-card:first-child {
grid-column: 1 / -1;
}
.content-card p {
color: var(--muted);
font-size: 17px;
line-height: 1.9;
}
.generation-row {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.generation-row span {
width: 54px;
height: 54px;
border-radius: 14px;
display: grid;
place-items: center;
color: #7c4a33;
background: #fbf7ed;
border: 1px solid var(--line);
font-family: "SimSun", "Songti SC", serif;
font-size: 24px;
font-weight: 800;
transition: transform .22s ease, color .22s ease, background .22s ease;
}
.generation-row span:hover {
color: #fff;
background: var(--red);
transform: translateY(-5px);
}
.related-panel {
padding: 26px;
}
.related-panel a {
display: block;
margin-top: 12px;
padding: 14px 16px;
border: 1px solid var(--line);
border-radius: 14px;
color: #6f4a37;
background: #fbf7ed;
transition: transform .22s ease, color .22s ease, background .22s ease;
}
.related-panel a:hover {
color: #fff;
background: var(--green);
transform: translateX(5px);
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover {
--lift: -6px;
}
@media (max-width: 860px) {
.surname-detail-grid {
grid-template-columns: 1fr;
}
.content-card:first-child {
grid-column: auto;
}
}
@media (max-width: 720px) {
.hero-copy {
padding-left: 0;
}
.hero-copy:before {
display: none;
}
}
+229
View File
@@ -0,0 +1,229 @@
.surname-hero .container {
min-height: 440px;
padding-top: 74px;
padding-bottom: 74px;
}
.hero-copy {
position: relative;
padding-left: 28px;
}
.hero-copy:before {
content: "";
position: absolute;
left: 0;
top: 58px;
width: 4px;
height: 132px;
border-radius: 999px;
background: linear-gradient(180deg, var(--red), var(--gold));
}
.surname-stats {
display: flex;
gap: 12px;
margin-top: 28px;
flex-wrap: wrap;
}
.surname-stats span {
padding: 11px 14px;
border: 1px solid rgba(224, 211, 189, .78);
border-radius: 999px;
color: #6d766f;
background: rgba(255, 253, 248, .74);
box-shadow: 0 14px 32px rgba(72, 57, 38, .06);
}
.surname-stats b {
margin-right: 6px;
color: var(--green);
}
.surname-search-card {
position: relative;
overflow: hidden;
display: grid;
gap: 18px;
align-content: center;
}
.search-ornament {
position: absolute;
right: -72px;
top: -84px;
width: 220px;
height: 220px;
border-radius: 50%;
background: radial-gradient(circle, rgba(200, 59, 50, .13), transparent 62%);
animation: surnamePulse 4s ease-in-out infinite;
}
.surname-search-card h3,
.search-toolbar,
.hot-query {
position: relative;
z-index: 2;
}
.search-toolbar {
padding: 8px;
border: 1px solid rgba(224, 211, 189, .78);
border-radius: 999px;
background: rgba(255, 250, 241, .82);
}
.search-toolbar .input {
flex: 1 1 280px;
border: 0;
background: transparent;
}
.hot-query {
display: flex;
gap: 10px;
flex-wrap: wrap;
}
.hot-query span {
width: 38px;
height: 38px;
border-radius: 12px;
display: grid;
place-items: center;
color: #7c4a33;
background: #fbf7ed;
border: 1px solid var(--line);
font-family: "SimSun", "Songti SC", serif;
font-weight: 800;
transition: transform .22s ease, color .22s ease, background .22s ease;
}
.hot-query span:hover {
color: #fff;
background: var(--red);
transform: translateY(-4px);
}
.surname-list-section {
position: relative;
overflow: hidden;
}
.surname-list-section:before {
content: "";
position: absolute;
left: 50%;
top: 58px;
width: 520px;
height: 180px;
border-radius: 50%;
background: radial-gradient(circle, rgba(196, 146, 69, .09), transparent 68%);
transform: translateX(-50%);
}
.surname-grid {
position: relative;
display: grid;
grid-template-columns: repeat(8, 1fr);
gap: 12px;
padding: 24px;
border: 1px solid rgba(224, 211, 189, .8);
border-radius: 24px;
background: rgba(255, 253, 248, .72);
box-shadow: 0 22px 60px rgba(57, 48, 36, .08);
}
.surname-grid a {
height: 64px;
border-radius: 14px;
display: grid;
place-items: center;
color: #7c4a33;
background: #fbf7ed;
border: 1px solid var(--line);
font-family: "SimSun", "Songti SC", serif;
font-size: 24px;
font-weight: 800;
transition: transform .24s ease, color .24s ease, background .24s ease, border-color .24s ease, box-shadow .24s ease;
will-change: transform;
}
.surname-grid a:hover {
color: #fff;
background: var(--red);
border-color: rgba(200, 59, 50, .72);
box-shadow: 0 16px 34px rgba(200, 59, 50, .18);
transform: translateY(-6px) scale(1.03);
}
.surname-grid:hover a {
animation: surnameFloat 1.9s ease-in-out infinite;
}
.surname-grid:hover a:nth-child(2n) {
animation-delay: .08s;
}
.surname-grid:hover a:nth-child(3n) {
animation-delay: .14s;
}
.surname-grid:hover a:nth-child(4n) {
animation-delay: .2s;
}
.tilt-card {
transform: perspective(900px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--lift, 0));
transition: transform .18s ease, box-shadow .24s ease, border-color .24s ease;
}
.tilt-card:hover {
--lift: -6px;
}
@keyframes surnameFloat {
0%,
100% {
transform: translateY(0);
}
50% {
transform: translateY(-4px);
}
}
@keyframes surnamePulse {
0%,
100% {
opacity: .5;
transform: scale(.92);
}
50% {
opacity: 1;
transform: scale(1.08);
}
}
@media (max-width: 720px) {
.hero-copy {
padding-left: 0;
}
.hero-copy:before {
display: none;
}
.search-toolbar {
border-radius: 18px;
}
.surname-grid {
grid-template-columns: repeat(4, 1fr);
padding: 14px;
}
}