/* Service URL trigger buttons and popovers (visible on app cards). Extracted from style.css. */ .service-buttons-container { display: flex; flex-direction: row; gap: 8px; flex-wrap: wrap; margin-top: 16px; } .service-button { display: flex; align-items: center; gap: 10px; padding: 10px 14px; background: rgba(var(--accent-rgb), 0.10); border: 1px solid rgba(var(--accent-rgb), 0.30); border-radius: 6px; color: var(--text-primary); text-decoration: none; transition: background 0.18s ease, border-color 0.18s ease, transform 0.18s ease; cursor: pointer; } .service-button:hover { background: rgba(var(--accent-rgb), 0.20); border-color: rgba(var(--accent-rgb), 0.55); transform: translateY(-1px); } .service-button .service-icon { font-size: 18px; flex-shrink: 0; } .service-button .service-text { flex: 1; font-size: 14px; font-weight: 500; } .service-button .service-external-icon { font-size: 14px; opacity: 0.6; transition: opacity 0.2s ease; } .service-button:hover .service-external-icon { opacity: 1; } .service-buttons-container .no-buttons { color: rgba(var(--text-rgb), 0.5); font-size: 14px; text-align: center; padding: 20px; } /* Service Trigger on App Cards */ .service-trigger { position: relative; flex-shrink: 0; order: -1; /* left of manage button */ } .service-trigger-icon { width: 100%; height: 100%; min-width: 38px; background: linear-gradient(135deg, var(--status-success), #1e7e34); border-radius: 8px; display: flex; align-items: center; justify-content: center; cursor: pointer; border: 1px solid rgba(var(--status-success-rgb), 0.5); transition: all 0.2s ease; color: #ffffff; padding: 0 10px; gap: 5px; font-size: 12px; font-weight: 600; } .service-trigger:hover .service-trigger-icon, .service-trigger.open .service-trigger-icon { background: linear-gradient(135deg, var(--status-success-hover), #155724); border-color: rgba(var(--status-success-rgb), 0.8); } .service-trigger-popup { display: none; position: absolute; bottom: calc(100% + 10px); left: 0; background: rgba(12, 12, 18, 0.97); border: 1px solid rgba(var(--text-rgb), 0.12); border-radius: 10px; padding: 8px; min-width: 210px; z-index: 1000; backdrop-filter: blur(12px); } .service-trigger.open .service-trigger-popup { display: block; } .service-trigger-popup::after { content: ''; position: absolute; bottom: -6px; left: 14px; width: 0; height: 0; border-left: 6px solid transparent; border-right: 6px solid transparent; border-top: 6px solid rgba(12, 12, 18, 0.97); } .service-trigger-popup .service-button { display: flex; align-items: center; gap: 9px; padding: 9px 11px; border-radius: 7px; background: rgba(var(--text-rgb), 0.05); border: 1px solid rgba(var(--text-rgb), 0.07); color: var(--text-primary); text-decoration: none; font-size: 13px; font-weight: 500; transition: all 0.15s ease; margin-bottom: 4px; white-space: nowrap; } .service-trigger-popup .service-button:last-child { margin-bottom: 0; } .service-trigger-popup .service-button:hover { background: rgba(var(--status-success-rgb), 0.18); border-color: rgba(var(--status-success-rgb), 0.35); } .service-trigger-popup .service-button svg { flex-shrink: 0; opacity: 0.65; } .service-trigger-popup .service-button:hover { background: rgba(var(--accent-rgb), 0.18); border-color: rgba(var(--accent-rgb), 0.40); } .service-trigger-popup .service-button svg { flex-shrink: 0; opacity: 0.65; } /* Per-port lock badge on a service URL button — surfaces only on the specific URLs whose port has login_required=true. */ .service-button.protected { border-color: rgba(245, 158, 11, 0.35); } .service-lock-icon { display: inline-flex; align-items: center; color: #fbbf24; margin-left: 4px; cursor: help; } .service-lock-icon svg { stroke: currentColor; } cyan gradient accent so it reads as the "info / status" entry-point distinct from the URL-open buttons that follow. */ .service-button.service-button-welcome { font: inherit; cursor: pointer; background: rgba(var(--accent-rgb), 0.15); border-color: rgba(var(--accent-rgb), 0.40); color: var(--text-primary); } .service-button.service-button-welcome:hover { background: rgba(var(--accent-rgb), 0.25); border-color: rgba(var(--accent-rgb), 0.65); transform: translateY(-1px); } .service-button.service-button-welcome .service-icon { font-size: 14px; line-height: 1; }