*,*::before,*::after{box-sizing:border-box;margin:0;padding:0} :root{ --bg:#000810; --bg2:#000d1a; --cyan:#00d4ff; --cyan2:#00a8cc; --cyan3:rgba(0,212,255,0.15); --orange:#ff6600; --orange2:#ff4400; --green:#00ff88; --red:#ff2244; --yellow:#ffd700; --dim:rgba(0,212,255,0.4); --dimmer:rgba(0,212,255,0.12); --grid:rgba(0,180,255,0.07); --text:#c8e6ff; --text-dim:rgba(200,230,255,0.5); --panel-bg:rgba(0,15,35,0.85); --panel-border:rgba(0,212,255,0.2); --font-display:'Orbitron',monospace; --font-body:'Rajdhani',sans-serif; --font-mono:'Share Tech Mono',monospace; --r:8px; } html,body{width:100%;height:100%;overflow:hidden;background:var(--bg);color:var(--text);font-family:var(--font-body)} /* ── GRID BACKGROUND — animated drift ─────────────────────────────── */ @keyframes gridDrift{from{background-position:0 0,0 0}to{background-position:40px 40px,40px 40px}} body::before{ content:''; position:fixed;inset:0; background-image: linear-gradient(var(--grid) 1px,transparent 1px), linear-gradient(90deg,var(--grid) 1px,transparent 1px); background-size:40px 40px; z-index:0; pointer-events:none; animation:gridDrift 18s linear infinite; } body::after{ content:''; position:fixed;inset:0; background:radial-gradient(ellipse at 50% 50%,rgba(0,80,160,0.08) 0%,transparent 70%); z-index:0; pointer-events:none; } /* ── SCAN LINES ───────────────────────────────────────────────────── */ .scanlines{ position:fixed;inset:0;z-index:1;pointer-events:none; background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,0,0,0.03) 2px,rgba(0,0,0,0.03) 4px); animation:scanMove 8s linear infinite; } @keyframes scanMove{0%{background-position:0 0}100%{background-position:0 100%}} /* ── SCANLINE SWEEP ───────────────────────────────────────────────── */ .scanline-sweep{ position:fixed;top:0;left:0;right:0;height:120px; background:linear-gradient(180deg,transparent 0%,rgba(0,212,255,0.04) 40%,rgba(0,212,255,0.12) 50%,rgba(0,212,255,0.04) 60%,transparent 100%); pointer-events:none;z-index:2; animation:sweepDown 7s linear infinite; box-shadow:0 0 12px rgba(0,212,255,0.15); } @keyframes sweepDown{ 0%{transform:translateY(-120px);opacity:0} 3%{opacity:1} 97%{opacity:0.7} 100%{transform:translateY(100vh);opacity:0} } /* ── PARTICLE CANVAS ──────────────────────────────────────────────── */ #particleCanvas{position:fixed;inset:0;z-index:0;pointer-events:none;opacity:0.7} /* ── PANEL FLOAT + GLOW ───────────────────────────────────────────── */ @keyframes panelFloat{ 0%,100%{transform:translateY(var(--pty,0px)) rotateX(var(--prx,0deg)) rotateY(var(--pry,0deg));box-shadow:0 4px 20px rgba(0,0,0,0.4),0 0 0px rgba(0,212,255,0)} 50%{transform:translateY(calc(var(--pty,0px) - 7px)) rotateX(var(--prx,0deg)) rotateY(var(--pry,0deg));box-shadow:0 16px 40px rgba(0,0,0,0.5),0 0 30px rgba(0,212,255,0.06),0 0 60px rgba(0,212,255,0.02)} } /* Panel flash when data updates */ @keyframes panelFlash{0%{box-shadow:0 0 0 1px rgba(0,212,255,0.8),0 0 20px rgba(0,212,255,0.3)}100%{box-shadow:none}} .panel.data-flash{animation:panelFlash 0.5s ease-out,panelFloat 7s ease-in-out infinite} /* Alert pulse — red ambient glow on body when alerts active */ @keyframes alertPulse{0%,100%{opacity:0}50%{opacity:1}} #alertOverlay{position:fixed;inset:0;pointer-events:none;z-index:1;background:radial-gradient(ellipse at 50% 50%,rgba(255,30,60,0.07) 0%,transparent 70%);animation:alertPulse 3s ease-in-out infinite;display:none} /* Glitch keyframes */ @keyframes glitch1{ 0%,100%{clip-path:inset(0 0 100% 0);transform:translate(0)} 10%{clip-path:inset(10% 0 60% 0);transform:translate(-3px,1px)} 20%{clip-path:inset(40% 0 30% 0);transform:translate(3px,-1px)} 30%{clip-path:inset(70% 0 10% 0);transform:translate(-2px,2px)} 40%{clip-path:inset(0 0 100% 0);transform:translate(0)} } @keyframes glitch2{ 0%,100%{clip-path:inset(0 0 100% 0);transform:translate(0)} 10%{clip-path:inset(60% 0 10% 0);transform:translate(3px,-1px)} 25%{clip-path:inset(20% 0 50% 0);transform:translate(-3px,1px)} 35%{clip-path:inset(80% 0 5% 0);transform:translate(2px,2px)} 45%{clip-path:inset(0 0 100% 0);transform:translate(0)} } .tb-logo-text{position:relative;display:inline-block} .tb-logo-text::before,.tb-logo-text::after{ content:attr(data-text);position:absolute;top:0;left:0; color:var(--cyan);font-family:var(--font-display);font-size:inherit;font-weight:inherit;letter-spacing:inherit; pointer-events:none;opacity:0; } .tb-logo-text::before{color:rgba(255,0,80,0.8);text-shadow:2px 0 rgba(255,0,80,0.5)} .tb-logo-text::after{color:rgba(0,255,255,0.8);text-shadow:-2px 0 rgba(0,255,255,0.5)} .tb-logo-text.glitching::before{animation:glitch1 0.25s steps(1) forwards;opacity:1} .tb-logo-text.glitching::after{animation:glitch2 0.25s steps(1) forwards;opacity:1} /* Metric bar shimmer */ @keyframes barShimmer{0%{transform:translateX(-100%)}100%{transform:translateX(400%)}} .metric-bar-fill::after{ content:'';position:absolute;top:0;left:0;width:30%;height:100%; background:linear-gradient(90deg,transparent,rgba(255,255,255,0.25),transparent); animation:barShimmer 2.5s ease-in-out infinite; border-radius:inherit; } .metric-bar-fill{position:relative;overflow:hidden} /* Panel hover rise */ .panel:hover{ transform:translateY(calc(var(--pty,0px) - 11px)) !important; border-color:rgba(0,212,255,0.45) !important; box-shadow:0 20px 50px rgba(0,0,0,0.55),0 0 40px rgba(0,212,255,0.1) !important; transition:transform 0.3s ease,border-color 0.3s ease,box-shadow 0.3s ease; } /* Sparkline canvas */ .sparkline-wrap{margin:4px 0 8px;height:32px;position:relative} .sparkline-wrap canvas{display:block;width:100%;height:32px} /* ── HUD CORNER BRACKETS ──────────────────────────────────────────── */ /* ── MINI ARC REACTOR ─────────────────────────────────────────────── */ .tb-reactor{width:30px;height:30px;position:relative;flex-shrink:0} .tbr-ring{position:absolute;border-radius:50%;top:50%;left:50%;transform:translate(-50%,-50%)} .tbr-r1{width:30px;height:30px;border:1px solid rgba(0,212,255,0.35);animation:spinRing 9s linear infinite} .tbr-r2{width:20px;height:20px;border:1px solid var(--orange);box-shadow:0 0 6px var(--orange);animation:spinRing 4s linear infinite reverse} .tbr-core{position:absolute;width:8px;height:8px;border-radius:50%;background:radial-gradient(circle,#fff 0%,var(--cyan) 50%,var(--cyan2) 100%);box-shadow:0 0 10px var(--cyan),0 0 20px rgba(0,212,255,0.5);top:50%;left:50%;transform:translate(-50%,-50%);animation:corePulse 2s ease-in-out infinite} /* ── LOGIN SCREEN ─────────────────────────────────────────────────── */ #loginScreen{ position:fixed;inset:0;z-index:1000; display:flex;align-items:center;justify-content:center;flex-direction:column; background:var(--bg); } .login-reactor{ width:160px;height:160px;position:relative;margin-bottom:40px;cursor:pointer; } .login-reactor .ring{ position:absolute;border-radius:50%;border:2px solid var(--cyan); top:50%;left:50%;transform:translate(-50%,-50%); box-shadow:0 0 8px var(--cyan),inset 0 0 8px rgba(0,212,255,0.1); animation:spinRing var(--spd,4s) linear infinite; } .login-reactor .r1{width:160px;height:160px;--spd:8s;border-color:rgba(0,212,255,0.3)} .login-reactor .r2{width:130px;height:130px;--spd:6s;animation-direction:reverse} .login-reactor .r3{width:100px;height:100px;--spd:4s;border-color:var(--orange);box-shadow:0 0 12px var(--orange)} .login-reactor .r4{width:70px;height:70px;--spd:3s;animation-direction:reverse} .login-reactor .core{ position:absolute;top:50%;left:50%;transform:translate(-50%,-50%); width:40px;height:40px;border-radius:50%; background:radial-gradient(circle,#ffffff 0%,var(--cyan) 40%,var(--cyan2) 70%,transparent 100%); box-shadow:0 0 20px var(--cyan),0 0 40px var(--cyan),0 0 80px rgba(0,212,255,0.3); animation:corePulse 2s ease-in-out infinite; } @keyframes spinRing{from{transform:translate(-50%,-50%) rotate(0deg)}to{transform:translate(-50%,-50%) rotate(360deg)}} @keyframes corePulse{0%,100%{opacity:0.8;transform:translate(-50%,-50%) scale(1)}50%{opacity:1;transform:translate(-50%,-50%) scale(1.1)}} #loginScreen h1{ font-family:var(--font-display);font-size:2.5rem;font-weight:900;letter-spacing:8px; color:var(--cyan);text-shadow:0 0 20px var(--cyan),0 0 40px rgba(0,212,255,0.4); margin-bottom:8px; } #loginScreen p{color:var(--text-dim);font-size:0.85rem;letter-spacing:4px;text-transform:uppercase;margin-bottom:40px} .login-form{display:flex;flex-direction:column;gap:14px;width:320px} .login-form input{ background:rgba(0,212,255,0.05); border:1px solid var(--panel-border); border-radius:var(--r); padding:12px 16px; color:var(--cyan); font-family:var(--font-mono);font-size:0.95rem; outline:none; transition:border-color 0.2s,box-shadow 0.2s; letter-spacing:1px; } .login-form input:focus{border-color:var(--cyan);box-shadow:0 0 12px rgba(0,212,255,0.2)} .login-form input::placeholder{color:var(--dim);letter-spacing:1px} .login-form button{ background:linear-gradient(135deg,rgba(0,212,255,0.15),rgba(0,212,255,0.05)); border:1px solid var(--cyan); border-radius:var(--r); padding:14px; color:var(--cyan); font-family:var(--font-display);font-size:0.8rem;font-weight:700; letter-spacing:3px;text-transform:uppercase; cursor:pointer; transition:all 0.2s; box-shadow:0 0 12px rgba(0,212,255,0.1); } .login-form button:hover{background:rgba(0,212,255,0.2);box-shadow:0 0 20px rgba(0,212,255,0.3)} #loginError{color:var(--red);font-size:0.85rem;text-align:center;letter-spacing:1px;min-height:20px} /* ── MAIN APP (hidden until login) ───────────────────────────────── */ #app{position:fixed;inset:0;z-index:2;display:none;flex-direction:column} /* ── TOP NAV BAR ─────────────────────────────────────────────────── */ #topBar{ display:flex;align-items:center;justify-content:space-between; padding:0 20px;height:48px; background:rgba(0,8,22,0.9); border-bottom:1px solid var(--panel-border); flex-shrink:0; } .tb-logo{ font-family:var(--font-display);font-size:1rem;font-weight:900;letter-spacing:4px; color:var(--cyan);text-shadow:0 0 10px var(--cyan);display:flex;align-items:center;gap:10px; transition:filter 0.4s ease; will-change:transform; } .tb-logo.face-tracking{ filter:drop-shadow(0 0 12px rgba(0,212,255,0.9)) drop-shadow(0 0 24px rgba(0,212,255,0.4)); } /* Face scan crosshair overlay */ #faceScanOverlay{ position:fixed;pointer-events:none;z-index:9; width:60px;height:60px; display:none; } #faceScanOverlay::before,#faceScanOverlay::after{ content:'';position:absolute; border-color:rgba(0,212,255,0.7);border-style:solid; } #faceScanOverlay::before{ top:0;left:0;width:16px;height:16px; border-width:2px 0 0 2px; } #faceScanOverlay::after{ bottom:0;right:0;width:16px;height:16px; border-width:0 2px 2px 0; } #faceScanOverlay .fso-tr{position:absolute;top:0;right:0;width:16px;height:16px;border:2px solid rgba(0,212,255,0.7);border-left:0;border-bottom:0} #faceScanOverlay .fso-bl{position:absolute;bottom:0;left:0;width:16px;height:16px;border:2px solid rgba(0,212,255,0.7);border-right:0;border-top:0} #faceScanOverlay .fso-dot{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:4px;height:4px;border-radius:50%;background:rgba(0,212,255,0.6);box-shadow:0 0 6px var(--cyan)} #faceScanOverlay .fso-label{position:absolute;bottom:-18px;left:50%;transform:translateX(-50%);font-family:var(--font-mono);font-size:0.45rem;color:rgba(0,212,255,0.7);letter-spacing:1px;white-space:nowrap} @keyframes fsoSpin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}} #faceScanOverlay .fso-ring{position:absolute;top:50%;left:50%;width:40px;height:40px;margin:-20px;border-radius:50%;border:1px solid rgba(0,212,255,0.3);border-top-color:rgba(0,212,255,0.7);animation:fsoSpin 1.2s linear infinite} .tb-logo-dot{width:8px;height:8px;border-radius:50%;background:var(--cyan);box-shadow:0 0 8px var(--cyan);animation:corePulse 1.5s infinite} .tb-center{ display:flex;gap:24px;align-items:center; } .tb-stat{font-family:var(--font-mono);font-size:0.75rem;color:var(--text-dim)} .tb-stat span{color:var(--cyan)} .tb-right{display:flex;align-items:center;gap:16px} #clock{font-family:var(--font-mono);font-size:1rem;color:var(--cyan);letter-spacing:2px} #date-display{font-family:var(--font-mono);font-size:0.7rem;color:var(--text-dim)} .status-dot{width:8px;height:8px;border-radius:50%;background:var(--green);box-shadow:0 0 6px var(--green);animation:blink 2s infinite} @keyframes blink{0%,100%{opacity:1}50%{opacity:0.4}} .btn-logout{ background:none;border:1px solid rgba(255,34,68,0.3);border-radius:4px; color:rgba(255,34,68,0.7);font-family:var(--font-mono);font-size:0.7rem; padding:4px 10px;cursor:pointer;letter-spacing:1px;transition:all 0.2s; } .btn-logout:hover{border-color:var(--red);color:var(--red);box-shadow:0 0 8px rgba(255,34,68,0.2)} /* ── MAIN LAYOUT ─────────────────────────────────────────────────── */ #mainLayout{ flex:1;display:grid; grid-template-columns:280px 1fr 280px; grid-template-rows:1fr; gap:10px;padding:10px; overflow:hidden; perspective:1200px; transition:grid-template-columns 0.45s cubic-bezier(0.4,0,0.2,1); } #mainLayout.focus-mode{grid-template-columns:0px 1fr 0px} #leftPanel,#rightPanel{ transition:opacity 0.35s ease,transform 0.45s cubic-bezier(0.4,0,0.2,1); overflow:hidden; } #mainLayout.focus-mode #leftPanel{opacity:0;transform:translateX(-20px);pointer-events:none} #mainLayout.focus-mode #rightPanel{opacity:0;transform:translateX(20px);pointer-events:none} #leftPanel{grid-area:left} #centerPanel{grid-area:center} #rightPanel{grid-area:right} #mainLayout{grid-template-areas:"left center right"} #mainLayout.swapped{grid-template-areas:"right center left"} #mainLayout.swapped.focus-mode #leftPanel{transform:translateX(20px)} #mainLayout.swapped.focus-mode #rightPanel{transform:translateX(-20px)} #btn-swap-panels{background:none;border:1px solid var(--panel-border);color:var(--text-dim);padding:3px 8px;cursor:pointer;font-family:var(--font-mono);font-size:0.6rem;letter-spacing:1px;transition:all 0.2s} #btn-swap-panels:hover,#btn-swap-panels.active{color:var(--cyan);border-color:var(--cyan)} /* ── MOBILE RESPONSIVE ──────────────────────────────────────────────── */ @media(max-width:900px){ #mainLayout{grid-template-columns:1fr!important;grid-template-rows:1fr!important;padding:6px;gap:6px} #leftPanel,#rightPanel{display:none} #leftPanel.mob-active,#rightPanel.mob-active{display:flex!important;flex-direction:column} #centerPanel{display:none} #centerPanel.mob-active{display:flex!important;flex-direction:column} #topBar{padding:0 10px;height:42px} .tb-center{display:none} .tb-logo{font-size:0.85rem;letter-spacing:2px} #clock{font-size:0.85rem} #date-display{display:none} #btn-swap-panels,.btn-panels{display:none} #inputArea{padding:8px 6px} #textInput{font-size:0.85rem;padding:8px 10px;min-height:40px} #sendBtn{min-height:40px;padding:0 14px;font-size:0.65rem} #micBtn{min-height:40px;min-width:40px;font-size:1.1rem} #app{padding-bottom:48px} #mobileNav{display:flex!important} } @media(min-width:901px){#mobileNav{display:none!important}} #mobileNav{ display:none;position:fixed;bottom:0;left:0;right:0;z-index:100; background:rgba(0,8,22,0.96);border-top:1px solid var(--panel-border);height:48px; } .mob-nav-btn{ flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center; font-family:var(--font-display);font-size:0.5rem;letter-spacing:1.5px; color:var(--text-dim);cursor:pointer;gap:2px;border:none;background:none;transition:color 0.2s; } .mob-nav-btn .mob-icon{font-size:1rem;line-height:1} .mob-nav-btn.active{color:var(--cyan)} .mob-nav-btn.active .mob-icon{filter:drop-shadow(0 0 4px var(--cyan))} /* Panel toggle button */ .btn-panels{ background:rgba(0,212,255,0.06); border:1px solid rgba(0,212,255,0.25); border-radius:4px;color:var(--cyan); font-family:var(--font-display);font-size:0.55rem; letter-spacing:1px;padding:4px 10px;cursor:pointer; transition:all 0.2s;margin-right:6px; } .btn-panels:hover{border-color:var(--cyan);box-shadow:0 0 8px rgba(0,212,255,0.2)} .btn-panels.focus-active{background:rgba(0,212,255,0.15);border-color:var(--cyan)} /* Camera auto-mic button */ .btn-camera{ background:rgba(0,212,255,0.06); border:1px solid rgba(0,212,255,0.25); border-radius:4px;color:var(--cyan); font-family:var(--font-display);font-size:0.55rem; letter-spacing:1px;padding:4px 10px;cursor:pointer; transition:all 0.2s;margin-right:6px; } .btn-camera:hover{border-color:var(--cyan);box-shadow:0 0 8px rgba(0,212,255,0.2)} .btn-camera.cam-active{background:rgba(0,255,100,0.1);border-color:var(--green);color:var(--green)} .btn-camera.cam-sensing{animation:camPulse 1.5s ease-in-out infinite} .btn-agent{background:transparent;border:1px solid var(--panel-border);color:var(--text-dim);font-family:var(--font-mono);font-size:0.62rem;letter-spacing:2px;padding:6px 10px;cursor:pointer;display:flex;align-items:center;gap:6px;transition:all 0.2s} .btn-agent:hover{border-color:var(--cyan);box-shadow:0 0 8px rgba(0,212,255,0.2)} .btn-agent .agent-dot{width:7px;height:7px;border-radius:50%;background:var(--red);flex-shrink:0;transition:all 0.3s} .btn-agent.agent-online .agent-dot{background:var(--green);box-shadow:0 0 6px var(--green)} #agentModal{position:fixed;inset:0;background:rgba(0,0,0,0.85);z-index:9999;display:none;align-items:center;justify-content:center} #agentModal.open{display:flex} .agent-modal-box{background:var(--panel-bg);border:1px solid var(--panel-border);padding:24px 32px;max-width:500px;width:90%;font-family:var(--font-mono)} .agent-modal-box h3{color:var(--cyan);font-size:0.75rem;letter-spacing:4px;margin:0 0 16px} .agent-modal-box pre{background:rgba(0,0,0,0.4);padding:12px;font-size:0.65rem;color:var(--green);overflow-x:auto;margin:8px 0;white-space:pre-wrap;word-break:break-all} .agent-modal-close{float:right;background:transparent;border:1px solid var(--panel-border);color:var(--text-dim);cursor:pointer;font-family:var(--font-mono);font-size:0.6rem;padding:4px 10px;letter-spacing:2px} .agent-modal-close:hover{border-color:var(--red);color:var(--red)} .agent-dl-btn{display:inline-block;margin-top:12px;background:rgba(0,212,255,0.1);border:1px solid var(--cyan);color:var(--cyan);font-family:var(--font-mono);font-size:0.65rem;letter-spacing:2px;padding:8px 16px;cursor:pointer;text-decoration:none;transition:all 0.2s} .agent-dl-btn:hover{background:rgba(0,212,255,0.2)} @keyframes camPulse{0%,100%{box-shadow:0 0 4px rgba(0,255,100,0.3)}50%{box-shadow:0 0 12px rgba(0,255,100,0.6)}} /* ── PANELS ───────────────────────────────────────────────────────── */ .panel{ background:var(--panel-bg); border:1px solid var(--panel-border); border-radius:var(--r); padding:14px; overflow:hidden; position:relative; backdrop-filter:blur(4px); animation:panelFloat 7s ease-in-out infinite; will-change:transform; } .panel::before{ content:'';position:absolute;top:0;left:0;right:0;height:1px; background:linear-gradient(90deg,transparent,var(--cyan),transparent); opacity:0.4; z-index:2; } /* HUD corner brackets */ .panel::after{ content:'';position:absolute;inset:0;pointer-events:none;z-index:2; background: linear-gradient(to right,rgba(0,212,255,0.8),rgba(0,212,255,0.8)) top left / 14px 1px no-repeat, linear-gradient(to bottom,rgba(0,212,255,0.8),rgba(0,212,255,0.8)) top left / 1px 14px no-repeat, linear-gradient(to right,rgba(0,212,255,0.8),rgba(0,212,255,0.8)) top right / 14px 1px no-repeat, linear-gradient(to bottom,rgba(0,212,255,0.8),rgba(0,212,255,0.8)) top right / 1px 14px no-repeat, linear-gradient(to right,rgba(0,212,255,0.8),rgba(0,212,255,0.8)) bottom left / 14px 1px no-repeat, linear-gradient(to bottom,rgba(0,212,255,0.8),rgba(0,212,255,0.8)) bottom left / 1px 14px no-repeat, linear-gradient(to right,rgba(0,212,255,0.8),rgba(0,212,255,0.8)) bottom right / 14px 1px no-repeat, linear-gradient(to bottom,rgba(0,212,255,0.8),rgba(0,212,255,0.8)) bottom right / 1px 14px no-repeat; opacity:0.55; } .panel-title{ font-family:var(--font-display);font-size:0.6rem;font-weight:700; letter-spacing:3px;color:var(--cyan);text-transform:uppercase; margin-bottom:12px;display:flex;align-items:center;justify-content:space-between; } .panel-title .indicator{ width:6px;height:6px;border-radius:50%;background:var(--cyan); box-shadow:0 0 6px var(--cyan);animation:blink 3s infinite; } .panel-title{cursor:pointer;user-select:none} .panel-collapse-btn{ background:none;border:none;color:rgba(0,212,255,0.35);cursor:pointer; font-size:0.65rem;padding:0;margin-left:6px;flex-shrink:0;line-height:1; transition:transform 0.25s ease,color 0.2s; } .panel-collapse-btn:hover{color:var(--cyan)!important} .panel.collapsed .panel-collapse-btn{transform:rotate(-90deg);color:rgba(0,212,255,0.5)} .panel.collapsed > *:not(.panel-title){ display:none!important; } .panel.collapsed{ flex:0 0 auto!important;min-height:0!important;overflow:visible!important; } /* ── LEFT PANEL — SYSTEM ─────────────────────────────────────────── */ #leftPanel{display:flex;flex-direction:column;gap:10px;overflow-y:auto} .metric-row{margin-bottom:10px} .metric-label{ font-family:var(--font-mono);font-size:0.7rem;color:var(--text-dim); display:flex;justify-content:space-between;margin-bottom:4px; } .metric-label span{color:var(--cyan)} .metric-bar{ height:4px;border-radius:2px; background:rgba(0,212,255,0.1); overflow:hidden;position:relative; } .metric-bar-fill{ height:100%;border-radius:2px; background:linear-gradient(90deg,var(--cyan2),var(--cyan)); box-shadow:0 0 6px var(--cyan); transition:width 1s ease; } .metric-bar-fill.warn{background:linear-gradient(90deg,#cc6600,var(--orange));box-shadow:0 0 6px var(--orange)} .metric-bar-fill.danger{background:linear-gradient(90deg,#cc0022,var(--red));box-shadow:0 0 6px var(--red)} .service-row{ display:flex;align-items:center;justify-content:space-between; padding:5px 0;border-bottom:1px solid rgba(0,212,255,0.06); font-family:var(--font-mono);font-size:0.72rem; } .service-row:last-child{border-bottom:none} .svc-name{color:var(--text-dim)} .svc-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0} .svc-dot.on{background:var(--green);box-shadow:0 0 4px var(--green)} .svc-dot.off{background:var(--red);box-shadow:0 0 4px var(--red)} .do-section{margin-top:8px} .val-row{ display:flex;justify-content:space-between; font-family:var(--font-mono);font-size:0.72rem;padding:3px 0; } .val-row .lbl{color:var(--text-dim)} .val-row .val{color:var(--cyan)} .val-row .val.ok{color:var(--green)} .val-row .val.warn{color:var(--orange)} .val-row .val.danger{color:var(--red)} /* ── CENTER PANEL ────────────────────────────────────────────────── */ #centerPanel{ display:flex;flex-direction:column;align-items:center;gap:10px;overflow:hidden; } /* ARC REACTOR ─────────────────────────────────────────────────────── */ #arcReactor{position:relative;width:220px;height:220px;flex-shrink:0} .arc-ring{ position:absolute;top:50%;left:50%;transform:translate(-50%,-50%); border-radius:50%;border-style:solid;border-color:var(--cyan); animation:spinRing var(--spd,6s) linear infinite var(--dir,normal); } .arc-ring.r1{width:220px;height:220px;border-width:1px;border-color:rgba(0,212,255,0.15);--spd:20s} .arc-ring.r2{width:195px;height:195px;border-width:1px;border-color:rgba(0,212,255,0.25);--spd:15s;--dir:reverse} .arc-ring.r3{ width:170px;height:170px;border-width:2px;--spd:10s; border-top-color:transparent;border-right-color:transparent; box-shadow:0 0 6px var(--cyan); } .arc-ring.r4{ width:145px;height:145px;border-width:1px;--spd:8s;--dir:reverse; border-bottom-color:transparent;border-left-color:transparent; } .arc-ring.r5{ width:115px;height:115px;border-width:2px;--spd:5s; border-color:var(--orange);border-right-color:transparent; box-shadow:0 0 8px var(--orange); } .arc-ring.r6{width:88px;height:88px;border-width:1px;--spd:4s;--dir:reverse;border-color:rgba(0,212,255,0.6)} .arc-ring.r7{ width:62px;height:62px;border-width:2px;--spd:3s; border-left-color:transparent;border-bottom-color:transparent; } .arc-core{ position:absolute;top:50%;left:50%;transform:translate(-50%,-50%); width:36px;height:36px;border-radius:50%; background:radial-gradient(circle,#fff 0%,var(--cyan) 35%,var(--cyan2) 65%,transparent 100%); box-shadow:0 0 15px var(--cyan),0 0 30px var(--cyan),0 0 60px rgba(0,212,255,0.4),0 0 100px rgba(0,212,255,0.15); animation:corePulse 2s ease-in-out infinite; } /* HUD TICKS ───────────────────────────────────────────────────────── */ .hud-ticks{ position:absolute;inset:0;border-radius:50%; } .hud-ticks::before,.hud-ticks::after{ content:'';position:absolute; background:var(--cyan);opacity:0.5; } .hud-ticks::before{left:50%;top:0;width:1px;height:12px;transform:translateX(-50%)} .hud-ticks::after{left:0;top:50%;height:1px;width:12px;transform:translateY(-50%)} /* ── CHAT AREA ───────────────────────────────────────────────────── */ #chatArea{ flex:1;width:100%;display:flex;flex-direction:column;gap:8px;overflow:hidden; } #chatLog{ flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:8px; padding:4px 0; scrollbar-width:thin;scrollbar-color:var(--dim) transparent; } .msg{ padding:10px 14px;border-radius:var(--r);max-width:100%; font-family:var(--font-body);font-size:0.9rem;line-height:1.5; animation:msgIn 0.3s ease; } @keyframes msgIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}} .msg.user{ background:rgba(0,212,255,0.08);border:1px solid rgba(0,212,255,0.15); border-left:3px solid var(--cyan); font-family:var(--font-mono);font-size:0.8rem;color:var(--text); } .msg.user::before{content:'';display:none} .msg.jarvis{ background:rgba(0,40,80,0.4);border:1px solid rgba(0,212,255,0.1); border-left:3px solid var(--orange); } .msg.jarvis::before{content:'◆ JARVIS ';color:var(--orange);font-weight:700;font-size:0.7rem;letter-spacing:2px} .msg.system{ border:1px solid rgba(255,215,0,0.2);background:rgba(255,215,0,0.03); font-family:var(--font-mono);font-size:0.75rem;color:var(--text-dim);text-align:center; border-radius:4px; } /* ── CONTEXT CHIP ───────────────────────────────────────────────── */ #contextChip{ display:none;flex-shrink:0; padding:5px 10px;margin-bottom:6px; background:rgba(0,212,255,0.07); border:1px solid rgba(0,212,255,0.35); border-radius:var(--r); display:flex;align-items:center;gap:8px; font-family:var(--font-display);font-size:0.58rem;letter-spacing:1px; } #contextChip.visible{display:flex} #contextLabel{color:var(--cyan);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} #contextType{color:var(--text-dim)} #contextClear{ background:none;border:none;color:var(--dim);cursor:pointer; font-size:1rem;line-height:1;padding:0 2px;flex-shrink:0; } #contextClear:hover{color:var(--red)} /* Planner mini panel */ /* Clickable panel items */ .vm-card{cursor:pointer;transition:background 0.15s,border-color 0.15s} .vm-card:hover{background:rgba(0,212,255,0.07);border-color:rgba(0,212,255,0.4)} .vm-card.ctx-active{border-color:var(--cyan);background:rgba(0,212,255,0.1)} .device-item{cursor:pointer;transition:background 0.15s} .device-item:hover{background:rgba(0,212,255,0.05)} .device-item.ctx-active{background:rgba(0,212,255,0.1);border-color:rgba(0,212,255,0.4)} .alert-item{cursor:pointer} .alert-item.ctx-active{border-color:var(--cyan) !important;box-shadow:0 0 8px rgba(0,212,255,0.15)} .tier-badge{ display:inline-block;font-family:var(--font-display);font-size:0.42rem; letter-spacing:1.5px;padding:1px 5px;border-radius:2px;margin-top:4px; opacity:0.7;border:1px solid;vertical-align:middle; } .tier-badge.kb {color:#00d4ff;border-color:rgba(0,212,255,0.4);background:rgba(0,212,255,0.06)} .tier-badge.groq {color:#f5a623;border-color:rgba(245,166,35,0.4);background:rgba(245,166,35,0.06)} .tier-badge.claude{color:#b57cf5;border-color:rgba(181,124,245,0.4);background:rgba(181,124,245,0.06)} .tier-badge.ollama{color:#7ef55a;border-color:rgba(126,245,90,0.4);background:rgba(126,245,90,0.06)} .news-item{cursor:pointer;transition:background 0.15s} .news-item:hover{background:rgba(0,212,255,0.04)} .news-item.ctx-active{background:rgba(0,212,255,0.08);border-color:rgba(0,212,255,0.4)} .ha-ask-btn{ background:none;border:1px solid rgba(0,212,255,0.2);border-radius:3px; color:var(--text-dim);font-size:0.55rem;padding:1px 5px;cursor:pointer; font-family:var(--font-display);letter-spacing:1px;flex-shrink:0; transition:all 0.15s; } .ha-ask-btn:hover{border-color:var(--cyan);color:var(--cyan);background:rgba(0,212,255,0.1)} /* ── VOICE INPUT ─────────────────────────────────────────────────── */ #inputArea{ display:flex;gap:10px;align-items:center;flex-shrink:0; } #textInput{ flex:1;background:rgba(0,212,255,0.04); border:1px solid var(--panel-border);border-radius:var(--r); padding:10px 14px;color:var(--text); font-family:var(--font-mono);font-size:0.85rem;outline:none; transition:border-color 0.2s; } #textInput:focus{border-color:var(--cyan);box-shadow:0 0 10px rgba(0,212,255,0.1)} #textInput::placeholder{color:var(--dim)} #sendBtn{ background:rgba(0,212,255,0.1);border:1px solid var(--dim); border-radius:var(--r);padding:10px 16px; color:var(--cyan);font-family:var(--font-display);font-size:0.65rem;font-weight:700; letter-spacing:2px;cursor:pointer;transition:all 0.2s;white-space:nowrap; } #sendBtn:hover{background:rgba(0,212,255,0.2);box-shadow:0 0 12px rgba(0,212,255,0.2)} /* MIC BUTTON ──────────────────────────────────────────────────────── */ #micBtn{ width:48px;height:48px;border-radius:50%; background:radial-gradient(circle,rgba(255,102,0,0.15),rgba(0,8,22,0.9)); border:2px solid var(--orange); display:flex;align-items:center;justify-content:center; cursor:pointer;transition:all 0.2s;flex-shrink:0; box-shadow:0 0 10px rgba(255,102,0,0.2); } #micBtn:hover{box-shadow:0 0 20px rgba(255,102,0,0.4);transform:scale(1.05)} #micBtn.listening{ border-color:var(--red);background:radial-gradient(circle,rgba(255,34,68,0.2),rgba(0,8,22,0.9)); box-shadow:0 0 25px rgba(255,34,68,0.5); animation:micPulse 0.8s ease-in-out infinite; } @keyframes micPulse{0%,100%{box-shadow:0 0 25px rgba(255,34,68,0.5)}50%{box-shadow:0 0 40px rgba(255,34,68,0.8),0 0 60px rgba(255,34,68,0.3)}} #micBtn.muted{border-color:var(--text-dim);background:radial-gradient(circle,rgba(200,230,255,0.05),rgba(0,8,22,0.9));box-shadow:0 0 8px rgba(200,230,255,0.1);} #micIcon{font-size:20px} /* WAVEFORM ─────────────────────────────────────────────────────────── */ #waveform{ display:none;align-items:center;justify-content:center;gap:3px;height:30px; } #waveform.active{display:flex} .wave-bar{ width:3px;border-radius:2px;background:var(--red); animation:waveBounce var(--d,0.6s) ease-in-out infinite alternate; box-shadow:0 0 4px var(--red); } @keyframes waveBounce{from{height:4px}to{height:24px}} /* ── RIGHT PANEL ─────────────────────────────────────────────────── */ #rightPanel{display:flex;flex-direction:column;gap:10px;overflow-y:auto} /* NETWORK DEVICE LIST ─────────────────────────────────────────────── */ .device-item{ display:flex;align-items:center;gap:8px;padding:6px 0; border-bottom:1px solid rgba(0,212,255,0.06); font-family:var(--font-mono);font-size:0.72rem; } .device-item:last-child{border-bottom:none} .device-status{width:6px;height:6px;border-radius:50%;flex-shrink:0} .device-status.on{background:var(--green);box-shadow:0 0 4px var(--green)} .device-status.off{background:var(--red);box-shadow:0 0 4px var(--red)} .device-status.unk{background:var(--yellow);box-shadow:0 0 4px var(--yellow);opacity:0.6} .device-info{flex:1;min-width:0} .device-name{color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .device-ip{color:var(--text-dim);font-size:0.65rem} /* VM CARDS ─────────────────────────────────────────────────────────── */ .vm-card{ background:rgba(0,212,255,0.04); border:1px solid rgba(0,212,255,0.12);border-radius:6px; padding:8px 10px;margin-bottom:6px; font-family:var(--font-mono);font-size:0.72rem; } .vm-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px} .vm-name{color:var(--cyan);font-weight:600} .vm-id{color:var(--text-dim);font-size:0.65rem} .vm-metrics{display:grid;grid-template-columns:1fr 1fr;gap:4px} .vm-metric{color:var(--text-dim)} .vm-metric span{color:var(--text)} /* HA DEVICES ────────────────────────────────────────────────────────── */ .ha-table{width:100%;border-collapse:collapse} .ha-thead th{ font-family:var(--font-display);font-size:0.5rem;letter-spacing:2px; color:var(--text-dim);padding:4px 2px 6px;border-bottom:1px solid rgba(0,212,255,0.15); text-align:left; } .ha-thead th:nth-child(3){text-align:center} .ha-thead th:nth-child(4){text-align:center} .ha-row{transition:background 0.12s} .ha-row:hover{background:rgba(0,212,255,0.05)} .ha-row td{ padding:4px 2px;border-bottom:1px solid rgba(0,212,255,0.05); font-family:var(--font-mono);font-size:0.70rem;vertical-align:middle; } .ha-col-domain{font-size:0.85rem;text-align:center;width:20px;padding-right:4px!important} .ha-col-name{color:var(--text);max-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .ha-col-state{text-align:center;width:30px;font-size:0.62rem;font-weight:700;white-space:nowrap} .ha-col-state.on{color:var(--green)} .ha-col-state.off{color:var(--text-dim)} .ha-col-ctrl{text-align:center;width:36px} /* toggle switch */ .ha-toggle{ position:relative;display:inline-block;width:30px;height:15px;cursor:pointer; } .ha-toggle input{opacity:0;width:0;height:0;position:absolute} .ha-slider{ position:absolute;inset:0;border-radius:8px; background:rgba(255,255,255,0.08);border:1px solid rgba(255,255,255,0.14); transition:background 0.18s,border-color 0.18s; } .ha-slider::before{ content:'';position:absolute;left:2px;top:2px; width:9px;height:9px;border-radius:50%; background:var(--text-dim);transition:transform 0.18s,background 0.18s; } .ha-toggle input:checked + .ha-slider{background:rgba(0,255,100,0.22);border-color:var(--green)} .ha-toggle input:checked + .ha-slider::before{transform:translateX(15px);background:var(--green)} /* scene activate button */ .ha-scene-btn{ background:transparent;border:1px solid var(--cyan);border-radius:3px; color:var(--cyan);font-size:0.58rem;padding:1px 4px;cursor:pointer; font-family:var(--font-mono);transition:background 0.15s; } .ha-scene-btn:hover{background:rgba(0,212,255,0.15)} /* ALERTS BADGE ─────────────────────────────────────────────────────── */ .alert-item{ padding:7px 10px;border-radius:6px; font-family:var(--font-mono);font-size:0.72rem; margin-bottom:6px;border-left:3px solid var(--yellow); background:rgba(255,215,0,0.05); display:flex;justify-content:space-between;align-items:center; } .alert-item.critical{border-color:var(--red);background:rgba(255,34,68,0.05)} .alert-item.info{border-color:var(--cyan);background:rgba(0,212,255,0.04)} /* ── BOTTOM STATUS BAR ──────────────────────────────────────────── */ #bottomBar{ height:32px;flex-shrink:0; background:rgba(0,8,22,0.9); border-top:1px solid var(--panel-border); display:flex;align-items:center;padding:0 20px;gap:24px; font-family:var(--font-mono);font-size:0.68rem;color:var(--text-dim); } #bottomBar span{color:var(--cyan)} .bb-item{display:flex;align-items:center;gap:6px} .bb-dot{width:5px;height:5px;border-radius:50%} .bb-dot.online{background:var(--green);box-shadow:0 0 4px var(--green)} .bb-dot.offline{background:var(--red)} /* ── THINKING INDICATOR ──────────────────────────────────────────── */ .thinking{display:flex;gap:4px;align-items:center;padding:8px 14px} .thinking-dot{ width:6px;height:6px;border-radius:50%;background:var(--orange); animation:thinkBounce 0.6s ease-in-out infinite; } .thinking-dot:nth-child(2){animation-delay:0.15s} .thinking-dot:nth-child(3){animation-delay:0.3s} @keyframes thinkBounce{0%,100%{transform:translateY(0);opacity:0.5}50%{transform:translateY(-6px);opacity:1}} /* ── ARC REACTOR HEALTH STATES ──────────────────────────────────── */ #arcReactor.health-warning .arc-ring.r3{border-color:rgba(245,166,35,0.8);box-shadow:0 0 8px #f5a623} #arcReactor.health-warning .arc-ring.r5{border-color:rgba(245,166,35,0.6)} #arcReactor.health-warning .arc-ring.r7{border-color:rgba(245,166,35,0.5)} #arcReactor.health-warning .arc-core{ background:radial-gradient(circle,#fff 0%,#f5a623 35%,#c97b00 65%,transparent 100%); box-shadow:0 0 15px #f5a623,0 0 30px #f5a623,0 0 60px rgba(245,166,35,0.4); animation:corePulse 1.2s ease-in-out infinite; } #arcReactor.health-critical .arc-ring.r3{border-color:rgba(255,34,68,0.9);box-shadow:0 0 10px var(--red)} #arcReactor.health-critical .arc-ring.r5{border-color:rgba(255,34,68,0.7)} #arcReactor.health-critical .arc-ring.r7{border-color:rgba(255,34,68,0.6)} #arcReactor.health-critical .arc-core{ background:radial-gradient(circle,#fff 0%,var(--red) 35%,#8b0000 65%,transparent 100%); box-shadow:0 0 15px var(--red),0 0 30px var(--red),0 0 60px rgba(255,34,68,0.5); animation:corePulse 0.6s ease-in-out infinite; } /* ── SPEAKING ANIMATION ──────────────────────────────────────────── */ @keyframes speakPulse{ 0%,100%{opacity:0.85;transform:translate(-50%,-50%) scale(1);box-shadow:0 0 15px var(--cyan),0 0 30px var(--cyan),0 0 50px rgba(0,212,255,0.3)} 50%{opacity:1;transform:translate(-50%,-50%) scale(1);box-shadow:0 0 25px var(--cyan),0 0 55px var(--cyan),0 0 100px rgba(0,212,255,0.6),0 0 150px rgba(0,212,255,0.25)} } #arcReactor.speaking .arc-core{ animation:speakPulse 0.45s ease-in-out infinite; } #arcReactor.speaking .arc-ring.r3{border-color:rgba(0,212,255,0.7)} #arcReactor.speaking .arc-ring.r5{border-color:rgba(255,165,0,0.6)} /* ── SCROLLBAR ───────────────────────────────────────────────────── */ ::-webkit-scrollbar{width:4px} ::-webkit-scrollbar-track{background:transparent} ::-webkit-scrollbar-thumb{background:var(--dim);border-radius:2px} /* ── TABS (for right panel) ────────────────────────────────────── */ .tab-bar{display:flex;gap:0;margin-bottom:10px;border-bottom:1px solid var(--panel-border);flex-wrap:wrap} .forecast-card{background:rgba(0,212,255,0.04);border:1px solid rgba(0,212,255,0.15);border-radius:4px;padding:5px 3px;text-align:center;min-width:0} .forecast-card .fc-day{font-family:var(--font-display);font-size:0.55rem;color:var(--text-dim);letter-spacing:1px;font-weight:700} .forecast-card .fc-temps{font-size:0.6rem;color:var(--cyan);font-family:var(--font-display);margin-top:2px} .forecast-card .fc-rain{font-size:0.5rem;color:#4fc3f7;min-height:0.7rem} .news-item{padding:6px 0;border-bottom:1px solid rgba(0,212,255,0.08)} .news-item:last-child{border-bottom:none} .news-source{font-size:0.5rem;color:var(--cyan);font-family:var(--font-display);letter-spacing:1px} .news-title{font-size:0.62rem;color:var(--text-primary);line-height:1.3;margin-top:2px} .news-time{font-size:0.5rem;color:var(--text-dim);margin-top:2px} .news-cat-header{font-family:var(--font-display);font-size:0.55rem;letter-spacing:2px;color:var(--cyan);margin:8px 0 4px;border-bottom:1px solid rgba(0,212,255,0.2);padding-bottom:3px} .tab{ font-family:var(--font-display);font-size:0.55rem;font-weight:700;letter-spacing:2px; padding:6px 10px;cursor:pointer;color:var(--text-dim); border-bottom:2px solid transparent;margin-bottom:-1px;transition:all 0.2s; } .tab.active{color:var(--cyan);border-bottom-color:var(--cyan)} .tab-pane{display:none} .tab-pane.active{display:block} /* ── UTILITY ─────────────────────────────────────────────────────── */ .loading-shimmer{ background:linear-gradient(90deg,rgba(0,212,255,0.04) 0%,rgba(0,212,255,0.12) 50%,rgba(0,212,255,0.04) 100%); background-size:200% 100%; animation:shimmer 1.5s infinite;border-radius:4px;height:12px; } @keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}} .text-cyan{color:var(--cyan)} .text-green{color:var(--green)} .text-orange{color:var(--orange)} .text-red{color:var(--red)} .text-dim{color:var(--text-dim)} /* ① HUD CORNER RINGS */ #hudCornersCanvas{position:fixed;inset:0;z-index:3;pointer-events:none} /* ② DATA STREAM COLUMNS */ #dataStreamCanvas{position:fixed;inset:0;z-index:0;pointer-events:none} /* ③ NETWORK TOPOLOGY */ #topoCanvas{display:block;width:100%;flex-shrink:0;cursor:default;border-bottom:1px solid var(--panel-border);margin-bottom:6px} /* ④ BOOT SEQUENCE */ @keyframes bootLeft{0%{opacity:0;transform:translateX(-70px)}100%{opacity:1;transform:none}} @keyframes bootRight{0%{opacity:0;transform:translateX(70px)}100%{opacity:1;transform:none}} @keyframes bootDown{0%{opacity:0;transform:translateY(-18px)}100%{opacity:1;transform:none}} @keyframes bootCenter{0%{opacity:0;transform:scale(0.94) translateY(14px)}100%{opacity:1;transform:none}} .boot-left{animation:bootLeft 0.55s cubic-bezier(0.4,0,0.2,1) both} .boot-right{animation:bootRight 0.55s cubic-bezier(0.4,0,0.2,1) both} .boot-top{animation:bootDown 0.4s ease both} .boot-center{animation:bootCenter 0.65s cubic-bezier(0.4,0,0.2,1) both} /* ⑤ BREATHING EDGE VIGNETTE */ #vignetteOverlay{position:fixed;inset:0;pointer-events:none;z-index:1; background:radial-gradient(ellipse at 50% 50%,transparent 32%,rgba(0,2,18,0.6) 100%); animation:vignettePulse 5s ease-in-out infinite} #vignetteOverlay.alert-vignette{background:radial-gradient(ellipse at 50% 50%,transparent 32%,rgba(20,0,8,0.65) 100%)} @keyframes vignettePulse{0%,100%{opacity:0.75}50%{opacity:1}} /* ⑥ EKG HEARTBEAT */ #ekgWrap{flex:1;max-width:180px;display:flex;align-items:center;overflow:hidden} #ekgCanvas{display:block;width:100%;height:22px;opacity:0.8} /* ⑦ AUDIO RING */ .tb-reactor{position:relative} #audioRingCanvas{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%); width:60px;height:60px;pointer-events:none;z-index:4} /* ⑧ TYPEWRITER CURSOR */ @keyframes cursorBlink{0%,100%{opacity:1}49%{opacity:1}50%,99%{opacity:0}} .type-cursor{display:inline-block;width:6px;height:0.82em;background:var(--cyan);margin-left:1px; vertical-align:text-bottom;animation:cursorBlink 0.7s step-end infinite} /* ⑨ STATIC NOISE BURST */ @keyframes staticBurst{0%{opacity:0}10%{opacity:1}90%{opacity:1}100%{opacity:0}} .panel-noise-layer{position:absolute;inset:0;pointer-events:none;z-index:20;border-radius:var(--r); background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.1'/%3E%3C/svg%3E"); background-size:100% 100%;mix-blend-mode:screen;animation:staticBurst 0.28s ease forwards} /* ── NETWORK MAP OVERLAY ─────────────────────────────────────────────── */ #netMapOverlay{position:fixed;top:0;left:0;width:100vw;height:100vh; z-index:200;display:none;flex-direction:column; background:rgba(0,4,18,0.96);border:1px solid rgba(0,212,255,0.28); border-top:none;border-left:none;transform-origin:0 0;backdrop-filter:blur(14px); overflow:hidden;box-shadow:6px 6px 40px rgba(0,0,0,0.75),0 0 50px rgba(0,212,255,0.05)} #netMapOverlay::after{content:'';position:absolute;inset:0;pointer-events:none;z-index:1; background: linear-gradient(to right,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) top left / 18px 1px no-repeat, linear-gradient(to bottom,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) top left / 1px 18px no-repeat, linear-gradient(to right,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) top right / 18px 1px no-repeat, linear-gradient(to bottom,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) top right / 1px 18px no-repeat, linear-gradient(to right,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) bottom left / 18px 1px no-repeat, linear-gradient(to bottom,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) bottom left / 1px 18px no-repeat, linear-gradient(to right,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) bottom right / 18px 1px no-repeat, linear-gradient(to bottom,rgba(0,212,255,0.7),rgba(0,212,255,0.7)) bottom right / 1px 18px no-repeat} #netMapOverlay.nm-open{display:flex;animation:nmExplode 0.45s cubic-bezier(0.4,0,0.2,1) forwards} #netMapOverlay.nm-closing{animation:nmCollapse 0.3s cubic-bezier(0.4,0,0.2,1) forwards} @keyframes nmExplode{0%{transform:scale(0.04,0.06);opacity:0}60%{opacity:1}100%{transform:scale(1);opacity:1}} @keyframes nmCollapse{0%{transform:scale(1);opacity:1}100%{transform:scale(0.04,0.06);opacity:0}} #nmHeader{display:flex;align-items:center;justify-content:space-between;padding:7px 16px; flex-shrink:0;border-bottom:1px solid rgba(0,212,255,0.16);background:rgba(0,8,28,0.6);z-index:2;position:relative} #nmTitle{font-family:var(--font-display);font-size:0.62rem;letter-spacing:4px;color:var(--cyan);display:flex;align-items:center;gap:10px} #nmTitle .nm-pulse{width:6px;height:6px;border-radius:50%;background:var(--cyan);box-shadow:0 0 7px var(--cyan);animation:corePulse 1.5s infinite} #nmStats{font-family:var(--font-mono);font-size:0.58rem;color:var(--text-dim);display:flex;gap:16px} #nmStats span{color:var(--cyan)} #nmClose{background:none;border:1px solid rgba(0,212,255,0.3);color:var(--text-dim);font-family:var(--font-mono);font-size:0.56rem;padding:3px 10px;cursor:pointer;letter-spacing:2px;transition:all 0.2s} #nmClose:hover{border-color:var(--red);color:var(--red)} #nmCanvas{flex:1;display:block;z-index:2;position:relative} #nmLegend{display:flex;gap:16px;align-items:center;padding:5px 16px;flex-shrink:0; border-top:1px solid rgba(0,212,255,0.1);font-family:var(--font-mono);font-size:0.54rem; color:var(--text-dim);background:rgba(0,8,28,0.6);z-index:2;position:relative} .nm-leg-dot{width:7px;height:7px;border-radius:50%;display:inline-block;margin-right:4px;flex-shrink:0} #nmNodeInfo{position:absolute;pointer-events:none;z-index:10;background:rgba(0,8,30,0.95); border:1px solid rgba(0,212,255,0.4);padding:7px 11px;font-family:var(--font-mono); font-size:0.6rem;display:none;min-width:150px;box-shadow:0 0 18px rgba(0,212,255,0.12)} #nmNodeInfo .ni-title{color:var(--cyan);font-size:0.62rem;letter-spacing:2px;margin-bottom:3px} #nmNodeInfo .ni-row{color:var(--text-dim);margin:2px 0} /* ── SLEEP MODE ──────────────────────────────────────────────────────── */ #sleepOverlay{ position:fixed;inset:0;z-index:500;display:none; flex-direction:column;align-items:center;justify-content:center; background:rgba(0,2,10,0.94); backdrop-filter:blur(6px); } #sleepOverlay.active{display:flex} @keyframes sleepPulse{0%,100%{opacity:0.25;transform:scale(1)}50%{opacity:0.6;transform:scale(1.06)}} @keyframes sleepCoreGlow{0%,100%{box-shadow:0 0 30px rgba(0,212,255,0.15),0 0 60px rgba(0,212,255,0.05)}50%{box-shadow:0 0 50px rgba(0,212,255,0.3),0 0 100px rgba(0,212,255,0.1)}} .sleep-reactor{position:relative;width:120px;height:120px;margin-bottom:40px} .sleep-ring{position:absolute;border-radius:50%;border:1px solid rgba(0,212,255,0.2);top:50%;left:50%;transform:translate(-50%,-50%)} .sleep-ring.sr1{width:120px;height:120px;animation:spinRing 18s linear infinite;border-color:rgba(0,212,255,0.12)} .sleep-ring.sr2{width:85px;height:85px;animation:spinRing 12s linear infinite reverse;border-color:rgba(0,212,255,0.18)} .sleep-ring.sr3{width:52px;height:52px;animation:spinRing 8s linear infinite;border-color:rgba(0,80,160,0.3)} .sleep-core{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%); width:24px;height:24px;border-radius:50%; background:radial-gradient(circle,rgba(0,150,220,0.6) 0%,rgba(0,80,160,0.3) 60%,transparent 100%); animation:sleepCoreGlow 4s ease-in-out infinite,sleepPulse 4s ease-in-out infinite} .sleep-label{font-family:var(--font-display);font-size:0.6rem;letter-spacing:6px; color:rgba(0,212,255,0.35);animation:sleepPulse 4s ease-in-out infinite;margin-bottom:12px} .sleep-sub{font-family:var(--font-mono);font-size:0.55rem;letter-spacing:3px; color:rgba(0,212,255,0.2);animation:sleepPulse 4s ease-in-out infinite;animation-delay:0.5s} /* App dims on sleep */ #app.sleeping #mainLayout,#app.sleeping #topBar,#app.sleeping #bottomBar{ pointer-events:none; filter:brightness(0.08) saturate(0.3); transition:filter 1.2s ease; } #app.sleeping #sleepOverlay{display:flex} /* ── GUARDIAN MODE ────────────────────────────────────────────────── */ .guardian-event{display:flex;align-items:flex-start;gap:8px;padding:7px 10px;border-bottom:1px solid var(--panel-border);cursor:pointer} .guardian-event:hover{background:rgba(0,212,255,0.04)} .guardian-event.critical{border-left:3px solid var(--red)} .guardian-event.warning{border-left:3px solid #f5a623} .guardian-event.info{border-left:3px solid rgba(0,212,255,0.3)} .guardian-event.acked{opacity:0.45} .guardian-sev{font-family:var(--font-mono);font-size:0.5rem;padding:2px 4px;border-radius:2px;flex-shrink:0;letter-spacing:1px;margin-top:1px} .guardian-sev.critical{background:rgba(255,34,68,0.15);color:var(--red);border:1px solid rgba(255,34,68,0.3)} .guardian-sev.warning{background:rgba(245,166,35,0.12);color:#f5a623;border:1px solid rgba(245,166,35,0.3)} .guardian-sev.info{background:rgba(0,212,255,0.08);color:var(--cyan);border:1px solid rgba(0,212,255,0.2)} .guardian-msg{flex:1;font-size:0.62rem;line-height:1.4;color:var(--text)} .guardian-time{font-family:var(--font-mono);font-size:0.52rem;color:var(--text-dim);flex-shrink:0} .guardian-ai{font-size:0.6rem;color:rgba(0,212,255,0.6);margin-top:3px;font-style:italic} #bb-guardian-dot.all-clear{background:var(--green);box-shadow:0 0 5px var(--green)} #bb-guardian-dot.warning{background:#f5a623;box-shadow:0 0 5px #f5a623} #bb-guardian-dot.critical{background:var(--red);box-shadow:0 0 5px var(--red);animation:pulse 1.2s ease-in-out infinite} .guardian-ack-btn{background:none;border:1px solid var(--panel-border);color:var(--text-dim);padding:1px 5px;border-radius:2px;font-size:0.5rem;cursor:pointer;font-family:var(--font-mono);letter-spacing:1px;flex-shrink:0} .guardian-ack-btn:hover{color:var(--cyan);border-color:var(--cyan)} /* ── VISION PROTOCOL — screenshot lightbox ───────────────────────── */ #vision-lightbox{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.88);z-index:9999;flex-direction:column;align-items:center;justify-content:flex-start;padding:20px;overflow-y:auto} #vision-lightbox.open{display:flex} #vision-lb-header{width:100%;max-width:960px;display:flex;align-items:center;gap:10px;margin-bottom:12px} #vision-lb-title{font-family:var(--font-display);font-size:0.65rem;letter-spacing:2px;color:var(--cyan);flex:1} #vision-lb-close{background:none;border:1px solid var(--panel-border);color:var(--text-dim);padding:3px 10px;border-radius:3px;cursor:pointer;font-family:var(--font-display);font-size:0.6rem} #vision-lb-img{max-width:960px;width:100%;border:1px solid var(--panel-border);border-radius:4px;margin-bottom:12px} #vision-lb-analysis{max-width:960px;width:100%;background:rgba(0,212,255,0.04);border:1px solid var(--panel-border);border-radius:4px;padding:14px 16px;font-size:0.65rem;line-height:1.7;color:var(--text);white-space:pre-wrap} #vision-lb-spinner{color:var(--cyan);font-family:var(--font-display);font-size:0.65rem;letter-spacing:2px;animation:pulse 1.5s ease-in-out infinite;margin:30px auto} /* ── COMMS PROTOCOL — email triage cards ─────────────────────────── */ .comms-card{background:rgba(0,212,255,0.04);border:1px solid var(--panel-border);border-radius:var(--r);margin-bottom:7px;overflow:hidden} .comms-card-head{display:flex;align-items:center;gap:7px;padding:7px 10px;cursor:pointer;user-select:none} .comms-card-head:hover{background:rgba(0,212,255,0.06)} .comms-card-subject{font-family:var(--font-display);font-size:0.58rem;letter-spacing:1px;color:var(--cyan);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .comms-card-cat{font-family:var(--font-mono);font-size:0.52rem;padding:2px 5px;border-radius:2px;flex-shrink:0;text-transform:uppercase;letter-spacing:1px} .comms-card-cat.urgent{color:#ff2244;border:1px solid rgba(255,34,68,0.4);animation:pulse 1.5s ease-in-out infinite} .comms-card-cat.action{color:#ffd700;border:1px solid rgba(255,215,0,0.4)} .comms-card-cat.reply{color:var(--cyan);border:1px solid rgba(0,212,255,0.3)} .comms-card-cat.meeting{color:#a78bfa;border:1px solid rgba(167,139,250,0.4)} .comms-card-cat.info{color:var(--text-dim);border:1px solid rgba(255,255,255,0.1)} .comms-card-cat.promo,.comms-card-cat.spam{color:rgba(255,255,255,0.25);border:1px solid rgba(255,255,255,0.08)} .comms-card-body{display:none;padding:0 10px 10px;border-top:1px solid var(--panel-border)} .comms-card.open .comms-card-body{display:block} .comms-card-from{font-family:var(--font-mono);font-size:0.55rem;color:var(--text-dim);margin:7px 0 3px} .comms-card-summary{font-size:0.62rem;line-height:1.5;color:var(--text);margin:5px 0} .comms-draft-label{font-family:var(--font-display);font-size:0.5rem;letter-spacing:2px;color:var(--text-dim);margin:8px 0 4px} .comms-draft{font-size:0.6rem;line-height:1.5;color:rgba(0,212,255,0.7);background:rgba(0,212,255,0.04);border:1px solid rgba(0,212,255,0.15);border-radius:3px;padding:7px 9px;white-space:pre-wrap;max-height:160px;overflow-y:auto} .comms-empty{text-align:center;padding:24px 10px;font-family:var(--font-mono);font-size:0.6rem;color:var(--text-dim);letter-spacing:1px} .comms-header-bar{display:flex;gap:5px;margin-bottom:7px;flex-wrap:wrap} .comms-filter-btn{flex:1;min-width:50px;background:rgba(0,212,255,0.05);border:1px solid var(--panel-border);border-radius:3px;padding:4px 6px;color:var(--text-dim);font-family:var(--font-display);font-size:0.5rem;letter-spacing:1px;cursor:pointer;text-align:center} .comms-filter-btn.active,.comms-filter-btn:hover{background:rgba(0,212,255,0.12);color:var(--cyan);border-color:var(--cyan)} .comms-triage-btn{width:100%;background:rgba(0,212,255,0.06);border:1px solid var(--panel-border);border-radius:4px;padding:5px;color:var(--cyan);font-family:var(--font-display);font-size:0.52rem;letter-spacing:2px;cursor:pointer;margin-bottom:7px} .comms-triage-btn:hover{background:rgba(0,212,255,0.12)} .comms-prio{font-family:var(--font-mono);font-size:0.52rem;color:var(--text-dim);flex-shrink:0} .comms-section-label{font-family:var(--font-display);font-size:0.5rem;letter-spacing:2px;color:var(--text-dim);border-bottom:1px solid var(--panel-border);padding:6px 0 4px;margin:8px 0 6px} .comms-compose-btn{width:100%;background:rgba(0,212,255,0.08);border:1px solid rgba(0,212,255,0.3);border-radius:4px;padding:5px;color:var(--cyan);font-family:var(--font-display);font-size:0.52rem;letter-spacing:2px;cursor:pointer;margin-bottom:5px} .comms-compose-btn:hover{background:rgba(0,212,255,0.15)} .comms-send-btn{flex:1;background:rgba(0,212,255,0.1);border:1px solid rgba(0,212,255,0.4);border-radius:3px;padding:3px 6px;color:var(--cyan);font-family:var(--font-display);font-size:0.5rem;letter-spacing:1px;cursor:pointer} .comms-send-btn:hover{background:rgba(0,212,255,0.2)} .comms-send-btn:disabled{opacity:0.4;cursor:not-allowed} .comms-outbox-card{background:rgba(0,212,255,0.03);border:1px solid rgba(0,212,255,0.1);border-radius:3px;padding:6px 9px;margin-bottom:5px} .comms-outbox-to{font-family:var(--font-mono);font-size:0.52rem;color:var(--text-dim)} .comms-outbox-subj{font-family:var(--font-display);font-size:0.55rem;color:var(--cyan);margin:2px 0} .comms-outbox-status{font-family:var(--font-mono);font-size:0.48rem;padding:1px 4px;border-radius:2px} .comms-outbox-status.sent{color:#00ff88;border:1px solid rgba(0,255,136,0.3)} .comms-outbox-status.failed{color:#ff2244;border:1px solid rgba(255,34,68,0.3)} .comms-outbox-status.queued{color:#ffd700;border:1px solid rgba(255,215,0,0.3)} /* compose modal */ .comms-compose-modal{position:fixed;inset:0;background:rgba(0,0,0,0.7);display:flex;align-items:center;justify-content:center;z-index:9000} .comms-compose-inner{background:#0a0e14;border:1px solid var(--cyan);border-radius:6px;padding:16px;width:min(90vw,480px);max-height:80vh;overflow-y:auto} .comms-compose-title{font-family:var(--font-display);font-size:0.65rem;letter-spacing:2px;color:var(--cyan);margin-bottom:12px} .comms-compose-field{width:100%;background:rgba(0,212,255,0.04);border:1px solid var(--panel-border);border-radius:3px;padding:6px 8px;color:var(--text);font-family:var(--font-mono);font-size:0.6rem;box-sizing:border-box;margin-bottom:7px} .comms-compose-field:focus{outline:none;border-color:var(--cyan)} .comms-compose-actions{display:flex;gap:6px;margin-top:8px} /* ── DIRECTIVES HUD ──────────────────────────────────────────────── */ .dir-card{background:rgba(0,212,255,0.03);border:1px solid var(--panel-border);border-radius:var(--r);margin-bottom:7px;overflow:hidden} .dir-card-head{display:flex;align-items:center;gap:8px;padding:8px 10px;cursor:pointer;user-select:none} .dir-card-head:hover{background:rgba(0,212,255,0.06)} .dir-card-title{font-family:var(--font-display);font-size:0.6rem;letter-spacing:1px;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .dir-card-body{display:none;padding:0 10px 10px;border-top:1px solid var(--panel-border)} .dir-card.open .dir-card-body{display:block} .dir-progress-bar{height:5px;background:rgba(255,255,255,0.08);border-radius:3px;margin:6px 0} .dir-progress-fill{height:100%;border-radius:3px;transition:width 0.4s ease} .dir-kr-row{display:flex;align-items:center;gap:6px;margin:4px 0;font-family:var(--font-mono);font-size:0.52rem;color:var(--text-dim)} .dir-kr-bar{flex:1;height:3px;background:rgba(255,255,255,0.06);border-radius:2px} .dir-kr-fill{height:100%;border-radius:2px;background:rgba(0,212,255,0.5)} .dir-admin-btn{width:100%;background:rgba(0,212,255,0.06);border:1px solid rgba(0,212,255,0.3);border-radius:4px;padding:5px;color:var(--cyan);font-family:var(--font-display);font-size:0.52rem;letter-spacing:2px;cursor:pointer;margin-bottom:7px} .dir-admin-btn:hover{background:rgba(0,212,255,0.12)} /* ── MISSION OPS HUD ─────────────────────────────────────────────── */ .mission-card{background:rgba(0,212,255,0.03);border:1px solid var(--panel-border);border-radius:var(--r);margin-bottom:7px;overflow:hidden} .mission-card-head{display:flex;align-items:center;gap:8px;padding:8px 10px;cursor:pointer;user-select:none} .mission-card-head:hover{background:rgba(0,212,255,0.06)} .mission-card-name{font-family:var(--font-display);font-size:0.6rem;letter-spacing:1px;color:var(--cyan);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .mission-card-trigger{font-family:var(--font-mono);font-size:0.5rem;padding:2px 5px;border-radius:2px;color:var(--text-dim);border:1px solid rgba(255,255,255,0.1)} .mission-card-body{display:none;padding:0 10px 10px;border-top:1px solid var(--panel-border)} .mission-card.open .mission-card-body{display:block} .mission-run-bar{display:flex;gap:5px;margin-top:8px} .mission-run-btn{flex:1;background:rgba(0,212,255,0.08);border:1px solid rgba(0,212,255,0.3);border-radius:3px;padding:3px 6px;color:var(--cyan);font-family:var(--font-display);font-size:0.5rem;letter-spacing:1px;cursor:pointer} .mission-run-btn:hover{background:rgba(0,212,255,0.15)} .mission-run-btn:disabled{opacity:0.4;cursor:not-allowed} .mission-run-item{display:flex;align-items:center;gap:6px;padding:3px 0;border-bottom:1px solid rgba(255,255,255,0.04);font-family:var(--font-mono);font-size:0.52rem} .mission-run-status.done{color:#00ff88} .mission-run-status.failed{color:#ff2244} .mission-run-status.running{color:#ffd700;animation:pulse 1.5s ease-in-out infinite} .mission-new-btn{width:100%;background:rgba(0,212,255,0.06);border:1px solid rgba(0,212,255,0.3);border-radius:4px;padding:5px;color:var(--cyan);font-family:var(--font-display);font-size:0.52rem;letter-spacing:2px;cursor:pointer;margin-bottom:7px} .mission-new-btn:hover{background:rgba(0,212,255,0.12)} /* ── CLEARANCE PROTOCOL ──────────────────────────────────────────── */ #clearance-banner{display:none;background:rgba(255,34,68,0.08);border:1px solid rgba(255,34,68,0.4);border-radius:var(--r);padding:6px 10px;margin:0 0 8px;font-family:var(--font-display);font-size:0.55rem;letter-spacing:1px;color:#ff6680;animation:borderPulse 2s ease-in-out infinite} @keyframes borderPulse{0%,100%{border-color:rgba(255,34,68,0.4)}50%{border-color:rgba(255,34,68,0.9)}} #clearance-banner.active{display:flex;align-items:center;gap:8px} #clearance-banner .clr-count{background:rgba(255,34,68,0.3);border-radius:3px;padding:1px 5px;font-size:0.6rem;color:#ff2244} #clearance-banner .clr-view{margin-left:auto;cursor:pointer;color:#ff6680;text-decoration:underline} .clr-card{background:rgba(255,34,68,0.04);border:1px solid rgba(255,34,68,0.3);border-radius:var(--r);margin-bottom:7px;overflow:hidden} .clr-card-head{display:flex;align-items:center;gap:8px;padding:8px 10px;cursor:pointer;user-select:none} .clr-card-head:hover{background:rgba(255,34,68,0.06)} .clr-card-type{font-family:var(--font-display);font-size:0.6rem;letter-spacing:1px;flex:1;color:#ff8899} .clr-card-risk{font-family:var(--font-mono);font-size:0.5rem;padding:2px 5px;border-radius:2px;border:1px solid} .clr-card-risk.critical{color:#ff2244;border-color:rgba(255,34,68,0.5)} .clr-card-risk.high{color:#ffd700;border-color:rgba(255,215,0,0.4)} .clr-card-risk.medium{color:#ff9900;border-color:rgba(255,153,0,0.4)} .clr-card-body{display:none;padding:8px 10px 10px;border-top:1px solid rgba(255,34,68,0.2)} .clr-card.open .clr-card-body{display:block} .clr-card-desc{font-family:var(--font-mono);font-size:0.55rem;color:var(--text-dim);margin-bottom:8px;line-height:1.5;white-space:pre-wrap} .clr-action-bar{display:flex;gap:6px;margin-top:8px} .clr-approve-btn{flex:1;background:rgba(0,255,136,0.08);border:1px solid rgba(0,255,136,0.4);border-radius:3px;padding:4px 8px;color:#00ff88;font-family:var(--font-display);font-size:0.5rem;letter-spacing:2px;cursor:pointer} .clr-approve-btn:hover{background:rgba(0,255,136,0.18)} .clr-deny-btn{flex:1;background:rgba(255,34,68,0.08);border:1px solid rgba(255,34,68,0.4);border-radius:3px;padding:4px 8px;color:#ff2244;font-family:var(--font-display);font-size:0.5rem;letter-spacing:2px;cursor:pointer} .clr-deny-btn:hover{background:rgba(255,34,68,0.18)} .clr-history-row{display:flex;align-items:center;gap:6px;padding:3px 0;border-bottom:1px solid rgba(255,255,255,0.04);font-family:var(--font-mono);font-size:0.52rem;color:var(--text-dim)} .clr-status-approved{color:#00ff88}.clr-status-denied{color:#ff2244}.clr-status-pending{color:#ffd700}.clr-status-expired{color:rgba(255,255,255,0.3)} .clr-rule-row{display:flex;align-items:center;gap:6px;padding:5px 0;border-bottom:1px solid rgba(255,255,255,0.04);font-family:var(--font-mono);font-size:0.52rem} .clr-rule-type{flex:1;color:var(--cyan)} .clr-rule-toggle{cursor:pointer;padding:2px 6px;border-radius:2px;font-size:0.48rem;border:1px solid} .clr-rule-enabled{color:#00ff88;border-color:rgba(0,255,136,0.4)} .clr-rule-disabled{color:rgba(255,255,255,0.3);border-color:rgba(255,255,255,0.15)} .clr-admin-btn{width:100%;background:rgba(255,34,68,0.06);border:1px solid rgba(255,34,68,0.3);border-radius:4px;padding:5px;color:#ff6680;font-family:var(--font-display);font-size:0.52rem;letter-spacing:2px;cursor:pointer;margin-bottom:7px} .clr-admin-btn:hover{background:rgba(255,34,68,0.12)} /* ── INTEL PROTOCOL — research result cards ──────────────────────── */ .intel-card{background:rgba(0,212,255,0.04);border:1px solid var(--panel-border);border-radius:var(--r);margin-bottom:8px;overflow:hidden} .intel-card-head{display:flex;align-items:center;gap:8px;padding:8px 10px;cursor:pointer;user-select:none} .intel-card-head:hover{background:rgba(0,212,255,0.06)} .intel-card-query{font-family:var(--font-display);font-size:0.6rem;letter-spacing:1px;color:var(--cyan);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .intel-card-status{font-family:var(--font-mono);font-size:0.55rem;padding:2px 6px;border-radius:2px;flex-shrink:0} .intel-card-status.running{color:#ffd700;border:1px solid rgba(255,215,0,0.4);animation:pulse 1.5s ease-in-out infinite} .intel-card-status.done{color:var(--green);border:1px solid rgba(0,255,136,0.3)} .intel-card-status.failed{color:var(--red);border:1px solid rgba(255,34,68,0.3)} .intel-card-body{display:none;padding:0 10px 10px;border-top:1px solid var(--panel-border)} .intel-card.open .intel-card-body{display:block} .intel-card-body .synthesis{font-size:0.65rem;line-height:1.6;color:var(--text);margin:8px 0;white-space:pre-wrap} .intel-sources{margin-top:8px} .intel-source{font-size:0.58rem;color:var(--text-dim);padding:2px 0;border-bottom:1px solid rgba(0,212,255,0.06)} .intel-source a{color:var(--cyan2);text-decoration:none} .intel-source a:hover{text-decoration:underline} .intel-empty{text-align:center;padding:24px 10px;font-family:var(--font-mono);font-size:0.6rem;color:var(--text-dim);letter-spacing:1px} .intel-new-btn{width:100%;background:rgba(0,212,255,0.06);border:1px solid var(--panel-border);border-radius:4px;padding:5px;color:var(--cyan);font-family:var(--font-display);font-size:0.55rem;letter-spacing:2px;cursor:pointer;margin-bottom:8px} .intel-new-btn:hover{background:rgba(0,212,255,0.12)} @keyframes pulse{0%,100%{opacity:1}50%{opacity:0.4}}