Dash
Items
Custom CSS
Save
Cancel
/* ============================================================ HEIMDALL — COMMAND CENTER THEME Drop in: storage/app/public/custom.css ============================================================ */ @import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@400;600;800;900&family=Rajdhani:wght@300;400;500;600;700&family=Share+Tech+Mono&display=swap'); /* ─── CSS VARIABLES ─────────────────────────────────────────── */ :root { --teal: #00f5c8; --teal-dim: #00c49e; --teal-glow: rgba(0, 245, 200, 0.18); --amber: #ffb800; --amber-dim: #cc9200; --amber-glow: rgba(255, 184, 0, 0.18); --red-alert: #ff3a5c; --bg-void: #030508; --bg-deep: #060c14; --bg-surface: #0a1520; --bg-elevated: #0f1e2d; --border: rgba(0, 245, 200, 0.12); --border-hot: rgba(0, 245, 200, 0.45); --text-primary: #e8f4f8; --text-secondary: #7aaabb; --text-dim: #3d6070; --font-display: 'Orbitron', monospace; --font-body: 'Rajdhani', sans-serif; --font-mono: 'Share Tech Mono', monospace; --radius: 4px; --radius-lg: 8px; } /* ─── RESET + BASE ───────────────────────────────────────────── */ *, *::before, *::after { box-sizing: border-box; } html { scroll-behavior: smooth; cursor: none; } body { font-family: var(--font-body); font-size: 15px; background: var(--bg-void); color: var(--text-primary); min-height: 100vh; overflow-x: hidden; letter-spacing: 0.02em; } /* ─── CUSTOM CURSOR ──────────────────────────────────────────── */ #cursor-dot { position: fixed; width: 6px; height: 6px; background: var(--teal); border-radius: 50%; pointer-events: none; z-index: 99999; transition: transform 0.1s ease; box-shadow: 0 0 10px var(--teal), 0 0 20px var(--teal); } #cursor-ring { position: fixed; width: 28px; height: 28px; border: 1px solid var(--teal); border-radius: 50%; pointer-events: none; z-index: 99998; transition: transform 0.18s ease, width 0.2s, height 0.2s, border-color 0.2s; opacity: 0.6; } body:hover #cursor-ring { opacity: 1; } /* ─── PARTICLE CANVAS ────────────────────────────────────────── */ #heimdall-canvas { position: fixed; inset: 0; z-index: 0; pointer-events: none; } /* ─── HEX GRID OVERLAY ───────────────────────────────────────── */ body::before { content: ''; position: fixed; inset: 0; z-index: 1; background-image: repeating-linear-gradient( 60deg, transparent, transparent 28px, rgba(0, 245, 200, 0.022) 28px, rgba(0, 245, 200, 0.022) 29px ), repeating-linear-gradient( -60deg, transparent, transparent 28px, rgba(0, 245, 200, 0.022) 28px, rgba(0, 245, 200, 0.022) 29px ), repeating-linear-gradient( 0deg, transparent, transparent 48px, rgba(0, 245, 200, 0.015) 48px, rgba(0, 245, 200, 0.015) 49px ); pointer-events: none; } /* ─── SCANLINES ──────────────────────────────────────────────── */ body::after { content: ''; position: fixed; inset: 0; z-index: 2; background: repeating-linear-gradient( to bottom, transparent, transparent 2px, rgba(0, 0, 0, 0.08) 2px, rgba(0, 0, 0, 0.08) 4px ); pointer-events: none; animation: scanPulse 8s ease-in-out infinite; } @keyframes scanPulse { 0%, 100% { opacity: 0.4; } 50% { opacity: 0.7; } } /* ─── MAIN WRAPPER ───────────────────────────────────────────── */ .wrapper, #wrapper, .container-fluid, main { position: relative; z-index: 10; } /* ─── HEADER / NAV ───────────────────────────────────────────── */ header, .navbar, nav.navbar { background: rgba(3, 5, 8, 0.92) !important; backdrop-filter: blur(24px) saturate(1.5); border-bottom: 1px solid var(--border-hot) !important; box-shadow: 0 1px 0 rgba(0, 245, 200, 0.08), 0 4px 40px rgba(0, 0, 0, 0.6); position: sticky; top: 0; z-index: 1000; } /* NAV brand / title */ .navbar-brand, .navbar-brand span, header h1, header .title { font-family: var(--font-display) !important; font-weight: 800 !important; font-size: 1.1rem !important; letter-spacing: 0.22em !important; text-transform: uppercase !important; color: var(--teal) !important; text-shadow: 0 0 12px var(--teal), 0 0 30px rgba(0, 245, 200, 0.4); animation: glitch 6s infinite; } @keyframes glitch { 0%, 94%, 100% { text-shadow: 0 0 12px var(--teal), 0 0 30px rgba(0,245,200,0.4); transform: none; } 95% { text-shadow: -2px 0 var(--amber), 2px 0 var(--red-alert); transform: skewX(-1deg); } 96% { text-shadow: 2px 0 var(--teal), -2px 0 var(--amber); transform: skewX(1deg); } 97% { text-shadow: 0 0 12px var(--teal); transform: none; } } /* NAV links */ .navbar a, nav a { font-family: var(--font-mono) !important; font-size: 0.75rem !important; letter-spacing: 0.12em !important; color: var(--text-secondary) !important; text-transform: uppercase; transition: color 0.2s, text-shadow 0.2s; } .navbar a:hover, nav a:hover { color: var(--teal) !important; text-shadow: 0 0 8px var(--teal); } /* ─── SEARCH BAR ─────────────────────────────────────────────── */ .search-wrapper, #search, input[type="search"], input[type="text"].search, .search-input { background: rgba(10, 21, 32, 0.8) !important; border: 1px solid var(--border) !important; border-radius: var(--radius) !important; color: var(--text-primary) !important; font-family: var(--font-mono) !important; font-size: 0.85rem !important; letter-spacing: 0.08em !important; padding: 10px 18px 10px 42px !important; outline: none !important; box-shadow: inset 0 0 0 1px transparent; transition: all 0.3s ease; } .search-wrapper:focus-within, input[type="search"]:focus, input[type="text"].search:focus { border-color: var(--teal) !important; box-shadow: 0 0 0 1px var(--teal), 0 0 24px var(--teal-glow), inset 0 0 12px rgba(0,245,200,0.04) !important; background: rgba(0, 245, 200, 0.03) !important; } input::placeholder { color: var(--text-dim) !important; } /* ═══════════════════════════════════════════════════════════════ HEIMDALL APP CARDS — real selectors from Heimdall's DOM ═══════════════════════════════════════════════════════════════ */ /* ─── Main grid ──────────────────────────────────────────────── */ #sortable { display: flex !important; flex-wrap: wrap !important; align-items: flex-start !important; gap: 18px !important; padding: 24px !important; } /* ─── Tag group container ────────────────────────────────────── */ .tags-container-parent { background: rgba(6, 12, 20, 0.7) !important; border: 1px solid var(--border) !important; border-radius: var(--radius-lg) !important; backdrop-filter: blur(16px) !important; box-shadow: 0 4px 24px rgba(0,0,0,0.4), inset 0 1px 0 rgba(0,245,200,0.04) !important; overflow: hidden; position: relative; } /* teal top bar on tag group */ .tags-container-parent::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, transparent, var(--teal), transparent); opacity: 0.5; } /* ─── Tag group title ────────────────────────────────────────── */ .tags-title { font-family: var(--font-display) !important; font-size: 0.7rem !important; font-weight: 700 !important; letter-spacing: 0.28em !important; text-transform: uppercase !important; color: var(--teal) !important; text-shadow: 0 0 10px rgba(0,245,200,0.35) !important; padding: 14px 18px 10px !important; margin: 0 !important; border-bottom: 1px solid var(--border) !important; display: flex !important; align-items: center !important; gap: 10px; } .tags-title::before { content: '//'; color: rgba(0,245,200,0.35); font-size: 0.65rem; letter-spacing: 0.1em; } /* ─── Tag grid inside group ──────────────────────────────────── */ .tags-container { display: flex !important; flex-wrap: wrap !important; gap: 0 !important; padding: 12px !important; } /* ─── Individual app card (.item) ───────────────────────────── */ .item { position: relative !important; display: flex !important; align-items: center !important; width: 280px !important; height: 88px !important; padding: 0 70px 0 0 !important; margin: 6px !important; border-radius: var(--radius-lg) !important; background: var(--bg-surface) !important; border: 1px solid var(--border) !important; box-shadow: 0 2px 8px rgba(0,0,0,0.4), inset 0 1px 0 rgba(255,255,255,0.02) !important; overflow: hidden !important; transition: transform 0.28s cubic-bezier(0.23,1,0.32,1), box-shadow 0.28s cubic-bezier(0.23,1,0.32,1), border-color 0.28s ease, background 0.28s ease !important; cursor: pointer; backdrop-filter: blur(8px) !important; } /* Top shimmer bar */ .item::before { content: '' !important; position: absolute !important; top: 0; left: 0; right: 0 !important; height: 1px !important; background: linear-gradient(90deg, transparent, var(--teal), transparent) !important; opacity: 0 !important; transition: opacity 0.3s ease !important; z-index: 2 !important; } /* Right-side color swatch — override with teal gradient panel */ .item:after { content: '' !important; position: absolute !important; top: 0 !important; right: 0 !important; width: 64px !important; height: 100% !important; background: linear-gradient( 135deg, rgba(0,245,200,0.08) 0%, rgba(0,245,200,0.14) 100% ) !important; border-left: 1px solid rgba(0,245,200,0.1) !important; opacity: 1 !important; transition: background 0.28s ease !important; z-index: 0 !important; } .item:hover { transform: translateY(-4px) scale(1.02) !important; background: var(--bg-elevated) !important; border-color: var(--border-hot) !important; box-shadow: 0 0 0 1px rgba(0,245,200,0.2), 0 12px 40px rgba(0,0,0,0.6), 0 0 28px var(--teal-glow) !important; } .item:hover::before { opacity: 1 !important; } .item:hover:after { background: linear-gradient( 135deg, rgba(0,245,200,0.14) 0%, rgba(0,245,200,0.22) 100% ) !important; } /* ─── App icon wrapper ───────────────────────────────────────── */ .app-icon { position: relative !important; z-index: 1 !important; flex-shrink: 0 !important; width: 52px !important; height: 52px !important; margin-left: 14px !important; margin-right: 0 !important; filter: saturate(0.9) brightness(1.0) drop-shadow(0 0 6px rgba(0,245,200,0.15)) !important; transition: filter 0.3s ease, transform 0.3s cubic-bezier(0.23,1,0.32,1) !important; border-radius: var(--radius) !important; } .item:hover .app-icon { filter: saturate(1.1) brightness(1.1) drop-shadow(0 0 12px rgba(0,245,200,0.35)) !important; transform: scale(1.1) !important; } /* Decorative FA icon on right panel */ .item .svg-inline--fa { position: absolute !important; right: 0 !important; top: 50% !important; transform: translateY(-50%) !important; width: 52px !important; height: 52px !important; color: rgba(0,245,200,0.22) !important; z-index: 1 !important; transition: color 0.3s ease !important; } .item:hover .svg-inline--fa { color: rgba(0,245,200,0.38) !important; } /* ─── App text details ───────────────────────────────────────── */ .details { position: relative !important; z-index: 1 !important; padding: 0 10px 0 14px !important; flex: 1 !important; min-width: 0 !important; display: flex !important; flex-direction: column !important; justify-content: center !important; gap: 4px !important; } .details * { color: var(--text-primary) !important; } .details > .title { font-family: var(--font-display) !important; font-size: 0.72rem !important; font-weight: 700 !important; letter-spacing: 0.16em !important; text-transform: uppercase !important; color: var(--text-primary) !important; text-shadow: none !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; transition: color 0.2s ease, text-shadow 0.2s ease !important; margin: 0 !important; line-height: 1.2 !important; } .item:hover .details > .title { color: var(--teal) !important; text-shadow: 0 0 10px rgba(0,245,200,0.45) !important; } /* App description / URL subtitle */ .details .description, .details .url, .details p { font-family: var(--font-mono) !important; font-size: 0.6rem !important; letter-spacing: 0.06em !important; color: var(--text-dim) !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; margin: 0 !important; } /* ─── Live stats (enhanced apps) ────────────────────────────── */ .livestats-container { margin-top: 3px !important; } .livestats-container .livestats { display: flex !important; flex-wrap: wrap !important; gap: 4px 10px !important; list-style: none !important; padding: 0 !important; margin: 0 !important; } .livestats-container .livestats li { font-family: var(--font-mono) !important; font-size: 0.58rem !important; letter-spacing: 0.06em !important; color: var(--text-dim) !important; padding: 0 !important; } .livestats-container .livestats strong { color: var(--amber) !important; font-weight: 500 !important; } .livestats-container .livestats .title { font-family: var(--font-mono) !important; font-size: 0.55rem !important; letter-spacing: 0.1em !important; text-transform: uppercase !important; color: var(--text-dim) !important; margin-bottom: 1px !important; } /* ─── Config / settings sidebar buttons ─────────────────────── */ #config-buttons { position: fixed !important; right: 0 !important; bottom: 50% !important; transform: translateY(50%) !important; display: flex !important; flex-direction: column !important; background: rgba(6, 12, 20, 0.92) !important; border: 1px solid var(--border) !important; border-right: none !important; border-radius: 8px 0 0 8px !important; backdrop-filter: blur(20px) !important; box-shadow: -4px 0 24px rgba(0,0,0,0.4), inset 1px 0 0 rgba(0,245,200,0.04) !important; z-index: 500 !important; overflow: hidden !important; } #config-buttons a { display: flex !important; align-items: center !important; justify-content: center !important; width: 46px !important; height: 46px !important; background: transparent !important; border-bottom: 1px solid var(--border) !important; transition: background 0.2s ease !important; } #config-buttons a:last-child { border-bottom: none !important; } #config-buttons a:hover { background: rgba(0,245,200,0.08) !important; } #config-buttons a svg { color: rgba(0,245,200,0.45) !important; width: 16px !important; height: 16px !important; transition: color 0.2s ease, filter 0.2s ease !important; } #config-buttons a:hover svg { color: var(--teal) !important; filter: drop-shadow(0 0 6px rgba(0,245,200,0.5)) !important; transform: none !important; } /* ─── Search bar ─────────────────────────────────────────────── */ #search-wrapper, .search-container, #search { background: rgba(6,12,20,0.85) !important; border: 1px solid var(--border) !important; border-radius: var(--radius) !important; backdrop-filter: blur(16px) !important; transition: all 0.3s ease !important; } #search-wrapper:focus-within, .search-container:focus-within { border-color: var(--teal) !important; box-shadow: 0 0 0 1px var(--teal), 0 0 20px var(--teal-glow) !important; } /* ─── Item container tooltip ─────────────────────────────────── */ .item-container .tooltip { font-family: var(--font-mono) !important; font-size: 0.65rem !important; letter-spacing: 0.1em !important; background: var(--bg-elevated) !important; border: 1px solid var(--border-hot) !important; color: var(--text-primary) !important; border-radius: var(--radius) !important; box-shadow: 0 4px 20px rgba(0,0,0,0.5), 0 0 12px var(--teal-glow) !important; } /* ─── Card stagger entry animation ──────────────────────────── */ .item { animation: cardEntry 0.45s cubic-bezier(0.23,1,0.32,1) both; } .item:nth-child(1) { animation-delay: 0.04s; } .item:nth-child(2) { animation-delay: 0.08s; } .item:nth-child(3) { animation-delay: 0.12s; } .item:nth-child(4) { animation-delay: 0.16s; } .item:nth-child(5) { animation-delay: 0.20s; } .item:nth-child(6) { animation-delay: 0.24s; } .item:nth-child(7) { animation-delay: 0.28s; } .item:nth-child(8) { animation-delay: 0.32s; } .item:nth-child(n+9){ animation-delay: 0.36s; } @keyframes cardEntry { 0% { opacity: 0; transform: translateY(14px) scale(0.97); } 100% { opacity: 1; transform: translateY(0) scale(1); } } /* ─── .black text override for Heimdall color classes ───────── */ .black { color: var(--text-primary) !important; } .white { color: var(--text-primary) !important; } /* ─── TAGS / STATUS PILLS ────────────────────────────────────── */ .tag, .badge, .status-badge, .label { font-family: var(--font-mono) !important; font-size: 0.62rem !important; letter-spacing: 0.14em !important; text-transform: uppercase !important; border-radius: 2px !important; padding: 2px 8px !important; background: rgba(0, 245, 200, 0.08) !important; border: 1px solid rgba(0, 245, 200, 0.2) !important; color: var(--teal) !important; } /* ─── BUTTONS ────────────────────────────────────────────────── */ .btn, button:not([class*="navbar"]) { font-family: var(--font-display) !important; font-size: 0.7rem !important; font-weight: 600 !important; letter-spacing: 0.2em !important; text-transform: uppercase !important; border-radius: var(--radius) !important; border: 1px solid var(--border) !important; background: rgba(0,245,200,0.06) !important; color: var(--teal) !important; padding: 8px 20px !important; cursor: none; transition: all 0.2s ease !important; position: relative; overflow: hidden; } .btn::before, button::before { content: ''; position: absolute; inset: 0; background: linear-gradient(90deg, transparent, rgba(0,245,200,0.1), transparent); transform: translateX(-100%); transition: transform 0.4s ease; } .btn:hover, button:hover { background: rgba(0,245,200,0.12) !important; border-color: var(--teal) !important; box-shadow: 0 0 16px var(--teal-glow) !important; } .btn:hover::before, button:hover::before { transform: translateX(100%); } .btn-primary { background: linear-gradient(135deg, rgba(0,245,200,0.15), rgba(0,196,158,0.08)) !important; border-color: var(--teal) !important; box-shadow: 0 0 10px var(--teal-glow) !important; } /* ─── SIDEBAR ────────────────────────────────────────────────── */ .sidebar, aside, #sidebar { background: rgba(3, 5, 8, 0.95) !important; border-right: 1px solid var(--border) !important; backdrop-filter: blur(20px); } .sidebar a, aside a { font-family: var(--font-body) !important; font-weight: 500; letter-spacing: 0.06em; color: var(--text-secondary) !important; padding: 9px 16px !important; border-left: 2px solid transparent !important; transition: all 0.2s ease !important; display: block; font-size: 0.88rem; } .sidebar a:hover, aside a:hover, .sidebar a.active, aside a.active { color: var(--teal) !important; border-left-color: var(--teal) !important; background: rgba(0,245,200,0.05) !important; text-shadow: 0 0 8px rgba(0,245,200,0.3); padding-left: 22px !important; } /* ─── PAGE TITLE / SECTION HEADERS ──────────────────────────── */ h1, h2, h3, h4, h5, h6, .page-title, .section-title { font-family: var(--font-display) !important; color: var(--text-primary) !important; letter-spacing: 0.12em !important; text-transform: uppercase !important; } h1, .page-title { font-size: 1.6rem !important; font-weight: 900 !important; color: var(--teal) !important; text-shadow: 0 0 20px rgba(0,245,200,0.3); } h2 { font-size: 1.1rem !important; font-weight: 600 !important; color: var(--amber) !important; text-shadow: 0 0 12px rgba(255,184,0,0.25); } h3 { font-size: 0.9rem !important; color: var(--text-secondary) !important; } /* ─── MODALS / DIALOGS ───────────────────────────────────────── */ .modal-content, .dialog, [role="dialog"] { background: var(--bg-deep) !important; border: 1px solid var(--border-hot) !important; border-radius: var(--radius-lg) !important; box-shadow: 0 0 0 1px rgba(0,245,200,0.1), 0 24px 80px rgba(0,0,0,0.9), 0 0 60px var(--teal-glow) !important; color: var(--text-primary) !important; } .modal-header, .dialog-header { border-bottom: 1px solid var(--border) !important; background: rgba(0,245,200,0.03) !important; } .modal-title { font-family: var(--font-display) !important; font-size: 0.85rem !important; letter-spacing: 0.2em !important; text-transform: uppercase !important; color: var(--teal) !important; } .modal-footer, .dialog-footer { border-top: 1px solid var(--border) !important; background: rgba(0,0,0,0.2) !important; } /* ─── FORM ELEMENTS ──────────────────────────────────────────── */ input:not([type="submit"]):not([type="button"]):not([type="checkbox"]):not([type="radio"]), textarea, select { background: rgba(6, 12, 20, 0.8) !important; border: 1px solid var(--border) !important; border-radius: var(--radius) !important; color: var(--text-primary) !important; font-family: var(--font-body) !important; font-size: 0.9rem !important; padding: 9px 14px !important; transition: all 0.25s ease !important; outline: none !important; } input:focus, textarea:focus, select:focus { border-color: var(--teal) !important; box-shadow: 0 0 0 2px var(--teal-glow), 0 0 14px var(--teal-glow) !important; } label { font-family: var(--font-mono) !important; font-size: 0.72rem !important; letter-spacing: 0.14em !important; text-transform: uppercase !important; color: var(--text-secondary) !important; margin-bottom: 4px !important; display: block; } /* ─── TABLES ─────────────────────────────────────────────────── */ table { border-collapse: collapse; width: 100%; } thead th { font-family: var(--font-mono) !important; font-size: 0.68rem !important; letter-spacing: 0.18em !important; text-transform: uppercase !important; color: var(--teal) !important; border-bottom: 1px solid var(--border-hot) !important; padding: 10px 14px !important; background: rgba(0,245,200,0.04) !important; } tbody tr { border-bottom: 1px solid rgba(0,245,200,0.06) !important; transition: background 0.15s ease !important; } tbody tr:hover { background: rgba(0,245,200,0.04) !important; } tbody td { padding: 9px 14px !important; color: var(--text-secondary) !important; font-family: var(--font-body) !important; font-size: 0.9rem; } /* ─── SCROLLBAR ──────────────────────────────────────────────── */ ::-webkit-scrollbar { width: 4px; height: 4px; } ::-webkit-scrollbar-track { background: var(--bg-void); } ::-webkit-scrollbar-thumb { background: rgba(0,245,200,0.3); border-radius: 2px; } ::-webkit-scrollbar-thumb:hover { background: var(--teal); } /* ─── NOTIFICATIONS / ALERTS ─────────────────────────────────── */ .alert, .notification, .toast { background: var(--bg-elevated) !important; border-radius: var(--radius) !important; border-left: 3px solid var(--teal) !important; font-family: var(--font-body) !important; color: var(--text-primary) !important; box-shadow: 0 4px 20px rgba(0,0,0,0.5), 4px 0 0 var(--teal-glow) !important; } .alert-warning { border-left-color: var(--amber) !important; } .alert-danger { border-left-color: var(--red-alert) !important; } .alert-success { border-left-color: var(--teal) !important; } /* ─── LINKS ──────────────────────────────────────────────────── */ a { color: var(--teal-dim) !important; text-decoration: none !important; transition: color 0.2s ease, text-shadow 0.2s ease !important; } a:hover { color: var(--teal) !important; text-shadow: 0 0 8px rgba(0,245,200,0.4); } /* ─── SECTION DIVIDERS ───────────────────────────────────────── */ hr { border: none !important; height: 1px !important; background: linear-gradient(90deg, transparent, var(--teal-dim), transparent) !important; opacity: 0.3 !important; margin: 28px 0 !important; } /* ─── LOADING / SPINNER ──────────────────────────────────────── */ .loading, .spinner, [class*="loader"] { border-color: rgba(0,245,200,0.15) !important; border-top-color: var(--teal) !important; filter: drop-shadow(0 0 6px var(--teal)); } /* ─── STATUS INDICATORS ──────────────────────────────────────── */ .status-online, .online, [class*="status-up"] { color: var(--teal) !important; text-shadow: 0 0 6px var(--teal); } .status-offline, .offline, [class*="status-down"] { color: var(--red-alert) !important; text-shadow: 0 0 6px var(--red-alert); } /* ─── CARD GRID STAGGER ANIMATION ────────────────────────────── */ .app-card, .card, .application-card { animation: cardEntry 0.5s cubic-bezier(0.23, 1, 0.32, 1) both; } .app-card:nth-child(1), .card:nth-child(1) { animation-delay: 0.04s; } .app-card:nth-child(2), .card:nth-child(2) { animation-delay: 0.08s; } .app-card:nth-child(3), .card:nth-child(3) { animation-delay: 0.12s; } .app-card:nth-child(4), .card:nth-child(4) { animation-delay: 0.16s; } .app-card:nth-child(5), .card:nth-child(5) { animation-delay: 0.20s; } .app-card:nth-child(6), .card:nth-child(6) { animation-delay: 0.24s; } .app-card:nth-child(7), .card:nth-child(7) { animation-delay: 0.28s; } .app-card:nth-child(8), .card:nth-child(8) { animation-delay: 0.32s; } .app-card:nth-child(n+9), .card:nth-child(n+9) { animation-delay: 0.36s; } @keyframes cardEntry { 0% { opacity: 0; transform: translateY(18px) scale(0.96); } 100% { opacity: 1; transform: translateY(0) scale(1); } } /* ─── HUD CORNER BRACKETS ────────────────────────────────────── */ .app-card, .card, .application-card { --b: 12px; } .app-card .corner-bracket, .card .corner-bracket { position: absolute; width: var(--b); height: var(--b); border-color: var(--teal); border-style: solid; opacity: 0; transition: opacity 0.3s ease; pointer-events: none; } .app-card:hover .corner-bracket, .card:hover .corner-bracket { opacity: 1; } /* ─── HUD STATUS BAR — compact single row ────────────────────── */ .heimdall-hud-bar { display: flex; align-items: center; gap: 0; padding: 0 20px; height: 36px; background: rgba(3, 8, 14, 0.95); border-bottom: 1px solid var(--border-hot); box-shadow: 0 2px 16px rgba(0,0,0,0.5); position: relative; z-index: 999; overflow: hidden; } /* Left: uptime block */ .hud-left { display: flex; align-items: center; gap: 10px; flex-shrink: 0; } .hud-uptime-label { font-family: var(--font-mono); font-size: 0.58rem; letter-spacing: 0.18em; color: var(--text-dim); text-transform: uppercase; } .hud-uptime-value { font-family: var(--font-display); font-size: 0.82rem; font-weight: 700; color: var(--teal); letter-spacing: 0.06em; line-height: 1; text-shadow: 0 0 10px rgba(0,245,200,0.4); } .hud-session-row { display: flex; align-items: center; gap: 8px; padding-left: 12px; border-left: 1px solid var(--border); } .hud-session-label { font-family: var(--font-mono); font-size: 0.58rem; letter-spacing: 0.12em; color: var(--text-dim); text-transform: uppercase; } .hud-session-id { font-family: var(--font-mono); font-size: 0.65rem; color: rgba(0,245,200,0.55); letter-spacing: 0.08em; } .hud-ping-dot { width: 5px; height: 5px; background: var(--teal); border-radius: 50%; animation: pingPulse 1.4s ease-in-out infinite; box-shadow: 0 0 5px var(--teal); flex-shrink: 0; } @keyframes pingPulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.3; transform: scale(0.55); } } /* Center: clock — takes remaining space, centered */ .hud-center { flex: 1; display: flex; align-items: center; justify-content: center; gap: 16px; } .hud-clock { font-family: var(--font-display); font-size: 1.05rem; font-weight: 900; letter-spacing: 0.1em; color: var(--teal); line-height: 1; text-shadow: 0 0 12px rgba(0,245,200,0.45); } .hud-date { font-family: var(--font-mono); font-size: 0.62rem; letter-spacing: 0.16em; color: var(--text-secondary); text-transform: uppercase; } .hud-sys-tag { font-family: var(--font-mono); font-size: 0.55rem; letter-spacing: 0.2em; color: rgba(0,245,200,0.28); text-transform: uppercase; } /* Right: stats + terminal button */ .hud-right { display: flex; align-items: center; gap: 16px; flex-shrink: 0; } .hud-stat-row { display: flex; align-items: center; gap: 6px; } .hud-stat-label { font-family: var(--font-mono); font-size: 0.58rem; letter-spacing: 0.12em; color: var(--text-dim); text-transform: uppercase; } .hud-stat-value { font-family: var(--font-display); font-size: 0.75rem; font-weight: 600; letter-spacing: 0.06em; color: var(--teal); } .hud-stat-value.amber { color: var(--amber); } .hud-terminal-btn { font-family: var(--font-display); font-size: 0.55rem; letter-spacing: 0.18em; text-transform: uppercase; padding: 3px 12px; border: 1px solid rgba(0,245,200,0.3); border-radius: 2px; background: rgba(0,245,200,0.05); color: var(--teal); cursor: none; transition: all 0.2s ease; white-space: nowrap; } .hud-terminal-btn:hover { background: rgba(0,245,200,0.12); border-color: var(--teal); box-shadow: 0 0 8px rgba(0,245,200,0.15); } /* ─── FOOTER ─────────────────────────────────────────────────── */ footer { background: transparent !important; border-top: 1px solid var(--border) !important; font-family: var(--font-mono) !important; font-size: 0.65rem !important; letter-spacing: 0.14em !important; color: var(--text-dim) !important; text-transform: uppercase; padding: 16px 24px !important; } /* ─── MOBILE ADAPTIVE ────────────────────────────────────────── */ @media (max-width: 768px) { :root { font-size: 13px; } body::before { display: none; } .navbar-brand { font-size: 0.85rem !important; } } /* ─── SPECIAL: AMBER ACCENT FOR PINNED ITEMS ─────────────────── */ .app-card.pinned, .card.pinned, .application-card.pinned { border-color: rgba(255, 184, 0, 0.22) !important; } .app-card.pinned::before, .card.pinned::before { background: linear-gradient(90deg, transparent, var(--amber), transparent) !important; opacity: 1; } .app-card.pinned:hover { box-shadow: 0 0 0 1px rgba(255,184,0,0.3), 0 12px 40px rgba(0,0,0,0.7), 0 0 30px var(--amber-glow) !important; } /* ─── SELECTION ──────────────────────────────────────────────── */ ::selection { background: rgba(0,245,200,0.2); color: var(--teal); } /* ═══════════════════════════════════════════════════════════════ WAWTOR TERMINAL WIDGET ═══════════════════════════════════════════════════════════════ */ /* ─── Floating window ───────────────────────────────────────────── */ #wt-window { position: fixed; bottom: 28px; right: 28px; width: 820px; height: 480px; min-width: 420px; min-height: 240px; display: flex; flex-direction: column; background: #0b0d0f; border: 1px solid rgba(0,245,200,0.35); border-radius: 8px; box-shadow: 0 0 0 1px rgba(0,245,200,0.1), 0 24px 80px rgba(0,0,0,0.9), 0 0 40px rgba(0,245,200,0.08); z-index: 8000; overflow: hidden; resize: both; font-family: 'Share Tech Mono', monospace; transition: box-shadow 0.2s ease; } #wt-window.minimized { height: 36px !important; resize: none; } #wt-window.maximized { inset: 0 !important; width: 100vw !important; height: 100vh !important; border-radius: 0; resize: none; } #wt-window.hidden { display: none !important; } /* ─── Title bar ─────────────────────────────────────────────────── */ #wt-titlebar { flex-shrink: 0; display: flex; align-items: center; gap: 0; height: 36px; background: #141820; border-bottom: 1px solid rgba(0,245,200,0.15); user-select: none; cursor: move; padding: 0 10px; } .wt-traffic { display: flex; align-items: center; gap: 6px; margin-right: 12px; } .wt-dot { width: 11px; height: 11px; border-radius: 50%; cursor: none; transition: filter 0.15s ease; } .wt-dot:hover { filter: brightness(1.4); } .wt-dot.close { background: #ff5f57; } .wt-dot.min { background: #ffbd2e; } .wt-dot.max { background: #28c840; } .wt-title { font-family: 'Share Tech Mono', monospace; font-size: 0.72rem; letter-spacing: 0.14em; color: rgba(0,245,200,0.6); text-transform: uppercase; flex: 1; } #wt-conn-status { font-family: 'Share Tech Mono', monospace; font-size: 0.62rem; letter-spacing: 0.1em; padding: 2px 10px; border-radius: 2px; margin-right: 8px; } #wt-conn-status.connected { color: #00f5c8; background: rgba(0,245,200,0.08); border: 1px solid rgba(0,245,200,0.25); } #wt-conn-status.disconnected { color: #ff3a5c; background: rgba(255,58,92,0.08); border: 1px solid rgba(255,58,92,0.25); } #wt-conn-status.connecting { color: #ffb800; background: rgba(255,184,0,0.08); border: 1px solid rgba(255,184,0,0.25); } .wt-btn { font-family: 'Share Tech Mono', monospace; font-size: 0.62rem; letter-spacing: 0.14em; text-transform: uppercase; padding: 3px 12px; border-radius: 2px; border: 1px solid rgba(0,245,200,0.2); background: rgba(0,245,200,0.04); color: rgba(0,245,200,0.7); cursor: none; margin-left: 6px; transition: all 0.15s ease; white-space: nowrap; } .wt-btn:hover { background: rgba(0,245,200,0.12); border-color: rgba(0,245,200,0.5); color: #00f5c8; } .wt-btn.active { background: rgba(0,245,200,0.15); border-color: #00f5c8; color: #00f5c8; box-shadow: 0 0 8px rgba(0,245,200,0.2); } /* ─── Body (terminal + macro panel) ────────────────────────────── */ #wt-body { flex: 1; display: flex; overflow: hidden; min-height: 0; } /* ─── xterm container ───────────────────────────────────────────── */ #wt-xterm { flex: 1; min-width: 0; padding: 6px 4px; background: #0b0d0f; /* CRITICAL: xterm must receive pointer events for focus/selection */ pointer-events: auto !important; cursor: text !important; } #wt-xterm * { /* Override the global cursor:none from custom cursor module */ pointer-events: auto !important; } #wt-xterm .xterm { height: 100%; cursor: text !important; } #wt-xterm .xterm-screen { cursor: text !important; } #wt-xterm .xterm canvas { cursor: text !important; pointer-events: auto !important; } #wt-xterm .xterm-viewport { scrollbar-width: thin; scrollbar-color: rgba(0,245,200,0.25) transparent; } /* ─── Connect screen (shown when no WS) ────────────────────────── */ #wt-connect-screen { display: none; flex: 1; flex-direction: column; justify-content: center; align-items: center; gap: 18px; padding: 32px; background: #0b0d0f; } #wt-connect-screen.visible { display: flex; } .wt-connect-title { font-family: 'Orbitron', monospace; font-size: 0.8rem; letter-spacing: 0.22em; text-transform: uppercase; color: #00f5c8; text-shadow: 0 0 12px rgba(0,245,200,0.4); } .wt-connect-desc { font-family: 'Share Tech Mono', monospace; font-size: 0.72rem; letter-spacing: 0.08em; color: #7aaabb; text-align: center; max-width: 420px; line-height: 1.8; } .wt-connect-desc code { background: rgba(0,245,200,0.08); border: 1px solid rgba(0,245,200,0.2); border-radius: 3px; padding: 2px 8px; color: #00f5c8; font-size: 0.68rem; } .wt-connect-row { display: flex; gap: 8px; width: 100%; max-width: 440px; } .wt-connect-row input { flex: 1; background: rgba(10,21,32,0.9) !important; border: 1px solid rgba(0,245,200,0.2) !important; border-radius: 3px !important; color: #e8f4f8 !important; font-family: 'Share Tech Mono', monospace !important; font-size: 0.78rem !important; padding: 8px 14px !important; } .wt-connect-row input:focus { border-color: #00f5c8 !important; box-shadow: 0 0 0 1px rgba(0,245,200,0.3) !important; outline: none !important; } .wt-connect-btn { padding: 8px 20px; font-family: 'Orbitron', monospace; font-size: 0.62rem; letter-spacing: 0.18em; text-transform: uppercase; border: 1px solid rgba(0,245,200,0.4); border-radius: 3px; background: rgba(0,245,200,0.08); color: #00f5c8; cursor: none; transition: all 0.2s ease; white-space: nowrap; } .wt-connect-btn:hover { background: rgba(0,245,200,0.16); box-shadow: 0 0 12px rgba(0,245,200,0.2); } /* ─── Macro panel ───────────────────────────────────────────────── */ #wt-macro-panel { width: 0; overflow: hidden; background: #0e1318; border-left: 0px solid rgba(0,245,200,0.15); display: flex; flex-direction: column; transition: width 0.28s cubic-bezier(0.23,1,0.32,1), border-width 0.28s ease; flex-shrink: 0; } #wt-macro-panel.open { width: 260px; border-left-width: 1px; } .wt-macro-header { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; border-bottom: 1px solid rgba(0,245,200,0.12); flex-shrink: 0; } .wt-macro-title { font-family: 'Orbitron', monospace; font-size: 0.62rem; letter-spacing: 0.2em; text-transform: uppercase; color: #00f5c8; white-space: nowrap; } .wt-macro-edit-btn { font-family: 'Share Tech Mono', monospace; font-size: 0.6rem; letter-spacing: 0.12em; text-transform: uppercase; padding: 2px 9px; border: 1px solid rgba(0,245,200,0.2); border-radius: 2px; background: transparent; color: rgba(0,245,200,0.5); cursor: none; transition: all 0.15s ease; white-space: nowrap; } .wt-macro-edit-btn:hover, .wt-macro-edit-btn.active { background: rgba(0,245,200,0.1); border-color: rgba(0,245,200,0.5); color: #00f5c8; } .wt-macro-list { flex: 1; overflow-y: auto; padding: 8px 0; scrollbar-width: thin; scrollbar-color: rgba(0,245,200,0.2) transparent; } /* Macro item — display mode */ .wt-macro-item { position: relative; display: flex; align-items: center; gap: 0; margin: 2px 8px; border-radius: 4px; border: 1px solid transparent; overflow: hidden; transition: all 0.15s ease; min-height: 46px; } .wt-macro-item:hover { background: rgba(0,245,200,0.04); border-color: rgba(0,245,200,0.12); } .wt-macro-run { flex-shrink: 0; width: 34px; height: 100%; min-height: 46px; display: flex; align-items: center; justify-content: center; background: rgba(0,245,200,0.06); border-right: 1px solid rgba(0,245,200,0.1); cursor: none; transition: background 0.15s ease; font-size: 0.75rem; color: #00f5c8; } .wt-macro-run:hover { background: rgba(0,245,200,0.18); color: #fff; } .wt-macro-run.running { color: #ffb800; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } .wt-macro-info { flex: 1; padding: 6px 10px; min-width: 0; } .wt-macro-name { font-family: 'Orbitron', monospace; font-size: 0.62rem; letter-spacing: 0.1em; text-transform: uppercase; color: #e8f4f8; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .wt-macro-cmd { font-family: 'Share Tech Mono', monospace; font-size: 0.58rem; color: rgba(0,245,200,0.45); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-top: 2px; } .wt-macro-del { flex-shrink: 0; width: 28px; height: 100%; min-height: 46px; display: none; align-items: center; justify-content: center; background: transparent; border-left: 1px solid rgba(255,58,92,0.1); cursor: none; color: rgba(255,58,92,0.4); font-size: 0.72rem; transition: all 0.15s ease; } .wt-macro-del:hover { background: rgba(255,58,92,0.1); color: #ff3a5c; } .edit-mode .wt-macro-del { display: flex; } /* Edit inputs inside macro items */ .wt-macro-item.editing { flex-direction: column; align-items: stretch; padding: 8px 10px; background: rgba(0,245,200,0.04); border-color: rgba(0,245,200,0.2); gap: 5px; } .wt-macro-input { width: 100%; background: rgba(6,12,20,0.8) !important; border: 1px solid rgba(0,245,200,0.2) !important; border-radius: 2px !important; color: #e8f4f8 !important; font-family: 'Share Tech Mono', monospace !important; font-size: 0.7rem !important; padding: 4px 8px !important; outline: none !important; } .wt-macro-input:focus { border-color: rgba(0,245,200,0.5) !important; } .wt-macro-input.name-input { font-family: 'Orbitron', monospace !important; font-size: 0.62rem !important; letter-spacing: 0.08em !important; text-transform: uppercase !important; color: #e8f4f8 !important; } .wt-macro-save-row { display: flex; gap: 5px; justify-content: flex-end; margin-top: 2px; } .wt-macro-save, .wt-macro-cancel { font-family: 'Orbitron', monospace; font-size: 0.55rem; letter-spacing: 0.14em; text-transform: uppercase; padding: 3px 10px; border-radius: 2px; cursor: none; transition: all 0.15s ease; } .wt-macro-save { border: 1px solid rgba(0,245,200,0.35); background: rgba(0,245,200,0.08); color: #00f5c8; } .wt-macro-save:hover { background: rgba(0,245,200,0.18); } .wt-macro-cancel { border: 1px solid rgba(255,255,255,0.08); background: transparent; color: #7aaabb; } .wt-macro-cancel:hover { background: rgba(255,255,255,0.05); } /* Add macro button */ .wt-macro-add-btn { margin: 8px; padding: 8px; font-family: 'Share Tech Mono', monospace; font-size: 0.65rem; letter-spacing: 0.14em; text-transform: uppercase; color: rgba(0,245,200,0.5); border: 1px dashed rgba(0,245,200,0.2); border-radius: 4px; background: transparent; cursor: none; transition: all 0.2s ease; text-align: center; display: none; } .wt-macro-add-btn:hover { color: #00f5c8; border-color: rgba(0,245,200,0.5); background: rgba(0,245,200,0.04); } .edit-mode .wt-macro-add-btn { display: block; } /* ─── Settings panel (inside macro panel bottom) ────────────────── */ .wt-macro-settings { flex-shrink: 0; border-top: 1px solid rgba(0,245,200,0.1); padding: 10px 12px; } .wt-settings-label { font-family: 'Share Tech Mono', monospace; font-size: 0.58rem; letter-spacing: 0.14em; color: #3d6070; text-transform: uppercase; margin-bottom: 5px; } .wt-settings-input { width: 100%; background: rgba(6,12,20,0.8) !important; border: 1px solid rgba(0,245,200,0.15) !important; border-radius: 2px !important; color: rgba(0,245,200,0.7) !important; font-family: 'Share Tech Mono', monospace !important; font-size: 0.65rem !important; padding: 5px 8px !important; outline: none !important; } .wt-settings-input:focus { border-color: rgba(0,245,200,0.4) !important; } /* ─── Resize handle indicator ────────────────────────────────────── */ #wt-window::after { content: ''; position: absolute; bottom: 3px; right: 4px; width: 10px; height: 10px; border-right: 2px solid rgba(0,245,200,0.25); border-bottom: 2px solid rgba(0,245,200,0.25); pointer-events: none; } /* ─── Toggle button (always visible) ────────────────────────────── */ #wt-toggle { position: fixed; bottom: 28px; right: 28px; z-index: 7999; font-family: 'Orbitron', monospace; font-size: 0.62rem; letter-spacing: 0.2em; text-transform: uppercase; padding: 10px 18px; border: 1px solid rgba(0,245,200,0.4); border-radius: 4px; background: rgba(3,8,14,0.95); color: #00f5c8; cursor: none; transition: all 0.2s ease; box-shadow: 0 4px 20px rgba(0,0,0,0.5), 0 0 12px rgba(0,245,200,0.1); display: none; } #wt-toggle:hover { background: rgba(0,245,200,0.12); box-shadow: 0 4px 20px rgba(0,0,0,0.5), 0 0 20px rgba(0,245,200,0.2); }
Home dashboard
Users
Application list
Tags list
Settings