/* Network Modes Dashboard - Multi-Mode Configuration Theme */ /* Copyright (C) 2024 CyberMind.fr - Gandalf */ :root { --nm-bg-primary: #0c0a09; --nm-bg-secondary: #1c1917; --nm-bg-tertiary: #292524; --nm-border: #44403c; --nm-border-light: #57534e; --nm-text-primary: #fafaf9; --nm-text-secondary: #a8a29e; --nm-text-muted: #78716c; --nm-accent-orange: #f97316; --nm-accent-amber: #f59e0b; --nm-accent-yellow: #eab308; --nm-accent-green: #22c55e; --nm-accent-blue: #3b82f6; --nm-accent-purple: #a855f7; --nm-accent-red: #ef4444; --nm-mode-gradient: linear-gradient(135deg, #f97316, #f59e0b, #eab308); --nm-sniffer-color: #8b5cf6; --nm-ap-color: #06b6d4; --nm-relay-color: #10b981; --nm-router-color: #f97316; --nm-font-mono: 'JetBrains Mono', 'Fira Code', 'SF Mono', Consolas, monospace; --nm-font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; --nm-radius: 8px; --nm-radius-lg: 12px; --nm-shadow: 0 8px 32px rgba(0, 0, 0, 0.6); --nm-shadow-glow: 0 0 30px rgba(249, 115, 22, 0.3); } /* Base */ .network-modes-dashboard { font-family: var(--nm-font-sans); background: var(--nm-bg-primary); color: var(--nm-text-primary); min-height: 100vh; padding: 16px; } .network-modes-dashboard * { box-sizing: border-box; } /* Header */ .nm-header { display: flex; align-items: center; justify-content: space-between; padding: 12px 0 20px; border-bottom: 1px solid var(--nm-border); margin-bottom: 20px; } .nm-logo { display: flex; align-items: center; gap: 14px; } .nm-logo-icon { width: 48px; height: 48px; background: var(--nm-mode-gradient); border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 24px; box-shadow: var(--nm-shadow-glow); position: relative; } .nm-logo-icon::after { content: ''; position: absolute; inset: -2px; background: var(--nm-mode-gradient); border-radius: 14px; z-index: -1; opacity: 0.4; filter: blur(10px); } .nm-logo-text { font-size: 24px; font-weight: 700; letter-spacing: -0.5px; } .nm-logo-text span { background: var(--nm-mode-gradient); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } /* Mode Badge */ .nm-mode-badge { display: flex; align-items: center; gap: 10px; padding: 10px 18px; border-radius: 24px; font-size: 14px; font-weight: 600; border: 1px solid; } .nm-mode-badge.sniffer { background: rgba(139, 92, 246, 0.15); color: var(--nm-sniffer-color); border-color: rgba(139, 92, 246, 0.3); } .nm-mode-badge.accesspoint { background: rgba(6, 182, 212, 0.15); color: var(--nm-ap-color); border-color: rgba(6, 182, 212, 0.3); } .nm-mode-badge.relay { background: rgba(16, 185, 129, 0.15); color: var(--nm-relay-color); border-color: rgba(16, 185, 129, 0.3); } .nm-mode-badge.router { background: rgba(249, 115, 22, 0.15); color: var(--nm-router-color); border-color: rgba(249, 115, 22, 0.3); } .nm-mode-dot { width: 10px; height: 10px; background: currentColor; border-radius: 50%; animation: pulse-nm 1.5s ease-in-out infinite; box-shadow: 0 0 10px currentColor; } @keyframes pulse-nm { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.6; transform: scale(0.85); } } /* Mode Selection Grid */ .nm-modes-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px; margin-bottom: 24px; } .nm-mode-card { background: var(--nm-bg-secondary); border: 2px solid var(--nm-border); border-radius: var(--nm-radius-lg); padding: 24px; cursor: pointer; transition: all 0.3s; position: relative; overflow: hidden; } .nm-mode-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px; opacity: 0; transition: opacity 0.3s; } .nm-mode-card:hover { transform: translateY(-4px); box-shadow: var(--nm-shadow); } .nm-mode-card.active { border-color: var(--mode-color); } .nm-mode-card.active::before { opacity: 1; background: var(--mode-color); } .nm-mode-card.sniffer { --mode-color: var(--nm-sniffer-color); } .nm-mode-card.accesspoint { --mode-color: var(--nm-ap-color); } .nm-mode-card.relay { --mode-color: var(--nm-relay-color); } .nm-mode-card.router { --mode-color: var(--nm-router-color); } .nm-mode-card:hover { border-color: var(--mode-color); } .nm-mode-header { display: flex; align-items: center; gap: 16px; margin-bottom: 16px; } .nm-mode-icon { width: 56px; height: 56px; border-radius: 14px; display: flex; align-items: center; justify-content: center; font-size: 28px; background: rgba(255, 255, 255, 0.05); border: 1px solid var(--nm-border); } .nm-mode-card.active .nm-mode-icon { background: var(--mode-color); border-color: var(--mode-color); } .nm-mode-title h3 { font-size: 18px; font-weight: 700; margin: 0 0 4px 0; } .nm-mode-title p { font-size: 12px; color: var(--nm-text-muted); margin: 0; } .nm-mode-description { font-size: 14px; color: var(--nm-text-secondary); line-height: 1.5; margin-bottom: 16px; } .nm-mode-features { display: flex; flex-wrap: wrap; gap: 8px; } .nm-mode-feature { display: inline-flex; align-items: center; gap: 4px; padding: 4px 10px; background: var(--nm-bg-tertiary); border-radius: 12px; font-size: 11px; color: var(--nm-text-secondary); } .nm-mode-feature-icon { font-size: 12px; } .nm-mode-active-indicator { position: absolute; top: 16px; right: 16px; padding: 4px 10px; background: var(--mode-color); color: white; border-radius: 12px; font-size: 10px; font-weight: 700; text-transform: uppercase; } /* Card */ .nm-card { background: var(--nm-bg-secondary); border: 1px solid var(--nm-border); border-radius: var(--nm-radius-lg); overflow: hidden; margin-bottom: 20px; } .nm-card-header { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px; border-bottom: 1px solid var(--nm-border); background: rgba(0, 0, 0, 0.3); } .nm-card-title { display: flex; align-items: center; gap: 12px; font-size: 15px; font-weight: 600; } .nm-card-title-icon { font-size: 20px; } .nm-card-badge { font-family: var(--nm-font-mono); font-size: 12px; font-weight: 600; padding: 5px 12px; border-radius: 16px; background: var(--nm-mode-gradient); color: white; } .nm-card-body { padding: 20px; } /* Form Controls */ .nm-form-group { margin-bottom: 20px; } .nm-form-label { display: block; font-size: 13px; font-weight: 600; margin-bottom: 8px; color: var(--nm-text-secondary); } .nm-form-hint { font-size: 11px; color: var(--nm-text-muted); margin-top: 6px; } .nm-input, .nm-select { width: 100%; padding: 12px 16px; background: var(--nm-bg-primary); border: 1px solid var(--nm-border); border-radius: var(--nm-radius); color: var(--nm-text-primary); font-size: 14px; font-family: var(--nm-font-mono); transition: border-color 0.2s; } .nm-input:focus, .nm-select:focus { outline: none; border-color: var(--nm-accent-orange); } .nm-checkbox-group { display: flex; flex-wrap: wrap; gap: 16px; } .nm-checkbox { display: flex; align-items: center; gap: 10px; cursor: pointer; } .nm-checkbox input { width: 18px; height: 18px; accent-color: var(--nm-accent-orange); } .nm-checkbox-label { font-size: 13px; } /* Toggle Switch */ .nm-toggle { display: flex; align-items: center; justify-content: space-between; padding: 14px 16px; background: var(--nm-bg-tertiary); border-radius: var(--nm-radius); margin-bottom: 10px; } .nm-toggle-info { display: flex; align-items: center; gap: 12px; } .nm-toggle-icon { font-size: 20px; } .nm-toggle-label { font-size: 14px; font-weight: 500; } .nm-toggle-desc { font-size: 11px; color: var(--nm-text-muted); } .nm-toggle-switch { width: 48px; height: 26px; background: var(--nm-bg-primary); border-radius: 13px; position: relative; cursor: pointer; transition: background 0.3s; } .nm-toggle-switch.active { background: var(--nm-accent-orange); } .nm-toggle-switch::after { content: ''; position: absolute; width: 20px; height: 20px; background: white; border-radius: 50%; top: 3px; left: 3px; transition: transform 0.3s; } .nm-toggle-switch.active::after { transform: translateX(22px); } /* Interface Status */ .nm-interfaces-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; } .nm-interface-card { background: var(--nm-bg-tertiary); border: 1px solid var(--nm-border); border-radius: var(--nm-radius); padding: 16px; display: flex; align-items: center; gap: 12px; } .nm-interface-icon { width: 40px; height: 40px; background: var(--nm-bg-secondary); border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 18px; } .nm-interface-info { flex: 1; } .nm-interface-name { font-size: 14px; font-weight: 600; font-family: var(--nm-font-mono); } .nm-interface-ip { font-size: 11px; color: var(--nm-text-muted); font-family: var(--nm-font-mono); } .nm-interface-status { width: 10px; height: 10px; border-radius: 50%; } .nm-interface-status.up { background: var(--nm-accent-green); box-shadow: 0 0 8px var(--nm-accent-green); } .nm-interface-status.down { background: var(--nm-accent-red); } /* Config Preview */ .nm-config-preview { background: var(--nm-bg-primary); border: 1px solid var(--nm-border); border-radius: var(--nm-radius); padding: 16px; font-family: var(--nm-font-mono); font-size: 12px; line-height: 1.7; overflow-x: auto; max-height: 400px; overflow-y: auto; } .nm-config-comment { color: var(--nm-text-muted); } .nm-config-section { color: var(--nm-accent-orange); font-weight: 600; } .nm-config-option { color: var(--nm-accent-amber); } .nm-config-value { color: var(--nm-text-secondary); } /* Buttons */ .nm-btn { display: inline-flex; align-items: center; gap: 8px; padding: 12px 20px; border: 1px solid var(--nm-border); border-radius: var(--nm-radius); background: var(--nm-bg-tertiary); color: var(--nm-text-primary); font-size: 14px; font-weight: 500; cursor: pointer; transition: all 0.2s; } .nm-btn:hover { border-color: var(--nm-accent-orange); } .nm-btn-primary { background: var(--nm-mode-gradient); border: none; color: white; } .nm-btn-primary:hover { box-shadow: var(--nm-shadow-glow); transform: translateY(-2px); } .nm-btn-danger { background: var(--nm-accent-red); border: none; color: white; } .nm-btn-group { display: flex; gap: 12px; flex-wrap: wrap; } /* Virtual Host Table */ .nm-vhost-table { width: 100%; border-collapse: collapse; } .nm-vhost-table th { text-align: left; padding: 12px 16px; background: var(--nm-bg-tertiary); font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; color: var(--nm-text-muted); border-bottom: 1px solid var(--nm-border); } .nm-vhost-table td { padding: 14px 16px; border-bottom: 1px solid var(--nm-border); font-size: 13px; } .nm-vhost-table tr:last-child td { border-bottom: none; } .nm-vhost-table .domain { font-weight: 600; color: var(--nm-accent-orange); } .nm-vhost-table .mono { font-family: var(--nm-font-mono); font-size: 12px; } .nm-ssl-badge { display: inline-flex; align-items: center; gap: 4px; padding: 3px 8px; border-radius: 10px; font-size: 10px; font-weight: 600; } .nm-ssl-badge.enabled { background: rgba(34, 197, 94, 0.15); color: var(--nm-accent-green); } .nm-ssl-badge.disabled { background: rgba(239, 68, 68, 0.15); color: var(--nm-accent-red); } /* WiFi Settings */ .nm-wifi-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 16px; } .nm-wifi-setting { background: var(--nm-bg-tertiary); border-radius: var(--nm-radius); padding: 16px; } .nm-wifi-setting-label { font-size: 11px; text-transform: uppercase; color: var(--nm-text-muted); margin-bottom: 8px; } .nm-wifi-setting-value { font-family: var(--nm-font-mono); font-size: 20px; font-weight: 700; color: var(--nm-accent-orange); } /* Slider */ .nm-slider-container { padding: 16px; background: var(--nm-bg-tertiary); border-radius: var(--nm-radius); } .nm-slider-header { display: flex; justify-content: space-between; margin-bottom: 12px; } .nm-slider-label { font-size: 13px; font-weight: 500; } .nm-slider-value { font-family: var(--nm-font-mono); font-size: 14px; font-weight: 700; color: var(--nm-accent-orange); } .nm-slider { width: 100%; height: 8px; -webkit-appearance: none; background: var(--nm-bg-primary); border-radius: 4px; outline: none; } .nm-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 20px; height: 20px; background: var(--nm-accent-orange); border-radius: 50%; cursor: pointer; box-shadow: 0 0 10px rgba(249, 115, 22, 0.5); } /* Alert */ .nm-alert { display: flex; gap: 12px; padding: 16px; border-radius: var(--nm-radius); margin-bottom: 20px; } .nm-alert-icon { font-size: 24px; } .nm-alert-info { background: rgba(59, 130, 246, 0.1); border: 1px solid rgba(59, 130, 246, 0.3); } .nm-alert-warning { background: rgba(245, 158, 11, 0.1); border: 1px solid rgba(245, 158, 11, 0.3); } .nm-alert-success { background: rgba(34, 197, 94, 0.1); border: 1px solid rgba(34, 197, 94, 0.3); } .nm-alert-title { font-weight: 600; margin-bottom: 4px; } .nm-alert-text { font-size: 13px; color: var(--nm-text-secondary); } /* Responsive */ @media (max-width: 768px) { .nm-header { flex-direction: column; gap: 16px; align-items: flex-start; } .nm-modes-grid { grid-template-columns: 1fr; } .nm-btn-group { flex-direction: column; } .nm-btn { width: 100%; justify-content: center; } } /* Scrollbar */ .network-modes-dashboard ::-webkit-scrollbar { width: 8px; height: 8px; } .network-modes-dashboard ::-webkit-scrollbar-track { background: var(--nm-bg-tertiary); } .network-modes-dashboard ::-webkit-scrollbar-thumb { background: var(--nm-border); border-radius: 4px; } .network-modes-dashboard ::-webkit-scrollbar-thumb:hover { background: var(--nm-text-muted); } /* Animations */ @keyframes mode-glow { 0%, 100% { box-shadow: 0 0 20px rgba(249, 115, 22, 0.3); } 50% { box-shadow: 0 0 40px rgba(249, 115, 22, 0.5); } } .nm-mode-card.active { animation: mode-glow 3s ease-in-out infinite; }