Files
chart/web/static/view.css

403 lines
7.5 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.
@import url('https://fonts.googleapis.com/css2?family=Public+Sans:wght@400;500;600;700&display=swap');
:root {
--bg: #f6f7fb;
--surface: #ffffff;
--surface-2: #f2f4f8;
--border: #d9dee7;
--border-lite: #e8ecf2;
--ink: #1d2433;
--muted: #677287;
--accent: #2f6fed;
--danger-bg: #fff4f3;
--danger-border: #f2c3bc;
--danger-text: #8b2f23;
--shadow: 0 10px 30px rgba(18, 30, 55, 0.06);
}
* {
box-sizing: border-box;
}
body {
margin: 0;
background:
radial-gradient(circle at top left, rgba(47, 111, 237, 0.09), transparent 32%),
linear-gradient(180deg, #f7f9fc 0%, #eef2f7 100%);
color: var(--ink);
font-family: "Public Sans", "Segoe UI", sans-serif;
}
.page-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
padding: 18px 24px;
border-bottom: 1px solid rgba(217, 222, 231, 0.9);
background: rgba(255, 255, 255, 0.85);
backdrop-filter: blur(14px);
position: sticky;
top: 0;
z-index: 20;
}
.page-header h1 {
margin: 0;
font-size: clamp(22px, 3vw, 30px);
font-weight: 700;
letter-spacing: -0.03em;
}
.header-actions {
display: flex;
align-items: center;
gap: 10px;
}
.header-action {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 38px;
padding: 0 16px;
border-radius: 999px;
border: 1px solid rgba(47, 111, 237, 0.18);
background: rgba(47, 111, 237, 0.08);
color: var(--accent);
text-decoration: none;
font-weight: 600;
}
.header-action:hover {
background: rgba(47, 111, 237, 0.14);
}
.page-main {
width: min(1480px, calc(100vw - 40px));
margin: 26px auto 40px;
}
.notice-panel,
.meta-panel,
.empty-panel,
.section-card {
background: rgba(255, 255, 255, 0.92);
border: 1px solid rgba(217, 222, 231, 0.92);
box-shadow: var(--shadow);
border-radius: 18px;
}
.notice-panel,
.meta-panel,
.empty-panel {
padding: 20px 22px;
margin-bottom: 18px;
}
.notice-panel h2,
.meta-panel h2,
.empty-panel h2,
.section-card h2 {
margin: 0 0 14px;
font-size: 18px;
font-weight: 700;
letter-spacing: -0.02em;
}
.notice-panel p,
.empty-panel p {
margin: 0;
color: var(--muted);
line-height: 1.55;
}
.sections-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 18px;
}
.section-card {
overflow: hidden;
}
.section-card h2 {
padding: 18px 20px 14px;
}
.section-card-half {
grid-column: span 1;
}
.section-card-full {
grid-column: 1 / -1;
}
.section-card .kv-table,
.section-card .table-wrap,
.meta-panel .kv-table {
width: 100%;
}
.section-card .table-wrap,
.meta-panel .kv-table {
border-top: 1px solid var(--border-lite);
}
table {
border-collapse: collapse;
}
.kv-table th,
.kv-table td,
.data-table th,
.data-table td {
border-bottom: 1px solid var(--border-lite);
padding: 11px 14px;
vertical-align: top;
}
.kv-table tr:last-child th,
.kv-table tr:last-child td,
.data-table tbody tr:last-child td {
border-bottom: none;
}
.kv-table th,
.data-table th {
text-align: left;
font-weight: 700;
color: var(--ink);
background: rgba(242, 244, 248, 0.72);
}
.kv-table th {
width: 240px;
}
.kv-table td,
.data-table td {
color: var(--ink);
line-height: 1.45;
}
.data-table {
width: 100%;
min-width: 680px;
}
.data-table tbody tr:nth-child(even) {
background: rgba(246, 247, 251, 0.55);
}
.data-table tbody tr:hover {
background: rgba(47, 111, 237, 0.06);
}
.error-box {
margin-top: 18px;
padding: 14px 16px;
border-radius: 12px;
border: 1px solid var(--danger-border);
background: var(--danger-bg);
color: var(--danger-text);
}
.upload-shell {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 28px;
}
.upload-panel {
width: min(620px, 100%);
background: rgba(255, 255, 255, 0.94);
border-radius: 22px;
border: 1px solid rgba(217, 222, 231, 0.92);
box-shadow: 0 24px 60px rgba(16, 27, 49, 0.12);
padding: 28px 28px 24px;
}
.upload-panel h1 {
margin: 0 0 10px;
font-size: clamp(28px, 4vw, 36px);
letter-spacing: -0.04em;
}
.upload-panel p {
margin: 0 0 20px;
color: var(--muted);
line-height: 1.55;
}
.upload-form {
display: grid;
gap: 14px;
}
.upload-form label {
display: grid;
gap: 7px;
font-weight: 600;
}
.upload-form input[type="file"] {
border: 1px dashed var(--border);
border-radius: 14px;
padding: 16px;
background: var(--surface-2);
color: var(--muted);
}
.upload-form button {
justify-self: start;
min-height: 42px;
padding: 0 18px;
border: none;
border-radius: 999px;
background: linear-gradient(135deg, #2f6fed 0%, #1746b3 100%);
color: #fff;
font: inherit;
font-weight: 700;
cursor: pointer;
}
.upload-form button:hover {
filter: brightness(1.05);
}
.upload-error {
margin: 0 0 18px;
}
/* table-wrap already gets border from .section-card .table-wrap */
.table-wrap {
overflow-x: auto;
}
/* meta-panel table-wrap without duplicate border */
.meta-panel .table-wrap {
border: none;
box-shadow: none;
border-radius: 0;
}
.table-group + .table-group {
border-top: 1px solid var(--border);
}
.table-group h3 {
margin: 0;
padding: 9px 14px;
color: var(--muted);
font-size: 11px;
font-weight: 700;
letter-spacing: 0.05em;
text-transform: uppercase;
background: var(--surface-2);
border-bottom: 1px solid var(--border-lite);
}
.table-block {
display: block;
}
.table-toolbar {
display: flex;
align-items: center;
gap: 10px;
margin: 0 0 10px;
}
.table-toolbar-label {
color: var(--muted);
font-size: 12px;
font-weight: 700;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.table-severity-filter {
min-width: 180px;
border: 1px solid var(--border);
border-radius: 4px;
padding: 7px 10px;
background: var(--surface);
color: var(--ink);
font: inherit;
}
.table-severity-filter:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 2px;
}
.table-filter-empty {
margin: 10px 0 0;
color: var(--muted);
}
.data-table .status-column {
width: 1%;
white-space: nowrap;
text-align: center;
padding-left: 12px;
padding-right: 12px;
}
/* ── Status ──────────────────────────────────────── */
.status-badge {
display: inline-block;
font-size: 0;
white-space: nowrap;
}
.status-badge::before {
font-size: 15px;
font-weight: 700;
line-height: 1;
}
.status-ok::before { content: '✓'; color: #16ab39; }
.status-warning::before { content: '!'; color: #f2711c; }
.status-critical::before { content: '✗'; color: #db2828; }
.status-unknown::before { content: '?'; color: rgba(0, 0, 0, 0.4); }
.status-empty::before { content: ''; color: rgba(0, 0, 0, 0.3); }
.severity-info::before { content: 'i'; color: #2185d0; }
.severity-warning::before { content: '!'; color: #f2711c; }
.severity-error::before { content: '×'; color: #db2828; }
.severity-critical::before { content: '✗'; color: #a33333; }
.severity-debug::before { content: '•'; color: rgba(0, 0, 0, 0.55); }
.severity-unknown::before { content: '?'; color: rgba(0, 0, 0, 0.4); }
/* ── Responsive ──────────────────────────────────── */
@media (max-width: 720px) {
.page-header {
flex-direction: column;
}
.page-main {
width: calc(100vw - 24px);
margin-top: 20px;
}
.sections-grid {
grid-template-columns: 1fr;
}
.page-header {
padding: 12px 16px;
}
.section-card-half,
.section-card-full {
grid-column: auto;
}
}