@import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap"); @import "tailwindcss"; :root { /* Dark theme variables */ --bg-primary: #0c0e16; --bg-secondary: #0c0e16; --bg-card: #0c0e16; --bg-card-hover: #161820; --bg-sidebar: #060913; --bg-input: #11151f; --border: #1c1f25; --border-hover: #1d2029; --text-primary: #e2e8f0; --text-secondary: #8b9ec7; --text-danger: #ef4444; --text-muted: #8c93a3; --accent-blue: #3b82f6; --accent-blue-glow: rgba(59, 130, 246, 0.15); --accent-green: #10b981; --accent-green-glow: rgba(16, 185, 129, 0.15); --accent-yellow: #f59e0b; --accent-red: #ef4444; --accent-purple: #8b5cf6; --accent-cyan: #06b6d4; /* Toast tones */ --toast-success-border: 1px solid rgba(16, 185, 129, 0.28); --toast-success-bg: #0f2f28; --toast-success-title: #d1fae5; --toast-success-message: rgba(209, 250, 229, 0.82); --toast-success-close: rgba(209, 250, 229, 0.65); --toast-success-icon: #34d399; --toast-error-border: 1px solid rgba(239, 68, 68, 0.28); --toast-error-bg: #321717; --toast-error-title: #fee2e2; --toast-error-message: rgba(254, 226, 226, 0.82); --toast-error-close: rgba(254, 226, 226, 0.65); --toast-error-icon: #f87171; --toast-warning-border: 1px solid rgba(245, 158, 11, 0.28); --toast-warning-bg: #342714; --toast-warning-title: #fef3c7; --toast-warning-message: rgba(254, 243, 199, 0.82); --toast-warning-close: rgba(254, 243, 199, 0.65); --toast-warning-icon: #fbbf24; --toast-info-border: 1px solid rgba(59, 130, 246, 0.28); --toast-info-bg: #172c40; --toast-info-title: #dbeafe; --toast-info-message: rgba(219, 234, 254, 0.82); --toast-info-close: rgba(219, 234, 254, 0.65); --toast-info-icon: #60a5fa; --terminal-surface: #070b12; --terminal-header: #0d1224; --terminal-row-hover: rgba(59, 130, 246, 0.04); --terminal-timestamp: #2d3f5a; --terminal-body: #8b9ec7; --metrics-surface: rgba(15, 23, 42, 0.34); --metrics-surface-strong: linear-gradient( 180deg, rgba(40, 53, 83, 0.74) 0%, rgba(15, 23, 42, 0.42) 100% ); --metrics-surface-soft: rgba(15, 23, 42, 0.24); --metrics-shell: linear-gradient( 180deg, rgba(11, 14, 24, 0.96) 0%, rgba(26, 29, 37, 0.96) 100% ); --metrics-border: rgba(148, 163, 184, 0.14); --metrics-border-muted: rgba(148, 163, 184, 0.18); --metrics-grid: rgba(148, 163, 184, 0.12); --metrics-tooltip-bg: rgba(15, 23, 42, 0.94); --metrics-tooltip-text: #e2e8f0; --metrics-tooltip-label: #94a3b8; --metrics-axis: #64748b; --metrics-server-accent: #60a5fa; --metrics-error-text: #fca5a5; --metrics-error-border: rgba(239, 68, 68, 0.18); --metrics-error-bg: rgba(127, 29, 29, 0.16); --scrollbar-track: #0d1224; --scrollbar-thumb: #1e2a3d; --font--body: IBM Plex Sans, Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; --font--input: General Sans, Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; --font--code: "JetBrains Mono", monospace; --font--terminal: "JetBrains Mono", monospace; } html[data-theme="light"] { /* Light theme variables */ --bg-primary: #f4f7fb; --bg-secondary: #ffffff; --bg-card: #ffffff; --bg-card-hover: #eef3fb; --bg-sidebar: #eaf0f7; --bg-input: #f6f9fc; --border: #d8e1ef; --border-hover: #bcc8db; --text-primary: #0f172a; --text-secondary: #334155; --text-muted: #64748b; --terminal-surface: #fbfdff; --terminal-header: #eef4fb; --terminal-row-hover: rgba(59, 130, 246, 0.08); --terminal-timestamp: #64748b; --terminal-body: #334155; --metrics-surface: rgba(255, 255, 255, 0.96); --metrics-surface-strong: linear-gradient( 180deg, rgba(255, 255, 255, 0.98) 0%, rgba(246, 249, 252, 0.98) 100% ); --metrics-surface-soft: rgba(246, 249, 252, 0.92); --metrics-shell: linear-gradient( 180deg, rgba(255, 255, 255, 0.98) 0%, rgba(244, 247, 251, 0.98) 100% ); --metrics-border: rgba(148, 163, 184, 0.22); --metrics-border-muted: rgba(148, 163, 184, 0.28); --metrics-grid: rgba(148, 163, 184, 0.2); --metrics-tooltip-bg: rgba(255, 255, 255, 0.98); --metrics-tooltip-text: #0f172a; --metrics-tooltip-label: #475569; --metrics-axis: #64748b; --metrics-server-accent: #2563eb; --metrics-error-text: #b91c1c; --metrics-error-border: rgba(239, 68, 68, 0.24); --metrics-error-bg: rgba(254, 242, 242, 0.96); --scrollbar-track: #e2e8f0; --scrollbar-thumb: #cbd5e1; /* Toast tones — light */ --toast-success-border: 1px solid rgba(16, 185, 129, 0.22); --toast-success-bg: #ecfdf5; --toast-success-title: #14532d; --toast-success-message: rgba(20, 83, 45, 0.82); --toast-success-close: rgba(20, 83, 45, 0.6); --toast-success-icon: #10b981; --toast-error-border: 1px solid rgba(239, 68, 68, 0.22); --toast-error-bg: #fef2f2; --toast-error-title: #7f1d1d; --toast-error-message: rgba(127, 29, 29, 0.82); --toast-error-close: rgba(127, 29, 29, 0.6); --toast-error-icon: #ef4444; --toast-warning-border: 1px solid rgba(245, 158, 11, 0.22); --toast-warning-bg: #fffbeb; --toast-warning-title: #78350f; --toast-warning-message: rgba(120, 53, 15, 0.82); --toast-warning-close: rgba(120, 53, 15, 0.6); --toast-warning-icon: #f59e0b; --toast-info-border: 1px solid rgba(59, 130, 246, 0.22); --toast-info-bg: #eff6ff; --toast-info-title: #1e3a8a; --toast-info-message: rgba(30, 58, 138, 0.82); --toast-info-close: rgba(30, 58, 138, 0.6); --toast-info-icon: #3b82f6; } * { box-sizing: border-box; margin: 0; padding: 0; } html, body { height: 100%; background-color: var(--bg-primary); color: var(--text-primary); font-family: var(--font--body); font-size: 14px; line-height: 1.5; overflow: hidden; } /* Scrollbar */ ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: var(--scrollbar-track); } ::-webkit-scrollbar-thumb { background: var(--scrollbar-thumb); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: var(--border-hover); } .no-scrollbar { -ms-overflow-style: none; scrollbar-width: none; } .no-scrollbar::-webkit-scrollbar { display: none; } /* Animations */ @keyframes pulse-dot { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } } @keyframes slide-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-4px); } } @keyframes glow-pulse { 0%, 100% { box-shadow: 0 0 8px rgba(59, 130, 246, 0.3); } 50% { box-shadow: 0 0 20px rgba(59, 130, 246, 0.6); } } @keyframes gradient-shift { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } @keyframes spin-slow { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .animate-slide-in { animation: slide-in 0.3s ease-out; } .animate-pulse-dot { animation: pulse-dot 2s ease-in-out infinite; } .animate-float { animation: float 3s ease-in-out infinite; } .animate-glow { animation: glow-pulse 2s ease-in-out infinite; } .animate-spin-slow { animation: spin-slow 3s linear infinite; } /* Card styles */ .card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 5px; transition: all 0.2s ease; } .card:hover { border-color: var(--border-hover); } .ui-responsive-toolbar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; } .ui-inline-cluster { display: flex; align-items: center; gap: 10px; flex: 1 1 320px; min-width: 0; } .ui-inline-label { white-space: nowrap; flex-shrink: 0; } .ui-chip-scroll { display: flex; gap: 6px; overflow-x: auto; padding-bottom: 4px; flex: 1 1 0; min-width: 0; } .ui-chip-scroll > * { white-space: nowrap; flex-shrink: 0; } .ui-pill-switch { display: flex; gap: 4px; background: var(--bg-input); border-radius: 8px; padding: 3px; overflow-x: auto; max-width: 100%; } .ui-pill-switch > * { white-space: nowrap; flex-shrink: 0; } .ui-tab-shell { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; } .ui-tab-scroll { display: flex; gap: 4px; background: var(--bg-card); border-radius: 10px; padding: 4px; border: 1px solid var(--border); overflow-x: auto; max-width: 100%; } .ui-tab-scroll > * { white-space: nowrap; flex-shrink: 0; } .ui-toolbar-actions { margin-left: auto; display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap; } .users-toolbar-filter { flex: 0 1 200px; width: min(200px, 100%); align-self: flex-start; } .ui-toolbar-note { margin-left: auto; text-align: right; flex: 1 1 240px; } .deployment-filter-toolbar { display: flex; align-items: flex-end; justify-content: flex-end; gap: 12px; flex-wrap: wrap; } .deployment-filter-control { display: grid; gap: 4px; min-width: 160px; flex: 0 1 190px; } @media (max-width: 768px) { .ui-responsive-toolbar, .ui-tab-shell { align-items: stretch; } .ui-inline-cluster, .ui-toolbar-note, .ui-toolbar-actions { flex-basis: 100%; } .ui-toolbar-note { margin-left: 0; text-align: left; } .ui-toolbar-actions { margin-left: 0; justify-content: stretch; } .ui-toolbar-actions > button, .ui-toolbar-actions > a { flex: 1 1 160px; justify-content: center; } .users-toolbar .ui-toolbar-actions { flex-direction: column; } .users-toolbar .ui-toolbar-actions > button { width: 100%; flex-basis: auto; } .users-toolbar-filter { flex-basis: 100%; width: 100%; } .ui-pill-switch, .ui-tab-scroll { width: 100%; } } /* Gradient text */ .gradient-text { background: linear-gradient(135deg, #3b82f6, #8b5cf6, #06b6d4); background-size: 200% 200%; animation: gradient-shift 4s ease infinite; -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* Status badges */ .badge-online { --badge-color: #059669; --badge-bg: rgba(16, 185, 129, 0.15); --badge-border: rgba(16, 185, 129, 0.28); } .badge-offline, .badge-danger { --badge-color: #dc2626; --badge-bg: rgba(239, 68, 68, 0.15); --badge-border: rgba(239, 68, 68, 0.28); } .badge-warning { --badge-color: #d97706; --badge-bg: rgba(245, 158, 11, 0.15); --badge-border: rgba(245, 158, 11, 0.28); } .badge-info { --badge-color: #2563eb; --badge-bg: rgba(59, 130, 246, 0.15); --badge-border: rgba(59, 130, 246, 0.28); } .ui-badge { display: inline-flex; align-items: center; justify-content: center; max-width: 100%; min-height: 24px; padding: 3px 11px; border: 1px solid var(--badge-border, rgba(148, 163, 184, 0.5)); border-radius: 999px; background: var(--badge-bg, rgba(148, 163, 184, 0.1)); color: var(--badge-color, var(--text-secondary)); font-size: 11px; font-weight: 600; line-height: 1.25; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex-shrink: 0; } .server-config-component-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(360px, 100%), 1fr)); gap: 16px; } .server-config-component-card { min-width: 0; min-height: 100%; padding: 16px; display: flex; flex-direction: column; gap: 14px; } .server-config-component-header { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px; align-items: start; } .server-config-component-copy { min-width: 0; } .server-config-component-description { margin-top: 6px; font-size: 12px; color: var(--text-muted); line-height: 1.6; } .server-config-component-metadata { margin: 0; color: var(--text-muted); font-size: 12px; line-height: 1.55; overflow-wrap: anywhere; } .server-config-component-divider { margin: 0; border: 0; border-top: 1px solid var(--border); } .server-config-badge-list { display: flex; align-items: flex-start; gap: 8px; flex-wrap: wrap; min-width: 0; } .server-config-readiness-compact { padding: 14px 16px; display: grid; gap: 8px; } .server-config-readiness-compact-main { min-width: 0; display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; } .server-config-readiness-meta { margin: 0; color: var(--text-muted); font-size: 11px; line-height: 1.5; } .server-config-readiness-details { padding-top: 8px; border-top: 1px solid var(--border); } .server-config-readiness-details summary { display: inline-flex; align-items: center; gap: 7px; color: #b45309; font-size: 12px; cursor: pointer; list-style: none; } .server-config-readiness-details summary::-webkit-details-marker { display: none; } .server-config-readiness-details .server-config-readiness-notices { margin-top: 10px; } .server-config-group-switcher { padding: 12px 14px; display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; } .server-config-group-switcher-copy { min-width: 0; display: grid; gap: 3px; } .server-config-group-switcher-copy span { color: var(--text-muted); font-size: 11px; line-height: 1.45; } .server-config-group-switcher-actions { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; } .server-config-group-switcher-actions .btn[aria-pressed="true"] { border-color: rgba(59, 130, 246, 0.35); background: rgba(59, 130, 246, 0.12); color: #3b82f6; } .server-config-readiness-notices { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(320px, 100%), 1fr)); gap: 8px; } .server-config-readiness-notice { min-width: 0; display: flex; align-items: flex-start; gap: 8px; padding: 10px 12px; border-radius: 8px; border: 1px solid rgba(245, 158, 11, 0.24); background: rgba(245, 158, 11, 0.08); color: #b45309; font-size: 12px; line-height: 1.5; } .server-config-readiness-notice svg { flex-shrink: 0; margin-top: 2px; color: #f59e0b; } .server-config-readiness-notice span { min-width: 0; } .server-config-component-issue-summary { width: 100%; min-width: 0; display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 9px 11px; border-radius: 8px; color: #ef4444; background: rgba(248, 113, 113, 0.15); border: 1px solid rgba(248, 113, 113, 0.3); cursor: pointer; font-size: 12px; font-weight: 600; text-align: left; } .server-config-component-issue-summary:hover { background: rgba(248, 113, 113, 0.2); border-color: rgba(248, 113, 113, 0.42); } .server-config-component-issue-copy { min-width: 0; display: inline-flex; align-items: center; gap: 7px; } .server-config-component-issue-copy span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .server-config-component-issue-action { flex-shrink: 0; color: #dc2626; font-size: 11px; } .server-config-issue-overlay { position: fixed; inset: 0; z-index: 1003; display: flex; align-items: center; justify-content: center; padding: 20px; background: rgba(3, 7, 18, 0.58); } .server-config-issue-dialog { width: min(520px, 100%); max-height: min(70vh, 560px); padding: 18px; display: grid; gap: 14px; overflow: auto; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.35); } .server-config-issue-dialog-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; } .server-config-issue-close { width: 30px; height: 30px; flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; border-radius: 8px; border: 1px solid rgba(148, 163, 184, 0.18); background: rgba(15, 23, 42, 0.16); color: var(--text-muted); cursor: pointer; } .server-config-issue-close:hover { color: var(--text-primary); border-color: var(--border-hover); } .server-config-issue-list { display: grid; gap: 8px; } .server-config-issue-note { padding: 12px; border-radius: 8px; border: 1px solid rgba(248, 113, 113, 0.3); background: rgba(248, 113, 113, 0.14); color: var(--text-danger); font-size: 12px; line-height: 1.55; white-space: pre-wrap; word-break: break-word; } .server-config-component-actions { margin-top: auto; padding-top: 14px; border-top: 1px solid var(--border); display: flex; gap: 8px; flex-wrap: wrap; } .server-config-component-actions .btn { min-width: 94px; white-space: nowrap; } .server-config-setup-profile-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(210px, 100%), 1fr)); gap: 12px; } .server-config-setup-intro { display: grid; gap: 5px; padding: 12px 14px; border-left: 3px solid #3b82f6; background: rgba(59, 130, 246, 0.08); color: var(--text-secondary); font-size: 12px; line-height: 1.55; } .server-config-setup-intro strong { color: var(--text-primary); font-size: 13px; } .server-config-setup-profile { min-width: 0; padding: 16px; transition: border-color 150ms ease, background 150ms ease; } .server-config-setup-profile:hover { border-color: rgba(59, 130, 246, 0.4); } .server-config-setup-profile-select { width: 100%; min-width: 0; display: grid; gap: 9px; padding: 0; border: 0; background: transparent; color: inherit; text-align: left; cursor: pointer; } .server-config-setup-profile-header { display: flex; justify-content: space-between; align-items: center; gap: 8px; } .server-config-setup-steps { display: grid; gap: 10px; } .server-config-setup-step { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: start; gap: 10px; padding: 12px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg-input); } .server-config-setup-step-number { width: 22px; height: 22px; display: grid; place-items: center; border-radius: 999px; background: rgba(59, 130, 246, 0.12); color: #3b82f6; font-size: 12px; font-weight: 700; } .server-config-setup-preview-footer { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; padding-top: 14px; border-top: 1px solid var(--border); color: var(--text-muted); font-size: 12px; } .server-config-setup-review-list { display: grid; gap: 8px; } .server-config-setup-review-item { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 10px; padding: 11px 12px; border: 1px solid var(--border); border-radius: 7px; background: var(--bg-input); color: var(--text-primary); font-size: 13px; } .server-config-setup-review-item input { width: 15px; height: 15px; accent-color: #3b82f6; } .server-config-setup-review-actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap; } .server-config-setup-review-actions .btn { min-width: auto; } .server-config-setup-warning { display: flex; align-items: flex-start; gap: 9px; padding: 12px 14px; border: 1px solid rgba(245, 158, 11, 0.28); border-radius: 8px; background: rgba(245, 158, 11, 0.08); color: var(--text-secondary); font-size: 12px; line-height: 1.55; } .server-config-setup-warning svg { flex: 0 0 auto; color: #f59e0b; } @media (max-width: 520px) { .server-config-readiness-compact-main { flex-direction: column; } .server-config-group-switcher-actions, .server-config-group-switcher-actions .btn { width: 100%; } .server-config-component-card { padding: 14px; } .server-config-component-header { grid-template-columns: 1fr; } .server-config-component-header > .ui-badge { justify-self: start; } .server-config-component-actions .btn { flex: 1 1 140px; } } /* Progress bars */ .progress-bar { height: 4px; border-radius: 2px; background: var(--bg-input); overflow: hidden; } .progress-fill { height: 100%; border-radius: 2px; transition: width 0.5s ease; } /* Sidebar controls and navigation */ .sidebar-trigger { width: 32px; height: 32px; flex: 0 0 32px; display: inline-flex; align-items: center; justify-content: center; padding: 0; border: 1px solid transparent; border-radius: 7px; background: transparent; color: var(--text-secondary); cursor: pointer; transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease; } .sidebar-trigger:hover { background: var(--bg-input); border-color: var(--border); color: var(--text-primary); } .sidebar-trigger:focus-visible { outline: 2px solid var(--accent-blue); outline-offset: 2px; } .topbar-section-divider { width: 1px; height: 20px; flex: 0 0 1px; background: var(--border); } .nav-item { display: flex; align-items: center; gap: 10px; padding: 8px 12px; border-radius: 8px; cursor: pointer; transition: all 0.15s ease; color: var(--text-secondary); font-size: 13px; font-weight: 500; text-decoration: none; position: relative; } .nav-item:hover { background: rgba(59, 130, 246, 0.08); color: var(--text-primary); } .nav-item.active { background: rgba(59, 130, 246, 0.12); color: #3b82f6; border-left: 2px solid #3b82f6; padding-left: 10px; } .nav-item.active .nav-icon { color: #3b82f6; } /* Table styles */ .data-table { width: 100%; border-collapse: collapse; } .data-table thead th { padding: 10px 16px; text-align: left; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text-muted); border-bottom: 1px solid var(--border); } .data-table tbody tr { border-bottom: 1px solid rgba(30, 42, 61, 0.5); transition: background 0.15s ease; } .data-table tbody tr:hover { background: rgba(59, 130, 246, 0.04); } .data-table tbody td { padding: 12px 16px; font-size: 13px; color: var(--text-secondary); } /* Button styles */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 7px 14px; border-radius: 3px; font-size: 13px; font-weight: 500; cursor: pointer; transition: all 0.2s ease; border: none; outline: none; } .btn:disabled, .btn[aria-disabled="true"] { cursor: not-allowed; opacity: 0.48; filter: grayscale(0.25); } .btn-sm { max-height: 35px; padding: 6px 12px; border-radius: 3px; font-size: 12px; font-weight: 600; } .btn-primary { background: #1d4ed8; color: white; cursor: pointer; } .btn-primary:hover { background: #1e40af; /* transform: translateY(-1px); */ /* box-shadow: 0 4px 12px rgba(59, 130, 246, 0.4); */ } .btn-primary:disabled, .btn-primary[aria-disabled="true"] { background: #022ab1; color: #94a3b8; } .btn-ghost { background: transparent; color: var(--text-secondary); border: 1px solid var(--border); cursor: pointer; } .btn-ghost:hover { background: var(--bg-card-hover); color: var(--text-primary); border-color: var(--border-hover); } .btn-ghost:disabled, .btn-ghost[aria-disabled="true"] { background: transparent; color: var(--text-muted); border-color: var(--border); } .btn-warning { background: rgba(245, 158, 11, 0.15); color: #f59e0b; border: 1px solid rgba(245, 158, 11, 0.3); cursor: pointer; } .btn-warning:hover { background: #f59e0b; color: white; } .btn-danger { background: rgba(173, 39, 39, 0.15); color: #dd2222; border: 1px solid rgba(173, 39, 39, 0.3); cursor: pointer; } .btn-danger:hover { background: #ef4444; color: white; } .btn-success { background: rgba(16, 185, 129, 0.15); color: #10b981; border: 1px solid rgba(16, 185, 129, 0.3); cursor: pointer; } .btn-success:hover { background: #10b981; color: white; } .btn-normal { background: #e2e8f0; color: #121213; border: 1px solid rgba(255, 255, 255, 0.3); cursor: pointer; } .btn-normal:hover { background: #d7dadf; color: #0f172a; } /* Input styles */ .input { background: var(--bg-input); border: 1px solid var(--border); border-radius: 8px; padding: 8px 12px; color: var(--text-primary); font-size: 13px; font-family: var(--font--input); transition: all 0.2s ease; width: 100%; } .input:focus { outline: none; border-color: none; box-shadow: 0 0 0 1px rgba(59, 130, 246, 0.15); } .input::placeholder { color: var(--text-muted); } /* Modal overlay */ .modal-overlay { /* Match Bootstrap-like dialog margins and keep the dialog clear of viewport edges. */ --modal-viewport-gutter: clamp(16px, 3vw, 28px); position: fixed; inset: 0; background: rgba(0, 0, 0, 0.7); display: flex; align-items: center; justify-content: center; z-index: 1000; animation: slide-in 0.2s ease-out; padding: var(--modal-viewport-gutter); overflow-y: auto; overflow-x: hidden; box-sizing: border-box; isolation: isolate; contain: layout paint style; } .modal { position: relative; background: var(--bg-card); border: 1px solid var(--border); border-radius: 4px; box-sizing: border-box; padding: 24px; width: 100%; max-width: 480px; max-height: calc( 100dvh - var(--modal-viewport-gutter) - var(--modal-viewport-gutter) ); overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable; scrollbar-width: thin; scrollbar-color: var(--scrollbar-thumb) transparent; /* box-shadow: 0 18px 44px rgba(0, 0, 0, 0.45); */ contain: content; } .modal-shell { position: relative; width: 100%; max-width: 480px; min-width: 0; max-height: calc( 100dvh - var(--modal-viewport-gutter) - var(--modal-viewport-gutter) ); --modal-close-size: 28px; } /* Shared wide modal variant for long settings/forms. */ .modal-shell-wide { max-width: 780px; } .modal-overlay-wide { padding: var(--modal-viewport-gutter); } .modal-wide { width: 100%; max-width: none; max-height: calc( 100dvh - var(--modal-viewport-gutter) - var(--modal-viewport-gutter) ); box-sizing: border-box; } .modal-close { position: absolute; top: 5px; right: 5px; z-index: 5; display: inline-flex; width: var(--modal-close-size); height: var(--modal-close-size); min-width: var(--modal-close-size); flex: 0 0 var(--modal-close-size); align-items: center; justify-content: center; padding: 0; margin: 0; border: 2px solid rgba(255, 255, 255, 0.82) !important; border-radius: 50%; background: #2c2c2c !important; color: #ffffff !important; /* box-shadow: 0 14px 30px rgba(220, 38, 38, 0.34), 0 4px 14px rgba(2, 6, 23, 0.26); */ cursor: pointer; line-height: 1; transition: background 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease; transform: translate(50%, -50%); transition: all 0.4s ease; } .modal-close:hover { background: #b91c1c !important; /* box-shadow: 0 16px 36px rgba(220, 38, 38, 0.42), 0 6px 18px rgba(2, 6, 23, 0.28); */ transform: translate(50%, calc(-50% - 1px)) rotate(180deg); } .modal-close:disabled { cursor: not-allowed; opacity: 0.55; transform: translate(50%, -50%); } .modal-close:focus-visible { outline: 3px solid rgba(239, 68, 68, 0.3); outline-offset: 3px; } .modal-close svg { stroke-width: 2.25; } @media (max-width: 640px) { .modal-overlay { align-items: flex-start; --modal-viewport-gutter-top: max(16px, env(safe-area-inset-top)); --modal-viewport-gutter-right: max(16px, env(safe-area-inset-right)); --modal-viewport-gutter-bottom: max(16px, env(safe-area-inset-bottom)); --modal-viewport-gutter-left: max(16px, env(safe-area-inset-left)); padding: var(--modal-viewport-gutter-top) var(--modal-viewport-gutter-right) var(--modal-viewport-gutter-bottom) var(--modal-viewport-gutter-left); } .modal-shell { max-width: none; max-height: calc( 100dvh - var(--modal-viewport-gutter-top) - var(--modal-viewport-gutter-bottom) ); } .modal { max-height: calc( 100dvh - var(--modal-viewport-gutter-top) - var(--modal-viewport-gutter-bottom) ); padding: 20px !important; } .modal-overlay-wide { padding: var(--modal-viewport-gutter-top) var(--modal-viewport-gutter-right) var(--modal-viewport-gutter-bottom) var(--modal-viewport-gutter-left); } .modal-shell-wide { max-width: calc( 100vw - var(--modal-viewport-gutter-left) - var(--modal-viewport-gutter-right) ); } .modal-wide { padding: 20px !important; max-height: calc( 100dvh - var(--modal-viewport-gutter-top) - var(--modal-viewport-gutter-bottom) ); } .modal-close { --modal-close-size: 28px; } } .modal::-webkit-scrollbar { width: 12px; } .modal::-webkit-scrollbar-track { background: transparent; margin: 12px 6px 12px 0; } .modal::-webkit-scrollbar-thumb { background: var(--scrollbar-thumb); border-radius: 999px; border: 3px solid transparent; background-clip: padding-box; } .modal::-webkit-scrollbar-thumb:hover { background: var(--border-hover); border: 3px solid transparent; background-clip: padding-box; } /* Floating particles background */ .particles-bg { position: fixed; inset: 0; pointer-events: none; z-index: 0; overflow: hidden; } .particle { position: absolute; width: 4px; height: 4px; border-radius: 50%; background: rgba(59, 130, 246, 0.3); animation: float 4s ease-in-out infinite; } /* Terminal font */ .terminal-text { font-family: "JetBrains Mono", monospace; font-size: 12px; } .terminal-pane { cursor: text; } .terminal-pane .terminal-pane__xterm, .terminal-pane .xterm { width: 100%; height: 100%; } .terminal-pane .xterm-viewport, .terminal-pane .xterm-screen, .terminal-pane .xterm-helpers, .terminal-pane .xterm-helper-textarea, .terminal-pane .xterm-accessibility { width: 100%; height: 100%; } /* Tooltip */ .tooltip { position: relative; } .tooltip-content { position: absolute; top: calc(100% + 8px); left: 50%; transform: translateX(-50%) translateY(-2px); background: var(--bg-card); color: var(--text-primary); padding: 6px 10px; border-radius: 6px; font-size: 11px; line-height: 1.3; white-space: nowrap; border: 1px solid var(--border); pointer-events: none; opacity: 0; transition: opacity 0.15s, transform 0.15s; z-index: 100; box-shadow: 0 10px 24px rgba(15, 23, 42, 0.16); } .tooltip:hover .tooltip-content { opacity: 1; transform: translateX(-50%) translateY(0); }