:root { color-scheme: dark; --bg: #070a0f; --panel: #101722; --panel-2: #0b111b; --line: #1f2c3c; --line-strong: #345070; --text: #e8f0fb; --muted: #8ea2bd; --blue: #3276f6; --cyan: #19d4c2; --green: #16b981; --amber: #f0b54e; --red: #fb7185; --shadow: 0 18px 42px rgba(0, 0, 0, 0.28); } * { box-sizing: border-box; } body { margin: 0; overflow: hidden; background: linear-gradient(90deg, rgba(52, 118, 246, 0.07) 1px, transparent 1px), linear-gradient(180deg, rgba(25, 212, 194, 0.055) 1px, transparent 1px), radial-gradient(circle at 12% 0%, rgba(25, 212, 194, 0.13), transparent 28%), var(--bg); background-size: 72px 72px, 72px 72px, auto; color: var(--text); font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; letter-spacing: 0; } button, input, select { font: inherit; } button { cursor: pointer; } .topbar { height: 66px; display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 0 22px; border-bottom: 1px solid var(--line); background: rgba(7, 10, 15, 0.92); } .brand { display: flex; align-items: center; gap: 12px; min-width: 0; } .brand-mark { width: 30px; height: 30px; flex: 0 0 auto; border-radius: 8px; background: linear-gradient(135deg, var(--cyan), var(--blue)); box-shadow: 0 0 24px rgba(25, 212, 194, 0.24); } .brand h1 { margin: 0; font-size: 18px; line-height: 1.2; } .brand p { margin: 3px 0 0; color: var(--muted); font-size: 12px; } .top-actions { display: flex; align-items: center; gap: 10px; } .hidden { display: none !important; } .user-badge { max-width: 170px; overflow: hidden; color: var(--muted); font-size: 12px; text-overflow: ellipsis; white-space: nowrap; } .status-pill, .relation-badge { min-width: 82px; display: inline-flex; align-items: center; justify-content: center; height: 30px; padding: 0 12px; border: 1px solid var(--line); border-radius: 999px; color: var(--muted); font-size: 12px; font-weight: 700; white-space: nowrap; } .status-pill.online, .relation-badge.complete { border-color: rgba(22, 185, 129, 0.46); color: #a5f5d4; background: rgba(22, 185, 129, 0.08); } .status-pill.offline, .relation-badge.pacs_only, .relation-badge.stl_only, .relation-badge.list_only { border-color: rgba(251, 113, 133, 0.46); color: #fecdd3; background: rgba(251, 113, 133, 0.08); } .relation-badge.no_stl { border-color: rgba(240, 181, 78, 0.5); color: #ffe0a3; background: rgba(240, 181, 78, 0.08); } .dark-btn { height: 34px; padding: 0 14px; border: 1px solid var(--line); border-radius: 8px; background: var(--panel-2); color: var(--text); } .primary-btn, .link-btn { height: 34px; padding: 0 14px; border: 1px solid rgba(52, 118, 246, 0.72); border-radius: 8px; background: var(--blue); color: white; font-weight: 700; } .link-btn { height: 30px; border-color: rgba(25, 212, 194, 0.42); background: rgba(25, 212, 194, 0.12); color: #baf8ee; font-size: 12px; } .link-btn:disabled { cursor: not-allowed; opacity: 0.45; } .dark-btn:hover, .filter-grid button:hover { border-color: var(--line-strong); background: #172233; } .layout { height: calc(100vh - 66px); display: grid; grid-template-columns: 360px minmax(0, 1fr); gap: 14px; padding: 14px; } .sidebar, .content { min-height: 0; display: grid; gap: 12px; } .sidebar { grid-template-rows: auto minmax(0, 1fr); } .content { grid-template-rows: auto auto minmax(0, 1fr); } .panel { min-width: 0; border: 1px solid var(--line); border-radius: 8px; background: rgba(16, 23, 34, 0.9); box-shadow: var(--shadow); } .search-panel, .list-panel, .hero-panel, .segment-panel { padding: 14px; } .panel-head, .hero-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .panel-head h2, .hero-head h2 { margin: 0; font-size: 16px; } .panel-head span, .hero-head p { color: var(--muted); font-size: 12px; } .hero-head p { margin: 4px 0 0; } .search-input { width: 100%; height: 40px; margin-top: 12px; padding: 0 12px; border: 1px solid var(--line); border-radius: 8px; outline: 0; background: #080d15; color: var(--text); } .search-input:focus { border-color: rgba(52, 118, 246, 0.76); } .model-filters { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 10px; } .model-filters select { min-width: 0; height: 34px; padding: 0 10px; border: 1px solid var(--line); border-radius: 8px; outline: 0; background: #080d15; color: var(--text); } .model-filters select:focus { border-color: rgba(52, 118, 246, 0.76); } .filter-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 7px; margin-top: 10px; } .filter-grid button { height: 30px; border: 1px solid var(--line); border-radius: 7px; background: #0b111b; color: var(--muted); font-size: 12px; } .filter-grid button.active { border-color: var(--blue); color: white; background: rgba(52, 118, 246, 0.26); } .relation-list { height: 100%; overflow: auto; padding-right: 3px; } .relation-card { width: 100%; display: grid; gap: 7px; margin-bottom: 10px; padding: 12px; border: 1px solid transparent; border-radius: 8px; background: #0b111b; color: var(--text); text-align: left; } .relation-card.active { border-color: rgba(25, 212, 194, 0.82); background: #0e1823; } .relation-card strong, .relation-card span, .relation-card small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .relation-card strong { font-size: 15px; } .relation-card span, .relation-card small { color: var(--muted); font-size: 12px; } .card-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; } .mini-badge { flex: 0 0 auto; padding: 2px 7px; border: 1px solid var(--line); border-radius: 999px; color: var(--muted); font-size: 11px; } .mini-badge.complete { border-color: rgba(22, 185, 129, 0.5); color: #a5f5d4; } .mini-badge.no_stl { border-color: rgba(240, 181, 78, 0.5); color: #ffe0a3; } .mini-badge.pacs_only, .mini-badge.stl_only, .mini-badge.list_only { border-color: rgba(251, 113, 133, 0.48); color: #fecdd3; } .inline-tags { display: flex; min-width: 0; gap: 6px; overflow: hidden; } .inline-tags em { max-width: 96px; padding: 2px 7px; overflow: hidden; border: 1px solid rgba(25, 212, 194, 0.42); border-radius: 999px; color: #baf8ee; background: rgba(25, 212, 194, 0.08); font-size: 11px; font-style: normal; text-overflow: ellipsis; white-space: nowrap; } .subtle { color: var(--muted); font-size: 12px; } .metrics { display: grid; grid-template-columns: repeat(5, minmax(116px, 1fr)); gap: 10px; } .metric { min-height: 76px; padding: 13px; border: 1px solid var(--line); border-radius: 8px; background: rgba(11, 17, 27, 0.92); } .metric span { color: var(--muted); font-size: 12px; } .metric strong { display: block; margin-top: 8px; font-size: 24px; } .link-map { display: grid; grid-template-columns: minmax(180px, 1fr) 56px minmax(160px, 0.72fr) 56px minmax(180px, 1fr); align-items: center; gap: 8px; margin-top: 16px; } .link-node { min-height: 104px; display: grid; align-content: center; gap: 7px; padding: 14px; border: 1px solid var(--line); border-radius: 8px; background: #0b111b; } .link-node.ok { border-color: rgba(25, 212, 194, 0.55); background: rgba(25, 212, 194, 0.07); } .link-node.warn { border-color: rgba(240, 181, 78, 0.48); background: rgba(240, 181, 78, 0.06); } .link-node.missing { border-color: rgba(251, 113, 133, 0.45); background: rgba(251, 113, 133, 0.06); } .link-node span, .link-node em { color: var(--muted); font-size: 12px; font-style: normal; } .link-node strong { overflow: hidden; font-size: 20px; text-overflow: ellipsis; white-space: nowrap; } .ct-node { border-color: rgba(52, 118, 246, 0.68); background: rgba(52, 118, 246, 0.09); } .link-line { height: 2px; border-radius: 999px; background: linear-gradient(90deg, var(--line), rgba(25, 212, 194, 0.72), var(--line)); } .detail-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .detail-card { padding: 14px; } .detail-card h3, .detail-title h3 { margin: 0 0 12px; font-size: 15px; } .detail-title { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; } .detail-title h3 { margin: 0; } dl { display: grid; grid-template-columns: 96px minmax(0, 1fr); gap: 8px 10px; margin: 0; } dt { color: var(--muted); font-size: 12px; } dd { min-width: 0; margin: 0; overflow: hidden; color: var(--text); font-size: 12px; text-overflow: ellipsis; white-space: nowrap; } .segment-panel { min-height: 0; overflow: hidden; } .segment-groups { max-height: 100%; overflow: auto; margin-top: 12px; } .segment-group { display: grid; grid-template-columns: 150px minmax(0, 1fr); gap: 10px; padding: 10px 0; border-top: 1px solid var(--line); } .segment-group:first-child { border-top: 0; } .segment-group strong { color: #cfe0f5; font-size: 13px; } .segment-tags { display: flex; flex-wrap: wrap; gap: 7px; } .segment-tags em { max-width: 190px; padding: 4px 8px; overflow: hidden; border: 1px solid rgba(25, 212, 194, 0.32); border-radius: 999px; color: #baf8ee; background: rgba(25, 212, 194, 0.07); font-size: 12px; font-style: normal; text-overflow: ellipsis; white-space: nowrap; } .empty { margin: 18px 0 0; color: var(--muted); font-size: 13px; text-align: center; } .error-line { color: #fecdd3; font-size: 12px; } .login-overlay { position: fixed; inset: 0; z-index: 20; display: grid; place-items: center; padding: 22px; background: radial-gradient(circle at 30% 20%, rgba(25, 212, 194, 0.2), transparent 30%), rgba(7, 10, 15, 0.86); backdrop-filter: blur(8px); } .login-panel { width: min(420px, 100%); display: grid; gap: 12px; padding: 26px; border: 1px solid var(--line-strong); border-radius: 10px; background: rgba(11, 17, 27, 0.96); box-shadow: 0 24px 72px rgba(0, 0, 0, 0.45); } .login-panel h2 { margin: 4px 0 0; font-size: 20px; } .login-panel p { margin: 0 0 4px; color: var(--muted); font-size: 13px; } .settings-page { height: calc(100vh - 66px); padding: 14px; overflow: auto; } .settings-shell { max-width: 1180px; margin: 0 auto; padding: 18px; } .settings-head, .settings-title { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .settings-head h2, .settings-title h3 { margin: 0; } .settings-head p, .settings-title span { margin: 4px 0 0; color: var(--muted); font-size: 12px; } .settings-content { display: grid; gap: 14px; margin-top: 18px; } .settings-section { padding: 14px; border: 1px solid var(--line); border-radius: 8px; background: rgba(7, 10, 15, 0.55); } .settings-section.split { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 14px; } .settings-form { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) 130px 110px 110px; gap: 8px; margin: 14px 0; } .settings-form input, .settings-form select, .password-reset input { min-width: 0; height: 34px; padding: 0 10px; border: 1px solid var(--line); border-radius: 8px; outline: 0; background: #080d15; color: var(--text); } .settings-table { width: 100%; border-collapse: collapse; overflow: hidden; border-radius: 8px; background: #0b111b; } .settings-table th, .settings-table td { padding: 10px; border-bottom: 1px solid var(--line); color: var(--text); font-size: 12px; text-align: left; } .settings-table th { color: #b8c7dc; background: rgba(52, 118, 246, 0.08); } .password-reset { display: grid; grid-template-columns: minmax(0, 1fr) 64px; gap: 6px; } .password-reset button { border: 1px solid rgba(25, 212, 194, 0.42); border-radius: 8px; background: rgba(25, 212, 194, 0.1); color: #baf8ee; } .settings-dl { margin-top: 12px; } .role-grid { display: grid; gap: 8px; margin-top: 12px; } .role-card { display: grid; gap: 5px; padding: 10px; border: 1px solid var(--line); border-radius: 8px; background: #0b111b; } .role-card span { color: var(--muted); font-size: 12px; } @media (max-width: 1180px) { body { overflow: auto; } .layout { height: auto; grid-template-columns: 1fr; } .metrics, .detail-grid, .settings-section.split, .link-map { grid-template-columns: 1fr; } .settings-form { grid-template-columns: 1fr; } .link-line { width: 2px; height: 22px; margin: 0 auto; } }