* { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f5f7fa; color: #333; line-height: 1.6; } .container { max-width: 1200px; margin: 0 auto; padding: 20px; } .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px 0; border-radius: 10px; margin-bottom: 30px; text-align: center; } .header h1 { font-size: 2.5rem; margin-bottom: 10px; } .header p { font-size: 1.1rem; opacity: 0.9; } .controls { background: white; padding: 25px; border-radius: 10px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); margin-bottom: 30px; } .filter-section { display: grid; grid-template-columns: 1fr 1fr 1fr auto; gap: 15px; align-items: end; } .filter-group { display: flex; flex-direction: column; } .filter-group label { font-weight: 600; margin-bottom: 5px; color: #555; } .filter-group input, .filter-group select { padding: 10px; border: 2px solid #e1e5e9; border-radius: 6px; font-size: 14px; transition: border-color 0.3s; } .filter-group input:focus, .filter-group select:focus { outline: none; border-color: #667eea; } .btn { padding: 10px 20px; border: none; border-radius: 6px; cursor: pointer; font-size: 14px; font-weight: 600; transition: all 0.3s; } .btn-primary { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; } .btn-primary:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(102, 126, 234, 0.3); } .btn-secondary { background: #6c757d; color: white; } .btn-secondary:hover { background: #5a6268; } .tag-cloud { background: white; padding: 20px; border-radius: 10px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); margin-bottom: 30px; } .tag-cloud h3 { margin-bottom: 15px; color: #333; } .tag-cloud-item { display: inline-block; background: #e9ecef; padding: 5px 12px; margin: 5px; border-radius: 20px; font-size: 12px; cursor: pointer; transition: all 0.3s; } .tag-cloud-item:hover { background: #667eea; color: white; transform: scale(1.05); } .signals-table { background: white; border-radius: 10px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); overflow: hidden; } .table-header { background: #f8f9fa; padding: 20px; border-bottom: 1px solid #e1e5e9; display: flex; justify-content: space-between; align-items: center; } .table-header h3 { color: #333; } table { width: 100%; border-collapse: collapse; table-layout: fixed; } th, td { padding: 12px 8px; text-align: left; border-bottom: 1px solid #e1e5e9; word-wrap: break-word; overflow-wrap: break-word; vertical-align: top; } /* Set specific column widths to prevent overflow */ th:nth-child(1), td:nth-child(1) { /* Signal Name */ width: 20%; min-width: 120px; } th:nth-child(2), td:nth-child(2) { /* Protocol Type */ width: 12%; min-width: 100px; } th:nth-child(3), td:nth-child(3) { /* Tags */ width: 20%; min-width: 150px; } th:nth-child(4), td:nth-child(4) { /* Protocol Address */ width: 15%; min-width: 100px; } th:nth-child(5), td:nth-child(5) { /* Database Source */ width: 18%; min-width: 120px; } th:nth-child(6), td:nth-child(6) { /* Status */ width: 8%; min-width: 80px; } th:nth-child(7), td:nth-child(7) { /* Actions */ width: 7%; min-width: 100px; } th { background: #f8f9fa; font-weight: 600; color: #555; white-space: nowrap; } tr:hover { background: #f8f9fa; } .tag-badge { display: inline-block; background: #667eea; color: white; padding: 3px 8px; margin: 2px; border-radius: 12px; font-size: 11px; } .status-badge { padding: 5px 10px; border-radius: 15px; font-size: 12px; font-weight: 600; } .status-badge.enabled { background: #d4edda; color: #155724; } .status-badge.disabled { background: #f8d7da; color: #721c24; } .btn-edit, .btn-delete { padding: 6px 12px; margin: 0 2px; border: none; border-radius: 4px; cursor: pointer; font-size: 12px; } .btn-edit { background: #28a745; color: white; } .btn-delete { background: #dc3545; color: white; } .btn-edit:hover { background: #218838; } .btn-delete:hover { background: #c82333; } .modal { display: none; position: fixed; z-index: 1000; left: 0; top: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); } .modal-content { background-color: white; margin: 5% auto; padding: 30px; border-radius: 10px; width: 90%; max-width: 600px; box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2); } .modal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; padding-bottom: 15px; border-bottom: 1px solid #e1e5e9; } .modal-header h2 { color: #333; } .close { color: #aaa; font-size: 28px; font-weight: bold; cursor: pointer; } .close:hover { color: #333; } .form-group { margin-bottom: 20px; } .form-group label { display: block; margin-bottom: 5px; font-weight: 600; color: #555; } .form-group input, .form-group select, .form-group textarea { width: 100%; padding: 10px; border: 2px solid #e1e5e9; border-radius: 6px; font-size: 14px; transition: border-color 0.3s; } .form-group input:focus, .form-group select:focus, .form-group textarea:focus { outline: none; border-color: #667eea; } .form-help { font-size: 12px; color: #6c757d; margin-top: 5px; } .form-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 25px; } .alert { padding: 15px; margin: 20px 0; border-radius: 6px; font-weight: 500; } .alert.success { background: #d4edda; color: #155724; border: 1px solid #c3e6cb; } .alert.error { background: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; } .empty-state { text-align: center; padding: 50px 20px; color: #6c757d; } .empty-state h3 { margin-bottom: 10px; } @media (max-width: 768px) { .filter-section { grid-template-columns: 1fr; } .table-header { flex-direction: column; gap: 15px; } .signals-table { overflow-x: auto; } table { font-size: 14px; min-width: 800px; } th, td { padding: 8px 6px; font-size: 13px; } /* Adjust column widths for mobile */ th:nth-child(1), td:nth-child(1) { /* Signal Name */ width: 22%; min-width: 100px; } th:nth-child(2), td:nth-child(2) { /* Protocol Type */ width: 14%; min-width: 80px; } th:nth-child(3), td:nth-child(3) { /* Tags */ width: 18%; min-width: 120px; } th:nth-child(4), td:nth-child(4) { /* Protocol Address */ width: 16%; min-width: 80px; } th:nth-child(5), td:nth-child(5) { /* Database Source */ width: 16%; min-width: 100px; } th:nth-child(6), td:nth-child(6) { /* Status */ width: 8%; min-width: 60px; } th:nth-child(7), td:nth-child(7) { /* Actions */ width: 6%; min-width: 80px; } }