first commit

This commit is contained in:
2026-01-07 16:24:34 +00:00
commit 5c1399bb96
362 changed files with 59794 additions and 0 deletions

View File

@@ -0,0 +1,480 @@
.aplayer.aplayer-fixed {
left: unset !important;
right: 2rem !important;
bottom: 2rem !important;
color: #000;
width: 100%;
background: transparent !important;
box-shadow: none !important;
transition: background 0.3s ease, box-shadow 0.3s ease;
}
/* 展开状态时始终显示背景(包括 local 模式和 meting 模式) */
.aplayer.aplayer-fixed:not(.aplayer-narrow) {
background: var(--card-bg, white) !important;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.07), 0 1px 5px 0 rgba(0, 0, 0, 0.1) !important;
}
.aplayer.aplayer-fixed:not(.aplayer-narrow) .aplayer-body {
background: var(--card-bg, white) !important;
}
/* 暗色主题:展开状态时显示背景 */
:root.dark .aplayer.aplayer-fixed:not(.aplayer-narrow) {
background: var(--card-bg, oklch(0.23 0.015 var(--hue))) !important;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.3), 0 1px 5px 0 rgba(0, 0, 0, 0.4) !important;
}
:root.dark .aplayer.aplayer-fixed:not(.aplayer-narrow) .aplayer-body {
background: var(--card-bg, oklch(0.23 0.015 var(--hue))) !important;
}
/* 收缩状态下鼠标悬浮时显示背景 */
.aplayer.aplayer-fixed.aplayer-narrow:hover {
background: var(--card-bg, white) !important;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.07), 0 1px 5px 0 rgba(0, 0, 0, 0.1) !important;
}
/* 暗色主题悬浮效果 */
:root.dark .aplayer.aplayer-fixed.aplayer-narrow:hover {
background: var(--card-bg, oklch(0.23 0.015 var(--hue))) !important;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.3), 0 1px 5px 0 rgba(0, 0, 0, 0.4) !important;
}
:root.dark .aplayer.aplayer-fixed {
color: var(--btn-content, oklch(0.75 0.1 var(--hue)));
}
.aplayer.aplayer-fixed .aplayer-body {
left: unset !important;
right: 2rem !important;
width: 400px !important;
bottom: 2rem !important;
max-width: calc(100% - 18px);
padding-right: 0 !important;
background: transparent !important;
transition: background 0.3s ease;
}
.aplayer.aplayer-fixed .aplayer-miniswitcher {
right: unset;
left: -18px;
transform: rotate(180deg);
opacity: 0;
transition: opacity 0.2s ease;
}
/* 触摸设备:始终显示 miniswitcher 和背景 */
@media (hover: none) and (pointer: coarse) {
.aplayer.aplayer-fixed .aplayer-miniswitcher {
display: block;
opacity: 1;
/* 触摸设备上半透明背景 */
background: rgba(200, 200, 200, 0.5) !important;
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
}
/* 触摸设备暗色主题:半透明背景 */
:root.dark .aplayer.aplayer-fixed .aplayer-miniswitcher {
background: rgba(100, 100, 100, 0.5) !important;
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
}
/* 触摸设备上始终显示背景 */
.aplayer.aplayer-fixed {
background: var(--card-bg, white) !important;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.07), 0 1px 5px 0 rgba(0, 0, 0, 0.1) !important;
}
:root.dark .aplayer.aplayer-fixed {
background: var(--card-bg, oklch(0.23 0.015 var(--hue))) !important;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.3), 0 1px 5px 0 rgba(0, 0, 0, 0.4) !important;
}
}
/* 非触摸设备:默认隐藏,悬停时显示 */
@media (hover: hover) {
.aplayer.aplayer-fixed .aplayer-miniswitcher {
display: none;
}
/* 鼠标悬停在播放器上时显示 miniswitcher */
.aplayer.aplayer-fixed:hover .aplayer-miniswitcher {
display: block;
opacity: 1;
}
/* 收起状态下也支持悬停显示 */
.aplayer.aplayer-fixed.aplayer-narrow:hover .aplayer-miniswitcher {
display: block;
opacity: 1;
}
/* 列表展开状态时始终显示收缩按钮 */
.aplayer.aplayer-fixed.aplayer-withlist:not(.aplayer-narrow) .aplayer-miniswitcher {
display: block !important;
opacity: 1 !important;
}
}
/* 禁用初始化时的过渡动画,只在加载完成后恢复 */
.aplayer.aplayer-fixed:not([data-initialized="true"]) .aplayer-body {
transition: none !important;
}
.aplayer.aplayer-fixed:not([data-initialized="true"]) .aplayer-info {
transition: none !important;
}
/* 缩小状态下禁用所有过渡动画 */
.aplayer.aplayer-narrow .aplayer-body {
transition: none !important;
}
.aplayer.aplayer-narrow .aplayer-info {
transition: none !important;
}
/* ===== 移动端适配 ===== */
@media (max-width: 768px) {
.aplayer.aplayer-fixed {
right: 0 !important;
bottom: 0rem !important;
}
.aplayer.aplayer-fixed .aplayer-body {
right: 0 !important;
bottom: 0rem !important;
}
}
/* ===== 平板适配 ===== */
@media (min-width: 641px) and (max-width: 1280px) {
.aplayer.aplayer-fixed {
right: 0.5rem !important;
bottom: 2rem !important;
}
.aplayer.aplayer-fixed .aplayer-body {
right: 0.5rem !important;
bottom: 2rem !important;
}
}
/* 横屏模式适配 */
@media (orientation: landscape) and (max-height: 640px) {
.aplayer.aplayer-fixed {
right: 0.5rem !important;
bottom: 2rem !important;
}
.aplayer.aplayer-fixed .aplayer-body {
right: 0.5rem !important;
bottom: 2rem !important;
}
}
/* ===== 封面播放特效 ===== */
/* 封面基础样式 - 默认正方形(触摸设备) */
.aplayer .aplayer-pic {
transition: transform 0.3s ease, box-shadow 0.3s ease, border-radius 0.3s ease;
overflow: hidden;
position: relative;
aspect-ratio: 1;
}
/* 确保封面图片适配 */
.aplayer .aplayer-pic img {
width: 100%;
height: 100%;
object-fit: cover;
}
/* 桌面端:圆形封面 */
@media (hover: hover) {
.aplayer .aplayer-pic {
border-radius: 50%;
}
.aplayer .aplayer-pic img {
border-radius: 50%;
}
}
/* 缩小状态下禁用过渡动画 */
.aplayer.aplayer-narrow .aplayer-pic {
transition: none !important;
}
/* 旋转动画关键帧 */
@keyframes aplayer-cover-rotate {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
/* 亮色主题脉动动画 */
@keyframes aplayer-cover-pulse {
0%, 100% {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
50% {
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25);
}
}
/* 暗色主题脉动动画 */
@keyframes aplayer-cover-pulse-dark {
0%, 100% {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
}
50% {
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.6);
}
}
/* 桌面端:播放状态旋转动画 */
@media (hover: hover) {
/* 始终应用旋转动画,但通过 animation-play-state 控制播放/暂停 */
.aplayer .aplayer-pic {
animation: aplayer-cover-rotate 20s linear infinite,
aplayer-cover-pulse 2s ease-in-out infinite;
animation-play-state: paused;
}
/* 播放状态:恢复动画 */
.aplayer[data-playing="true"] .aplayer-pic,
.aplayer.aplayer-playing .aplayer-pic {
animation-play-state: running;
}
/* 暂停状态:暂停动画(保持当前位置) */
.aplayer[data-playing="false"] .aplayer-pic,
.aplayer.aplayer-pause .aplayer-pic {
animation-play-state: paused;
}
/* 暗色主题下的播放特效 */
:root.dark .aplayer[data-playing="true"] .aplayer-pic,
:root.dark .aplayer.aplayer-playing .aplayer-pic {
animation: aplayer-cover-rotate 20s linear infinite,
aplayer-cover-pulse-dark 2s ease-in-out infinite;
animation-play-state: running;
}
/* 暗色主题暂停状态 */
:root.dark .aplayer[data-playing="false"] .aplayer-pic,
:root.dark .aplayer.aplayer-pause .aplayer-pic {
animation: aplayer-cover-rotate 20s linear infinite,
aplayer-cover-pulse-dark 2s ease-in-out infinite;
animation-play-state: paused;
}
}
/* 触摸设备:无旋转动画,保持静态 */
@media (hover: none) and (pointer: coarse) {
.aplayer .aplayer-pic {
animation: none !important;
}
.aplayer[data-playing="true"] .aplayer-pic,
.aplayer.aplayer-playing .aplayer-pic,
.aplayer[data-playing="false"] .aplayer-pic,
.aplayer.aplayer-pause .aplayer-pic {
animation: none !important;
animation-play-state: paused !important;
}
}
/* 桌面端:播放时隐藏暂停按钮,暂停时显示播放按钮 */
@media (hover: hover) {
/* 播放状态时隐藏暂停按钮(封面在转,不需要暂停按钮) */
.aplayer[data-playing="true"] .aplayer-pic .aplayer-pause,
.aplayer.aplayer-playing .aplayer-pic .aplayer-pause {
display: none !important;
}
/* 播放状态时隐藏播放按钮(因为已经播放了) */
.aplayer[data-playing="true"] .aplayer-pic .aplayer-play,
.aplayer.aplayer-playing .aplayer-pic .aplayer-play {
display: none !important;
}
/* 暂停状态时隐藏暂停按钮,只显示播放按钮 */
.aplayer[data-playing="false"] .aplayer-pic .aplayer-pause,
.aplayer.aplayer-pause .aplayer-pic .aplayer-pause,
.aplayer:not([data-playing="true"]):not(.aplayer-playing) .aplayer-pic .aplayer-pause {
display: none !important;
}
/* 暂停状态时显示播放按钮(通过悬停显示) */
.aplayer[data-playing="false"] .aplayer-pic:hover .aplayer-play,
.aplayer.aplayer-pause .aplayer-pic:hover .aplayer-play,
.aplayer:not([data-playing="true"]):not(.aplayer-playing) .aplayer-pic:hover .aplayer-play {
display: block !important;
}
}
/* ===== 亮色主题适配 ===== */
/* ===== 暗色主题适配 ===== */
:root.dark .aplayer {
background: var(--card-bg, oklch(0.23 0.015 var(--hue)));
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.3), 0 1px 5px 0 rgba(0, 0, 0, 0.4);
}
:root.dark .aplayer.aplayer-withlist .aplayer-info {
border-bottom: 1px solid var(--line-divider, rgba(255, 255, 255, 0.08));
}
:root.dark .aplayer.aplayer-fixed .aplayer-list {
border: 1px solid var(--line-divider, rgba(255, 255, 255, 0.08));
border-bottom: none;
}
:root.dark .aplayer.aplayer-fixed .aplayer-body {
background: var(--card-bg, oklch(0.23 0.015 var(--hue)));
}
:root.dark .aplayer.aplayer-fixed .aplayer-lrc {
text-shadow: -1px -1px 0 var(--card-bg, oklch(0.23 0.015 var(--hue)));
}
:root.dark .aplayer.aplayer-fixed .aplayer-info {
border-top: 1px solid var(--line-divider, rgba(255, 255, 255, 0.08));
}
:root.dark .aplayer .aplayer-info .aplayer-music .aplayer-author {
color: var(--content-meta, rgba(255, 255, 255, 0.6));
}
:root.dark
.aplayer
.aplayer-info
.aplayer-controller
.aplayer-bar-wrap
.aplayer-bar {
background: rgba(255, 255, 255, 0.2);
}
:root.dark
.aplayer
.aplayer-info
.aplayer-controller
.aplayer-bar-wrap
.aplayer-bar
.aplayer-loaded {
background: rgba(255, 255, 255, 0.3);
}
:root.dark .aplayer .aplayer-info .aplayer-controller .aplayer-time {
color: var(--content-meta, rgba(255, 255, 255, 0.6));
}
:root.dark
.aplayer
.aplayer-info
.aplayer-controller
.aplayer-time
.aplayer-icon
path {
fill: var(--content-meta, rgba(255, 255, 255, 0.6));
}
:root.dark
.aplayer
.aplayer-info
.aplayer-controller
.aplayer-time
.aplayer-icon:hover
path {
fill: var(--btn-content, oklch(0.75 0.1 var(--hue)));
}
:root.dark
.aplayer
.aplayer-info
.aplayer-controller
.aplayer-volume-wrap
.aplayer-volume-bar-wrap
.aplayer-volume-bar {
background: rgba(255, 255, 255, 0.2);
}
:root.dark .aplayer .aplayer-lrc:before {
background: linear-gradient(
180deg,
var(--card-bg, oklch(0.23 0.015 var(--hue))) 0,
hsla(0, 0%, 100%, 0)
);
}
:root.dark .aplayer .aplayer-lrc:after {
background: linear-gradient(
180deg,
hsla(0, 0%, 100%, 0) 0,
rgba(255, 255, 255, 0.1)
);
}
:root.dark .aplayer .aplayer-lrc p {
color: var(--content-meta, rgba(255, 255, 255, 0.6));
}
:root.dark .aplayer .aplayer-list ol::-webkit-scrollbar-thumb {
background-color: rgba(255, 255, 255, 0.2);
}
:root.dark .aplayer .aplayer-list ol::-webkit-scrollbar-thumb:hover {
background-color: rgba(255, 255, 255, 0.3);
}
:root.dark .aplayer .aplayer-list ol li {
border-top: 1px solid var(--line-divider, rgba(255, 255, 255, 0.08));
}
:root.dark .aplayer .aplayer-list ol li:hover {
background: var(--btn-plain-bg-hover, oklch(0.3 0.035 var(--hue)));
}
:root.dark .aplayer .aplayer-list ol li.aplayer-list-light {
background: var(--btn-plain-bg-hover, oklch(0.3 0.035 var(--hue)));
}
:root.dark .aplayer .aplayer-list ol li .aplayer-list-index {
color: var(--content-meta, rgba(255, 255, 255, 0.6));
}
:root.dark .aplayer .aplayer-list ol li .aplayer-list-author {
color: var(--content-meta, rgba(255, 255, 255, 0.6));
}
:root.dark .aplayer .aplayer-notice {
background-color: var(--card-bg, oklch(0.23 0.015 var(--hue)));
color: var(--content-meta, rgba(255, 255, 255, 0.6));
}
:root.dark .aplayer .aplayer-miniswitcher {
background: var(--btn-regular-bg, oklch(0.33 0.035 var(--hue)));
border-top: 1px solid var(--line-divider, #e5e7eb);
border-bottom: 1px solid var(--line-divider, #e5e7eb);
border-left: 1px solid var(--line-divider, #e5e7eb);
}
:root.dark .aplayer .aplayer-miniswitcher .aplayer-icon path {
fill: var(--content-meta, rgba(255, 255, 255, 0.6));
}
:root.dark .aplayer .aplayer-miniswitcher .aplayer-icon:hover path {
fill: var(--btn-content, oklch(0.75 0.1 var(--hue)));
}
:root.dark .aplayer .aplayer-info .aplayer-music .aplayer-title {
color: var(--btn-content, oklch(0.75 0.1 var(--hue)));
}
:root.dark .aplayer .aplayer-list ol li .aplayer-list-title {
color: var(--btn-content, oklch(0.75 0.1 var(--hue)));
}

3
public/assets/css/APlayer.min.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,10 @@
pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
Theme: GitHub Dark
Description: Dark theme as seen on github.com
Author: github.com
Maintainer: @Hirse
Updated: 2021-05-15
Outdated base version: https://github.com/primer/github-syntax-dark
Current colors taken from GitHub's CSS
*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#79c0ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-code,.hljs-comment,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 814 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 859 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

2
public/assets/js/APlayer.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1213
public/assets/js/highlight.min.js vendored Normal file

File diff suppressed because one or more lines are too long

74
public/assets/js/marked.min.js vendored Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 KiB