: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-block[data-module="filters"] { overflow: visible; z-index: 5; } .rail-block[data-module="filters"].pulse-open { z-index: 30; } .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); } .pulse-row { position: relative; display: flex; align-items: center; gap: 0.35rem; flex-wrap: wrap; } .pulse-row .toggle { flex: 1; min-width: 0; } .pulse-gear { width: 28px; height: 28px; padding: 0 !important; font-size: 0.95rem; line-height: 1; border-radius: 6px; } .pulse-pop { position: absolute; left: 0; right: 0; top: calc(100% + 6px); z-index: 80; padding: 0.7rem 0.75rem 0.8rem; border-radius: 10px; border: 1px solid rgba(255,154,60,0.4); background: rgba(8, 18, 32, 0.98); box-shadow: 0 12px 32px rgba(0,0,0,0.45); display: flex; flex-direction: column; gap: 0.5rem; max-height: none; overflow: visible; } .pulse-pop[hidden] { display: none !important; } .pulse-pop strong { font-size: 0.78rem; color: #fff; } .pulse-pop .hint { color: #f0f4f8 !important; margin: 0; } .pulse-pop .range, .pulse-pop .range span { color: #fff; } .pulse-pop .range em { color: #ffb040; } .pulse-presets { display: grid; grid-template-columns: 1fr 1fr; gap: 0.35rem; } .pulse-presets .chip { justify-content: center; text-align: center; min-height: 2rem; } .pulse-speed-range { width: 100%; } .pulse-colors { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.4rem; } .pulse-color-field { display: flex; flex-direction: column; align-items: center; gap: 0.25rem; font-size: 0.65rem; color: #fff; text-transform: uppercase; letter-spacing: 0.04em; } .pulse-color-field input[type="color"] { width: 100%; height: 32px; padding: 0; border: 1px solid rgba(255,255,255,0.3); border-radius: 6px; background: transparent; cursor: pointer; } .pulse-color-presets { display: flex; flex-wrap: wrap; gap: 0.35rem; } .pulse-swatch { width: 22px; height: 22px; border-radius: 999px; border: 2px solid rgba(255,255,255,0.35); background: var(--sw, #3dffe0); cursor: pointer; padding: 0; } .pulse-swatch:hover { border-color: #fff; transform: scale(1.08); } .rail-block[data-module="filters"].open .rail-panel, .filters, .pulse-row { overflow: visible; } .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.45rem; font-size: 0.72rem; letter-spacing: 0.1em; text-transform: uppercase; color: #ff9a3c; font-weight: 700; } .inv-line { font-family: var(--mono); font-size: 0.78rem; line-height: 1.45; color: #ffffff; padding: 0.38rem 0; border-bottom: 1px solid rgba(255, 255, 255, 0.08); word-break: break-word; } .inv-panel { margin-top: 0.85rem; padding: 0.65rem 0.7rem 1.1rem; border-radius: 10px; border: 1px solid rgba(255, 154, 60, 0.28); background: rgba(6, 14, 24, 0.72); } .inv-panel-head { display: flex; align-items: baseline; justify-content: space-between; gap: 0.5rem; margin-bottom: 0.55rem; padding-bottom: 0.4rem; border-bottom: 1px solid rgba(255, 255, 255, 0.1); } .inv-panel-head strong { color: #fff; font-size: 0.82rem; letter-spacing: 0.04em; text-transform: uppercase; } .inv-panel-head span { font-size: 0.68rem; color: #ffb84d; } #inv-mount { padding-bottom: 1.25rem; } .inspector-body .kv-row .k { color: #d7e2ec; } .inspector-body .kv-row .v { color: #ffffff; } .inspector-body .hint { color: #e8f0f8; } html[data-theme="light"] .inv-line { color: #122033; } html[data-theme="light"] .inv-section h3 { color: #c45e00; } html[data-theme="light"] .inv-panel { background: #fff; border-color: rgba(196, 94, 0, 0.28); } html[data-theme="light"] .inv-panel-head strong { color: #122033; } html[data-theme="light"] .inspector-body .kv-row .k { color: #4a5d72; } html[data-theme="light"] .inspector-body .kv-row .v { color: #122033; } .app-footer { grid-column: 1 / -1; display: flex; flex-direction: column; border-top: 1px solid var(--panel-border); background: rgba(2, 8, 16, 0.98); z-index: 5; } .app-credit { display: flex; flex-wrap: wrap; align-items: center; gap: 0.25rem 0.55rem; padding: 0.4rem 1rem 0.25rem; font-size: 0.74rem; line-height: 1.35; color: #e8eef5; letter-spacing: 0.01em; } .app-credit strong { color: #fff; font-weight: 650; } .app-credit-sep { color: #8fa3b5; opacity: 0.8; } .ticker { display: flex; align-items: center; flex-wrap: wrap; gap: 0.35rem 1rem; padding: 0.28rem 1rem 0.4rem; border-top: 1px solid rgba(255,255,255,0.06); font-family: var(--mono); font-size: 0.7rem; color: #c5d4e2; 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: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); } .drawer.wide.ops-drawer { width: min(980px, 100vw); display: flex; flex-direction: column; } .ops-layout { flex: 1; display: grid; grid-template-columns: 280px 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; background: rgba(8, 16, 26, 0.92); } .ops-side-actions { display: grid; grid-template-columns: 1fr auto; gap: 0.35rem; } .ops-identity { display: flex; flex-direction: column; gap: 0.3rem; font-size: 0.72rem; color: #d7e2ec; } .ops-identity select { border: 1px solid rgba(120, 160, 200, 0.28); background: rgba(0,20,40,0.85); border-radius: 6px; padding: 0.45rem; color: #fff; } .ops-main { overflow-y: auto; padding: 0.95rem 1.05rem; background: #0a1018; } .ops-empty { max-width: 720px; } .ops-empty h3 { margin: 0 0 0.35rem; color: #fff; font-size: 1.15rem; font-weight: 650; } .ops-intro { margin: 0 0 1rem; color: #d0dce8; line-height: 1.45; font-size: 0.86rem; } .ops-team-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.65rem; margin-bottom: 1rem; } .ops-team-card { border-radius: 8px; padding: 0.7rem 0.75rem; border: 1px solid rgba(255,255,255,0.1); background: rgba(12, 20, 32, 0.9); } .ops-team-card.admin { border-color: rgba(100, 160, 210, 0.35); } .ops-team-card.fde { border-color: rgba(180, 140, 90, 0.35); } .ops-team-card h4 { margin: 0 0 0.5rem; font-size: 0.68rem; letter-spacing: 0.06em; text-transform: uppercase; color: #9eb4c8; font-weight: 650; } .ops-team-card ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.5rem; } .ops-team-card li { display: flex; flex-direction: column; gap: 0.12rem; } .ops-team-card strong { color: #fff; font-size: 0.84rem; font-weight: 600; } .ops-team-card span { color: #b8c7d6; font-size: 0.72rem; line-height: 1.35; } .ops-quick h4 { margin: 0 0 0.45rem; font-size: 0.68rem; letter-spacing: 0.06em; text-transform: uppercase; color: #9eb4c8; font-weight: 650; } .ops-quick-row { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-bottom: 1rem; } .ops-stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0.45rem; margin-bottom: 0.25rem; } .ops-stat { border: 1px solid rgba(255,255,255,0.1); border-radius: 8px; padding: 0.5rem 0.55rem; background: rgba(12, 20, 32, 0.9); } .ops-stat em { display: block; font-style: normal; font-size: 1.15rem; font-weight: 650; color: #fff; line-height: 1.1; } .ops-stat span { display: block; margin-top: 0.2rem; font-size: 0.66rem; color: #b8c7d6; } .ops-footer { flex-shrink: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 0.35rem 0.55rem; padding: 0.5rem 0.9rem; border-top: 1px solid rgba(255,255,255,0.08); background: rgba(4, 10, 16, 0.96); font-size: 0.74rem; color: #e8eef5; line-height: 1.35; } .ops-footer strong { color: #fff; font-weight: 650; } .ops-footer-sep { opacity: 0.55; color: #8fa3b5; } .drawer-credit { flex-shrink: 0; padding: 0.45rem 0.85rem; border-top: 1px solid rgba(255,255,255,0.08); background: rgba(4, 10, 16, 0.96); font-size: 0.72rem; color: #e8eef5; line-height: 1.35; } .drawer-credit strong { color: #fff; font-weight: 650; } .ops-team-pill { display: inline-block; padding: 0.05rem 0.35rem; border-radius: 4px; font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.04em; font-weight: 650; } .ops-team-pill.admin { background: rgba(100, 160, 210, 0.15); color: #a8c8e0; } .ops-team-pill.fde { background: rgba(180, 140, 90, 0.15); color: #d0b890; } .ops-ticket-head h3 { margin: 0 0 0.25rem; font-size: 1rem; color: #fff; } .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; color: #fff; } @media (max-width: 820px) { .ops-layout { grid-template-columns: 1fr; } .ops-team-grid { grid-template-columns: 1fr; } .ops-stats { grid-template-columns: repeat(2, 1fr); } } .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: #ff9a3c; } .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(229, 57, 53, 0.45); } .an-kpi:nth-child(4) { border-color: rgba(255, 138, 138, 0.32); } .an-kpi:nth-child(5) { border-color: rgba(255, 152, 56, 0.4); } .an-kpi:nth-child(6) { border-color: rgba(255, 184, 77, 0.35); } .an-kpi em { display: block; font-style: normal; font-size: 1.45rem; font-weight: 700; color: #ff9a3c; line-height: 1.1; } .an-kpi:nth-child(2) em { color: #6dffb5; } .an-kpi:nth-child(3) em { color: #ff5c5c; } .an-kpi:nth-child(4) em { color: #ff8a8a; } .an-kpi:nth-child(5) em { color: #ff9a3c; } .an-kpi:nth-child(6) em { color: #ffb84d; } .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: #fff; 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: #fff; 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: #fff; 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; pointer-events: none; } .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: #fff; } .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: #fff !important; } .an-kpi span { color: #fff !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); } /* Analytics click → context popup */ .an-clickable { cursor: pointer; } button.an-bar-row { appearance: none; border: 0; background: transparent; color: inherit; font: inherit; width: 100%; padding: 0.2rem 0.15rem; border-radius: 6px; text-align: left; } button.an-bar-row:hover, button.an-legend-btn:hover { background: rgba(255, 154, 60, 0.12); } button.an-donut { appearance: none; border: 0; padding: 0; margin: 0; cursor: pointer; box-shadow: 0 0 0 0 rgba(255, 154, 60, 0); transition: box-shadow 0.15s ease, transform 0.12s ease; } button.an-donut:hover { transform: scale(1.02); box-shadow: 0 0 0 2px rgba(255, 154, 60, 0.45); } .an-legend-btn { appearance: none; border: 0; background: transparent; color: #fff; font: inherit; display: flex; align-items: center; gap: 0.4rem; width: 100%; padding: 0.2rem 0.25rem; border-radius: 6px; text-align: left; cursor: pointer; } .an-legend-btn strong { color: #ff9a3c; margin-left: auto; font-variant-numeric: tabular-nums; } .an-legend-text { color: #fff; } .an-note.an-clickable { color: #fff; cursor: pointer; text-decoration: underline; text-decoration-color: rgba(255, 154, 60, 0.55); text-underline-offset: 2px; } .an-note.an-clickable:hover { color: #ff9a3c; } #an-context-modal { z-index: 90; } .an-ctx-card { width: min(920px, 96vw); max-height: min(88vh, 900px); display: flex; flex-direction: column; overflow: hidden; } .an-ctx-pills { display: flex; flex-wrap: wrap; gap: 0.35rem; margin: 0.35rem 0 0.65rem; } .an-ctx-list { flex: 1; min-height: 0; overflow: auto; margin: 0.25rem 0 0.75rem; } .an-ctx-table { width: 100%; border-collapse: collapse; font-size: 0.78rem; } .an-ctx-table th, .an-ctx-table td { padding: 0.4rem 0.45rem; border-bottom: 1px solid rgba(255,255,255,0.08); text-align: left; color: #fff; vertical-align: top; } .an-ctx-table th { color: #ff9a3c; font-weight: 600; position: sticky; top: 0; background: #0b121a; z-index: 1; } .an-ctx-table .mono { font-family: var(--mono); font-size: 0.72rem; color: #e8e8e8; } .an-ctx-actions { display: flex; flex-wrap: wrap; gap: 0.45rem; justify-content: flex-end; padding-top: 0.35rem; border-top: 1px solid rgba(255,255,255,0.08); } /* ===== 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; } /* Network drawer readability: white body text, amber accents (no gray/blue wash) */ .network-drawer { --muted: #e8f0f8; --text: #ffffff; --dell-bright: #ff9a3c; --cyan: #ffb040; --panel-border: rgba(255, 154, 60, 0.28); } .network-drawer .hint, .network-drawer .muted, .network-drawer .modal-sub { color: #f0f4f8 !important; } .network-drawer .chip:not(.active) { color: #e8f0f8; } .network-drawer .chip.active { color: #041018; background: #ffb040; border-color: #ffb040; } .network-drawer h4, .network-drawer .sw-wired-pill, .network-drawer .vlan-id { color: #ffb040; } .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: #ffb040; } .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(255,154,60,0.3); background: rgba(30, 20, 8, 0.55); border-radius: 10px; padding: 0.5rem; color: #fff; cursor: pointer; } .sw-card.active, .sw-card:hover { border-color: rgba(255,176,64,0.75); box-shadow: 0 0 0 1px rgba(255,154,60,0.25); } .sw-card-ico { width: 42px; flex: 0 0 42px; border-radius: 6px; background: linear-gradient(180deg, #4a3018 0%, #24180c 100%); border: 1px solid rgba(255,154,60,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; color: #fff; } .sw-card-body span { font-size: 0.65rem; color: #e8f0f8; } .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, #1a1208, #3a2410 55%, #1a1208); border: 1px solid rgba(255,154,60,0.4); } .sw-dell { font-weight: 700; letter-spacing: 0.12em; color: #fff; font-size: 0.85rem; } .sw-model { color: #ffb040; font-size: 0.8rem; font-weight: 600; } .sw-st { margin-left: auto; color: #ffb040; font-size: 0.72rem; } .sw-face-meta { display: flex; flex-wrap: wrap; gap: 0.65rem; align-items: center; font-size: 0.75rem; color: #f0f4f8; } .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(255,154,60,0.45); color: #ffb040; } .sw-port-grid { position: relative; z-index: 2; 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(255,154,60,0.35); 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.18); background: #1a2430; color: #e8f0f8; 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: #ff9a3c; color: #fff; } .sw-port.wired { background: #3a2410; border-color: rgba(255,154,60,0.75); color: #fff; } .sw-port.wired.live { box-shadow: 0 0 8px rgba(255,154,60,0.45); } .sw-port.selected { outline: 2px solid #ffb040; 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: #ffb040; } .sw-cable-stage { position: relative; flex: 1; min-height: 220px; display: flex; flex-direction: column; gap: 0.75rem; } #sw-cable-canvas { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; z-index: 3; } .sw-peer-rail { position: relative; z-index: 4; display: flex; flex-direction: column; gap: 0.45rem; padding: 0.35rem 0 0.5rem; min-height: 120px; max-height: min(42vh, 360px); overflow-y: auto; } .sw-peer-hint { margin: 0 0 0.25rem; font-size: 0.68rem; color: #e8f0f8; } .sw-peer-chip { display: flex; gap: 0.45rem; align-items: center; margin-left: auto; width: min(460px, 92%); padding: 0.45rem 0.55rem; border-radius: 8px; border: 1px solid color-mix(in srgb, var(--cable, #ff9a3c) 55%, transparent); background: rgba(12, 18, 28, 0.96); color: #fff; cursor: grab; } .sw-peer-chip.dragging { opacity: 0.45; cursor: grabbing; } .sw-peer-chip.drag-over { border-color: #fff; box-shadow: 0 0 0 2px color-mix(in srgb, var(--cable, #ff9a3c) 70%, #fff); } .sw-peer-chip.up { border-color: color-mix(in srgb, var(--cable, #ff9a3c) 80%, #fff); } .sw-peer-chip.down { opacity: 0.92; } .sw-peer-grip { color: #9aa8b5; font-size: 0.7rem; letter-spacing: -0.12em; user-select: none; cursor: grab; } .sw-peer-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 0.08rem; } .sw-peer-chip strong { color: #fff; font-size: 0.78rem; } .sw-peer-chip .mono { color: #f0f4f8 !important; font-size: 0.68rem; } .sw-cable-color { flex: 0 0 auto; display: flex; align-items: center; cursor: pointer; } .sw-cable-color input[type="color"] { width: 28px; height: 28px; padding: 0; border: 1px solid rgba(255,255,255,0.35); border-radius: 6px; background: transparent; cursor: pointer; } .sw-peer-status { display: inline-block; margin-top: 0.12rem; font-size: 0.62rem; font-weight: 700; letter-spacing: 0.03em; text-transform: uppercase; color: #ffb040; } .sw-peer-chip.down .sw-peer-status { color: #ff8a80; } .sw-peer-port { font-family: var(--mono); font-size: 0.78rem; font-weight: 800; color: #ffb040; min-width: 2rem; } .sw-field { display: flex; flex-direction: column; gap: 0.25rem; margin-bottom: 0.65rem; font-size: 0.72rem; color: #f0f4f8; } .sw-field select, .sw-field input { background: rgba(0,20,40,0.85); border: 1px solid rgba(255,154,60,0.3); color: #fff; border-radius: 6px; padding: 0.4rem 0.45rem; font: inherit; color-scheme: dark; } #sw-wire-nic-pick { margin-bottom: 0.3rem; font-size: 0.7rem; } #sw-wire-nic { font-family: var(--mono); font-size: 0.72rem; } .sw-wire-actions { display: flex; gap: 0.45rem; flex-wrap: wrap; margin-bottom: 0.75rem; } .sw-wire-current { border-top: 1px solid rgba(255,154,60,0.25); padding-top: 0.55rem; display: flex; flex-direction: column; gap: 0.2rem; font-size: 0.75rem; color: #fff; } @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 rgba(255,154,60,0.22); 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: #ffb040; letter-spacing: 0.04em; } .vlan-cards { display: flex; flex-direction: column; gap: 0.45rem; } .vlan-card { text-align: left; border: 1px solid rgba(255,154,60,0.28); border-left: 4px solid var(--vlan, #ff9a3c); background: rgba(20, 16, 10, 0.65); border-radius: 10px; padding: 0.6rem 0.7rem; color: #fff; cursor: pointer; display: flex; flex-direction: column; gap: 0.15rem; } .vlan-card.active { background: rgba(50, 32, 12, 0.7); border-color: var(--vlan, #ffb040); } .vlan-card strong { color: #fff; } .vlan-card .mono { color: #f0f4f8; } .vlan-card-meta { font-size: 0.68rem; color: #e8f0f8; } .vlan-id { font-family: var(--mono); font-size: 0.68rem; color: #ffb040; font-weight: 700; } .vlan-discovered { margin: 0; padding-left: 1.1rem; color: #e8f0f8; font-size: 0.75rem; } .vlan-detail-pane { overflow: auto; padding: 1rem; color: #fff; } .vlan-detail-head { display: flex; justify-content: space-between; gap: 1rem; padding: 0.85rem 1rem; border-radius: 12px; border: 1px solid; background: rgba(30, 20, 8, 0.55); margin-bottom: 0.85rem; } .vlan-detail-head h3 { margin: 0 0 0.25rem; font-size: 1.05rem; color: #fff; } .vlan-detail-head .mono { color: #f0f4f8; } .vlan-purpose { margin: 0.25rem 0 0; font-size: 0.78rem; color: #e8f0f8; } .vlan-stat-stack { display: flex; flex-direction: column; gap: 0.35rem; align-items: flex-end; } .vlan-stat { font-family: var(--mono); align-self: center; padding: 0.3rem 0.65rem; border-radius: 999px; border: 1px solid rgba(255,154,60,0.45); color: #ffb040; white-space: nowrap; } .vlan-stat.soft { border-color: rgba(255,255,255,0.25); color: #fff; } .vlan-context { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0.5rem; margin-bottom: 0.75rem; } .vlan-kpi { border: 1px solid rgba(255,154,60,0.28); border-radius: 10px; padding: 0.55rem 0.65rem; background: rgba(18, 14, 10, 0.7); display: flex; flex-direction: column; gap: 0.15rem; } .vlan-kpi strong { font-size: 1.15rem; color: #ffb040; } .vlan-kpi span { font-size: 0.68rem; color: #e8f0f8; text-transform: uppercase; letter-spacing: 0.04em; } .vlan-role-pills { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-bottom: 0.75rem; } .vlan-role-pill { font-size: 0.68rem; padding: 0.2rem 0.5rem; border-radius: 999px; border: 1px solid rgba(255,154,60,0.35); color: #fff; background: rgba(40, 24, 8, 0.55); } .vlan-nodes-h { margin: 0.4rem 0 0.55rem; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.05em; color: #ffb040; } .vlan-members { display: flex; flex-direction: column; gap: 0.5rem; } .vlan-member { border: 1px solid rgba(255,154,60,0.28); border-radius: 10px; padding: 0.65rem 0.75rem; display: flex; flex-direction: column; gap: 0.4rem; background: rgba(14, 16, 22, 0.85); color: #fff; } .vlan-member.up { border-color: rgba(61, 255, 160, 0.65); box-shadow: inset 4px 0 0 #3dffa0; background: rgba(10, 40, 28, 0.55); } .vlan-member.down { border-color: rgba(229, 57, 53, 0.55); box-shadow: inset 4px 0 0 #e53935; background: rgba(48, 14, 14, 0.5); } .vlan-member-top { display: flex; justify-content: space-between; gap: 0.75rem; align-items: center; } .vlan-member-top strong { color: #fff; font-size: 0.88rem; } .vlan-badge { font-size: 0.62rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; padding: 0.15rem 0.45rem; border-radius: 999px; border: 1px solid; } .vlan-badge.on { color: #041018; background: #3dffa0; border-color: #3dffa0; } .vlan-badge.off { color: #fff; background: #e53935; border-color: #e53935; } .vlan-member-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.35rem 0.85rem; font-size: 0.72rem; color: #f0f4f8; } .vlan-member-grid em { display: block; font-style: normal; font-size: 0.6rem; text-transform: uppercase; letter-spacing: 0.04em; color: #ffb040; margin-bottom: 0.05rem; } .vlan-member-grid .mono { color: #fff; } .vlan-matrix-wrap { overflow: auto; margin: 0 0 1rem; border: 1px solid rgba(255,255,255,0.08); border-radius: 10px; } .vlan-matrix { width: 100%; border-collapse: collapse; font-size: 0.78rem; } .vlan-matrix th, .vlan-matrix td { text-align: left; padding: 0.45rem 0.55rem; border-bottom: 1px solid rgba(255,255,255,0.06); vertical-align: top; } .vlan-matrix th { color: #ffb040; font-weight: 600; font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.04em; background: rgba(0,0,0,0.2); } .vlan-matrix .muted { opacity: 0.65; font-size: 0.7rem; margin-top: 0.15rem; } .vlan-chip { display: inline-block; margin: 0.1rem 0.2rem 0.1rem 0; padding: 0.12rem 0.4rem; border-radius: 999px; border: 1px solid color-mix(in srgb, var(--vlan, #38bdf8) 55%, transparent); background: color-mix(in srgb, var(--vlan, #38bdf8) 18%, transparent); color: #e8f7ff; font-size: 0.68rem; white-space: nowrap; } #subnet-list .card.has-vlan { border-left: 3px solid var(--vlan, #38bdf8); } #subnet-list .card.has-vlan .t { color: color-mix(in srgb, var(--vlan, #38bdf8) 70%, #fff); } .vlan-note-edit { margin-top: 0.55rem; display: grid; gap: 0.3rem; } .vlan-note-edit label { font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.04em; color: #ffb040; } .vlan-note-edit textarea { width: 100%; resize: vertical; min-height: 2.4rem; border-radius: 8px; border: 1px solid rgba(255,255,255,0.12); background: rgba(0,0,0,0.25); color: #f2f5f8; padding: 0.4rem 0.5rem; font: inherit; font-size: 0.78rem; } .vlan-note-edit .btn { justify-self: start; } .vlan-note-status { font-size: 0.7rem; opacity: 0.75; } .vlan-add-host { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1.4fr auto; gap: 0.4rem; margin: 0 0 0.9rem; } .vlan-add-host input { border-radius: 8px; border: 1px solid rgba(255,255,255,0.12); background: rgba(0,0,0,0.25); color: #f2f5f8; padding: 0.4rem 0.5rem; font: inherit; font-size: 0.78rem; } @media (max-width: 1100px) { .vlan-add-host { grid-template-columns: 1fr 1fr; } } @media (max-width: 1100px) { .rack-studio { grid-template-columns: 1fr; overflow: auto; } .vlan-layout { grid-template-columns: 1fr; } .vlan-context { grid-template-columns: repeat(2, minmax(0, 1fr)); } .vlan-member-grid { 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 — parks left while Full Inventory is open (inspector is right) */ .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, left 0.2s ease, right 0.2s ease, opacity 0.15s ease; } body.inv-open .theme-fab { right: auto; left: 14px; bottom: 56px; opacity: 0.92; box-shadow: 0 4px 14px rgba(255, 154, 60, 0.35), 0 0 0 3px rgba(255, 154, 60, 0.18); border-color: rgba(255, 184, 77, 0.55); } .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); } /* Present button + deck */ .btn.present-btn { border-color: rgba(255, 184, 77, 0.55); background: linear-gradient(135deg, rgba(255, 154, 60, 0.22), rgba(0, 118, 206, 0.18)); color: #fff; font-weight: 650; } .btn.present-btn:hover { border-color: #ffb84d; background: linear-gradient(135deg, rgba(255, 154, 60, 0.38), rgba(0, 118, 206, 0.28)); } .present-root { position: fixed; inset: 0; z-index: 12000; display: grid; place-items: center; padding: 1rem; } .present-root.hidden { display: none !important; } .present-scrim { position: absolute; inset: 0; background: rgba(2, 6, 12, 0.72); backdrop-filter: blur(6px); } .present-stage { position: relative; z-index: 1; display: flex; flex-direction: column; width: min(1100px, 94vw); height: min(780px, 90vh); border-radius: 16px; overflow: hidden; border: 1px solid rgba(255, 184, 77, 0.35); background: radial-gradient(ellipse 80% 50% at 15% 0%, rgba(255, 154, 60, 0.18), transparent 50%), radial-gradient(ellipse 60% 45% at 90% 10%, rgba(0, 118, 206, 0.22), transparent 55%), linear-gradient(165deg, #0b1522 0%, #071018 55%, #050b12 100%); box-shadow: 0 30px 80px rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(255,255,255,0.04) inset; color: #fff; outline: none; animation: presentIn 0.45s cubic-bezier(0.2, 0.8, 0.2, 1); } .present-stage.mode-full { width: 100%; height: 100%; max-width: none; border-radius: 0; } @keyframes presentIn { from { opacity: 0; transform: translateY(18px) scale(0.97); } to { opacity: 1; transform: none; } } .present-chrome { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; flex-wrap: wrap; padding: 0.7rem 0.9rem; border-bottom: 1px solid rgba(255,255,255,0.08); background: rgba(0, 0, 0, 0.25); } .present-brand { display: flex; align-items: center; gap: 0.55rem; } .present-brand strong { display: block; font-size: 0.86rem; } .present-brand span { font-size: 0.72rem; color: #c5d4e2; font-variant-numeric: tabular-nums; } .present-actions { display: flex; flex-wrap: wrap; gap: 0.3rem; } .present-progress-bar { height: 3px; background: rgba(255,255,255,0.08); } .present-progress-bar i { display: block; height: 100%; width: 0; background: linear-gradient(90deg, #ff9a3c, #4db8ff); transition: width 0.35s ease; } .present-slide-wrap { flex: 1; min-height: 0; overflow: auto; padding: 1.4rem 1.6rem 1rem; } .present-slide { max-width: 920px; margin: 0 auto; } .present-slide.enter { animation: slideEnter 0.5s cubic-bezier(0.2, 0.85, 0.2, 1); } @keyframes slideEnter { from { opacity: 0; transform: translateX(28px); filter: blur(4px); } to { opacity: 1; transform: none; filter: none; } } .ps-kicker { margin: 0 0 0.35rem; font-size: 0.72rem; letter-spacing: 0.14em; text-transform: uppercase; color: #ffb84d; font-weight: 700; } .present-slide h2 { margin: 0 0 0.85rem; font-size: clamp(1.55rem, 3.2vw, 2.35rem); line-height: 1.15; color: #fff; font-weight: 700; } .ps-body { color: #e8eef5; font-size: 1.02rem; line-height: 1.55; } .ps-lead { margin: 0 0 1rem; font-size: 1.12rem; color: #fff; } .ps-sub { margin: 1rem 0 0; font-size: 0.9rem; color: #c5d4e2; } .ps-sub strong { color: #ffb84d; } .ps-pills { display: flex; flex-wrap: wrap; gap: 0.4rem; margin: 0.85rem 0; } .ps-pills span { padding: 0.28rem 0.65rem; border-radius: 999px; border: 1px solid rgba(255,184,77,0.35); background: rgba(255,154,60,0.12); font-size: 0.78rem; color: #fff; } .ps-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 1.1rem; } .ps-grid3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.75rem; margin-top: 0.5rem; } .ps-card { border: 1px solid rgba(255,255,255,0.12); border-radius: 12px; padding: 0.85rem 0.9rem; background: rgba(8, 18, 30, 0.72); animation: cardRise 0.55s ease both; } .ps-card:nth-child(2) { animation-delay: 0.06s; } .ps-card:nth-child(3) { animation-delay: 0.12s; } .ps-card:nth-child(4) { animation-delay: 0.18s; } .ps-card:nth-child(5) { animation-delay: 0.24s; } .ps-card:nth-child(6) { animation-delay: 0.3s; } @keyframes cardRise { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } } .ps-card h4 { margin: 0 0 0.35rem; color: #ffb84d; font-size: 0.92rem; } .ps-card p { margin: 0; font-size: 0.88rem; color: #e0e8f0; line-height: 1.45; } .ps-body h4 { margin: 0 0 0.45rem; color: #9fd0ff; font-size: 0.95rem; } .ps-bullets, .ps-steps { margin: 0; padding-left: 1.15rem; display: flex; flex-direction: column; gap: 0.45rem; } .ps-bullets li, .ps-steps li { color: #f0f4f8; } .ps-legal { border: 1px solid rgba(255, 92, 92, 0.35); border-radius: 12px; padding: 1rem 1.1rem; background: rgba(40, 10, 12, 0.45); } .ps-legal p { margin: 0 0 0.75rem; color: #fff; } .ps-legal ul { margin: 0 0 0.75rem; padding-left: 1.15rem; display: flex; flex-direction: column; gap: 0.45rem; color: #f0e8e8; } .ps-legal-ack { margin: 0; color: #ffb84d !important; font-weight: 600; } .ps-legal kbd { font-family: var(--mono); padding: 0.05rem 0.35rem; border-radius: 4px; border: 1px solid rgba(255,255,255,0.2); background: rgba(0,0,0,0.35); } .present-nav { display: flex; align-items: center; gap: 0.65rem; padding: 0.65rem 0.9rem; border-top: 1px solid rgba(255,255,255,0.08); background: rgba(0,0,0,0.28); } .present-dots { flex: 1; display: flex; flex-wrap: wrap; justify-content: center; gap: 0.35rem; } .present-dot { width: 9px; height: 9px; border-radius: 50%; border: 0; padding: 0; background: rgba(255,255,255,0.25); cursor: pointer; } .present-dot.active { background: #ff9a3c; box-shadow: 0 0 0 3px rgba(255,154,60,0.25); transform: scale(1.15); } .present-edit-panel { border-top: 1px solid rgba(255,255,255,0.1); padding: 0.75rem 0.9rem 0.9rem; background: rgba(0, 12, 24, 0.92); max-height: 42%; overflow: auto; display: grid; gap: 0.45rem; } .present-edit-panel.hidden { display: none !important; } .present-edit-panel label { display: flex; flex-direction: column; gap: 0.25rem; font-size: 0.72rem; color: #c5d4e2; } .present-edit-panel input, .present-edit-panel textarea { border: 1px solid rgba(255,154,60,0.3); background: rgba(0,20,40,0.9); color: #fff; border-radius: 6px; padding: 0.4rem 0.5rem; font: inherit; } .present-edit-actions { display: flex; flex-wrap: wrap; gap: 0.4rem; } .present-edit-hint { margin: 0; font-size: 0.7rem; color: #9eb0c2; } .present-credit { padding: 0.4rem 0.9rem; font-size: 0.7rem; color: #e8eef5; border-top: 1px solid rgba(255,255,255,0.06); background: rgba(0,0,0,0.35); } body.present-open .theme-fab { opacity: 0; pointer-events: none; } .network-drawer.drawer, .reports-drawer.drawer { display: flex; flex-direction: column; } html[data-theme="light"] .app-credit { color: #1a2a3a; } html[data-theme="light"] .app-credit strong { color: #0b1520; } html[data-theme="light"] .app-footer { background: rgba(255,255,255,0.96); border-top-color: #c5d0dc; } /* drawers stay dark — keep credit readable white */ .drawer-credit, .ops-footer, .present-credit { color: #e8eef5 !important; } .drawer-credit strong, .ops-footer strong { color: #fff !important; } @media (max-width: 900px) { .ps-cols, .ps-grid3 { grid-template-columns: 1fr; } .present-stage { height: min(92vh, 900px); } } /* Present · technical diagrams + richer motion */ .present-slide.anim-fade.enter { animation: psFade 0.55s ease both; } .present-slide.anim-zoom.enter { animation: psZoom 0.55s cubic-bezier(0.2, 0.85, 0.2, 1) both; } .present-slide.anim-rise.enter { animation: psRise 0.55s cubic-bezier(0.2, 0.85, 0.2, 1) both; } .present-slide.anim-slide.enter { animation: slideEnter 0.55s cubic-bezier(0.2, 0.85, 0.2, 1) both; } @keyframes psFade { from { opacity: 0; } to { opacity: 1; } } @keyframes psZoom { from { opacity: 0; transform: scale(0.92); filter: blur(6px); } to { opacity: 1; transform: none; filter: none; } } @keyframes psRise { from { opacity: 0; transform: translateY(28px); } to { opacity: 1; transform: none; } } .ps-body code { font-family: var(--mono); font-size: 0.82em; color: #9fd0ff; background: rgba(0, 40, 70, 0.55); padding: 0.05rem 0.3rem; border-radius: 4px; } .ps-flow { display: grid; grid-template-columns: 1fr auto 1fr auto 1fr; gap: 0.45rem; align-items: stretch; margin: 0.4rem 0 0.85rem; } .ps-node { position: relative; border-radius: 14px; padding: 0.85rem 0.8rem 0.9rem; border: 1px solid rgba(255,255,255,0.14); background: rgba(8, 18, 30, 0.85); display: flex; flex-direction: column; gap: 0.28rem; min-height: 132px; animation: cardRise 0.6s ease both; overflow: hidden; } .ps-node::before { content: ""; position: absolute; inset: 0; background: linear-gradient(120deg, transparent 40%, rgba(255,255,255,0.06) 50%, transparent 60%); transform: translateX(-120%); animation: psShimmer 2.8s ease-in-out infinite; } @keyframes psShimmer { 0%, 40% { transform: translateX(-120%); } 70%, 100% { transform: translateX(120%); } } .ps-node em { font-style: normal; width: 1.35rem; height: 1.35rem; display: grid; place-items: center; border-radius: 999px; font-size: 0.7rem; font-weight: 700; background: rgba(255,154,60,0.2); color: #ffb84d; } .ps-node strong { color: #fff; font-size: 0.95rem; z-index: 1; } .ps-node span { color: #c5d4e2; font-size: 0.74rem; line-height: 1.35; z-index: 1; } .ps-node code { z-index: 1; margin-top: auto; font-size: 0.68rem; color: #7ec8ff; background: transparent; padding: 0; } .ps-node.ome { border-color: rgba(0, 168, 232, 0.45); animation-delay: 0.05s; } .ps-node.cock { border-color: rgba(255, 154, 60, 0.5); animation-delay: 0.15s; } .ps-node.ai { border-color: rgba(126, 240, 216, 0.4); animation-delay: 0.25s; } .ps-pipe { position: relative; width: 36px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 0.25rem; } .ps-pipe span { writing-mode: vertical-rl; transform: rotate(180deg); font-size: 0.58rem; letter-spacing: 0.06em; text-transform: uppercase; color: #9eb0c2; } .ps-pipe i { width: 7px; height: 7px; border-radius: 50%; background: #ff9a3c; box-shadow: 0 0 10px rgba(255,154,60,0.8); animation: psPacket 1.4s ease-in-out infinite; } .ps-pipe i:nth-child(2) { animation-delay: 0.25s; background: #4db8ff; box-shadow: 0 0 10px rgba(77,184,255,0.8); } .ps-pipe i:nth-child(3) { animation-delay: 0.5s; background: #7ef0d8; box-shadow: 0 0 10px rgba(126,240,216,0.7); } @keyframes psPacket { 0% { transform: translateY(10px); opacity: 0.2; } 40% { opacity: 1; } 100% { transform: translateY(-10px); opacity: 0.2; } } .ps-seq { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 0.5rem; } .ps-seq-step { border: 1px solid rgba(255,255,255,0.12); border-radius: 12px; padding: 0.7rem 0.65rem; background: rgba(8, 18, 30, 0.8); animation: cardRise 0.55s ease both; position: relative; } .ps-seq-step:nth-child(1) { animation-delay: 0.05s; } .ps-seq-step:nth-child(2) { animation-delay: 0.12s; } .ps-seq-step:nth-child(3) { animation-delay: 0.19s; } .ps-seq-step:nth-child(4) { animation-delay: 0.26s; } .ps-seq-step:nth-child(5) { animation-delay: 0.33s; } .ps-seq-step span { display: inline-block; font-family: var(--mono); font-size: 0.65rem; color: #ffb84d; margin-bottom: 0.3rem; } .ps-seq-step strong { display: block; color: #fff; font-size: 0.86rem; margin-bottom: 0.25rem; } .ps-seq-step p { margin: 0; font-size: 0.74rem; color: #c5d4e2; line-height: 1.35; } .ps-seq-step::after { content: ""; position: absolute; right: -0.35rem; top: 50%; width: 0.45rem; height: 2px; background: rgba(255,154,60,0.7); } .ps-seq-step:last-child::after { display: none; } .ps-wire { display: flex; flex-direction: column; gap: 0.45rem; } .ps-wire-row { display: grid; grid-template-columns: 1.1fr auto 1.4fr; gap: 0.55rem; align-items: center; padding: 0.55rem 0.7rem; border-radius: 10px; border: 1px solid rgba(255,255,255,0.1); background: rgba(6, 14, 24, 0.85); animation: psWireIn 0.55s ease both; } .ps-wire-row.delay1 { animation-delay: 0.08s; } .ps-wire-row.delay2 { animation-delay: 0.16s; } .ps-wire-row.delay3 { animation-delay: 0.24s; } .ps-wire-row.delay4 { animation-delay: 0.32s; } .ps-wire-row.delay5 { animation-delay: 0.4s; } @keyframes psWireIn { from { opacity: 0; transform: translateX(-18px); } to { opacity: 1; transform: none; } } .ps-wire-row .from, .ps-wire-row .to { font-size: 0.82rem; color: #fff; font-weight: 600; } .ps-wire-row .arrow { font-family: var(--mono); font-size: 0.68rem; color: #ffb84d; text-align: center; padding: 0.2rem 0.45rem; border-radius: 999px; border: 1px solid rgba(255,154,60,0.35); background: rgba(255,154,60,0.1); position: relative; overflow: hidden; } .ps-wire-row .arrow::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, transparent, rgba(255,255,255,0.25), transparent); animation: psShimmer 2s linear infinite; } .ps-stagger > li { animation: cardRise 0.45s ease both; } .ps-stagger > li:nth-child(1) { animation-delay: 0.05s; } .ps-stagger > li:nth-child(2) { animation-delay: 0.12s; } .ps-stagger > li:nth-child(3) { animation-delay: 0.19s; } .ps-stagger > li:nth-child(4) { animation-delay: 0.26s; } .ps-stagger > li:nth-child(5) { animation-delay: 0.33s; } .ps-stagger > li:nth-child(6) { animation-delay: 0.4s; } .ps-card.tech { border-color: rgba(77, 184, 255, 0.28); } .ps-card.tech h4 { font-family: var(--mono); font-size: 0.78rem; color: #7ec8ff; } .ps-body kbd { font-family: var(--mono); padding: 0.05rem 0.35rem; border-radius: 4px; border: 1px solid rgba(255,255,255,0.2); background: rgba(0,0,0,0.35); font-size: 0.85em; } @media (max-width: 980px) { .ps-flow { grid-template-columns: 1fr; } .ps-pipe { width: 100%; flex-direction: row; height: 28px; } .ps-pipe span { writing-mode: horizontal-tb; transform: none; } .ps-seq { grid-template-columns: 1fr 1fr; } .ps-seq-step::after { display: none; } .ps-wire-row { grid-template-columns: 1fr; text-align: left; } } .present-deck-pick { display: inline-flex; align-items: center; gap: 0.35rem; font-size: 0.68rem; color: #c5d4e2; } .present-deck-pick select { max-width: 200px; border: 1px solid rgba(255,154,60,0.35); background: rgba(0,20,40,0.9); color: #fff; border-radius: 6px; padding: 0.28rem 0.4rem; font: inherit; } .present-deck-desc { margin: 0; padding: 0.35rem 0.9rem 0.45rem; font-size: 0.72rem; color: #b8c7d6; border-bottom: 1px solid rgba(255,255,255,0.06); background: rgba(0,0,0,0.18); } #present-deck-del:disabled { opacity: 0.4; cursor: not-allowed; } /* Present · cinematic WOW polish v4 */ .present-root { perspective: 1400px; } .present-scrim { background: radial-gradient(ellipse 70% 50% at 50% 40%, rgba(0, 80, 140, 0.35), transparent 60%), rgba(2, 4, 10, 0.78); backdrop-filter: blur(10px) saturate(1.2); } .present-stage { border: 1px solid rgba(255, 184, 77, 0.4); box-shadow: 0 40px 100px rgba(0, 0, 0, 0.65), 0 0 80px rgba(0, 118, 206, 0.18), 0 0 120px rgba(255, 154, 60, 0.08), inset 0 1px 0 rgba(255,255,255,0.06); background: radial-gradient(ellipse 90% 55% at 12% -10%, rgba(255, 154, 60, 0.22), transparent 50%), radial-gradient(ellipse 70% 50% at 100% 0%, rgba(0, 140, 255, 0.28), transparent 52%), radial-gradient(ellipse 50% 40% at 70% 100%, rgba(126, 240, 216, 0.08), transparent 50%), linear-gradient(165deg, #0c1828 0%, #070e18 48%, #050910 100%); } .present-stage::before { content: ""; pointer-events: none; position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,0.015) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.015) 1px, transparent 1px); background-size: 48px 48px; mask-image: radial-gradient(ellipse 70% 70% at 50% 40%, #000 20%, transparent 75%); opacity: 0.7; z-index: 0; animation: psGridDrift 28s linear infinite; } @keyframes psGridDrift { from { background-position: 0 0, 0 0; } to { background-position: 48px 48px, 48px 48px; } } .present-chrome, .present-deck-desc, .present-slide-wrap, .present-nav, .present-edit-panel, .present-credit, .present-progress-bar { position: relative; z-index: 1; } .present-chrome { background: linear-gradient(180deg, rgba(0,0,0,0.42), rgba(0,0,0,0.18)); backdrop-filter: blur(8px); } .present-brand strong { background: linear-gradient(90deg, #fff, #ffb84d 55%, #7ec8ff); -webkit-background-clip: text; background-clip: text; color: transparent; } .btn.present-media-btn { border-color: rgba(126, 240, 216, 0.45); color: #fff; background: rgba(126, 240, 216, 0.12); } .present-slide-wrap { padding: 1.6rem 1.8rem 1.1rem; } .present-slide h2 { font-size: clamp(1.7rem, 3.6vw, 2.55rem); letter-spacing: -0.02em; text-shadow: 0 8px 40px rgba(0,0,0,0.35); } .ps-kicker { display: inline-flex; align-items: center; gap: 0.35rem; padding: 0.2rem 0.55rem; border-radius: 999px; border: 1px solid rgba(255,184,77,0.35); background: rgba(255,154,60,0.12); margin-bottom: 0.55rem; } .ps-hero-glow { position: absolute; width: 280px; height: 280px; border-radius: 50%; background: radial-gradient(circle, rgba(255,154,60,0.28), transparent 70%); filter: blur(10px); top: -40px; right: 8%; animation: psOrb 6s ease-in-out infinite alternate; pointer-events: none; } @keyframes psOrb { from { transform: translateY(0) scale(1); opacity: 0.7; } to { transform: translateY(18px) scale(1.08); opacity: 1; } } .ps-card { transition: transform 0.25s ease, border-color 0.25s ease, box-shadow 0.25s ease; box-shadow: 0 10px 30px rgba(0,0,0,0.2); } .ps-card:hover { transform: translateY(-3px); border-color: rgba(255,184,77,0.55); box-shadow: 0 16px 40px rgba(0,0,0,0.35), 0 0 24px rgba(255,154,60,0.12); } .ps-node { box-shadow: 0 12px 36px rgba(0,0,0,0.28); } .ps-node.ome { box-shadow: 0 12px 36px rgba(0,0,0,0.28), 0 0 28px rgba(0,168,232,0.12); } .ps-node.cock { box-shadow: 0 12px 36px rgba(0,0,0,0.28), 0 0 28px rgba(255,154,60,0.14); } .ps-node.ai { box-shadow: 0 12px 36px rgba(0,0,0,0.28), 0 0 28px rgba(126,240,216,0.12); } .present-slide.is-image { max-width: none; height: 100%; } .ps-image-frame { position: relative; height: min(58vh, 560px); border-radius: 14px; overflow: hidden; border: 1px solid rgba(255,255,255,0.12); background: #000; box-shadow: 0 20px 60px rgba(0,0,0,0.45); animation: psZoom 0.7s cubic-bezier(0.2, 0.85, 0.2, 1) both; } .ps-image-frame img { width: 100%; height: 100%; object-fit: contain; background: #05080e; display: block; } .ps-image-caption { position: absolute; left: 0; right: 0; bottom: 0; padding: 1rem 1.1rem 0.85rem; background: linear-gradient(transparent, rgba(0,0,0,0.82)); } .ps-image-caption h2 { margin: 0; font-size: 1.25rem; color: #fff; } .present-stage.mode-full .ps-image-frame { height: min(72vh, 820px); } .present-progress-bar { height: 4px; background: rgba(255,255,255,0.06); } .present-progress-bar i { background: linear-gradient(90deg, #ff9a3c, #ffd27a 40%, #4db8ff 78%, #7ef0d8); box-shadow: 0 0 16px rgba(255,154,60,0.45); } .present-dot { transition: transform 0.2s ease, background 0.2s ease, box-shadow 0.2s ease; } .present-dot:hover { transform: scale(1.25); } .present-dot.active { background: linear-gradient(135deg, #ff9a3c, #4db8ff); box-shadow: 0 0 0 4px rgba(255,154,60,0.22), 0 0 18px rgba(77,184,255,0.35); } .present-nav .btn.primary { box-shadow: 0 8px 24px rgba(0, 118, 206, 0.35); } @keyframes presentIn { from { opacity: 0; transform: translateY(28px) scale(0.94) rotateX(6deg); filter: blur(8px); } to { opacity: 1; transform: none; filter: none; } } /* === PRESENT V2 polish === */ .present-stage { background: radial-gradient(ellipse 70% 55% at 12% -10%, rgba(0, 168, 232, 0.28), transparent 55%), radial-gradient(ellipse 55% 45% at 92% 8%, rgba(126, 240, 216, 0.16), transparent 50%), radial-gradient(ellipse 50% 40% at 50% 100%, rgba(255, 154, 60, 0.12), transparent 55%), linear-gradient(165deg, #0c1a2a 0%, #0a1522 40%, #071018 100%); border-color: rgba(77, 184, 255, 0.28); } .present-ai-bg { pointer-events: none !important; position: absolute; inset: 0; z-index: 0; overflow: hidden; } .present-chrome, .present-nav, .present-slide-wrap, .present-edit-panel, .present-credit, .present-deck-desc, .present-progress-bar { position: relative; z-index: 2; } .present-actions .present-tool, .present-actions .present-deck-pick, .present-nav .present-tool { pointer-events: auto; position: relative; z-index: 3; } .present-ai-grid { position: absolute; inset: -20%; background-image: linear-gradient(rgba(77, 184, 255, 0.07) 1px, transparent 1px), linear-gradient(90deg, rgba(77, 184, 255, 0.07) 1px, transparent 1px); background-size: 48px 48px; mask-image: radial-gradient(ellipse 70% 60% at 50% 40%, #000 20%, transparent 75%); animation: presentGridDrift 28s linear infinite; opacity: 0.55; } @keyframes presentGridDrift { from { transform: translate3d(0, 0, 0); } to { transform: translate3d(-48px, -48px, 0); } } .present-ai-orbs { position: absolute; inset: 0; } .present-ai-orbs::before, .present-ai-orbs::after { content: ""; position: absolute; border-radius: 50%; filter: blur(40px); opacity: 0.45; animation: presentOrb 9s ease-in-out infinite; } .present-ai-orbs::before { width: 280px; height: 280px; left: -40px; top: 20%; background: rgba(0, 118, 206, 0.45); } .present-ai-orbs::after { width: 220px; height: 220px; right: -30px; bottom: 15%; background: rgba(255, 154, 60, 0.28); animation-delay: -4s; } @keyframes presentOrb { 0%, 100% { transform: translate(0, 0) scale(1); } 50% { transform: translate(18px, -22px) scale(1.08); } } .present-pulse-svg { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0.55; } .present-pulse-svg path { fill: none; stroke-linecap: round; stroke-width: 1.5; } .present-pulse-svg .pl1 { stroke: rgba(77, 184, 255, 0.55); stroke-dasharray: 8 14; animation: presentDash 3.2s linear infinite; } .present-pulse-svg .pl2 { stroke: rgba(126, 240, 216, 0.45); stroke-dasharray: 6 16; animation: presentDash 4s linear infinite reverse; } .present-pulse-svg .pl3 { stroke: rgba(255, 154, 60, 0.4); stroke-dasharray: 4 12; animation: presentDash 2.6s linear infinite; } @keyframes presentDash { to { stroke-dashoffset: -120; } } .present-stage > *:not(.present-ai-bg) { position: relative; z-index: 1; } /* Chrome buttons */ .present-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 0.45rem; } .present-btn-group { display: inline-flex; align-items: stretch; border-radius: 999px; padding: 2px; background: rgba(255, 255, 255, 0.06); border: 1px solid rgba(255, 255, 255, 0.12); box-shadow: inset 0 1px 0 rgba(255,255,255,0.06); } .present-tool { appearance: none; border: 0; background: transparent; color: #d7e4f0; font: inherit; font-size: 0.72rem; font-weight: 650; letter-spacing: 0.02em; padding: 0.38rem 0.72rem; border-radius: 999px; cursor: pointer; white-space: nowrap; transition: background 0.18s ease, color 0.18s ease, box-shadow 0.18s ease; } .present-tool:hover { background: rgba(255,255,255,0.08); color: #fff; } .present-tool.primary, .present-tool.is-on { background: linear-gradient(135deg, #0076ce, #00a4e4); color: #fff; box-shadow: 0 4px 14px rgba(0, 118, 206, 0.35); } .present-tool.ghost { border: 1px solid rgba(255,255,255,0.16); border-radius: 999px; background: rgba(0,0,0,0.2); margin-left: 0.15rem; } .present-tool.ghost:hover { border-color: rgba(255,184,77,0.55); color: #ffb84d; } .present-tool:disabled { opacity: 0.4; cursor: not-allowed; } .present-deck-pick { display: inline-flex; align-items: center; gap: 0.35rem; padding: 0.2rem 0.45rem 0.2rem 0.65rem; border-radius: 999px; border: 1px solid rgba(77, 184, 255, 0.28); background: rgba(0, 40, 70, 0.35); } .present-deck-pick span { font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.08em; color: #9fd0ff; font-weight: 700; } .present-deck-pick select { border: 0; background: transparent; color: #fff; font: inherit; font-size: 0.78rem; font-weight: 600; max-width: 180px; outline: none; cursor: pointer; } .present-deck-pick select option { color: #111; } .present-nav .btn, .present-nav .present-tool { min-width: 6.5rem; } .present-nav .btn.primary, #present-next.primary { border-radius: 999px; background: linear-gradient(135deg, #0076ce, #19a0e6); border: 0; box-shadow: 0 8px 22px rgba(0, 118, 206, 0.35); } #present-prev { border-radius: 999px; border: 1px solid rgba(255,255,255,0.18); background: rgba(255,255,255,0.06); } /* Horizontal pulse pipes */ .ps-pipe { width: 42px; } .ps-pipe::before { content: ""; position: absolute; left: 50%; top: 18%; bottom: 22%; width: 2px; transform: translateX(-50%); background: linear-gradient(180deg, transparent, rgba(77,184,255,0.7), rgba(126,240,216,0.7), transparent); box-shadow: 0 0 12px rgba(77,184,255,0.45); animation: psPipeGlow 1.8s ease-in-out infinite; } @keyframes psPipeGlow { 0%, 100% { opacity: 0.35; } 50% { opacity: 1; } } /* BFF diagram */ .ps-bff { display: grid; grid-template-columns: 1fr 48px 1.35fr 48px 1fr; gap: 0.35rem; align-items: stretch; margin: 0.75rem 0 1rem; } .ps-bff-box { position: relative; border-radius: 14px; padding: 0.85rem 0.8rem; border: 1px solid rgba(255,255,255,0.14); background: rgba(8, 18, 30, 0.82); overflow: hidden; min-height: 150px; } .ps-bff-box.core { border-color: rgba(255, 154, 60, 0.55); background: linear-gradient(160deg, rgba(255,154,60,0.16), transparent 55%), rgba(12, 22, 36, 0.92); box-shadow: 0 0 0 1px rgba(255,154,60,0.12) inset, 0 12px 36px rgba(0,0,0,0.25); } .ps-bff-box h4 { margin: 0 0 0.35rem; font-size: 0.9rem; color: #fff; } .ps-bff-box p { margin: 0; font-size: 0.78rem; color: #c5d4e2; line-height: 1.4; } .ps-bff-box ul { margin: 0.45rem 0 0; padding-left: 1rem; font-size: 0.74rem; color: #e0e8f0; display: flex; flex-direction: column; gap: 0.2rem; } .ps-bff-tag { display: inline-block; margin-bottom: 0.4rem; font-size: 0.62rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: #9fd0ff; } .ps-bff-box.core .ps-bff-tag { color: #ffb84d; } .ps-bff-link { position: relative; display: flex; align-items: center; justify-content: center; } .ps-bff-link svg { width: 100%; height: 90px; overflow: visible; } .ps-bff-link path { fill: none; stroke: url(#psBffGrad); stroke-width: 2; stroke-linecap: round; stroke-dasharray: 6 10; animation: presentDash 1.8s linear infinite; } .ps-bff-link .pulse-dot { fill: #4db8ff; filter: drop-shadow(0 0 6px rgba(77,184,255,0.9)); animation: psBffDot 1.8s ease-in-out infinite; } @keyframes psBffDot { 0% { opacity: 0.2; } 50% { opacity: 1; } 100% { opacity: 0.2; } } /* Apps constellation */ .ps-apps { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.65rem; margin: 0.6rem 0; position: relative; } .ps-apps::before { content: ""; position: absolute; inset: 18% 12%; border: 1px dashed rgba(77,184,255,0.25); border-radius: 50%; pointer-events: none; animation: psAppsPulse 3.5s ease-in-out infinite; } @keyframes psAppsPulse { 0%, 100% { opacity: 0.25; transform: scale(0.98); } 50% { opacity: 0.7; transform: scale(1.02); } } .ps-app { position: relative; z-index: 1; border-radius: 14px; padding: 0.8rem 0.75rem; border: 1px solid rgba(255,255,255,0.12); background: rgba(8, 18, 30, 0.78); text-align: center; animation: cardRise 0.55s ease both; } .ps-app:nth-child(1) { animation-delay: 0.05s; } .ps-app:nth-child(2) { animation-delay: 0.1s; } .ps-app:nth-child(3) { animation-delay: 0.15s; } .ps-app:nth-child(4) { animation-delay: 0.2s; } .ps-app:nth-child(5) { animation-delay: 0.25s; } .ps-app:nth-child(6) { animation-delay: 0.3s; } .ps-app strong { display: block; color: #fff; font-size: 0.88rem; margin-bottom: 0.25rem; } .ps-app span { display: block; font-size: 0.74rem; color: #c5d4e2; line-height: 1.35; } .ps-app i { display: block; width: 8px; height: 8px; border-radius: 50%; margin: 0 auto 0.45rem; background: #4db8ff; box-shadow: 0 0 12px rgba(77,184,255,0.8); animation: psPacket 1.6s ease-in-out infinite; } .ps-why-list { display: grid; grid-template-columns: 1fr 1fr; gap: 0.55rem 1rem; margin: 0.75rem 0 0; padding: 0; list-style: none; } .ps-why-list li { display: flex; gap: 0.55rem; align-items: flex-start; font-size: 0.84rem; color: #e8eef5; line-height: 1.4; } .ps-why-list b { flex: 0 0 auto; width: 1.4rem; height: 1.4rem; border-radius: 999px; display: grid; place-items: center; font-size: 0.7rem; background: rgba(0,118,206,0.25); color: #9fd0ff; border: 1px solid rgba(77,184,255,0.35); } /* ===== LIGHT THEME ===== */ .present-stage.theme-light { color: #102033; border-color: rgba(0, 118, 206, 0.28); background: radial-gradient(ellipse 70% 50% at 10% -5%, rgba(0, 168, 232, 0.18), transparent 55%), radial-gradient(ellipse 55% 40% at 95% 5%, rgba(255, 154, 60, 0.12), transparent 50%), linear-gradient(165deg, #f4f8fc 0%, #e8f1f8 45%, #f7fafc 100%); box-shadow: 0 30px 80px rgba(16, 40, 70, 0.18), 0 0 0 1px rgba(0,0,0,0.04) inset; } .present-stage.theme-light .present-ai-grid { background-image: linear-gradient(rgba(0, 118, 206, 0.08) 1px, transparent 1px), linear-gradient(90deg, rgba(0, 118, 206, 0.08) 1px, transparent 1px); opacity: 0.7; } .present-stage.theme-light .present-ai-orbs::before { background: rgba(0, 168, 232, 0.22); } .present-stage.theme-light .present-ai-orbs::after { background: rgba(255, 154, 60, 0.16); } .present-stage.theme-light .present-pulse-svg .pl1 { stroke: rgba(0, 118, 206, 0.35); } .present-stage.theme-light .present-pulse-svg .pl2 { stroke: rgba(0, 160, 140, 0.3); } .present-stage.theme-light .present-pulse-svg .pl3 { stroke: rgba(220, 120, 30, 0.28); } .present-stage.theme-light .present-chrome, .present-stage.theme-light .present-nav { background: rgba(255,255,255,0.72); border-color: rgba(16, 40, 70, 0.08); } .present-stage.theme-light .present-brand strong { color: #0b1d30; } .present-stage.theme-light .present-brand span { color: #4a6278; } .present-stage.theme-light .present-deck-desc { color: #4a6278; } .present-stage.theme-light .present-credit { color: #5a7188; } .present-stage.theme-light .present-progress-bar { background: rgba(0,0,0,0.06); } .present-stage.theme-light .present-btn-group { background: rgba(0, 40, 80, 0.05); border-color: rgba(0, 80, 140, 0.15); } .present-stage.theme-light .present-tool { color: #234056; } .present-stage.theme-light .present-tool:hover { background: rgba(0,118,206,0.1); color: #0b1d30; } .present-stage.theme-light .present-tool.ghost { background: #fff; border-color: rgba(0,80,140,0.2); } .present-stage.theme-light .present-deck-pick { background: #fff; border-color: rgba(0,118,206,0.25); } .present-stage.theme-light .present-deck-pick select { color: #0b1d30; } .present-stage.theme-light .present-deck-pick span { color: #0076ce; } .present-stage.theme-light .present-slide h2 { color: #0b1d30; } .present-stage.theme-light .ps-kicker { color: #c45f00; } .present-stage.theme-light .ps-body { color: #24384c; } .present-stage.theme-light .ps-lead { color: #102033; } .present-stage.theme-light .ps-sub { color: #4a6278; } .present-stage.theme-light .ps-sub strong { color: #c45f00; } .present-stage.theme-light .ps-body h4 { color: #0076ce; } .present-stage.theme-light .ps-bullets li, .present-stage.theme-light .ps-steps li { color: #1a2e42; } .present-stage.theme-light .ps-card, .present-stage.theme-light .ps-node, .present-stage.theme-light .ps-seq-step, .present-stage.theme-light .ps-wire-row, .present-stage.theme-light .ps-bff-box, .present-stage.theme-light .ps-app, .present-stage.theme-light .ps-legal { background: rgba(255,255,255,0.88); border-color: rgba(16, 40, 70, 0.1); box-shadow: 0 8px 24px rgba(16,40,70,0.06); } .present-stage.theme-light .ps-card h4 { color: #c45f00; } .present-stage.theme-light .ps-card p, .present-stage.theme-light .ps-node span, .present-stage.theme-light .ps-seq-step p, .present-stage.theme-light .ps-bff-box p, .present-stage.theme-light .ps-app span { color: #3a5268; } .present-stage.theme-light .ps-node strong, .present-stage.theme-light .ps-bff-box h4, .present-stage.theme-light .ps-app strong, .present-stage.theme-light .ps-seq-step strong, .present-stage.theme-light .ps-wire-row .from, .present-stage.theme-light .ps-wire-row .to { color: #0b1d30; } .present-stage.theme-light .ps-node code, .present-stage.theme-light .ps-body code { color: #005fa3; background: rgba(0, 118, 206, 0.08); } .present-stage.theme-light .ps-pills span { background: rgba(0,118,206,0.08); border-color: rgba(0,118,206,0.22); color: #0b1d30; } .present-stage.theme-light .ps-legal { border-color: rgba(200, 60, 60, 0.35); background: rgba(255, 245, 245, 0.95); } .present-stage.theme-light .ps-legal p, .present-stage.theme-light .ps-legal ul { color: #2a2030; } .present-stage.theme-light .present-dot { background: rgba(0,0,0,0.18); } .present-stage.theme-light .present-dot.active { background: #0076ce; box-shadow: 0 0 0 3px rgba(0,118,206,0.2); } .present-stage.theme-light #present-prev { background: #fff; color: #0b1d30; border-color: rgba(0,80,140,0.2); } .present-stage.theme-light .ps-card.tech h4 { color: #0076ce; } .present-stage.theme-light .ps-why-list li { color: #1a2e42; } .present-stage.theme-light .ps-why-list b { background: rgba(0,118,206,0.1); color: #0076ce; } .present-stage.theme-light .ps-bff-box.core { background: linear-gradient(160deg, rgba(255,154,60,0.12), #fff 50%); } .present-stage.theme-light .present-edit-panel { background: rgba(255,255,255,0.95); color: #0b1d30; } .present-stage.theme-light .present-edit-panel input, .present-stage.theme-light .present-edit-panel textarea { background: #fff; color: #0b1d30; border-color: rgba(0,80,140,0.2); } @media (max-width: 900px) { .ps-bff { grid-template-columns: 1fr; } .ps-bff-link { display: none; } .ps-apps { grid-template-columns: 1fr 1fr; } .ps-why-list { grid-template-columns: 1fr; } } /* === LIGHT READABILITY V2 === */ html[data-theme="light"] .stage, html[data-theme="light"] #stage, html[data-theme="light"] .stage-wrap { background: radial-gradient(ellipse 80% 60% at 50% 40%, #e8f1fa 0%, #d5e2ef 55%, #c8d7e8 100%) !important; } html[data-theme="light"] #topo { background: transparent; } /* Context chips on canvas — light cards, dark text */ html[data-theme="light"] .ctx-live, html[data-theme="light"] .ctx-focus { background: rgba(255, 255, 255, 0.92) !important; border: 1px solid rgba(15, 50, 90, 0.16) !important; color: #122033 !important; box-shadow: 0 6px 18px rgba(20, 40, 70, 0.1); } html[data-theme="light"] .ctx-focus { color: #0062b0 !important; font-weight: 600; } html[data-theme="light"] .ctx-live #ctx-live-text { color: #122033 !important; } html[data-theme="light"] .legend { background: rgba(255, 255, 255, 0.92) !important; border: 1px solid rgba(15, 50, 90, 0.16) !important; color: #24384c !important; box-shadow: 0 4px 14px rgba(20, 40, 70, 0.08); } html[data-theme="light"] .hint-bar { color: #3a5268 !important; background: rgba(255, 255, 255, 0.85); border: 1px solid rgba(15, 50, 90, 0.12); border-radius: 6px; padding: 0.3rem 0.5rem; } html[data-theme="light"] .ticker { background: #ffffff !important; border-color: #c5d0dc !important; color: #122033 !important; } html[data-theme="light"] .ticker button { color: #0062b0 !important; font-weight: 600; } html[data-theme="light"] .ticker button:hover { color: #004a8a !important; } html[data-theme="light"] .ticker .sep { color: #8aa0b4; opacity: 1; } html[data-theme="light"] .btn { color: #122033 !important; border-color: #9eb0c2 !important; background: #fff !important; font-weight: 600; } html[data-theme="light"] .btn:hover { color: #0062b0 !important; border-color: #0076ce !important; background: #eef5fc !important; } html[data-theme="light"] .btn.primary { background: #0076ce !important; border-color: #0076ce !important; color: #fff !important; } html[data-theme="light"] .btn.present-btn { border-color: rgba(180, 100, 0, 0.45) !important; background: linear-gradient(135deg, #fff7ed, #eef5fc) !important; color: #122033 !important; } html[data-theme="light"] .kpi { background: #fff !important; border: 1px solid #c5d0dc !important; box-shadow: 0 1px 2px rgba(20,40,70,0.04); } html[data-theme="light"] .kpi .v { color: #0062b0 !important; } html[data-theme="light"] .kpi.warn .v { color: #b86a00 !important; } html[data-theme="light"] .kpi.danger .v { color: #c62828 !important; } html[data-theme="light"] .kpi.power .v { color: #005fa3 !important; } html[data-theme="light"] .kpi .l { color: #4a5d72 !important; } html[data-theme="light"] .kpi:hover { background: #e8f2fc !important; border-color: #0076ce !important; } html[data-theme="light"] .rail-block label, html[data-theme="light"] .rail-block .hint, html[data-theme="light"] .filters label { color: #24384c !important; } html[data-theme="light"] .rail h2, html[data-theme="light"] .rail h3, html[data-theme="light"] .rail strong { color: #122033 !important; } html[data-theme="light"] .ctx-feed { background: rgba(255, 255, 255, 0.94) !important; border: 1px solid rgba(15, 50, 90, 0.14) !important; color: #122033 !important; box-shadow: 0 10px 28px rgba(20, 40, 70, 0.12); } html[data-theme="light"] .ctx-feed-head { background: #f4f7fb !important; border-bottom: 1px solid #c5d0dc !important; color: #122033 !important; } html[data-theme="light"] .ctx-feed-head strong { color: #122033 !important; } html[data-theme="light"] .ctx-feed-head span { color: #4a5d72 !important; } html[data-theme="light"] .feed-item, html[data-theme="light"] .ctx-feed-body { color: #122033 !important; } html[data-theme="light"] .topbar, html[data-theme="light"] header.top, html[data-theme="light"] .app-header { background: linear-gradient(180deg, #ffffff, #eef3f8) !important; border-bottom: 1px solid #c5d0dc; } html[data-theme="light"] .brand-text h1 { color: #122033 !important; } html[data-theme="light"] .brand-text p, html[data-theme="light"] .brand-text span { color: #4a5d72 !important; } html[data-theme="light"] .inspector-empty h2 { color: #0076ce !important; } html[data-theme="light"] .inspector-empty p { color: #4a5d72 !important; } html[data-theme="light"] .app-footer { background: #fff !important; border-top: 1px solid #c5d0dc !important; } html[data-theme="light"] .app-credit { color: #4a5d72 !important; } html[data-theme="light"] .app-credit strong { color: #122033 !important; } html[data-theme="light"] .chip { border-width: 1.5px !important; } html[data-theme="light"] .viz-card.active, html[data-theme="light"] .chip.active { box-shadow: 0 0 0 2px rgba(0, 118, 206, 0.2); } /* === PRESENT TOOLBAR V3 === */ .present-chrome { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.85rem; flex-wrap: wrap; padding: 0.75rem 1rem 0.65rem; border-bottom: 1px solid rgba(255,255,255,0.08); background: linear-gradient(180deg, rgba(8, 18, 32, 0.92), rgba(4, 10, 18, 0.78)); backdrop-filter: blur(12px); } .present-brand { display: flex; align-items: center; gap: 0.6rem; min-width: 200px; } .present-brand img { border-radius: 8px; box-shadow: 0 0 0 1px rgba(255,255,255,0.12); } .present-brand strong { display: block; font-size: 0.9rem; letter-spacing: 0.01em; color: #fff; } .present-brand span { font-size: 0.72rem; color: #9eb4c8; font-variant-numeric: tabular-nums; } .present-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 0.4rem; flex: 1; min-width: 0; } .present-deck-pick { display: inline-flex; align-items: center; gap: 0.4rem; padding: 0.28rem 0.55rem 0.28rem 0.7rem; border-radius: 12px; border: 1px solid rgba(77, 184, 255, 0.28); background: linear-gradient(145deg, rgba(0, 70, 120, 0.35), rgba(0, 30, 55, 0.55)); box-shadow: inset 0 1px 0 rgba(255,255,255,0.08); } .present-deck-pick span { font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.1em; color: #7ec8ff; font-weight: 750; } .present-deck-pick select { border: 0; background: transparent; color: #fff; font: inherit; font-size: 0.8rem; font-weight: 650; max-width: 190px; outline: none; cursor: pointer; padding-right: 0.15rem; } .present-deck-pick select option { color: #111; background: #fff; } .present-seg { display: inline-flex; align-items: stretch; padding: 3px; border-radius: 12px; gap: 2px; background: rgba(255, 255, 255, 0.045); border: 1px solid rgba(255, 255, 255, 0.1); box-shadow: inset 0 1px 0 rgba(255,255,255,0.06), 0 6px 16px rgba(0,0,0,0.18); } .present-seg-accent { border-color: rgba(0, 168, 232, 0.28); background: rgba(0, 80, 140, 0.18); } .present-seg-theme { border-color: rgba(255, 184, 77, 0.28); background: rgba(80, 50, 10, 0.22); } .present-tool { appearance: none; border: 0; background: transparent; color: #d5e4f2; font: inherit; font-size: 0.72rem; font-weight: 650; letter-spacing: 0.01em; padding: 0.42rem 0.78rem; border-radius: 9px; cursor: pointer; white-space: nowrap; line-height: 1.1; transition: background 0.16s ease, color 0.16s ease, box-shadow 0.16s ease, transform 0.12s ease; } .present-tool:hover { background: rgba(255,255,255,0.1); color: #fff; } .present-tool:active { transform: translateY(1px); } .present-tool.primary, .present-tool.is-on { background: linear-gradient(135deg, #0084e0 0%, #00a8e8 100%); color: #fff; box-shadow: 0 0 0 1px rgba(0, 168, 232, 0.35), 0 6px 16px rgba(0, 118, 206, 0.35); } .present-seg-theme .present-tool.primary, .present-seg-theme .present-tool.is-on { background: linear-gradient(135deg, #e08920 0%, #ffb84d 100%); color: #1a1208; box-shadow: 0 0 0 1px rgba(255, 184, 77, 0.4), 0 6px 16px rgba(224, 137, 32, 0.35); } .present-tool:disabled { opacity: 0.35; cursor: not-allowed; transform: none; } .present-tool:disabled:hover { background: transparent; color: #d5e4f2; } .present-close-btn { margin-left: 0.15rem; padding: 0.45rem 0.95rem; border-radius: 12px; border: 1px solid rgba(255, 120, 120, 0.35); background: rgba(80, 20, 24, 0.45); color: #ffc9c9; font-weight: 700; box-shadow: inset 0 1px 0 rgba(255,255,255,0.06); } .present-close-btn:hover { background: rgba(140, 30, 36, 0.65); border-color: rgba(255, 140, 140, 0.55); color: #fff; } .present-nav { display: flex; align-items: center; gap: 0.75rem; padding: 0.7rem 1rem; border-top: 1px solid rgba(255,255,255,0.08); background: linear-gradient(0deg, rgba(8, 18, 32, 0.92), rgba(4, 10, 18, 0.72)); } .present-nav-btn { appearance: none; border: 1px solid rgba(255,255,255,0.14); background: rgba(255,255,255,0.06); color: #e8f0f8; font: inherit; font-size: 0.8rem; font-weight: 650; padding: 0.55rem 1.15rem; border-radius: 999px; cursor: pointer; min-width: 7rem; transition: background 0.16s ease, border-color 0.16s ease, transform 0.12s ease, box-shadow 0.16s ease; } .present-nav-btn:hover { background: rgba(255,255,255,0.12); border-color: rgba(255,255,255,0.28); } .present-nav-btn:active { transform: translateY(1px); } .present-nav-btn:disabled { opacity: 0.35; cursor: not-allowed; } .present-nav-next { border: 0; background: linear-gradient(135deg, #0076ce, #19a0e6); color: #fff; box-shadow: 0 8px 22px rgba(0, 118, 206, 0.38); } .present-nav-next:hover { background: linear-gradient(135deg, #0084e0, #2ab0f0); border: 0; color: #fff; } .present-deck-desc { margin: 0; padding: 0.35rem 1rem 0.15rem; font-size: 0.72rem; color: #9eb4c8; } .present-dot { width: 8px; height: 8px; border-radius: 50%; border: 0; padding: 0; background: rgba(255,255,255,0.22); cursor: pointer; transition: transform 0.15s ease, background 0.15s ease, box-shadow 0.15s ease; } .present-dot:hover { background: rgba(255,255,255,0.45); transform: scale(1.15); } .present-dot.active { background: #ffb84d; box-shadow: 0 0 0 3px rgba(255, 184, 77, 0.22); transform: scale(1.2); } /* Light theme toolbar */ .present-stage.theme-light .present-chrome, .present-stage.theme-light .present-nav { background: linear-gradient(180deg, rgba(255,255,255,0.95), rgba(238,243,248,0.9)); border-color: rgba(16, 40, 70, 0.1); } .present-stage.theme-light .present-brand strong { color: #0b1d30; } .present-stage.theme-light .present-brand span { color: #4a6278; } .present-stage.theme-light .present-deck-desc { color: #4a6278; } .present-stage.theme-light .present-seg { background: rgba(0, 40, 80, 0.04); border-color: rgba(0, 80, 140, 0.14); box-shadow: 0 2px 8px rgba(20,40,70,0.06); } .present-stage.theme-light .present-seg-accent { background: rgba(0, 118, 206, 0.08); border-color: rgba(0, 118, 206, 0.22); } .present-stage.theme-light .present-seg-theme { background: rgba(224, 137, 32, 0.08); border-color: rgba(224, 137, 32, 0.22); } .present-stage.theme-light .present-tool { color: #234056; } .present-stage.theme-light .present-tool:hover { background: rgba(0,118,206,0.1); color: #0b1d30; } .present-stage.theme-light .present-tool.primary, .present-stage.theme-light .present-tool.is-on { color: #fff; } .present-stage.theme-light .present-seg-theme .present-tool.primary { color: #1a1208; } .present-stage.theme-light .present-deck-pick { background: #fff; border-color: rgba(0,118,206,0.25); } .present-stage.theme-light .present-deck-pick select { color: #0b1d30; } .present-stage.theme-light .present-deck-pick span { color: #0076ce; } .present-stage.theme-light .present-close-btn { background: #fff5f5; border-color: rgba(200, 60, 60, 0.3); color: #a32020; } .present-stage.theme-light .present-close-btn:hover { background: #ffe8e8; color: #8a1010; } .present-stage.theme-light .present-nav-btn { background: #fff; border-color: rgba(0,80,140,0.2); color: #0b1d30; } .present-stage.theme-light .present-nav-next { background: linear-gradient(135deg, #0076ce, #19a0e6); border: 0; color: #fff; } .present-stage.theme-light .present-dot { background: rgba(0,0,0,0.18); } .present-stage.theme-light .present-dot.active { background: #0076ce; box-shadow: 0 0 0 3px rgba(0,118,206,0.2); } /* Compat: old class names still used in some light rules */ .present-btn-group { display: none; } /* === PRESENT BG V4 === */ .present-stage.theme-dark, .present-stage:not(.theme-light) { background: radial-gradient(ellipse 90% 70% at 15% -20%, rgba(0, 140, 220, 0.55), transparent 55%), radial-gradient(ellipse 70% 55% at 95% 5%, rgba(255, 154, 60, 0.28), transparent 50%), radial-gradient(ellipse 60% 50% at 70% 95%, rgba(61, 255, 224, 0.18), transparent 55%), radial-gradient(ellipse 50% 40% at 40% 60%, rgba(0, 80, 160, 0.35), transparent 60%), linear-gradient(165deg, #071525 0%, #0a1c32 35%, #061018 70%, #040a12 100%) !important; border-color: rgba(77, 184, 255, 0.35); } .present-ai-bg { pointer-events: none !important; position: absolute; inset: 0; z-index: 0; overflow: hidden; } .present-ai-aurora { position: absolute; inset: -30%; background: conic-gradient(from 120deg at 30% 40%, rgba(0, 168, 232, 0.0), rgba(0, 168, 232, 0.22), rgba(126, 240, 216, 0.12), rgba(255, 154, 60, 0.18), rgba(0, 118, 206, 0.0) 70%); filter: blur(40px); opacity: 0.85; animation: presentAurora 18s ease-in-out infinite alternate; } @keyframes presentAurora { 0% { transform: rotate(0deg) scale(1); } 100% { transform: rotate(28deg) scale(1.12); } } .present-ai-grid { position: absolute; inset: -15%; background-image: linear-gradient(rgba(77, 184, 255, 0.16) 1px, transparent 1px), linear-gradient(90deg, rgba(77, 184, 255, 0.16) 1px, transparent 1px); background-size: 42px 42px; mask-image: radial-gradient(ellipse 75% 65% at 50% 45%, #000 15%, transparent 78%); animation: presentGridDrift 22s linear infinite; opacity: 0.85; } @keyframes presentGridDrift { from { transform: translate3d(0, 0, 0); } to { transform: translate3d(-42px, -42px, 0); } } .present-ai-mesh { position: absolute; inset: 0; background: radial-gradient(circle at 20% 30%, rgba(0, 168, 232, 0.2), transparent 28%), radial-gradient(circle at 80% 25%, rgba(255, 154, 60, 0.16), transparent 26%), radial-gradient(circle at 55% 75%, rgba(61, 255, 224, 0.14), transparent 30%); animation: presentMesh 12s ease-in-out infinite alternate; opacity: 1; } @keyframes presentMesh { 0% { opacity: 0.7; transform: scale(1); } 100% { opacity: 1; transform: scale(1.05); } } .present-ai-orbs { position: absolute; inset: 0; } .present-ai-orbs .orb { position: absolute; border-radius: 50%; filter: blur(28px); opacity: 0.7; animation: presentOrb 10s ease-in-out infinite; } .present-ai-orbs .o1 { width: 340px; height: 340px; left: -80px; top: 8%; background: rgba(0, 140, 230, 0.65); } .present-ai-orbs .o2 { width: 260px; height: 260px; right: -50px; top: 18%; background: rgba(255, 154, 60, 0.45); animation-delay: -3s; } .present-ai-orbs .o3 { width: 300px; height: 300px; left: 35%; bottom: -90px; background: rgba(61, 255, 224, 0.32); animation-delay: -6s; } .present-ai-orbs .o4 { width: 180px; height: 180px; right: 22%; bottom: 20%; background: rgba(0, 200, 255, 0.4); animation-delay: -1.5s; } @keyframes presentOrb { 0%, 100% { transform: translate(0, 0) scale(1); } 50% { transform: translate(24px, -28px) scale(1.12); } } .present-ai-particles { position: absolute; inset: 0; } .present-ai-particles i { position: absolute; width: 3px; height: 3px; border-radius: 50%; background: #7ec8ff; box-shadow: 0 0 10px 2px rgba(77, 184, 255, 0.85); animation: presentFloat 7s ease-in-out infinite; opacity: 0.85; } .present-ai-particles i:nth-child(1) { left: 12%; top: 22%; animation-delay: 0s; } .present-ai-particles i:nth-child(2) { left: 28%; top: 58%; animation-delay: -1s; background: #ffb84d; box-shadow: 0 0 10px 2px rgba(255,184,77,0.8); } .present-ai-particles i:nth-child(3) { left: 45%; top: 18%; animation-delay: -2s; } .present-ai-particles i:nth-child(4) { left: 62%; top: 42%; animation-delay: -0.5s; background: #7ef0d8; box-shadow: 0 0 10px 2px rgba(126,240,216,0.8); } .present-ai-particles i:nth-child(5) { left: 78%; top: 28%; animation-delay: -3s; } .present-ai-particles i:nth-child(6) { left: 88%; top: 62%; animation-delay: -1.5s; background: #ffb84d; box-shadow: 0 0 10px 2px rgba(255,184,77,0.8); } .present-ai-particles i:nth-child(7) { left: 18%; top: 72%; animation-delay: -4s; } .present-ai-particles i:nth-child(8) { left: 38%; top: 82%; animation-delay: -2.5s; background: #7ef0d8; box-shadow: 0 0 10px 2px rgba(126,240,216,0.8); } .present-ai-particles i:nth-child(9) { left: 55%; top: 68%; animation-delay: -0.8s; } .present-ai-particles i:nth-child(10) { left: 72%; top: 78%; animation-delay: -3.5s; } .present-ai-particles i:nth-child(11) { left: 8%; top: 48%; animation-delay: -5s; background: #ffb84d; box-shadow: 0 0 10px 2px rgba(255,184,77,0.8); } .present-ai-particles i:nth-child(12) { left: 92%; top: 40%; animation-delay: -2.2s; } @keyframes presentFloat { 0%, 100% { transform: translateY(0) scale(1); opacity: 0.45; } 50% { transform: translateY(-18px) scale(1.6); opacity: 1; } } .present-pulse-svg { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0.95; } .present-pulse-svg .pl { fill: none; stroke-width: 2.4; stroke-linecap: round; stroke-dasharray: 10 16; } .present-pulse-svg .pl1 { animation: presentDash 2.8s linear infinite; opacity: 0.95; } .present-pulse-svg .pl2 { animation: presentDash 3.6s linear infinite reverse; stroke-width: 2.2; opacity: 0.85; } .present-pulse-svg .pl3 { animation: presentDash 2.4s linear infinite; stroke-width: 2.6; opacity: 0.9; } .present-pulse-svg .pl4 { animation: presentDash 4.2s linear infinite; stroke-width: 1.8; opacity: 0.55; stroke-dasharray: 4 14; } .present-pulse-svg .pl5 { animation: presentDash 3.2s linear infinite reverse; stroke-width: 1.8; opacity: 0.5; stroke-dasharray: 5 12; } @keyframes presentDash { to { stroke-dashoffset: -140; } } .present-pulse-svg .pn { fill: #7ec8ff; filter: drop-shadow(0 0 6px rgba(77,184,255,0.95)); animation: presentNodePulse 2.4s ease-in-out infinite; } .present-pulse-svg .pn2, .present-pulse-svg .pn5 { fill: #ffb84d; filter: drop-shadow(0 0 6px rgba(255,184,77,0.95)); animation-delay: -0.6s; } .present-pulse-svg .pn3, .present-pulse-svg .pn7 { fill: #7ef0d8; filter: drop-shadow(0 0 6px rgba(126,240,216,0.95)); animation-delay: -1.2s; } .present-pulse-svg .pn4 { animation-delay: -0.3s; } .present-pulse-svg .pn6 { fill: #ffb84d; filter: drop-shadow(0 0 6px rgba(255,184,77,0.95)); animation-delay: -1.8s; } @keyframes presentNodePulse { 0%, 100% { opacity: 0.45; r: 3; } 50% { opacity: 1; } } .present-ai-scan { position: absolute; left: 0; right: 0; height: 28%; background: linear-gradient(180deg, transparent, rgba(77, 184, 255, 0.08), transparent); animation: presentScan 7s ease-in-out infinite; opacity: 0.9; } @keyframes presentScan { 0% { top: -20%; } 100% { top: 95%; } } .present-ai-vignette { position: absolute; inset: 0; background: radial-gradient(ellipse 70% 60% at 50% 45%, transparent 35%, rgba(2, 8, 16, 0.45) 100%); pointer-events: none; } /* Keep chrome above FX */ .present-chrome, .present-nav, .present-slide-wrap, .present-edit-panel, .present-credit, .present-deck-desc, .present-progress-bar { position: relative; z-index: 2; } /* Light theme: softer but still visible */ .present-stage.theme-light { background: radial-gradient(ellipse 80% 55% at 10% -10%, rgba(0, 168, 232, 0.28), transparent 55%), radial-gradient(ellipse 60% 45% at 95% 0%, rgba(255, 154, 60, 0.18), transparent 50%), radial-gradient(ellipse 50% 40% at 50% 100%, rgba(0, 160, 140, 0.12), transparent 55%), linear-gradient(165deg, #f2f7fc 0%, #e4eef8 50%, #f7fafc 100%) !important; } .present-stage.theme-light .present-ai-aurora { opacity: 0.45; filter: blur(48px); } .present-stage.theme-light .present-ai-grid { background-image: linear-gradient(rgba(0, 118, 206, 0.14) 1px, transparent 1px), linear-gradient(90deg, rgba(0, 118, 206, 0.14) 1px, transparent 1px); opacity: 0.75; } .present-stage.theme-light .present-ai-orbs .o1 { background: rgba(0, 140, 220, 0.35); } .present-stage.theme-light .present-ai-orbs .o2 { background: rgba(255, 154, 60, 0.22); } .present-stage.theme-light .present-ai-orbs .o3 { background: rgba(0, 160, 140, 0.18); } .present-stage.theme-light .present-ai-orbs .o4 { background: rgba(0, 160, 230, 0.2); } .present-stage.theme-light .present-pulse-svg { opacity: 0.7; } .present-stage.theme-light .present-ai-vignette { background: radial-gradient(ellipse 70% 60% at 50% 45%, transparent 40%, rgba(220, 230, 240, 0.55) 100%); } .present-stage.theme-light .present-ai-scan { background: linear-gradient(180deg, transparent, rgba(0, 118, 206, 0.07), transparent); } /* === PS ARCH DESIGN === */ .ps-arch { position: relative; margin: 0.65rem 0 0.5rem; min-height: 360px; border-radius: 16px; border: 1px solid rgba(77, 184, 255, 0.28); background: radial-gradient(ellipse 70% 50% at 50% 20%, rgba(0, 118, 206, 0.18), transparent 55%), radial-gradient(ellipse 50% 40% at 80% 80%, rgba(255, 154, 60, 0.12), transparent 50%), rgba(4, 12, 22, 0.55); overflow: hidden; box-shadow: 0 16px 40px rgba(0,0,0,0.28), inset 0 0 0 1px rgba(255,255,255,0.04); } .ps-arch-svg { position: absolute; inset: 0; width: 100%; height: 100%; z-index: 0; pointer-events: none; } .ps-arch-svg .arch-pulse { fill: none; stroke-width: 2.2; stroke-linecap: round; stroke-dasharray: 8 14; opacity: 0.9; } .ps-arch-svg .arch-p1 { stroke-width: 2.8; stroke-dasharray: 6 10; animation: archDash 1.8s linear infinite; } .ps-arch-svg .arch-p2 { animation: archDash 2.4s linear infinite; } .ps-arch-svg .arch-p3 { animation: archDash 2s linear infinite reverse; } .ps-arch-svg .arch-p4 { animation: archDash 2.6s linear infinite; } .ps-arch-svg .arch-p5 { animation: archDash 2.2s linear infinite reverse; opacity: 0.75; } .ps-arch-svg .arch-p6 { animation: archDash 2.5s linear infinite; opacity: 0.75; } .ps-arch-svg .arch-p7 { animation: archDash 1.6s linear infinite; opacity: 0.85; } .ps-arch-svg .arch-p8 { animation: archDash 2.3s linear infinite reverse; opacity: 0.75; } .ps-arch-svg .arch-p9 { animation: archDash 2.7s linear infinite; opacity: 0.75; } @keyframes archDash { to { stroke-dashoffset: -120; } } .ps-arch-svg .arch-dot { fill: #4db8ff; filter: drop-shadow(0 0 6px rgba(77,184,255,0.95)); } .ps-arch-layer { position: relative; z-index: 1; display: flex; justify-content: center; gap: 0.55rem; padding: 0.55rem 0.75rem; flex-wrap: wrap; } .ps-arch-layer.top { padding-top: 0.75rem; } .ps-arch-layer.apps { margin-top: 0.15rem; } .ps-arch-layer.mid { margin-top: 0.35rem; } .ps-arch-layer.bottom { margin-top: 0.45rem; padding-bottom: 0.85rem; } .ps-arch-node { min-width: 108px; max-width: 170px; flex: 1 1 108px; padding: 0.55rem 0.65rem; border-radius: 12px; border: 1px solid rgba(255,255,255,0.14); background: rgba(8, 18, 32, 0.88); box-shadow: 0 8px 22px rgba(0,0,0,0.25); text-align: center; animation: cardRise 0.55s ease both; backdrop-filter: blur(6px); } .ps-arch-node strong { display: block; color: #fff; font-size: 0.82rem; margin-bottom: 0.15rem; } .ps-arch-node span { display: block; font-size: 0.68rem; color: #a8bdd0; line-height: 1.3; } .ps-arch-node.operator { max-width: 200px; border-color: rgba(255,255,255,0.22); background: linear-gradient(160deg, rgba(255,255,255,0.1), rgba(8,18,32,0.9)); } .ps-arch-node.app { border-color: rgba(77,184,255,0.35); } .ps-arch-node.core-app { border-color: rgba(255,184,77,0.55); box-shadow: 0 8px 22px rgba(0,0,0,0.25), 0 0 20px rgba(255,154,60,0.18); } .ps-arch-node.bff { max-width: 320px; flex: 1 1 260px; border-color: rgba(255,154,60,0.55); background: linear-gradient(160deg, rgba(255,154,60,0.22), transparent 55%), rgba(12, 22, 36, 0.95); box-shadow: 0 10px 28px rgba(0,0,0,0.3), 0 0 28px rgba(255,154,60,0.2); } .ps-arch-node.ome { border-color: rgba(0,168,232,0.5); } .ps-arch-node.owui { border-color: rgba(126,240,216,0.45); } .ps-arch-node.vllm { border-color: rgba(180,140,255,0.4); } .ps-arch-legend { display: flex; flex-wrap: wrap; gap: 0.55rem 1rem; margin-top: 0.65rem; font-size: 0.72rem; color: #c5d4e2; } .ps-arch-legend span::before { content: ""; display: inline-block; width: 14px; height: 3px; border-radius: 2px; margin-right: 0.4rem; vertical-align: middle; } .ps-arch-legend .lg-blue::before { background: linear-gradient(90deg, #0076ce, #7ef0d8); box-shadow: 0 0 8px rgba(77,184,255,0.8); } .ps-arch-legend .lg-amber::before { background: #ffb84d; box-shadow: 0 0 8px rgba(255,184,77,0.8); } .ps-arch-legend .lg-teal::before { width: 8px; height: 8px; border-radius: 50%; background: #4db8ff; box-shadow: 0 0 8px rgba(77,184,255,0.9); } .present-stage.theme-light .ps-arch { background: radial-gradient(ellipse 70% 50% at 50% 20%, rgba(0, 118, 206, 0.12), transparent 55%), rgba(255,255,255,0.72); border-color: rgba(0, 118, 206, 0.22); } .present-stage.theme-light .ps-arch-node { background: rgba(255,255,255,0.95); border-color: rgba(16,40,70,0.12); box-shadow: 0 6px 16px rgba(20,40,70,0.08); } .present-stage.theme-light .ps-arch-node strong { color: #0b1d30; } .present-stage.theme-light .ps-arch-node span { color: #4a6278; } .present-stage.theme-light .ps-arch-node.bff { background: linear-gradient(160deg, rgba(255,154,60,0.14), #fff 55%); } .present-stage.theme-light .ps-arch-legend { color: #3a5268; } @media (max-width: 820px) { .ps-arch { min-height: 420px; } .ps-arch-node { min-width: 90px; font-size: 0.9em; } .ps-arch-svg { opacity: 0.55; } } /* === PS ARCH LOGOS === */ .ps-logo-row { display: flex; justify-content: center; align-items: center; gap: 0.35rem; margin-bottom: 0.4rem; flex-wrap: wrap; } .ps-logo { width: 28px; height: 28px; border-radius: 8px; object-fit: cover; box-shadow: 0 2px 8px rgba(0,0,0,0.25); background: rgba(255,255,255,0.06); } .ps-logo.lg { width: 36px; height: 36px; border-radius: 10px; } .ps-arch-logos .ps-arch-node { min-width: 118px; } .ps-arch-logos .ps-arch-node.bff { max-width: 380px; } .ps-deploy { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.75rem; margin-top: 0.5rem; } .ps-deploy-card { border-radius: 14px; padding: 0.9rem 1rem; border: 1px solid rgba(255,255,255,0.12); background: rgba(8, 18, 32, 0.85); animation: cardRise 0.55s ease both; } .ps-deploy-card:nth-child(2) { animation-delay: 0.06s; } .ps-deploy-card:nth-child(3) { animation-delay: 0.12s; } .ps-deploy-card:nth-child(4) { animation-delay: 0.18s; } .ps-deploy-card h4 { margin: 0.35rem 0 0.25rem; color: #fff; font-size: 0.95rem; } .ps-deploy-card p { margin: 0; font-size: 0.8rem; color: #c5d4e2; line-height: 1.4; } .present-stage.theme-light .ps-deploy-card { background: #fff; border-color: rgba(16,40,70,0.12); } .present-stage.theme-light .ps-deploy-card h4 { color: #0b1d30; } .present-stage.theme-light .ps-deploy-card p { color: #4a6278; } @media (max-width: 820px) { .ps-deploy { grid-template-columns: 1fr; } } /* === PRESENT TOOLBAR V4 === */ .present-chrome { display: flex; flex-direction: column; gap: 0.55rem; padding: 0.85rem 1.1rem 0.7rem; border-bottom: 1px solid rgba(255,255,255,0.08); background: rgba(6, 14, 24, 0.72); backdrop-filter: blur(16px); } .present-chrome-top { display: flex; align-items: center; justify-content: space-between; gap: 1rem; flex-wrap: wrap; } .present-brand { display: flex; align-items: center; gap: 0.65rem; min-width: 210px; } .present-brand img { width: 32px; height: 32px; border-radius: 9px; box-shadow: 0 0 0 1px rgba(255,255,255,0.1); } .present-brand strong { display: block; font-size: 0.92rem; font-weight: 700; letter-spacing: -0.01em; color: #f3f7fb; } .present-brand span { display: block; margin-top: 0.1rem; font-size: 0.72rem; color: #8fa6bb; font-variant-numeric: tabular-nums; } .present-chrome-primary { display: flex; align-items: flex-end; flex-wrap: wrap; gap: 0.65rem 0.75rem; justify-content: flex-end; } .present-field-label { display: block; margin-bottom: 0.28rem; font-size: 0.6rem; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; color: #7ec8ff; } .present-deck-pick { display: flex; flex-direction: column; align-items: stretch; min-width: 200px; margin: 0; } .present-deck-pick select { appearance: none; height: 38px; padding: 0 2rem 0 0.85rem; border-radius: 10px; border: 1px solid rgba(255,255,255,0.14); background: linear-gradient(180deg, rgba(255,255,255,0.06), rgba(255,255,255,0.02)), #0b1624; color: #f3f7fb; font: inherit; font-size: 0.84rem; font-weight: 600; cursor: pointer; outline: none; background-image: linear-gradient(45deg, transparent 50%, #9eb4c8 50%), linear-gradient(135deg, #9eb4c8 50%, transparent 50%), linear-gradient(180deg, rgba(255,255,255,0.06), rgba(255,255,255,0.02)); background-position: calc(100% - 14px) calc(50% - 2px), calc(100% - 9px) calc(50% - 2px), 0 0; background-size: 5px 5px, 5px 5px, 100% 100%; background-repeat: no-repeat; box-shadow: inset 0 1px 0 rgba(255,255,255,0.05); } .present-deck-pick select:hover, .present-deck-pick select:focus { border-color: rgba(0, 168, 232, 0.45); } .present-deck-pick select option { color: #111; background: #fff; } .present-control { display: flex; flex-direction: column; } .present-switch { display: inline-grid; grid-template-columns: 1fr 1fr; height: 38px; min-width: 148px; padding: 3px; border-radius: 10px; border: 1px solid rgba(255,255,255,0.12); background: rgba(0, 0, 0, 0.35); box-shadow: inset 0 1px 0 rgba(255,255,255,0.04); } .present-switch-btn { appearance: none; border: 0; border-radius: 8px; background: transparent; color: #b7c9d9; font: inherit; font-size: 0.8rem; font-weight: 650; cursor: pointer; transition: background 0.15s ease, color 0.15s ease, box-shadow 0.15s ease; } .present-switch-btn:hover { color: #fff; background: rgba(255,255,255,0.06); } .present-switch-btn.is-on { background: #0076ce; color: #fff; box-shadow: 0 4px 12px rgba(0, 118, 206, 0.35); } .present-close-btn { appearance: none; height: 38px; padding: 0 1.1rem; margin-bottom: 0; border-radius: 10px; border: 1px solid rgba(255,255,255,0.14); background: transparent; color: #d7e4f0; font: inherit; font-size: 0.8rem; font-weight: 650; cursor: pointer; transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease; } .present-close-btn:hover { border-color: rgba(255, 120, 120, 0.45); background: rgba(120, 30, 36, 0.35); color: #ffd0d0; } .present-chrome-tools { display: flex; flex-wrap: wrap; align-items: center; gap: 0.45rem 0.65rem; padding-top: 0.15rem; } .present-tool-cluster { display: inline-flex; align-items: center; gap: 0.2rem; padding: 0.2rem; border-radius: 999px; background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.07); } .present-chip { appearance: none; border: 0; background: transparent; color: #c5d4e2; font: inherit; font-size: 0.74rem; font-weight: 600; padding: 0.38rem 0.75rem; border-radius: 999px; cursor: pointer; transition: background 0.15s ease, color 0.15s ease; } .present-chip:hover { background: rgba(255,255,255,0.08); color: #fff; } .present-chip.is-on { background: rgba(0, 118, 206, 0.28); color: #9fd0ff; } .present-chip:disabled { opacity: 0.35; cursor: not-allowed; } .present-chip:disabled:hover { background: transparent; color: #c5d4e2; } .present-deck-desc { margin: 0; padding: 0.2rem 1.1rem 0.1rem; font-size: 0.72rem; color: #8fa6bb; } .present-nav-btn { appearance: none; border: 1px solid rgba(255,255,255,0.14); background: rgba(255,255,255,0.04); color: #e8f0f8; font: inherit; font-size: 0.82rem; font-weight: 650; padding: 0.58rem 1.2rem; border-radius: 999px; cursor: pointer; min-width: 7.25rem; transition: background 0.15s ease, border-color 0.15s ease, transform 0.12s ease; } .present-nav-btn:hover { background: rgba(255,255,255,0.09); border-color: rgba(255,255,255,0.24); } .present-nav-btn:disabled { opacity: 0.35; cursor: not-allowed; } .present-nav-next { border: 0; background: #0076ce; color: #fff; box-shadow: 0 8px 20px rgba(0, 118, 206, 0.28); } .present-nav-next:hover { background: #0086e6; border: 0; color: #fff; } /* Light theme chrome */ .present-stage.theme-light .present-chrome { background: rgba(255,255,255,0.88); border-color: rgba(16, 40, 70, 0.1); } .present-stage.theme-light .present-brand strong { color: #0b1d30; } .present-stage.theme-light .present-brand span, .present-stage.theme-light .present-deck-desc { color: #5a7188; } .present-stage.theme-light .present-field-label { color: #0076ce; } .present-stage.theme-light .present-deck-pick select { background: #fff; color: #0b1d30; border-color: rgba(0, 80, 140, 0.2); background-image: linear-gradient(45deg, transparent 50%, #5a7188 50%), linear-gradient(135deg, #5a7188 50%, transparent 50%); background-position: calc(100% - 14px) calc(50% - 2px), calc(100% - 9px) calc(50% - 2px); background-size: 5px 5px, 5px 5px; background-repeat: no-repeat; } .present-stage.theme-light .present-switch { background: #eef3f8; border-color: rgba(0, 80, 140, 0.15); } .present-stage.theme-light .present-switch-btn { color: #3a5268; } .present-stage.theme-light .present-switch-btn:hover { color: #0b1d30; background: rgba(0,118,206,0.08); } .present-stage.theme-light .present-switch-btn.is-on { background: #0076ce; color: #fff; } .present-stage.theme-light .present-close-btn { color: #24384c; border-color: rgba(0,80,140,0.18); background: #fff; } .present-stage.theme-light .present-close-btn:hover { background: #fff5f5; border-color: rgba(200,60,60,0.35); color: #a32020; } .present-stage.theme-light .present-tool-cluster { background: #f4f7fb; border-color: rgba(0,80,140,0.12); } .present-stage.theme-light .present-chip { color: #24384c; } .present-stage.theme-light .present-chip:hover { background: rgba(0,118,206,0.1); color: #0b1d30; } .present-stage.theme-light .present-chip.is-on { background: rgba(0,118,206,0.14); color: #0062b0; } .present-stage.theme-light .present-nav-btn { background: #fff; border-color: rgba(0,80,140,0.18); color: #0b1d30; } .present-stage.theme-light .present-nav-next { background: #0076ce; border: 0; color: #fff; } @media (max-width: 900px) { .present-chrome-primary { justify-content: flex-start; } .present-deck-pick { min-width: 160px; width: 100%; } } /* === PRESENT TOOLBAR V5 === */ .present-chrome { padding: 0.75rem 1rem 0.55rem; border-bottom: 1px solid rgba(255,255,255,0.06); background: linear-gradient(180deg, rgba(10, 18, 30, 0.92), rgba(8, 14, 24, 0.78)); backdrop-filter: blur(20px) saturate(1.2); } .present-bar { display: grid; grid-template-columns: minmax(160px, 1fr) minmax(180px, 280px) auto; align-items: center; gap: 0.85rem 1.1rem; } .present-brand { display: flex; align-items: center; gap: 0.7rem; min-width: 0; } .present-brand img { width: 30px; height: 30px; border-radius: 10px; box-shadow: 0 0 0 1px rgba(255,255,255,0.12), 0 6px 16px rgba(0,0,0,0.25); } .present-brand-text strong { display: block; font-size: 0.95rem; font-weight: 700; letter-spacing: -0.02em; color: #f7fafc; } .present-brand-text span { display: block; margin-top: 0.12rem; font-size: 0.7rem; color: #8ea3b8; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 260px; } .present-bar-center { min-width: 0; } .present-deck-shell { display: block; margin: 0; position: relative; } .present-deck-shell select { width: 100%; height: 42px; padding: 0 2.4rem 0 1rem; border: 1px solid rgba(255,255,255,0.1); border-radius: 14px; background: rgba(255,255,255,0.045); color: #f2f6fa; font: inherit; font-size: 0.88rem; font-weight: 650; outline: none; cursor: pointer; appearance: none; box-shadow: inset 0 1px 0 rgba(255,255,255,0.04); transition: border-color 0.15s ease, background 0.15s ease, box-shadow 0.15s ease; } .present-deck-shell select:hover, .present-deck-shell select:focus { border-color: rgba(0, 168, 232, 0.4); background: rgba(0, 118, 206, 0.12); box-shadow: 0 0 0 3px rgba(0, 118, 206, 0.15); } .present-deck-shell::after { content: ""; position: absolute; right: 1rem; top: 50%; width: 7px; height: 7px; border-right: 2px solid #9eb4c8; border-bottom: 2px solid #9eb4c8; transform: translateY(-60%) rotate(45deg); pointer-events: none; } .present-deck-shell select option { color: #111; background: #fff; } .present-bar-right { display: flex; align-items: center; justify-content: flex-end; gap: 0.5rem; flex-wrap: wrap; } .present-seg { display: inline-flex; align-items: center; gap: 2px; padding: 3px; height: 42px; border-radius: 14px; background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.08); box-shadow: inset 0 1px 0 rgba(255,255,255,0.03); } .present-seg-btn { appearance: none; border: 0; height: 100%; display: inline-flex; align-items: center; gap: 0.4rem; padding: 0 0.85rem; border-radius: 11px; background: transparent; color: #a8bdd0; font: inherit; font-size: 0.78rem; font-weight: 650; cursor: pointer; transition: background 0.16s ease, color 0.16s ease, box-shadow 0.16s ease; } .present-seg-btn svg { flex: 0 0 auto; opacity: 0.9; } .present-seg-btn:hover { color: #fff; background: rgba(255,255,255,0.06); } .present-seg-btn.is-on { background: linear-gradient(180deg, #1a8de0, #0076ce); color: #fff; box-shadow: 0 6px 16px rgba(0, 118, 206, 0.32); } .present-seg-btn.is-on svg { opacity: 1; } .present-icon-btn { appearance: none; width: 42px; height: 42px; display: grid; place-items: center; border-radius: 14px; border: 1px solid rgba(255,255,255,0.1); background: rgba(255,255,255,0.04); color: #d5e4f2; cursor: pointer; transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 0.12s ease; } .present-icon-btn:hover { background: rgba(255,255,255,0.09); border-color: rgba(255,255,255,0.2); color: #fff; } .present-icon-btn.is-on { border-color: rgba(0, 168, 232, 0.45); background: rgba(0, 118, 206, 0.22); color: #9fd0ff; } .present-close-btn:hover { border-color: rgba(255, 120, 120, 0.4); background: rgba(120, 28, 34, 0.4); color: #ffd2d2; } .present-more-wrap { position: relative; } .present-menu { position: absolute; top: calc(100% + 8px); right: 0; z-index: 30; min-width: 196px; padding: 0.4rem; border-radius: 14px; border: 1px solid rgba(255,255,255,0.12); background: rgba(10, 18, 30, 0.96); box-shadow: 0 18px 40px rgba(0,0,0,0.45); backdrop-filter: blur(12px); } .present-menu.hidden { display: none !important; } .present-menu button { appearance: none; width: 100%; text-align: left; border: 0; background: transparent; color: #e8eef5; font: inherit; font-size: 0.82rem; font-weight: 600; padding: 0.6rem 0.75rem; border-radius: 10px; cursor: pointer; } .present-menu button:hover { background: rgba(0, 118, 206, 0.22); color: #fff; } .present-menu button:disabled { opacity: 0.35; cursor: not-allowed; } .present-menu button:disabled:hover { background: transparent; } .present-menu hr { border: 0; border-top: 1px solid rgba(255,255,255,0.08); margin: 0.3rem 0.35rem; } .present-deck-desc { margin: 0.45rem 0 0; padding: 0; font-size: 0.72rem; color: #8ea3b8; letter-spacing: 0.01em; } .present-nav { display: flex; align-items: center; gap: 0.85rem; padding: 0.75rem 1rem; border-top: 1px solid rgba(255,255,255,0.06); background: rgba(6, 12, 20, 0.65); } .present-nav-btn { appearance: none; min-width: 8rem; height: 44px; padding: 0 1.35rem; border-radius: 999px; border: 1px solid rgba(255,255,255,0.12); background: rgba(255,255,255,0.04); color: #eef4fa; font: inherit; font-size: 0.86rem; font-weight: 650; letter-spacing: -0.01em; cursor: pointer; transition: background 0.15s ease, border-color 0.15s ease, transform 0.12s ease; } .present-nav-btn:hover { background: rgba(255,255,255,0.08); border-color: rgba(255,255,255,0.22); } .present-nav-btn:disabled { opacity: 0.32; cursor: not-allowed; } .present-nav-next { border: 0; background: linear-gradient(180deg, #1a8de0, #0076ce); color: #fff; box-shadow: 0 10px 24px rgba(0, 118, 206, 0.28); } .present-nav-next:hover { background: linear-gradient(180deg, #2a98e8, #0082dc); border: 0; color: #fff; } .present-dots { gap: 0.4rem; } .present-dot { width: 8px; height: 8px; border-radius: 999px; border: 0; background: rgba(255,255,255,0.2); cursor: pointer; transition: transform 0.15s ease, background 0.15s ease, width 0.15s ease; } .present-dot.active { width: 22px; background: #0076ce; box-shadow: 0 0 0 3px rgba(0, 118, 206, 0.2); } /* Light */ .present-stage.theme-light .present-chrome, .present-stage.theme-light .present-nav { background: rgba(255,255,255,0.9); border-color: rgba(16,40,70,0.08); } .present-stage.theme-light .present-brand-text strong { color: #0b1d30; } .present-stage.theme-light .present-brand-text span, .present-stage.theme-light .present-deck-desc { color: #5a7188; } .present-stage.theme-light .present-deck-shell select { background: #fff; color: #0b1d30; border-color: rgba(0,80,140,0.16); } .present-stage.theme-light .present-deck-shell select:hover, .present-stage.theme-light .present-deck-shell select:focus { background: #f3f8fd; } .present-stage.theme-light .present-seg { background: #eef3f8; border-color: rgba(0,80,140,0.12); } .present-stage.theme-light .present-seg-btn { color: #3a5268; } .present-stage.theme-light .present-seg-btn:hover { color: #0b1d30; background: rgba(0,118,206,0.08); } .present-stage.theme-light .present-icon-btn { background: #fff; border-color: rgba(0,80,140,0.14); color: #24384c; } .present-stage.theme-light .present-menu { background: #fff; border-color: rgba(16,40,70,0.1); box-shadow: 0 18px 40px rgba(20,40,70,0.16); } .present-stage.theme-light .present-menu button { color: #122033; } .present-stage.theme-light .present-menu hr { border-color: rgba(16,40,70,0.08); } .present-stage.theme-light .present-nav-btn { background: #fff; color: #0b1d30; border-color: rgba(0,80,140,0.16); } .present-stage.theme-light .present-nav-next { background: linear-gradient(180deg, #1a8de0, #0076ce); color: #fff; border: 0; } .present-stage.theme-light .present-dot { background: rgba(0,0,0,0.16); } .present-stage.theme-light .present-dot.active { background: #0076ce; } @media (max-width: 980px) { .present-bar { grid-template-columns: 1fr; } .present-bar-right { justify-content: flex-start; } .present-seg-btn span { display: none; } .present-seg-btn { padding: 0 0.7rem; } } /* === PRESENT MAINUI BTNS === */ .present-bar-mainui { display: flex; align-items: center; justify-content: space-between; gap: 0.85rem; flex-wrap: wrap; } .present-chrome .top-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 0.35rem; justify-content: flex-end; flex: 1; min-width: 0; } .present-chrome .top-actions .btn { /* inherit exact main UI .btn look */ } .present-deck-inline { display: inline-flex; align-items: center; margin: 0; } .present-deck-select { appearance: none; height: auto; padding: 0.45rem 1.8rem 0.45rem 0.75rem; border: 1px solid var(--panel-border); border-radius: 6px; background: rgba(8, 22, 40, 0.8); color: var(--text); font: inherit; font-size: 0.8rem; font-weight: 500; cursor: pointer; outline: none; max-width: 200px; } .present-deck-select:hover { border-color: var(--dell-bright); color: #fff; } .present-deck-select option { color: #111; background: #fff; } .present-stage.theme-light .present-deck-select { background: #fff; color: var(--text); border-color: #b7c5d4; } .present-stage.theme-light .present-deck-select:hover { color: var(--dell); border-color: var(--dell); background: #f0f6fc; } .present-nav { display: flex; align-items: center; gap: 0.65rem; padding: 0.65rem 0.9rem; } .present-nav .btn { min-width: 6.5rem; } .present-deck-desc { margin: 0.35rem 0 0; font-size: 0.72rem; color: #8ea3b8; } .present-stage.theme-light .present-deck-desc { color: #5a7188; } /* Present chrome inherits page theme vars when light/dark on stage — force light stage to use light button treatment via html light rules when possible. For present-stage.theme-light, mirror html[data-theme=light] .btn rules locally. */ .present-stage.theme-light .btn { color: #122033; border-color: #b7c5d4; background: #fff; } .present-stage.theme-light .btn:hover { color: #0076ce; border-color: #0076ce; background: #f0f6fc; } .present-stage.theme-light .btn.primary { background: linear-gradient(135deg, #0076ce, #005a9e) !important; border-color: #0a8ad8 !important; color: #fff !important; } .present-stage.theme-light .btn.ghost { background: transparent; color: #122033; } /* === PRESENT BTN COLOR === */ .present-chrome .top-actions .btn { transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease; } .present-chrome .top-actions .btn.primary { background: linear-gradient(135deg, #1a9ae8, #0076ce); border-color: #4db8ff; color: #fff; box-shadow: 0 4px 14px rgba(0, 118, 206, 0.35); } .present-chrome .top-actions .btn.ghost:hover { border-color: #4db8ff; color: #9fd0ff; background: rgba(0, 118, 206, 0.18); } /* View */ #present-mode-mid.ghost { border-color: rgba(77, 184, 255, 0.35); color: #9fd0ff; } #present-mode-full.ghost { border-color: rgba(126, 240, 216, 0.35); color: #7ef0d8; } #present-mode-mid.primary { background: linear-gradient(135deg, #00a8e8, #0076ce); border-color: #4db8ff; } #present-mode-full.primary { background: linear-gradient(135deg, #2dd4bf, #0d9488); border-color: #5eead4; box-shadow: 0 4px 14px rgba(45, 212, 191, 0.3); } /* Theme */ #present-theme-light.ghost { border-color: rgba(255, 214, 102, 0.4); color: #ffe08a; } #present-theme-dark.ghost { border-color: rgba(148, 163, 184, 0.45); color: #cbd5e1; } #present-theme-light.primary { background: linear-gradient(135deg, #fbbf24, #d97706); border-color: #fcd34d; color: #1a1208; box-shadow: 0 4px 14px rgba(251, 191, 36, 0.35); } #present-theme-dark.primary { background: linear-gradient(135deg, #334155, #0f172a); border-color: #94a3b8; color: #f1f5f9; box-shadow: 0 4px 14px rgba(15, 23, 42, 0.45); } /* Tools */ #present-edit.ghost { border-color: rgba(56, 189, 248, 0.4); color: #7dd3fc; } #present-edit.primary { background: linear-gradient(135deg, #38bdf8, #0284c7); border-color: #7dd3fc; } #present-reset.ghost { border-color: rgba(251, 146, 60, 0.4); color: #fdba74; } #present-export.ghost, #present-import.ghost { border-color: rgba(0, 168, 232, 0.4); color: #67e8f9; } #present-add-media.ghost { border-color: rgba(52, 211, 153, 0.4); color: #6ee7b7; } #present-deck-new.ghost { border-color: rgba(74, 222, 128, 0.4); color: #86efac; } #present-deck-dup.ghost { border-color: rgba(125, 211, 252, 0.4); color: #bae6fd; } #present-deck-del.ghost { border-color: rgba(248, 113, 113, 0.35); color: #fca5a5; } /* Close — solid red */ #present-close.btn.danger, .present-chrome #present-close { background: linear-gradient(135deg, #ef4444, #b91c1c) !important; border-color: #f87171 !important; color: #fff !important; font-weight: 650; box-shadow: 0 4px 14px rgba(239, 68, 68, 0.35); } #present-close.btn.danger:hover, .present-chrome #present-close:hover { filter: brightness(1.1); color: #fff !important; background: linear-gradient(135deg, #f87171, #dc2626) !important; } .present-deck-select { border-color: rgba(77, 184, 255, 0.4) !important; color: #9fd0ff !important; background: rgba(0, 60, 110, 0.35) !important; } .present-deck-select:hover { border-color: #4db8ff !important; color: #fff !important; background: rgba(0, 118, 206, 0.28) !important; } .present-nav #present-prev.btn.ghost { border-color: rgba(77, 184, 255, 0.35); color: #9fd0ff; } .present-nav #present-prev.btn.ghost:hover { background: rgba(0, 118, 206, 0.2); color: #fff; } .present-nav #present-next.btn.primary { background: linear-gradient(135deg, #1a9ae8, #0076ce); border-color: #4db8ff; box-shadow: 0 6px 18px rgba(0, 118, 206, 0.35); } /* Light theme present — keep colorful but readable */ .present-stage.theme-light #present-mode-mid.ghost { color: #0062b0; border-color: #7eb8e8; } .present-stage.theme-light #present-mode-full.ghost { color: #0f766e; border-color: #5eead4; } .present-stage.theme-light #present-theme-light.ghost { color: #b45309; border-color: #fbbf24; } .present-stage.theme-light #present-theme-dark.ghost { color: #334155; border-color: #94a3b8; } .present-stage.theme-light #present-edit.ghost { color: #0369a1; border-color: #7dd3fc; } .present-stage.theme-light #present-reset.ghost { color: #c2410c; border-color: #fdba74; } .present-stage.theme-light #present-export.ghost, .present-stage.theme-light #present-import.ghost { color: #0e7490; border-color: #67e8f9; } .present-stage.theme-light #present-add-media.ghost { color: #047857; border-color: #6ee7b7; } .present-stage.theme-light #present-deck-new.ghost { color: #15803d; border-color: #86efac; } .present-stage.theme-light #present-deck-dup.ghost { color: #0369a1; border-color: #bae6fd; } .present-stage.theme-light #present-deck-del.ghost { color: #b91c1c; border-color: #fca5a5; } .present-stage.theme-light .present-deck-select { background: #e8f4fc !important; color: #0062b0 !important; border-color: #7eb8e8 !important; } .present-stage.theme-light #present-close { background: linear-gradient(135deg, #ef4444, #b91c1c) !important; color: #fff !important; }