mission-control/public/style.css

233 lines
10 KiB
CSS
Raw Permalink Normal View History

2026-09-09 22:40:26 +00:00
/* =====================================================================
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; }
}