:root { --bg: #050b14; --bg-deep: #02060c; --panel: rgba(8, 18, 32, 0.92); --panel-border: rgba(0, 168, 232, 0.22); --dell: #0076ce; --dell-bright: #00a8e8; --cyan: #3dffe0; --amber: #ffb020; --red: #ff5c5c; --green: #3dffa0; --text: #e8f4ff; --muted: #b7c9d9; --mono: "IBM Plex Mono", ui-monospace, monospace; --sans: "IBM Plex Sans", system-ui, sans-serif; --rail-w: 280px; --top-h: auto; --tick-h: 36px; --surface: rgba(10, 22, 38, 0.95); --surface-2: rgba(16, 32, 52, 0.9); --input-bg: rgba(0, 20, 40, 0.85); --shadow: 0 18px 50px rgba(0, 0, 0, 0.45); --topbar-bg: linear-gradient(180deg, rgba(0, 40, 70, 0.55), rgba(5, 11, 20, 0.9)); --app-glow: rgba(0, 118, 206, 0.12); --scrollbar-thumb: rgba(126, 240, 216, 0.45); --scrollbar-track: rgba(8, 16, 28, 0.85); } /* Light mode — default readable Dell studio look */ html[data-theme="light"] { --bg: #eef3f8; --bg-deep: #e4ebf2; --panel: rgba(255, 255, 255, 0.96); --panel-border: rgba(15, 50, 90, 0.14); --dell: #0076ce; --dell-bright: #0062b0; --cyan: #0a7a6a; --amber: #b86a00; --red: #c62828; --green: #1b7a4a; --text: #122033; --muted: #4a5d72; --surface: #ffffff; --surface-2: #f4f7fb; --input-bg: #ffffff; --shadow: 0 14px 36px rgba(20, 40, 70, 0.12); --topbar-bg: linear-gradient(180deg, #ffffff, #eef3f8); --app-glow: rgba(0, 118, 206, 0.06); --scrollbar-thumb: rgba(0, 118, 206, 0.35); --scrollbar-track: rgba(210, 220, 232, 0.9); } * { box-sizing: border-box; } html, body { height: 100%; margin: 0; background: var(--bg-deep); color: var(--text); font-family: var(--sans); } /* Themed scrollbars */ * { scrollbar-width: thin; scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track); } *::-webkit-scrollbar { width: 10px; height: 10px; } *::-webkit-scrollbar-track { background: var(--scrollbar-track); border-radius: 8px; } *::-webkit-scrollbar-thumb { background: var(--scrollbar-thumb); border-radius: 8px; border: 2px solid var(--scrollbar-track); background-clip: padding-box; } *::-webkit-scrollbar-thumb:hover { background: var(--dell); border: 2px solid var(--scrollbar-track); background-clip: padding-box; } *::-webkit-scrollbar-corner { background: var(--scrollbar-track); } button, input { font: inherit; color: inherit; } button { cursor: pointer; } .hidden { display: none !important; } #app { display: grid; grid-template-columns: var(--rail-w) 1fr var(--rail-w); grid-template-rows: auto 1fr auto; height: 100vh; background: radial-gradient(ellipse 80% 60% at 50% 40%, var(--app-glow), transparent 60%), var(--bg); } .topbar { grid-column: 1 / -1; display: flex; align-items: center; flex-wrap: wrap; gap: 0.65rem 1rem; padding: 0.55rem 1rem; min-height: 64px; border-bottom: 1px solid var(--panel-border); background: var(--topbar-bg); z-index: 5; overflow: visible; } .brand { display: flex; align-items: center; gap: 0.75rem; text-decoration: none; color: inherit; min-width: 260px; } .brand:hover .dell-logo { filter: brightness(1.15); } .dell-logo { display: block; height: 44px; width: 44px; object-fit: contain; border-radius: 50%; } .drawer-brand img { height: 28px !important; width: 28px !important; border-radius: 50%; object-fit: contain; } .inspector-empty .ghost-logo { width: 64px !important; height: 64px !important; border-radius: 50%; object-fit: contain; opacity: 0.35; } .brand-text h1 { margin: 0; font-size: 1.05rem; font-weight: 600; letter-spacing: 0.02em; } .brand-text h1 span { color: var(--dell-bright); font-weight: 700; } .brand-text p { margin: 0.1rem 0 0; font-family: var(--mono); font-size: 0.68rem; color: var(--muted); } .kpi-strip { flex: 1; display: flex; flex-wrap: wrap; gap: 0.3rem; overflow: visible; padding: 0.35rem 0; min-width: 0; justify-content: flex-start; align-content: center; } .kpi { appearance: none; border: 1px solid transparent; background: rgba(0, 118, 206, 0.12); border-radius: 6px; padding: 0.28rem 0.55rem; min-width: 0; flex: 0 1 auto; text-align: left; transition: border-color 0.15s, background 0.15s, transform 0.15s; } .kpi:hover { border-color: var(--dell-bright); background: rgba(0, 168, 232, 0.18); transform: translateY(-1px); } .kpi.active { border-color: var(--cyan); box-shadow: 0 0 0 1px rgba(61, 255, 224, 0.25); } .kpi .v { display: block; font-family: var(--mono); font-size: 0.88rem; font-weight: 600; color: var(--cyan); line-height: 1.1; white-space: nowrap; } .kpi .l { display: block; font-size: 0.58rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--muted); margin-top: 0.08rem; white-space: nowrap; } .kpi.warn .v { color: var(--amber); } .kpi.danger .v { color: var(--red); } .kpi.power .v { color: #7ec8ff; } .top-actions { display: flex; gap: 0.4rem; flex-shrink: 0; } .btn { border: 1px solid var(--panel-border); background: rgba(8, 22, 40, 0.8); border-radius: 6px; padding: 0.45rem 0.8rem; font-size: 0.8rem; font-weight: 500; color: var(--text); text-decoration: none; } a.btn { color: var(--text); } .btn:hover { border-color: var(--dell-bright); color: #fff; } .btn.primary { background: linear-gradient(135deg, var(--dell), #005a9e); border-color: #0a8ad8; color: #fff; } .btn.primary:hover { filter: brightness(1.08); } .btn.ghost { background: transparent; } .rail { background: var(--panel); border-right: 1px solid var(--panel-border); overflow-x: hidden; overflow-y: auto; padding: 0.75rem; z-index: 3; scrollbar-width: thin; scrollbar-color: rgba(0,168,232,0.35) transparent; } .rail .list { max-height: none; overflow: visible; } .rail.right { border-right: none; border-left: 1px solid var(--panel-border); } .rail-block { margin-bottom: 0.45rem; border: 1px solid rgba(0, 168, 232, 0.12); border-radius: 8px; background: rgba(0, 24, 44, 0.35); overflow: hidden; } .rail-toggle { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; appearance: none; border: none; background: transparent; color: var(--dell-bright); padding: 0.55rem 0.65rem; font-size: 0.68rem; letter-spacing: 0.12em; text-transform: uppercase; font-weight: 600; cursor: pointer; text-align: left; } .rail-toggle:hover { background: rgba(0, 118, 206, 0.12); color: #fff; } .rail-toggle .chev { width: 0.45rem; height: 0.45rem; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: rotate(-45deg); transition: transform 0.18s ease; flex-shrink: 0; opacity: 0.85; } .rail-block.open .rail-toggle .chev { transform: rotate(45deg); } .rail-panel { display: none; padding: 0 0.65rem 0.7rem; } .rail-block.open .rail-panel { display: block; } .rail-block h2 { margin: 0 0 0.2rem; font-size: 0.68rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--dell-bright); font-weight: 600; } .hint { margin: 0 0 0.55rem; font-size: 0.72rem; color: #c5d6e6; line-height: 1.35; } .chip-grid { display: flex; flex-wrap: wrap; gap: 0.35rem; } .chip { border: 1px solid rgba(126, 240, 216, 0.3); background: rgba(0, 40, 70, 0.55); border-radius: 999px; padding: 0.28rem 0.65rem; font-size: 0.72rem; color: #e8f4ff; } .chip:hover { color: #fff; border-color: var(--dell-bright); background: rgba(0, 118, 206, 0.28); } .chip.active { border-color: var(--cyan); color: #041018; background: var(--cyan); font-weight: 600; } .list { display: flex; flex-direction: column; gap: 0.35rem; } .card { appearance: none; text-align: left; width: 100%; border: 1px solid rgba(0, 168, 232, 0.15); background: rgba(0, 30, 55, 0.45); border-radius: 8px; padding: 0.55rem 0.65rem; transition: border-color 0.15s, background 0.15s; } .card:hover { border-color: var(--dell-bright); background: rgba(0, 80, 130, 0.25); } .card.active { border-color: var(--cyan); background: rgba(61, 255, 224, 0.08); box-shadow: inset 0 0 0 1px rgba(61, 255, 224, 0.15); } .card .t { display: block; font-size: 0.84rem; font-weight: 600; } .card .s { display: block; margin-top: 0.15rem; font-family: var(--mono); font-size: 0.68rem; color: var(--muted); } .filters { display: flex; flex-direction: column; gap: 0.4rem; margin-bottom: 0.6rem; } .toggle { display: flex; align-items: center; gap: 0.5rem; font-size: 0.78rem; color: var(--text); cursor: pointer; } .toggle input { accent-color: var(--dell-bright); } .range { display: flex; flex-direction: column; gap: 0.25rem; font-size: 0.72rem; color: var(--muted); margin-top: 0.25rem; } .range input { width: 100%; accent-color: var(--dell-bright); } .range em { color: var(--cyan); font-style: normal; font-family: var(--mono); } .search { width: 100%; border: 1px solid var(--panel-border); background: rgba(0, 20, 40, 0.6); border-radius: 6px; padding: 0.45rem 0.6rem; font-size: 0.78rem; outline: none; color: #e8f4ff; } .search::placeholder { color: #a8bdd0; opacity: 1; } .search:focus { border-color: var(--dell-bright); } .stage { position: relative; overflow: hidden; background: radial-gradient(circle at 50% 48%, rgba(0, 118, 206, 0.08), transparent 45%), repeating-radial-gradient(circle at 50% 48%, transparent 0, transparent 38px, rgba(0, 168, 232, 0.04) 39px, transparent 40px); } #topo { display: block; width: 100%; height: 100%; cursor: grab; } #topo:active { cursor: grabbing; } .stage-hud { position: absolute; left: 0.75rem; right: 0.75rem; bottom: 0.6rem; display: flex; justify-content: space-between; align-items: flex-end; pointer-events: none; gap: 1rem; } .legend { display: flex; flex-wrap: wrap; gap: 0.5rem; font-family: var(--mono); font-size: 0.65rem; color: var(--muted); background: rgba(2, 8, 16, 0.65); padding: 0.35rem 0.55rem; border-radius: 6px; border: 1px solid rgba(0, 168, 232, 0.15); } .legend span::before { content: ""; display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 0.35rem; background: var(--c, var(--muted)); vertical-align: middle; } .hint-bar { font-size: 0.65rem; color: rgba(122, 147, 168, 0.85); font-family: var(--mono); } .inspector-empty, .inspector-body { padding: 0.25rem; } .inspector-empty { text-align: center; padding-top: 2.5rem; color: var(--muted); } .inspector-empty .ghost-logo { width: 72px; opacity: 0.25; margin-bottom: 0.75rem; } .inspector-empty h2 { color: var(--dell-bright); font-size: 0.9rem; letter-spacing: 0.08em; text-transform: uppercase; } .inspector-empty p { font-size: 0.8rem; line-height: 1.45; } .insp-head { margin-bottom: 0.85rem; } .insp-head h2 { margin: 0; font-size: 1rem; word-break: break-word; } .insp-head .meta { margin: 0.25rem 0 0; font-family: var(--mono); font-size: 0.7rem; color: var(--muted); } .badge-row { display: flex; flex-wrap: wrap; gap: 0.3rem; margin: 0.55rem 0; } .badge { font-size: 0.65rem; font-family: var(--mono); padding: 0.2rem 0.45rem; border-radius: 4px; border: 1px solid var(--panel-border); color: var(--muted); } .badge.on { color: var(--green); border-color: rgba(61, 255, 160, 0.4); } .badge.off { color: var(--red); border-color: rgba(255, 92, 92, 0.4); } .badge.power { color: #7ec8ff; border-color: rgba(126, 200, 255, 0.4); } .kv { display: grid; gap: 0.35rem; margin: 0.6rem 0; } .kv-row { display: grid; grid-template-columns: 96px 1fr; gap: 0.4rem; font-size: 0.75rem; padding: 0.3rem 0; border-bottom: 1px solid rgba(0, 168, 232, 0.08); } .kv-row .k { color: var(--muted); } .kv-row .v { font-family: var(--mono); word-break: break-all; } .kv-row a { color: var(--dell-bright); } .action-stack { display: flex; flex-direction: column; gap: 0.35rem; margin-top: 0.75rem; } .action-stack .btn { width: 100%; text-align: center; } .inv-section { margin-top: 0.9rem; } .inv-section h3 { margin: 0 0 0.35rem; font-size: 0.68rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--dell-bright); } .inv-line { font-family: var(--mono); font-size: 0.68rem; color: var(--muted); padding: 0.2rem 0; border-bottom: 1px solid rgba(255, 255, 255, 0.04); } .ticker { grid-column: 1 / -1; display: flex; align-items: center; flex-wrap: wrap; gap: 0.35rem 1rem; padding: 0.35rem 1rem; border-top: 1px solid var(--panel-border); background: rgba(2, 8, 16, 0.95); font-family: var(--mono); font-size: 0.7rem; color: var(--muted); overflow: hidden; } .ticker button { appearance: none; border: none; background: none; color: var(--cyan); padding: 0; font: inherit; } .ticker button:hover { text-decoration: underline; color: #fff; } .ticker .sep { opacity: 0.35; } .drawer { position: fixed; top: 0; right: 0; width: min(520px, 100vw); height: 100vh; background: #0a121c; border-left: 1px solid var(--panel-border); z-index: 40; transform: translateX(105%); transition: transform 0.28s ease; display: flex; flex-direction: column; } .drawer.open { transform: translateX(0); } .drawer-head { display: flex; align-items: center; justify-content: space-between; padding: 0.65rem 0.85rem; border-bottom: 1px solid var(--panel-border); } .drawer-brand { display: flex; align-items: center; gap: 0.55rem; font-weight: 600; } .drawer-brand img { height: 22px; width: auto; } #ai-frame { flex: 1; border: 0; width: 100%; background: #111; } .scrim { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.45); z-index: 30; opacity: 0; pointer-events: none; transition: opacity 0.25s; } .scrim.open { opacity: 1; pointer-events: auto; } @media (max-width: 1100px) { #app { grid-template-columns: 240px 1fr; grid-template-rows: auto 1fr auto; } .rail.right { grid-column: 1 / -1; grid-row: 3; max-height: 220px; border-left: none; border-top: 1px solid var(--panel-border); } .ticker { grid-row: 4; } } /* Visualization layout picker */ .viz-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem; } .viz-card { appearance: none; border: 1px solid rgba(0, 168, 232, 0.18); background: rgba(0, 30, 55, 0.55); border-radius: 8px; padding: 0.5rem 0.45rem; text-align: left; color: var(--muted); transition: border-color 0.15s, background 0.15s, transform 0.15s; display: flex; flex-direction: column; gap: 0.08rem; min-height: 64px; } .viz-card:nth-child(5) { grid-column: 1 / -1; } .viz-card:hover { border-color: var(--dell-bright); color: var(--text); transform: translateY(-1px); } .viz-card.active { border-color: var(--cyan); background: rgba(61, 255, 224, 0.1); color: var(--text); box-shadow: inset 0 0 0 1px rgba(61, 255, 224, 0.2); } .viz-ico { font-size: 0.95rem; color: var(--dell-bright); line-height: 1; } .viz-card.active .viz-ico { color: var(--cyan); } .viz-t { font-size: 0.78rem; font-weight: 600; color: inherit; } .viz-s { font-family: var(--mono); font-size: 0.58rem; color: var(--muted); letter-spacing: 0.02em; } /* Realtime context */ .ctx-bar { position: absolute; top: 0.6rem; left: 0.75rem; right: 0.75rem; z-index: 4; display: flex; flex-wrap: wrap; gap: 0.45rem 0.85rem; align-items: center; justify-content: space-between; pointer-events: none; font-family: var(--mono); font-size: 0.68rem; } .ctx-live, .ctx-focus { pointer-events: none; background: rgba(2, 10, 20, 0.72); border: 1px solid rgba(0, 168, 232, 0.22); border-radius: 6px; padding: 0.35rem 0.6rem; color: var(--muted); max-width: 100%; } .ctx-live { display: flex; align-items: center; gap: 0.45rem; color: var(--text); } .pulse-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--cyan); box-shadow: 0 0 0 0 rgba(61, 255, 224, 0.55); animation: pulse-ring 1.6s ease-out infinite; flex-shrink: 0; } @keyframes pulse-ring { 0% { box-shadow: 0 0 0 0 rgba(61, 255, 224, 0.45); } 70% { box-shadow: 0 0 0 8px rgba(61, 255, 224, 0); } 100% { box-shadow: 0 0 0 0 rgba(61, 255, 224, 0); } } .ctx-focus { color: var(--dell-bright); } .ctx-feed { position: absolute; right: 0.75rem; bottom: 2.4rem; width: min(340px, calc(100% - 1.5rem)); max-height: 42%; z-index: 4; background: rgba(2, 10, 20, 0.82); border: 1px solid rgba(0, 168, 232, 0.22); border-radius: 8px; backdrop-filter: blur(6px); display: flex; flex-direction: column; overflow: hidden; pointer-events: auto; } .ctx-feed-head { display: flex; justify-content: space-between; align-items: center; padding: 0.45rem 0.65rem; border-bottom: 1px solid rgba(0, 168, 232, 0.15); font-size: 0.68rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--dell-bright); } .ctx-feed-head span { text-transform: none; letter-spacing: 0; color: var(--muted); font-family: var(--mono); font-size: 0.62rem; } .ctx-feed-body { overflow-y: auto; max-height: 220px; padding: 0.25rem; scrollbar-width: thin; } .feed-item { appearance: none; width: 100%; text-align: left; border: none; background: transparent; border-radius: 6px; padding: 0.4rem 0.5rem; color: var(--text); cursor: pointer; border-left: 2px solid transparent; } .feed-item:hover { background: rgba(0, 118, 206, 0.15); } .feed-item.critical { border-left-color: var(--red); } .feed-item.warning { border-left-color: var(--amber); } .feed-item.info { border-left-color: var(--cyan); } .feed-item .ft { display: block; font-size: 0.72rem; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .feed-item .fm { display: block; margin-top: 0.12rem; font-family: var(--mono); font-size: 0.62rem; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .feed-item .fs { display: block; margin-top: 0.1rem; font-size: 0.58rem; color: rgba(122, 147, 168, 0.9); font-family: var(--mono); } .ctx-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 0.35rem; margin-bottom: 0.55rem; } .ctx-stat { appearance: none; border: 1px solid rgba(0, 168, 232, 0.18); background: rgba(0, 30, 55, 0.45); border-radius: 6px; padding: 0.4rem 0.45rem; text-align: left; color: inherit; } .ctx-stat:hover { border-color: var(--dell-bright); } .ctx-stat .v { display: block; font-family: var(--mono); font-size: 0.9rem; font-weight: 600; color: var(--cyan); } .ctx-stat.warn .v { color: var(--amber); } .ctx-stat.danger .v { color: var(--red); } .ctx-stat .l { display: block; font-size: 0.58rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--muted); margin-top: 0.1rem; } .alert-card .t { font-size: 0.78rem; } .alert-card .s { white-space: normal; line-height: 1.3; } /* Hover context tip */ .node-tip { position: fixed; z-index: 50; min-width: 200px; max-width: 280px; padding: 0.65rem 0.75rem; border-radius: 10px; background: rgba(4, 14, 28, 0.94); border: 1px solid rgba(0, 168, 232, 0.35); box-shadow: 0 12px 40px rgba(0, 0, 0, 0.45), 0 0 0 1px rgba(61, 255, 224, 0.08); pointer-events: none; backdrop-filter: blur(8px); transform: translate(12px, 12px); } .node-tip .nt-name { font-size: 0.82rem; font-weight: 600; margin: 0 0 0.2rem; word-break: break-word; } .node-tip .nt-meta { font-family: var(--mono); font-size: 0.62rem; color: var(--muted); margin: 0; line-height: 1.45; } .node-tip .nt-hint { margin: 0.45rem 0 0; font-size: 0.6rem; color: var(--dell-bright); letter-spacing: 0.04em; text-transform: uppercase; } /* Connect / context modal */ .modal { position: fixed; inset: 0; z-index: 60; display: grid; place-items: center; padding: 1rem; } .modal.hidden { display: none !important; } .modal-card { position: relative; width: min(520px, 100%); background: radial-gradient(ellipse 80% 60% at 10% 0%, rgba(0, 118, 206, 0.28), transparent 55%), rgba(6, 14, 26, 0.97); border: 1px solid rgba(0, 168, 232, 0.35); border-radius: 16px; padding: 1.15rem 1.2rem 1rem; box-shadow: 0 24px 80px rgba(0, 0, 0, 0.55); animation: modal-in 0.22s ease-out; } @keyframes modal-in { from { opacity: 0; transform: translateY(12px) scale(0.98); } to { opacity: 1; transform: none; } } .modal-close { position: absolute; top: 0.55rem; right: 0.65rem; appearance: none; border: none; background: transparent; color: var(--muted); font-size: 1.4rem; line-height: 1; padding: 0.2rem 0.45rem; border-radius: 6px; } .modal-close:hover { color: #fff; background: rgba(255,255,255,0.06); } .modal-brand { display: flex; gap: 0.75rem; align-items: center; margin-bottom: 0.75rem; padding-right: 1.5rem; } .modal-brand img { width: 40px; height: 40px; border-radius: 50%; } .modal-kicker { margin: 0; font-size: 0.62rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--dell-bright); } .modal-brand h2 { margin: 0.1rem 0 0; font-size: 1.05rem; word-break: break-word; } .modal-sub { margin: 0.15rem 0 0; font-family: var(--mono); font-size: 0.7rem; color: var(--muted); } .modal-badges { display: flex; flex-wrap: wrap; gap: 0.3rem; margin-bottom: 0.75rem; } .modal-context { display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem; margin-bottom: 0.9rem; } .modal-ctx-item { border: 1px solid rgba(0, 168, 232, 0.15); background: rgba(0, 30, 55, 0.4); border-radius: 8px; padding: 0.45rem 0.55rem; } .modal-ctx-item .k { display: block; font-size: 0.58rem; text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); } .modal-ctx-item .v { display: block; margin-top: 0.15rem; font-family: var(--mono); font-size: 0.75rem; color: var(--text); word-break: break-all; } .connect-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.5rem; } .connect-tile { appearance: none; text-align: left; border: 1px solid rgba(0, 168, 232, 0.22); background: rgba(0, 40, 70, 0.45); border-radius: 12px; padding: 0.75rem 0.8rem; color: var(--text); transition: border-color 0.15s, transform 0.15s, background 0.15s; min-height: 88px; display: flex; flex-direction: column; gap: 0.2rem; text-decoration: none; cursor: pointer; } .connect-tile:hover { border-color: var(--cyan); background: rgba(0, 118, 206, 0.22); transform: translateY(-2px); } .connect-tile.primary { border-color: rgba(0, 168, 232, 0.55); background: linear-gradient(145deg, rgba(0, 118, 206, 0.45), rgba(0, 40, 70, 0.55)); } .connect-tile .ct-ico { font-size: 1.1rem; color: var(--cyan); line-height: 1; } .connect-tile .ct-t { font-size: 0.88rem; font-weight: 600; } .connect-tile .ct-s { font-family: var(--mono); font-size: 0.62rem; color: var(--muted); line-height: 1.35; } .modal-foot { margin: 0.75rem 0 0; font-size: 0.62rem; color: var(--muted); line-height: 1.4; } .toast { position: fixed; bottom: 3.2rem; left: 50%; transform: translateX(-50%); z-index: 70; background: rgba(0, 40, 70, 0.95); border: 1px solid var(--cyan); color: var(--text); padding: 0.55rem 0.9rem; border-radius: 8px; font-family: var(--mono); font-size: 0.72rem; pointer-events: none; opacity: 0; transition: opacity 0.2s; } .toast.show { opacity: 1; } /* SSH / iDRAC action text only — high-visibility orange */ .conn-link, a.conn-link, .action-stack a.conn-link { color: #ff9a3c !important; } .conn-link:hover, a.conn-link:hover { color: #ffc078 !important; text-decoration: underline; } .connect-tile.conn-link .ct-t, .connect-tile.conn-link .ct-s, .connect-tile.conn-link .ct-ico { color: #ff9a3c; } .connect-tile.conn-link:hover .ct-t, .connect-tile.conn-link:hover .ct-ico { color: #ffc078; } /* Feed dock control */ .ctx-feed-head { cursor: grab; gap: 0.5rem; } .ctx-feed-head .feed-dock { margin-left: auto; appearance: none; border: 1px solid rgba(0,168,232,0.25); background: rgba(0,40,70,0.5); color: var(--text); border-radius: 4px; width: 24px; height: 22px; line-height: 1; cursor: pointer; } .ctx-feed-head .feed-dock:hover { border-color: var(--cyan); color: var(--cyan); } /* V100 GPU matrix */ .gpu-summary { font-family: var(--mono); font-size: 0.68rem; color: var(--muted); margin-bottom: 0.45rem; line-height: 1.4; } .gpu-summary strong { color: var(--cyan); } .gpu-matrix { display: flex; flex-direction: column; gap: 0.4rem; } .gpu-card { border: 1px solid rgba(0,168,232,0.18); background: rgba(0,30,55,0.45); border-radius: 8px; padding: 0.45rem 0.5rem; } .gpu-card.busy { border-color: rgba(255,154,60,0.55); box-shadow: 0 0 0 1px rgba(255,154,60,0.15); } .gpu-top { display: flex; justify-content: space-between; font-family: var(--mono); font-size: 0.7rem; color: var(--text); } .gpu-bar { margin-top: 0.3rem; height: 6px; border-radius: 99px; background: rgba(255,255,255,0.06); overflow: hidden; } .gpu-bar i { display: block; height: 100%; background: linear-gradient(90deg, #00a8e8, #3dffe0 55%, #ff9a3c); border-radius: 99px; transition: width 0.35s ease; } .gpu-card.busy .gpu-bar i { background: linear-gradient(90deg, #ff9a3c, #ff5c5c); } .gpu-meta, .gpu-name { margin-top: 0.25rem; font-family: var(--mono); font-size: 0.58rem; color: var(--muted); } .drawer.chat-copilot { width: min(560px, 100vw); } .chat-gpu { flex-shrink: 0; padding: 0.55rem 0.85rem 0.65rem; border-bottom: 1px solid var(--panel-border); background: linear-gradient(180deg, rgba(0, 40, 70, 0.55), rgba(8, 16, 28, 0.9)); } .chat-gpu-head { display: flex; align-items: baseline; justify-content: space-between; gap: 0.5rem; margin-bottom: 0.35rem; } .chat-gpu-head strong { font-size: 0.78rem; letter-spacing: 0.02em; } .chat-gpu-host { font-size: 0.65rem; color: var(--muted); font-family: var(--mono); } .chat-gpu-matrix { display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem; max-height: 168px; overflow-y: auto; } .chat-gpu-matrix .gpu-card { padding: 0.35rem 0.45rem; } .chat-gpu-matrix .gpu-name { display: none; } /* Chat drawer */ .chat-body { flex: 1; overflow-y: auto; padding: 0.85rem; display: flex; flex-direction: column; gap: 0.55rem; background: rgba(2,8,16,0.85); } .chat-bubble { max-width: 92%; padding: 0.55rem 0.7rem; border-radius: 10px; font-size: 0.8rem; line-height: 1.4; white-space: pre-wrap; } .chat-bubble.user { align-self: flex-end; background: rgba(0,118,206,0.35); border: 1px solid rgba(0,168,232,0.35); } .chat-tools { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-top: 0.55rem; } .chat-tool-chip { font-size: 0.68rem; letter-spacing: 0.02em; padding: 0.15rem 0.45rem; border-radius: 4px; background: rgba(14, 98, 176, 0.18); border: 1px solid rgba(14, 98, 176, 0.45); color: #9ec5e8; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; } .chat-bubble.assistant { align-self: flex-start; background: rgba(0,40,70,0.55); border: 1px solid rgba(61,255,224,0.2); } .chat-form { display: flex; gap: 0.4rem; padding: 0.65rem; border-top: 1px solid var(--panel-border); } .chat-form input { flex: 1; border: 1px solid var(--panel-border); background: rgba(0,20,40,0.7); border-radius: 6px; padding: 0.5rem 0.65rem; outline: none; } .chat-form input:focus { border-color: var(--dell-bright); } /* Ops desk */ .drawer.wide { width: min(780px, 100vw); } .ops-layout { flex: 1; display: grid; grid-template-columns: 240px 1fr; min-height: 0; } .ops-side { border-right: 1px solid var(--panel-border); padding: 0.75rem; overflow-y: auto; display: flex; flex-direction: column; gap: 0.55rem; } .ops-identity { display: flex; flex-direction: column; gap: 0.3rem; font-size: 0.72rem; color: var(--muted); } .ops-identity select { border: 1px solid var(--panel-border); background: rgba(0,20,40,0.7); border-radius: 6px; padding: 0.4rem; color: var(--text); } .ops-main { overflow-y: auto; padding: 0.85rem; } .ops-empty h3 { margin: 0 0 0.35rem; color: var(--dell-bright); } .ops-ticket-head h3 { margin: 0 0 0.25rem; font-size: 1rem; } .ops-actions { display: flex; flex-wrap: wrap; gap: 0.3rem; margin: 0.5rem 0 0.75rem; } .ops-msgs { display: flex; flex-direction: column; gap: 0.55rem; margin-bottom: 0.75rem; } .ops-msg { border: 1px solid rgba(0,168,232,0.15); background: rgba(0,30,55,0.35); border-radius: 8px; padding: 0.55rem 0.65rem; } .ops-msg p { margin: 0.35rem 0 0; font-size: 0.8rem; line-height: 1.4; } .ops-time { margin-left: 0.45rem; font-family: var(--mono); font-size: 0.62rem; color: var(--muted); } .ops-reply textarea { width: 100%; border: 1px solid var(--panel-border); background: rgba(0,20,40,0.7); border-radius: 6px; padding: 0.5rem; color: var(--text); resize: vertical; margin-bottom: 0.4rem; } .drawer { display: flex; flex-direction: column; } .feed-docks { margin-left: auto; display: inline-flex; gap: 0.25rem; } .ctx-feed-head .feed-dock { margin-left: 0; } /* Collapsible live feed */ .ctx-feed.collapsed { max-height: none; height: auto; bottom: 0.55rem !important; width: auto; min-width: 0; right: 0.75rem; overflow: hidden; /* backdrop-filter ghosts collapsed body text in Chromium */ backdrop-filter: none; -webkit-backdrop-filter: none; background: rgba(2, 14, 28, 0.92); } .ctx-feed.collapsed .ctx-feed-body { display: none !important; visibility: hidden !important; height: 0 !important; max-height: 0 !important; overflow: hidden !important; padding: 0 !important; margin: 0 !important; opacity: 0 !important; pointer-events: none !important; position: absolute !important; left: -9999px !important; width: 0 !important; } .ctx-feed.collapsed .ctx-feed-head { border-bottom: none; padding: 0.4rem 0.55rem; cursor: pointer; } .ctx-feed.collapsed .ctx-feed-head strong { letter-spacing: 0.06em; } .ctx-feed.collapsed #ctx-feed-meta { display: none !important; } .feed-dock.hidden { display: none !important; } /* Keep legend/hint clear of collapsed feed chip */ .stage.feed-collapsed .stage-hud { right: 12rem; } /* Alert triage popup */ .triage-card { width: min(920px, 96vw); max-height: min(86vh, 820px); display: flex; flex-direction: column; padding-bottom: 0.85rem; } .triage-toolbar { display: flex; flex-direction: column; gap: 0.45rem; margin-bottom: 0.65rem; } .triage-layout { display: grid; grid-template-columns: 1.1fr 1fr; gap: 0.65rem; min-height: 0; flex: 1; overflow: hidden; } .triage-list { overflow-y: auto; max-height: min(54vh, 480px); display: flex; flex-direction: column; gap: 0.35rem; padding-right: 0.15rem; } .triage-detail { overflow-y: auto; max-height: min(54vh, 480px); border: 1px solid rgba(0,168,232,0.2); border-radius: 10px; background: rgba(0, 24, 44, 0.55); padding: 0.75rem; } .triage-item { appearance: none; text-align: left; width: 100%; border: 1px solid rgba(0,168,232,0.16); background: rgba(0,30,55,0.45); border-radius: 8px; padding: 0.55rem 0.65rem; color: var(--text); border-left: 3px solid transparent; cursor: pointer; } .triage-item:hover { border-color: var(--dell-bright); } .triage-item.active { border-color: var(--cyan); background: rgba(61,255,224,0.08); } .triage-item.critical { border-left-color: var(--red); } .triage-item.warning { border-left-color: var(--amber); } .triage-item.info { border-left-color: var(--cyan); } .triage-item .ti-top { display: flex; justify-content: space-between; gap: 0.4rem; font-size: 0.78rem; font-weight: 600; } .triage-item .ti-msg { margin-top: 0.2rem; font-size: 0.68rem; color: var(--muted); line-height: 1.35; } .triage-item .ti-meta { margin-top: 0.25rem; font-family: var(--mono); font-size: 0.58rem; color: rgba(122,147,168,0.95); } .triage-detail h3 { margin: 0 0 0.35rem; font-size: 0.95rem; word-break: break-word; } .triage-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem; margin-top: 0.75rem; } .triage-actions .btn { width: 100%; text-align: center; font-size: 0.75rem; } .triage-group-label { font-size: 0.62rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--dell-bright); margin: 0.35rem 0 0.2rem; font-weight: 600; } @media (max-width: 800px) { .triage-layout { grid-template-columns: 1fr; } } /* Chat context integration */ .chat-context { display: flex; flex-wrap: wrap; gap: 0.35rem; padding: 0.55rem 0.75rem 0.2rem; border-bottom: 1px solid rgba(0,168,232,0.12); } .chat-ctx-pill { font-family: var(--mono); font-size: 0.62rem; color: var(--cyan); border: 1px solid rgba(0,168,232,0.28); background: rgba(0,40,70,0.45); border-radius: 999px; padding: 0.2rem 0.55rem; } .chat-model-wrap { display: inline-flex; align-items: center; gap: 0.35rem; font-size: 0.62rem; color: var(--muted); } .chat-model-label { text-transform: uppercase; letter-spacing: 0.06em; } .chat-model-select { appearance: none; border: 1px solid rgba(0,168,232,0.35); background: rgba(0,40,70,0.65); color: var(--cyan); border-radius: 999px; padding: 0.22rem 1.6rem 0.22rem 0.65rem; font-family: var(--mono); font-size: 0.68rem; cursor: pointer; background-image: linear-gradient(45deg, transparent 50%, var(--cyan) 50%), linear-gradient(135deg, var(--cyan) 50%, transparent 50%); background-position: calc(100% - 14px) 55%, calc(100% - 9px) 55%; background-size: 5px 5px, 5px 5px; background-repeat: no-repeat; max-width: 220px; } .chat-model-select:hover, .chat-model-select:focus { border-color: var(--cyan); outline: none; color: #fff; } .chat-quick { display: flex; flex-wrap: wrap; gap: 0.3rem; padding: 0.45rem 0.75rem; } .chat-quick button { appearance: none; border: 1px solid rgba(0,168,232,0.22); background: rgba(0,30,55,0.5); color: var(--muted); border-radius: 999px; padding: 0.25rem 0.6rem; font-size: 0.68rem; cursor: pointer; } .chat-quick button:hover { color: #fff; border-color: var(--cyan); } /* Ticket create modal */ .ticket-card { width: min(560px, 96vw); } .ticket-form { display: flex; flex-direction: column; gap: 0.7rem; } .ticket-form label { display: flex; flex-direction: column; gap: 0.3rem; font-size: 0.72rem; color: var(--muted); letter-spacing: 0.04em; text-transform: uppercase; } .ticket-form input, .ticket-form select, .ticket-form textarea { border: 1px solid rgba(0,168,232,0.25); background: rgba(0, 18, 36, 0.85); border-radius: 8px; padding: 0.55rem 0.65rem; color: var(--text); font: inherit; text-transform: none; letter-spacing: 0; font-size: 0.85rem; } .ticket-form textarea { resize: vertical; line-height: 1.4; } .ticket-form input:focus, .ticket-form select:focus, .ticket-form textarea:focus { outline: none; border-color: var(--cyan); box-shadow: 0 0 0 2px rgba(61,255,224,0.12); } .ticket-form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 0.55rem; } .ticket-form-actions { display: flex; justify-content: flex-end; gap: 0.45rem; margin-top: 0.25rem; } /* Richer ops desk */ .ops-filters { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem; margin: 0.45rem 0 0.35rem; } .ops-filters select { flex: 1; min-width: 120px; width: auto; border: 1px solid var(--panel-border); background: rgba(0,20,40,0.7); border-radius: 6px; padding: 0.4rem; color: var(--text); font-size: 0.75rem; } .ops-count { font-size: 0.65rem; color: var(--muted); font-family: var(--mono); white-space: nowrap; } .ops-nav { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; margin-bottom: 0.65rem; padding-bottom: 0.5rem; border-bottom: 1px solid var(--panel-border); } .ops-nav-pos { font-family: var(--mono); font-size: 0.72rem; color: var(--muted); } .ops-nav .btn:disabled { opacity: 0.35; cursor: not-allowed; } .ops-body-box { margin: 0 0 0.75rem; padding: 0.65rem 0.75rem; border-radius: 8px; background: rgba(0, 30, 55, 0.35); border: 1px solid rgba(0, 168, 232, 0.14); } .ops-body-box h4 { margin: 0 0 0.3rem; font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--muted); } .ops-body-text { margin: 0; white-space: pre-wrap; font-size: 0.82rem; line-height: 1.45; } .ops-ticket-head { border: 1px solid rgba(0,168,232,0.18); background: rgba(0,30,55,0.4); border-radius: 10px; padding: 0.75rem; margin-bottom: 0.75rem; } .ops-meta-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem; margin: 0.55rem 0; } .ops-meta-grid div { border: 1px solid rgba(0,168,232,0.12); border-radius: 6px; padding: 0.35rem 0.45rem; font-size: 0.72rem; } .ops-meta-grid span { display:block; color: var(--muted); font-size: 0.58rem; text-transform: uppercase; letter-spacing: 0.05em; } .ops-toolbar { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-top: 0.55rem; } .ops-toolbar .btn { font-size: 0.72rem; padding: 0.35rem 0.55rem; } .ops-toolbar select { border: 1px solid var(--panel-border); background: rgba(0,20,40,0.7); border-radius: 6px; color: var(--text); padding: 0.3rem 0.4rem; font-size: 0.72rem; } .card .s .st-open { color: var(--amber); } .card .s .st-accepted, .card .s .st-in_progress { color: var(--cyan); } .card .s .st-resolved, .card .s .st-closed { color: var(--muted); } .btn.danger { border-color: rgba(255,92,92,0.45); color: #ff8f8f; } .btn.danger:hover { background: rgba(255,92,92,0.15); color: #fff; } .filter-actions { display: flex; justify-content: flex-end; margin: 0.35rem 0 0.45rem; } .btn.compact { padding: 0.25rem 0.55rem; font-size: 0.68rem; } #notify-stack { position: fixed; top: 4.6rem; right: 1rem; z-index: 80; display: flex; flex-direction: column; gap: 0.45rem; width: min(360px, calc(100vw - 2rem)); pointer-events: none; } .notify-card { pointer-events: auto; appearance: none; text-align: left; border: 1px solid rgba(0,168,232,0.35); background: rgba(4, 18, 34, 0.94); color: var(--text); border-radius: 10px; padding: 0.65rem 0.75rem; box-shadow: 0 10px 28px rgba(0,0,0,0.35); opacity: 0; transform: translateX(18px); transition: opacity 0.25s ease, transform 0.25s ease; cursor: pointer; } .notify-card.show { opacity: 1; transform: translateX(0); } .notify-card.critical { border-color: rgba(61,255,224,0.55); } .notify-card.warning { border-color: rgba(255,176,32,0.55); } .notify-card .nc-kicker { display: block; font-size: 0.62rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--cyan); margin-bottom: 0.2rem; } .notify-card .nc-title { display: block; font-size: 0.86rem; margin-bottom: 0.2rem; } .notify-card .nc-text { display: block; font-family: var(--mono); font-size: 0.68rem; color: var(--muted); line-height: 1.35; } .notify-card .nc-meta { display: block; margin-top: 0.3rem; font-size: 0.6rem; color: rgba(122,147,168,0.85); font-family: var(--mono); } .toast.toast-alert { border-color: rgba(61,255,224,0.55); background: rgba(0, 60, 90, 0.95); color: #fff; font-weight: 600; } .inv-section h3 { color: var(--dell-bright); } .ssh-card { width: min(920px, 96vw); max-height: min(90vh, 860px); display: flex; flex-direction: column; } .ssh-status { margin: 0.35rem 0 0.75rem; font-family: var(--mono); font-size: 0.72rem; color: var(--muted); } .ssh-status.ok { color: var(--cyan); } .ssh-status.error { color: #ff7a7a; } .ssh-status.info { color: var(--dell-bright); } .ssh-login { margin-bottom: 0.5rem; } .ssh-grid { display: grid; grid-template-columns: 1.4fr 0.6fr; gap: 0.55rem 0.65rem; margin-bottom: 0.7rem; } .ssh-grid label { display: flex; flex-direction: column; gap: 0.25rem; font-size: 0.68rem; letter-spacing: 0.04em; text-transform: uppercase; color: var(--muted); } .ssh-grid label:nth-child(3), .ssh-grid label:nth-child(4) { grid-column: 1 / -1; } .ssh-grid input { appearance: none; border: 1px solid var(--panel-border); background: rgba(0, 20, 40, 0.7); border-radius: 6px; padding: 0.5rem 0.6rem; color: var(--text); font-family: var(--mono); font-size: 0.84rem; text-transform: none; letter-spacing: 0; } .ssh-grid input:focus { outline: none; border-color: var(--cyan); } .ssh-actions { display: flex; gap: 0.45rem; flex-wrap: wrap; } .ssh-term-wrap { flex: 1; min-height: 360px; border: 1px solid rgba(0,168,232,0.22); border-radius: 8px; overflow: hidden; background: #071018; } .ssh-term { height: min(52vh, 520px); padding: 0.35rem; } .ssh-term .xterm { height: 100%; } .ssh-term .xterm-viewport { overflow-y: auto !important; } @media (max-width: 700px) { .ssh-grid { grid-template-columns: 1fr; } .ssh-grid label:nth-child(3), .ssh-grid label:nth-child(4) { grid-column: auto; } } .kpi-card { width: min(1100px, 96vw); max-height: min(88vh, 860px); display: flex; flex-direction: column; } .kpi-summary { display: flex; flex-wrap: wrap; gap: 0.4rem; margin: 0.25rem 0 0.7rem; } .kpi-summary .pill { font-family: var(--mono); font-size: 0.68rem; color: var(--cyan); border: 1px solid rgba(0,168,232,0.28); background: rgba(0,40,70,0.45); border-radius: 999px; padding: 0.22rem 0.6rem; } .kpi-toolbar { display: grid; grid-template-columns: 1fr auto auto auto; gap: 0.4rem; margin-bottom: 0.65rem; align-items: center; } .kpi-toolbar select { appearance: none; border: 1px solid var(--panel-border); background: rgba(0,20,40,0.7); color: var(--text); border-radius: 6px; padding: 0.45rem 0.55rem; font-family: var(--mono); font-size: 0.72rem; } .kpi-layout { display: grid; grid-template-columns: 1.15fr 1fr; gap: 0.65rem; min-height: 0; flex: 1; overflow: hidden; } .kpi-list, .kpi-detail { border: 1px solid rgba(0,168,232,0.15); background: rgba(0,20,40,0.35); border-radius: 8px; overflow: auto; max-height: min(56vh, 520px); } .kpi-list { padding: 0.35rem; } .kpi-detail { padding: 0.75rem; } .kpi-item { appearance: none; width: 100%; text-align: left; border: 1px solid transparent; background: transparent; color: inherit; border-radius: 8px; padding: 0.5rem 0.55rem; cursor: pointer; margin-bottom: 0.25rem; } .kpi-item:hover { background: rgba(0,118,206,0.15); } .kpi-item.active { border-color: rgba(61,255,224,0.35); background: rgba(61,255,224,0.08); } .kpi-item .t { display: block; font-weight: 600; font-size: 0.82rem; } .kpi-item .s { display: block; margin-top: 0.15rem; font-family: var(--mono); font-size: 0.66rem; color: var(--muted); } .kpi-detail h3 { margin: 0 0 0.35rem; color: var(--dell-bright); font-size: 1rem; } .kpi-detail .meta { margin: 0 0 0.65rem; color: var(--muted); font-family: var(--mono); font-size: 0.72rem; } .kpi-actions { display: flex; flex-wrap: wrap; gap: 0.35rem; margin: 0.65rem 0; } .kpi-kv { display: grid; gap: 0.3rem; margin-top: 0.5rem; } .kpi-kv .row { display: grid; grid-template-columns: 110px 1fr; gap: 0.4rem; font-size: 0.78rem; } .kpi-kv .k { color: var(--muted); } .kpi-kv .v { font-family: var(--mono); color: var(--text); word-break: break-all; } @media (max-width: 900px) { .kpi-layout { grid-template-columns: 1fr; } .kpi-toolbar { grid-template-columns: 1fr 1fr; } } /* Reports = full-viewport workspace (no side-drawer squeeze / no horizontal scroll) */ .reports-drawer.drawer, .drawer.reports-drawer { top: 0; left: 0; right: 0; bottom: 0; width: 100vw !important; max-width: 100vw !important; height: 100vh !important; max-height: 100vh !important; border-left: none; border-right: none; transform: translateY(110%); overflow-x: hidden; box-sizing: border-box; background: radial-gradient(ellipse 70% 45% at 12% 0%, rgba(0, 118, 206, 0.22), transparent 55%), radial-gradient(ellipse 50% 40% at 90% 8%, rgba(255, 152, 56, 0.12), transparent 50%), radial-gradient(ellipse 40% 35% at 70% 90%, rgba(168, 85, 247, 0.08), transparent 45%), #071018; } .reports-drawer.drawer.open { transform: translateY(0); } .reports-tabs { padding: 0.55rem 1rem 0; gap: 0.45rem; flex-wrap: wrap; flex-shrink: 0; border-bottom: 1px solid rgba(255,255,255,0.06); background: linear-gradient(180deg, rgba(8,22,40,0.95), rgba(7,16,24,0.55)); } .reports-tabs .chip { border-color: rgba(120, 170, 210, 0.28); color: #d7e6f4; background: rgba(12, 28, 48, 0.75); } .reports-tabs .chip:nth-child(2) { border-color: rgba(255, 176, 64, 0.4); } .reports-tabs .chip:nth-child(3) { border-color: rgba(100, 180, 255, 0.4); } .reports-tabs .chip:nth-child(4) { border-color: rgba(255, 120, 120, 0.35); } .reports-tabs .chip:nth-child(5) { border-color: rgba(190, 140, 255, 0.4); } .reports-tabs .chip:nth-child(6) { border-color: rgba(90, 210, 170, 0.4); } .reports-tabs .chip:nth-child(7) { border-color: rgba(255, 200, 90, 0.4); } .reports-tabs .chip:hover { color: #fff; background: rgba(0, 118, 206, 0.28); border-color: #4db8ff; } .reports-tabs .chip.active { color: #041018 !important; background: linear-gradient(135deg, #4db8ff, #7ec8ff) !important; border-color: #9fd6ff !important; box-shadow: 0 0 0 1px rgba(77, 184, 255, 0.35); } .reports-body { padding: 0.75rem 1rem 1.25rem; overflow-x: hidden !important; overflow-y: auto; flex: 1; min-height: 0; height: auto !important; max-width: 100%; box-sizing: border-box; color: var(--text); } .analytics-dash, .an-grid, .an-kpis, .rpt-table-wrap, .rpt-toolbar { max-width: 100%; box-sizing: border-box; } .an-kpis { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 0.55rem; } .an-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.75rem; } .an-card { min-width: 0; overflow: hidden; } .rpt-table-wrap { max-width: 100%; overflow-x: auto; } .reports-body a, .rpt-table a, .rpt-exports a, .rpt-panel a, .customer-brief a { color: #7ec8ff !important; text-decoration: none; font-weight: 600; } .reports-body a:hover, .rpt-table a:hover { color: #ffc857 !important; text-decoration: underline; } .rpt-toolbar { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; justify-content: space-between; margin-bottom: 0.65rem; } .rpt-toolbar .search { flex: 1; min-width: 180px; } .rpt-exports { display: flex; flex-wrap: wrap; gap: 0.35rem; } .rpt-exports a.btn, .rpt-exports .btn { color: #e8f4ff !important; } .rpt-meta { color: #c5d6e6; font-size: 0.78rem; margin-bottom: 0.55rem; } .rpt-meta strong { color: #ffc857; } .rpt-check { margin-left: 0.75rem; display: inline-flex; gap: 0.35rem; align-items: center; color: #d7e6f4; } .rpt-table-wrap { overflow: auto; max-height: calc(100vh - 220px); border: 1px solid rgba(120, 170, 220, 0.18); border-radius: 10px; background: rgba(6, 14, 26, 0.72); } .rpt-table { width: 100%; border-collapse: collapse; font-size: 0.78rem; color: #e8f4ff; } .rpt-table th, .rpt-table td { padding: 0.45rem 0.55rem; text-align: left; border-bottom: 1px solid rgba(255,255,255,0.06); vertical-align: top; color: #e8f4ff; } .rpt-table th { position: sticky; top: 0; z-index: 1; background: linear-gradient(180deg, #16324f, #102638); color: #b8dcff; font-weight: 650; } .rpt-table tr:nth-child(even) td { background: rgba(255,255,255,0.015); } .rpt-table tr:hover td { background: rgba(77, 184, 255, 0.07); } .rpt-table .sub, .rpt-list .sub { color: #c5d6e6 !important; font-size: 0.72rem; margin-top: 0.15rem; opacity: 1; } code.st { font-family: var(--mono); color: #ffc857; font-weight: 600; letter-spacing: 0.02em; } .rpt-badge { display: inline-block; padding: 0.1rem 0.4rem; border-radius: 4px; font-size: 0.68rem; font-weight: 600; text-transform: uppercase; } .rpt-badge.ok { background: rgba(61, 200, 140, 0.18); color: #6dffb5; } .rpt-badge.bad { background: rgba(255,92,92,0.18); color: #ff8a8a; } .rpt-badge.warn { background: rgba(255,184,77,0.18); color: #ffb84d; } .rpt-badge.unk { background: rgba(255,255,255,0.08); color: #c5d6e6; } .rpt-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0.85rem; margin-bottom: 1rem; } .rpt-panel { border: 1px solid rgba(120, 170, 220, 0.2); border-radius: 10px; padding: 0.75rem; background: linear-gradient(165deg, rgba(18, 40, 68, 0.55), rgba(8, 16, 28, 0.85)); color: #e8f4ff; } .rpt-panel:nth-child(2) { border-color: rgba(255, 176, 64, 0.28); } .rpt-panel h3, .rpt-h { margin: 0 0 0.5rem; font-size: 0.9rem; color: #9fd0ff; } .rpt-list { list-style: none; margin: 0 0 0.85rem; padding: 0; } .rpt-list li { padding: 0.35rem 0; border-bottom: 1px solid rgba(255,255,255,0.05); font-size: 0.78rem; color: #e8f4ff; } .rpt-results { background: #0a1018; color: #c8d6e5; padding: 0.75rem; border-radius: 8px; max-height: 280px; overflow: auto; font-size: 0.72rem; } .st-row .st-value { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; } .wc-mount { margin: 0.65rem 0; } .wc-mount a { color: #7ec8ff !important; } .customer-brief { background: #0b121a; border: 1px solid rgba(255,255,255,0.08); border-radius: 10px; padding: 1.25rem; color: #e8f4ff; } .brief-head { display: flex; gap: 0.85rem; align-items: flex-start; margin-bottom: 1rem; } .brief-head h2 { margin: 0.15rem 0; color: #e8f4ff; } .brief-kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.55rem; margin: 0.75rem 0 1rem; } .brief-kpis div { background: rgba(0,118,206,0.1); border: 1px solid rgba(77,184,255,0.22); border-radius: 8px; padding: 0.65rem; text-align: center; } .brief-kpis div:nth-child(2) { border-color: rgba(255,176,64,0.3); } .brief-kpis div:nth-child(3) { border-color: rgba(255,120,120,0.3); } .brief-kpis div:nth-child(4) { border-color: rgba(190,140,255,0.3); } .brief-kpis em { display: block; font-style: normal; font-size: 1.35rem; font-weight: 700; color: #7ec8ff; } .brief-kpis div:nth-child(2) em { color: #ffc857; } .brief-kpis div:nth-child(3) em { color: #ff8a8a; } .brief-kpis div:nth-child(4) em { color: #c9a0ff; } .brief-kpis span { font-size: 0.72rem; color: #c5d6e6; } /* Analytics dashboard */ .analytics-dash { display: flex; flex-direction: column; gap: 0.9rem; } .an-kpis { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 0.55rem; } .an-kpi { background: linear-gradient(165deg, rgba(22, 48, 78, 0.72), rgba(8, 16, 28, 0.92)); border: 1px solid rgba(120, 170, 220, 0.22); border-radius: 10px; padding: 0.7rem 0.75rem; min-height: 76px; } .an-kpi:nth-child(2) { border-color: rgba(109, 255, 181, 0.28); } .an-kpi:nth-child(3) { border-color: rgba(255, 184, 77, 0.32); } .an-kpi:nth-child(4) { border-color: rgba(255, 138, 138, 0.32); } .an-kpi:nth-child(5) { border-color: rgba(201, 160, 255, 0.32); } .an-kpi:nth-child(6) { border-color: rgba(126, 240, 216, 0.28); } .an-kpi em { display: block; font-style: normal; font-size: 1.45rem; font-weight: 700; color: #7ec8ff; line-height: 1.1; } .an-kpi:nth-child(2) em { color: #6dffb5; } .an-kpi:nth-child(3) em { color: #ffb84d; } .an-kpi:nth-child(4) em { color: #ff8a8a; } .an-kpi:nth-child(5) em { color: #c9a0ff; } .an-kpi:nth-child(6) em { color: #7ef0d8; } .an-kpi.danger em { color: #ff8a8a; } .an-kpi.warn em { color: #ffb84d; } .an-kpi span { display: block; margin-top: 0.25rem; font-size: 0.7rem; color: #c5d6e6; letter-spacing: 0.02em; } .an-grid { display: grid; grid-template-columns: 1.1fr 1fr 1fr; gap: 0.75rem; } .an-card { background: linear-gradient(165deg, rgba(18, 40, 68, 0.72), rgba(8, 16, 28, 0.92)); border: 1px solid rgba(120, 170, 220, 0.22); border-radius: 12px; padding: 0.85rem; min-height: 220px; } .an-card:nth-child(2) { border-color: rgba(255, 176, 64, 0.28); } .an-card:nth-child(3) { border-color: rgba(190, 140, 255, 0.28); } .an-card h3 { margin: 0 0 0.65rem; font-size: 0.82rem; color: #9fd0ff; font-weight: 600; letter-spacing: 0.03em; text-transform: uppercase; } .an-card:nth-child(2) h3 { color: #ffc857; } .an-card:nth-child(3) h3 { color: #c9a0ff; } .an-card .an-note { margin: 0.45rem 0 0; font-size: 0.72rem; color: #c5d6e6; } .an-bars { display: flex; flex-direction: column; gap: 0.45rem; } .an-bar-row { display: grid; grid-template-columns: 110px 1fr 36px; gap: 0.4rem; align-items: center; } .an-bar-label { font-size: 0.72rem; color: #e8f4ff; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .an-bar-track { height: 10px; background: rgba(255,255,255,0.06); border-radius: 999px; overflow: hidden; } .an-bar-fill { height: 100%; border-radius: 999px; background: linear-gradient(90deg, #0076ce, #4db8ff); } .an-bar-fill.crit { background: linear-gradient(90deg, #8b1e1e, #ff5c5c); } .an-bar-fill.warn { background: linear-gradient(90deg, #8a5a12, #ffb84d); } .an-bar-val { font-family: var(--mono); font-size: 0.7rem; color: #c5d6e6; text-align: right; } .an-donut-wrap { display: flex; align-items: center; gap: 0.85rem; } .an-donut { width: 132px; height: 132px; border-radius: 50%; background: conic-gradient(var(--slices, #334 0 100%)); position: relative; flex-shrink: 0; } .an-donut::after { content: ""; position: absolute; inset: 22px; border-radius: 50%; background: #0b121a; } .an-legend { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.35rem; } .an-legend li { display: flex; align-items: center; gap: 0.4rem; font-size: 0.75rem; color: #e8f4ff; } .an-swatch { width: 10px; height: 10px; border-radius: 2px; flex-shrink: 0; } .an-table-mini { width: 100%; border-collapse: collapse; font-size: 0.72rem; } .an-table-mini th, .an-table-mini td { padding: 0.35rem 0.25rem; border-bottom: 1px solid rgba(255,255,255,0.06); text-align: left; color: #e8f4ff; } .an-table-mini th { color: #9fd0ff; font-weight: 600; } .an-wide { grid-column: 1 / -1; } @media (max-width: 1100px) { .an-kpis { grid-template-columns: repeat(3, 1fr); } .an-grid { grid-template-columns: 1fr; } } @media (max-width: 900px) { .rpt-grid-2, .brief-kpis { grid-template-columns: 1fr 1fr; } .an-kpis { grid-template-columns: repeat(2, 1fr); } } @media print { body * { visibility: hidden !important; } #reports-drawer, #reports-drawer * { visibility: visible !important; } #reports-drawer { position: absolute !important; left: 0; top: 0; width: 100% !important; height: auto !important; background: white !important; color: #111 !important; box-shadow: none !important; overflow: visible !important; } .drawer-head, .reports-tabs, .rpt-toolbar, .scrim { display: none !important; } .customer-brief, .rpt-table, .analytics-dash { color: #111 !important; background: white !important; } code.st { color: #0a5 !important; } .reports-body a, .rpt-table a { color: #056 !important; } } /* Hardware / Expansion */ .hw-layout { display: grid; grid-template-columns: minmax(220px, 280px) minmax(0, 1fr); gap: 0.85rem; min-height: 0; max-width: 100%; } .hw-list { border: 1px solid rgba(255,255,255,0.08); border-radius: 10px; background: rgba(0,0,0,0.2); padding: 0.65rem; min-width: 0; max-height: calc(100vh - 180px); display: flex; flex-direction: column; } .hw-list h3 { margin: 0 0 0.5rem; font-size: 0.8rem; color: #9fd0ff; } .hw-list-scroll { overflow: auto; flex: 1; min-height: 0; } .hw-item { display: block; width: 100%; text-align: left; background: transparent; border: 1px solid transparent; border-radius: 8px; padding: 0.45rem 0.5rem; margin-bottom: 0.3rem; color: #e8f4ff; cursor: pointer; } .hw-item strong { display: block; font-size: 0.78rem; } .hw-item span { display: block; font-size: 0.68rem; color: #c5d6e6; margin-top: 0.15rem; } .hw-item:hover, .hw-item.active { border-color: rgba(77,184,255,0.45); background: rgba(0,118,206,0.2); } .hw-detail { min-width: 0; max-width: 100%; } /* OME hardware fetch wait state */ .hw-wait { display: grid; grid-template-columns: auto 1fr; gap: 1.25rem; align-items: center; min-height: 280px; padding: 1.35rem 1.4rem; border-radius: 14px; border: 1px solid rgba(77, 184, 255, 0.35); background: radial-gradient(ellipse 60% 80% at 10% 40%, rgba(0, 118, 206, 0.22), transparent 55%), radial-gradient(ellipse 50% 60% at 90% 80%, rgba(255, 176, 64, 0.1), transparent 50%), rgba(8, 18, 32, 0.92); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.03); } .hw-wait-error { grid-template-columns: 1fr; border-color: rgba(255, 138, 138, 0.4); background: rgba(60, 16, 16, 0.45); } .hw-wait-error h3 { color: #ff8a8a; margin: 0 0 0.4rem; } .hw-wait-visual { display: flex; flex-direction: column; align-items: center; gap: 0.85rem; min-width: 120px; } .hw-wait-orbit { position: relative; width: 96px; height: 96px; } .hw-wait-core { position: absolute; inset: 22px; border-radius: 50%; display: grid; place-items: center; font-size: 0.72rem; font-weight: 800; letter-spacing: 0.08em; color: #041018; background: linear-gradient(145deg, #4db8ff, #0076ce); box-shadow: 0 0 24px rgba(77, 184, 255, 0.45); animation: hw-wait-pulse 1.6s ease-in-out infinite; } .hw-wait-ring { position: absolute; inset: 0; border-radius: 50%; border: 2px solid transparent; border-top-color: #4db8ff; border-right-color: rgba(255, 200, 87, 0.7); animation: hw-wait-spin 1.1s linear infinite; } .hw-wait-dot { position: absolute; top: 4px; left: 50%; width: 10px; height: 10px; margin-left: -5px; border-radius: 50%; background: #ffc857; box-shadow: 0 0 10px rgba(255, 200, 87, 0.8); animation: hw-wait-spin 1.1s linear infinite; transform-origin: 5px 44px; } .hw-wait-bars { display: flex; align-items: flex-end; gap: 4px; height: 28px; } .hw-wait-bars i { display: block; width: 6px; border-radius: 3px; background: linear-gradient(180deg, #4db8ff, #7ef0d8); animation: hw-wait-bar 1s ease-in-out infinite; } .hw-wait-bars i:nth-child(1) { height: 10px; animation-delay: 0s; } .hw-wait-bars i:nth-child(2) { height: 16px; animation-delay: 0.1s; } .hw-wait-bars i:nth-child(3) { height: 24px; animation-delay: 0.2s; } .hw-wait-bars i:nth-child(4) { height: 14px; animation-delay: 0.3s; } .hw-wait-bars i:nth-child(5) { height: 20px; animation-delay: 0.4s; } .hw-wait-copy h3 { margin: 0 0 0.35rem; font-size: 1.1rem; color: #9fd0ff; } .hw-wait-target { margin: 0 0 0.55rem; font-family: var(--mono); font-size: 0.82rem; color: #ffc857; } .hw-wait-step { margin: 0 0 0.35rem; font-size: 0.92rem; color: #e8f4ff; min-height: 1.35em; } .hw-wait-time { margin: 0 0 0.85rem; font-size: 0.78rem; color: #b7c9d9; } .hw-wait-time strong { color: #4db8ff; font-size: 1rem; } .hw-wait-checklist { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0.4rem; } .hw-wait-checklist li { padding: 0.28rem 0.6rem; border-radius: 999px; font-size: 0.68rem; font-weight: 650; letter-spacing: 0.03em; text-transform: uppercase; color: #8aa0b5; border: 1px solid rgba(255,255,255,0.1); background: rgba(0,0,0,0.25); transition: color 0.25s, border-color 0.25s, background 0.25s; } .hw-wait-checklist li.on { color: #041018; border-color: #9fd6ff; background: linear-gradient(135deg, #4db8ff, #7ec8ff); } @keyframes hw-wait-spin { to { transform: rotate(360deg); } } @keyframes hw-wait-pulse { 0%, 100% { transform: scale(1); box-shadow: 0 0 18px rgba(77, 184, 255, 0.35); } 50% { transform: scale(1.05); box-shadow: 0 0 28px rgba(77, 184, 255, 0.65); } } @keyframes hw-wait-bar { 0%, 100% { transform: scaleY(0.55); opacity: 0.55; } 50% { transform: scaleY(1); opacity: 1; } } @media (max-width: 720px) { .hw-wait { grid-template-columns: 1fr; justify-items: center; text-align: center; } .hw-wait-checklist { justify-content: center; } } .hw-head { display: flex; flex-wrap: wrap; gap: 0.85rem; justify-content: space-between; align-items: flex-start; margin-bottom: 0.75rem; } .hw-head h2 { margin: 0 0 0.25rem; font-size: 1.15rem; color: #e8f4ff; } .hw-limits { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 0.4rem; flex: 1; min-width: min(100%, 520px); } .hw-limits div { background: rgba(0,118,206,0.1); border: 1px solid rgba(77,184,255,0.22); border-radius: 8px; padding: 0.45rem; text-align: center; } .hw-limits div:nth-child(2) { border-color: rgba(255,176,64,0.35); } .hw-limits div:nth-child(3) { border-color: rgba(109,255,181,0.3); } .hw-limits div:nth-child(4) { border-color: rgba(201,160,255,0.3); } .hw-limits div:nth-child(5) { border-color: rgba(255,138,138,0.3); } .hw-limits div:nth-child(6) { border-color: rgba(126,240,216,0.28); } .hw-limits em { display: block; font-style: normal; font-weight: 700; color: #7ec8ff; font-size: 1rem; } .hw-limits div:nth-child(2) em { color: #ffc857; } .hw-limits div:nth-child(3) em { color: #6dffb5; } .hw-limits div:nth-child(4) em { color: #c9a0ff; } .hw-limits div:nth-child(5) em { color: #ff8a8a; } .hw-limits div:nth-child(6) em { color: #7ef0d8; } .hw-limits span { font-size: 0.62rem; color: #c5d6e6; } .hw-findings { display: flex; flex-direction: column; gap: 0.35rem; margin-bottom: 0.85rem; } .hw-finding { border-radius: 8px; padding: 0.5rem 0.65rem; font-size: 0.78rem; border: 1px solid rgba(255,255,255,0.08); color: #e8f4ff; } .hw-finding.ok { border-color: rgba(61,255,224,0.25); background: rgba(61,255,224,0.06); } .hw-finding.warning { border-color: rgba(255,184,77,0.35); background: rgba(255,184,77,0.08); color: #ffe0a8; } .hw-section { border: 1px solid rgba(255,255,255,0.08); border-radius: 10px; padding: 0.75rem; margin-bottom: 0.75rem; background: rgba(8,14,24,0.85); max-width: 100%; } .hw-section h3 { margin: 0 0 0.45rem; color: #9fd0ff; font-size: 0.88rem; } .hw-net { display: flex; flex-wrap: wrap; gap: 0.55rem 1rem; align-items: center; margin: 0.35rem 0 0; font-size: 0.78rem; color: #c5d6e6; } .hw-net code { color: #7ef0d8; font-family: var(--mono); font-size: 0.76rem; } .hw-os { margin: 0.25rem 0 0; font-size: 0.78rem; color: #b7c9d9; } .hw-current { border-color: rgba(77, 184, 255, 0.4); background: linear-gradient(165deg, rgba(0, 118, 206, 0.16), rgba(8, 16, 28, 0.75)); } .hw-current h3 { color: #7ec8ff !important; } .hw-expand { border-color: rgba(255, 176, 64, 0.42); background: linear-gradient(165deg, rgba(255, 152, 56, 0.14), rgba(28, 18, 8, 0.72)); } .hw-expand h3 { color: #ffc857 !important; } .hw-limits-current em { color: #e8f4ff; } .dell-guidance { border-color: rgba(190, 140, 255, 0.35); background: linear-gradient(165deg, rgba(120, 70, 180, 0.12), rgba(12, 10, 24, 0.8)); } .dell-guidance h3 { color: #c9a0ff !important; } .hw-docs-bar { display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: center; margin: 0.75rem 0 0.35rem; } .hw-docs-label { font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.06em; color: #ffc857; margin-right: 0.25rem; font-weight: 650; } .hw-doc-btn { display: inline-flex; align-items: center; padding: 0.35rem 0.7rem; border-radius: 999px; font-size: 0.72rem; font-weight: 650; text-decoration: none !important; border: 1px solid transparent; } .hw-doc-btn.spec { color: #1a1004 !important; background: linear-gradient(135deg, #ffc857, #ff9f3d); border-color: #ffe0a0; } .hw-doc-btn.tech { color: #041018 !important; background: linear-gradient(135deg, #4db8ff, #2a8fd6); border-color: #9fd6ff; } .hw-doc-btn.kb, .hw-doc-btn.manual, .hw-doc-btn.doc { color: #f3e8ff !important; background: rgba(120, 70, 180, 0.35); border-color: rgba(201, 160, 255, 0.45); } .hw-doc-btn.support { color: #e8f4ff !important; background: rgba(0, 118, 206, 0.35); border-color: rgba(77, 184, 255, 0.45); } .hw-doc-btn:hover { filter: brightness(1.08); text-decoration: none !important; } .hw-exp-notes { margin: 0.65rem 0 0.85rem; font-size: 0.8rem; color: #d5e6f4; line-height: 1.45; } .hw-exp-notes p { margin: 0.25rem 0; } .hw-finding.info { border-color: rgba(0,168,232,0.35); background: rgba(0,118,206,0.1); color: #cfe9ff; } .hw-section h4 { margin: 0.85rem 0 0.4rem; color: #b8fff2; font-size: 0.8rem; } .hw-cols { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.75rem; } .dimm-bank { margin-bottom: 0.75rem; } .dimm-bank h4 { margin: 0 0 0.4rem; color: #c5d6e6; font-size: 0.78rem; } .dimm-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 0.35rem; } .dimm-slot { border-radius: 8px; padding: 0.4rem 0.35rem; text-align: center; border: 1px dashed rgba(255,255,255,0.2); background: rgba(255,255,255,0.03); min-width: 0; } .dimm-slot.full { border-style: solid; border-color: rgba(126,240,216,0.45); background: linear-gradient(160deg, rgba(0,118,206,0.35), rgba(14,40,30,0.9)); } .dimm-slot.empty { opacity: 0.75; } .dimm-slot.white { box-shadow: inset 0 0 0 1px rgba(255,255,255,0.25); } .dimm-slot.black { box-shadow: inset 0 0 0 1px rgba(90,106,122,0.6); } .dimm-lab { display: block; font-family: var(--mono); font-size: 0.68rem; color: #7ef0d8; font-weight: 700; } .dimm-val { display: block; font-size: 0.85rem; font-weight: 700; color: #e8f4ff; } .dimm-meta { display: block; font-size: 0.62rem; color: #c5d6e6; } .dell-guidance ul { margin: 0.25rem 0 0.75rem 1.1rem; color: #e8f4ff; font-size: 0.78rem; line-height: 1.45; } @media (max-width: 1100px) { .hw-layout { grid-template-columns: 1fr; } .hw-cols, .hw-limits, .dimm-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } /* Interactive reports filters */ .rpt-sticky { position: sticky; top: 0; z-index: 5; background: linear-gradient(180deg, #0a121c 70%, rgba(10,18,28,0.92)); padding-bottom: 0.55rem; margin-bottom: 0.35rem; border-bottom: 1px solid rgba(255,255,255,0.06); } .rpt-context { font-size: 0.8rem; color: #e8f4ff; line-height: 1.45; margin: 0 0 0.55rem; padding: 0.5rem 0.7rem; border-radius: 8px; background: rgba(0, 118, 206, 0.2); border: 1px solid rgba(126, 240, 216, 0.28); } .rpt-filters { display: flex; flex-wrap: wrap; gap: 0.45rem 0.65rem; align-items: flex-end; margin: 0.35rem 0 0.45rem; } .rpt-f { display: flex; flex-direction: column; gap: 0.2rem; font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.04em; color: #d7e6f4; font-weight: 600; } .rpt-f select { min-width: 140px; max-width: 220px; background: #0e1620; color: #e8f4ff; border: 1px solid rgba(126, 240, 216, 0.28); border-radius: 6px; padding: 0.35rem 0.45rem; font-size: 0.78rem; text-transform: none; letter-spacing: 0; font-weight: 500; } .rpt-f select:focus { outline: none; border-color: #7ef0d8; } .rpt-meta { color: #d7e6f4 !important; } .rpt-check { color: #e8f4ff !important; } .an-note { color: #d7e6f4 !important; } .an-kpi span { color: #d7e6f4 !important; } .rpt-table .sub, .rpt-list .sub, .hw-item span { color: #d0e0ef !important; } .reports-tabs .chip { color: #e8f4ff; border-color: rgba(126, 240, 216, 0.3); } .reports-body .hint { color: #d7e6f4; } .rpt-quick { display: flex; flex-wrap: wrap; gap: 0.35rem; } .rpt-quick .chip { cursor: pointer; } button.an-kpi { appearance: none; text-align: left; cursor: pointer; font: inherit; width: 100%; transition: transform 0.12s ease, border-color 0.12s ease; } button.an-kpi:hover { border-color: rgba(126,240,216,0.55); transform: translateY(-1px); } .an-row-click { cursor: pointer; } .an-row-click:hover td { background: rgba(61,255,224,0.07); } /* ===== Network drawer (Fabric + ATC racks) ===== */ .network-drawer.drawer, .drawer.network-drawer { width: min(1360px, 100vw); } .net-head-meta { display: flex; align-items: center; gap: 0.75rem; } .network-body { flex: 1; min-height: 0; display: flex; flex-direction: column; overflow: hidden; } .network-panel { flex: 1; min-height: 0; overflow: hidden; display: flex; flex-direction: column; } .network-panel.hidden { display: none !important; } .net-fabric-layout { flex: 1; min-height: 0; display: grid; grid-template-columns: 1fr min(320px, 34%); gap: 0; } .net-fabric-canvas-wrap { min-height: 420px; background: #071018; border-right: 1px solid var(--panel-border); position: relative; } #net-fabric-canvas { display: block; width: 100%; height: 100%; } .net-fabric-side { overflow-y: auto; padding: 0.75rem; background: rgba(6, 14, 24, 0.95); } .net-fabric-side h4 { margin: 0.85rem 0 0.4rem; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--muted); } .net-filters { display: flex; flex-wrap: wrap; gap: 0.45rem; margin-bottom: 0.5rem; } .net-tog { font-size: 0.72rem; display: inline-flex; align-items: center; gap: 0.25rem; color: var(--text); } .net-note { margin: 0 0 0.5rem; font-size: 0.68rem; } .net-sw-list, .net-peer-list, .net-unplaced-list { display: flex; flex-direction: column; gap: 0.35rem; } .net-peer { border: 1px solid rgba(0,168,232,0.18); border-radius: 8px; padding: 0.45rem 0.55rem; display: flex; flex-direction: column; gap: 0.15rem; font-size: 0.75rem; } .net-peer.up { border-color: rgba(61,255,224,0.35); } .net-peer.down { opacity: 0.7; } .net-peer span { color: var(--muted); font-family: var(--mono); font-size: 0.65rem; } .net-rack-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0.55rem 0.85rem; border-bottom: 1px solid var(--panel-border); } .net-rack-layout { flex: 1; min-height: 0; display: grid; grid-template-columns: min(260px, 28%) 1fr; overflow: hidden; } .net-unplaced { border-right: 1px solid var(--panel-border); overflow-y: auto; padding: 0.65rem 0.75rem; } .net-unplaced h4 { margin: 0 0 0.35rem; font-size: 0.85rem; } .net-unplaced .muted { color: var(--muted); font-weight: 400; } .net-sites { overflow: auto; padding: 0.65rem 0.75rem 1rem; } .net-site { margin-bottom: 1rem; } .net-site-head { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 0.45rem; font-size: 0.9rem; } .net-site-head span { color: var(--muted); font-family: var(--mono); font-size: 0.7rem; } .net-rack-row { display: flex; gap: 0.55rem; align-items: stretch; overflow-x: auto; padding-bottom: 0.35rem; } .net-rack-col { flex: 0 0 118px; width: 118px; display: flex; flex-direction: column; border: 1px solid rgba(0,168,232,0.28); border-radius: 8px; background: rgba(0, 18, 36, 0.75); cursor: pointer; min-height: 520px; } .net-rack-title { text-align: center; font-size: 0.72rem; font-weight: 600; padding: 0.35rem; border-bottom: 1px solid rgba(0,168,232,0.2); background: rgba(0, 40, 70, 0.45); } .net-rack-units { flex: 1; display: flex; flex-direction: column; min-height: 480px; } .net-u-slot { position: relative; border-bottom: 1px solid rgba(255,255,255,0.04); display: flex; flex-direction: column; justify-content: center; padding: 0 0.25rem; min-height: 0; } .net-u-slot.empty:hover { background: rgba(0,168,232,0.12); } .net-u-slot.filled { border: 1px solid rgba(0,168,232,0.25); border-radius: 3px; margin: 1px; padding: 0.15rem 0.25rem 0.15rem 0.3rem; } .net-u-slot.role-switch { background: rgba(0,168,232,0.35); } .net-u-slot.role-server { background: rgba(61,255,224,0.18); } .net-u-slot.role-storage { background: rgba(255,154,60,0.28); } .net-u-slot.role-chassis { background: rgba(124,92,255,0.3); } .net-u-slot.role-pdu { background: rgba(120,120,120,0.35); } .net-u-label { font-family: var(--mono); font-size: 0.55rem; color: var(--muted); line-height: 1; } .net-u-name { font-size: 0.62rem; font-weight: 600; line-height: 1.15; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .net-u-meta { font-family: var(--mono); font-size: 0.52rem; color: var(--muted); } .net-unplace { position: absolute; top: 1px; right: 2px; border: 0; background: rgba(0,0,0,0.35); color: #fff; width: 16px; height: 16px; border-radius: 3px; line-height: 1; cursor: pointer; font-size: 0.7rem; padding: 0; } .net-place-form { display: flex; flex-wrap: wrap; align-items: center; gap: 0.65rem; padding: 0.55rem 0.85rem; border-top: 1px solid var(--panel-border); background: rgba(0, 30, 55, 0.55); font-size: 0.78rem; } .net-place-form.hidden { display: none; } .net-place-form input { width: 4rem; background: rgba(0,20,40,0.8); border: 1px solid var(--panel-border); color: var(--text); border-radius: 4px; padding: 0.25rem 0.35rem; } @media (max-width: 900px) { .net-fabric-layout { grid-template-columns: 1fr; } .net-rack-layout { grid-template-columns: 1fr; } .net-unplaced { max-height: 180px; border-right: 0; border-bottom: 1px solid var(--panel-border); } } /* ===== Switch faceplate / port wiring ===== */ .sw-fabric { flex: 1; min-height: 0; display: grid; grid-template-columns: min(240px, 22%) 1fr min(280px, 26%); overflow: hidden; } .sw-list-pane, .sw-wire-pane { overflow-y: auto; padding: 0.75rem; border-right: 1px solid var(--panel-border); background: rgba(6, 14, 24, 0.96); } .sw-wire-pane { border-right: 0; border-left: 1px solid var(--panel-border); } .sw-list-pane h4, .sw-wire-pane h4 { margin: 0 0 0.5rem; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--muted); } .sw-cards { display: flex; flex-direction: column; gap: 0.45rem; margin-bottom: 0.75rem; } .sw-card { display: flex; gap: 0.55rem; align-items: stretch; text-align: left; border: 1px solid rgba(0,168,232,0.25); background: rgba(0, 30, 55, 0.45); border-radius: 10px; padding: 0.5rem; color: var(--text); cursor: pointer; } .sw-card.active, .sw-card:hover { border-color: rgba(0,168,232,0.7); box-shadow: 0 0 0 1px rgba(0,168,232,0.25); } .sw-card-ico { width: 42px; flex: 0 0 42px; border-radius: 6px; background: linear-gradient(180deg, #1a3a55 0%, #0d2133 100%); border: 1px solid rgba(0,168,232,0.45); position: relative; } .sw-card-ico::before { content: ""; position: absolute; inset: 8px 6px; border-radius: 3px; background: repeating-linear-gradient( 90deg, #00a8e8 0 3px, transparent 3px 6px ); opacity: 0.85; } .sw-card-body { display: flex; flex-direction: column; gap: 0.12rem; min-width: 0; } .sw-card-body strong { font-size: 0.78rem; } .sw-card-body span { font-size: 0.65rem; color: var(--muted); } .sw-card-body .mono, .mono { font-family: var(--mono); } .sw-face-pane { min-height: 0; overflow: auto; padding: 0.75rem; background: #050c14; } .sw-faceplate { display: flex; flex-direction: column; gap: 0.65rem; min-height: 100%; } .sw-face-head { display: flex; flex-direction: column; gap: 0.35rem; } .sw-brand-bar { display: flex; align-items: center; gap: 0.75rem; padding: 0.55rem 0.75rem; border-radius: 8px 8px 0 0; background: linear-gradient(90deg, #0a1e30, #12324a 55%, #0a1e30); border: 1px solid rgba(0,168,232,0.35); } .sw-dell { font-weight: 700; letter-spacing: 0.12em; color: #fff; font-size: 0.85rem; } .sw-model { color: #9ec5e8; font-size: 0.8rem; } .sw-st { margin-left: auto; color: var(--cyan); font-size: 0.72rem; } .sw-face-meta { display: flex; flex-wrap: wrap; gap: 0.65rem; align-items: center; font-size: 0.75rem; color: var(--muted); } .sw-wired-pill { margin-left: auto; font-family: var(--mono); font-size: 0.68rem; padding: 0.15rem 0.5rem; border-radius: 999px; border: 1px solid rgba(61,255,224,0.35); color: var(--cyan); } .sw-port-grid { display: grid; grid-template-columns: repeat(24, minmax(0, 1fr)); gap: 4px; padding: 0.75rem; border-radius: 0 0 10px 10px; background: linear-gradient(180deg, #122433, #0a1520); border: 1px solid rgba(0,168,232,0.3); border-top: 0; box-shadow: inset 0 0 40px rgba(0,0,0,0.35); } .sw-port { aspect-ratio: 1 / 1.15; border-radius: 3px; border: 1px solid rgba(255,255,255,0.12); background: #1a2430; color: #9aa8b5; font-family: var(--mono); font-size: 0.55rem; padding: 0; cursor: pointer; position: relative; display: flex; align-items: flex-end; justify-content: center; padding-bottom: 2px; } .sw-port.empty:hover { border-color: #00a8e8; color: #fff; } .sw-port.wired { background: #0d3a4a; border-color: rgba(61,255,224,0.55); color: #dff; } .sw-port.wired.live { box-shadow: 0 0 8px rgba(61,255,224,0.35); } .sw-port.selected { outline: 2px solid #ff9a3c; outline-offset: 1px; z-index: 1; } .sw-port-dot { position: absolute; top: 3px; left: 50%; transform: translateX(-50%); width: 5px; height: 5px; border-radius: 50%; background: #3dffe0; } .sw-cable-stage { position: relative; flex: 1; min-height: 180px; display: grid; grid-template-columns: 1fr; } #sw-cable-canvas { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; z-index: 1; } .sw-peer-rail { position: relative; z-index: 2; display: flex; flex-direction: column; gap: 0.4rem; padding: 0.5rem 0 0.25rem; max-height: 280px; overflow-y: auto; } .sw-peer-chip { display: flex; gap: 0.55rem; align-items: center; margin-left: auto; width: min(420px, 92%); padding: 0.4rem 0.55rem; border-radius: 8px; border: 1px solid rgba(0,168,232,0.25); background: rgba(8, 22, 36, 0.92); } .sw-peer-chip.up { border-color: rgba(61,255,224,0.4); } .sw-peer-chip.down { opacity: 0.75; } .sw-peer-port { font-family: var(--mono); font-size: 0.7rem; font-weight: 600; color: var(--cyan); min-width: 2.2rem; } .sw-peer-chip strong { display: block; font-size: 0.75rem; } .sw-peer-chip .mono { font-size: 0.62rem; color: var(--muted); } .sw-field { display: flex; flex-direction: column; gap: 0.25rem; margin-bottom: 0.65rem; font-size: 0.72rem; color: var(--muted); } .sw-field select, .sw-field input { background: rgba(0,20,40,0.85); border: 1px solid var(--panel-border); color: var(--text); border-radius: 6px; padding: 0.4rem 0.45rem; font: inherit; color-scheme: dark; } .sw-wire-actions { display: flex; gap: 0.45rem; flex-wrap: wrap; margin-bottom: 0.75rem; } .sw-wire-current { border-top: 1px solid var(--panel-border); padding-top: 0.55rem; display: flex; flex-direction: column; gap: 0.2rem; font-size: 0.75rem; } @media (max-width: 1100px) { .sw-fabric { grid-template-columns: 1fr; overflow: auto; } .sw-port-grid { grid-template-columns: repeat(12, minmax(0, 1fr)); } } /* ===== Rack studio (spacious) ===== */ .rack-studio { flex: 1; min-height: 0; display: grid; grid-template-columns: min(280px, 24%) min(220px, 20%) 1fr; gap: 0; overflow: hidden; } .rack-unplaced-pane { overflow-y: auto; padding: 0.85rem; border-right: 1px solid var(--panel-border); background: rgba(6, 14, 24, 0.96); } .rack-unplaced-pane h4 { margin: 0 0 0.35rem; } .rack-unplaced-list { display: flex; flex-direction: column; gap: 0.45rem; margin-top: 0.55rem; } .rack-dev-card { text-align: left; border: 1px solid rgba(0,168,232,0.22); background: rgba(0, 28, 48, 0.55); border-radius: 10px; padding: 0.55rem 0.65rem; color: var(--text); cursor: pointer; display: flex; flex-direction: column; gap: 0.15rem; } .rack-dev-card.active, .rack-dev-card:hover { border-color: rgba(255,154,60,0.7); box-shadow: 0 0 0 1px rgba(255,154,60,0.25); } .rack-dev-role { font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--cyan); } .rack-dev-card.role-switch { border-left: 3px solid #00a8e8; } .rack-dev-card.role-server { border-left: 3px solid #3dffe0; } .rack-dev-card.role-storage { border-left: 3px solid #ff9a3c; } .rack-dev-card.role-chassis { border-left: 3px solid #7c5cff; } .rack-dev-card.role-pdu { border-left: 3px solid #888; } .rack-gallery { overflow-y: auto; border-right: 1px solid var(--panel-border); padding: 0.65rem; background: #070f18; } .rack-thumb-row { display: flex; flex-direction: column; gap: 0.45rem; } .rack-thumb { display: grid; grid-template-columns: 1fr auto; grid-template-rows: auto auto; gap: 0.15rem 0.55rem; text-align: left; padding: 0.55rem 0.6rem; border-radius: 10px; border: 1px solid rgba(0,168,232,0.2); background: rgba(0, 24, 40, 0.65); color: var(--text); cursor: pointer; } .rack-thumb.active { border-color: rgba(61,255,224,0.55); background: rgba(0, 50, 70, 0.55); } .rack-thumb-name { font-weight: 600; font-size: 0.8rem; } .rack-thumb-meta { font-size: 0.65rem; color: var(--muted); grid-column: 1; } .rack-thumb-mini { grid-row: 1 / span 2; grid-column: 2; align-self: center; } .rack-focus-pane { overflow: auto; padding: 0.85rem 1rem 1.25rem; background: linear-gradient(180deg, #081018, #050a10); display: flex; flex-direction: column; align-items: center; gap: 0.75rem; } .ru-cabinet { width: min(420px, 100%); border-radius: 14px; border: 1px solid rgba(0,168,232,0.35); background: #0b1520; box-shadow: 0 18px 50px rgba(0,0,0,0.45); overflow: hidden; } .ru-cabinet-head { padding: 0.75rem 1rem; background: linear-gradient(90deg, #123049, #0d2133); border-bottom: 1px solid rgba(0,168,232,0.25); } .ru-cabinet-head strong { display: block; font-size: 1.05rem; } .ru-cabinet-head .mono { color: var(--muted); font-size: 0.72rem; } .ru-frame { display: grid; grid-template-columns: 18px 1fr 18px; min-height: 780px; background: #050a10; } .ru-rail { background: repeating-linear-gradient( 180deg, #1a2a38 0 8px, #0e1822 8px 18px ); border-color: rgba(255,255,255,0.06); } .ru-rail.left { border-right: 1px solid rgba(255,255,255,0.08); } .ru-rail.right { border-left: 1px solid rgba(255,255,255,0.08); } .ru-stack { display: flex; flex-direction: column; padding: 6px; gap: 1px; background: #0a121c; } .ru-unit.empty { border-radius: 2px; background: rgba(255,255,255,0.02); border: 1px dashed rgba(255,255,255,0.04); display: flex; align-items: center; cursor: pointer; } .ru-unit.empty:hover { background: rgba(0,168,232,0.12); border-color: rgba(0,168,232,0.35); } .ru-tick { font-family: var(--mono); font-size: 0.62rem; color: #6a7d90; padding-left: 0.45rem; } .ru-unit.filled { border-radius: 6px; padding: 2px; } .ru-bezel { height: 100%; border-radius: 5px; display: flex; align-items: center; gap: 0.55rem; padding: 0.25rem 0.45rem 0.25rem 0.55rem; border: 1px solid rgba(255,255,255,0.12); position: relative; background: linear-gradient(90deg, rgba(20,40,55,0.95), rgba(12,28,40,0.95)); } .ru-unit.role-switch .ru-bezel { background: linear-gradient(90deg, #0a3a55, #0d2840); border-color: rgba(0,168,232,0.55); } .ru-unit.role-server .ru-bezel { background: linear-gradient(90deg, #0a3d38, #0d2a28); border-color: rgba(61,255,224,0.4); } .ru-unit.role-storage .ru-bezel { background: linear-gradient(90deg, #4a2e12, #2a1a0c); border-color: rgba(255,154,60,0.5); } .ru-unit.role-chassis .ru-bezel { background: linear-gradient(90deg, #2a1f55, #1a1438); border-color: rgba(124,92,255,0.5); } .ru-unit.role-pdu .ru-bezel { background: linear-gradient(90deg, #333, #1a1a1a); } .ru-led { width: 8px; height: 8px; border-radius: 50%; background: #3dffe0; box-shadow: 0 0 8px rgba(61,255,224,0.8); flex: 0 0 auto; } .ru-copy { min-width: 0; flex: 1; } .ru-copy strong { display: block; font-size: 0.78rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .ru-copy .mono { font-size: 0.62rem; color: #b7c9d8; } /* ===== Dell rack designer v2 — overview + edit ===== */ .network-drawer.drawer, .drawer.network-drawer { width: min(1480px, 100vw); } .rd-bar { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0.55rem 0.9rem; border-bottom: 1px solid rgba(255,255,255,0.06); background: #0a121a; flex-wrap: wrap; } .rd-bar-left, .rd-bar-right { display: flex; align-items: center; gap: 0.65rem; flex-wrap: wrap; } .rd-overview { flex: 1; min-height: 0; overflow: auto; padding: 1rem 1.1rem 1.4rem; background: radial-gradient(ellipse at 20% 0%, rgba(0,100,140,0.12), transparent 50%), linear-gradient(180deg, #0a1218, #070c12); } .rd-overview-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 1rem; margin-bottom: 1rem; } .rd-overview-head h3 { margin: 0 0 0.2rem; font-size: 1.15rem; font-weight: 600; letter-spacing: -0.02em; } .rd-overview-head p { margin: 0; color: var(--muted); font-size: 0.78rem; } .rd-legend { display: flex; gap: 0.55rem; flex-wrap: wrap; } .rd-legend .lg { font-size: 0.65rem; color: #a8b8c8; display: inline-flex; align-items: center; gap: 0.3rem; } .rd-legend .lg::before { content: ""; width: 10px; height: 10px; border-radius: 2px; } .rd-legend .lg.server::before { background: #2a9d8f; } .rd-legend .lg.switch::before { background: #3a86ff; } .rd-legend .lg.storage::before { background: #e07a3d; } .rd-legend .lg.chassis::before { background: #7b6cf0; } .rd-legend .lg.pdu::before { background: #6b7280; } .rd-gallery { display: flex; gap: 0.75rem; align-items: flex-start; overflow-x: auto; padding-bottom: 0.5rem; } .ov-rack { flex: 0 0 108px; width: 108px; border: 1px solid rgba(255,255,255,0.08); background: #0d1520; border-radius: 10px; padding: 0; color: var(--text); cursor: pointer; overflow: hidden; transition: border-color 0.15s, transform 0.15s; } .ov-rack:hover { border-color: rgba(90,180,220,0.45); transform: translateY(-2px); } .ov-rack.active { border-color: rgba(61,255,224,0.55); box-shadow: 0 0 0 1px rgba(61,255,224,0.2); } .ov-rack-top { padding: 0.4rem 0.45rem; border-bottom: 1px solid rgba(255,255,255,0.06); background: #121c28; display: flex; flex-direction: column; gap: 0.1rem; } .ov-rack-top strong { font-size: 0.72rem; } .ov-rack-top span { font-size: 0.58rem; color: var(--muted); font-family: var(--mono); } .ov-rack-body { display: flex; flex-direction: column; padding: 3px; gap: 0; background: #080e14; min-height: 336px; } .ov-slot.empty { background: rgba(255,255,255,0.025); border-bottom: 1px solid rgba(255,255,255,0.02); } .ov-slot.filled { border-radius: 1px; margin: 0.5px 1px; } .ov-slot.role-server { background: #2a9d8f; } .ov-slot.role-switch { background: #3a86ff; } .ov-slot.role-storage { background: #e07a3d; } .ov-slot.role-chassis { background: #7b6cf0; } .ov-slot.role-pdu { background: #6b7280; } .ov-slot.role-blank { background: #1f2933; } .ov-slot.role-custom { background: #4b5563; } .rd-edit { flex: 1; min-height: 0; display: grid; grid-template-columns: 1fr min(260px, 22%); overflow: hidden; } .rd-edit.with-lib { grid-template-columns: min(250px, 22%) 1fr min(240px, 20%); } .rd-lib { border-right: 1px solid rgba(255,255,255,0.06); background: #0a121a; display: flex; flex-direction: column; min-height: 0; overflow: hidden; } .rd-lib-tabs { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid rgba(255,255,255,0.06); } .rd-lib-tabs button { border: 0; background: transparent; color: var(--muted); padding: 0.55rem; font-size: 0.72rem; cursor: pointer; } .rd-lib-tabs button.active { color: var(--text); background: rgba(0,168,232,0.12); box-shadow: inset 0 -2px 0 #00a8e8; } .rd-lib input[type="search"] { margin: 0.55rem 0.65rem 0.35rem; background: #071018; border: 1px solid rgba(255,255,255,0.1); color: var(--text); border-radius: 6px; padding: 0.4rem 0.55rem; font-size: 0.78rem; } .rd-fam { padding: 0 0.55rem 0.35rem; flex-wrap: wrap; } .rd-lib-list { flex: 1; overflow-y: auto; padding: 0.35rem 0.55rem 0.75rem; display: flex; flex-direction: column; gap: 0.28rem; } .rd-lib-row, .rd-insp-row { display: flex; align-items: center; gap: 0.45rem; text-align: left; border: 1px solid transparent; background: rgba(255,255,255,0.03); border-radius: 7px; padding: 0.4rem 0.45rem; color: var(--text); cursor: pointer; } .rd-lib-row:hover, .rd-insp-row:hover, .rd-lib-row.active, .rd-insp-row.active { border-color: rgba(0,168,232,0.4); background: rgba(0,168,232,0.08); } .rd-lib-swatch { width: 8px; height: 28px; border-radius: 2px; flex: 0 0 auto; } .rd-lib-swatch.role-server { background: #2a9d8f; } .rd-lib-swatch.role-switch { background: #3a86ff; } .rd-lib-swatch.role-storage { background: #e07a3d; } .rd-lib-swatch.role-chassis { background: #7b6cf0; } .rd-lib-swatch.role-pdu { background: #6b7280; } .rd-lib-swatch.role-blank, .rd-lib-swatch.role-custom { background: #4b5563; } .rd-lib-copy { display: flex; flex-direction: column; min-width: 0; gap: 0.05rem; } .rd-lib-copy strong { font-size: 0.74rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .rd-lib-copy span { font-size: 0.62rem; color: var(--muted); } .rd-stage { min-height: 0; overflow: auto; padding: 0.75rem 1rem 1rem; background: linear-gradient(180deg, #0b131c, #070d14); display: flex; flex-direction: column; gap: 0.65rem; } .rd-rack-switcher { display: flex; gap: 0.35rem; overflow-x: auto; padding-bottom: 0.15rem; } .rd-rack-pill { flex: 0 0 auto; border: 1px solid rgba(255,255,255,0.08); background: #101820; color: var(--text); border-radius: 999px; padding: 0.28rem 0.65rem; font-size: 0.7rem; cursor: pointer; } .rd-rack-pill em { font-style: normal; color: var(--muted); margin-left: 0.25rem; } .rd-rack-pill.active { border-color: rgba(61,255,224,0.5); background: rgba(61,255,224,0.08); } .rd-cabinet { width: min(640px, 100%); margin: 0 auto; border: 1px solid rgba(255,255,255,0.1); border-radius: 12px; background: #0c141e; overflow: hidden; box-shadow: 0 20px 48px rgba(0,0,0,0.35); } .rd-cab-head { display: flex; justify-content: space-between; gap: 0.75rem; padding: 0.7rem 0.9rem; background: #121c28; border-bottom: 1px solid rgba(255,255,255,0.06); } .rd-cab-head strong { display: block; font-size: 1rem; } .rd-cab-head span { font-size: 0.7rem; color: var(--muted); } .rd-side-pdu { display: flex; flex-direction: column; align-items: flex-end; gap: 0.15rem; font-size: 0.65rem; color: #9aa; } .rd-cab-frame { display: grid; grid-template-columns: 14px 1fr 14px; background: #060a10; } .rd-rail { background: repeating-linear-gradient(180deg, #1a2430 0 7px, #0e151e 7px 14px); } .rd-stack { display: flex; flex-direction: column; gap: 1px; padding: 4px; background: #0a1018; } .rd-u { position: relative; display: grid; grid-template-columns: 34px 1fr minmax(0, 160px) 22px; align-items: stretch; gap: 0.35rem; border-radius: 4px; min-height: 0; } .rd-u.empty { grid-template-columns: 34px 1fr; background: rgba(255,255,255,0.02); border: 1px solid transparent; } .rd-u.empty.placeable { cursor: pointer; } .rd-u.empty.placeable:hover { background: rgba(58,134,255,0.15); border-color: rgba(58,134,255,0.35); } .rd-u.filled { background: rgba(0,0,0,0.25); border: 1px solid rgba(255,255,255,0.08); cursor: pointer; } .rd-u.filled.sel { border-color: rgba(61,255,224,0.55); } .rd-u.role-switch { box-shadow: inset 3px 0 0 #3a86ff; } .rd-u.role-server { box-shadow: inset 3px 0 0 #2a9d8f; } .rd-u.role-storage { box-shadow: inset 3px 0 0 #e07a3d; } .rd-u.role-chassis { box-shadow: inset 3px 0 0 #7b6cf0; } .rd-u.role-pdu { box-shadow: inset 3px 0 0 #6b7280; } .rd-u-num { font-family: var(--mono); font-size: 0.58rem; color: #5f7388; display: flex; align-items: center; padding-left: 0.25rem; } .rd-u-face { min-width: 0; border-radius: 3px; overflow: hidden; } .rd-u-face .ru-face { width: 100%; height: 100%; display: block; } .rd-u-meta { display: flex; flex-direction: column; justify-content: center; min-width: 0; padding-right: 0.15rem; } .rd-u-meta strong { font-size: 0.7rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .rd-u-meta span { font-size: 0.58rem; color: #8fa3b5; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .rd-u-x { border: 0; background: transparent; color: #889; cursor: pointer; font-size: 0.9rem; line-height: 1; } .rd-u-x:hover { color: #fff; } .rd-placebar { display: flex; flex-wrap: wrap; align-items: center; gap: 0.55rem; padding: 0.55rem 0.75rem; border: 1px solid rgba(58,134,255,0.35); border-radius: 8px; background: rgba(20,40,70,0.55); font-size: 0.75rem; } .rd-placebar.hidden { display: none; } .rd-placebar input, .rd-placebar select { width: 4.2rem; background: #071018; border: 1px solid rgba(255,255,255,0.12); color: var(--text); border-radius: 4px; padding: 0.25rem 0.35rem; } .rd-placebar select { width: auto; } .rd-inspector { border-left: 1px solid rgba(255,255,255,0.06); background: #0a121a; overflow-y: auto; padding: 0.75rem; } .rd-insp-head strong { display: block; font-size: 0.9rem; } .rd-insp-head span { font-size: 0.68rem; color: var(--muted); } .rd-fillbar { height: 6px; border-radius: 99px; background: rgba(255,255,255,0.06); margin: 0.55rem 0 0.75rem; overflow: hidden; } .rd-fillbar i { display: block; height: 100%; background: linear-gradient(90deg, #2a9d8f, #3a86ff); } .rd-insp-card { border: 1px solid rgba(255,255,255,0.08); border-radius: 8px; padding: 0.55rem 0.65rem; background: rgba(255,255,255,0.03); margin-bottom: 0.75rem; } .rd-insp-card h4, .rd-insp-list-h { margin: 0 0 0.35rem; font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--muted); } .rd-insp-card p { margin: 0.15rem 0; font-size: 0.72rem; color: #a8b8c8; } .rd-insp-list { display: flex; flex-direction: column; gap: 0.25rem; } @media (max-width: 1100px) { .rd-edit, .rd-edit.with-lib { grid-template-columns: 1fr; } .rd-lib, .rd-inspector { max-height: 220px; border: 0; border-bottom: 1px solid rgba(255,255,255,0.06); } .rd-gallery { padding-bottom: 1rem; } } /* ===== Fullscreen Dell Rack Design Studio (Visio-style) ===== */ .rack-studio { position: fixed; inset: 0; z-index: 12000; display: none; } .rack-studio.open { display: block; } .rs-backdrop { position: absolute; inset: 0; background: rgba(15, 23, 32, 0.55); backdrop-filter: blur(5px); } .rs-shell { position: absolute; inset: 1.5vh 1.5vw; display: flex; flex-direction: column; border-radius: 10px; border: 1px solid #c5d0da; background: #e8eef3; box-shadow: 0 28px 80px rgba(0,0,0,0.4); overflow: hidden; animation: rs-pop 0.2s ease-out; color: #1a2430; } @keyframes rs-pop { from { opacity: 0; transform: scale(0.97); } to { opacity: 1; transform: scale(1); } } .rs-head { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0.55rem 0.85rem; border-bottom: 1px solid #c5d0da; background: linear-gradient(180deg, #f7fafc, #e4ebf1); flex-wrap: wrap; } .rs-brand { display: flex; align-items: center; gap: 0.65rem; } .rs-brand strong { display: block; font-size: 0.95rem; color: #0f1a24; } .rs-brand span { font-size: 0.7rem; color: #5a6b7a; } .rs-head-actions { display: flex; align-items: center; gap: 0.55rem; flex-wrap: wrap; } .rs-head .chip { background: #fff; border-color: #b8c4d0; color: #243040; } .rs-head .chip.active { background: #0076ce; border-color: #0076ce; color: #fff; } .rs-head .btn { background: #fff; border-color: #b8c4d0; color: #243040; } .rs-zoom { display: inline-flex; align-items: center; gap: 0.3rem; padding: 0.15rem 0.35rem; border-radius: 6px; background: #fff; border: 1px solid #c5d0da; font-size: 0.72rem; font-family: var(--mono); color: #243040; } .rs-body { flex: 1; min-height: 0; display: grid; grid-template-columns: min(300px, 24%) 1fr min(240px, 20%); overflow: hidden; } .rs-lib, .rs-insp { min-height: 0; overflow: hidden; display: flex; flex-direction: column; background: #f4f7fa; border-right: 1px solid #c5d0da; color: #1a2430; } .rs-insp { border-right: 0; border-left: 1px solid #c5d0da; padding: 0.75rem; overflow-y: auto; background: #f7fafc; } .rs-lib-tabs { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid #c5d0da; background: #e8eef3; } .rs-lib-tabs button { border: 0; background: transparent; color: #5a6b7a; padding: 0.6rem; font-size: 0.72rem; cursor: pointer; font-weight: 600; } .rs-lib-tabs button.active { color: #0076ce; background: #fff; box-shadow: inset 0 -2px 0 #0076ce; } .rs-lib input[type="search"] { margin: 0.55rem 0.65rem 0.35rem; background: #fff; border: 1px solid #b8c4d0; color: #1a2430; border-radius: 6px; padding: 0.45rem 0.55rem; font-size: 0.78rem; } .rs-fam { padding: 0 0.55rem 0.4rem; flex-wrap: wrap; max-height: 72px; overflow: auto; } .rs-fam .chip { background: #fff; border-color: #b8c4d0; color: #243040; font-size: 0.65rem; } .rs-fam .chip.active { background: #0076ce; border-color: #0076ce; color: #fff; } .rs-lib-list { flex: 1; overflow-y: auto; padding: 0.35rem 0.55rem 0.75rem; display: flex; flex-direction: column; gap: 0.4rem; } .rs-stencil { display: grid; grid-template-columns: 10px 76px 1fr; gap: 0.45rem; align-items: center; text-align: left; border: 1px solid #c5d0da; background: #fff; border-radius: 8px; padding: 0.4rem; color: #1a2430; cursor: grab; box-shadow: 0 1px 2px rgba(0,0,0,0.04); user-select: none; } .rs-stencil:active { cursor: grabbing; } .rs-stencil:hover, .rs-stencil.active { border-color: #0076ce; box-shadow: 0 0 0 2px rgba(0,118,206,0.2); } .rs-stencil.dragging { opacity: 0.45; } .rs-stencil-grip { width: 6px; height: 28px; border-radius: 2px; background: repeating-linear-gradient(#9aabba 0 2px, transparent 2px 4px); justify-self: center; } .rs-prod, .rs-prod:hover, .rs-prod.active { /* legacy */ } .rs-prod-face { height: 40px; border-radius: 4px; overflow: hidden; background: #0a1018; border: 1px solid #d0d8e0; } .rs-prod-face .ru-photo { height: 40px; width: 100%; object-fit: contain; display: block; background: #0e141c; } .rs-prod-meta { display: flex; flex-direction: column; min-width: 0; gap: 0.1rem; } .rs-prod-meta strong { font-size: 0.74rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: #12202e; } .rs-prod-meta em { font-style: normal; font-size: 0.62rem; color: #607080; } .rs-lib-hint { margin: 0; padding: 0.45rem 0.65rem 0.65rem; font-size: 0.68rem; color: #5a6b7a; border-top: 1px solid #c5d0da; background: #eef3f7; } .rs-canvas-wrap { min-height: 0; display: flex; flex-direction: column; background: #d6dee6; } .rs-statusbar { display: flex; justify-content: space-between; align-items: center; gap: 0.75rem; padding: 0.4rem 0.85rem; border-bottom: 1px solid #c5d0da; background: #f0f4f8; font-size: 0.72rem; color: #3a4a5a; } .rs-status-side { font-family: var(--mono); font-size: 0.65rem; color: #0076ce; font-weight: 600; } .rs-canvas.visio { flex: 1; min-height: 0; overflow: auto; padding: 1.25rem 1.5rem 2rem; background-color: #cfd8e2; background-image: linear-gradient(rgba(255,255,255,0.35) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.35) 1px, transparent 1px); background-size: 20px 20px; } .rs-zoom-layer { width: max-content; min-width: 100%; margin: 0 auto; display: flex; justify-content: center; transition: transform 0.15s ease; } .rs-cabinet { width: min(980px, 96vw); border: 1px solid #8a9aac; border-radius: 6px; background: #1a222c; overflow: hidden; box-shadow: 0 1px 0 rgba(255,255,255,0.5), 0 18px 40px rgba(0,0,0,0.28); } .rs-cab-head { display: flex; justify-content: space-between; gap: 0.75rem; padding: 0.65rem 0.9rem; background: linear-gradient(180deg, #2a3542, #1e2833); border-bottom: 1px solid #0d1218; color: #e8eef4; } .rs-cab-head strong { display: block; font-size: 1.05rem; } .rs-cab-head span { font-size: 0.72rem; color: #9aabba; } .rs-side-pdu { font-size: 0.68rem; color: #9aabba; text-align: right; } .rs-frame { display: grid; grid-template-columns: 20px 1fr 20px; background: #0c1016; } .rs-rail { background: repeating-linear-gradient(180deg, #3a4654 0 11px, #1c2430 11px 22px); } .rs-stack { display: flex; flex-direction: column; gap: 1px; padding: 5px; background: #121820; } .rs-u { position: relative; display: grid; grid-template-columns: 46px minmax(0, 1fr) 30px; align-items: stretch; gap: 0.3rem; border-radius: 3px; transition: background 0.1s, box-shadow 0.1s; flex: 0 0 auto; box-sizing: border-box; } .rs-u.empty { grid-template-columns: 46px 1fr; background: rgba(255,255,255,0.03); border: 1px dashed rgba(255,255,255,0.08); } .rs-u.empty .rs-u-ghost { opacity: 0; color: #7a90a4; font-size: 0.68rem; display: flex; align-items: center; text-transform: uppercase; letter-spacing: 0.04em; } .rs-dragging .rs-u.empty .rs-u-ghost { opacity: 0.7; } .rs-u.empty.drop-over, .rs-u.empty.drop-span { background: rgba(0,118,206,0.35) !important; border: 1px solid #4db2ff !important; box-shadow: inset 0 0 0 2px rgba(77,178,255,0.5); } .rs-u.empty.drop-span:not(.drop-over) { background: rgba(0,118,206,0.22) !important; border-style: dashed !important; } .rs-u.empty.drop-bad { background: rgba(220, 38, 38, 0.28) !important; border: 1px solid #f87171 !important; box-shadow: inset 0 0 0 2px rgba(248,113,113,0.35); } .rs-u.empty.drop-over .rs-u-ghost, .rs-u.empty.drop-span .rs-u-ghost { opacity: 1; color: #dff; font-weight: 600; } .rs-u.empty.drop-bad .rs-u-ghost { opacity: 1; color: #fecaca; font-weight: 600; } .rs-u.filled { background: #0a1016; border: 1px solid rgba(255,255,255,0.14); cursor: grab; color: #e8eef4; padding: 2px; } .rs-u.filled:active { cursor: grabbing; } .rs-u.filled.sel { border-color: #4db2ff; box-shadow: 0 0 0 2px rgba(0,118,206,0.35); } .rs-u.filled.dragging { opacity: 0.4; } .rs-u.role-switch { box-shadow: inset 4px 0 0 #3a86ff; } .rs-u.role-server { box-shadow: inset 4px 0 0 #2a9d8f; } .rs-u.role-storage { box-shadow: inset 4px 0 0 #e07a3d; } .rs-u.role-chassis { box-shadow: inset 4px 0 0 #7b6cf0; } .rs-u.role-pdu { box-shadow: inset 4px 0 0 #6b7280; } .rs-u-face { position: relative; min-width: 0; width: 100%; height: 100%; border-radius: 3px; overflow: hidden; background: #111820; align-self: stretch; } .rs-u-face .ru-photo { position: absolute; inset: 0; width: 100%; height: 100%; display: block; object-fit: fill; object-position: center; background: #111820; pointer-events: none; /* slight per-SKU hue so identical face assets still look distinct */ filter: hue-rotate(calc(var(--face-hue, 0) * 1deg)) saturate(1.05); } .ru-photo.compact { position: static; height: 40px; width: 100%; object-fit: cover; border-radius: 4px; background: #0e141c; } .rs-u-overlay { position: absolute; left: 0; right: 0; bottom: 0; z-index: 2; padding: 0.15rem 0.5rem 0.2rem; background: linear-gradient(180deg, transparent 0%, rgba(0,0,0,0.75) 55%); display: flex; flex-direction: column; gap: 0; pointer-events: none; } .rs-u-overlay strong { font-size: 0.8rem; color: #fff; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-shadow: 0 1px 3px rgba(0,0,0,0.9); } .rs-u-overlay span { font-size: 0.62rem; color: #d5e0ea; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* Solid nameplate — readable over any face photo */ .rs-u-plate { position: absolute; left: 0; top: 0; bottom: 0; z-index: 3; width: min(46%, 320px); min-width: 140px; padding: 0.2rem 0.75rem 0.2rem 0.55rem; display: flex; flex-direction: column; justify-content: center; gap: 0.05rem; pointer-events: none; background: linear-gradient(90deg, rgba(6, 18, 32, 0.97) 0%, rgba(6, 18, 32, 0.92) 72%, rgba(6, 18, 32, 0) 100%); border-right: 0; } .rs-u-plate .rs-u-code { display: inline-block; align-self: flex-start; font-family: var(--mono); font-size: 0.68rem; font-weight: 800; letter-spacing: 0.04em; color: #041018; background: #7fd4c8; padding: 0.08rem 0.35rem; border-radius: 3px; line-height: 1.2; margin-bottom: 0.1rem; } .rs-u-face.role-switch .rs-u-plate .rs-u-code { background: #7eb6ff; } .rs-u-face.role-storage .rs-u-plate .rs-u-code { background: #f0a878; } .rs-u-face.role-chassis .rs-u-plate .rs-u-code, .rs-u-face.role-blade .rs-u-plate .rs-u-code { background: #b5a8ff; } .rs-u-face.role-pdu .rs-u-plate .rs-u-code { background: #c5ccd4; } .rs-u-plate strong { font-size: 0.82rem; font-weight: 700; color: #fff; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; line-height: 1.2; text-shadow: 0 1px 2px rgba(0,0,0,0.8); } .rs-u-plate span:not(.rs-u-code) { font-size: 0.62rem; color: #c5d4e2; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } html[data-theme="light"] .rs-u-plate { background: linear-gradient(90deg, rgba(255, 255, 255, 0.96) 0%, rgba(255, 255, 255, 0.9) 70%, rgba(255, 255, 255, 0) 100%); } html[data-theme="light"] .rs-u-plate strong { color: #0e1a26; text-shadow: none; } html[data-theme="light"] .rs-u-plate span:not(.rs-u-code) { color: #3a4a5a; } .rs-u-num { font-family: var(--mono); font-size: 0.8rem; font-weight: 700; color: #9eb2c4; display: flex; align-items: center; justify-content: center; padding: 0; } .rs-u-nums { display: flex; flex-direction: column; justify-content: stretch; height: 100%; min-height: 0; } .rs-u-nums .rs-u-num { flex: 1 1 0; min-height: 0; border-bottom: 1px solid rgba(158, 178, 196, 0.18); } .rs-u-nums .rs-u-num:last-child { border-bottom: 0; } .rs-u-x { border: 0; background: transparent; color: #ef4444; cursor: pointer; font-size: 1.15rem; font-weight: 700; opacity: 0.9; line-height: 1; padding: 0.15rem 0.25rem; } .rs-u-x:hover { color: #ff6b6b; opacity: 1; background: rgba(239, 68, 68, 0.15); border-radius: 4px; } .rs-drag-ghost { position: fixed; top: 0; left: 0; width: 260px; padding: 0.4rem 0.5rem; background: #0f1a24; border: 2px solid #0076ce; border-radius: 8px; box-shadow: 0 8px 24px rgba(0,0,0,0.35); display: flex; align-items: center; gap: 0.5rem; z-index: 13000; pointer-events: none; font-size: 0.72rem; color: #e8f0f8; opacity: 0.99; transform: translate(-10000px, -10000px); } .rs-drag-ghost .ru-photo { width: 88px; height: 32px; flex: 0 0 auto; object-fit: cover; border-radius: 3px; } .rs-drag-ghost .rs-ghost-meta { display: flex; flex-direction: column; min-width: 0; gap: 0.1rem; } .rs-drag-ghost .rs-ghost-code { align-self: flex-start; font-family: var(--mono); font-weight: 800; font-size: 0.65rem; background: #7fd4c8; color: #041018; padding: 0.05rem 0.3rem; border-radius: 3px; } .rs-drag-ghost strong { color: #fff; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .rs-insp-head strong { display: block; font-size: 0.95rem; color: #12202e; } .rs-insp-head span { font-size: 0.68rem; color: #5a6b7a; } .rs-insp .hint { color: #5a6b7a; } .rs-insp .rd-insp-card { background: #fff; border: 1px solid #c5d0da; color: #1a2430; } .rs-insp .rd-insp-card p { color: #3a4a5a; } .rs-insp .rd-insp-row { background: #fff; border: 1px solid #d0d8e0; color: #1a2430; } .rs-insp .rd-insp-row:hover, .rs-insp .rd-insp-row.active { border-color: #0076ce; background: #e8f3fc; } .rs-insp .rd-insp-list-h { color: #5a6b7a; } .rd-lib-swatch { display: inline-block; } @media (max-width: 1100px) { .rs-body { grid-template-columns: 1fr; } .rs-lib, .rs-insp { max-height: 200px; } .rs-shell { inset: 0; border-radius: 0; } .rs-cabinet { width: min(760px, 100%); } } /* ===== VLANs ===== */ .vlan-layout { flex: 1; min-height: 0; display: grid; grid-template-columns: min(340px, 34%) 1fr; overflow: hidden; } .vlan-list-pane { overflow-y: auto; padding: 0.85rem; border-right: 1px solid var(--panel-border); background: rgba(6,14,24,0.96); } .vlan-list-pane h4 { margin: 0.75rem 0 0.4rem; font-size: 0.75rem; text-transform: uppercase; color: var(--muted); } .vlan-cards { display: flex; flex-direction: column; gap: 0.45rem; } .vlan-card { text-align: left; border: 1px solid rgba(0,168,232,0.22); border-left: 4px solid var(--vlan, #00a8e8); background: rgba(0,28,48,0.5); border-radius: 10px; padding: 0.6rem 0.7rem; color: var(--text); cursor: pointer; display: flex; flex-direction: column; gap: 0.15rem; } .vlan-card.active { background: rgba(0,50,70,0.55); border-color: var(--vlan, #3dffe0); } .vlan-id { font-family: var(--mono); font-size: 0.68rem; color: var(--vlan, #00a8e8); } .vlan-discovered { margin: 0; padding-left: 1.1rem; color: var(--muted); font-size: 0.75rem; } .vlan-detail-pane { overflow: auto; padding: 1rem; } .vlan-detail-head { display: flex; justify-content: space-between; gap: 1rem; padding: 0.85rem 1rem; border-radius: 12px; border: 1px solid; background: rgba(0,30,50,0.45); margin-bottom: 0.85rem; } .vlan-detail-head h3 { margin: 0 0 0.25rem; font-size: 1.05rem; } .vlan-stat { font-family: var(--mono); align-self: center; padding: 0.3rem 0.65rem; border-radius: 999px; border: 1px solid rgba(61,255,224,0.35); color: var(--cyan); } .vlan-members { display: flex; flex-direction: column; gap: 0.4rem; } .vlan-member { border: 1px solid rgba(0,168,232,0.18); border-radius: 8px; padding: 0.55rem 0.7rem; display: flex; flex-direction: column; gap: 0.15rem; } .vlan-member.up { border-color: rgba(61,255,224,0.35); } .vlan-member.down { opacity: 0.75; } @media (max-width: 1100px) { .rack-studio { grid-template-columns: 1fr; overflow: auto; } .vlan-layout { grid-template-columns: 1fr; } } /* ===== Light theme readability overrides ===== */ html[data-theme="light"] .hint, html[data-theme="light"] .muted, html[data-theme="light"] .modal-sub, html[data-theme="light"] .modal-kicker { color: var(--muted) !important; } html[data-theme="light"] .rail, html[data-theme="light"] .drawer, html[data-theme="light"] .inspector, html[data-theme="light"] .chat-drawer, html[data-theme="light"] .ops-drawer, html[data-theme="light"] .reports-drawer, html[data-theme="light"] .network-drawer, html[data-theme="light"] .ai-drawer, html[data-theme="light"] .modal-card { background: var(--panel) !important; color: var(--text) !important; border-color: var(--panel-border) !important; } html[data-theme="light"] .scrim { background: rgba(40, 55, 75, 0.28); } html[data-theme="light"] .btn { color: var(--text); border-color: #b7c5d4; background: #fff; } html[data-theme="light"] .btn:hover { color: var(--dell); border-color: var(--dell); background: #f0f6fc; } html[data-theme="light"] .btn.primary, html[data-theme="light"] .chip.active { background: var(--dell) !important; border-color: var(--dell) !important; color: #fff !important; } html[data-theme="light"] .btn.ghost { background: transparent; color: var(--text); } html[data-theme="light"] .chip { color: var(--text) !important; border-color: #b7c5d4 !important; background: #fff !important; } html[data-theme="light"] .chip:hover { background: #e8f2fc !important; color: var(--dell) !important; border-color: var(--dell) !important; } html[data-theme="light"] input, html[data-theme="light"] select, html[data-theme="light"] textarea { background: #fff !important; color: var(--text) !important; border-color: #b7c5d4 !important; } html[data-theme="light"] .rail-block, html[data-theme="light"] .viz-card, html[data-theme="light"] .kpi-card, html[data-theme="light"] .ctx-card, html[data-theme="light"] .card, html[data-theme="light"] .feed-item, html[data-theme="light"] .list-item, html[data-theme="light"] .sw-card, html[data-theme="light"] .vlan-card, html[data-theme="light"] .rack-thumb, html[data-theme="light"] .ops-row { background: #fff !important; border-color: #c5d0dc !important; color: var(--text) !important; } html[data-theme="light"] .rail-toggle { color: var(--dell) !important; } html[data-theme="light"] .rail-toggle:hover { background: #e8f2fc !important; color: #005a9e !important; } html[data-theme="light"] .hint { color: #4a5d72 !important; } html[data-theme="light"] .mono, html[data-theme="light"] strong, html[data-theme="light"] h1, html[data-theme="light"] h2, html[data-theme="light"] h3, html[data-theme="light"] h4 { color: var(--text); } html[data-theme="light"] .brand-text h1 span { color: var(--dell); } html[data-theme="light"] .stage, html[data-theme="light"] #stage, html[data-theme="light"] .stage-wrap { background: #cfdceb !important; } html[data-theme="light"] .ticker { background: #fff !important; border-color: #c5d0dc !important; color: var(--text) !important; } html[data-theme="light"] .drawer-head, html[data-theme="light"] .modal-head { background: #f4f7fb !important; border-color: #c5d0dc !important; color: var(--text) !important; } html[data-theme="light"] .chat-msg, html[data-theme="light"] .bubble { background: #fff !important; color: var(--text) !important; border-color: #c5d0dc !important; } html[data-theme="light"] .kpi { background: #fff; border-color: #c5d0dc; color: var(--text); } html[data-theme="light"] .kpi:hover { background: #e8f2fc; } html[data-theme="light"] .net-fabric-canvas-wrap, html[data-theme="light"] .sw-list-pane, html[data-theme="light"] .sw-wire-pane { background: #f4f7fb !important; color: var(--text) !important; border-color: #c5d0dc !important; } /* Light Design Studio */ html[data-theme="light"] .rs-shell { background: #f5f8fc; border-color: #c5d0dc; color: #122033; } html[data-theme="light"] .rs-head { background: linear-gradient(180deg, #fff, #eef3f8); border-color: #c5d0dc; } html[data-theme="light"] .rs-brand strong { color: #122033; } html[data-theme="light"] .rs-brand span { color: #4a5d72; } html[data-theme="light"] .rs-lib, html[data-theme="light"] .rs-insp { background: #f7fafc; border-color: #c5d0dc; color: #122033; } html[data-theme="light"] .rs-lib-tabs { background: #e8eef5; border-color: #c5d0dc; } html[data-theme="light"] .rs-lib-tabs button { color: #4a5d72; } html[data-theme="light"] .rs-lib-tabs button.active { color: var(--dell); background: #fff; } html[data-theme="light"] .rs-stencil { background: #fff; border-color: #c5d0dc; color: #122033; } html[data-theme="light"] .rs-statusbar { background: #eef3f8; border-color: #c5d0dc; color: #243040; } html[data-theme="light"] .rs-canvas.visio { background-color: #d8e2ee; background-image: linear-gradient(rgba(255,255,255,0.6) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.6) 1px, transparent 1px); } html[data-theme="light"] .rs-cabinet { background: #fafcfe; border: 1px solid #8fa0b2; box-shadow: 0 12px 30px rgba(20,40,70,0.12); } html[data-theme="light"] .rs-cab-head { background: linear-gradient(180deg, #fff, #e8eef5); border-bottom: 1px solid #c5d0dc; color: #122033; } html[data-theme="light"] .rs-cab-head span, html[data-theme="light"] .rs-side-pdu { color: #4a5d72; } html[data-theme="light"] .rs-frame { background: #e4ebf3; } html[data-theme="light"] .rs-rail { background: repeating-linear-gradient(180deg, #c8d2de 0 11px, #b4bfcc 11px 22px); } html[data-theme="light"] .rs-stack { background: #eef3f8; } html[data-theme="light"] .rs-u.empty { background: #fff; border: 1px dashed rgba(30,50,80,0.22); } html[data-theme="light"] .rs-u-num { color: #2f4458; font-weight: 700; } html[data-theme="light"] .rs-u.filled { background: #fff; border: 1px solid #b0becb; color: #122033; } html[data-theme="light"] .rs-u-face { background: #1a222c; } html[data-theme="light"] .rs-u-x { color: #dc2626; } html[data-theme="light"] .rs-u-x:hover { color: #b91c1c; background: rgba(220, 38, 38, 0.12); } html[data-theme="light"] .rd-overview { background: linear-gradient(180deg, #f4f7fb, #e4ebf3); } html[data-theme="light"] .rd-overview-head h3 { color: #122033; } html[data-theme="light"] .rd-overview-head p { color: #4a5d72; } html[data-theme="light"] .ov-rack { background: #fff; border-color: #c5d0dc; color: #122033; } html[data-theme="light"] .ov-rack-top { background: #eef3f8; border-color: #c5d0dc; } html[data-theme="light"] .ov-rack-body { background: #f7f9fc; } html[data-theme="light"] .ov-rack-cta { color: #0062b0; background: #e8f2fc; border-color: #c5d0dc; } html[data-theme="light"] .rd-bar { background: #fff; border-color: #c5d0dc; color: #122033; } html[data-theme="light"] .network-panel, html[data-theme="light"] .network-body { background: #eef3f8 !important; color: var(--text) !important; } html[data-theme="light"] .rs-prod-meta strong { color: #122033; } html[data-theme="light"] .rs-prod-meta em, html[data-theme="light"] .rs-lib-hint { color: #4a5d72; } /* Theme FAB — bottom left, icon only */ .theme-fab { position: fixed; right: 14px; left: auto; bottom: 48px; z-index: 9000; width: 42px; height: 42px; border-radius: 999px; border: 2px solid rgba(255, 255, 255, 0.35); background: linear-gradient(145deg, #00a8e8, #0076ce); color: #fff; display: grid; place-items: center; box-shadow: 0 4px 14px rgba(0, 118, 206, 0.45), 0 0 0 3px rgba(0, 168, 232, 0.2); cursor: pointer; padding: 0; transition: transform 0.15s ease, box-shadow 0.15s ease, filter 0.15s ease; } .theme-fab:hover { border-color: #fff; color: #fff; transform: translateY(-2px) scale(1.05); filter: brightness(1.08); box-shadow: 0 8px 20px rgba(0, 118, 206, 0.55), 0 0 0 4px rgba(0, 168, 232, 0.28); } .theme-fab .theme-ico { display: none; } html[data-theme="light"] .theme-fab .theme-ico-moon { display: block; } html[data-theme="dark"] .theme-fab .theme-ico-sun, html:not([data-theme]) .theme-fab .theme-ico-sun { display: block; } html[data-theme="light"] .theme-fab { background: linear-gradient(145deg, #1aa3e8, #0062b0); border-color: rgba(255, 255, 255, 0.7); color: #fff; box-shadow: 0 4px 14px rgba(0, 98, 176, 0.35), 0 0 0 3px rgba(0, 118, 206, 0.15); }