diff --git a/app/static/css/detail.css b/app/static/css/detail.css
index aa3c9a5..dd95c3e 100644
--- a/app/static/css/detail.css
+++ b/app/static/css/detail.css
@@ -8,11 +8,6 @@
.detail-h5-bg,
.detail-h5-top,
.detail-h5-bar,
-.detail-meta-h5,
-.detail-intro-title,
-.detail-episodes-status,
-.detail-episode-ranges,
-.detail-episode--preview,
.detail-related-title-h5,
.detail-related-refresh {
display: none;
@@ -50,169 +45,6 @@
line-height: 20px;
}
-.detail-hero {
- align-self: stretch;
- width: 100%;
- padding: 24px 48px 24px 24px;
- background: rgba(255, 255, 255, 0.05);
- overflow: hidden;
- border-radius: 16px;
- border: 1px solid rgba(255, 255, 255, 0.10);
- justify-content: flex-start;
- align-items: center;
- gap: 24px;
- display: flex;
- box-sizing: border-box;
-}
-
-.detail-cover {
- width: 300px;
- height: 400px;
- border-radius: 18px;
- object-fit: cover;
- flex-shrink: 0;
-}
-
-.detail-hero-main {
- flex: 1 1 0;
- min-width: 0;
- min-height: 400px;
- overflow: hidden;
- flex-direction: column;
- justify-content: center;
- align-items: flex-start;
- gap: 30px;
- display: flex;
-}
-
-.detail-hero-info {
- width: 100%;
- overflow: hidden;
- flex-direction: column;
- justify-content: flex-start;
- align-items: flex-start;
- gap: 30px;
- display: flex;
-}
-
-.detail-tags {
- align-self: stretch;
- height: auto;
- min-height: 26px;
- overflow: visible;
- justify-content: flex-start;
- align-items: flex-start;
- gap: 9px;
- display: flex;
- flex-wrap: wrap;
-}
-
-.detail-tag {
- height: 26px;
- max-width: 100%;
- padding: 0 11px;
- background: rgba(255, 255, 255, 0.10);
- overflow: hidden;
- border-radius: 13px;
- justify-content: center;
- align-items: center;
- display: inline-flex;
- color: #8A8A8A;
- font-size: 12px;
- font-family: PingFang SC;
- font-weight: 400;
- line-height: 18px;
- box-sizing: border-box;
- flex-shrink: 0;
- white-space: nowrap;
- text-overflow: ellipsis;
- text-decoration: none;
-}
-
-.detail-tag--primary {
- background: #ec237f;
- color: #fff;
-}
-
-.detail-title {
- margin: 0;
- color: white;
- font-size: 34px;
- font-family: PingFang SC;
- font-weight: 400;
- line-height: 40px;
- word-wrap: break-word;
-}
-
-.detail-meta {
- color: #8A8A8A;
- font-size: 12px;
- font-family: PingFang SC;
- font-weight: 400;
- line-height: 18px;
- word-wrap: break-word;
-}
-
-.detail-meta-pc {
- display: flex;
- align-items: center;
- gap: 18px;
-}
-
-.detail-intro-block {
- width: 100%;
-}
-
-.detail-intro {
- margin: 0;
- width: 100%;
- color: #8A8A8A;
- font-size: 12px;
- font-family: PingFang SC;
- font-weight: 400;
- line-height: 18px;
- word-wrap: break-word;
- display: -webkit-box;
- -webkit-line-clamp: 6;
- -webkit-box-orient: vertical;
- overflow: hidden;
-}
-
-.detail-intro-prefix-pc {
- display: inline;
-}
-
-.detail-actions {
- width: 100%;
- height: 45px;
- overflow: hidden;
- justify-content: space-between;
- align-items: center;
- display: flex;
- gap: 16px;
- flex-wrap: wrap;
-}
-
-.detail-play-btn {
- height: 45px;
- padding: 0 12px;
- background: #ec237f;
- overflow: hidden;
- border-radius: 23px;
- justify-content: center;
- align-items: center;
- display: flex;
- border: none;
- cursor: pointer;
- color: #181818;
- font-size: 16px;
- font-family: PingFang SC;
- font-weight: 400;
- line-height: 22px;
- text-decoration: none;
- box-sizing: border-box;
-}
-
.detail-action-group {
justify-content: flex-start;
align-items: center;
@@ -274,78 +106,6 @@
background: rgba(255, 255, 255, 0.05);
}
-.detail-episodes {
- align-self: stretch;
- width: 100%;
- overflow: hidden;
- flex-direction: column;
- justify-content: flex-start;
- align-items: flex-start;
- gap: 16px;
- display: flex;
-}
-
-.detail-episodes-head {
- width: 100%;
- display: flex;
- justify-content: space-between;
- align-items: center;
-}
-
-.detail-section-label {
- color: #F5F5F5;
- font-size: 18px;
- font-family: PingFang SC;
- font-weight: 600;
- line-height: 27px;
-}
-
-.detail-episode-list {
- width: 100%;
- justify-content: flex-start;
- align-items: flex-start;
- gap: 14px;
- display: flex;
- flex-wrap: wrap;
-}
-
-.detail-episode-lock {
- position: absolute;
- top: 0;
- right: 0;
- padding: 0 4px;
- border-radius: 0 7px 0 7px;
- background: #ec237f;
- color: #fff;
- font-size: 9px;
- font-family: PingFang SC;
- font-weight: 500;
- line-height: 14px;
- pointer-events: none;
-}
-
-.detail-episode {
- flex: 0 0 calc((100% - 98px) / 8);
- width: calc((100% - 98px) / 8);
- height: 54px;
- position: relative;
- background: rgba(255, 255, 255, 0.10);
- overflow: hidden;
- border-radius: 7px;
- justify-content: center;
- align-items: center;
- display: flex;
- border: none;
- cursor: pointer;
- color: #808080;
- font-size: 12px;
- font-family: PingFang SC;
- font-weight: 400;
- line-height: 18px;
- text-decoration: none;
- box-sizing: border-box;
-}
-
.detail-comments {
align-self: stretch;
width: 100%;
@@ -750,220 +510,19 @@
box-sizing: border-box;
}
- .detail-meta-pc,
- .detail-actions,
.detail-comments,
- .detail-related-desc,
- .detail-related-title-pc,
- .detail-episode-pc,
- .detail-episodes-status-icon,
- .detail-breadcrumb {
+.detail-related-desc,
+.detail-related-title-pc,
+.detail-breadcrumb {
display: none !important;
}
- .detail-meta-h5,
- .detail-intro-title,
- .detail-episodes-status,
- .detail-episode-ranges,
- .detail-episode--preview,
.detail-related-title-h5,
- .detail-related-refresh,
- .detail-h5-bar {
+.detail-related-refresh,
+.detail-h5-bar {
display: flex;
}
- .detail-hero {
- width: 100%;
- padding: 0;
- background: transparent;
- border-radius: 0;
- border: none;
- display: grid;
- grid-template-columns: 76px 1fr;
- gap: 18px 12px;
- align-items: start;
- }
-
- .detail-hero-main {
- display: contents;
- }
-
- .detail-cover {
- width: 76px;
- height: 106px;
- border-radius: 6px;
- grid-column: 1;
- grid-row: 1;
- background: #D4D4D4;
- }
-
- .detail-hero-info {
- grid-column: 2;
- grid-row: 1;
- width: auto;
- gap: 12px;
- min-width: 0;
- }
-
- .detail-title {
- order: 1;
- width: 100%;
- max-width: 220px;
- font-size: 16px;
- font-weight: 500;
- line-height: 22px;
- display: -webkit-box;
- -webkit-line-clamp: 2;
- -webkit-box-orient: vertical;
- overflow: hidden;
- }
-
- .detail-meta {
- order: 2;
- }
-
- .detail-meta-h5 {
- align-items: flex-start;
- gap: 6px;
- color: white;
- font-size: 12px;
- line-height: 18px;
- }
-
- .detail-meta-dot {
- flex-shrink: 0;
- }
-
- .detail-tags {
- order: 3;
- height: auto;
- gap: 6px;
- flex-wrap: wrap;
- }
-
- .detail-tag {
- height: auto;
- padding: 2px 6px;
- background: rgba(255, 255, 255, 0.10);
- border-radius: 3px;
- color: white;
- }
-
- .detail-tag--primary {
- background: rgba(255, 255, 255, 0.10);
- color: white;
- }
-
- .detail-intro-block {
- grid-column: 1 / -1;
- max-width: none;
- display: flex;
- flex-direction: column;
- gap: 12px;
- }
-
- .detail-intro-title {
- color: white;
- font-size: 16px;
- font-weight: 500;
- line-height: 22px;
- }
-
- .detail-intro {
- color: white;
- -webkit-line-clamp: 3;
- }
-
- .detail-intro-prefix-pc {
- display: none;
- }
-
- .detail-episodes {
- width: 100%;
- gap: 12px;
- }
-
- .detail-episodes-head {
- width: 100%;
- }
-
- .detail-section-label {
- color: white;
- font-size: 14px;
- font-weight: 400;
- line-height: 20px;
- }
-
- .detail-episodes-status {
- align-items: center;
- gap: 2px;
- color: rgba(255, 255, 255, 0.35);
- font-size: 12px;
- line-height: 18px;
- }
-
- .detail-episode-ranges {
- width: 100%;
- align-items: center;
- gap: 24px;
- }
-
- .detail-episode-range {
- background: none;
- border: none;
- padding: 0;
- cursor: pointer;
- color: rgba(255, 255, 255, 0.55);
- font-size: 14px;
- font-family: PingFang SC;
- font-weight: 400;
- line-height: 20px;
- }
-
- .detail-episode-range--active {
- color: white;
- }
-
- .detail-episode-list {
- width: 100%;
- display: flex;
- flex-wrap: nowrap;
- justify-content: flex-start;
- align-items: center;
- gap: 6px;
- overflow-x: auto;
- overflow-y: hidden;
- -webkit-overflow-scrolling: touch;
- scrollbar-width: none;
- }
-
- .detail-episode-list::-webkit-scrollbar {
- display: none;
- }
-
- .detail-episode.is-range-hidden {
- display: none !important;
- }
-
- .detail-episode {
- flex: 0 0 58px;
- width: 58px;
- min-width: 58px;
- height: 58px;
- border-radius: 10px;
- background: rgba(255, 255, 255, 0.10);
- color: white;
- font-size: 18px;
- font-weight: 400;
- line-height: 24px;
- }
-
- .detail-episode::before {
- content: attr(data-ep);
- width: 24px;
- text-align: center;
- }
-
.detail-related {
width: 100%;
gap: 12px;
@@ -1265,90 +824,6 @@
flex-shrink: 0;
}
- .detail-hero {
- min-height: 0;
- padding: calc(24px * var(--detail-s)) calc(48px * var(--detail-s)) calc(24px * var(--detail-s)) calc(24px * var(--detail-s));
- background: rgba(255, 255, 255, 0.05);
- border: 0;
- outline: 1px solid rgba(255, 255, 255, 0.10);
- outline-offset: -1px;
- border-radius: calc(16px * var(--detail-s));
- gap: calc(24px * var(--detail-s));
- }
-
- .detail-cover {
- width: calc(300px * var(--detail-s));
- height: calc(400px * var(--detail-s));
- border-radius: calc(18px * var(--detail-s));
- }
-
- .detail-hero-main {
- min-height: calc(400px * var(--detail-s));
- gap: calc(30px * var(--detail-s));
- }
-
- .detail-hero-info { gap: calc(30px * var(--detail-s)); }
-
- .detail-tags {
- gap: calc(9px * var(--detail-s));
- height: calc(26px * var(--detail-s));
- overflow: hidden;
- }
-
- .detail-tag {
- height: calc(26px * var(--detail-s));
- padding: 0 calc(11px * var(--detail-s));
- border-radius: calc(6px * var(--detail-s));
- background: rgba(255, 255, 255, 0.10);
- color: rgba(255, 255, 255, 0.55);
- font-size: calc(12px * var(--detail-s));
- line-height: calc(18px * var(--detail-s));
- }
-
- .detail-tag--primary { background: #ec237f; color: #fff; }
-
- .detail-title {
- font-size: calc(24px * var(--detail-s));
- font-weight: 600;
- line-height: calc(32px * var(--detail-s));
- }
-
- .detail-meta {
- color: rgba(255, 255, 255, 0.55);
- font-size: calc(16px * var(--detail-s));
- line-height: calc(22px * var(--detail-s));
- }
-
- .detail-meta-pc { gap: calc(18px * var(--detail-s)); }
-
- .detail-intro {
- color: rgba(255, 255, 255, 0.55);
- font-size: calc(14px * var(--detail-s));
- line-height: calc(20px * var(--detail-s));
- }
-
- .detail-actions {
- height: calc(45px * var(--detail-s));
- justify-content: space-between;
- }
-
- .detail-play-btn {
- height: calc(45px * var(--detail-s));
- padding: 0 calc(12px * var(--detail-s));
- gap: calc(4px * var(--detail-s));
- border-radius: calc(23px * var(--detail-s));
- background: #ec237f;
- color: #fff;
- font-size: calc(16px * var(--detail-s));
- line-height: calc(22px * var(--detail-s));
- }
-
- .detail-play-btn img {
- width: calc(16px * var(--detail-s));
- height: calc(17px * var(--detail-s));
- filter: brightness(0) invert(1);
- }
-
.detail-action-group { gap: calc(16px * var(--detail-s)); }
.detail-action {
@@ -1379,52 +854,6 @@
background: rgba(255, 255, 255, 0.05);
}
- .detail-episodes { gap: calc(14px * var(--detail-s)); }
-
- .detail-section-label {
- font-size: calc(24px * var(--detail-s));
- font-weight: 500;
- line-height: calc(32px * var(--detail-s));
- }
-
- .detail-episode-pc {
- display: none !important;
- }
-
- .detail-episode-list {
- display: grid;
- grid-template-columns: repeat(auto-fill, calc(58px * var(--detail-s)));
- justify-content: space-between;
- align-items: center;
- gap: calc(12px * var(--detail-s)) calc(7px * var(--detail-s));
- overflow: hidden;
- }
-
- .detail-episode {
- flex: none;
- width: calc(58px * var(--detail-s));
- min-width: calc(58px * var(--detail-s));
- height: calc(58px * var(--detail-s));
- border-radius: calc(10px * var(--detail-s));
- background: rgba(255, 255, 255, 0.10);
- color: #fff;
- font-size: calc(18px * var(--detail-s));
- font-weight: 400;
- line-height: calc(24px * var(--detail-s));
- }
-
- .detail-episode.is-active,
- .detail-episode.detail-episode--active {
- background: rgba(255, 74, 74, 0.08);
- color: #ec237f;
- }
-
- .detail-episode::before {
- content: attr(data-ep);
- width: calc(24px * var(--detail-s));
- text-align: center;
- }
-
.content-official-info {
padding: calc(24px * var(--detail-s)) calc(30px * var(--detail-s));
border-radius: calc(18px * var(--detail-s));
@@ -1579,7 +1008,6 @@
.detail-main,
.detail-sidebar { display: contents; }
- .detail-episodes,
.detail-related {
padding-top: 18px;
border-top: 1px solid rgba(255, 255, 255, .1);
diff --git a/app/static/css/detailHero.css b/app/static/css/detailHero.css
new file mode 100644
index 0000000..34907b7
--- /dev/null
+++ b/app/static/css/detailHero.css
@@ -0,0 +1,557 @@
+/* 详情页:信息卡(海报 + 剧集信息)与选集卡,结构参考 huangguoai.com 详情页,配色沿用品牌粉。 */
+
+.dh-card {
+ width: 100%;
+ padding: 32px;
+ background: #1A1A1A;
+ border: 1px solid rgba(255, 255, 255, 0.08);
+ border-radius: 20px;
+ box-sizing: border-box;
+ font-family: PingFang SC, sans-serif;
+}
+
+/* ---------- 信息卡 ---------- */
+.dh-hero {
+ display: flex;
+ align-items: flex-start;
+ gap: 28px;
+}
+
+.dh-poster {
+ position: relative;
+ flex: 0 0 210px;
+ aspect-ratio: 3 / 4;
+ display: block;
+ overflow: hidden;
+ border-radius: 12px;
+ background: #111;
+}
+
+.dh-poster-img {
+ width: 100%;
+ height: 100%;
+ display: block;
+ object-fit: cover;
+ transition: transform 0.3s ease;
+}
+
+.dh-poster:hover .dh-poster-img {
+ transform: scale(1.04);
+}
+
+.dh-poster-badge {
+ position: absolute;
+ top: 8px;
+ left: 8px;
+ padding: 2px 8px;
+ background: #EC237F;
+ border-radius: 6px;
+ color: #FFFFFF;
+ font-size: 12px;
+ font-weight: 600;
+ line-height: 18px;
+}
+
+.dh-poster-eps {
+ position: absolute;
+ right: 8px;
+ bottom: 8px;
+ padding: 2px 8px;
+ background: rgba(0, 0, 0, 0.65);
+ border-radius: 6px;
+ color: #FFFFFF;
+ font-size: 12px;
+ font-weight: 600;
+ line-height: 18px;
+}
+
+.dh-poster-play {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 56px;
+ height: 56px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: rgba(236, 35, 127, 0.88);
+ border-radius: 50%;
+ box-shadow: 0 6px 18px rgba(0, 0, 0, 0.4);
+ transform: translate(-50%, -50%);
+ transition: transform 0.2s ease, background 0.2s ease;
+}
+
+.dh-poster-play img {
+ width: 22px;
+ height: 22px;
+ margin-left: 3px;
+}
+
+/* player.svg 本身是黑色填充,粉底上统一显示为白色 */
+.dh-poster-play img,
+.dh-btn--primary img {
+ filter: brightness(0) invert(1);
+}
+
+.dh-poster:hover .dh-poster-play {
+ background: #EC237F;
+ transform: translate(-50%, -50%) scale(1.08);
+}
+
+.dh-info {
+ flex: 1;
+ min-width: 0;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 12px;
+}
+
+.dh-brand {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ color: #FFFFFF;
+ font-size: 14px;
+ line-height: 20px;
+}
+
+.dh-brand-avatar {
+ width: 28px;
+ height: 28px;
+ border-radius: 50%;
+}
+
+.dh-title {
+ margin: 0;
+ color: #FFFFFF;
+ font-size: 32px;
+ font-weight: 600;
+ line-height: 42px;
+}
+
+.dh-meta {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ color: rgba(255, 255, 255, 0.6);
+ font-size: 14px;
+ line-height: 20px;
+}
+
+.dh-meta span + span::before {
+ content: "·";
+ margin: 0 8px;
+ color: rgba(255, 255, 255, 0.35);
+}
+
+.dh-intro-title {
+ margin: 6px 0 0;
+ color: #FFFFFF;
+ font-size: 16px;
+ font-weight: 600;
+ line-height: 24px;
+}
+
+.dh-intro {
+ margin: 0;
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 3;
+ overflow: hidden;
+ color: rgba(255, 255, 255, 0.72);
+ font-size: 14px;
+ line-height: 22px;
+}
+
+.dh-intro.is-expanded {
+ display: block;
+ -webkit-line-clamp: unset;
+}
+
+.dh-intro-toggle {
+ margin-top: -6px;
+ padding: 0;
+ background: none;
+ border: 0;
+ color: #EC237F;
+ font-size: 13px;
+ line-height: 20px;
+ cursor: pointer;
+}
+
+.dh-tags,
+.dh-themes {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: 8px;
+}
+
+.dh-tag {
+ padding: 4px 12px;
+ background: rgba(255, 255, 255, 0.08);
+ border-radius: 999px;
+ color: rgba(255, 255, 255, 0.85);
+ font-size: 12px;
+ line-height: 18px;
+ text-decoration: none;
+ transition: background 0.18s ease, color 0.18s ease;
+}
+
+a.dh-tag:hover {
+ background: rgba(236, 35, 127, 0.16);
+ color: #EC237F;
+}
+
+.dh-themes-label {
+ color: rgba(255, 255, 255, 0.5);
+ font-size: 13px;
+ line-height: 20px;
+}
+
+.dh-theme {
+ padding: 3px 12px;
+ border: 1px solid rgba(236, 35, 127, 0.6);
+ border-radius: 999px;
+ color: #EC237F;
+ font-size: 13px;
+ line-height: 18px;
+ text-decoration: none;
+}
+
+a.dh-theme:hover {
+ background: rgba(236, 35, 127, 0.12);
+}
+
+.dh-actions {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 12px;
+ margin-top: 6px;
+}
+
+.dh-btn {
+ height: 48px;
+ padding: 0 24px;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: 8px;
+ background: transparent;
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ border-radius: 999px;
+ box-sizing: border-box;
+ color: #FFFFFF;
+ font-family: inherit;
+ font-size: 16px;
+ font-weight: 600;
+ line-height: 22px;
+ text-decoration: none;
+ white-space: nowrap;
+ cursor: pointer;
+ transition: border-color 0.18s ease, background 0.18s ease, filter 0.18s ease;
+}
+
+.dh-btn img {
+ width: 18px;
+ height: 18px;
+}
+
+.dh-btn:hover {
+ border-color: rgba(255, 255, 255, 0.45);
+ background: rgba(255, 255, 255, 0.04);
+}
+
+.dh-btn--primary {
+ padding: 0 32px;
+ background: #EC237F;
+ border-color: #EC237F;
+}
+
+.dh-btn--primary:hover {
+ background: #EC237F;
+ border-color: #EC237F;
+ filter: brightness(1.08);
+}
+
+/* ---------- 选集卡 ---------- */
+.dh-episodes-head {
+ display: flex;
+ align-items: flex-start;
+ justify-content: space-between;
+ gap: 16px;
+}
+
+.dh-episodes-title {
+ margin: 0;
+ color: #FFFFFF;
+ font-size: 20px;
+ font-weight: 600;
+ line-height: 28px;
+}
+
+.dh-episodes-sub {
+ margin-top: 4px;
+ color: rgba(255, 255, 255, 0.5);
+ font-size: 13px;
+ line-height: 20px;
+}
+
+.dh-episodes-hint {
+ flex-shrink: 0;
+ color: #EC237F;
+ font-size: 13px;
+ line-height: 28px;
+}
+
+.dh-ranges {
+ display: flex;
+ gap: 8px;
+ margin-top: 16px;
+ overflow-x: auto;
+ scrollbar-width: none;
+}
+
+.dh-ranges::-webkit-scrollbar {
+ display: none;
+}
+
+.dh-range {
+ flex: 0 0 auto;
+ height: 32px;
+ padding: 0 14px;
+ background: rgba(255, 255, 255, 0.06);
+ border: 0;
+ border-radius: 8px;
+ color: rgba(255, 255, 255, 0.7);
+ font-family: inherit;
+ font-size: 13px;
+ cursor: pointer;
+}
+
+.dh-range.is-active {
+ background: rgba(236, 35, 127, 0.16);
+ color: #EC237F;
+}
+
+.dh-ep-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(88px, 1fr));
+ gap: 12px 10px;
+ margin-top: 16px;
+}
+
+.dh-ep {
+ position: relative;
+ height: 44px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: rgba(255, 255, 255, 0.06);
+ border-radius: 10px;
+ color: #FFFFFF;
+ font-size: 15px;
+ font-weight: 500;
+ text-decoration: none;
+ transition: background 0.18s ease, color 0.18s ease;
+}
+
+.dh-ep:hover {
+ background: rgba(236, 35, 127, 0.18);
+ color: #EC237F;
+}
+
+.dh-ep.is-range-hidden {
+ display: none;
+}
+
+.dh-ep-lock {
+ position: absolute;
+ top: -6px;
+ right: -4px;
+ padding: 0 5px;
+ background: #EC237F;
+ border-radius: 6px 6px 6px 0;
+ color: #FFFFFF;
+ font-size: 10px;
+ font-weight: 600;
+ line-height: 15px;
+}
+
+/* ---------- 官方地址卡(详情页内,含手机端) ---------- */
+body.is-detail-page .content-official-info {
+ display: grid !important;
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
+ gap: 14px 24px;
+ padding: 24px 32px;
+ background: #1A1A1A;
+ outline: 1px solid rgba(255, 255, 255, 0.08);
+ border-radius: 20px;
+ color: rgba(255, 255, 255, 0.55);
+ font-size: 13px;
+ line-height: 20px;
+}
+
+body.is-detail-page .content-official-info::before {
+ content: "官方地址 · 请收藏,防止迷路";
+ grid-column: 1 / -1;
+ color: #FFFFFF;
+ font-size: 16px;
+ font-weight: 600;
+ line-height: 24px;
+}
+
+body.is-detail-page .content-official-info a {
+ color: #EC237F;
+ font-size: 14px;
+ word-break: break-all;
+}
+
+/* ---------- 平板:信息卡缩小海报 ---------- */
+@media (min-width: 768px) and (max-width: 1023px) {
+ .dh-card {
+ padding: 24px;
+ }
+
+ .dh-poster {
+ flex-basis: 170px;
+ }
+
+ .dh-title {
+ font-size: 26px;
+ line-height: 36px;
+ }
+}
+
+/* ---------- 手机 ---------- */
+@media (max-width: 767px) {
+ .dh-card {
+ padding: 16px;
+ background: rgba(26, 26, 26, 0.82);
+ border-radius: 16px;
+ -webkit-backdrop-filter: blur(10px);
+ backdrop-filter: blur(10px);
+ }
+
+ .dh-hero {
+ flex-direction: column;
+ gap: 16px;
+ }
+
+ .dh-poster {
+ flex: none;
+ width: 48%;
+ max-width: 190px;
+ }
+
+ .dh-poster-play {
+ width: 46px;
+ height: 46px;
+ }
+
+ .dh-poster-play img {
+ width: 18px;
+ height: 18px;
+ }
+
+ .dh-info {
+ width: 100%;
+ gap: 10px;
+ }
+
+ .dh-brand {
+ font-size: 13px;
+ }
+
+ .dh-brand-avatar {
+ width: 24px;
+ height: 24px;
+ }
+
+ .dh-title {
+ font-size: 22px;
+ line-height: 30px;
+ }
+
+ .dh-meta {
+ font-size: 12px;
+ line-height: 18px;
+ }
+
+ .dh-meta span + span::before {
+ margin: 0 6px;
+ }
+
+ .dh-intro-title {
+ font-size: 15px;
+ line-height: 22px;
+ }
+
+ .dh-intro {
+ font-size: 13px;
+ line-height: 20px;
+ }
+
+ .dh-actions {
+ width: 100%;
+ gap: 10px;
+ }
+
+ .dh-actions {
+ flex-wrap: nowrap;
+ }
+
+ .dh-btn {
+ height: 42px;
+ padding: 0 14px;
+ gap: 6px;
+ font-size: 15px;
+ }
+
+ .dh-btn img {
+ width: 16px;
+ height: 16px;
+ }
+
+ .dh-btn--primary {
+ flex: 1;
+ padding: 0 16px;
+ }
+
+ .dh-episodes-title {
+ font-size: 17px;
+ line-height: 24px;
+ }
+
+ .dh-episodes-sub,
+ .dh-episodes-hint {
+ font-size: 12px;
+ }
+
+ .dh-episodes-hint {
+ line-height: 24px;
+ }
+
+ .dh-ep-grid {
+ grid-template-columns: repeat(5, minmax(0, 1fr));
+ gap: 10px 8px;
+ }
+
+ .dh-ep {
+ height: 42px;
+ font-size: 14px;
+ }
+
+ body.is-detail-page .content-official-info {
+ grid-template-columns: 1fr;
+ gap: 12px;
+ padding: 16px;
+ border-radius: 16px;
+ }
+
+ body.is-detail-page .content-official-info::before {
+ font-size: 15px;
+ line-height: 22px;
+ }
+}
diff --git a/app/static/css/downloadAppFloat.css b/app/static/css/downloadAppFloat.css
index aa7f484..dc61041 100644
--- a/app/static/css/downloadAppFloat.css
+++ b/app/static/css/downloadAppFloat.css
@@ -100,7 +100,6 @@
line-height: 20px;
}
- body[class].is-detail-page .download-fab,
body[class].is-play-page .download-fab {
display: none !important;
}
diff --git a/app/static/css/footer.css b/app/static/css/footer.css
index 2f5f2f4..05e821e 100644
--- a/app/static/css/footer.css
+++ b/app/static/css/footer.css
@@ -1120,3 +1120,38 @@ a.footer-contact-line:focus-visible .footer-contact-url {
.floating-action {
translate: 0 calc(var(--footer-lift, 0px) * -1);
}
+
+/* 手机页脚卡片底部:访问地址 */
+@media (max-width: 767px) {
+ .site-shell .home-mobile-footer-addrs {
+ width: 100%;
+ padding-top: 14px;
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ box-sizing: border-box;
+ }
+
+ .site-shell .home-mobile-footer-addr {
+ display: flex;
+ align-items: baseline;
+ justify-content: space-between;
+ gap: 12px;
+ color: rgba(255, 255, 255, 0.55);
+ font: 400 12px/18px "PingFang SC", sans-serif;
+ text-decoration: none;
+ }
+
+ .site-shell .home-mobile-footer-addr span:first-child {
+ flex: 0 0 auto;
+ }
+
+ .site-shell .home-mobile-footer-addr-url {
+ min-width: 0;
+ color: #EC237F;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+}
diff --git a/app/static/css/header.css b/app/static/css/header.css
index 2baafa3..993b11d 100644
--- a/app/static/css/header.css
+++ b/app/static/css/header.css
@@ -1569,3 +1569,33 @@ nav[aria-label="面包屑"] a:hover,
nav[aria-label="面包屑"] a:focus-visible {
color: #EC237F !important;
}
+
+/* 手机页头:下载 App / 商务 TG 图标,样式同搜索按钮 */
+.header-mobile-icon-link {
+ display: none;
+}
+
+@media (max-width: 767px) {
+ .header-mobile-icon-link {
+ width: 24px;
+ height: 24px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex: 0 0 24px;
+ border-radius: 50%;
+ background: rgba(255, 255, 255, 0.05);
+ }
+
+ .header-mobile-icon-link img {
+ width: 16px;
+ height: 16px;
+ display: block;
+ filter: brightness(0) invert(1);
+ }
+
+ .header-mobile-icon-link .header-mobile-icon-img--lg {
+ width: 18px;
+ height: 18px;
+ }
+}
diff --git a/app/static/css/index.css b/app/static/css/index.css
index fd5eeb2..5300aa2 100644
--- a/app/static/css/index.css
+++ b/app/static/css/index.css
@@ -3484,3 +3484,13 @@ body.site-shell .theme-index-card:focus-visible > img {
animation: none;
}
}
+
+/* 跑马灯里的官方地址链接 */
+.home-page .home-announcement-link {
+ color: #EC237F;
+ text-decoration: none;
+}
+
+.home-page .home-announcement-link:hover {
+ text-decoration: underline;
+}
diff --git a/app/static/images/header-download.svg b/app/static/images/header-download.svg
new file mode 100644
index 0000000..0fc8ac2
--- /dev/null
+++ b/app/static/images/header-download.svg
@@ -0,0 +1,3 @@
+
diff --git a/app/static/js/pages/detail.js b/app/static/js/pages/detail.js
index 9965ab2..8663d7f 100644
--- a/app/static/js/pages/detail.js
+++ b/app/static/js/pages/detail.js
@@ -1,9 +1,9 @@
(function () {
- var section = document.querySelector(".detail-episodes");
+ var section = document.querySelector("[data-dh-episodes]");
if (!section) return;
- var ranges = section.querySelectorAll(".detail-episode-range");
- var episodes = section.querySelectorAll(".detail-episode-list .detail-episode");
+ var ranges = section.querySelectorAll(".dh-range");
+ var episodes = section.querySelectorAll(".dh-ep");
if (!episodes.length) return;
if (!ranges.length) return;
@@ -17,7 +17,7 @@
function activate(btn) {
ranges.forEach(function (item) {
- item.classList.toggle("detail-episode-range--active", item === btn);
+ item.classList.toggle("is-active", item === btn);
});
applyRange(Number(btn.dataset.rangeStart), Number(btn.dataset.rangeEnd));
}
@@ -28,10 +28,29 @@
});
});
- var active = section.querySelector(".detail-episode-range--active") || ranges[0];
+ var active = section.querySelector(".dh-range.is-active") || ranges[0];
activate(active);
})();
+// 简介超出行数时显示「展开 / 收起」
+(function () {
+ var intro = document.querySelector("[data-dh-intro]");
+ var toggle = document.querySelector("[data-dh-intro-toggle]");
+ if (!intro || !toggle) return;
+
+ function sync() {
+ if (intro.classList.contains("is-expanded")) return;
+ toggle.hidden = intro.scrollHeight <= intro.clientHeight + 1;
+ }
+
+ toggle.addEventListener("click", function () {
+ var expanded = intro.classList.toggle("is-expanded");
+ toggle.textContent = expanded ? "收起" : "展开";
+ });
+ window.addEventListener("resize", sync);
+ sync();
+})();
+
(function () {
var shareBtns = document.querySelectorAll("[data-detail-share]");
if (!shareBtns.length) return;
diff --git a/app/static/js/pages/header.js b/app/static/js/pages/header.js
index 33e0037..4ec2c8f 100644
--- a/app/static/js/pages/header.js
+++ b/app/static/js/pages/header.js
@@ -108,7 +108,7 @@
el = el.parentElement;
}
if (!el || !el.closest) return;
- var tag = el.closest(".poster-card-tag[data-tag-href], .ranking-card-tag[data-tag-href], .detail-tag[data-tag-href]");
+ var tag = el.closest(".poster-card-tag[data-tag-href], .ranking-card-tag[data-tag-href]");
if (!tag) return;
var href = tag.getAttribute("data-tag-href");
if (!href) return;
diff --git a/app/templates/base/downloadAppFloat.html b/app/templates/base/downloadAppFloat.html
index 6793abf..737def0 100644
--- a/app/templates/base/downloadAppFloat.html
+++ b/app/templates/base/downloadAppFloat.html
@@ -1,5 +1,5 @@
{{define "downloadAppFloat"}} {{if .appConfig.AppAddr}}
-
+
+