fix: enter btn shadow/glow cleanup - remove halo layer effect
This commit is contained in:
parent
d103dd9ca1
commit
7c4c97d8a6
645
index.html
645
index.html
@ -12,383 +12,79 @@
|
|||||||
<!-- 首屏 hero 图预加载,提升 LCP -->
|
<!-- 首屏 hero 图预加载,提升 LCP -->
|
||||||
<link rel="preload" as="image" href="assets/slides/01_starry_sky.webp" fetchpriority="high">
|
<link rel="preload" as="image" href="assets/slides/01_starry_sky.webp" fetchpriority="high">
|
||||||
<style>
|
<style>
|
||||||
/* 首页特有:全屏 hero 轮播 */
|
/* ===== 首页:全屏 hero 轮播 ===== */
|
||||||
html,body{overflow:hidden;}
|
|
||||||
.content{flex:1;display:flex;flex-direction:column;position:relative;overflow:hidden;}
|
|
||||||
:root{
|
|
||||||
--bg-0:#080c1a; --bg-1:#0e1730; --bg-2:#15213f;
|
|
||||||
--violet:#8b5cf6; --magenta:#c77dff; --cyan:#4cc9f0; --gold:#e7b85c;
|
|
||||||
--text:#e9edf6; --text-dim:#9aa6c4;
|
|
||||||
--card:rgba(255,255,255,.045); --card-bd:rgba(255,255,255,.10);
|
|
||||||
--glow:0 0 22px rgba(139,92,246,.28);
|
|
||||||
}
|
|
||||||
*{box-sizing:border-box;margin:0;padding:0;}
|
|
||||||
html,body{height:100%;width:100%;overflow:hidden;}
|
html,body{height:100%;width:100%;overflow:hidden;}
|
||||||
body{
|
.home-main{flex:1;display:flex;flex-direction:column;position:relative;overflow:hidden;}
|
||||||
font-family:"Noto Sans SC",system-ui,sans-serif;color:var(--text);
|
|
||||||
background:
|
|
||||||
radial-gradient(1000px 620px at 82% -8%, rgba(139,92,246,.14), transparent 60%),
|
|
||||||
radial-gradient(820px 560px at 8% 112%, rgba(76,201,240,.10), transparent 55%),
|
|
||||||
linear-gradient(160deg, var(--bg-0) 0%, var(--bg-1) 48%, var(--bg-2) 100%);
|
|
||||||
position:relative;
|
|
||||||
}
|
|
||||||
body::before,body::after{content:"";position:fixed;border-radius:50%;filter:blur(80px);z-index:0;pointer-events:none;}
|
|
||||||
body::before{width:380px;height:380px;background:rgba(139,92,246,.20);top:-110px;right:-70px;animation:fl1 20s ease-in-out infinite;}
|
|
||||||
body::after{width:340px;height:340px;background:rgba(76,201,240,.12);bottom:-110px;left:-60px;animation:fl2 24s ease-in-out infinite;}
|
|
||||||
@keyframes fl1{0%,100%{transform:translate(0,0)}50%{transform:translate(-36px,36px)}}
|
|
||||||
@keyframes fl2{0%,100%{transform:translate(0,0)}50%{transform:translate(36px,-28px)}}
|
|
||||||
|
|
||||||
.app{position:relative;z-index:2;height:100vh;display:flex;flex-direction:column;}
|
.hero{position:relative;flex:1;border-radius:0;overflow:hidden;min-height:0;}
|
||||||
.topbar{height:64px;flex:0 0 auto;display:flex;align-items:center;gap:22px;padding:0 30px;border-bottom:1px solid var(--card-bd);background:rgba(8,12,26,.55);backdrop-filter:blur(10px);}
|
|
||||||
.logo{display:flex;align-items:baseline;gap:9px;cursor:pointer;}
|
|
||||||
.logo .cn{font-family:"ZCOOL QingKe HuangYou",sans-serif;font-size:28px;letter-spacing:4px;color:#fff;text-shadow:0 0 16px rgba(139,92,246,.55);}
|
|
||||||
.logo .en{font-family:"Press Start 2P",monospace;font-size:9px;color:var(--magenta);letter-spacing:1px;}
|
|
||||||
.nav{display:flex;gap:6px;margin-left:12px;}
|
|
||||||
.nav button{font-family:"Noto Sans SC",sans-serif;font-size:15px;font-weight:500;color:var(--text-dim);background:transparent;border:1px solid transparent;padding:8px 15px;border-radius:10px;cursor:pointer;transition:.22s;}
|
|
||||||
.nav button:hover{color:var(--text);background:rgba(139,92,246,.12);}
|
|
||||||
.nav button.active{color:#fff;background:rgba(139,92,246,.22);border-color:var(--card-bd);box-shadow:var(--glow);}
|
|
||||||
.spacer{flex:1;}
|
|
||||||
.user-box{display:flex;align-items:center;gap:10px;font-size:14px;color:var(--text);}
|
|
||||||
.user-box .ub-name{color:#fff;font-weight:500;}
|
|
||||||
.user-box .ub-logout{font-family:inherit;font-size:12px;color:var(--text-dim);background:rgba(255,255,255,.06);border:1px solid var(--card-bd);padding:5px 12px;border-radius:8px;cursor:pointer;transition:.2s;}
|
|
||||||
.user-box .ub-logout:hover{color:#fff;background:rgba(139,92,246,.18);}
|
|
||||||
.user-box .auth-link{color:var(--text-dim);text-decoration:none;font-size:14px;transition:.2s;padding:5px 8px;}
|
|
||||||
.user-box .auth-link:hover{color:#fff;}
|
|
||||||
.user-box .auth-btn{font-family:inherit;font-size:13px;color:#0b1020;background:linear-gradient(120deg,var(--gold),#f0d49a);border:none;padding:6px 16px;border-radius:20px;cursor:pointer;font-weight:600;transition:.2s;}
|
|
||||||
.user-box .auth-btn:hover{filter:brightness(1.1);box-shadow:0 0 16px rgba(231,184,92,.4);}
|
|
||||||
.nav .auth-only{display:none;} /* 登录专属 tab,未登录时隐藏 */
|
|
||||||
.nav .auth-only.visible{display:inline-block;}
|
|
||||||
.cta:hover{filter:brightness(1.08);}
|
|
||||||
|
|
||||||
.content{flex:1;position:relative;overflow:hidden;}
|
|
||||||
.panel{position:absolute;inset:0;display:none;flex-direction:column;padding:28px 48px;overflow:hidden;}
|
|
||||||
.panel.active{display:flex;}
|
|
||||||
.panel-scroll{flex:1;min-height:0;overflow-y:auto;padding-right:8px;}
|
|
||||||
/* 隐藏内部滚动条但保留滚轮/触控滑动(规则/世界数据/公告/论坛/图鉴/剧情等) */
|
|
||||||
.rules-scroll,#worldDataContent,#announce .notes,.threads,.codex-grid,.story-reader,.panel-scroll,.toc-list{
|
|
||||||
scrollbar-width:none; -ms-overflow-style:none;
|
|
||||||
}
|
|
||||||
.rules-scroll::-webkit-scrollbar,#worldDataContent::-webkit-scrollbar,#announce .notes::-webkit-scrollbar,
|
|
||||||
.threads::-webkit-scrollbar,.codex-grid::-webkit-scrollbar,.story-reader::-webkit-scrollbar,
|
|
||||||
.panel-scroll::-webkit-scrollbar,.toc-list::-webkit-scrollbar{display:none;width:0;height:0;}
|
|
||||||
|
|
||||||
/* ===== 介绍(图片轮播主页) ===== */
|
|
||||||
#intro{padding:0;}
|
|
||||||
.hero{position:relative;flex:1;border-radius:0;overflow:hidden;}
|
|
||||||
.hero .slideshow{position:absolute;inset:0;overflow:hidden;}
|
.hero .slideshow{position:absolute;inset:0;overflow:hidden;}
|
||||||
.hero .slide-track{position:absolute;inset:0;display:flex;flex-direction:column;transition:transform 1.25s cubic-bezier(0.4,0,0.2,1);will-change:transform;}
|
.hero .slide-track{position:absolute;inset:0;display:flex;flex-direction:column;transition:transform 1.25s cubic-bezier(0.4,0,0.2,1);will-change:transform;}
|
||||||
.hero .slide{flex:0 0 100%;width:100%;height:100%;background-size:cover;background-position:center;position:relative;}
|
.hero .slide{flex:0 0 100%;width:100%;height:100%;background-size:cover;background-position:center;position:relative;}
|
||||||
.hero .slide::before{content:"";position:absolute;inset:0;
|
.hero .slide::before{content:"";position:absolute;inset:0;
|
||||||
background:linear-gradient(90deg, rgba(8,12,26,.92) 0%, rgba(8,12,26,.70) 22%, rgba(8,12,26,.40) 40%, transparent 58%),
|
background:linear-gradient(90deg, rgba(8,12,26,.92) 0%, rgba(8,12,26,.70) 22%, rgba(8,12,26,.40) 40%, transparent 58%),
|
||||||
linear-gradient(180deg, rgba(8,12,26,.55) 0%, transparent 35%);}
|
linear-gradient(180deg, rgba(8,12,26,.55) 0%, transparent 35%);}
|
||||||
|
|
||||||
.hero .copy{position:absolute;left:56px;top:56px;z-index:3;pointer-events:none;}
|
.hero .copy{position:absolute;left:56px;top:56px;z-index:3;pointer-events:none;}
|
||||||
.hero .copy h1{font-family:"ZCOOL QingKe HuangYou",sans-serif;font-size:56px;letter-spacing:10px;color:#fff;text-shadow:0 2px 24px rgba(0,0,0,.9),0 0 32px rgba(139,92,246,.7);line-height:1.2;}
|
.hero .copy h1{font-family:"ZCOOL QingKe HuangYou",sans-serif;font-size:56px;letter-spacing:10px;color:#fff;text-shadow:0 2px 24px rgba(0,0,0,.9),0 0 32px rgba(139,92,246,.7);line-height:1.2;}
|
||||||
.hero .copy .sub2{font-family:"Press Start 2P",monospace;font-size:11px;color:var(--gold);margin:6px 0 0;letter-spacing:2px;text-shadow:0 1px 8px rgba(0,0,0,.9);}
|
.hero .copy .sub2{font-family:"Press Start 2P",monospace;font-size:11px;color:var(--gold);margin:6px 0 0;letter-spacing:2px;text-shadow:0 1px 8px rgba(0,0,0,.9);}
|
||||||
.hero .copy .tag{font-size:20px;font-weight:500;color:#e8ecf6;margin-top:4px;text-shadow:0 1px 10px rgba(0,0,0,.85);}
|
.hero .copy .tag{font-size:20px;font-weight:500;color:#e8ecf6;margin-top:4px;text-shadow:0 1px 10px rgba(0,0,0,.85);}
|
||||||
|
|
||||||
/* 轮播标签 */
|
/* 轮播文字(左下) */
|
||||||
/* 轮播左下角特色文案 */
|
|
||||||
.slide-label{position:absolute;left:56px;bottom:72px;z-index:4;pointer-events:none;opacity:0;transform:translateY(16px);transition:opacity .8s ease, transform .8s ease;}
|
.slide-label{position:absolute;left:56px;bottom:72px;z-index:4;pointer-events:none;opacity:0;transform:translateY(16px);transition:opacity .8s ease, transform .8s ease;}
|
||||||
.slide.active .slide-label{opacity:1;transform:translateY(0);}
|
.slide.active .slide-label{opacity:1;transform:translateY(0);}
|
||||||
.slide-label .sl-en{font-family:"Press Start 2P",monospace;font-size:13px;color:var(--cyan);letter-spacing:3px;margin-bottom:10px;display:block;text-shadow:0 1px 8px rgba(0,0,0,.9);}
|
.slide-label .sl-en{font-family:"Press Start 2P",monospace;font-size:13px;color:var(--cyan);letter-spacing:3px;margin-bottom:10px;display:block;text-shadow:0 1px 8px rgba(0,0,0,.9);}
|
||||||
.slide-label .sl-cn{font-family:"ZCOOL QingKe HuangYou",sans-serif;font-size:46px;letter-spacing:7px;color:#fff;text-shadow:0 2px 22px rgba(0,0,0,.95),0 0 30px rgba(139,92,246,.65);line-height:1.25;}
|
.slide-label .sl-cn{font-family:"ZCOOL QingKe HuangYou",sans-serif;font-size:46px;letter-spacing:7px;color:#fff;text-shadow:0 2px 22px rgba(0,0,0,.95),0 0 30px rgba(139,92,246,.65);line-height:1.25;}
|
||||||
.slide-label .sl-desc{font-size:16px;color:#c8d2ec;margin-top:12px;max-width:500px;line-height:1.85;text-shadow:0 1px 8px rgba(0,0,0,.88);}
|
.slide-label .sl-desc{font-size:16px;color:#c8d2ec;margin-top:12px;max-width:500px;line-height:1.85;text-shadow:0 1px 8px rgba(0,0,0,.88);}
|
||||||
|
|
||||||
/* 指示器 */
|
/* 右下指示器 */
|
||||||
/* 轮播指示器(竖排右侧) */
|
.sl-dots{position:absolute;right:40px;bottom:96px;z-index:5;display:flex;flex-direction:column;gap:14px;pointer-events:auto;}
|
||||||
.sl-dots{position:absolute;right:40px;bottom:96px;top:auto;transform:none;z-index:5;display:flex;flex-direction:column;gap:14px;pointer-events:auto;}
|
|
||||||
.sl-dot{width:12px;height:12px;border-radius:50%;background:rgba(255,255,255,.22);border:1px solid rgba(255,255,255,.4);cursor:pointer;transition:.3s;flex:0 0 auto;}
|
.sl-dot{width:12px;height:12px;border-radius:50%;background:rgba(255,255,255,.22);border:1px solid rgba(255,255,255,.4);cursor:pointer;transition:.3s;flex:0 0 auto;}
|
||||||
.sl-dot:hover{background:rgba(255,255,255,.5);}
|
.sl-dot:hover{background:rgba(255,255,255,.5);}
|
||||||
.sl-dot.active{background:var(--gold);border-color:var(--gold);box-shadow:0 0 12px rgba(231,184,92,.6);transform:scale(1.15);}
|
.sl-dot.active{background:var(--gold);border-color:var(--gold);box-shadow:0 0 12px rgba(231,184,92,.6);transform:scale(1.15);}
|
||||||
|
|
||||||
/* 导航箭头 */
|
/* 左右箭头 */
|
||||||
.sl-arrow{position:absolute;top:50%;z-index:6;transform:translateY(-50%);width:44px;height:44px;border-radius:50%;border:1px solid rgba(255,255,255,.15);background:rgba(8,12,26,.55);backdrop-filter:blur(8px);color:#e8ecf6;font-size:18px;cursor:pointer;transition:.2s;display:flex;align-items:center;justify-content:center;pointer-events:auto;}
|
.sl-arrow{position:absolute;top:50%;z-index:6;transform:translateY(-50%);width:44px;height:44px;border-radius:50%;border:1px solid rgba(255,255,255,.15);background:rgba(8,12,26,.55);backdrop-filter:blur(8px);color:#e8ecf6;font-size:22px;cursor:pointer;transition:.2s;display:flex;align-items:center;justify-content:center;}
|
||||||
.sl-arrow:hover{background:rgba(139,92,246,.25);border-color:rgba(139,92,246,.4);box-shadow:0 0 16px rgba(139,92,246,.2);transform:translateY(-50%) scale(1.08);}
|
.sl-arrow:hover{background:rgba(139,92,246,.25);border-color:rgba(139,92,246,.4);transform:translateY(-50%) scale(1.08);}
|
||||||
.sl-arrow.prev{left:16px;}
|
.sl-arrow.prev{left:16px;}
|
||||||
.sl-arrow.next{right:16px;}
|
.sl-arrow.next{right:16px;}
|
||||||
|
|
||||||
/* 起源文案 */
|
/* 起源历史(右上竖排) */
|
||||||
/* 轮播右上角竖排「起源历史」 */
|
|
||||||
.slide-origin{position:absolute;right:72px;top:48px;z-index:4;pointer-events:none;writing-mode:vertical-rl;text-orientation:upright;
|
.slide-origin{position:absolute;right:72px;top:48px;z-index:4;pointer-events:none;writing-mode:vertical-rl;text-orientation:upright;
|
||||||
font-family:"Noto Sans SC",sans-serif;font-size:16px;font-weight:500;letter-spacing:3px;line-height:1.55;color:rgba(240,244,252,.94);
|
font-family:"Noto Sans SC",sans-serif;font-size:16px;font-weight:500;letter-spacing:3px;line-height:1.55;color:rgba(240,244,252,.94);
|
||||||
text-shadow:0 1px 3px rgba(0,0,0,.92);max-height:28vh;overflow:hidden;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;
|
text-shadow:0 1px 3px rgba(0,0,0,.92);max-height:34vh;overflow:hidden;
|
||||||
opacity:0;transform:translateY(-12px);transition:opacity .9s ease .25s, transform .9s ease .25s;}
|
opacity:0;transform:translateY(-12px);transition:opacity .9s ease .25s, transform .9s ease .25s;}
|
||||||
.slide.active .slide-origin{opacity:1;transform:translateY(0);}
|
.slide.active .slide-origin{opacity:1;transform:translateY(0);}
|
||||||
.slide-origin .so-tag{color:var(--gold);font-family:"ZCOOL QingKe HuangYou",sans-serif;font-size:19px;letter-spacing:5px;margin-bottom:7px;text-shadow:0 1px 4px rgba(0,0,0,.92),0 0 10px rgba(231,184,92,.45);}
|
.slide-origin .so-tag{color:var(--gold);font-family:"ZCOOL QingKe HuangYou",sans-serif;font-size:19px;letter-spacing:5px;margin-bottom:7px;text-shadow:0 1px 4px rgba(0,0,0,.92),0 0 10px rgba(231,184,92,.45);}
|
||||||
|
|
||||||
/* 进入游戏按钮 */
|
/* 进入游戏按钮(底部) */
|
||||||
.hero .enter-wrap{position:absolute;left:0;right:0;bottom:28px;display:flex;justify-content:center;z-index:5;}
|
.hero .enter-wrap{position:absolute;left:0;right:0;bottom:32px;display:flex;justify-content:center;z-index:5;}
|
||||||
.hero .enter-btn{font-family:"Noto Sans SC",sans-serif;font-size:17px;font-weight:700;color:#0b1020;background:linear-gradient(120deg,var(--gold),#f0d49a);padding:13px 42px;border-radius:30px;cursor:pointer;box-shadow:0 0 26px rgba(231,184,92,.5);letter-spacing:3px;transition:.25s;border:none;}
|
.hero .enter-btn{
|
||||||
.hero .enter-btn:hover{filter:brightness(1.1);transform:translateY(-2px);box-shadow:0 0 40px rgba(231,184,92,.75);}
|
font-family:"Noto Sans SC",sans-serif;font-size:17px;font-weight:600;color:#0b1020;
|
||||||
|
background:linear-gradient(135deg, #f0d49a, #e7b85c, #f0d49a);
|
||||||
|
padding:14px 48px;border-radius:30px;cursor:pointer;border:1px solid rgba(255,255,255,.3);
|
||||||
|
box-shadow:0 4px 14px rgba(231,184,92,.35), inset 0 1px 0 rgba(255,255,255,.4);
|
||||||
|
letter-spacing:2px;transition:.2s;
|
||||||
|
}
|
||||||
|
.hero .enter-btn:hover{
|
||||||
|
filter:brightness(1.08);transform:translateY(-2px);
|
||||||
|
box-shadow:0 6px 20px rgba(231,184,92,.5), inset 0 1px 0 rgba(255,255,255,.5);
|
||||||
|
}
|
||||||
|
.hero .enter-btn:active{transform:translateY(0);}
|
||||||
|
|
||||||
/* ===== 特色 ===== */
|
/* ===== 响应式 ===== */
|
||||||
#features{align-items:center;justify-content:center;gap:22px;}
|
|
||||||
.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;width:min(1060px,100%);}
|
|
||||||
.card{background:var(--card);border:1px solid var(--card-bd);border-radius:14px;padding:18px 20px;transition:.26s;min-height:132px;}
|
|
||||||
.card:hover{transform:translateY(-4px);border-color:var(--violet);box-shadow:var(--glow);background:rgba(139,92,246,.12);}
|
|
||||||
.card .ic{font-size:28px;margin-bottom:8px;filter:drop-shadow(0 0 6px rgba(199,125,255,.6));}
|
|
||||||
.card h3{font-size:17px;color:#fff;margin-bottom:7px;letter-spacing:1px;}
|
|
||||||
.card p{font-size:13px;color:var(--text-dim);line-height:1.6;}
|
|
||||||
|
|
||||||
/* ===== 背景 ===== */
|
|
||||||
#background{flex-direction:column;align-items:stretch;gap:0;overflow:hidden;padding:28px 48px;}
|
|
||||||
.bg-page{max-width:1080px;width:100%;margin:0 auto;padding:24px 0;border-top:1px solid var(--card-bd);}
|
|
||||||
.bg-page:first-child{border-top:none;padding-top:0;}
|
|
||||||
.bg-page-head{text-align:center;margin-bottom:28px;}
|
|
||||||
.bg-page-title{font-family:"Noto Serif SC",serif;font-weight:800;font-size:40px;letter-spacing:3px;line-height:1.2;margin:0 0 10px;
|
|
||||||
background:linear-gradient(120deg,#ffffff 0%,#f0d49a 48%,#c79bff 100%);
|
|
||||||
-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;}
|
|
||||||
.bg-page-sub{font-size:13px;letter-spacing:7px;color:var(--text-dim);text-transform:uppercase;}
|
|
||||||
.bg-page-body{font-size:17px;line-height:2.05;color:#e2e8f6;max-width:840px;margin:0 auto 34px;}
|
|
||||||
.bg-page-body p{margin:0 0 18px;}
|
|
||||||
.bg-page-items{display:grid;grid-template-columns:repeat(auto-fill,minmax(262px,1fr));gap:18px;}
|
|
||||||
.bg-card{display:flex;gap:15px;align-items:flex-start;background:linear-gradient(135deg,rgba(139,92,246,.10),rgba(76,201,240,.05));
|
|
||||||
border:1px solid var(--card-bd);border-radius:16px;padding:18px 20px;transition:.26s;}
|
|
||||||
.bg-card:hover{transform:translateY(-4px);border-color:var(--violet);box-shadow:var(--glow);background:rgba(139,92,246,.16);}
|
|
||||||
.bg-card-ic{font-size:27px;line-height:1.15;filter:drop-shadow(0 0 9px rgba(139,92,246,.55));flex:0 0 auto;}
|
|
||||||
.bg-card-title{font-size:17px;font-weight:700;color:#fff;margin-bottom:6px;}
|
|
||||||
.bg-card-desc{font-size:14.5px;line-height:1.66;color:var(--text-dim);}
|
|
||||||
.bg-empty{text-align:center;color:var(--text-dim);padding:70px 0;font-size:16px;}
|
|
||||||
.layers{flex:0 0 270px;display:flex;flex-direction:column;gap:8px;justify-content:center;}
|
|
||||||
.layer{border-radius:12px;padding:11px 15px;border:1px solid var(--card-bd);position:relative;}
|
|
||||||
.layer .lt{font-size:15px;color:#fff;font-weight:500;letter-spacing:1px;}
|
|
||||||
.layer .ld{font-size:12px;color:var(--text-dim);margin-top:4px;line-height:1.5;}
|
|
||||||
.layer.l1{background:linear-gradient(100deg,rgba(76,201,240,.18),rgba(139,92,246,.08));}
|
|
||||||
.layer.l2{background:linear-gradient(100deg,rgba(199,125,255,.18),rgba(139,92,246,.07));}
|
|
||||||
.layer.l3{background:linear-gradient(100deg,rgba(139,92,246,.24),rgba(76,201,240,.06));border-color:var(--violet);}
|
|
||||||
.layer.l4{background:linear-gradient(100deg,rgba(139,92,246,.14),rgba(8,12,26,.18));}
|
|
||||||
.layer.l5{background:linear-gradient(100deg,rgba(231,184,92,.14),rgba(8,12,26,.26));}
|
|
||||||
.layer .star{position:absolute;right:12px;top:9px;font-size:11px;color:var(--cyan);}
|
|
||||||
.bg-text{flex:1;display:flex;flex-direction:column;justify-content:center;overflow-y:auto;}
|
|
||||||
.bg-text h2{font-family:"ZCOOL QingKe HuangYou",sans-serif;font-size:30px;letter-spacing:3px;color:#fff;text-shadow:0 0 16px rgba(139,92,246,.5);margin-bottom:16px;}
|
|
||||||
.bg-text p{font-size:14.5px;color:var(--text-dim);line-height:1.95;max-width:640px;}
|
|
||||||
|
|
||||||
/* ===== 规则 ===== */
|
|
||||||
#rules{flex-direction:column;gap:0;}
|
|
||||||
.rules-scroll{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:22px;padding-right:8px;}
|
|
||||||
.rule-block h3{font-family:"ZCOOL QingKe HuangYou",sans-serif;font-size:22px;color:#fff;letter-spacing:2px;margin-bottom:6px;}
|
|
||||||
.rule-intro{font-size:13.5px;color:var(--text-dim);margin-bottom:12px;line-height:1.7;max-width:780px;}
|
|
||||||
.tier-list{display:flex;flex-direction:column;gap:8px;}
|
|
||||||
.tier-row{display:grid;grid-template-columns:96px 116px 1fr;gap:12px;align-items:center;background:var(--card);border:1px solid var(--card-bd);border-radius:10px;padding:10px 14px;transition:.2s;}
|
|
||||||
.tier-row:hover{border-color:var(--violet);background:rgba(139,92,246,.10);}
|
|
||||||
.tier-row .tn{font-family:"Press Start 2P",monospace;font-size:10px;color:var(--cyan);}
|
|
||||||
.tier-row .tname{font-size:15px;color:#fff;font-weight:500;}
|
|
||||||
.tier-row .tdesc{font-size:13px;color:var(--text-dim);line-height:1.5;}
|
|
||||||
|
|
||||||
/* ===== 图鉴 ===== */
|
|
||||||
#codex{padding:28px 48px;gap:0;}
|
|
||||||
.codex-wrap{display:flex;flex-direction:column;gap:13px;flex:1;min-height:0;}
|
|
||||||
.codex-cats{display:flex;gap:6px;flex-wrap:wrap;}
|
|
||||||
.codex-cats button{font-family:"Noto Sans SC",sans-serif;font-size:14px;color:var(--text-dim);background:var(--card);border:1px solid var(--card-bd);padding:8px 15px;border-radius:11px;cursor:pointer;transition:.2s;}
|
|
||||||
.codex-cats button:hover{color:#fff;}
|
|
||||||
.codex-cats button.active{color:#fff;background:rgba(139,92,246,.24);border-color:var(--magenta);box-shadow:var(--glow);}
|
|
||||||
.codex-subrow{display:flex;align-items:center;gap:12px;}
|
|
||||||
.codex-subs{display:flex;gap:6px;flex-wrap:wrap;flex:1;}
|
|
||||||
.codex-subs button{font-size:12px;color:var(--text-dim);background:var(--card);border:1px solid var(--card-bd);padding:5px 12px;border-radius:14px;cursor:pointer;transition:.2s;}
|
|
||||||
.codex-subs button:hover{color:#fff;}
|
|
||||||
.codex-subs button.active{color:#fff;background:rgba(76,201,240,.22);border-color:var(--cyan);}
|
|
||||||
.codex-search{background:rgba(8,12,26,.6);border:1px solid var(--card-bd);border-radius:18px;color:var(--text);padding:7px 14px;font-size:13px;outline:none;width:200px;flex:0 0 auto;}
|
|
||||||
.codex-search:focus{border-color:var(--violet);}
|
|
||||||
.codex-count{font-size:12px;color:var(--text-dim);white-space:nowrap;flex:0 0 auto;}
|
|
||||||
.codex-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;overflow-y:auto;padding:4px 6px 4px 0;align-content:start;flex:1;min-height:0;}
|
|
||||||
.cx{background:var(--card);border:1px solid var(--card-bd);border-radius:13px;overflow:hidden;transition:.24s;display:flex;flex-direction:column;cursor:default;}
|
|
||||||
.cx:hover{transform:translateY(-3px);border-color:var(--violet);box-shadow:var(--glow);}
|
|
||||||
.cx .thumb{width:100%;aspect-ratio:1/1;display:block;overflow:hidden;background:linear-gradient(135deg,rgba(139,92,246,.22),rgba(76,201,240,.10));}
|
|
||||||
.cx .thumb svg{width:100%;height:100%;display:block;}
|
|
||||||
.cx .body{padding:10px 12px;}
|
|
||||||
.cx .nm{font-size:14.5px;color:#fff;font-weight:500;}
|
|
||||||
.cx .meta{display:flex;justify-content:space-between;margin-top:5px;font-size:11px;}
|
|
||||||
.cx .meta .sub{color:var(--cyan);}
|
|
||||||
.cx .meta .tier{color:var(--gold);}
|
|
||||||
.cx .desc{font-size:12px;color:var(--text-dim);line-height:1.5;margin-top:4px;max-height:60px;overflow:hidden;}
|
|
||||||
.cx .ds{font-size:11.5px;color:var(--text-dim);line-height:1.5;margin-top:6px;}
|
|
||||||
|
|
||||||
/* ===== 论坛 ===== */
|
|
||||||
#forum{flex-direction:row;gap:28px;}
|
|
||||||
.f-cats{flex:0 0 200px;display:flex;flex-direction:column;gap:12px;}
|
|
||||||
.f-cats .ch{font-size:15.5px;color:var(--text-dim);background:var(--card);border:1px solid var(--card-bd);padding:13px 18px;border-radius:12px;cursor:pointer;transition:.22s;letter-spacing:.5px;}
|
|
||||||
.f-cats .ch:hover{color:#fff;background:rgba(139,92,246,.12);}
|
|
||||||
.f-cats .ch.active{color:#fff;background:linear-gradient(120deg,rgba(139,92,246,.28),rgba(199,125,255,.16));border-color:var(--magenta);box-shadow:var(--glow);}
|
|
||||||
.f-main{flex:1;display:flex;flex-direction:column;min-width:0;}
|
|
||||||
.threads{flex:1;overflow-y:auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:16px;padding-right:8px;align-content:start;}
|
|
||||||
.th{display:flex;align-items:center;gap:16px;background:var(--card);border:1px solid var(--card-bd);border-radius:14px;padding:16px 20px;transition:.22s;cursor:pointer;}
|
|
||||||
.th:hover{border-color:var(--violet);background:rgba(139,92,246,.12);transform:translateY(-2px);box-shadow:0 8px 24px rgba(0,0,0,.25);}
|
|
||||||
.th .pin{font-size:12px;font-weight:700;letter-spacing:1px;color:var(--gold);background:rgba(231,184,92,.16);border:1px solid rgba(231,184,92,.45);border-radius:6px;padding:2px 8px;}
|
|
||||||
.th .tt{flex:1;font-size:16.5px;color:#fff;letter-spacing:.3px;}
|
|
||||||
.th .meta{font-size:13px;color:var(--text-dim);white-space:nowrap;}
|
|
||||||
.th .rp{color:var(--cyan);font-weight:600;}
|
|
||||||
.post-form{display:none;flex-direction:column;gap:10px;background:var(--card);border:1px solid var(--magenta);border-radius:14px;padding:16px;margin-bottom:14px;}
|
|
||||||
.post-form.show{display:flex;}
|
|
||||||
.post-form input,.post-form textarea{background:rgba(8,12,26,.6);border:1px solid var(--card-bd);border-radius:10px;color:var(--text);padding:10px 14px;font-family:inherit;font-size:14px;outline:none;}
|
|
||||||
.post-form textarea{resize:vertical;min-height:72px;}
|
|
||||||
.post-form .row{display:flex;gap:10px;justify-content:flex-end;}
|
|
||||||
.post-form .row button{font-size:14px;padding:8px 18px;border-radius:10px;cursor:pointer;border:1px solid var(--card-bd);background:var(--card);color:var(--text);}
|
|
||||||
.post-form .row .ok{background:linear-gradient(120deg,var(--gold),#f0d49a);color:#0b1020;font-weight:700;border:none;}
|
|
||||||
|
|
||||||
/* ===== 公告 ===== */
|
|
||||||
#announce{gap:0;align-items:stretch;}
|
|
||||||
#announce .notes{flex:1;min-height:0;width:100%;display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:18px;overflow-y:auto;padding-right:8px;align-content:start;}
|
|
||||||
#announce .notes{grid-template-columns:repeat(auto-fill,minmax(380px,1fr));gap:20px;}
|
|
||||||
.note{display:flex;flex-direction:column;overflow:hidden;background:linear-gradient(135deg,rgba(139,92,246,.10),rgba(76,201,240,.04));border:1px solid var(--card-bd);border-left:4px solid var(--magenta);border-radius:16px;transition:.24s;}
|
|
||||||
.note:hover{transform:translateY(-3px);border-color:var(--violet);background:linear-gradient(135deg,rgba(139,92,246,.16),rgba(76,201,240,.07));box-shadow:var(--glow);}
|
|
||||||
.note.pin{border-left-color:var(--gold);background:linear-gradient(135deg,rgba(231,184,92,.12),rgba(139,92,246,.06));}
|
|
||||||
.note.pin:hover{background:linear-gradient(135deg,rgba(231,184,92,.18),rgba(139,92,246,.08));}
|
|
||||||
.note.feat{grid-column:1 / -1;flex-direction:row;align-items:stretch;}
|
|
||||||
.note.feat .note-cover{flex:0 0 44%;width:44%;min-height:260px;}
|
|
||||||
.note.feat .note-body{flex:1;justify-content:center;}
|
|
||||||
.note.feat .note-title{font-size:27px;}
|
|
||||||
.note.feat .body{font-size:16px;}
|
|
||||||
.note-cover{height:168px;flex:0 0 auto;background-size:cover;background-position:center;background-repeat:no-repeat;border-bottom:1px solid var(--card-bd);position:relative;}
|
|
||||||
.note-cover.empty{background:linear-gradient(135deg,rgba(139,92,246,.24),rgba(76,201,240,.10));}
|
|
||||||
.note-cover.empty::after{content:'封面图 · 后台配置';position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:12px;letter-spacing:2px;color:rgba(255,255,255,.5);}
|
|
||||||
.note-body{padding:18px 22px;display:flex;flex-direction:column;min-width:0;}
|
|
||||||
.note .date{font-size:13px;font-weight:600;color:var(--cyan);letter-spacing:1px;margin-bottom:8px;}
|
|
||||||
.note-title{font-family:"ZCOOL QingKe HuangYou",sans-serif;font-size:21px;color:#fff;letter-spacing:1px;margin-bottom:10px;line-height:1.32;text-shadow:0 0 14px rgba(139,92,246,.4);}
|
|
||||||
.note .body{font-size:15px;color:var(--text);line-height:1.9;}
|
|
||||||
.note .body p{margin:0 0 11px;}
|
|
||||||
.note .body p:last-child{margin-bottom:0;}
|
|
||||||
|
|
||||||
/* ===== 致玩家 ===== */
|
|
||||||
#letter{align-items:center;justify-content:center;}
|
|
||||||
#letter .letter-wrap{max-width:680px;width:100%;overflow-y:auto;padding:10px 20px;}
|
|
||||||
#letter .letter-wrap h2{font-family:"ZCOOL QingKe HuangYou",sans-serif;font-size:30px;letter-spacing:4px;color:#fff;text-shadow:0 0 18px rgba(139,92,246,.5);margin-bottom:6px;text-align:center;}
|
|
||||||
#letter .letter-wrap .lt-sub{text-align:center;font-family:"Press Start 2P",monospace;font-size:9px;color:var(--magenta);letter-spacing:1px;margin-bottom:28px;}
|
|
||||||
#letter .letter-wrap .lt-body{font-size:15px;color:var(--text-dim);line-height:2.1;}
|
|
||||||
#letter .letter-wrap .lt-body p{margin-bottom:16px;}
|
|
||||||
#letter .letter-wrap .lt-body p:first-child{font-size:17px;color:#fff;font-weight:500;}
|
|
||||||
#letter .letter-wrap .lt-body .hl{color:var(--gold);font-weight:500;}
|
|
||||||
#letter .letter-wrap .lt-sign{text-align:right;margin-top:28px;font-size:14px;color:var(--magenta);font-style:italic;}
|
|
||||||
|
|
||||||
/* ===== 论坛(竖排:顶部分类条 + 下方纵向帖子流) ===== */
|
|
||||||
#forum{flex-direction:column;gap:20px;}
|
|
||||||
.f-cats{flex:0 0 auto;flex-direction:row;flex-wrap:wrap;gap:10px;}
|
|
||||||
.f-cats .ch{flex:0 0 auto;}
|
|
||||||
.f-main{flex:1;min-height:0;}
|
|
||||||
.threads{width:100%;}
|
|
||||||
|
|
||||||
/* ===== 公告(内容居中) ===== */
|
|
||||||
#announce .notes{margin:0;}
|
|
||||||
|
|
||||||
/* ===== 剧情(小说阅读器:左目录 + 右正文,竖排阅读感) ===== */
|
|
||||||
#story{padding:28px 48px;}
|
|
||||||
.story-wrap{display:flex;flex-direction:row;width:100%;flex:1;min-height:0;}
|
|
||||||
.story-toc{flex:0 0 286px;display:flex;flex-direction:column;border-right:1px solid var(--card-bd);background:rgba(8,12,26,.35);min-height:0;}
|
|
||||||
.toc-head{font-family:"ZCOOL QingKe HuangYou",sans-serif;font-size:24px;letter-spacing:3px;color:#fff;padding:24px 0 12px;text-shadow:0 0 16px rgba(139,92,246,.5);}
|
|
||||||
.toc-head small{display:block;font-family:"Press Start 2P",monospace;font-size:8px;color:var(--magenta);letter-spacing:1px;margin-top:6px;}
|
|
||||||
.toc-list{flex:1;overflow-y:auto;padding:0 12px 24px;}
|
|
||||||
.toc-loading{padding:30px 16px;color:var(--text-dim);font-size:14px;}
|
|
||||||
.toc-vol{margin-top:10px;}
|
|
||||||
.toc-vol .vname{font-size:14px;color:var(--gold);letter-spacing:1px;padding:8px 10px 4px;font-weight:500;}
|
|
||||||
.toc-vol .vintro{font-size:12px;color:var(--text-dim);line-height:1.6;padding:0 10px 8px;}
|
|
||||||
.toc-ch{display:block;width:100%;text-align:left;font-family:inherit;font-size:15px;color:var(--text-dim);background:transparent;border:none;border-left:2px solid transparent;padding:10px 12px;cursor:pointer;transition:.18s;border-radius:0 8px 8px 0;line-height:1.45;}
|
|
||||||
.toc-ch:hover{color:#fff;background:rgba(139,92,246,.12);}
|
|
||||||
.toc-ch.active{color:#fff;background:rgba(139,92,246,.20);border-left-color:var(--magenta);}
|
|
||||||
.story-reader{flex:1;overflow-y:auto;min-width:0;background:linear-gradient(180deg, rgba(139,92,246,.04), transparent 240px);}
|
|
||||||
.reader-loading{padding:80px 20px;text-align:center;color:var(--text-dim);font-size:15px;}
|
|
||||||
.reader-inner{max-width:840px;margin:0 auto;padding:48px 52px 100px;}
|
|
||||||
.reader-inner .r-vol{font-size:12px;color:var(--cyan);letter-spacing:2px;margin-bottom:10px;}
|
|
||||||
.reader-inner h1{font-family:"ZCOOL QingKe HuangYou",sans-serif;font-size:32px;letter-spacing:2px;color:#fff;text-shadow:0 0 16px rgba(139,92,246,.5);margin-bottom:18px;line-height:1.3;}
|
|
||||||
.reader-inner .body{font-size:17.5px;color:#eef2fb;line-height:2.0;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;}
|
|
||||||
.reader-inner .body p{margin-bottom:20px;text-indent:2em;}
|
|
||||||
.reader-inner .body p:first-child{text-indent:0;}
|
|
||||||
.reader-inner .body h2,.reader-inner .body h3{color:#fff;margin:22px 0 10px;font-size:18px;}
|
|
||||||
|
|
||||||
/* ===== 世界数据报表 ===== */
|
|
||||||
#worlddata{overflow:hidden;padding:28px 48px;}
|
|
||||||
#worldDataContent{flex:1;min-height:0;overflow-y:auto;width:100%;padding-right:8px;}
|
|
||||||
.wd-tag{display:inline-block;font-size:12px;letter-spacing:2px;color:var(--gold);background:rgba(231,184,92,.12);border:1px solid rgba(231,184,92,.38);border-radius:6px;padding:3px 11px;margin-bottom:22px;}
|
|
||||||
.wd-h{font-family:"ZCOOL QingKe HuangYou",sans-serif;font-size:22px;letter-spacing:3px;color:#fff;margin:38px 0 18px;text-shadow:0 0 14px rgba(139,92,246,.45);display:flex;align-items:center;gap:10px;}
|
|
||||||
.wd-h::before{content:"";width:4px;height:22px;border-radius:3px;background:linear-gradient(180deg,var(--violet),var(--cyan));box-shadow:0 0 10px rgba(139,92,246,.6);}
|
|
||||||
.wd-h small{font-family:"Press Start 2P",monospace;font-size:8px;color:var(--magenta);letter-spacing:1px;}
|
|
||||||
|
|
||||||
.wd-kpi{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:20px;}
|
|
||||||
.wd-kpi-card{position:relative;overflow:hidden;background:linear-gradient(135deg,rgba(139,92,246,.12),rgba(76,201,240,.05));border:1px solid var(--card-bd);border-radius:16px;padding:22px 26px;transition:.26s;}
|
|
||||||
.wd-kpi-card:hover{transform:translateY(-4px);border-color:var(--violet);box-shadow:var(--glow);}
|
|
||||||
.wd-kpi-card::after{content:"";position:absolute;right:-26px;top:-26px;width:88px;height:88px;border-radius:50%;background:radial-gradient(circle,rgba(199,125,255,.22),transparent 70%);}
|
|
||||||
.wd-kpi-ic{font-size:22px;filter:drop-shadow(0 0 7px rgba(139,92,246,.55));}
|
|
||||||
.wd-kpi-num{font-family:"ZCOOL QingKe HuangYou",sans-serif;font-size:40px;line-height:1.1;color:#fff;margin:10px 0 4px;}
|
|
||||||
.wd-kpi-num .u{font-size:14px;color:var(--text-dim);margin-left:4px;letter-spacing:1px;}
|
|
||||||
.wd-kpi-label{font-size:13px;color:var(--text-dim);letter-spacing:1px;}
|
|
||||||
.wd-kpi-delta{position:absolute;right:14px;top:16px;font-size:11px;font-weight:700;padding:1px 7px;border-radius:5px;}
|
|
||||||
.wd-up{color:#7CFC9B;background:rgba(124,252,155,.12);}
|
|
||||||
.wd-down{color:#ff8585;background:rgba(255,133,133,.12);}
|
|
||||||
|
|
||||||
.wd-bars{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px 26px;}
|
|
||||||
.wd-bar-row{margin-bottom:4px;}
|
|
||||||
.wd-bar-top{display:flex;justify-content:space-between;font-size:13.5px;margin-bottom:6px;}
|
|
||||||
.wd-bar-top .k{color:var(--text);}
|
|
||||||
.wd-bar-top .v{color:var(--gold);font-weight:700;}
|
|
||||||
.wd-track{height:9px;border-radius:6px;background:rgba(255,255,255,.07);overflow:hidden;}
|
|
||||||
.wd-fill{height:100%;border-radius:6px;background:linear-gradient(90deg,var(--cyan),var(--violet));box-shadow:0 0 9px rgba(139,92,246,.55);}
|
|
||||||
|
|
||||||
.wd-table{width:100%;border-collapse:separate;border-spacing:0;font-size:14px;background:rgba(255,255,255,.02);border:1px solid var(--card-bd);border-radius:14px;overflow:hidden;}
|
|
||||||
.wd-table th{font-family:"ZCOOL QingKe HuangYou",sans-serif;font-size:14px;letter-spacing:2px;color:#fff;background:linear-gradient(135deg,rgba(139,92,246,.22),rgba(76,201,240,.12));text-align:left;padding:13px 16px;border-bottom:1px solid var(--card-bd);}
|
|
||||||
.wd-table td{padding:12px 16px;border-bottom:1px solid rgba(255,255,255,.06);color:var(--text-dim);line-height:1.5;}
|
|
||||||
.wd-table tr:last-child td{border-bottom:none;}
|
|
||||||
.wd-table tr:hover td{background:rgba(139,92,246,.08);color:#eaf0ff;}
|
|
||||||
.wd-table .lead{color:#fff;font-weight:600;}
|
|
||||||
.wd-table .pill{display:inline-block;font-size:12px;padding:2px 9px;border-radius:20px;background:rgba(76,201,240,.14);color:var(--cyan);border:1px solid rgba(76,201,240,.34);}
|
|
||||||
|
|
||||||
.wd-rank{display:flex;flex-direction:column;gap:12px;}
|
|
||||||
.wd-rank-row{display:flex;align-items:center;gap:14px;background:linear-gradient(135deg,rgba(139,92,246,.08),rgba(255,255,255,.02));border:1px solid var(--card-bd);border-radius:13px;padding:12px 16px;transition:.22s;}
|
|
||||||
.wd-rank-row:hover{border-color:var(--violet);transform:translateX(4px);}
|
|
||||||
.wd-rank-no{font-family:"ZCOOL QingKe HuangYou",sans-serif;font-size:22px;width:34px;text-align:center;color:var(--gold);flex:0 0 auto;}
|
|
||||||
.wd-rank-row:nth-child(1) .wd-rank-no{color:#ffd56b;}
|
|
||||||
.wd-rank-row:nth-child(2) .wd-rank-no{color:#cfd8e8;}
|
|
||||||
.wd-rank-row:nth-child(3) .wd-rank-no{color:#e0a86b;}
|
|
||||||
.wd-rank-main{flex:1;min-width:0;}
|
|
||||||
.wd-rank-name{font-size:15px;color:#fff;margin-bottom:5px;display:flex;justify-content:space-between;}
|
|
||||||
.wd-rank-name .s{color:var(--gold);font-weight:700;font-size:13px;}
|
|
||||||
.wd-rank-track{height:8px;border-radius:5px;background:rgba(255,255,255,.07);overflow:hidden;}
|
|
||||||
.wd-rank-fill{height:100%;border-radius:5px;background:linear-gradient(90deg,var(--magenta),var(--violet));box-shadow:0 0 8px rgba(199,125,255,.5);}
|
|
||||||
@media (max-width:900px){
|
@media (max-width:900px){
|
||||||
.hero .copy h1{font-size:42px;}
|
.hero .copy h1{font-size:42px;}
|
||||||
}
|
}
|
||||||
@media (max-width:768px){
|
@media (max-width:768px){
|
||||||
.hero .copy{left:18px;right:18px;top:28px;}
|
|
||||||
html,body{height:100%;}
|
|
||||||
body{height:100dvh;}
|
|
||||||
.app{height:100dvh;}
|
|
||||||
.topbar{height:auto;min-height:54px;flex-wrap:wrap;align-items:center;padding:8px 14px;gap:10px;}
|
|
||||||
.logo .cn{font-size:22px;letter-spacing:2px;}
|
|
||||||
.logo .en{display:none;}
|
|
||||||
.spacer{display:none;}
|
|
||||||
.user-box{margin-left:auto;font-size:13px;gap:8px;}
|
|
||||||
.user-box .auth-btn{padding:6px 13px;font-size:12px;}
|
|
||||||
.nav{order:3;flex:1 0 100%;width:100%;margin-left:0;gap:4px;padding-top:6px;border-top:1px solid var(--card-bd);}
|
|
||||||
.nav button{font-size:13px;padding:7px 9px;white-space:nowrap;}
|
|
||||||
.hero .copy{left:18px;right:18px;bottom:82px;}
|
|
||||||
.hero .copy{left:18px;top:28px;}
|
.hero .copy{left:18px;top:28px;}
|
||||||
.hero .copy h1{font-size:32px;letter-spacing:4px;}
|
.hero .copy h1{font-size:30px;letter-spacing:5px;}
|
||||||
.hero .copy .tag{font-size:16px;}
|
.hero .copy .tag{font-size:15px;}
|
||||||
.slide-label{left:18px;bottom:78px;}
|
.slide-label{left:18px;bottom:78px;}
|
||||||
.slide-label .sl-cn{font-size:24px;letter-spacing:3px;}
|
.slide-label .sl-cn{font-size:24px;letter-spacing:3px;}
|
||||||
.slide-label .sl-desc{font-size:13px;max-width:100%;}
|
.slide-label .sl-desc{font-size:13px;max-width:100%;}
|
||||||
.sl-dots{right:16px;gap:12px;}
|
.sl-dots{right:16px;gap:10px;}
|
||||||
.hero .enter-wrap{bottom:28px;}
|
|
||||||
.hero .enter-btn{font-size:15px;padding:11px 30px;}
|
.hero .enter-btn{font-size:15px;padding:11px 30px;}
|
||||||
}
|
}
|
||||||
@media (max-width:480px){
|
|
||||||
.topbar{padding:8px 10px;gap:8px;}
|
|
||||||
.logo .cn{font-size:20px;}
|
|
||||||
.nav button{font-size:12px;padding:6px 7px;}
|
|
||||||
.user-box .auth-btn{padding:6px 11px;}
|
|
||||||
.hero .copy{left:14px;top:20px;}
|
|
||||||
.hero .copy h1{font-size:26px;letter-spacing:2px;}
|
|
||||||
.hero .copy .tag{font-size:14px;}
|
|
||||||
.slide-label{left:14px;bottom:70px;}
|
|
||||||
.slide-label .sl-cn{font-size:20px;}
|
|
||||||
.slide-label .sl-desc{font-size:12.5px;}
|
|
||||||
.sl-dots{right:12px;gap:10px;}
|
|
||||||
.grid{grid-template-columns:1fr;}
|
|
||||||
.panel{padding:14px 14px;}
|
|
||||||
.codex-search{width:118px;flex:1 1 100%;}
|
|
||||||
.codex-subrow{flex-wrap:wrap;}
|
|
||||||
.reader-inner{padding:22px 14px 70px;}
|
|
||||||
#story{padding:14px 14px;}
|
|
||||||
.tier-row{grid-template-columns:60px 76px 1fr;gap:6px;}
|
|
||||||
.codex-cats button,.codex-subs button{padding:7px 11px;font-size:13px;}
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@ -408,7 +104,7 @@
|
|||||||
<div class="user-box" id="userBox"></div>
|
<div class="user-box" id="userBox"></div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<main class="content">
|
<main class="home-main">
|
||||||
<section class="hero">
|
<section class="hero">
|
||||||
<div class="slideshow" id="slideshow"></div>
|
<div class="slideshow" id="slideshow"></div>
|
||||||
<div class="copy">
|
<div class="copy">
|
||||||
@ -416,92 +112,11 @@
|
|||||||
<div class="sub2">LIVING CIVILIZATION SIMULATOR</div>
|
<div class="sub2">LIVING CIVILIZATION SIMULATOR</div>
|
||||||
<div class="tag">活的文明系统模拟</div>
|
<div class="tag">活的文明系统模拟</div>
|
||||||
</div>
|
</div>
|
||||||
|
<button class="sl-arrow prev" id="slPrev" aria-label="上一张">‹</button>
|
||||||
|
<button class="sl-arrow next" id="slNext" aria-label="下一张">›</button>
|
||||||
<div class="enter-wrap">
|
<div class="enter-wrap">
|
||||||
<button class="enter-btn" id="enterGame">⚔ 进入游戏</button>
|
<button class="enter-btn" id="enterGame">⚔ 进入游戏</button>
|
||||||
</div>
|
</div>
|
||||||
<button class="sl-arrow prev" onclick="window.slPrev && window.slPrev()">‹</button>
|
|
||||||
<button class="sl-arrow next" onclick="window.slNext && window.slNext()">›</button>
|
|
||||||
<!-- ===== 介绍(视频主页) ===== -->
|
|
||||||
<section class="panel active" id="intro">
|
|
||||||
<div class="hero">
|
|
||||||
<div class="slideshow" id="slideshow">
|
|
||||||
<!-- 五层世界轮播,由 JS 渲染 -->
|
|
||||||
</div>
|
|
||||||
<div class="enter-wrap">
|
|
||||||
<button class="enter-btn" id="enterGame">进入游戏</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- ===== 背景(特色 + 世界背景 + 致玩家 合并平铺) ===== -->
|
|
||||||
<section class="panel" id="background">
|
|
||||||
<div class="panel-scroll" id="bgBody"></div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- ===== 规则 ===== -->
|
|
||||||
<section class="panel" id="rules">
|
|
||||||
<div class="rules-scroll">
|
|
||||||
<!-- 静态兜底数据已注释 — 验证 API 是否取到后台数据 -->
|
|
||||||
<!-- 如页面此处为空白 = Odoo API 未返回规则数据 -->
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- ===== 图鉴 ===== -->
|
|
||||||
<section class="panel" id="codex">
|
|
||||||
<div class="codex-wrap">
|
|
||||||
<div class="codex-cats" id="codexCats"></div>
|
|
||||||
<div class="codex-subrow">
|
|
||||||
<div class="codex-subs" id="codexSubs"></div>
|
|
||||||
<input class="codex-search" id="codexSearch" placeholder="搜索名称 / 描述…" />
|
|
||||||
<span class="codex-count" id="codexCount"></span>
|
|
||||||
</div>
|
|
||||||
<div class="codex-grid" id="codexGrid"></div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- ===== 论坛 ===== -->
|
|
||||||
<section class="panel" id="forum">
|
|
||||||
<div class="f-cats">
|
|
||||||
<!-- 静态分类已注释 — 验证 API 是否取到后台数据 -->
|
|
||||||
<!-- 如页面此处为空白 = Odoo API 未返回论坛分类 -->
|
|
||||||
</div>
|
|
||||||
<div class="f-main">
|
|
||||||
<div class="post-form" id="postForm">
|
|
||||||
<input id="pfTitle" placeholder="标题" />
|
|
||||||
<textarea id="pfBody" placeholder="说点什么…(演示:仅本次会话内可见)"></textarea>
|
|
||||||
<div class="row"><button id="pfCancel">取消</button><button class="ok" id="pfOk">发布</button></div>
|
|
||||||
</div>
|
|
||||||
<div class="threads" id="threads">
|
|
||||||
<!-- 静态兜底数据已注释 — 验证 API 是否取到后台数据 -->
|
|
||||||
<!-- 如页面此处为空白 = Odoo API 未返回论坛数据 -->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- ===== 公告 ===== -->
|
|
||||||
<section class="panel" id="announce">
|
|
||||||
<div class="notes">
|
|
||||||
<!-- 静态兜底数据已注释 — 验证 API 是否取到后台数据 -->
|
|
||||||
<!-- 如页面此处为空白 = Odoo API 未返回公告数据 -->
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- ===== 剧情(小说阅读器:左目录 + 右正文) ===== -->
|
|
||||||
<section class="panel" id="story">
|
|
||||||
<div class="story-wrap">
|
|
||||||
<aside class="story-toc">
|
|
||||||
<div class="toc-head">目录<small>CONTENTS</small></div>
|
|
||||||
<div class="toc-list" id="storyTocList"><div class="toc-loading">加载中…</div></div>
|
|
||||||
</aside>
|
|
||||||
<article class="story-reader" id="storyReader">
|
|
||||||
<div class="reader-loading">从左侧目录选择章节开始阅读</div>
|
|
||||||
</article>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- ===== 世界数据(登录后可见) ===== -->
|
|
||||||
<section class="panel" id="worlddata">
|
|
||||||
<div id="worldDataContent"></div>
|
|
||||||
</section>
|
</section>
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
@ -523,168 +138,98 @@
|
|||||||
{ img:'assets/slides/05_core.webp', en:'CORE', cn:'地心', desc:'熔岩奔流的地心,是世界诞生的本源。元玺在此凝聚,追溯天地初开的那一瞬永恒。',
|
{ img:'assets/slides/05_core.webp', en:'CORE', cn:'地心', desc:'熔岩奔流的地心,是世界诞生的本源。元玺在此凝聚,追溯天地初开的那一瞬永恒。',
|
||||||
origin:'熔岩奔流处,乃世界本源所钟。元玺于亿载炽火中凝聚成形,溯天地初开一瞬,万物归处,亦是起始。' }
|
origin:'熔岩奔流处,乃世界本源所钟。元玺于亿载炽火中凝聚成形,溯天地初开一瞬,万物归处,亦是起始。' }
|
||||||
];
|
];
|
||||||
|
|
||||||
const container = document.getElementById('slideshow');
|
const container = document.getElementById('slideshow');
|
||||||
if(!container) return;
|
if (!container) return;
|
||||||
let current = 0, timer = null;
|
let current = 0, timer = null;
|
||||||
const INTERVAL = 5500;
|
const INTERVAL = 5500;
|
||||||
|
|
||||||
// —— 预加载所有图片,消除切换闪烁 ——
|
// 预加载所有图(消除切换空白)
|
||||||
slides.forEach(s => { const img = new Image(); img.src = s.img; });
|
slides.forEach(s => { const img = new Image(); img.src = s.img; });
|
||||||
|
|
||||||
|
// 缩略图(保留兼容)
|
||||||
const track = document.createElement('div');
|
const track = document.createElement('div');
|
||||||
track.className='slide-track';
|
track.className = 'slide-track';
|
||||||
container.appendChild(track);
|
container.appendChild(track);
|
||||||
|
|
||||||
slides.forEach((s,i)=>{
|
slides.forEach((s,i)=>{
|
||||||
const el = document.createElement('div');
|
const el = document.createElement('div');
|
||||||
el.className='slide'+(i===0?' active':'');
|
el.className = 'slide' + (i===0 ? ' active' : '');
|
||||||
el.style.backgroundImage="url('"+s.img+"')"; // 全部直接设置(已预加载)
|
el.style.backgroundImage = "url('" + s.img + "')";
|
||||||
el.innerHTML='<div class="slide-label"><span class="sl-en">'+s.en+'</span><div class="sl-cn">'+s.cn+'</div><div class="sl-desc">'+s.desc+'</div></div>'
|
el.innerHTML =
|
||||||
+'<div class="slide-origin"><span class="so-tag">起源</span>'+s.origin+'</div>';
|
'<div class="slide-label"><span class="sl-en">' + s.en + '</span><div class="sl-cn">' + s.cn + '</div><div class="sl-desc">' + s.desc + '</div></div>' +
|
||||||
track.appendChild(el);
|
'<div class="slide-origin"><span class="so-tag">起源</span>' + s.origin + '</div>';
|
||||||
});
|
|
||||||
const all = track.querySelectorAll('.slide');
|
|
||||||
|
|
||||||
const dotsWrap = document.createElement('div');
|
|
||||||
dotsWrap.className='sl-dots';
|
|
||||||
slides.forEach((_,i)=>{
|
|
||||||
const d=document.createElement('div');
|
|
||||||
d.className='sl-dot'+(i===0?' active':'');
|
|
||||||
d.addEventListener('click',()=>go(i));
|
|
||||||
dotsWrap.appendChild(d);
|
|
||||||
});
|
|
||||||
document.querySelector('.hero').appendChild(dotsWrap);
|
|
||||||
const dots = dotsWrap.querySelectorAll('.sl-dot');
|
|
||||||
|
|
||||||
function go(idx){
|
|
||||||
if(idx<0)idx=slides.length-1;if(idx>=slides.length)idx=0;
|
|
||||||
if(idx===current) return;
|
|
||||||
all[current].classList.remove('active');dots[current].classList.remove('active');
|
|
||||||
current=idx;
|
|
||||||
track.style.transform='translateY('+(-current*100)+'%)';
|
|
||||||
all[current].classList.add('active');dots[current].classList.add('active');
|
|
||||||
resetTimer();
|
|
||||||
}
|
|
||||||
function next(){ go((current+1)%slides.length); }
|
|
||||||
function prev(){ go((current-1+slides.length)%slides.length); }
|
|
||||||
function resetTimer(){ clearInterval(timer); timer=setInterval(next,INTERVAL); }
|
|
||||||
|
|
||||||
// —— 滚轮 ——
|
|
||||||
let lock=false,wAccum=0;
|
|
||||||
document.querySelector('.hero').addEventListener('wheel',function(e){
|
|
||||||
wAccum+=e.deltaY;
|
|
||||||
if(lock)return;
|
|
||||||
if(Math.abs(wAccum)>50){
|
|
||||||
lock=true;
|
|
||||||
if(wAccum>0)next();else prev();
|
|
||||||
wAccum=0;
|
|
||||||
setTimeout(function(){lock=false;},1250);
|
|
||||||
}
|
|
||||||
},{passive:true});
|
|
||||||
|
|
||||||
// —— 触屏滑动 ——
|
|
||||||
let tx=0,ty=0;
|
|
||||||
const hero = document.querySelector('.hero');
|
|
||||||
hero.addEventListener('touchstart',e=>{
|
|
||||||
const t=e.touches[0];
|
|
||||||
tx=t.clientX; ty=t.clientY;
|
|
||||||
},{passive:true});
|
|
||||||
hero.addEventListener('touchend',e=>{
|
|
||||||
const t=e.changedTouches[0];
|
|
||||||
const dx=t.clientX-tx, dy=t.clientY-ty;
|
|
||||||
if(Math.abs(dy)>Math.abs(dx) && Math.abs(dy)>50){
|
|
||||||
dy>0?prev():next();
|
|
||||||
}
|
|
||||||
},{passive:true});
|
|
||||||
|
|
||||||
// —— 键盘左右 ——
|
|
||||||
document.addEventListener('keydown',e=>{
|
|
||||||
if(e.key==='ArrowLeft')prev();
|
|
||||||
if(e.key==='ArrowRight')next();
|
|
||||||
});
|
|
||||||
|
|
||||||
// —— 暴露给箭头按钮 ——
|
|
||||||
window.slPrev=prev; window.slNext=next;
|
|
||||||
// ============ 五层世界图片轮播 ============
|
|
||||||
(function(){
|
|
||||||
const slides = [
|
|
||||||
{ img:'assets/slides/01_starry_sky.png', en:'STARRY SKY', cn:'星空', desc:'陨石星空带悬浮于世界最外层,是文明触及维度的起点。星轨连通各浮空岛,穹鎏晶体自星尘中凝结。',
|
|
||||||
origin:'世界未形,星尘先于万物浮游于虚无。首缕维度自星隙坍缩成形,穹鎏晶体由尘凝就,文明自此仰望苍穹之始。' },
|
|
||||||
{ img:'assets/slides/02_sky.png', en:'SKY', cn:'天空', desc:'云朵地基块托起浮空岛群,灵气复苏的第一缕风拂过。各族初代聚落,在此仰望也更在此扎根。',
|
|
||||||
origin:'云基初结,浮空岛群自苍穹垂落凡尘。灵气复苏,初民循风而居,于云上筑城,仰望亦扎根,道统由此萌发。' },
|
|
||||||
{ img:'assets/slides/03_earth.png', en:'EARTH', cn:'大地', desc:'平原与森林铺展成万物生灵的摇篮,玄荒文明于斯鼎盛。城邦林立,征伐与道统在沃土上并行。',
|
|
||||||
origin:'沃野铺展为万灵摇篮,玄荒先族自林泉走出。城邦并起,征伐与道统并驰沃土之上,文明于此鼎盛绵延。' },
|
|
||||||
{ img:'assets/slides/04_underground.png',en:'UNDERGROUND',cn:'地下', desc:'溶洞晶矿与暗河在深处低语,冥玉生于幽暗玉石之中。地心工坊调度浅层资源,灯火不熄。',
|
|
||||||
origin:'溶洞深开,晶矿与暗河在幽处低语。冥玉生于幽玉深心,地心工坊取浅层之资,灯火长明,匠魂不熄。' },
|
|
||||||
{ img:'assets/slides/05_core.png', en:'CORE', cn:'地心', desc:'熔岩奔流的地心,是世界诞生的本源。元玺在此凝聚,追溯天地初开的那一瞬永恒。',
|
|
||||||
origin:'熔岩奔流处,乃世界本源所钟。元玺于亿载炽火中凝聚成形,溯天地初开一瞬,万物归处,亦是起始。' }
|
|
||||||
];
|
|
||||||
const container = document.getElementById('slideshow');
|
|
||||||
if(!container) return;
|
|
||||||
let current = 0, timer = null;
|
|
||||||
const INTERVAL = 5500;
|
|
||||||
|
|
||||||
// 竖向轨道:5 张图上下滑动
|
|
||||||
const track = document.createElement('div');
|
|
||||||
track.className='slide-track';
|
|
||||||
container.appendChild(track);
|
|
||||||
|
|
||||||
// 渲染 slide + label
|
|
||||||
slides.forEach((s,i)=>{
|
|
||||||
const el = document.createElement('div');
|
|
||||||
el.className='slide'+(i===0?' active':'');
|
|
||||||
el.style.backgroundImage="url('"+s.img+"')";
|
|
||||||
el.innerHTML='<div class="slide-label"><span class="sl-en">'+s.en+'</span><div class="sl-cn">'+s.cn+'</div><div class="sl-desc">'+s.desc+'</div></div>'
|
|
||||||
+'<div class="slide-origin"><span class="so-tag">起源</span>'+s.origin+'</div>';
|
|
||||||
track.appendChild(el);
|
track.appendChild(el);
|
||||||
});
|
});
|
||||||
const all = track.querySelectorAll('.slide');
|
const all = track.querySelectorAll('.slide');
|
||||||
|
|
||||||
// 指示器
|
// 指示器
|
||||||
const dotsWrap = document.createElement('div');
|
const dotsWrap = document.createElement('div');
|
||||||
dotsWrap.className='sl-dots';
|
dotsWrap.className = 'sl-dots';
|
||||||
slides.forEach((_,i)=>{
|
slides.forEach((_,i)=>{
|
||||||
const d=document.createElement('div');
|
const d = document.createElement('div');
|
||||||
d.className='sl-dot'+(i===0?' active':'');
|
d.className = 'sl-dot' + (i===0 ? ' active' : '');
|
||||||
d.addEventListener('click',()=>go(i));
|
d.addEventListener('click', ()=> go(i));
|
||||||
dotsWrap.appendChild(d);
|
dotsWrap.appendChild(d);
|
||||||
});
|
});
|
||||||
document.querySelector('.hero').appendChild(dotsWrap);
|
document.querySelector('.hero').appendChild(dotsWrap);
|
||||||
const dots = dotsWrap.querySelectorAll('.sl-dot');
|
const dots = dotsWrap.querySelectorAll('.sl-dot');
|
||||||
|
|
||||||
|
// 箭头按钮
|
||||||
|
const prevBtn = document.getElementById('slPrev');
|
||||||
|
const nextBtn = document.getElementById('slNext');
|
||||||
|
if (prevBtn) prevBtn.addEventListener('click', ()=> { prev(); resetTimer(); });
|
||||||
|
if (nextBtn) nextBtn.addEventListener('click', ()=> { next(); resetTimer(); });
|
||||||
|
|
||||||
function go(idx){
|
function go(idx){
|
||||||
if(idx<0)idx=slides.length-1;if(idx>=slides.length)idx=0;
|
if (idx<0) idx = slides.length-1;
|
||||||
if(idx===current) return;
|
if (idx>=slides.length) idx = 0;
|
||||||
all[current].classList.remove('active');dots[current].classList.remove('active');
|
if (idx === current) return;
|
||||||
current=idx;
|
all[current].classList.remove('active');
|
||||||
track.style.transform='translateY('+(-current*100)+'%)';
|
dots[current].classList.remove('active');
|
||||||
all[current].classList.add('active');dots[current].classList.add('active');
|
current = idx;
|
||||||
|
track.style.transform = 'translateY(' + (-current*100) + '%)';
|
||||||
|
all[current].classList.add('active');
|
||||||
|
dots[current].classList.add('active');
|
||||||
resetTimer();
|
resetTimer();
|
||||||
}
|
}
|
||||||
function next(){ go((current+1)%slides.length); }
|
function next(){ go((current+1) % slides.length); }
|
||||||
function prev(){ go((current-1+slides.length)%slides.length); }
|
function prev(){ go((current-1+slides.length) % slides.length); }
|
||||||
function resetTimer(){ clearInterval(timer); timer=setInterval(next,INTERVAL); }
|
function resetTimer(){ clearInterval(timer); timer = setInterval(next, INTERVAL); }
|
||||||
|
|
||||||
// 鼠标滚轮上下滑动
|
// 滚轮切换
|
||||||
let lock=false,wAccum=0;
|
let lock = false, wAccum = 0;
|
||||||
document.querySelector('.hero').addEventListener('wheel',function(e){
|
document.querySelector('.hero').addEventListener('wheel', (e)=>{
|
||||||
wAccum+=e.deltaY;
|
wAccum += e.deltaY;
|
||||||
if(lock)return;
|
if (lock) return;
|
||||||
if(Math.abs(wAccum)>50){
|
if (Math.abs(wAccum) > 50){
|
||||||
lock=true;
|
lock = true;
|
||||||
if(wAccum>0)next();else prev();
|
wAccum > 0 ? next() : prev();
|
||||||
wAccum=0;
|
wAccum = 0;
|
||||||
setTimeout(function(){lock=false;},1250);
|
setTimeout(()=> { lock=false; }, 1250);
|
||||||
}
|
}
|
||||||
},{passive:true});
|
}, {passive:true});
|
||||||
|
|
||||||
resetTimer();
|
// 键盘
|
||||||
})();
|
document.addEventListener('keydown', (e)=>{
|
||||||
|
if (e.key === 'ArrowLeft') prev();
|
||||||
|
if (e.key === 'ArrowRight') next();
|
||||||
|
});
|
||||||
|
|
||||||
// ============ 程序化矢量缩略图(零 AI 生图,不消耗积分) ============
|
// 触屏
|
||||||
function hashStr(s){let h=2166136261;for(let i=0;i<s.length;i++){h^=s.charCodeAt(i);h=Math.imul(h,16777619);}return h>>>0;}
|
const hero = document.querySelector('.hero');
|
||||||
function rng(seed){let s=seed>>>0;return function(){s=(Math.imul(s,1664525)+1013904223)>>>0;return s/4294967296;};}
|
let tx=0, ty=0;
|
||||||
const TIERCOL={'普通':'#9aa6c4','精良':'#5fd38a','稀有':'#4cc9f0','史诗':'#c77dff','传说':'#e7b85c'};
|
hero.addEventListener('touchstart', (e)=>{
|
||||||
|
const t = e.touches[0];
|
||||||
|
tx = t.clientX; ty = t.clientY;
|
||||||
|
}, {passive:true});
|
||||||
|
hero.addEventListener('touchend', (e)=>{
|
||||||
|
const t = e.changedTouches[0];
|
||||||
|
const dx = t.clientX - tx, dy = t.clientY - ty;
|
||||||
|
if (Math.abs(dy) > Math.abs(dx) && Math.abs(dy) > 50){
|
||||||
|
dy > 0 ? prev() : next();
|
||||||
|
}
|
||||||
|
}, {passive:true});
|
||||||
|
|
||||||
resetTimer();
|
resetTimer();
|
||||||
})();
|
})();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user