diff --git a/app/src/main/assets/h5/css/app.css b/app/src/main/assets/h5/css/app.css
index 48fddb7..bc604bc 100644
--- a/app/src/main/assets/h5/css/app.css
+++ b/app/src/main/assets/h5/css/app.css
@@ -120,25 +120,22 @@ body {
to { opacity: 1; transform: none; }
}
-/* 首页三栏布局:三等分纵向列,卡片向下堆叠 */
-/* Home three-column layout: three equal vertical columns, cards stack downward */
+/* 首页卡片 Grid:三等分列,卡片可跨栏(span-2/3),行均分高度 */
+/* Home card grid: three equal columns, cards can span (span-2/3), rows split evenly */
.tri-col {
flex: 1;
min-height: 0;
- display: flex;
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ grid-auto-rows: 1fr;
gap: 16px;
padding: 16px;
-}
-
-.col {
- flex: 1;
- min-width: 0;
- display: flex;
- flex-direction: column;
- gap: 16px;
overflow-y: auto;
}
+.card.span-2 { grid-column: span 2; }
+.card.span-3 { grid-column: span 3; }
+
/* 卡片:柔光玻璃拟态(复用 Task 4 token,非纯色背景) */
/* Card: soft-glass morphism (reuse Task 4 tokens, not a solid color) */
.card {
@@ -161,7 +158,9 @@ body {
/* 时钟卡缩放权重小:占栏高比例小于其他卡片 */
/* Time card grows less: takes a smaller share of column height than other cards */
.time-card {
- flex-grow: 0.5;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
}
.time-card .big {
@@ -185,6 +184,13 @@ body {
color: var(--text-dim);
}
+/* 媒体卡:flex column,标题靠上、进度/控制靠下 */
+/* Media card: flex column, title top, progress/controls bottom */
+.media-card {
+ display: flex;
+ flex-direction: column;
+}
+
/* 媒体卡:正在播放标签 + 标题/艺术家 + 进度条 */
/* Media card: playing caption + title/artist + progress bar */
.media-card .cap {
@@ -212,7 +218,8 @@ body {
}
.media-card .prog {
- margin-top: 12px;
+ margin-top: auto;
+ padding-top: 12px;
height: 4px;
border-radius: 999px;
background: var(--glass-border);
@@ -225,6 +232,32 @@ body {
background: var(--accent);
}
+/* 媒体控制按钮:上一首/暂停/下一首 */
+/* Media controls: previous / play-pause / next */
+.media-card .controls {
+ margin-top: 12px;
+ display: flex;
+ gap: 10px;
+}
+
+.media-card .controls button {
+ width: 36px;
+ height: 36px;
+ border: none;
+ border-radius: 999px;
+ background: var(--glass-border);
+ color: var(--text);
+ font-size: 15px;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.media-card .controls button:active {
+ opacity: 0.6;
+}
+
/* 安卓 APP 列表页:搜索框 + 网格 */
/* Android app list page: search box + grid */
.search { padding: 16px; }
diff --git a/app/src/main/assets/h5/index.html b/app/src/main/assets/h5/index.html
index e70c516..12a0c12 100644
--- a/app/src/main/assets/h5/index.html
+++ b/app/src/main/assets/h5/index.html
@@ -25,6 +25,7 @@
+
@@ -55,6 +56,19 @@
// 初始化背景遮罩(夜间主题 + 已启用时生效)
// Apply wallpaper dim on startup (active under dark theme when enabled)
window.mask.apply();
+ // 加载壁纸为 body 背景:玻璃效果 backdrop-filter 需要 WebView 内部有背景可模糊
+ // Load the wallpaper as the body background: the glass backdrop-filter needs
+ // in-WebView content behind cards to blur
+ bridge.call('getWallpaper').then(wp => {
+ if (wp) {
+ document.body.style.backgroundImage = 'url(' + wp + ')';
+ document.body.style.backgroundSize = 'cover';
+ document.body.style.backgroundPosition = 'center';
+ }
+ }).catch(() => {});
+ // 首屏渲染后延迟预加载其他页面数据,减少切页等待
+ // Preload other pages' data after first paint to reduce switch latency
+ setTimeout(() => window.preload.loadAll(), 800);