- Add emancipate/revoke/get_emancipated RPCD methods - Add Mesh toggle column with blue theme styling - Add Emancipate button in header with multi-channel modal - Modal allows selecting Tor/DNS/Mesh channels - Add mesh badge to header stats - Update ACL and API wrapper for new methods Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
204 lines
3.6 KiB
CSS
204 lines
3.6 KiB
CSS
/* SecuBox Service Exposure - KISS theme */
|
|
|
|
:root {
|
|
--exp-bg-primary: #0d1117;
|
|
--exp-bg-secondary: #161b22;
|
|
--exp-bg-tertiary: #1a1a2e;
|
|
--exp-border: #30363d;
|
|
--exp-text-primary: #e6edf3;
|
|
--exp-text-secondary: #8892b0;
|
|
--exp-text-muted: #6e7681;
|
|
--exp-accent: #64ffda;
|
|
--exp-tor: #9b59b6;
|
|
--exp-ssl: #27ae60;
|
|
--exp-danger: #ef4444;
|
|
}
|
|
|
|
.exposure-dashboard {
|
|
padding: 0;
|
|
max-width: 1200px;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
/* Header */
|
|
.exp-page-header {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
margin-bottom: 20px;
|
|
padding-bottom: 12px;
|
|
border-bottom: 1px solid var(--exp-border);
|
|
}
|
|
|
|
/* Table */
|
|
.exp-table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
background: var(--exp-bg-secondary);
|
|
border: 1px solid var(--exp-border);
|
|
border-radius: 8px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.exp-table th,
|
|
.exp-table td {
|
|
padding: 10px 14px;
|
|
text-align: left;
|
|
border-bottom: 1px solid var(--exp-border);
|
|
}
|
|
|
|
.exp-table th {
|
|
color: var(--exp-text-muted);
|
|
font-weight: 500;
|
|
font-size: 12px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
background: rgba(255, 255, 255, 0.02);
|
|
}
|
|
|
|
.exp-table td {
|
|
color: var(--exp-text-primary);
|
|
font-size: 13px;
|
|
}
|
|
|
|
.exp-table tr:hover td {
|
|
background: rgba(100, 255, 218, 0.03);
|
|
}
|
|
|
|
.exp-row-internal td {
|
|
opacity: 0.45;
|
|
}
|
|
|
|
/* Helpers */
|
|
.exp-mono { font-family: 'SF Mono', Monaco, monospace; }
|
|
.exp-text-muted { color: var(--exp-text-muted); }
|
|
.exp-small { font-size: 12px; }
|
|
|
|
/* Badges */
|
|
.exp-badge {
|
|
display: inline-block;
|
|
padding: 3px 8px;
|
|
border-radius: 12px;
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
margin-right: 4px;
|
|
}
|
|
|
|
.exp-badge-tor {
|
|
background: rgba(155, 89, 182, 0.2);
|
|
color: var(--exp-tor);
|
|
}
|
|
|
|
.exp-badge-ssl {
|
|
background: rgba(39, 174, 96, 0.2);
|
|
color: var(--exp-ssl);
|
|
}
|
|
|
|
.exp-badge-mesh {
|
|
background: rgba(59, 130, 246, 0.2);
|
|
color: #3b82f6;
|
|
}
|
|
|
|
/* Buttons */
|
|
.exp-btn {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 6px 14px;
|
|
border-radius: 6px;
|
|
font-size: 13px;
|
|
cursor: pointer;
|
|
border: 1px solid transparent;
|
|
transition: all 0.15s;
|
|
text-decoration: none;
|
|
}
|
|
|
|
.exp-btn-secondary {
|
|
background: transparent;
|
|
color: var(--exp-text-secondary);
|
|
border-color: var(--exp-border);
|
|
}
|
|
|
|
.exp-btn-secondary:hover {
|
|
background: rgba(255, 255, 255, 0.05);
|
|
border-color: var(--exp-text-secondary);
|
|
}
|
|
|
|
/* Toggle switches */
|
|
.toggle-switch {
|
|
position: relative;
|
|
display: inline-block;
|
|
width: 44px;
|
|
height: 24px;
|
|
}
|
|
|
|
.toggle-switch input {
|
|
opacity: 0;
|
|
width: 0;
|
|
height: 0;
|
|
}
|
|
|
|
.toggle-slider {
|
|
position: absolute;
|
|
cursor: pointer;
|
|
top: 0; left: 0; right: 0; bottom: 0;
|
|
background-color: #333;
|
|
transition: 0.2s;
|
|
border-radius: 24px;
|
|
}
|
|
|
|
.toggle-slider:before {
|
|
position: absolute;
|
|
content: "";
|
|
height: 18px;
|
|
width: 18px;
|
|
left: 3px;
|
|
bottom: 3px;
|
|
background-color: #666;
|
|
transition: 0.2s;
|
|
border-radius: 50%;
|
|
}
|
|
|
|
input:checked + .toggle-slider:before {
|
|
transform: translateX(20px);
|
|
}
|
|
|
|
input:checked + .tor-slider {
|
|
background-color: rgba(155, 89, 182, 0.3);
|
|
border: 1px solid #9b59b6;
|
|
}
|
|
|
|
input:checked + .tor-slider:before {
|
|
background-color: #9b59b6;
|
|
}
|
|
|
|
input:checked + .ssl-slider {
|
|
background-color: rgba(39, 174, 96, 0.3);
|
|
border: 1px solid #27ae60;
|
|
}
|
|
|
|
input:checked + .ssl-slider:before {
|
|
background-color: #27ae60;
|
|
}
|
|
|
|
input:checked + .mesh-slider {
|
|
background-color: rgba(59, 130, 246, 0.3);
|
|
border: 1px solid #3b82f6;
|
|
}
|
|
|
|
input:checked + .mesh-slider:before {
|
|
background-color: #3b82f6;
|
|
}
|
|
|
|
/* Action button */
|
|
.exp-btn-action {
|
|
background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
|
|
color: white;
|
|
border-color: transparent;
|
|
}
|
|
|
|
.exp-btn-action:hover {
|
|
background: linear-gradient(135deg, #2563eb 0%, #1e40af 100%);
|
|
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3);
|
|
}
|