234 lines
5.4 KiB
CSS
234 lines
5.4 KiB
CSS
|
|
/* 光湖密钥管理页 · 中文优先 · 思源黑体 / 系统中文兜底 · 暗底浅字 (跟 lighthouse-portal 一脉) */
|
||
|
|
* { box-sizing: border-box; }
|
||
|
|
html, body {
|
||
|
|
margin: 0;
|
||
|
|
padding: 0;
|
||
|
|
font-family: "Source Han Sans SC", "PingFang SC", "Microsoft YaHei", system-ui, -apple-system, sans-serif;
|
||
|
|
background: #0e1014;
|
||
|
|
color: #e6e8eb;
|
||
|
|
min-height: 100vh;
|
||
|
|
font-size: 14px;
|
||
|
|
line-height: 1.55;
|
||
|
|
}
|
||
|
|
code, pre, kbd {
|
||
|
|
font-family: "JetBrains Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
|
||
|
|
font-size: 0.9em;
|
||
|
|
}
|
||
|
|
|
||
|
|
.topbar {
|
||
|
|
display: flex;
|
||
|
|
align-items: center;
|
||
|
|
justify-content: space-between;
|
||
|
|
padding: 12px 22px;
|
||
|
|
background: linear-gradient(180deg, #14171d 0%, #0e1014 100%);
|
||
|
|
border-bottom: 1px solid #1c2027;
|
||
|
|
position: sticky;
|
||
|
|
top: 0;
|
||
|
|
z-index: 5;
|
||
|
|
}
|
||
|
|
.brand { display: flex; align-items: center; gap: 10px; }
|
||
|
|
.brand .dot {
|
||
|
|
width: 10px; height: 10px; border-radius: 50%;
|
||
|
|
background: #4cd97b; box-shadow: 0 0 12px #4cd97b88;
|
||
|
|
}
|
||
|
|
.brand-name { font-weight: 600; letter-spacing: 0.04em; }
|
||
|
|
.sovereign { color: #6b7280; font-size: 11px; margin-left: 8px; }
|
||
|
|
|
||
|
|
.badge {
|
||
|
|
padding: 4px 10px;
|
||
|
|
border-radius: 999px;
|
||
|
|
background: #1c2027;
|
||
|
|
color: #a1a8b3;
|
||
|
|
font-size: 12px;
|
||
|
|
}
|
||
|
|
.badge.ok { background: #14391f; color: #5fe08a; }
|
||
|
|
.badge.warn { background: #3a2a14; color: #f0b15c; }
|
||
|
|
.badge.err { background: #3a1414; color: #f06060; }
|
||
|
|
|
||
|
|
.page { max-width: 980px; margin: 0 auto; padding: 24px 22px 80px; }
|
||
|
|
|
||
|
|
.intro h1 {
|
||
|
|
font-size: 22px;
|
||
|
|
font-weight: 600;
|
||
|
|
margin: 8px 0 12px;
|
||
|
|
border-left: 3px solid #4cd97b;
|
||
|
|
padding-left: 10px;
|
||
|
|
}
|
||
|
|
.intro p { color: #b6bdc6; }
|
||
|
|
.intro .sub { color: #8a93a0; font-size: 13px; }
|
||
|
|
|
||
|
|
.loading-hint { text-align: center; color: #6b7280; padding: 40px 0; }
|
||
|
|
|
||
|
|
.group {
|
||
|
|
background: #14171d;
|
||
|
|
border: 1px solid #1c2027;
|
||
|
|
border-radius: 10px;
|
||
|
|
margin: 18px 0;
|
||
|
|
padding: 16px 18px 6px;
|
||
|
|
}
|
||
|
|
.group h2 {
|
||
|
|
margin: 0 0 4px;
|
||
|
|
font-size: 16px;
|
||
|
|
font-weight: 600;
|
||
|
|
display: flex;
|
||
|
|
align-items: center;
|
||
|
|
gap: 10px;
|
||
|
|
}
|
||
|
|
.group .group-tag {
|
||
|
|
font-size: 11px;
|
||
|
|
background: #1c2027;
|
||
|
|
color: #8a93a0;
|
||
|
|
padding: 2px 8px;
|
||
|
|
border-radius: 4px;
|
||
|
|
font-family: monospace;
|
||
|
|
}
|
||
|
|
.group .group-desc {
|
||
|
|
color: #8a93a0;
|
||
|
|
font-size: 12px;
|
||
|
|
margin: 0 0 10px;
|
||
|
|
}
|
||
|
|
.group .group-subject {
|
||
|
|
color: #6b7280;
|
||
|
|
font-size: 11px;
|
||
|
|
margin: 0 0 12px;
|
||
|
|
border-bottom: 1px dashed #1c2027;
|
||
|
|
padding-bottom: 8px;
|
||
|
|
}
|
||
|
|
|
||
|
|
.secret-row {
|
||
|
|
display: grid;
|
||
|
|
grid-template-columns: 1fr 320px auto;
|
||
|
|
gap: 10px;
|
||
|
|
align-items: start;
|
||
|
|
padding: 10px 0;
|
||
|
|
border-bottom: 1px dashed #1c2027;
|
||
|
|
}
|
||
|
|
.secret-row:last-child { border-bottom: 0; }
|
||
|
|
.secret-meta { min-width: 0; }
|
||
|
|
.secret-meta .name {
|
||
|
|
font-family: monospace;
|
||
|
|
font-size: 12px;
|
||
|
|
color: #6b7280;
|
||
|
|
}
|
||
|
|
.secret-meta .label {
|
||
|
|
font-weight: 500;
|
||
|
|
font-size: 14px;
|
||
|
|
color: #e6e8eb;
|
||
|
|
margin: 2px 0 4px;
|
||
|
|
display: flex;
|
||
|
|
align-items: center;
|
||
|
|
gap: 8px;
|
||
|
|
}
|
||
|
|
.secret-meta .level {
|
||
|
|
font-size: 10px;
|
||
|
|
padding: 1px 6px;
|
||
|
|
border-radius: 3px;
|
||
|
|
}
|
||
|
|
.level.required { background: #3a1414; color: #f06060; }
|
||
|
|
.level.required_on_stage { background: #3a2a14; color: #f0b15c; }
|
||
|
|
.level.required_on_target { background: #3a2a14; color: #f0b15c; }
|
||
|
|
.level.optional { background: #1c2027; color: #6b7280; }
|
||
|
|
|
||
|
|
.secret-meta .hint {
|
||
|
|
font-size: 12px;
|
||
|
|
color: #8a93a0;
|
||
|
|
margin: 2px 0 0;
|
||
|
|
}
|
||
|
|
.secret-meta .hint code { color: #b6bdc6; }
|
||
|
|
|
||
|
|
.secret-input {
|
||
|
|
display: flex;
|
||
|
|
flex-direction: column;
|
||
|
|
gap: 6px;
|
||
|
|
}
|
||
|
|
.secret-input input,
|
||
|
|
.secret-input textarea {
|
||
|
|
width: 100%;
|
||
|
|
background: #0e1014;
|
||
|
|
color: #e6e8eb;
|
||
|
|
border: 1px solid #2a2f38;
|
||
|
|
border-radius: 6px;
|
||
|
|
padding: 8px 10px;
|
||
|
|
font-family: monospace;
|
||
|
|
font-size: 13px;
|
||
|
|
resize: vertical;
|
||
|
|
}
|
||
|
|
.secret-input input:focus,
|
||
|
|
.secret-input textarea:focus { outline: none; border-color: #4cd97b66; }
|
||
|
|
.secret-input .masked {
|
||
|
|
font-family: monospace;
|
||
|
|
color: #5fe08a;
|
||
|
|
font-size: 12px;
|
||
|
|
}
|
||
|
|
.secret-input .placeholder {
|
||
|
|
color: #6b7280;
|
||
|
|
font-size: 12px;
|
||
|
|
font-style: italic;
|
||
|
|
}
|
||
|
|
|
||
|
|
.secret-actions { display: flex; flex-direction: column; gap: 6px; align-items: stretch; }
|
||
|
|
button {
|
||
|
|
background: #4cd97b;
|
||
|
|
color: #0e1014;
|
||
|
|
border: 0;
|
||
|
|
border-radius: 6px;
|
||
|
|
padding: 6px 14px;
|
||
|
|
font-weight: 600;
|
||
|
|
cursor: pointer;
|
||
|
|
font-size: 12px;
|
||
|
|
font-family: inherit;
|
||
|
|
}
|
||
|
|
button:hover { background: #5fe08a; }
|
||
|
|
button.secondary { background: #2a2f38; color: #e6e8eb; }
|
||
|
|
button.secondary:hover { background: #3a414c; }
|
||
|
|
button.danger { background: #3a1414; color: #f06060; }
|
||
|
|
button.danger:hover { background: #5a1414; }
|
||
|
|
button:disabled { opacity: 0.5; cursor: not-allowed; }
|
||
|
|
|
||
|
|
.group-action {
|
||
|
|
margin: 12px 0 6px;
|
||
|
|
padding: 12px;
|
||
|
|
border: 1px dashed #4cd97b66;
|
||
|
|
border-radius: 6px;
|
||
|
|
background: #14391f33;
|
||
|
|
}
|
||
|
|
.group-action h3 {
|
||
|
|
margin: 0 0 6px;
|
||
|
|
font-size: 13px;
|
||
|
|
font-weight: 600;
|
||
|
|
color: #5fe08a;
|
||
|
|
}
|
||
|
|
.group-action p { margin: 0 0 8px; color: #b6bdc6; font-size: 12px; }
|
||
|
|
.group-action button { width: 100%; padding: 10px; font-size: 13px; }
|
||
|
|
|
||
|
|
.footer-note {
|
||
|
|
margin-top: 32px;
|
||
|
|
padding-top: 16px;
|
||
|
|
border-top: 1px dashed #1c2027;
|
||
|
|
color: #6b7280;
|
||
|
|
font-size: 12px;
|
||
|
|
}
|
||
|
|
.footer-note code { color: #8a93a0; }
|
||
|
|
|
||
|
|
.toast {
|
||
|
|
position: fixed;
|
||
|
|
bottom: 24px;
|
||
|
|
left: 50%;
|
||
|
|
transform: translateX(-50%);
|
||
|
|
background: #14171d;
|
||
|
|
border: 1px solid #2a2f38;
|
||
|
|
border-radius: 8px;
|
||
|
|
padding: 12px 20px;
|
||
|
|
max-width: 80vw;
|
||
|
|
color: #e6e8eb;
|
||
|
|
font-size: 13px;
|
||
|
|
box-shadow: 0 4px 16px #0008;
|
||
|
|
opacity: 0;
|
||
|
|
pointer-events: none;
|
||
|
|
transition: opacity 0.2s;
|
||
|
|
white-space: pre-line;
|
||
|
|
}
|
||
|
|
.toast.show { opacity: 1; pointer-events: auto; }
|
||
|
|
.toast.ok { border-color: #4cd97b66; }
|
||
|
|
.toast.err { border-color: #f0606066; }
|