diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index 4880707..baf06ea 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -101,7 +101,7 @@ const fmtScanBytes = computed(() => {
-
+
+.pkg-desc {
+ display: block;
+ max-width: 230px;
+ font-size: 12px;
+ color: var(--ink-dim);
+ font-weight: 500;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.num-cell.over { color: var(--red); }
+/* 操作列:按钮横排一行,不换行 */
+.vtable td:last-child { white-space: nowrap; }
+.vtable td:last-child .btn { padding: 6px 13px; font-size: 12px; }
+.vtable td:last-child .btn + .btn { margin-left: 7px; }
+.empty-tip { padding: 40px 0; text-align: center; color: var(--ink-faint); font-size: 12.5px; }
+.loading-tip { text-align: center; padding: 40px 0; color: var(--ink-faint); font-size: 13px; }
+
+@media (max-width: 767px) {
+ .search-box { height: 48px; }
+ .search-box .s-go { display: none; }
+ .history-row { width: 100%; }
+ .toolbar { margin: 16px 0 10px; }
+ .vtable { overflow: auto; -webkit-overflow-scrolling: touch; }
+ .vtable table { min-width: 880px; width: auto; }
+ .vtable th:first-child,
+ .vtable td:first-child { min-width: 220px; }
+ .pkg-cell { word-break: break-all; }
+}
+