diff --git a/miniapp/index.html b/miniapp/index.html
index cfea1fef..10835927 100644
--- a/miniapp/index.html
+++ b/miniapp/index.html
@@ -689,50 +689,174 @@
list-style: none;
padding: 0;
margin: 0;
+ display: grid;
+ gap: 12px;
}
- .server-item,
- .device-item {
- padding: 14px;
- background: var(--bg-primary);
- border-radius: var(--radius);
- font-size: 14px;
- color: var(--text-primary);
- margin-bottom: 10px;
+ .server-item {
+ display: flex;
+ align-items: center;
+ gap: 14px;
+ padding: 16px;
+ background: linear-gradient(135deg, var(--bg-primary), rgba(var(--primary-rgb), 0.02));
+ border-radius: var(--radius-lg);
border: 2px solid var(--border-color);
transition: all 0.3s ease;
cursor: pointer;
+ position: relative;
+ overflow: hidden;
}
- .server-item:hover,
- .device-item:hover {
+ .server-item::after {
+ content: '';
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 60px;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, rgba(var(--primary-rgb), 0.05));
+ transform: translateX(100%);
+ transition: transform 0.5s ease;
+ }
+
+ .server-item:hover {
border-color: var(--primary);
- transform: translateX(4px);
+ transform: translateY(-2px);
+ box-shadow: var(--shadow-md);
+ background: linear-gradient(135deg, var(--bg-primary), rgba(var(--primary-rgb), 0.05));
+ }
+
+ .server-item:hover::after {
+ transform: translateX(0);
+ }
+
+ .server-flag {
+ width: 48px;
+ height: 48px;
+ border-radius: 50%;
+ background: linear-gradient(135deg, rgba(var(--primary-rgb), 0.15), rgba(var(--primary-rgb), 0.05));
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 28px;
+ flex-shrink: 0;
box-shadow: var(--shadow-sm);
}
- .server-item::before,
- .device-item::before {
- content: '🌎';
- margin-right: 8px;
+ .server-info {
+ flex: 1;
+ min-width: 0;
+ }
+
+ .server-name {
+ font-size: 16px;
+ font-weight: 600;
+ color: var(--text-primary);
+ margin-bottom: 4px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ .server-status {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ font-size: 13px;
+ color: var(--text-secondary);
+ }
+
+ .server-status::before {
+ content: '';
+ width: 6px;
+ height: 6px;
+ border-radius: 50%;
+ background: var(--success);
+ animation: pulse 2s infinite;
+ }
+
+ .device-item {
+ padding: 18px;
+ background: linear-gradient(135deg, var(--bg-primary), rgba(var(--primary-rgb), 0.02));
+ border-radius: var(--radius-lg);
+ border: 2px solid var(--border-color);
+ transition: all 0.3s ease;
+ cursor: pointer;
+ position: relative;
+ overflow: hidden;
}
.device-item::before {
- content: '🔗';
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 4px;
+ height: 100%;
+ background: linear-gradient(180deg, var(--primary), rgba(var(--primary-rgb), 0.3));
+ opacity: 0;
+ transition: opacity 0.3s ease;
+ }
+
+ .device-item:hover {
+ border-color: var(--primary);
+ transform: translateY(-2px);
+ box-shadow: var(--shadow-md);
+ background: linear-gradient(135deg, var(--bg-primary), rgba(var(--primary-rgb), 0.05));
+ }
+
+ .device-item:hover::before {
+ opacity: 1;
+ }
+
+ .device-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 12px;
}
.device-title {
+ font-size: 16px;
font-weight: 600;
- margin-bottom: 6px;
color: var(--text-primary);
}
+ .device-type-badge {
+ padding: 4px 10px;
+ background: rgba(var(--primary-rgb), 0.1);
+ color: var(--primary);
+ border-radius: var(--radius-sm);
+ font-size: 11px;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ }
+
.device-meta {
- font-size: 12px;
- color: var(--text-secondary);
- display: flex;
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
gap: 12px;
- flex-wrap: wrap;
+ }
+
+ .device-meta-item {
+ display: flex;
+ flex-direction: column;
+ gap: 2px;
+ }
+
+ .device-meta-label {
+ font-size: 11px;
+ color: var(--text-secondary);
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ opacity: 0.7;
+ }
+
+ .device-meta-value {
+ font-size: 13px;
+ color: var(--text-primary);
+ font-weight: 500;
}
/* Empty States */