mission-control/public/style.css

233 lines
10 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.

/* =====================================================================
MISSION CONTROL — cyber / sci-fi neon cam teması
Koyu zemin · camgöbeği/yeşil/kehribar/kırmızı neon uyarı kuşakları
===================================================================== */
:root {
--bg: #05080f;
--bg-2: #0a0f1c;
--panel: rgba(14, 22, 40, 0.55);
--panel-edge: rgba(120, 190, 255, 0.22);
--text: #cfe6ff;
--text-dim: #67819f;
--cyan: #00e5ff; /* camgöbeği */
--green: #39ff88; /* neon yeşil */
--amber: #ffb020; /* kehribar sarısı */
--red: #ff3550; /* kritik kırmızı */
--glow-cyan: 0 0 14px rgba(0, 229, 255, 0.55);
--glow-green: 0 0 12px rgba(57, 255, 136, 0.45);
--glow-amber: 0 0 12px rgba(255, 176, 32, 0.45);
--glow-red: 0 0 14px rgba(255, 53, 80, 0.6);
--mono: 'Consolas', 'SF Mono', 'Menlo', monospace;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html, body {
min-height: 100%;
}
body {
background:
radial-gradient(1200px 600px at 20% -10%, #0c1730 0%, transparent 60%),
radial-gradient(900px 500px at 110% 10%, #0b1f2e 0%, transparent 55%),
linear-gradient(180deg, var(--bg) 0%, var(--bg-2) 100%);
color: var(--text);
font-family: var(--mono);
overflow-x: hidden;
padding: 18px clamp(10px, 2vw, 34px);
position: relative;
}
/* Arka plan neon küreleri */
.bg-orb { position: fixed; border-radius: 50%; filter: blur(70px); z-index: 0; pointer-events: none; }
.bg-orb--a { width: 420px; height: 420px; background: rgba(0, 229, 255, 0.09); top: -160px; left: -120px; }
.bg-orb--b { width: 480px; height: 480px; background: rgba(255, 53, 80, 0.06); bottom: -200px; right: -140px; }
/* Tarama çizgileri */
.scanlines {
position: fixed; inset: 0; z-index: 1; pointer-events: none; opacity: 0.08;
background: repeating-linear-gradient(
0deg, transparent 0 2px, rgba(255, 255, 255, 0.09) 2px 4px
);
}
section, header { position: relative; z-index: 2; }
/* Cam panel */
.glass {
background: linear-gradient(160deg, rgba(20, 30, 55, 0.62), rgba(10, 16, 30, 0.45));
border: 1px solid var(--panel-edge);
border-radius: 14px;
backdrop-filter: blur(7px);
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.06);
}
.glass:hover { border-color: rgba(120, 190, 255, 0.4); }
/* ================= TOP BAR ================= */
.topbar {
display: flex; justify-content: space-between; align-items: center;
padding: 14px 20px; margin-bottom: 18px;
flex-wrap: wrap; gap: 14px;
}
.brand { display: flex; align-items: center; gap: 14px; }
.brand-bolt {
width: 44px; height: 44px; border-radius: 10px; flex: none;
background: radial-gradient(circle at 30% 30%, var(--cyan), #006b80);
box-shadow: var(--glow-cyan);
position: relative;
animation: pulse-glow 2.4s infinite ease-in-out;
}
.brand-bolt::after {
content: ''; position: absolute; inset: 12px;
border: 2px solid rgba(255,255,255,0.75); border-radius: 4px;
box-shadow: inset 0 0 8px rgba(0,0,0,0.4);
clip-path: polygon(55% 5%, 45% 40%, 70% 45%, 40% 95%, 55% 55%, 28% 52%);
}
.brand h1 {
font-size: 22px; letter-spacing: 3px; color: var(--cyan);
text-shadow: var(--glow-cyan); font-weight: 700;
}
.tagline { font-size: 11px; color: var(--text-dim); letter-spacing: 1px; text-transform: uppercase; }
.topstats { display: flex; gap: 16px; flex-wrap: wrap; }
.stat { display: flex; align-items: center; gap: 10px; padding: 6px 12px; border: 1px solid rgba(120,190,255,.12); border-radius: 8px; background: rgba(5,10,20,.5); }
.stat b { display: block; font-size: 16px; }
.stat small { font-size: 9px; color: var(--text-dim); text-transform: uppercase; letter-spacing: 1px; }
.dot { width: 10px; height: 10px; border-radius: 50%; flex: none; }
.dot--on { background: var(--green); box-shadow: var(--glow-green); animation: pulse-glow 1.5s infinite; }
/* ================= PANEL BAŞLIKLARI ================= */
.panel { padding: 16px 18px; }
.panel-title { font-size: 13px; letter-spacing: 2px; color: var(--text); font-weight: 700; display: flex; align-items: center; gap: 9px; margin-bottom: 12px; text-transform: uppercase; }
.accent { width: 10px; height: 10px; border-radius: 2px; flex: none; display: inline-block; }
.accent--cyan { background: var(--cyan); box-shadow: var(--glow-cyan); }
.accent--green { background: var(--green); box-shadow: var(--glow-green); }
.accent--amber { background: var(--amber); box-shadow: var(--glow-amber); }
.accent--red { background: var(--red); box-shadow: var(--glow-red); }
/* ================= GAUGE PANELS ================= */
.row { display: grid; gap: 18px; margin-bottom: 18px; }
.row--gauges { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
.row--primary { grid-template-columns: 2fr 1fr; }
.gauge-panel { display: flex; flex-direction: column; align-items: center; }
.gauge-panel canvas { margin: 4px auto; filter: drop-shadow(0 0 6px rgba(0,0,0,.4)); }
.gauge-label { text-align: center; margin-top: 8px; }
.gauge-label b { font-size: 26px; color: var(--cyan); }
.gauge-label span { display: block; font-size: 10px; color: var(--text-dim); margin-top: 3px; letter-spacing: 1px; }
.gauge-label .net-sub { font-size: 11px; color: var(--amber); }
.gauge-label .net-sub b { font-size: 12px; }
/* ================= CHART ================= */
.chart-panel .panel-head, .table-panel .panel-head, .log-panel .panel-head { display: flex; justify-content: space-between; align-items: center; }
.legend { font-size: 10px; color: var(--text-dim); display: flex; gap: 10px; align-items: center; }
.lg { width: 18px; height: 4px; display: inline-block; border-radius: 2px; }
.lg--cyan { background: var(--cyan); box-shadow: var(--glow-cyan); }
.lg--amber { background: var(--amber); box-shadow: var(--glow-amber); }
#cpuChart { width: 100%; display: block; border-radius: 6px; }
.chart-axis { display: flex; justify-content: space-between; font-size: 9px; color: var(--text-dim); padding: 4px 4px 0; }
/* ================= DISK GAUGE ================= */
.disk-panel { text-align: center; }
.disk-gauge-wrap { position: relative; width: 200px; height: 200px; margin: 0 auto; }
.disk-score { position: absolute; z-index: 3; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; font-size: 42px; color: var(--amber); text-shadow: var(--glow-amber); }
.disk-unit { font-size: 10px; color: var(--text-dim); position: absolute; bottom: 52px; letter-spacing: 1px; }
#diskGauge { display: block; }
.disk-caption { font-size: 10px; color: var(--text-dim); margin-top: 8px; }
.disk-caption b { color: var(--amber); }
/* ================= PROSES TABLOSU ================= */
.table-panel { margin-bottom: 18px; }
.table-scroll { overflow-x: auto; max-height: 320px; overflow-y: auto; }
table { width: 100%; border-collapse: collapse; font-size: 13px; }
thead th {
text-align: left; padding: 9px 12px; font-size: 10px; letter-spacing: 2px;
color: var(--text-dim); text-transform: uppercase;
border-bottom: 1px solid rgba(0, 229, 255, 0.2);
position: sticky; top: 0; background: #0a1120; z-index: 1;
}
.th-action { text-align: right; }
tbody tr {
border-bottom: 1px solid rgba(120, 190, 255, 0.08);
transition: background 0.2s;
animation: row-in 0.3s ease;
}
tbody tr:hover { background: rgba(0, 229, 255, 0.05); }
tbody td { padding: 9px 12px; vertical-align: middle; }
tbody td.pid { color: var(--cyan); font-weight: 700; }
tbody td.svc { color: var(--text); text-transform: lowercase; }
tbody td svc b { letter-spacing: 1px; }
.cpu-cell { color: var(--green); }
.mem-cell { color: var(--amber); }
.cpu-cell.hot { color: var(--red); }
.status-pill {
display: inline-block; padding: 2px 9px; border-radius: 20px; font-size: 10px;
letter-spacing: 1px; background: rgba(57,255,136,0.12); color: var(--green);
border: 1px solid rgba(57,255,136,0.4);
}
.status-pill.down { background: rgba(255,53,80,0.1); color: var(--red); border-color: rgba(255,53,80,0.4); }
/* KILL butonu */
.kill {
padding: 4px 12px; border-radius: 6px; cursor: pointer;
font-family: var(--mono); font-size: 11px; letter-spacing: 1px;
color: var(--red); background: rgba(255, 53, 80, 0.1);
border: 1px solid rgba(255, 53, 80, 0.6);
transition: all 0.15s; text-transform: uppercase;
}
.kill:hover { background: var(--red); color: #fff; box-shadow: var(--glow-red); }
.kill:disabled { opacity: 0.5; cursor: not-allowed; }
.badge { font-size: 10px; padding: 3px 10px; border-radius: 20px; letter-spacing: 1px; color: var(--green); border: 1px solid rgba(57,255,136,0.4); }
.live-badge { color: var(--amber); border-color: rgba(255,176,32,0.5); }
.dot-pulse { width: 6px; height: 6px; background: var(--amber); border-radius: 50%; display: inline-block; margin-right: 5px; animation: pulse-glow 0.9s infinite; }
.empty { text-align: center; padding: 24px; color: var(--text-dim); font-size: 13px; }
.hidden { display: none; }
/* ================= KONSOL ================= */
.log-panel { margin-bottom: 24px; }
.console {
font-size: 12px; line-height: 1.7; height: 250px; overflow-y: auto;
background: rgba(0, 5, 12, 0.7); border-radius: 8px; padding: 10px 14px;
border: 1px solid rgba(120, 190, 255, 0.12);
}
.console .line { display: flex; gap: 10px; animation: line-in 0.25s ease; white-space: nowrap; }
.console .line .t { color: #556b84; flex: none; }
.console .line .tag { flex: none; min-width: 76px; font-weight: 700; letter-spacing: 1px; }
.line.type-ok .tag { color: var(--green); }
.line.type-warn .tag { color: var(--amber); }
.line.type-crit .tag { color: var(--red); }
.line.type-info .tag { color: var(--cyan); }
.line.type-ok .msg { color: #b8f0ce; }
.line.type-warn .msg { color: var(--amber); }
.line.type-crit .msg { color: #ffb3bd; }
.line.type-info .msg { color: #bfe9ff; }
/* ================= ANİMASYONLAR ================= */
@keyframes pulse-glow {
0%, 100% { opacity: 1; }
50% { opacity: 0.55; }
}
@keyframes row-in { from { opacity: 0; transform: translateY(-3px); } to { opacity: 1; transform: none; } }
@keyframes line-in { from { opacity: 0; transform: translateX(-6px); } to { opacity: 1; transform: none; } }
/* Scrollbar */
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-track { background: rgba(5,10,20,.6); }
::-webkit-scrollbar-thumb { background: rgba(0,229,255,.35); border-radius: 4px; }
::-webkit-scrollbar-thumb:hover { background: rgba(0,229,255,.6); }
/* Responsive */
@media (max-width: 860px) {
.row--primary { grid-template-columns: 1fr; }
.brand h1 { font-size: 17px; }
body { padding: 12px; }
}