From f10cb78022795ac8165bf50950f906a407993eab Mon Sep 17 00:00:00 2001 From: Sovran_Systems <99053422+naturallaw777@users.noreply.github.com> Date: Sat, 4 Apr 2026 17:27:35 -0500 Subject: [PATCH] Add missing service detail modal CSS styles (svc-detail, addon, domain, port, support, feature) --- app/sovran_systemsos_web/static/style.css | 583 ++++++++++++++++++++++ 1 file changed, 583 insertions(+) diff --git a/app/sovran_systemsos_web/static/style.css b/app/sovran_systemsos_web/static/style.css index 90babca..9bb6966 100644 --- a/app/sovran_systemsos_web/static/style.css +++ b/app/sovran_systemsos_web/static/style.css @@ -408,6 +408,198 @@ button:disabled { .status-dot.disabled { background-color: var(--grey); } .status-dot.needs-attention { background-color: var(--yellow); } +/* ── Service detail modal sections ───────────────────────────────── */ + +.svc-detail-section { + margin-bottom: 20px; + padding-bottom: 16px; + border-bottom: 1px solid var(--border-color); +} + +.svc-detail-section:last-child { + border-bottom: none; + margin-bottom: 0; + padding-bottom: 0; +} + +.svc-detail-section-title { + font-size: 0.78rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--text-dim); + margin-bottom: 10px; +} + +.svc-detail-desc { + font-size: 0.9rem; + color: var(--text-secondary); + line-height: 1.6; +} + +.svc-detail-status { + display: flex; + align-items: center; + gap: 8px; + font-size: 0.9rem; + font-weight: 600; + color: var(--text-primary); +} + +/* ── Service detail: Domain ──────────────────────────────────────── */ + +.svc-detail-domain-value { + font-size: 0.9rem; + color: var(--text-primary); + font-weight: 600; +} + +.tile-domain-label--ok { + color: var(--green); + font-weight: 600; +} + +.tile-domain-label--warn { + color: var(--yellow); + font-weight: 600; +} + +.tile-domain-label--error { + color: var(--red); + font-weight: 600; +} + +/* ── Service detail: Port table ──────────────────────────────────── */ + +.svc-detail-port-table { + width: 100%; + border-collapse: collapse; + font-size: 0.82rem; + margin-top: 8px; +} + +.svc-detail-port-table th { + text-align: left; + color: var(--text-dim); + font-weight: 600; + font-size: 0.72rem; + text-transform: uppercase; + letter-spacing: 0.04em; + padding: 6px 10px; + border-bottom: 1px solid var(--border-color); +} + +.svc-detail-port-table td { + padding: 8px 10px; + border-bottom: 1px solid rgba(69, 71, 90, 0.4); + color: var(--text-primary); +} + +.svc-detail-port-table tr:last-child td { + border-bottom: none; +} + +.svc-detail-port-table-port { + font-family: 'JetBrains Mono', 'Fira Code', 'Source Code Pro', monospace; + font-weight: 600; + color: var(--accent-color); +} + +.svc-detail-port-table-proto { + text-transform: uppercase; + color: var(--text-secondary); +} + +.svc-detail-port-table-desc { + color: var(--text-secondary); +} + +.svc-detail-port-table-status { + font-weight: 600; +} + +.port-status-listening { color: var(--green); } +.port-status-open { color: var(--yellow); } +.port-status-closed { color: var(--red); } +.port-status-unknown { color: var(--text-dim); } + +/* ── Service detail: Troubleshoot box ────────────────────────────── */ + +.svc-detail-troubleshoot { + margin-top: 12px; + padding: 14px 16px; + background-color: rgba(229, 165, 10, 0.08); + border: 1px solid rgba(229, 165, 10, 0.3); + border-radius: 10px; + font-size: 0.85rem; + color: var(--text-secondary); + line-height: 1.6; +} + +.svc-detail-troubleshoot strong { + color: var(--yellow); +} + +.svc-detail-troubleshoot ol { + margin-top: 8px; + padding-left: 20px; +} + +.svc-detail-troubleshoot li { + margin-bottom: 4px; +} + +.svc-detail-troubleshoot code { + background-color: rgba(137, 180, 250, 0.12); + padding: 2px 6px; + border-radius: 4px; + font-size: 0.82rem; + color: var(--accent-color); +} + +.svc-detail-troubleshoot a { + color: var(--accent-color); + text-decoration: none; +} + +.svc-detail-troubleshoot a:hover { + text-decoration: underline; +} + +/* ── Service detail: Addon feature toggle ────────────────────────── */ + +.svc-detail-addon-row { + display: flex; + align-items: center; + gap: 14px; + margin-top: 12px; +} + +.svc-detail-addon-status { + font-size: 0.88rem; + font-weight: 700; +} + +.addon-status--on { + color: var(--green); +} + +.addon-status--off { + color: var(--text-dim); +} + +.feature-conflict-warning { + margin-top: 8px; + margin-bottom: 8px; + padding: 10px 14px; + background-color: rgba(229, 165, 10, 0.1); + border: 1px solid rgba(229, 165, 10, 0.3); + border-radius: 8px; + font-size: 0.82rem; + color: var(--yellow); + font-weight: 600; +} + /* ── Update modal ────────────────────────────────────────────────── */ .modal-overlay { @@ -931,6 +1123,397 @@ button.btn-reboot:hover:not(:disabled) { margin-bottom: 8px; } +/* ── Tech Support modal ──────────────────────────────────────────── */ + +.support-section { + text-align: center; +} + +.support-icon-big { + font-size: 3rem; + margin-bottom: 12px; +} + +.support-active-icon { + animation: pulse-badge 2s ease-in-out infinite; +} + +.support-heading { + font-size: 1.15rem; + font-weight: 700; + color: var(--text-primary); + margin-bottom: 8px; +} + +.support-active-heading { + color: var(--green); +} + +.support-desc { + font-size: 0.88rem; + color: var(--text-secondary); + line-height: 1.6; + margin-bottom: 16px; + text-align: left; +} + +.support-active-note { + font-size: 0.88rem; + color: var(--text-secondary); + margin-bottom: 16px; +} + +.support-info-box { + background-color: var(--card-color); + border: 1px solid var(--border-color); + border-radius: 10px; + padding: 14px 18px; + margin-bottom: 16px; + text-align: left; +} + +.support-active-box { + border-color: var(--green); +} + +.support-info-row { + display: flex; + justify-content: space-between; + align-items: center; + padding: 4px 0; +} + +.support-info-label { + font-size: 0.82rem; + color: var(--text-dim); + font-weight: 600; +} + +.support-info-value { + font-family: 'JetBrains Mono', 'Fira Code', 'Source Code Pro', monospace; + font-size: 0.88rem; + color: var(--accent-color); + font-weight: 600; +} + +.support-info-hint { + font-size: 0.72rem; + color: var(--text-dim); + margin-top: 6px; + font-style: italic; +} + +.support-steps { + text-align: left; + margin-bottom: 16px; + padding: 14px 18px; + background-color: var(--card-color); + border-radius: 10px; + border: 1px solid var(--border-color); +} + +.support-steps-title { + font-size: 0.82rem; + font-weight: 700; + color: var(--text-dim); + text-transform: uppercase; + letter-spacing: 0.04em; + margin-bottom: 8px; +} + +.support-steps ol { + padding-left: 20px; + font-size: 0.85rem; + color: var(--text-secondary); + line-height: 1.7; +} + +.support-steps code { + background-color: rgba(137, 180, 250, 0.12); + padding: 2px 6px; + border-radius: 4px; + font-size: 0.82rem; + color: var(--accent-color); +} + +.support-btn-enable { + width: 100%; + padding: 12px; + border-radius: var(--radius-btn); + background-color: var(--accent-color); + color: #1e1e2e; + font-size: 0.95rem; + font-weight: 700; + margin-bottom: 10px; +} + +.support-btn-enable:hover:not(:disabled) { + opacity: 0.88; +} + +.support-btn-disable { + width: 100%; + padding: 12px; + border-radius: var(--radius-btn); + background-color: var(--red); + color: #fff; + font-size: 0.95rem; + font-weight: 700; + margin-bottom: 10px; +} + +.support-btn-disable:hover:not(:disabled) { + opacity: 0.88; +} + +.support-btn-done { + width: 100%; + padding: 12px; + border-radius: var(--radius-btn); + background-color: var(--accent-color); + color: #1e1e2e; + font-size: 0.95rem; + font-weight: 700; + margin-top: 16px; +} + +.support-btn-done:hover:not(:disabled) { + opacity: 0.88; +} + +.support-btn-auditlog { + width: 100%; + padding: 10px; + border-radius: var(--radius-btn); + background-color: var(--border-color); + color: var(--text-primary); + font-size: 0.85rem; + font-weight: 600; + margin-top: 8px; +} + +.support-btn-auditlog:hover:not(:disabled) { + background-color: #5a5c72; +} + +.support-fine-print { + font-size: 0.72rem; + color: var(--text-dim); + font-style: italic; + margin-bottom: 8px; +} + +.support-verify-box { + display: flex; + align-items: center; + justify-content: center; + gap: 10px; + margin: 16px 0; + padding: 12px; + background-color: var(--card-color); + border-radius: 8px; +} + +.support-verify-label { + font-size: 0.82rem; + color: var(--text-dim); + font-weight: 600; +} + +.support-verify-value { + font-size: 0.88rem; + font-weight: 700; +} + +.support-verify-value.verified-gone { + color: var(--green); +} + +.support-verify-value.verify-warning { + color: var(--yellow); +} + +/* ── Wallet protection ───────────────────────────────────────────── */ + +.support-wallet-box { + text-align: left; + padding: 14px 18px; + border-radius: 10px; + margin-bottom: 16px; + border: 1px solid var(--border-color); +} + +.support-wallet-protected { + background-color: rgba(46, 194, 126, 0.06); + border-color: rgba(46, 194, 126, 0.3); +} + +.support-wallet-unlocked { + background-color: rgba(229, 165, 10, 0.06); + border-color: rgba(229, 165, 10, 0.3); +} + +.support-wallet-warning { + background-color: rgba(224, 27, 36, 0.06); + border-color: rgba(224, 27, 36, 0.3); +} + +.support-wallet-header { + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 8px; +} + +.support-wallet-icon { + font-size: 1.2rem; +} + +.support-wallet-title { + font-size: 0.88rem; + font-weight: 700; + color: var(--text-primary); +} + +.support-wallet-desc { + font-size: 0.82rem; + color: var(--text-secondary); + line-height: 1.5; + margin-bottom: 8px; +} + +.support-wallet-paths { + list-style: none; + padding: 0; + margin: 8px 0; +} + +.support-wallet-paths li { + font-family: 'JetBrains Mono', 'Fira Code', 'Source Code Pro', monospace; + font-size: 0.78rem; + color: var(--text-dim); + padding: 2px 0; +} + +.support-wallet-unlock-row { + display: flex; + align-items: center; + gap: 10px; + margin-top: 10px; +} + +.support-unlock-select { + background-color: var(--card-color); + color: var(--text-primary); + border: 1px solid var(--border-color); + border-radius: 6px; + padding: 6px 10px; + font-size: 0.82rem; +} + +.support-btn-wallet-unlock { + padding: 8px 16px; + border-radius: var(--radius-btn); + background-color: var(--yellow); + color: #1e1e2e; + font-size: 0.82rem; + font-weight: 700; +} + +.support-btn-wallet-unlock:hover:not(:disabled) { + background-color: #c98d08; +} + +.support-btn-wallet-lock { + padding: 8px 16px; + border-radius: var(--radius-btn); + background-color: var(--green); + color: #fff; + font-size: 0.82rem; + font-weight: 700; + margin-top: 8px; +} + +.support-btn-wallet-lock:hover:not(:disabled) { + background-color: #27ae6e; +} + +/* ── Audit log ───────────────────────────────────────────────────── */ + +.support-audit-container { + margin-top: 12px; + border-top: 1px solid var(--border-color); + padding-top: 12px; +} + +.support-audit-log { + max-height: 200px; + overflow-y: auto; + background-color: #12121c; + border-radius: 8px; + padding: 10px 14px; +} + +.support-audit-entry { + font-family: 'JetBrains Mono', 'Fira Code', 'Source Code Pro', monospace; + font-size: 0.72rem; + color: var(--text-secondary); + padding: 3px 0; + border-bottom: 1px solid rgba(69, 71, 90, 0.3); +} + +.support-audit-entry:last-child { + border-bottom: none; +} + +.support-audit-empty { + font-size: 0.82rem; + color: var(--text-dim); + text-align: center; + padding: 12px; +} + +/* ── Domain setup modal ──────────────────────────────────────────── */ + +domain-narrow-dialog { + max-width: 500px; +} + +domain-field-group { + margin-bottom: 14px; +} + +domain-field-label { + display: block; + font-size: 0.82rem; + color: var(--text-secondary); + margin-bottom: 6px; + font-weight: 600; +} + +domain-field-input { + width: 100%; + background-color: #12121c; + color: var(--text-primary); + border: 1px solid var(--border-color); + border-radius: 8px; + padding: 10px 12px; + font-size: 0.9rem; + box-sizing: border-box; +} + +domain-field-input:focus { + outline: none; + border-color: var(--accent-color); +} + +domain-field-actions { + display: flex; + gap: 10px; + margin-top: 18px; + justify-content: flex-end; +} + /* ── Responsive ─────────────────────────────────────────────────── */ @media (max-width: 768px) {