chore: 初始提交 - 移除所有硬编码凭据,统一从环境变量读取

This commit is contained in:
yangxiangyuan
2026-06-11 17:10:58 +08:00
commit c223c79b36
1699 changed files with 313940 additions and 0 deletions
@@ -0,0 +1,611 @@
body {
margin: 0;
background: #f3f6fb;
color: #1f2937;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Microsoft YaHei", sans-serif;
}
.page {
max-width: 960px;
margin: 0 auto;
padding: 12px;
display: grid;
gap: 12px;
}
.hero {
background: #111827;
color: #fff;
border-radius: 12px;
padding: 14px;
}
.hero-main {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 12px;
}
.hero h1 {
margin: 0 0 8px;
font-size: 22px;
}
.hero p {
margin: 0;
opacity: .92;
}
.hero-auth {
min-width: 320px;
display: grid;
gap: 6px;
justify-items: end;
}
.auth-login-inline {
display: flex;
gap: 6px;
align-items: center;
}
.auth-login-inline input {
width: 110px;
height: 34px;
border-color: #334155;
background: #0f172a;
color: #fff;
}
.auth-login-inline input::placeholder {
color: #94a3b8;
}
.hero-auth .btn-primary {
width: auto;
margin-top: 0;
height: 34px;
padding: 0 12px;
}
.auth-row {
display: flex;
align-items: center;
gap: 8px;
}
.hero-auth .auth-row .btn {
height: 34px;
padding: 0 12px;
background: #1e293b;
}
.auth-current-user {
font-size: 13px;
color: #e2e8f0;
font-weight: 600;
}
.hero-auth .status {
margin-top: 0;
min-height: 16px;
font-size: 12px;
color: #cbd5e1;
text-align: right;
}
.card {
background: #fff;
border-radius: 12px;
padding: 14px;
box-shadow: 0 2px 12px rgba(17, 24, 39, 0.06);
}
h2 {
margin: 0 0 12px;
font-size: 18px;
}
h3 {
margin: 14px 0 8px;
font-size: 15px;
}
label {
display: grid;
gap: 6px;
font-size: 14px;
}
input, select, textarea {
height: 38px;
border: 1px solid #cbd5e1;
border-radius: 8px;
padding: 0 10px;
background: #fff;
}
textarea {
min-height: 88px;
height: auto;
padding: 10px;
resize: vertical;
line-height: 1.5;
}
.grid {
display: grid;
gap: 10px;
}
.grid.two {
grid-template-columns: 1fr 1fr;
}
.grid.one {
grid-template-columns: 1fr;
}
.full {
grid-column: 1 / -1;
}
.check-grid, .radio-grid {
display: grid;
gap: 8px;
}
.check-grid label {
display: flex;
gap: 8px;
align-items: flex-start;
}
.check-grid input[type="checkbox"] {
width: 16px;
height: 16px;
margin-top: 2px;
}
.radio-grid > div {
border: 1px solid #e2e8f0;
border-radius: 8px;
padding: 10px;
display: grid;
grid-template-columns: 1fr auto auto;
align-items: center;
column-gap: 12px;
}
.radio-grid > div > label {
display: inline-flex;
align-items: center;
gap: 6px;
white-space: nowrap;
}
.radio-grid input[type="radio"] {
width: 16px;
height: 16px;
margin: 0;
}
.score-box {
display: flex;
align-items: center;
font-weight: 700;
color: #0f766e;
}
.btn {
border: 0;
border-radius: 8px;
height: 38px;
padding: 0 14px;
background: #334155;
color: #fff;
cursor: pointer;
}
.btn:disabled {
opacity: .45;
cursor: not-allowed;
}
.btn-soft-disabled {
opacity: .5;
cursor: pointer;
}
.btn-primary {
width: 100%;
background: #2563eb;
margin-top: 12px;
}
.btn-link {
height: auto;
padding: 0;
border-radius: 0;
background: transparent;
color: #1d4ed8;
text-decoration: underline;
}
.form-actions {
margin-top: 12px;
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.status {
min-height: 20px;
margin-top: 8px;
color: #334155;
font-size: 13px;
}
.field-tip {
margin-top: 6px;
color: #64748b;
font-size: 12px;
line-height: 1.5;
}
.field-tip-rich {
display: grid;
gap: 6px;
padding: 10px 12px;
border: 1px solid #e2e8f0;
border-radius: 8px;
background: #f8fafc;
}
.field-tip-title {
color: #334155;
font-size: 13px;
font-weight: 700;
}
.field-tip-current {
color: #334155;
font-size: 12px;
font-weight: 600;
}
.field-tip-list {
margin: 0;
padding-left: 18px;
}
.field-tip-list li {
margin: 0 0 4px;
}
.field-tip-empty {
color: #64748b;
}
.decision {
border: 1px dashed #cbd5e1;
border-radius: 8px;
padding: 12px;
min-height: 80px;
}
.decision.pass {
border-color: #16a34a;
background: #f0fdf4;
}
.decision.reject {
border-color: #dc2626;
background: #fef2f2;
}
.decision.wait {
border-color: #2563eb;
background: #eff6ff;
}
.stats {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 8px;
margin-bottom: 10px;
}
.stats .item {
background: #f8fafc;
border: 1px solid #e2e8f0;
border-radius: 8px;
padding: 8px;
text-align: center;
}
.stats .value {
font-size: 18px;
font-weight: 700;
}
.list {
display: grid;
gap: 8px;
}
.row {
border: 1px solid #e2e8f0;
border-radius: 8px;
padding: 10px;
display: grid;
gap: 8px;
}
.row-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
}
.row .meta {
font-size: 13px;
color: #475569;
}
.row .meta .tag-low {
display: inline-block;
padding: 1px 6px;
border-radius: 999px;
border: 1px solid #ef4444;
color: #b91c1c;
background: #fef2f2;
font-size: 12px;
}
.row .meta .tag-archived {
display: inline-block;
padding: 1px 6px;
border-radius: 999px;
border: 1px solid #94a3b8;
color: #475569;
background: #f8fafc;
font-size: 12px;
}
.row .meta.cooling-tip {
color: #1d4ed8;
font-weight: 600;
}
.row .actions {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.history-toolbar {
display: grid;
grid-template-columns: 2fr 1fr 1fr auto auto;
gap: 8px;
margin-bottom: 10px;
align-items: end;
}
.history-check {
display: inline-flex;
align-items: center;
gap: 8px;
white-space: nowrap;
}
.history-check input[type="checkbox"] {
width: 16px;
height: 16px;
}
.history-pager {
margin-top: 10px;
display: flex;
justify-content: flex-end;
align-items: center;
gap: 8px;
}
.warn {
background: #fee2e2;
border: 1px solid #ef4444;
color: #991b1b;
border-radius: 8px;
padding: 10px;
font-size: 13px;
}
.risk-lights {
display: flex;
gap: 8px;
margin: 6px 0 10px;
}
.risk-light {
width: 14px;
height: 14px;
border-radius: 50%;
background: #d1d5db;
border: 1px solid #9ca3af;
box-shadow: inset 0 1px 1px rgba(255,255,255,.45);
}
.risk-light.on {
background: #22c55e;
border-color: #16a34a;
box-shadow: 0 0 6px rgba(34,197,94,.55), inset 0 1px 1px rgba(255,255,255,.45);
}
.modal-mask {
position: fixed;
inset: 0;
background: rgba(15, 23, 42, 0.45);
display: flex;
align-items: center;
justify-content: center;
padding: 16px;
z-index: 1000;
}
.modal-panel {
width: min(92vw, 460px);
background: #fff;
border-radius: 12px;
box-shadow: 0 10px 40px rgba(15, 23, 42, 0.25);
padding: 14px;
display: grid;
gap: 12px;
}
.modal-panel.wide {
width: min(92vw, 760px);
}
.modal-title {
font-size: 17px;
font-weight: 700;
color: #0f172a;
}
.modal-message {
font-size: 14px;
color: #334155;
line-height: 1.55;
white-space: pre-wrap;
max-height: 62vh;
overflow: auto;
}
.modal-message.is-rich {
white-space: normal;
}
.detail-section-title {
margin: 10px 0 6px;
font-size: 14px;
font-weight: 700;
color: #0f172a;
}
.detail-row {
display: grid;
grid-template-columns: 130px 1fr;
gap: 8px;
align-items: start;
margin-bottom: 6px;
}
.detail-label {
color: #0f172a;
font-weight: 600;
}
.detail-value {
color: #1d4ed8;
white-space: pre-wrap;
word-break: break-word;
}
.modal-actions {
display: flex;
justify-content: flex-end;
gap: 8px;
}
.modal-actions .btn-primary {
width: auto;
margin-top: 0;
}
.busy-mask {
position: fixed;
inset: 0;
background: rgba(15, 23, 42, 0.38);
display: flex;
align-items: center;
justify-content: center;
z-index: 1100;
padding: 16px;
}
.busy-panel {
background: #fff;
border-radius: 12px;
min-width: min(92vw, 280px);
padding: 16px;
display: grid;
justify-items: center;
gap: 12px;
box-shadow: 0 10px 30px rgba(15, 23, 42, 0.24);
}
.busy-spinner {
width: 32px;
height: 32px;
border-radius: 50%;
border: 3px solid #dbeafe;
border-top-color: #2563eb;
animation: spin .9s linear infinite;
}
.busy-text {
color: #334155;
font-size: 14px;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
@media (max-width: 700px) {
.hero-main {
flex-direction: column;
}
.hero-auth {
min-width: 0;
width: 100%;
justify-items: stretch;
}
.auth-login-inline {
display: grid;
grid-template-columns: 1fr 1fr auto;
}
.auth-row {
justify-content: space-between;
}
.hero-auth .status {
text-align: left;
}
.grid.two {
grid-template-columns: 1fr;
}
.stats {
grid-template-columns: 1fr 1fr;
}
.history-toolbar {
grid-template-columns: 1fr;
}
.row .actions .btn {
flex: 1 1 calc(50% - 8px);
min-width: 120px;
}
.history-pager {
justify-content: space-between;
}
.detail-row {
grid-template-columns: 1fr;
gap: 4px;
}
.hero h1 {
font-size: 19px;
}
}