/* ========================================================================== CARINHA DASHBOARD · DESIGN SYSTEM FUTURISTA & GLASSMORPHISM Central de Controle Robótica, Telemetria & IA (Orange Pi Zero 3 + Galaxy S10) ========================================================================== */ @import url('https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap'); :root { color-scheme: dark; --fundo: #070b12; --fundo-grad: radial-gradient(circle at 50% 0%, #101e33 0%, #070b12 70%); --painel: rgba(14, 23, 38, 0.72); --painel-card: rgba(16, 27, 44, 0.82); --painel-hover: rgba(23, 38, 60, 0.9); --painel-input: rgba(9, 15, 26, 0.85); --borda: rgba(65, 96, 128, 0.32); --borda-brilho: rgba(92, 214, 255, 0.45); --borda-hover: rgba(92, 214, 255, 0.55); --texto: #f0f6fc; --texto-medio: #c4d6e6; --fraco: #8ba2b9; --muito-fraco: #50677e; --ciano: #5cd6ff; --ciano-glow: rgba(92, 214, 255, 0.35); --ciano-escuro: #0f394c; --azul: #3b82f6; --roxo: #a855f7; --verde: #10b981; --verde-glow: rgba(16, 185, 129, 0.3); --amarelo: #f59e0b; --vermelho: #f43f5e; --vermelho-bg: rgba(244, 63, 94, 0.15); --raio-sm: 8px; --raio-md: 12px; --raio-lg: 16px; --raio-xl: 22px; --sombra: 0 10px 30px -8px rgba(0, 0, 0, 0.65), 0 0 1px 1px rgba(255, 255, 255, 0.06); --sombra-card: 0 8px 24px -6px rgba(0, 0, 0, 0.5), inset 0 1px 0 0 rgba(255, 255, 255, 0.08); --sombra-glow: 0 0 24px -4px var(--ciano-glow); font: 15px/1.6 'Outfit', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; background: var(--fundo); color: var(--texto); } *, *::before, *::after { box-sizing: border-box; } body { margin: 0; padding: 0; background: var(--fundo); background-image: var(--fundo-grad); background-attachment: fixed; color: var(--texto); min-height: 100vh; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; } body.dashboard { display: block; } /* ========================================================================== TIPOGRAFIA & LINKS ========================================================================== */ h1, h2, h3, h4 { color: var(--texto); font-weight: 700; letter-spacing: -0.025em; margin: 0 0 10px; } h1 { font-size: 28px; line-height: 1.2; background: linear-gradient(135deg, #ffffff 30%, var(--ciano) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; display: inline-block; } h2 { font-size: 19px; display: flex; align-items: center; gap: 8px; color: var(--texto); } h3 { font-size: 16px; font-weight: 600; color: var(--texto-medio); } p { color: var(--fraco); margin: 6px 0 14px; max-width: 85ch; } a { color: var(--ciano); text-decoration: none; transition: color 0.15s ease, text-shadow 0.15s ease; } a:hover { color: #8be4ff; text-shadow: 0 0 8px var(--ciano-glow); } small, .sub, .texto-fraco, .notice, .intro { color: var(--fraco); font-size: 13.5px; line-height: 1.5; } .code-label, code, pre { font-family: 'JetBrains Mono', Consolas, monospace; } pre { background: rgba(5, 9, 16, 0.7); border: 1px solid var(--borda); border-radius: var(--raio-md); padding: 14px; font-size: 12.5px; color: #a5c7e5; white-space: pre-wrap; overflow-wrap: anywhere; } /* ========================================================================== FORMULÁRIOS & BOTÕES MODERNOS ========================================================================== */ button, input, select, textarea { font-family: inherit; font-size: 14px; } button, .file { display: inline-flex; align-items: center; justify-content: center; gap: 8px; border: 1px solid var(--borda); border-radius: var(--raio-sm); padding: 9px 16px; background: rgba(22, 36, 56, 0.7); color: var(--texto); cursor: pointer; font-weight: 600; letter-spacing: 0.01em; transition: all 0.18s cubic-bezier(0.16, 1, 0.3, 1); box-shadow: 0 2px 6px rgba(0, 0, 0, 0.25); backdrop-filter: blur(8px); } button:hover:enabled, .file:hover { border-color: var(--borda-hover); background: rgba(33, 54, 82, 0.85); color: #ffffff; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.35); } button:active:enabled { transform: translateY(0); } button:disabled { opacity: 0.45; cursor: not-allowed; filter: grayscale(0.5); } button.primary, button.principal, button.on { background: linear-gradient(135deg, #4ac8f5 0%, #2563eb 100%); border-color: rgba(92, 214, 255, 0.5); color: #04121d; font-weight: 700; box-shadow: 0 4px 14px var(--ciano-glow); } button.primary:hover:enabled, button.principal:hover:enabled, button.on:hover:enabled { background: linear-gradient(135deg, #70d6ff 0%, #3b82f6 100%); box-shadow: 0 6px 20px rgba(92, 214, 255, 0.5); color: #020c14; } button.danger, button.stop, .danger { background: linear-gradient(135deg, #5c1825 0%, #881337 100%); border-color: #f43f5e; color: #ffe4e6; box-shadow: 0 4px 14px rgba(244, 63, 94, 0.3); } button.danger:hover:enabled, button.stop:hover:enabled { background: linear-gradient(135deg, #881337 0%, #be123c 100%); color: #ffffff; } button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible, a:focus-visible { outline: 2px solid var(--ciano); outline-offset: 2px; } input:not([type=checkbox]):not([type=range]):not([type=color]):not([type=file]), select, textarea { width: 100%; background: var(--painel-input); color: var(--texto); border: 1px solid var(--borda); border-radius: var(--raio-sm); padding: 10px 14px; margin: 6px 0 14px; transition: border-color 0.2s, box-shadow 0.2s, background-color 0.2s; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3); } input:focus, select:focus, textarea:focus { border-color: var(--ciano); box-shadow: 0 0 0 3px rgba(92, 214, 255, 0.15), inset 0 1px 2px rgba(0, 0, 0, 0.4); background: rgba(12, 20, 34, 0.95); } input[type=range] { accent-color: var(--ciano); width: 100%; height: 6px; background: rgba(40, 60, 85, 0.5); border-radius: 4px; cursor: pointer; } input[type=checkbox] { accent-color: var(--ciano); width: 18px; height: 18px; cursor: pointer; border-radius: 4px; } label { color: var(--texto-medio); font-size: 13.5px; font-weight: 500; display: block; } details { border-top: 1px solid var(--borda); padding-top: 14px; margin-top: 16px; background: transparent; } summary { cursor: pointer; color: var(--texto-medio); font-weight: 600; padding: 6px 0; user-select: none; display: flex; align-items: center; gap: 8px; } summary:hover { color: var(--ciano); } /* ========================================================================== CARDS & CONTAINERS GLASSMORPHISM ========================================================================== */ .card, .cartao, article { background: var(--painel-card); backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px); border: 1px solid var(--borda); border-radius: var(--raio-lg); padding: 24px; box-shadow: var(--sombra-card); transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease; position: relative; overflow: hidden; } .card::before, .cartao::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, transparent, rgba(92, 214, 255, 0.25), transparent); pointer-events: none; } .card:hover, .cartao:hover { border-color: rgba(92, 214, 255, 0.38); } .grid, .grade { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 22px; } .full { grid-column: 1 / -1; } .toolbar, .actions, .linha { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; } .toolbar { margin: 18px 0; } .badge, .online, .connection { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 600; border-radius: 9999px; padding: 5px 12px; background: rgba(25, 42, 62, 0.8); color: var(--texto-medio); border: 1px solid var(--borda); backdrop-filter: blur(6px); } .badge.ativo, .online.ativo, .connection.ativo { background: rgba(16, 185, 129, 0.18); color: #34d399; border-color: rgba(16, 185, 129, 0.4); box-shadow: 0 0 12px rgba(16, 185, 129, 0.25); } .badge.offline, .badge.danger { background: var(--vermelho-bg); color: #fb7185; border-color: rgba(244, 63, 94, 0.35); } .badge-dot { width: 8px; height: 8px; border-radius: 50%; background: currentColor; display: inline-block; box-shadow: 0 0 8px currentColor; } /* ========================================================================== APP SIDEBAR & NAVEGAÇÃO ========================================================================== */ .app-sidebar { position: fixed; inset: 0 auto 0 0; width: 250px; background: rgba(9, 15, 26, 0.92); backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px); border-right: 1px solid var(--borda); display: flex; flex-direction: column; padding: 24px 16px; z-index: 80; box-shadow: 4px 0 24px rgba(0, 0, 0, 0.4); } .brand { display: flex; align-items: center; gap: 14px; text-decoration: none; color: var(--texto); font-size: 22px; font-weight: 800; letter-spacing: -0.03em; padding: 4px 8px 24px; border-bottom: 1px solid rgba(56, 82, 110, 0.25); margin-bottom: 16px; } .brand-face { width: 38px; height: 32px; position: relative; display: flex; justify-content: center; align-items: center; gap: 6px; background: rgba(15, 30, 48, 0.8); border: 1px solid var(--borda-brilho); border-radius: 10px; box-shadow: 0 0 16px var(--ciano-glow); } .brand-face i { width: 7px; height: 12px; background: var(--ciano); border-radius: 4px; box-shadow: 0 0 8px var(--ciano); animation: carinhaBlink 4s infinite; } .brand-face::after { content: ""; position: absolute; bottom: 5px; width: 12px; height: 4px; border-bottom: 2px solid var(--ciano); border-radius: 50%; } @keyframes carinhaBlink { 0%, 94%, 100% { transform: scaleY(1); } 97% { transform: scaleY(0.1); } } .nav-section-title { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.1em; color: var(--muito-fraco); padding: 12px 12px 6px; } .app-sidebar nav { display: flex; flex-direction: column; gap: 5px; flex: 1; overflow-y: auto; } .app-sidebar nav a { display: flex; align-items: center; gap: 12px; padding: 11px 14px; border-radius: var(--raio-md); text-decoration: none; color: var(--texto-medio); font-size: 14px; font-weight: 500; border: 1px solid transparent; transition: all 0.16s ease; } .app-sidebar nav a:hover { background: rgba(28, 48, 74, 0.45); color: #ffffff; border-color: rgba(92, 214, 255, 0.2); transform: translateX(3px); } .app-sidebar nav a[aria-current="page"] { color: var(--ciano); background: linear-gradient(90deg, rgba(20, 50, 75, 0.8) 0%, rgba(14, 32, 50, 0.4) 100%); border-color: rgba(92, 214, 255, 0.45); font-weight: 700; box-shadow: inset 3px 0 0 var(--ciano), 0 4px 14px rgba(0, 0, 0, 0.25); } .app-sidebar nav svg { width: 20px; height: 20px; flex-shrink: 0; stroke-width: 1.8; } .sidebar-footer { margin-top: auto; border-top: 1px solid rgba(56, 82, 110, 0.25); padding: 16px 8px 0; font-size: 12px; color: var(--fraco); display: flex; flex-direction: column; gap: 4px; } .sidebar-footer strong { color: var(--texto-medio); font-weight: 600; } /* ========================================================================== APP FRAME & TOPBAR ========================================================================== */ .app-frame { margin-left: 250px; min-width: 0; display: flex; flex-direction: column; min-height: 100vh; } .app-topbar { height: 68px; border-bottom: 1px solid var(--borda); display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 0 36px; background: rgba(8, 14, 24, 0.75); backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px); position: sticky; top: 0; z-index: 60; } .topbar-left { display: flex; align-items: center; gap: 16px; } .topbar-telemetry { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; } .app-content { padding: 32px 36px 64px; max-width: 1650px; width: 100%; margin: 0 auto; min-width: 0; flex: 1; } /* ========================================================================== OVERVIEW & DASHBOARD ESPECÍFICO ========================================================================== */ .overview-grid { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(280px, 1fr); gap: 24px; margin-top: 24px; } .overview-face-card { display: flex; flex-direction: column; background: linear-gradient(180deg, rgba(17, 30, 48, 0.85) 0%, rgba(10, 18, 30, 0.95) 100%); } .overview-face { height: 320px; border: 1px solid var(--borda); border-radius: var(--raio-md); background: #000000; box-shadow: inset 0 0 40px rgba(0, 0, 0, 0.8), 0 0 20px rgba(92, 214, 255, 0.12); margin-bottom: 16px; } .metrics { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } .metric { padding: 18px 20px; display: flex; flex-direction: column; justify-content: space-between; } .metric strong { display: block; font-size: 26px; font-weight: 700; line-height: 1.2; margin: 8px 0; font-family: 'JetBrains Mono', 'Outfit', sans-serif; color: #ffffff; } .metric p { margin: 0; font-size: 13px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: var(--fraco); } .quick-links { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 18px; margin-top: 24px; } .quick-links a.card { text-decoration: none; transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1); } .quick-links a.card:hover { transform: translateY(-3px); border-color: var(--ciano); box-shadow: 0 12px 28px rgba(0, 0, 0, 0.4), 0 0 20px var(--ciano-glow); } .quick-links h2 { color: var(--ciano); font-size: 17px; margin-bottom: 6px; } /* ========================================================================== PAINEL DE CÂMERA & ROSTO ========================================================================== */ .supervisao { display: grid; grid-template-columns: 1.2fr 0.8fr; gap: 24px; margin-top: 20px; } .cabecalho { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; } .visao { position: relative; width: 100%; aspect-ratio: 16 / 10; background: #020509; border: 1px solid var(--borda); border-radius: var(--raio-md); overflow: hidden; display: flex; align-items: center; justify-content: center; box-shadow: inset 0 0 30px rgba(0, 0, 0, 0.9); } .visao video, .visao img { width: 100%; height: 100%; object-fit: cover; } .hud-overlay { position: absolute; inset: 0; pointer-events: none; border: 1px solid rgba(92, 214, 255, 0.2); display: flex; flex-direction: column; justify-content: space-between; padding: 12px; } .hud-reticle { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 80px; height: 80px; border: 1px dashed rgba(92, 214, 255, 0.4); border-radius: 50%; } .sensores { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin: 16px 0; } .sensores meter { width: 100%; height: 10px; border-radius: 6px; margin-top: 6px; } .rosto-preview { width: 100%; height: 220px; border: 1px solid var(--borda); border-radius: var(--raio-md); background: #000000; margin: 14px 0 6px; } /* Cores & Olhos */ .swatch { width: 34px; height: 34px; border-radius: 8px; padding: 0; border: 2px solid rgba(255, 255, 255, 0.2); cursor: pointer; transition: transform 0.15s, border-color 0.15s, box-shadow 0.15s; } .swatch:hover { transform: scale(1.15); box-shadow: 0 0 12px currentColor; } .swatch.on { border-color: #ffffff; transform: scale(1.12); box-shadow: 0 0 16px currentColor; } input[type=color] { width: 44px; height: 36px; padding: 0; border: 1px solid var(--borda); background: transparent; border-radius: 8px; cursor: pointer; } .olho { display: flex; align-items: center; gap: 10px; margin-top: 14px; } .previa { display: flex; gap: 14px; margin-top: 14px; justify-content: center; padding: 16px; background: #03070c; border-radius: var(--raio-md); border: 1px solid var(--borda); } .bolha { width: 36px; height: 52px; background: var(--ciano); border-radius: 18px; box-shadow: 0 0 20px var(--ciano); } /* ========================================================================== CONVERSA (CHAT MODERNO IA) ========================================================================== */ .chat-container { display: flex; flex-direction: column; gap: 16px; } .chat-history { display: flex; flex-direction: column; gap: 14px; max-height: 480px; overflow-y: auto; padding: 16px; background: rgba(6, 11, 20, 0.7); border: 1px solid var(--borda); border-radius: var(--raio-lg); scroll-behavior: smooth; } .chat-msg { display: flex; gap: 12px; max-width: 82%; animation: fadeInMsg 0.22s ease-out; } @keyframes fadeInMsg { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } .chat-msg.user { align-self: flex-end; flex-direction: row-reverse; } .chat-avatar { width: 36px; height: 36px; border-radius: 10px; display: grid; place-items: center; font-weight: 700; font-size: 15px; flex-shrink: 0; } .chat-msg.assistant .chat-avatar { background: linear-gradient(135deg, #102a45 0%, #1e4976 100%); border: 1px solid var(--ciano); color: var(--ciano); box-shadow: 0 0 10px var(--ciano-glow); } .chat-msg.user .chat-avatar { background: linear-gradient(135deg, #2563eb 0%, #7c3aed 100%); color: #ffffff; } .chat-bubble { padding: 12px 16px; border-radius: 14px; font-size: 14.5px; line-height: 1.55; position: relative; } .chat-msg.assistant .chat-bubble { background: rgba(18, 30, 48, 0.9); border: 1px solid rgba(92, 214, 255, 0.25); color: #f1f7fd; border-top-left-radius: 4px; } .chat-msg.user .chat-bubble { background: linear-gradient(135deg, #1d4ed8 0%, #2563eb 100%); color: #ffffff; border-top-right-radius: 4px; box-shadow: 0 4px 14px rgba(37, 99, 235, 0.3); } .chat-badge { display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; border-radius: 12px; font-size: 11px; font-weight: 600; background: rgba(92, 214, 255, 0.15); color: var(--ciano); border: 1px solid rgba(92, 214, 255, 0.3); margin-top: 6px; cursor: pointer; transition: background 0.15s; } .chat-badge:hover { background: rgba(92, 214, 255, 0.3); } .chat-suggestions { display: flex; gap: 8px; flex-wrap: wrap; margin: 10px 0; } .chat-chip { padding: 6px 12px; border-radius: 20px; background: rgba(22, 38, 60, 0.6); border: 1px solid var(--borda); color: var(--texto-medio); font-size: 12.5px; cursor: pointer; transition: all 0.16s ease; } .chat-chip:hover { border-color: var(--ciano); color: #ffffff; background: rgba(30, 55, 85, 0.8); transform: translateY(-1px); } .chat-input-bar { display: flex; gap: 10px; align-items: center; } /* ========================================================================== EMOJIS & BIBLIOTECA ========================================================================== */ .library-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 20px; } .emoji-swatch { font: 44px/1.2 sans-serif; background: #03070c; border-radius: var(--raio-md); text-align: center; padding: 20px; margin-bottom: 14px; border: 1px solid var(--borda); box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.8); } .dialog-overlay { position: fixed; inset: 0; background: rgba(2, 6, 12, 0.85); backdrop-filter: blur(8px); display: grid; place-items: center; padding: 20px; z-index: 100; } .dialog-overlay[hidden] { display: none; } .dialog-card { background: #0f1c2c; border: 1px solid var(--borda-hover); border-radius: var(--raio-xl); max-width: 640px; width: 100%; padding: 28px; max-height: 90vh; overflow-y: auto; box-shadow: 0 24px 60px rgba(0, 0, 0, 0.8), 0 0 30px var(--ciano-glow); } /* ========================================================================== BRAÇO ROBÓTICO & SERVOS ========================================================================== */ .arm { filter: drop-shadow(0 0 12px rgba(92, 214, 255, 0.15)); } /* ========================================================================== RESPONSIVIDADE ========================================================================== */ @media (max-width: 1150px) { .app-content { padding: 24px; } .overview-grid, .supervisao, .split { grid-template-columns: 1fr; } .app-topbar { padding: 0 24px; } } @media (max-width: 768px) { .app-sidebar { transform: translateX(-100%); transition: transform 0.22s cubic-bezier(0.16, 1, 0.3, 1); } .menu-open .app-sidebar { transform: translateX(0); } .app-frame { margin-left: 0; } .menu-button { display: inline-flex !important; padding: 8px 12px; font-size: 18px; } .app-topbar { padding: 0 16px; height: 60px; } .topbar-telemetry { display: none; } .app-content { padding: 18px 14px 48px; } .metrics { grid-template-columns: 1fr; } .grid, .grade { grid-template-columns: 1fr; } } /* ========================================================================== STICKY WORKSPACES & MINI-MONITOR FLUTUANTE (PICTURE-IN-PICTURE) Mantém a carinha e a câmera sempre visíveis na tela durante a rolagem ========================================================================== */ .emojis-workspace { display: grid; grid-template-columns: 360px minmax(0, 1fr); gap: 26px; align-items: start; } .sticky-preview-col { position: sticky; top: 84px; z-index: 40; } .sticky-preview-card { box-shadow: 0 16px 40px rgba(0, 0, 0, 0.6), 0 0 20px var(--ciano-glow); border-color: var(--borda-hover); } .painel-workspace { display: grid; grid-template-columns: minmax(360px, 480px) minmax(0, 1fr); gap: 26px; align-items: start; } .painel-monitor-sticky { position: sticky; top: 84px; z-index: 40; max-height: calc(100vh - 104px); overflow-y: auto; padding-right: 6px; } .painel-monitor-sticky::-webkit-scrollbar { width: 5px; } .painel-monitor-sticky::-webkit-scrollbar-thumb { background: rgba(92, 214, 255, 0.35); border-radius: 4px; } .painel-controls-scroll { display: flex; flex-direction: column; gap: 22px; min-width: 0; } /* Mini-Monitor Flutuante Global (PiP) */ .floating-pip-widget { position: fixed; bottom: 24px; right: 28px; width: 270px; background: rgba(10, 18, 30, 0.94); backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px); border: 1px solid var(--borda-brilho); border-radius: var(--raio-lg); box-shadow: 0 16px 45px rgba(0, 0, 0, 0.8), 0 0 25px var(--ciano-glow); z-index: 95; overflow: hidden; transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.2s ease; display: flex; flex-direction: column; } .floating-pip-widget.minimized { transform: translateY(calc(100% - 42px)); } .floating-pip-header { display: flex; justify-content: space-between; align-items: center; padding: 10px 14px; background: rgba(18, 32, 50, 0.85); border-bottom: 1px solid var(--borda); font-size: 12.5px; font-weight: 700; color: var(--texto); user-select: none; } .floating-pip-header .pip-title { display: flex; align-items: center; gap: 8px; } .floating-pip-actions { display: flex; align-items: center; gap: 6px; } .floating-pip-actions button { padding: 2px 7px; font-size: 11px; background: transparent; border: 1px solid var(--borda); border-radius: 6px; color: var(--fraco); box-shadow: none; } .floating-pip-actions button:hover { color: #fff; border-color: var(--ciano); background: rgba(92, 214, 255, 0.15); } .floating-pip-body { height: 165px; background: #000000; position: relative; } .floating-pip-body iframe { width: 100%; height: 100%; border: none; background: #000000; } @media (max-width: 1100px) { .emojis-workspace, .painel-workspace { grid-template-columns: 1fr; } .sticky-preview-col, .painel-monitor-sticky { position: sticky; top: 68px; max-height: none; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; } } /* ========================================================================== WATCH BAR — Barra de Monitoramento Fixada no Topo Câmera e Rosto sempre visíveis com opção de expandir / recolher ========================================================================== */ .watch-bar { position: fixed; top: 68px; /* abaixo do app-topbar */ left: 250px; right: 0; z-index: 50; /* abaixo do topbar (z-index:60) */ background: rgba(7, 11, 18, 0.92); backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px); border-bottom: 1px solid rgba(92, 214, 255, 0.22); box-shadow: 0 4px 24px rgba(0, 0, 0, 0.65); transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1); } .watch-bar.watch-bar-collapsed { transform: translateY(calc(-100% + 32px)); box-shadow: none; } .watch-bar.watch-bar-collapsed::after { content: '▼ MONITOR — clique em ☰ para expandir'; position: absolute; bottom: 0; left: 0; right: 0; height: 32px; display: flex; align-items: center; justify-content: center; font-size: 10px; font-weight: 700; letter-spacing: 0.1em; color: var(--ciano); opacity: 0.6; pointer-events: none; } .watch-bar-inner { display: flex; align-items: stretch; min-height: 32px; } .watch-bar-grip { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; padding: 6px 8px; border-right: 1px solid var(--borda); color: var(--muito-fraco); min-width: 40px; user-select: none; writing-mode: vertical-rl; transform: rotate(180deg); font-size: 10px; } .watch-panels { display: flex; align-items: stretch; flex: 1; overflow-x: auto; overflow-y: hidden; scrollbar-width: thin; scrollbar-color: rgba(92,214,255,0.2) transparent; } .watch-panel { display: flex; flex-direction: column; border-right: 1px solid var(--borda); min-width: 280px; flex: 1; overflow: hidden; transition: opacity 0.25s ease, min-width 0.3s ease, flex 0.3s ease; } .watch-panel.watch-panel-hidden { min-width: 0 !important; flex: 0 !important; opacity: 0; pointer-events: none; border: none; } .watch-panel-header { display: flex; align-items: center; justify-content: space-between; padding: 3px 8px; background: rgba(12, 20, 34, 0.7); border-bottom: 1px solid var(--borda); height: 26px; flex-shrink: 0; gap: 8px; } .watch-panel-label { font-size: 10.5px; font-weight: 700; letter-spacing: 0.05em; color: var(--fraco); white-space: nowrap; } .watch-panel-actions { display: flex; gap: 3px; } .wp-btn { width: 20px; height: 20px; padding: 0; font-size: 12px; font-weight: 700; background: rgba(20, 36, 56, 0.6); border: 1px solid rgba(56, 82, 110, 0.35); border-radius: 5px; color: var(--fraco); cursor: pointer; display: grid; place-items: center; box-shadow: none; line-height: 1; transition: all 0.12s ease; } .wp-btn:hover { background: rgba(40, 68, 100, 0.9); color: #fff; border-color: var(--ciano); transform: none; box-shadow: none; } .wp-expand:hover { border-color: var(--verde); color: var(--verde); } .wp-shrink:hover { border-color: var(--amarelo); color: var(--amarelo); } .wp-hide:hover { border-color: var(--vermelho); color: var(--vermelho); } .watch-panel-body { overflow: hidden; background: #000; transition: height 0.3s cubic-bezier(0.16, 1, 0.3, 1); position: relative; flex-shrink: 0; } .watch-panel-body iframe { width: 100%; height: 100%; border: none; background: #000; pointer-events: none; } .watch-bar-tools { display: flex; flex-direction: column; align-items: center; justify-content: flex-start; gap: 3px; padding: 4px 5px; border-left: 1px solid var(--borda); min-width: 32px; background: rgba(8, 14, 24, 0.5); } .wp-tool-btn { width: 22px; height: 22px; padding: 0; font-size: 13px; background: transparent; border: 1px solid transparent; border-radius: 6px; color: var(--muito-fraco); cursor: pointer; display: grid; place-items: center; box-shadow: none; transition: all 0.15s ease; } .wp-tool-btn:hover { background: rgba(92, 214, 255, 0.1); border-color: rgba(92, 214, 255, 0.4); color: var(--ciano); transform: none; box-shadow: none; } @media (max-width: 1100px) { .watch-bar { left: 0; } } /* Espaço extra no app-content quando a watch-bar está visível */ .watch-bar-active .app-content { padding-top: 48px; } @media (max-width: 768px) { .watch-bar { display: none; } }