A free, open, self-hosted app platform (GNU AGPLv3): one-click app deploys, Traefik reverse proxy with automatic SSL, rootless Docker support, gluetun VPN routing, and a web dashboard to manage it all. Free & open forever to self-host; optional paid hosted services fund it. See PROMISE.md. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> Signed-off-by: librelad <librelad@digitalangels.vip>
249 lines
5.5 KiB
CSS
Executable File
249 lines
5.5 KiB
CSS
Executable File
|
|
|
|
/* Whitelist Building Blocks Container - Scoped to config section */
|
|
.config-category .whitelist-building-blocks {
|
|
display: grid;
|
|
grid-template-columns: repeat(3, 1fr);
|
|
gap: 20px;
|
|
grid-auto-rows: minmax(min-content, max-content);
|
|
}
|
|
|
|
/* Responsive Grid Layout */
|
|
@media (max-width: 1600px) {
|
|
.config-category .whitelist-building-blocks {
|
|
grid-template-columns: repeat(2, 1fr);
|
|
}
|
|
}
|
|
|
|
@media (max-width: 800px) {
|
|
.config-category .whitelist-building-blocks {
|
|
grid-template-columns: 1fr;
|
|
gap: 16px;
|
|
}
|
|
}
|
|
|
|
/* Individual Whitelist Building Block - Scoped */
|
|
.config-category .whitelist-building-block {
|
|
background: var(--card-bg);
|
|
border: 1px solid var(--border-color);
|
|
border-radius: 8px;
|
|
padding: 16px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-height: fit-content;
|
|
gap: 12px;
|
|
}
|
|
|
|
.config-category .whitelist-building-block:hover {
|
|
transform: translateY(-2px);
|
|
}
|
|
|
|
/* Whitelist Header Layout - Scoped */
|
|
.config-category .whitelist-header {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: flex-start;
|
|
gap: 12px;
|
|
}
|
|
|
|
/* Delete Whitelist Button - Scoped to match domain manager */
|
|
.config-category .delete-whitelist-btn {
|
|
background: var(--status-danger);
|
|
color: var(--text-primary);
|
|
border: none;
|
|
border-radius: 4px;
|
|
width: 28px;
|
|
height: 28px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
cursor: pointer;
|
|
transition: all 0.3s ease;
|
|
flex-shrink: 0;
|
|
font-size: 14px;
|
|
font-weight: bold;
|
|
line-height: 1;
|
|
}
|
|
|
|
.config-category .delete-whitelist-btn:hover {
|
|
background: var(--status-danger-hover);
|
|
transform: scale(1.05);
|
|
}
|
|
|
|
.config-category .delete-whitelist-btn.disabled {
|
|
background: var(--text-muted);
|
|
color: var(--text-muted);
|
|
cursor: not-allowed;
|
|
transform: none;
|
|
}
|
|
|
|
.config-category .delete-whitelist-btn.disabled:hover {
|
|
background: var(--text-muted);
|
|
transform: none;
|
|
}
|
|
|
|
/* Delete Icon - Scoped */
|
|
.config-category .delete-icon {
|
|
font-size: 14px;
|
|
font-weight: bold;
|
|
line-height: 1;
|
|
}
|
|
|
|
/* Whitelist Input Fields - Scoped */
|
|
.config-category .whitelist-input {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
|
|
/* Whitelist Empty State - Scoped */
|
|
.config-category .whitelist-empty-state {
|
|
grid-column: 1 / -1;
|
|
text-align: center;
|
|
padding: 40px 20px;
|
|
background: var(--card-bg);
|
|
border: 2px dashed var(--border-color);
|
|
border-radius: 8px;
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
.config-category .whitelist-empty-state p {
|
|
margin-bottom: 20px;
|
|
font-size: 16px;
|
|
line-height: 1.5;
|
|
}
|
|
|
|
/* Whitelist Actions Container - Scoped */
|
|
.config-category .whitelist-actions {
|
|
grid-column: 1 / -1;
|
|
display: flex;
|
|
justify-content: flex-start;
|
|
padding: 10px 0;
|
|
}
|
|
|
|
/* Add Whitelist Entry Button - Scoped */
|
|
.config-category .whitelist-actions .btn {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 8px 20px;
|
|
border: none;
|
|
border-radius: 6px;
|
|
font-size: 14px;
|
|
font-weight: 500;
|
|
cursor: pointer;
|
|
transition: all 0.3s ease;
|
|
}
|
|
|
|
.config-category .whitelist-actions .btn-primary {
|
|
background: var(--primary-color, var(--accent));
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.config-category .whitelist-actions .btn-primary:hover {
|
|
background: var(--primary-hover, var(--accent-hover));
|
|
transform: translateY(-1px);
|
|
}
|
|
|
|
.config-category .whitelist-actions .btn-secondary {
|
|
background: var(--secondary-color, var(--text-muted));
|
|
color: var(--text-primary);
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
.config-category .whitelist-actions .btn-secondary:hover {
|
|
background: var(--secondary-hover, var(--text-muted));
|
|
transform: none;
|
|
}
|
|
|
|
/* Add Icon - Scoped */
|
|
.config-category .add-icon {
|
|
font-size: 16px;
|
|
font-weight: bold;
|
|
line-height: 1;
|
|
}
|
|
|
|
/* Field Group Styling for Whitelist - Scoped */
|
|
.config-category .whitelist-building-block .field-group {
|
|
margin: 0;
|
|
width: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.config-category .whitelist-building-block .field-label {
|
|
display: block;
|
|
margin-bottom: 6px;
|
|
font-weight: 500;
|
|
color: var(--text-color);
|
|
font-size: 14px;
|
|
}
|
|
|
|
.config-category .whitelist-building-block .form-control {
|
|
width: 100%;
|
|
padding: 8px 12px;
|
|
border: 1px solid var(--border-color);
|
|
border-radius: 4px;
|
|
background: var(--input-bg);
|
|
color: var(--text-color);
|
|
font-size: 14px;
|
|
transition: border-color 0.3s ease;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.config-category .whitelist-building-block .form-control:focus {
|
|
outline: none;
|
|
border-color: var(--primary-color, var(--accent));
|
|
box-shadow: 0 0 0 2px rgba(var(--accent-rgb), 0.25);
|
|
}
|
|
|
|
.config-category .whitelist-building-block .form-control.error {
|
|
border-color: var(--status-danger);
|
|
}
|
|
|
|
.config-category .whitelist-building-block .field-description {
|
|
display: block;
|
|
margin-top: 4px;
|
|
font-size: 12px;
|
|
color: var(--text-muted);
|
|
line-height: 1.4;
|
|
}
|
|
|
|
/* Flash Animation for Validation - Scoped */
|
|
@keyframes whitelist-flash {
|
|
0%, 100% {
|
|
background-color: transparent;
|
|
border-color: var(--border-color);
|
|
}
|
|
50% {
|
|
background-color: rgba(var(--status-danger-rgb), 0.1);
|
|
border-color: var(--status-danger);
|
|
}
|
|
}
|
|
|
|
.config-category .whitelist-building-block.flash {
|
|
animation: whitelist-flash 0.5s ease-in-out 2;
|
|
}
|
|
|
|
.config-category .whitelist-input.flash {
|
|
animation: whitelist-flash 0.5s ease-in-out 2;
|
|
}
|
|
|
|
/* Responsive Adjustments - Scoped */
|
|
@media (max-width: 600px) {
|
|
.config-category .whitelist-header {
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
gap: 8px;
|
|
}
|
|
|
|
.config-category .delete-whitelist-btn {
|
|
align-self: flex-end;
|
|
margin-top: 8px;
|
|
}
|
|
|
|
.config-category .whitelist-actions .btn {
|
|
width: 100%;
|
|
justify-content: center;
|
|
}
|
|
}
|