/* DevDesk layer on top of web_template base.css. App classes use the dd- prefix; everything visual comes from the TDS tokens defined in base.css :root. */ :root { --dd-footer-height: 30px; --dd-sidebar-width: 320px; --dd-gap: 8px; } html, body.dd-app { height: 100%; overflow: hidden; } body.dd-app { min-height: 0; } /* The CRT scanline + vignette overlays sit at z 9999 over the whole page. Keep them off the terminal (readability) and give the chrome its own scanlines. */ body.dd-app::before, body.dd-app::after { display: none; } .dd-sidebar, .dd-footer { background-image: repeating-linear-gradient( 0deg, rgba(0, 0, 0, 0.07) 0, rgba(0, 0, 0, 0.07) 1px, transparent 1px, transparent 3px); } /* ---- header ---------------------------------------------------------------- */ .dd-header { padding: 0 var(--space-md); gap: var(--space-md); } .dd-header .lt-header-left { min-width: 0; gap: var(--space-lg); } .dd-session { display: flex; align-items: center; gap: var(--space-sm); min-width: 0; } .dd-pane-title { color: var(--text-secondary); font-size: 0.72rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 38vw; } .dd-sso { cursor: default; background: transparent; font-family: var(--font-mono); } .dd-sso[data-state="ok"] { color: var(--accent-green); background: var(--accent-green-dim); } .dd-sso[data-state="unknown"] { color: var(--text-muted); } .dd-sso[data-state="expired"] { color: var(--accent-red); background: var(--accent-red-dim); text-shadow: var(--glow-red); cursor: pointer; } .dd-tools .lt-btn[data-state="granted"] { color: var(--accent-green); border-color: var(--accent-green-border); } .dd-tools .lt-btn[data-state="denied"] { color: var(--accent-red); } #sidebar-toggle[aria-expanded="true"] { color: var(--accent-orange); border-color: var(--accent-orange-border); } /* ---- layout ---------------------------------------------------------------- */ .dd-main { position: fixed; top: var(--header-height); bottom: var(--dd-footer-height); left: 0; right: 0; display: flex; gap: var(--dd-gap); padding: var(--dd-gap); } .dd-terminal-frame { flex: 1 1 auto; min-width: 0; margin: 0; display: flex; background: var(--bg-terminal); padding: 6px 6px 10px 10px; } .dd-terminal { flex: 1 1 auto; min-width: 0; min-height: 0; } .dd-terminal .xterm { height: 100%; } .dd-terminal .xterm-viewport { background-color: var(--bg-terminal) !important; } .dd-sidebar { display: none; flex: 0 0 var(--dd-sidebar-width); overflow-y: auto; overflow-x: hidden; scrollbar-width: thin; scrollbar-color: var(--bg-tertiary) transparent; } body.dd-sidebar-open .dd-sidebar { display: block; } .dd-widget { margin-bottom: var(--dd-gap); } .dd-widget .lt-section-header { justify-content: flex-start; } .dd-soon { margin-left: auto; color: var(--text-muted); letter-spacing: 0.12em; } .dd-header-action { margin-left: auto; background: none; border: 0; color: var(--accent-cyan); font-size: 0.85rem; line-height: 1; padding: 0 2px; } .dd-header-action:hover { color: var(--accent-orange); text-shadow: var(--glow-orange); } .dd-muted { color: var(--text-muted); font-size: 0.68rem; } .dd-stub-note { margin-top: var(--space-sm); } /* ---- sessions panel ---------------------------------------------------------- */ .dd-session-list { display: flex; flex-direction: column; gap: 2px; margin-bottom: var(--space-sm); } .dd-session-item { display: flex; align-items: stretch; border: 1px solid transparent; } .dd-session-item.is-current { border-color: var(--accent-orange-border); background: var(--accent-orange-dim); } .dd-session-open { flex: 1 1 auto; min-width: 0; display: grid; grid-template-columns: auto 1fr; grid-template-rows: auto auto; column-gap: var(--space-sm); align-items: center; padding: 4px 6px; background: none; border: 0; color: var(--text-primary); text-align: left; } .dd-session-open:hover { background: var(--accent-cyan-dim); } .dd-session-open .lt-dot { grid-row: 1 / span 2; } .dd-session-name { font-size: 0.78rem; font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .dd-session-meta { font-size: 0.62rem; color: var(--text-muted); } .dd-session-item.is-recent .dd-session-name { color: var(--text-secondary); font-weight: 400; } .dd-session-item.is-dormant .dd-session-name { color: var(--text-secondary); } .dd-session-actions { display: flex; align-items: center; gap: 2px; padding-right: 2px; opacity: 0.55; transition: var(--transition-fast); } .dd-session-item:hover .dd-session-actions, .dd-session-item:focus-within .dd-session-actions, .dd-session-item.is-current .dd-session-actions { opacity: 1; } .dd-icon-btn { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; padding: 0; background: none; border: 1px solid transparent; color: var(--text-muted); font-size: 0.8rem; line-height: 1; text-decoration: none; } .dd-icon-btn:hover, .dd-icon-btn:focus-visible { color: var(--accent-cyan); border-color: var(--accent-cyan-border); text-shadow: var(--glow-cyan); text-decoration: none; } .dd-icon-btn.dd-danger:hover, .dd-icon-btn.dd-danger:focus-visible { color: var(--accent-red); border-color: rgba(255, 45, 85, 0.4); text-shadow: var(--glow-red); } .dd-empty { color: var(--text-muted); font-size: 0.72rem; padding: 4px 6px; } .dd-new-session { display: grid; grid-template-columns: 1fr auto; gap: var(--space-sm); margin-bottom: var(--space-sm); } .dd-new-session .lt-input { grid-column: 1 / -1; font-size: 0.74rem; } .dd-new-session .lt-select { min-width: 0; font-size: 0.72rem; } .dd-status.is-error { color: var(--accent-red); } .dd-widget-foot { display: flex; align-items: center; gap: var(--space-sm); } /* ---- stub widgets ------------------------------------------------------------ */ .dd-alert { display: flex; align-items: center; gap: var(--space-sm); font-size: 0.72rem; color: var(--text-secondary); } .dd-alert-text { flex: 1 1 auto; } .dd-context-grid { margin-top: var(--space-sm); } [data-state="stub"] .lt-section-body, #widget-context[data-state="empty"] .lt-kv-grid, #widget-repo[data-state="empty"] .lt-kv-grid { opacity: 0.6; } .lt-status a { color: inherit; text-shadow: none; } .dd-widget .lt-kv-val { overflow-wrap: anywhere; } /* ---- overlay ----------------------------------------------------------------- */ .dd-overlay { position: absolute; inset: 0; z-index: 5; display: flex; align-items: center; justify-content: center; background: rgba(1, 3, 4, 0.72); backdrop-filter: blur(2px); } .dd-overlay[hidden] { display: none; } .dd-overlay-card { width: min(480px, 92%); margin: 0; box-shadow: var(--box-glow-cyan); } .dd-overlay-text { margin-bottom: var(--space-md); color: var(--text-secondary); } .dd-overlay[data-tone="warn"] .lt-section-header { color: var(--accent-amber); text-shadow: none; } .dd-overlay[data-tone="danger"] .lt-section-header { color: var(--accent-red); text-shadow: var(--glow-red); } /* ---- footer ------------------------------------------------------------------ */ .dd-footer { position: fixed; left: 0; right: 0; bottom: 0; height: var(--dd-footer-height); margin: 0; padding: 0 var(--space-md); flex-wrap: nowrap; overflow: hidden; } .dd-footer .lt-footer-hints { flex-wrap: nowrap; overflow: hidden; } .dd-footer .lt-footer-key { margin-right: 4px; } /* ---- small screens ----------------------------------------------------------- */ @media (max-width: 1099px) { .dd-sidebar { position: absolute; top: var(--dd-gap); right: var(--dd-gap); bottom: var(--dd-gap); width: min(var(--dd-sidebar-width), calc(100vw - 2 * var(--dd-gap))); z-index: 20; background-color: var(--bg-secondary); box-shadow: -8px 0 32px rgba(0, 0, 0, 0.6); padding: var(--dd-gap); } .dd-pane-title { display: none; } } @media (max-width: 719px) { :root { --dd-gap: 4px; } .lt-brand-subtitle, #font-down, #font-up, #fullscreen-toggle, .dd-sso { display: none; } .dd-header .lt-header-left { gap: var(--space-sm); } .dd-footer .lt-footer-hints .lt-footer-hint:nth-child(n + 5), .dd-footer .lt-footer-sep:nth-child(n + 4) { display: none; } }