spark-server/deploy/popadmin/popadmin.css
DESKTOP-L8OUL9F\gfl0034 40ce6c7dfa feat: 发布 PopAdmin 通讯录/相册/媒体拉取完整页与门禁
补齐三页查询/开关/授权/数量布局,并附上线上 static-override 与 jar 热补部署脚本。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-11-02 14:34:45 +08:00

223 lines
9.4 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

:root {
/* layers */
--bg: #070b10;
--bg-elevated: #0a1016;
--sidebar: #0c141c;
--card: rgba(16, 26, 36, 0.93);
--surface: #091018;
/* borders / text */
--border: rgba(56, 189, 248, 0.18);
--border-strong: rgba(56, 189, 248, 0.4);
--text: #e8f1f8;
--muted: #7a93a8;
/* accent — popadmin cyan */
--accent: #38bdf8;
--accent2: #22d3ee;
--accent-soft: rgba(56, 189, 248, 0.09);
--accent-glow: rgba(56, 189, 248, 0.16);
--on-accent: #041018;
/* semantic */
--success: #34d399;
--danger: #f87171;
--warning: #fbbf24;
/* shape / depth / space */
--radius-sm: 6px;
--radius: 10px;
--radius-lg: 14px;
--shadow-sm: 0 4px 18px rgba(0, 0, 0, 0.28);
--shadow: 0 18px 50px rgba(0, 0, 0, 0.4);
--shadow-glow: 0 0 36px var(--accent-glow);
--space-1: 4px;
--space-2: 8px;
--space-3: 12px;
--space-4: 16px;
--space-5: 24px;
--gradient-accent: linear-gradient(135deg, #0ea5e9, var(--accent2));
--gradient-page:
radial-gradient(ellipse 80% 50% at 20% -10%, rgba(56,189,248,0.15), transparent 55%),
radial-gradient(ellipse 60% 40% at 90% 0%, rgba(34,211,238,0.09), transparent 50%),
var(--bg);
}
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: "IBM Plex Sans", "Segoe UI", "PingFang SC", sans-serif;
background: var(--gradient-page);
color: var(--text);
min-height: 100vh;
line-height: 1.45;
}
.hidden { display: none !important; }
.login-page {
min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 24px;
}
.login-card {
width: 380px; max-width: 100%; padding: 40px; background: var(--card);
border: 1px solid var(--border); border-radius: var(--radius-lg);
box-shadow: var(--shadow), var(--shadow-glow);
backdrop-filter: blur(10px);
}
.login-card h1 {
font-size: 24px; font-weight: 700; letter-spacing: -0.02em;
background: linear-gradient(110deg, var(--accent), #a5f3fc);
-webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
}
.login-sub { color: var(--muted); font-size: 13px; margin: 8px 0 24px; line-height: 1.45; }
.login-card input {
width: 100%; padding: 12px 14px; margin-bottom: 12px;
background: var(--surface); border: 1px solid var(--border);
border-radius: var(--radius); color: var(--text); outline: none;
transition: border-color .15s, box-shadow .15s;
}
.login-card input:focus {
border-color: var(--border-strong); box-shadow: 0 0 0 3px var(--accent-soft);
}
.login-card button:not(.secondary) {
width: 100%; padding: 12px; border: none; border-radius: var(--radius); cursor: pointer;
background: var(--gradient-accent); color: var(--on-accent); font-weight: 700;
box-shadow: 0 4px 16px var(--accent-glow);
}
.login-card button.secondary, button.secondary, .btn.secondary {
width: 100%; padding: 12px;
background: transparent; border: 1px solid var(--border);
border-radius: var(--radius); color: var(--muted); cursor: pointer; font-weight: 500;
}
.error { color: var(--danger); font-size: 13px; margin-top: 10px; min-height: 18px; }
.hint { color: var(--muted); font-size: 12px; margin-top: 16px; line-height: 1.5; }
.hint a { color: var(--accent); }
.app { display: flex; min-height: 100vh; height: 100vh; max-height: 100vh; overflow: hidden; }
/* 桌面默认隐藏;≤768px 由 /shared/admin-responsive.css 显示抽屉 */
.sidebar-toggle,
.sidebar-backdrop { display: none; }
.sidebar {
width: 228px; flex-shrink: 0; background: var(--sidebar); border-right: 1px solid var(--border);
display: flex; flex-direction: column;
max-height: 100%;
min-height: 0;
}
.brand {
padding: 22px 20px; font-weight: 800; letter-spacing: 0.14em;
color: var(--accent); font-size: 13px; border-bottom: 1px solid var(--border);
background: linear-gradient(180deg, var(--accent-soft), transparent);
text-shadow: 0 0 16px var(--accent-glow);
flex-shrink: 0;
}
/* 菜单项很多时必须可滚,否则中下部「通讯录/相册/媒体拉取」会被裁切表现为点击无反应 */
.sidebar nav { flex: 1; padding: 12px 0; overflow-y: auto; min-height: 0; overscroll-behavior: contain; }
.sidebar nav a {
display: block; padding: 10px 20px; margin: 2px 10px;
color: var(--muted); text-decoration: none; font-size: 13.5px; cursor: pointer;
border-radius: var(--radius-sm); border-left: 2px solid transparent;
transition: color .12s, background .12s;
}
.sidebar nav a:hover { color: var(--text); background: rgba(255,255,255,0.03); }
.sidebar nav a.active {
color: var(--accent); background: var(--accent-soft);
border-left-color: var(--accent);
box-shadow: inset 0 0 0 1px rgba(56,189,248,0.1);
}
.logout-btn {
margin: 12px; padding: 10px; background: transparent; border: 1px solid var(--border);
color: var(--muted); border-radius: var(--radius); cursor: pointer;
flex-shrink: 0;
}
.logout-btn:hover { color: var(--text); border-color: var(--border-strong); }
.main { flex: 1; display: flex; flex-direction: column; min-width: 0; }
.topbar {
padding: 16px 24px; border-bottom: 1px solid var(--border);
display: flex; justify-content: space-between; align-items: center; gap: 12px;
background: linear-gradient(180deg, rgba(16,26,36,0.8), transparent);
backdrop-filter: blur(8px);
}
.topbar h2 { font-size: 18px; font-weight: 650; }
.topbar span { color: var(--muted); font-size: 13px; }
.content { padding: 24px; flex: 1; overflow: auto; background: var(--bg-elevated); }
.cards {
display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
gap: 14px; margin-bottom: 20px;
}
.card {
background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-lg);
padding: 18px; box-shadow: var(--shadow-sm); position: relative; overflow: hidden;
}
.card::before {
content: ""; position: absolute; inset: 0 0 auto 0; height: 1px;
background: linear-gradient(90deg, transparent, var(--accent), transparent); opacity: .4;
}
.card .label { color: var(--muted); font-size: 12px; letter-spacing: 0.03em; }
.card .value { font-size: 26px; font-weight: 700; margin-top: 6px; color: var(--accent); }
.note {
background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-lg);
padding: 16px; color: var(--muted); font-size: 13px; line-height: 1.6; margin-bottom: 20px;
}
.toolbar { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 14px; align-items: center; }
.toolbar input, .toolbar select, .form-grid input, .form-grid textarea, .form-grid select {
padding: 8px 12px; background: var(--surface); border: 1px solid var(--border);
border-radius: var(--radius); color: var(--text);
}
.toolbar button, .btn {
padding: 8px 14px; border: none; border-radius: var(--radius); cursor: pointer; font-size: 13px;
background: var(--gradient-accent); color: var(--on-accent); font-weight: 600; width: auto;
}
.btn.secondary, .toolbar button.secondary {
background: transparent; border: 1px solid var(--border); color: var(--muted); width: auto;
}
.btn.danger { background: transparent; border: 1px solid rgba(248,113,113,0.4); color: var(--danger); }
.btn.warn { background: transparent; border: 1px solid rgba(251,191,36,0.45); color: var(--warning); }
.section-block { margin-bottom: 16px; }
.section-block h3 { margin: 0 0 8px; font-size: 14px; color: var(--accent); font-weight: 650; }
.action-bar { display: flex; flex-wrap: wrap; gap: 8px; margin: 12px 0 16px; }
.flag-bad { color: var(--danger); font-weight: 600; }
.flag-warn { color: var(--warning); font-weight: 600; }
.flag-ok { color: var(--success); }
table {
width: 100%; border-collapse: collapse; background: var(--card);
border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden;
box-shadow: var(--shadow-sm);
}
th, td { padding: 9px 12px; text-align: left; border-bottom: 1px solid rgba(122,147,168,0.14); font-size: 13px; }
th { background: var(--accent-soft); color: var(--accent); font-weight: 650; font-size: 12px; }
tr:hover td { background: rgba(255,255,255,0.02); }
.form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; max-width: 720px; margin-bottom: 16px; }
.form-grid label { display: flex; flex-direction: column; gap: 6px; font-size: 12px; color: var(--muted); }
.form-grid .full { grid-column: 1 / -1; }
.form-grid textarea { min-height: 80px; resize: vertical; }
.tag {
display: inline-block; padding: 2px 8px; border-radius: var(--radius-sm); font-size: 12px;
background: var(--accent-soft); color: var(--accent);
}
.tag.off { background: rgba(122,147,168,0.15); color: var(--muted); }
.btn-sm { padding: 4px 10px; font-size: 12px; margin-right: 4px; }
.media-grid {
display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 12px; margin-top: 12px;
}
.media-card {
background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden;
}
.media-card img { width: 100%; aspect-ratio: 1; object-fit: cover; display: block; background: var(--surface); }
.media-meta { padding: 8px; font-size: 11px; color: var(--muted); display: flex; flex-direction: column; gap: 4px; }
.switch-row { display: inline-flex; align-items: center; gap: 8px; cursor: pointer; font-size: 13px; }
.switch-row input { width: 16px; height: 16px; accent-color: var(--accent); cursor: pointer; }
.detail-dl {
display: grid; grid-template-columns: 110px 1fr; gap: 6px 14px; margin-top: 10px; font-size: 13px;
}
.detail-dl dt { color: var(--muted); }
.detail-dl dd { color: var(--text); margin: 0; word-break: break-all; }
/* 窄屏侧栏/表格/触控见 /shared/admin-responsive.css */