/* ========================= LAN Security Monitor Theme Dark Navy + Light Blue ========================= */ :root{ --bg0: #070b16; --bg1: #0a1020; --bg2: #0e1730; --panel: rgba(15,23,42,0.62); --panel2: rgba(2,6,23,0.35); --border: rgba(96,165,250,0.18); --border2: rgba(147,197,253,0.28); --text: rgba(255,255,255,0.92); --muted: rgba(191,219,254,0.82); --dim: rgba(148,163,184,0.85); --accent: rgba(96,165,250,0.95); /* light blue */ --accent2: rgba(34,211,238,0.80); /* cyan */ --danger: rgba(239,68,68,0.95); --warn: rgba(245,158,11,0.95); --ok: rgba(34,197,94,0.95); --shadow: 0 18px 45px rgba(0,0,0,0.32); --shadow2: 0 10px 25px rgba(0,0,0,0.22); --r12: 12px; --r16: 16px; --r18: 18px; } *{ box-sizing: border-box; } html, body { height: 100%; } body{ margin:0; color: var(--text); background: radial-gradient(900px 460px at 20% -10%, rgba(96,165,250,0.18), transparent 60%), radial-gradient(800px 420px at 80% 0%, rgba(34,211,238,0.10), transparent 55%), radial-gradient(1000px 700px at 50% 120%, rgba(30,64,175,0.16), transparent 60%), linear-gradient(180deg, var(--bg0), var(--bg1) 45%, #060913 100%); font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Arial, "Noto Sans", "Apple Color Emoji", "Segoe UI Emoji"; } /* Layout */ .app-wrap{ max-width: 1200px; margin: 0 auto; padding: 16px 18px 40px; } /* ========================= Panels ========================= */ .panel{ background: var(--panel); border: 1px solid var(--border); border-radius: var(--r18); box-shadow: var(--shadow2); overflow: hidden; backdrop-filter: blur(10px); } .panel-head{ display:flex; align-items:center; justify-content: space-between; gap: 12px; padding: 14px 16px; border-bottom: 1px solid rgba(96,165,250,0.14); background: linear-gradient(180deg, rgba(2,6,23,0.32), rgba(2,6,23,0.12)); } .panel-title{ font-weight: 900; letter-spacing: 0.3px; color: rgba(255,255,255,0.95); } .panel-body{ padding: 16px; } /* small helpers */ .pill{ display:inline-flex; align-items:center; gap: 10px; padding: 8px 12px; border-radius: 999px; background: rgba(30,41,59,0.60); border: 1px solid rgba(96,165,250,0.22); color: rgba(255,255,255,0.92); font-weight: 800; font-size: 12px; box-shadow: inset 0 1px 0 rgba(255,255,255,0.06); } .small{ font-size: 12px; color: var(--dim); line-height: 1.35; } .dim{ color: var(--dim); font-weight: 700; } /* ========================= Inputs / Selects / Buttons ========================= */ .input, .select{ width: 100%; padding: 10px 12px; border-radius: var(--r12); border: 1px solid rgba(96,165,250,0.18); background: rgba(2,6,23,0.35); color: rgba(255,255,255,0.92); outline: none; font-weight: 700; transition: border-color .12s ease, background .12s ease, transform .12s ease; } .input::placeholder{ color: rgba(148,163,184,0.75); } .input:focus, .select:focus{ border-color: rgba(96,165,250,0.42); background: rgba(2,6,23,0.46); } .btn{ appearance: none; border: 1px solid rgba(96,165,250,0.22); background: rgba(15,23,42,0.55); color: rgba(255,255,255,0.92); padding: 9px 12px; border-radius: var(--r12); font-weight: 900; font-size: 13px; cursor: pointer; transition: transform .12s ease, background .12s ease, border-color .12s ease, opacity .12s ease; box-shadow: 0 8px 20px rgba(0,0,0,0.18); } .btn:hover{ transform: translateY(-1px); background: rgba(30,41,59,0.65); border-color: rgba(96,165,250,0.38); } .btn:disabled{ opacity: .6; cursor: not-allowed; transform: none; } .btn.primary{ background: linear-gradient(135deg, rgba(37,99,235,0.95), rgba(56,189,248,0.70)); border-color: rgba(147,197,253,0.35); color: rgba(5,12,24,0.95); } .btn.primary:hover{ background: linear-gradient(135deg, rgba(59,130,246,0.95), rgba(34,211,238,0.75)); } /* Filters row */ .filters{ display:grid; grid-template-columns: 1.6fr 0.6fr auto; gap: 10px; } @media (max-width: 820px){ .filters{ grid-template-columns: 1fr; } } /* ========================= Stats grid ========================= */ .stats-grid{ display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin: 14px 0; } @media (max-width: 900px){ .stats-grid{ grid-template-columns: 1fr; } } .stat-card{ background: radial-gradient(500px 180px at 20% 0%, rgba(96,165,250,0.16), transparent 55%), rgba(15,23,42,0.58); border: 1px solid rgba(96,165,250,0.18); border-radius: var(--r18); padding: 14px 16px; box-shadow: var(--shadow2); backdrop-filter: blur(10px); } .stat-card .label{ color: var(--dim); font-size: 12px; font-weight: 900; letter-spacing: .8px; text-transform: uppercase; } .stat-card .value{ font-size: 28px; font-weight: 1000; margin: 8px 0 2px; color: rgba(255,255,255,0.95); } .stat-card .sub{ color: var(--muted); font-size: 12px; } /* ========================= Computers grid + Card ========================= */ .computers-grid{ display:grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; } @media (max-width: 980px){ .computers-grid{ grid-template-columns: 1fr; } } .card{ width:100%; text-align:left; border-radius: var(--r18); border: 1px solid rgba(96,165,250,0.18); background: radial-gradient(520px 220px at 20% 0%, rgba(96,165,250,0.14), transparent 55%), rgba(15,23,42,0.54); box-shadow: var(--shadow2); padding: 14px; cursor: pointer; transition: transform .14s ease, border-color .14s ease, background .14s ease; backdrop-filter: blur(10px); } .card:hover{ transform: translateY(-3px); border-color: rgba(96,165,250,0.38); background: radial-gradient(520px 220px at 20% 0%, rgba(34,211,238,0.12), transparent 55%), rgba(15,23,42,0.62); } .card:active{ transform: translateY(-1px); } .card-head{ display:flex; justify-content: space-between; align-items:center; gap: 10px; margin-bottom: 10px; } .card-title{ font-weight: 1000; color: rgba(255,255,255,0.95); letter-spacing: .2px; } .dot{ width: 10px; height: 10px; border-radius: 999px; box-shadow: 0 0 0 4px rgba(255,255,255,0.04); } .dot.online{ background: var(--ok); box-shadow: 0 0 0 4px rgba(34,197,94,0.12); } .dot.idle{ background: var(--warn); box-shadow: 0 0 0 4px rgba(245,158,11,0.12); } .dot.offline{ background: rgba(148,163,184,0.8); box-shadow: 0 0 0 4px rgba(148,163,184,0.10); } .meta{ display:grid; gap: 6px; color: rgba(226,232,240,0.92); font-size: 13px; line-height: 1.25; } .kpis{ display:grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin-top: 12px; padding-top: 12px; border-top: 1px solid rgba(96,165,250,0.14); } .kpi{ border-radius: var(--r16); border: 1px solid rgba(96,165,250,0.14); background: rgba(2,6,23,0.30); padding: 10px 10px; } .kpi .k{ font-size: 11px; color: var(--dim); font-weight: 900; letter-spacing: .6px; text-transform: uppercase; } .kpi .v{ margin-top: 6px; font-size: 18px; font-weight: 1000; color: rgba(255,255,255,0.95); } /* ========================= Modal (shared classes) ========================= */ .backdrop{ position: fixed; inset: 0; background: rgba(2,6,23,0.72); backdrop-filter: blur(6px); display:flex; align-items:center; justify-content:center; padding: 20px; z-index: 60; } .modal{ width: min(920px, 96vw); border-radius: var(--r18); background: radial-gradient(900px 420px at 20% 0%, rgba(96,165,250,0.18), transparent 60%), radial-gradient(700px 350px at 80% 10%, rgba(34,211,238,0.10), transparent 55%), rgba(10,16,32,0.92); border: 1px solid rgba(96,165,250,0.22); box-shadow: 0 30px 80px rgba(0,0,0,0.45); overflow: hidden; } .modal-head{ padding: 14px 16px; display:flex; align-items:center; justify-content: space-between; gap: 10px; border-bottom: 1px solid rgba(96,165,250,0.18); } .modal-title{ font-weight: 1000; color: rgba(255,255,255,0.95); letter-spacing: .2px; } .modal-sub{ margin-top: 2px; font-size: 12px; color: var(--muted); } /* If you have drawer classes */ .ai-drawer{ position: fixed; top: 0; right: 0; height: 100vh; width: min(420px, 92vw); background: radial-gradient(700px 400px at 20% 0%, rgba(96,165,250,0.18), transparent 55%), rgba(10,16,32,0.94); border-left: 1px solid rgba(96,165,250,0.20); box-shadow: -20px 0 60px rgba(0,0,0,0.35); z-index: 70; padding: 14px; } .ai-header{ font-weight: 1000; color: rgba(255,255,255,0.95); margin-bottom: 10px; } .ai-messages{ height: calc(100vh - 160px); overflow: auto; border-radius: var(--r16); border: 1px solid rgba(96,165,250,0.14); background: rgba(2,6,23,0.28); padding: 10px; } .ai-msg{ color: rgba(226,232,240,0.92); font-size: 13px; line-height: 1.35; padding: 10px; border-radius: 12px; border: 1px solid rgba(96,165,250,0.12); background: rgba(15,23,42,0.45); margin-bottom: 10px; } .ai-input{ width: 100%; margin-top: 10px; padding: 10px 12px; border-radius: var(--r12); border: 1px solid rgba(96,165,250,0.18); background: rgba(2,6,23,0.35); color: rgba(255,255,255,0.92); outline: none; font-weight: 700; } .ai-input::placeholder{ color: rgba(148,163,184,0.75); } /* Scrollbars (nice) */ *::-webkit-scrollbar{ width: 10px; height: 10px; } *::-webkit-scrollbar-thumb{ background: rgba(96,165,250,0.20); border: 2px solid rgba(2,6,23,0.35); border-radius: 999px; } *::-webkit-scrollbar-track{ background: rgba(2,6,23,0.25); } .aiDrawer-backdrop{ position: fixed; inset: 0; background: rgba(0,0,0,.55); backdrop-filter: blur(2px); z-index: 999; } /* десен drawer */ .aiDrawer{ position: fixed; top: 0; right: 0; height: 100vh; width: min(520px, 92vw); background: #0b1220; /* темна */ color: #e7eefc; border-left: 1px solid rgba(255,255,255,.08); z-index: 1000; display: grid; grid-template-rows: auto auto 1fr auto; /* slide in */ transform: translateX(0); animation: aiSlideIn .18s ease-out; } @keyframes aiSlideIn{ from { transform: translateX(24px); opacity: .7; } to { transform: translateX(0); opacity: 1; } } .aiDrawer-head{ padding: 14px 16px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(255,255,255,.08); } .aiDrawer-title{ font-size: 16px; font-weight: 700; } .aiDrawer-sub{ font-size: 12px; opacity: .75; margin-top: 2px; } .aiDrawer-toolbar{ padding: 12px 16px; border-bottom: 1px solid rgba(255,255,255,.08); display: grid; gap: 8px; } .aiSelect{ width: 100%; background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.10); color: #e7eefc; padding: 10px 12px; border-radius: 10px; outline: none; } .aiHint{ font-size: 12px; opacity: .75; } .aiDrawer-body{ padding: 14px 16px; overflow: auto; display: grid; gap: 10px; } /* chat bubbles */ .aiMsg{ max-width: 92%; border: 1px solid rgba(255,255,255,.08); border-radius: 14px; padding: 10px 12px; background: rgba(255,255,255,.04); } .aiMsg.user{ margin-left: auto; background: rgba(88, 167, 255, .12); border-color: rgba(88, 167, 255, .20); } .aiMsg-meta{ font-size: 11px; opacity: .7; margin-bottom: 6px; } .aiMsg-text{ white-space: pre-wrap; line-height: 1.35; font-size: 14px; } .aiDrawer-foot{ padding: 12px 16px; border-top: 1px solid rgba(255,255,255,.08); display: grid; grid-template-columns: 1fr auto; gap: 10px; align-items: end; background: rgba(255,255,255,.02); } .aiTextarea{ width: 100%; resize: none; background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.10); color: #e7eefc; padding: 10px 12px; border-radius: 12px; outline: none; } .aiBtn{ background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.10); color: #e7eefc; padding: 10px 12px; border-radius: 12px; cursor: pointer; } .aiBtn:disabled{ opacity: .5; cursor: not-allowed; } .aiBtnPrimary{ background: rgba(88, 167, 255, .22); border-color: rgba(88, 167, 255, .35); }