584 lines
11 KiB
CSS
584 lines
11 KiB
CSS
/* --- 1. 全局设置 & 字体定义 (无变动) --- */
|
|
|
|
@font-face {
|
|
font-family:'Noto Sans SC';
|
|
font-style:normal;
|
|
font-weight:400;
|
|
/* 常规 */
|
|
src:url('./fonts/NotoSansSC-Regular.ttf') format('truetype');
|
|
}
|
|
@font-face {
|
|
font-family:'Noto Sans SC';
|
|
font-style:normal;
|
|
font-weight:500;
|
|
/* 中等 */
|
|
src:url('./fonts/NotoSansSC-Medium.ttf') format('truetype');
|
|
}
|
|
@font-face {
|
|
font-family:'Noto Sans SC';
|
|
font-style:normal;
|
|
font-weight:700;
|
|
/* 粗体 */
|
|
src:url('./fonts/NotoSansSC-Bold.ttf') format('truetype');
|
|
}
|
|
:root {
|
|
--primary-color:#007bff;
|
|
--dark-color:#212529;
|
|
--light-color:#f8f9fa;
|
|
--background-color:#eef2f7;
|
|
--text-color:#333;
|
|
--border-radius:12px;
|
|
--shadow:0 10px 25px rgba(0,0,0,0.1);
|
|
--transition-speed:0.3s;
|
|
}
|
|
* {
|
|
box-sizing:border-box;
|
|
margin:0;
|
|
padding:0;
|
|
}
|
|
body {
|
|
font-family:'Noto Sans SC',sans-serif;
|
|
line-height:1.7;
|
|
background-color:var(--background-color);
|
|
color:var(--text-color);
|
|
}
|
|
body.modal-open {
|
|
overflow:hidden;
|
|
}
|
|
/* 【优化】修改 container 布局,使其成为页面中心卡片 */
|
|
.container {
|
|
max-width:960px;
|
|
/* 减小最大宽度 */
|
|
margin:40px auto;
|
|
/* 上下边距,水平居中 */
|
|
padding:30px;
|
|
background-color:var(--light-color);
|
|
/* 添加背景色以区分 */
|
|
border-radius:var(--border-radius);
|
|
box-shadow:var(--shadow);
|
|
}
|
|
/* --- 2. 主页面 (Header,Grid,Search) --- */
|
|
|
|
.main-header {
|
|
text-align:center;
|
|
margin-bottom:30px;
|
|
}
|
|
.main-header h1 {
|
|
font-size:2.5rem;
|
|
color:var(--dark-color);
|
|
font-weight:500;
|
|
}
|
|
.main-header p {
|
|
font-size:1.1rem;
|
|
color:#6c757d;
|
|
}
|
|
.header-content {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
gap: 20px;
|
|
}
|
|
|
|
.header-btn {
|
|
padding: 10px 20px;
|
|
font-size: 0.9rem;
|
|
font-weight: 500;
|
|
color: var(--primary-color);
|
|
background-color: transparent;
|
|
border: 1px solid var(--primary-color);
|
|
border-radius: 50px;
|
|
cursor: pointer;
|
|
transition: background-color 0.2s, color 0.2s;
|
|
white-space: nowrap; /* 防止按钮文字换行 */
|
|
}
|
|
|
|
.header-btn:hover {
|
|
background-color: var(--primary-color);
|
|
color: white;
|
|
}
|
|
.header-btn:disabled {
|
|
cursor: not-allowed;
|
|
opacity: 0.5;
|
|
border-color: #ccc;
|
|
color: #999;
|
|
}
|
|
/* 在 .modal-content p 样式之后添加 */
|
|
.history-item {
|
|
padding: 15px 20px;
|
|
border-bottom: 1px solid #e9ecef;
|
|
cursor: pointer;
|
|
transition: background-color var(--transition-speed);
|
|
}
|
|
.history-item:last-child {
|
|
border-bottom: none;
|
|
}
|
|
.history-item:hover {
|
|
background-color: #f1f1f1;
|
|
}
|
|
.history-item .series-title {
|
|
font-weight: 500;
|
|
display: block;
|
|
margin-bottom: 5px;
|
|
}
|
|
.history-item .episode-name {
|
|
color: #6c757d;
|
|
font-size: 0.9em;
|
|
}
|
|
.search-container {
|
|
margin-bottom:2rem;
|
|
}
|
|
#search-input {
|
|
width:100%;
|
|
padding:12px 15px;
|
|
font-size:1rem;
|
|
color:#333;
|
|
/* 文本颜色调整 */
|
|
background-color:#fff;
|
|
border:1px solid #ddd;
|
|
border-radius:8px;
|
|
outline:none;
|
|
transition:border-color 0.3s ease,box-shadow 0.3s ease;
|
|
}
|
|
#search-input:focus {
|
|
border-color:var(--primary-color);
|
|
box-shadow:0 0 0 3px rgba(0,123,255,0.25);
|
|
}
|
|
#search-input::placeholder {
|
|
color:#888;
|
|
}
|
|
/* 【新增】搜索无结果容器的样式 */
|
|
.no-results {
|
|
text-align:center;
|
|
padding:40px 20px;
|
|
background-color:#fff;
|
|
border-radius:8px;
|
|
margin-top:2rem;
|
|
}
|
|
.no-results p {
|
|
margin:0 0 20px 0;
|
|
font-size:1.1rem;
|
|
color:#6c757d;
|
|
}
|
|
/* 【新增】通用主按钮样式 */
|
|
.btn-primary {
|
|
padding:12px 25px;
|
|
font-size:1rem;
|
|
font-weight:bold;
|
|
color:#fff;
|
|
background-color:var(--primary-color);
|
|
border:none;
|
|
border-radius:50px;
|
|
cursor:pointer;
|
|
transition:background-color 0.2s,transform 0.2s;
|
|
}
|
|
.btn-primary:hover {
|
|
background-color:#0056b3;
|
|
transform:translateY(-2px);
|
|
}
|
|
.series-grid {
|
|
display:grid;
|
|
grid-template-columns:repeat(auto-fill,minmax(250px,1fr));
|
|
/* 微调卡片最小宽度 */
|
|
gap:25px;
|
|
}
|
|
/* --- 3. 系列卡片 (无变动,样式很棒) --- */
|
|
|
|
.series-card {
|
|
background:white;
|
|
border-radius:var(--border-radius);
|
|
box-shadow:var(--shadow);
|
|
overflow:hidden;
|
|
cursor:pointer;
|
|
transition:transform var(--transition-speed) ease,box-shadow var(--transition-speed) ease;
|
|
display:flex;
|
|
flex-direction:column;
|
|
}
|
|
.series-card:hover {
|
|
transform:translateY(-8px);
|
|
box-shadow:0 15px 30px rgba(0,0,0,0.15);
|
|
}
|
|
.series-card__thumbnail {
|
|
aspect-ratio:2 / 3;
|
|
background-color:#2a2a2e;
|
|
display:flex;
|
|
align-items:center;
|
|
justify-content:center;
|
|
overflow:hidden;
|
|
}
|
|
img.lazy {
|
|
opacity:0;
|
|
transition:opacity 0.3s ease-in-out;
|
|
}
|
|
img[src] {
|
|
opacity:1;
|
|
}
|
|
.series-card__thumbnail img {
|
|
width:100%;
|
|
height:100%;
|
|
object-fit:cover;
|
|
}
|
|
.series-card__thumbnail-placeholder {
|
|
width:100%;
|
|
height:100%;
|
|
background-color:#343a40;
|
|
color:white;
|
|
display:flex;
|
|
align-items:center;
|
|
justify-content:center;
|
|
font-size:4rem;
|
|
font-weight:bold;
|
|
user-select:none;
|
|
}
|
|
.series-card__info {
|
|
padding:20px;
|
|
flex-grow:1;
|
|
}
|
|
.series-card__info h3 {
|
|
margin:0;
|
|
font-size:1.2rem;
|
|
font-weight:500;
|
|
}
|
|
/* --- 4. 通用弹窗 (Modal) --- */
|
|
/* (无变动,结构良好) */
|
|
.modal-backdrop {
|
|
display:none;
|
|
position:fixed;
|
|
top:0;
|
|
left:0;
|
|
width:100%;
|
|
height:100%;
|
|
background:rgba(0,0,0,0.7);
|
|
backdrop-filter:blur(8px);
|
|
-webkit-backdrop-filter:blur(8px);
|
|
z-index:1000;
|
|
opacity:0;
|
|
transition:opacity var(--transition-speed) ease-in-out;
|
|
}
|
|
.modal-backdrop.active {
|
|
display:block;
|
|
opacity:1;
|
|
}
|
|
.modal,.video-modal {
|
|
display:none;
|
|
position:fixed;
|
|
top:0;
|
|
left:0;
|
|
width:100%;
|
|
height:100%;
|
|
z-index:1001;
|
|
opacity:0;
|
|
transition:opacity var(--transition-speed) ease-in-out;
|
|
padding:20px;
|
|
align-items:center;
|
|
justify-content:center;
|
|
}
|
|
.modal.active,.video-modal.active {
|
|
display:flex;
|
|
opacity:1;
|
|
}
|
|
.modal-content,.player-layout-container {
|
|
transform:scale(0.95);
|
|
transition:transform var(--transition-speed) ease-in-out;
|
|
}
|
|
.modal.active .modal-content,.video-modal.active .player-layout-container {
|
|
transform:scale(1);
|
|
}
|
|
/* --- 5. 剧集详情 & 心愿提交 Modal --- */
|
|
|
|
.modal-content {
|
|
background:white;
|
|
padding:30px;
|
|
border-radius:var(--border-radius);
|
|
box-shadow:var(--shadow);
|
|
width:90%;
|
|
max-width:500px;
|
|
display:flex;
|
|
flex-direction:column;
|
|
max-height:80vh;
|
|
}
|
|
.modal-content h3,.modal-content #detail-title {
|
|
text-align:center;
|
|
margin-bottom:10px;
|
|
}
|
|
.modal-content p {
|
|
text-align:center;
|
|
color:#6c757d;
|
|
margin-bottom:20px;
|
|
}
|
|
/* 【优化】Modal 内的表单样式 */
|
|
#request-form {
|
|
display:flex;
|
|
flex-direction:column;
|
|
/* 垂直排列 */
|
|
gap:15px;
|
|
width:100%;
|
|
}
|
|
#request-input {
|
|
padding:12px 15px;
|
|
font-size:1rem;
|
|
border:1px solid #ccc;
|
|
border-radius:6px;
|
|
outline:none;
|
|
}
|
|
#request-form button {
|
|
padding:12px 20px;
|
|
font-size:1rem;
|
|
font-weight:bold;
|
|
color:#fff;
|
|
background-color:var(--primary-color);
|
|
border:none;
|
|
border-radius:6px;
|
|
cursor:pointer;
|
|
transition:background-color 0.2s;
|
|
}
|
|
#request-form button:hover {
|
|
background-color:#0056b3;
|
|
}
|
|
.request-status {
|
|
margin-top:1rem;
|
|
min-height:1.2em;
|
|
font-weight:bold;
|
|
text-align:center;
|
|
}
|
|
.request-status.success {
|
|
color:#28a745;
|
|
}
|
|
.request-status.error {
|
|
color:#dc3545;
|
|
}
|
|
.episode-scroll-container {
|
|
overflow-y:auto;
|
|
border:1px solid #ddd;
|
|
border-radius:8px;
|
|
flex-grow:1;
|
|
min-height:0;
|
|
}
|
|
.episode-item,.player-episode-item {
|
|
display:flex;
|
|
/* 使用 flex 布局对齐 */
|
|
justify-content:space-between;
|
|
/* 让内容和对勾分开 */
|
|
align-items:center;
|
|
padding:15px 20px;
|
|
border-bottom:1px solid #e9ecef;
|
|
cursor:pointer;
|
|
transition:background-color var(--transition-speed),color var(--transition-speed);
|
|
}
|
|
.episode-item:last-child,.player-episode-item:last-child {
|
|
border-bottom:none;
|
|
}
|
|
.episode-item:hover,.player-episode-item:hover {
|
|
background-color:var(--primary-color);
|
|
color:white;
|
|
}
|
|
.player-episode-item.active {
|
|
background-color:var(--primary-color);
|
|
color:white;
|
|
font-weight:500;
|
|
}
|
|
.episode-item.watched span:first-child {
|
|
color:#888;
|
|
text-decoration:line-through;
|
|
}
|
|
.watched-check {
|
|
margin-left:auto;
|
|
font-size:0.9em;
|
|
padding-left:10px;
|
|
}
|
|
.btn-close {
|
|
display:block;
|
|
margin:20px auto 0;
|
|
padding:10px 25px;
|
|
background:#6c757d;
|
|
/* 灰色调,不那么刺眼 */
|
|
color:white;
|
|
border:none;
|
|
border-radius:50px;
|
|
cursor:pointer;
|
|
font-weight:500;
|
|
transition:background-color var(--transition-speed),transform var(--transition-speed);
|
|
flex-shrink:0;
|
|
}
|
|
.btn-close:hover {
|
|
background-color:#5a6268;
|
|
}
|
|
/* --- 6. 视频播放器 (Video Player) (无变动) --- */
|
|
.player-layout-container {
|
|
display:flex;
|
|
justify-content:center;
|
|
align-items:stretch;
|
|
width:100%;
|
|
max-width:1200px;
|
|
height:90vh;
|
|
gap:25px
|
|
}
|
|
.video-wrapper {
|
|
display:flex;
|
|
flex-direction:column;
|
|
justify-content:center;
|
|
align-items:center;
|
|
position:relative;
|
|
flex-grow:1;
|
|
min-width:0
|
|
}
|
|
#player-title {
|
|
color:#fff;
|
|
text-align:center;
|
|
margin-bottom:15px;
|
|
font-weight:500;
|
|
text-shadow:1px 1px 3px rgba(0,0,0,.5);
|
|
white-space:nowrap;
|
|
overflow:hidden;
|
|
text-overflow:ellipsis;
|
|
width:100%
|
|
}
|
|
.video-container {
|
|
position:relative;
|
|
background-color:#000;
|
|
border-radius:8px;
|
|
overflow:hidden;
|
|
aspect-ratio:9/16;
|
|
height:100%;
|
|
max-height:calc(100% - 70px)
|
|
}
|
|
#video-player {
|
|
width:100%;
|
|
height:100%;
|
|
display:block
|
|
}
|
|
.player-controls {
|
|
display:flex;
|
|
justify-content:space-between;
|
|
margin-top:15px;
|
|
width:100%
|
|
}
|
|
.player-nav-btn {
|
|
padding:10px 20px;
|
|
background-color:rgba(255,255,255,.2);
|
|
color:#fff;
|
|
border:1px solid rgba(255,255,255,.4);
|
|
border-radius:50px;
|
|
cursor:pointer;
|
|
transition:background-color .2s;
|
|
flex-basis:48%
|
|
}
|
|
.player-nav-btn:hover:not(:disabled) {
|
|
background-color:rgba(255,255,255,.4)
|
|
}
|
|
.player-nav-btn:disabled {
|
|
opacity:.5;
|
|
cursor:not-allowed
|
|
}
|
|
.video-close-btn {
|
|
position:absolute;
|
|
top:10px;
|
|
right:10px;
|
|
padding:0;
|
|
width:30px;
|
|
height:30px;
|
|
line-height:30px;
|
|
text-align:center;
|
|
background:rgba(0,0,0,.5);
|
|
font-size:1.2rem;
|
|
z-index:10;
|
|
border-radius:50%;
|
|
color:#fff;
|
|
border:none;
|
|
cursor:pointer
|
|
}
|
|
.player-episode-list-container {
|
|
display:none;
|
|
background:#fff;
|
|
border-radius:var(--border-radius);
|
|
padding:20px;
|
|
width:340px;
|
|
flex-shrink:0;
|
|
flex-direction:column
|
|
}
|
|
.player-episode-list-container h4 {
|
|
margin-bottom:15px;
|
|
text-align:center;
|
|
font-weight:500;
|
|
flex-shrink:0
|
|
}
|
|
/* --- 7. 响应式设计 (Media Queries) --- */
|
|
/* (微调) */
|
|
@media(min-width:801px) {
|
|
.player-episode-list-container {
|
|
display:flex
|
|
}
|
|
}@media(max-width:800px) {
|
|
.video-modal {
|
|
padding:0;
|
|
background:#000
|
|
}
|
|
.player-layout-container {
|
|
height:100%;
|
|
max-height:100vh;
|
|
padding:0
|
|
}
|
|
.video-wrapper {
|
|
width:100%;
|
|
height:100%;
|
|
justify-content:space-between;
|
|
padding:30px 15px
|
|
}
|
|
.video-container {
|
|
max-height:none;
|
|
height:auto;
|
|
width:100%;
|
|
flex-grow:1;
|
|
border-radius:0
|
|
}
|
|
#player-title {
|
|
order:1
|
|
}
|
|
.video-container {
|
|
order:2
|
|
}
|
|
.player-controls {
|
|
order:3
|
|
}
|
|
.video-close-btn {
|
|
top:15px;
|
|
right:15px
|
|
}
|
|
}@media (max-width:992px) {
|
|
/* 调整 container 边距的断点 */
|
|
.container {
|
|
margin:20px;
|
|
padding:20px;
|
|
}
|
|
}@media (max-width:768px) {
|
|
.main-header h1 {
|
|
font-size:2rem;
|
|
}
|
|
.series-grid {
|
|
grid-template-columns:repeat(auto-fill,minmax(200px,1fr));
|
|
}
|
|
/* 在平板上允许更小的卡片 */
|
|
.modal-content {
|
|
padding:20px;
|
|
width:95%;
|
|
}
|
|
}@media (max-width:576px) {
|
|
.header-content {
|
|
flex-direction: column;
|
|
align-items: flex-start;
|
|
text-align: left;
|
|
}
|
|
.main-header {
|
|
text-align: left;
|
|
}
|
|
.header-btn {
|
|
align-self: flex-start; /* 按钮也靠左 */
|
|
}
|
|
.container {
|
|
margin:15px;
|
|
padding:15px;
|
|
}
|
|
.series-grid {
|
|
grid-template-columns:1fr;
|
|
gap:15px;
|
|
}
|
|
/* 在手机上变为单列 */} |