Files
InformatiQ-Toolkit/assets/css/admin.css

368 lines
12 KiB
CSS
Raw Normal View History

/* ============================================================
InformatiQ Toolkit Admin CSS
============================================================ */
/* ── Page wrapper ─────────────────────────────────────────── */
.itk-wrap { max-width: 1400px; }
.itk-page-title {
display: flex;
align-items: center;
gap: 10px;
font-size: 22px;
margin: 20px 0 16px;
}
.itk-logo {
display: inline-flex;
align-items: center;
justify-content: center;
width: 36px; height: 36px;
background: #1a4a8a;
color: #fff;
font-weight: 900;
font-size: 14px;
border-radius: 6px;
letter-spacing: -1px;
}
/* ── Tab navigation ───────────────────────────────────────── */
.itk-tabs {
display: flex;
flex-wrap: wrap;
gap: 2px;
border-bottom: 2px solid #c3c4c7;
margin-bottom: 20px;
}
.itk-tab {
padding: 8px 16px;
text-decoration: none;
color: #2c3338;
font-size: 13px;
border-radius: 4px 4px 0 0;
border: 1px solid transparent;
border-bottom: none;
background: #f0f0f1;
margin-bottom: -2px;
}
.itk-tab:hover { background: #fff; color: #1a4a8a; }
.itk-tab-active {
background: #fff;
border-color: #c3c4c7;
color: #1a4a8a;
font-weight: 600;
}
/* ── Settings grid ────────────────────────────────────────── */
.itk-settings-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
gap: 20px;
align-items: start;
}
.itk-card {
background: #fff;
border: 1px solid #c3c4c7;
border-radius: 6px;
padding: 20px 24px;
}
.itk-card h2 {
margin: 0 0 16px;
font-size: 15px;
color: #1a4a8a;
border-bottom: 1px solid #e5e5e5;
padding-bottom: 8px;
}
/* ── Toggle rows ──────────────────────────────────────────── */
.itk-toggle-row {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 0;
border-bottom: 1px solid #f0f0f1;
gap: 12px;
}
.itk-toggle-row:last-child { border-bottom: none; }
.itk-toggle-info { flex: 1; }
.itk-toggle-label { display: block; font-weight: 600; font-size: 13px; color: #2c3338; }
.itk-toggle-desc { display: block; font-size: 11px; color: #646970; margin-top: 2px; }
/* ── Toggle switch ────────────────────────────────────────── */
.itk-switch {
position: relative;
display: inline-block;
width: 44px;
height: 24px;
flex-shrink: 0;
}
.itk-switch input { opacity: 0; width: 0; height: 0; }
.itk-slider {
position: absolute;
cursor: pointer;
inset: 0;
background: #ccc;
border-radius: 24px;
transition: .25s;
}
.itk-slider:before {
content: '';
position: absolute;
width: 18px; height: 18px;
left: 3px; bottom: 3px;
background: #fff;
border-radius: 50%;
transition: .25s;
}
input:checked + .itk-slider { background: #2271b1; }
input:checked + .itk-slider:before { transform: translateX(20px); }
/* ── Dashboard ────────────────────────────────────────────── */
.itk-dashboard {
display: grid;
grid-template-columns: 1fr 280px;
gap: 20px;
align-items: start;
}
@media (max-width: 960px) { .itk-dashboard { grid-template-columns: 1fr; } }
/* Monitor panel terminal style */
.itk-monitor-panel {
background: #0d1117;
color: #58a6ff;
border-radius: 8px;
padding: 20px 24px;
font-family: 'Courier New', Courier, monospace;
}
.itk-monitor-header {
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #21262d;
padding-bottom: 12px;
margin-bottom: 16px;
}
.itk-monitor-title { font-weight: 700; font-size: 13px; letter-spacing: 1px; color: #79c0ff; }
.itk-monitor-blink {
background: #238636;
color: #fff;
padding: 2px 8px;
border-radius: 3px;
font-size: 11px;
font-weight: 700;
letter-spacing: 1px;
animation: itk-pulse 2s infinite;
}
@keyframes itk-pulse { 0%,100%{opacity:1} 50%{opacity:.5} }
/* Stat cards (inside monitor) */
.itk-stat-row {
display: flex;
flex-wrap: wrap;
gap: 12px;
margin-bottom: 20px;
}
.itk-stat-card {
background: #161b22;
border: 1px solid #21262d;
border-radius: 6px;
padding: 12px 18px;
min-width: 110px;
text-align: center;
flex: 1;
}
.itk-stat-num { font-size: 2em; font-weight: 700; color: #58a6ff; line-height: 1.2; }
.itk-stat-lbl { font-size: 10px; color: #8b949e; letter-spacing: .5px; text-transform: uppercase; }
.itk-green { color: #3fb950; }
.itk-yellow { color: #d29922; }
/* Chart sections */
.itk-chart-section { margin-bottom: 20px; }
.itk-chart-title {
font-size: 10px;
letter-spacing: 1px;
color: #8b949e;
text-transform: uppercase;
margin-bottom: 8px;
}
.itk-bar-chart { display: flex; flex-direction: column; gap: 6px; }
.itk-bar-row { display: flex; align-items: center; gap: 8px; font-size: 12px; }
.itk-bar-label { width: 130px; color: #c9d1d9; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.itk-bar-track { flex: 1; background: #21262d; border-radius: 3px; height: 14px; overflow: hidden; }
.itk-bar-fill { height: 100%; background: linear-gradient(90deg, #1f6feb, #58a6ff); border-radius: 3px; transition: width .4s; }
.itk-bar-hp { background: linear-gradient(90deg, #6e40c9, #a371f7) !important; }
.itk-bar-count { width: 40px; text-align: right; color: #8b949e; font-size: 11px; }
/* Mini table (top IPs) */
.itk-mini-table { width: 100%; border-collapse: collapse; font-size: 12px; }
.itk-mini-table th { color: #8b949e; font-weight: normal; padding: 4px 8px; border-bottom: 1px solid #21262d; }
.itk-mini-table td { color: #c9d1d9; padding: 4px 8px; border-bottom: 1px solid #161b22; }
.itk-mini-table a { color: #58a6ff; }
.itk-lookup { color: #8b949e; font-size: 10px; }
/* Quick status sidebar */
.itk-quick-status {
background: #fff;
border: 1px solid #c3c4c7;
border-radius: 6px;
padding: 16px 20px;
}
.itk-quick-status .itk-chart-title { color: #1a4a8a; }
.itk-module-row {
display: flex;
align-items: center;
gap: 8px;
padding: 6px 0;
border-bottom: 1px solid #f0f0f1;
font-size: 12px;
}
.itk-module-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
.itk-dot-on { background: #00a32a; }
.itk-dot-off { background: #c3c4c7; }
.itk-module-label { flex: 1; color: #2c3338; }
.itk-module-status { font-size: 10px; font-weight: 700; letter-spacing: .5px; }
.itk-dot-on ~ .itk-module-status { color: #00a32a; }
.itk-dot-off ~ .itk-module-status { color: #c3c4c7; }
/* ── Log tables ───────────────────────────────────────────── */
.itk-log-page {}
.itk-filters {
display: flex;
flex-wrap: wrap;
gap: 8px;
align-items: center;
margin-bottom: 12px;
}
.itk-filters input[type=text],
.itk-filters select { height: 32px; padding: 0 8px; }
.itk-count { color: #646970; font-size: 13px; margin: 0 0 8px; }
.itk-log-table { font-size: 12px; }
.itk-log-table th { white-space: nowrap; }
.itk-nowrap { white-space: nowrap; }
.itk-ua { color: #646970; font-size: 11px; max-width: 220px; word-break: break-all; }
.itk-uri { font-size: 11px; color: #646970; max-width: 200px; word-break: break-all; }
.itk-no-results { text-align: center; padding: 20px; color: #646970; }
.itk-filter-link { font-size: 10px; color: #2271b1; text-decoration: none; }
.itk-filter-link:hover { text-decoration: underline; }
/* Badges */
.itk-badge {
display: inline-block;
padding: 2px 8px;
border-radius: 3px;
font-size: 10px;
font-weight: 700;
letter-spacing: .5px;
text-transform: uppercase;
}
.itk-badge-block { background: #ffecec; color: #b32d2e; border: 1px solid #f7c5c5; }
.itk-badge-warn { background: #fef3cd; color: #856404; border: 1px solid #fde68a; }
.itk-badge-hp { background: #f3e8ff; color: #6e40c9; border: 1px solid #d4a9ff; }
/* Pager */
.itk-pager {
display: flex;
align-items: center;
gap: 8px;
margin: 12px 0;
font-size: 13px;
}
.itk-pager span { color: #646970; }
/* Danger button */
.itk-btn-danger { color: #b32d2e !important; border-color: #b32d2e !important; }
.itk-btn-danger:hover { background: #b32d2e !important; color: #fff !important; }
/* ── Config editor ────────────────────────────────────────── */
.itk-config-editor {}
.itk-config-tabs {
display: flex;
gap: 4px;
margin-bottom: 16px;
flex-wrap: wrap;
}
.itk-config-tab {
padding: 6px 14px;
background: #f0f0f1;
border: 1px solid #c3c4c7;
border-radius: 4px;
text-decoration: none;
color: #2c3338;
font-size: 12px;
}
.itk-config-tab.active { background: #2271b1; color: #fff; border-color: #2271b1; }
.itk-config-editor-area { background: #fff; border: 1px solid #c3c4c7; border-radius: 6px; padding: 20px; }
.itk-config-textarea {
width: 100%;
font-family: 'Courier New', Courier, monospace;
font-size: 12px;
background: #0d1117;
color: #c9d1d9;
border: 1px solid #30363d;
border-radius: 4px;
padding: 12px;
resize: vertical;
box-sizing: border-box;
}
/* ── Toggle feedback ──────────────────────────────────────── */
.itk-toggle-saving { opacity: .6; pointer-events: none; }
.itk-toggle-saved { color: #00a32a; font-size: 11px; }
.itk-toggle-error { color: #b32d2e; font-size: 11px; }
/* ── Central API card ─────────────────────────────────────── */
.itk-api-card { grid-column: 1 / -1; }
.itk-api-desc { margin: -8px 0 14px; color: #646970; }
.itk-api-status-bar {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 10px;
margin-bottom: 14px;
padding: 8px 12px;
background: #f6f7f7;
border: 1px solid #e5e5e5;
border-radius: 4px;
}
.itk-api-badge {
display: inline-block;
padding: 3px 10px;
border-radius: 12px;
font-size: 11px;
font-weight: 700;
letter-spacing: .5px;
text-transform: uppercase;
}
.itk-api-ok { background: #d7f7e0; color: #1a7a3a; border: 1px solid #9de0b4; }
.itk-api-err { background: #ffecec; color: #b32d2e; border: 1px solid #f7c5c5; }
.itk-api-unknown { background: #f0f0f1; color: #646970; border: 1px solid #c3c4c7; }
.itk-api-time { font-size: 11px; color: #646970; }
.itk-api-err-msg { font-size: 11px; color: #b32d2e; font-style: italic; }
.itk-api-notice {
padding: 8px 12px;
border-radius: 4px;
font-size: 13px;
margin-bottom: 12px;
}
.itk-api-notice-ok { background: #d7f7e0; border: 1px solid #9de0b4; color: #1a7a3a; }
.itk-api-notice-err { background: #ffecec; border: 1px solid #f7c5c5; color: #b32d2e; }
.itk-api-table { margin-top: 0 !important; }
.itk-api-table th { width: 130px; }
.itk-api-form-actions { margin-top: 4px; display: flex; align-items: center; flex-wrap: wrap; gap: 6px; }
.itk-api-footer {
margin-top: 16px;
padding-top: 14px;
border-top: 1px solid #e5e5e5;
display: flex;
flex-wrap: wrap;
gap: 12px 30px;
align-items: flex-start;
}
.itk-api-queue-row,
.itk-api-history-row { font-size: 13px; display: flex; align-items: center; flex-wrap: wrap; gap: 6px; }
.itk-api-rem { color: #646970; font-size: 12px; }