543 lines
8.4 KiB
CSS
543 lines
8.4 KiB
CSS
:root {
|
|
--bg: #f6f1e8;
|
|
--panel: rgba(255, 250, 244, 0.82);
|
|
--panel-strong: rgba(255, 252, 248, 0.94);
|
|
--text: #112238;
|
|
--muted: #5f6f80;
|
|
--line: rgba(17, 34, 56, 0.12);
|
|
--brand: #0f6c7b;
|
|
--brand-strong: #0a425a;
|
|
--accent: #c65d3a;
|
|
--danger: #a33a2b;
|
|
--success: #217253;
|
|
--shadow: 0 20px 50px rgba(17, 34, 56, 0.12);
|
|
--radius: 24px;
|
|
--radius-sm: 16px;
|
|
--font-sans: "Avenir Next", "Trebuchet MS", "PingFang SC", "Microsoft YaHei", sans-serif;
|
|
}
|
|
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
body {
|
|
margin: 0;
|
|
min-height: 100vh;
|
|
font-family: var(--font-sans);
|
|
color: var(--text);
|
|
background:
|
|
radial-gradient(circle at top left, rgba(15, 108, 123, 0.18), transparent 30%),
|
|
linear-gradient(135deg, #f8f4ec 0%, #f0ebe3 45%, #e2edf1 100%);
|
|
}
|
|
|
|
button,
|
|
input,
|
|
textarea {
|
|
font: inherit;
|
|
}
|
|
|
|
.background-glow {
|
|
position: fixed;
|
|
inset: auto;
|
|
width: 28rem;
|
|
height: 28rem;
|
|
border-radius: 999px;
|
|
filter: blur(70px);
|
|
opacity: 0.32;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.glow-a {
|
|
top: -8rem;
|
|
right: -10rem;
|
|
background: #f4a261;
|
|
}
|
|
|
|
.glow-b {
|
|
left: -8rem;
|
|
bottom: -12rem;
|
|
background: #4da6b3;
|
|
}
|
|
|
|
.shell {
|
|
position: relative;
|
|
max-width: 1500px;
|
|
margin: 0 auto;
|
|
padding: 36px 24px 48px;
|
|
}
|
|
|
|
.hero {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1.8fr) minmax(280px, 0.8fr);
|
|
gap: 24px;
|
|
align-items: stretch;
|
|
margin-bottom: 24px;
|
|
}
|
|
|
|
.hero-copy,
|
|
.hero-side,
|
|
.panel,
|
|
.metric-card {
|
|
background: var(--panel);
|
|
backdrop-filter: blur(16px);
|
|
border: 1px solid rgba(255, 255, 255, 0.5);
|
|
box-shadow: var(--shadow);
|
|
}
|
|
|
|
.hero-copy {
|
|
padding: 28px;
|
|
border-radius: calc(var(--radius) + 4px);
|
|
}
|
|
|
|
.hero-copy h1 {
|
|
margin: 10px 0 12px;
|
|
font-size: clamp(2rem, 3vw, 3.4rem);
|
|
line-height: 1.05;
|
|
}
|
|
|
|
.eyebrow {
|
|
margin: 0;
|
|
font-size: 0.78rem;
|
|
letter-spacing: 0.16em;
|
|
text-transform: uppercase;
|
|
color: var(--brand);
|
|
}
|
|
|
|
.hero-text {
|
|
margin: 0;
|
|
max-width: 48rem;
|
|
font-size: 1.02rem;
|
|
line-height: 1.7;
|
|
color: var(--muted);
|
|
}
|
|
|
|
.hero-side {
|
|
padding: 24px;
|
|
border-radius: calc(var(--radius) + 4px);
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
gap: 18px;
|
|
}
|
|
|
|
.status-card {
|
|
display: grid;
|
|
gap: 8px;
|
|
padding: 18px;
|
|
border-radius: var(--radius-sm);
|
|
background: linear-gradient(145deg, rgba(15, 108, 123, 0.09), rgba(198, 93, 58, 0.06));
|
|
}
|
|
|
|
.status-card strong {
|
|
font-size: 1.1rem;
|
|
}
|
|
|
|
.status-label,
|
|
.muted {
|
|
color: var(--muted);
|
|
}
|
|
|
|
.hero-actions,
|
|
.editor-actions,
|
|
.pager,
|
|
.form-actions {
|
|
display: flex;
|
|
gap: 12px;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.dashboard {
|
|
display: grid;
|
|
gap: 24px;
|
|
}
|
|
|
|
.metrics {
|
|
display: grid;
|
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
gap: 16px;
|
|
}
|
|
|
|
.metric-card {
|
|
border-radius: 22px;
|
|
padding: 20px;
|
|
display: grid;
|
|
gap: 8px;
|
|
}
|
|
|
|
.metric-label {
|
|
color: var(--muted);
|
|
font-size: 0.92rem;
|
|
}
|
|
|
|
.metric-card strong {
|
|
font-size: clamp(1.8rem, 4vw, 2.6rem);
|
|
}
|
|
|
|
.metric-foot {
|
|
color: var(--muted);
|
|
font-size: 0.86rem;
|
|
}
|
|
|
|
.panel {
|
|
border-radius: var(--radius);
|
|
padding: 24px;
|
|
}
|
|
|
|
.panel-head {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: flex-start;
|
|
gap: 16px;
|
|
margin-bottom: 18px;
|
|
}
|
|
|
|
.panel-head h2,
|
|
.batch-card h3 {
|
|
margin: 0 0 8px;
|
|
}
|
|
|
|
.panel-head p,
|
|
.batch-card p {
|
|
margin: 0;
|
|
color: var(--muted);
|
|
line-height: 1.65;
|
|
}
|
|
|
|
.search-form,
|
|
.inline-form {
|
|
display: flex;
|
|
gap: 12px;
|
|
flex-wrap: wrap;
|
|
align-items: end;
|
|
}
|
|
|
|
.search-form input,
|
|
.inline-form input,
|
|
.user-form input,
|
|
.batch-card textarea {
|
|
width: 100%;
|
|
border: 1px solid var(--line);
|
|
border-radius: 14px;
|
|
padding: 12px 14px;
|
|
background: rgba(255, 255, 255, 0.72);
|
|
color: var(--text);
|
|
}
|
|
|
|
.inline-form label,
|
|
.user-form label {
|
|
display: grid;
|
|
gap: 8px;
|
|
color: var(--muted);
|
|
}
|
|
|
|
.btn {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
border: 0;
|
|
border-radius: 999px;
|
|
padding: 11px 18px;
|
|
cursor: pointer;
|
|
text-decoration: none;
|
|
transition: transform 0.16s ease, opacity 0.16s ease, background 0.16s ease;
|
|
}
|
|
|
|
.btn:hover {
|
|
transform: translateY(-1px);
|
|
}
|
|
|
|
.btn:disabled {
|
|
opacity: 0.48;
|
|
cursor: not-allowed;
|
|
transform: none;
|
|
}
|
|
|
|
.btn-primary {
|
|
background: linear-gradient(135deg, var(--brand), var(--brand-strong));
|
|
color: #fff;
|
|
}
|
|
|
|
.btn-secondary {
|
|
background: #d7ecef;
|
|
color: var(--brand-strong);
|
|
}
|
|
|
|
.btn-ghost {
|
|
background: rgba(17, 34, 56, 0.08);
|
|
color: var(--text);
|
|
}
|
|
|
|
.btn-danger {
|
|
background: linear-gradient(135deg, var(--danger), #7d241d);
|
|
color: #fff;
|
|
}
|
|
|
|
.table-wrap {
|
|
overflow: auto;
|
|
border-radius: var(--radius-sm);
|
|
border: 1px solid var(--line);
|
|
}
|
|
|
|
.selection-toolbar {
|
|
margin-bottom: 18px;
|
|
padding: 14px 16px;
|
|
border-radius: 18px;
|
|
border: 1px solid var(--line);
|
|
background: var(--panel-strong);
|
|
display: flex;
|
|
justify-content: space-between;
|
|
gap: 12px;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.selection-meta,
|
|
.selection-actions,
|
|
.table-checkbox,
|
|
.batch-card-top {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.batch-card-top {
|
|
justify-content: space-between;
|
|
align-items: flex-start;
|
|
}
|
|
|
|
.table-checkbox {
|
|
color: var(--muted);
|
|
font-size: 0.82rem;
|
|
}
|
|
|
|
.check-col,
|
|
.check-cell {
|
|
width: 76px;
|
|
}
|
|
|
|
.check-cell {
|
|
text-align: center;
|
|
}
|
|
|
|
table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
min-width: 980px;
|
|
}
|
|
|
|
th,
|
|
td {
|
|
padding: 14px 16px;
|
|
border-bottom: 1px solid var(--line);
|
|
text-align: left;
|
|
vertical-align: top;
|
|
}
|
|
|
|
th {
|
|
font-size: 0.84rem;
|
|
color: var(--muted);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.08em;
|
|
}
|
|
|
|
tbody tr:hover {
|
|
background: rgba(15, 108, 123, 0.05);
|
|
}
|
|
|
|
.table-footer {
|
|
margin-top: 16px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 12px;
|
|
}
|
|
|
|
.status-pill {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 6px 12px;
|
|
border-radius: 999px;
|
|
font-size: 0.82rem;
|
|
}
|
|
|
|
.status-pill.active {
|
|
background: rgba(33, 114, 83, 0.14);
|
|
color: var(--success);
|
|
}
|
|
|
|
.status-pill.disabled {
|
|
background: rgba(163, 58, 43, 0.12);
|
|
color: var(--danger);
|
|
}
|
|
|
|
.actions-inline {
|
|
display: flex;
|
|
gap: 8px;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.actions-inline .btn {
|
|
padding: 8px 12px;
|
|
font-size: 0.88rem;
|
|
}
|
|
|
|
.user-form {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
gap: 14px 16px;
|
|
}
|
|
|
|
.checkbox {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
}
|
|
|
|
.checkbox input {
|
|
width: auto;
|
|
}
|
|
|
|
.form-actions {
|
|
grid-column: 1 / -1;
|
|
padding-top: 8px;
|
|
}
|
|
|
|
.license-list {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
|
|
gap: 14px;
|
|
}
|
|
|
|
.license-card,
|
|
.empty-card {
|
|
padding: 16px 18px;
|
|
border-radius: 18px;
|
|
background: var(--panel-strong);
|
|
border: 1px solid var(--line);
|
|
}
|
|
|
|
.license-card strong {
|
|
display: block;
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
.batch-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
gap: 16px;
|
|
}
|
|
|
|
.batch-card {
|
|
padding: 18px;
|
|
border-radius: 20px;
|
|
background: var(--panel-strong);
|
|
border: 1px solid var(--line);
|
|
display: grid;
|
|
gap: 12px;
|
|
}
|
|
|
|
.file-input {
|
|
width: 100%;
|
|
}
|
|
|
|
.batch-card textarea {
|
|
min-height: 180px;
|
|
resize: vertical;
|
|
}
|
|
|
|
.console {
|
|
margin: 0;
|
|
padding: 18px;
|
|
min-height: 220px;
|
|
border-radius: 18px;
|
|
background: #102338;
|
|
color: #edf6ff;
|
|
overflow: auto;
|
|
white-space: pre-wrap;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
.task-status-card {
|
|
margin-bottom: 14px;
|
|
padding: 16px 18px;
|
|
border-radius: 18px;
|
|
background: var(--panel-strong);
|
|
border: 1px solid var(--line);
|
|
display: grid;
|
|
gap: 10px;
|
|
}
|
|
|
|
.task-status-head {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
gap: 10px;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.task-progress-track {
|
|
width: 100%;
|
|
height: 10px;
|
|
border-radius: 999px;
|
|
overflow: hidden;
|
|
background: rgba(17, 34, 56, 0.1);
|
|
}
|
|
|
|
.task-progress-fill {
|
|
width: 0%;
|
|
height: 100%;
|
|
background: linear-gradient(135deg, var(--brand), var(--accent));
|
|
transition: width 0.2s ease;
|
|
}
|
|
|
|
.empty-cell,
|
|
.hidden {
|
|
display: none;
|
|
}
|
|
|
|
.tag {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 5px 10px;
|
|
border-radius: 999px;
|
|
background: rgba(15, 108, 123, 0.09);
|
|
color: var(--brand-strong);
|
|
font-size: 0.82rem;
|
|
}
|
|
|
|
@media (max-width: 1100px) {
|
|
.hero,
|
|
.metrics,
|
|
.batch-grid,
|
|
.user-form {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.panel-head,
|
|
.table-footer,
|
|
.selection-toolbar,
|
|
.batch-card-top {
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
}
|
|
|
|
.search-form input {
|
|
min-width: 100%;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 720px) {
|
|
.shell {
|
|
padding: 18px 14px 28px;
|
|
}
|
|
|
|
.panel,
|
|
.hero-copy,
|
|
.hero-side {
|
|
padding: 18px;
|
|
border-radius: 20px;
|
|
}
|
|
}
|