:root {
--primary: #ff3e3e;
--primary-hover: #ff5252;
--primary-active: #d32f2f;
--secondary: #1e1e2f;
--dark: #121220;
--darker: #0c0c14;
--light: #f5f5f5;
--gray: #8a8a9a;
--gray-dark: #4a4a5a;
--success: #4caf50;
--success-hover: #5cb860;
--danger: #f44336;
--danger-hover: #f55a4e;
--border-radius: 8px;
--shadow: 0 4px 20px rgba(0, 0, 0, 0.25);
--shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.15);
--glow: 0 0 15px rgba(255, 62, 62, 0.5);
--transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "Poppins", sans-serif;
}
body {
background-color: transparent;
color: var(--light);
font-size: 14px;
}
#app {
width: 100%;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
/* Painel de Admin */
.painel {
background-color: var(--dark);
border-radius: var(--border-radius);
width: 1200px;
height: 800px;
max-width: 95%;
max-height: 95vh;
box-shadow: var(--shadow);
display: none;
border: 1px solid rgba(255, 255, 255, 0.05);
overflow: hidden;
}
.painel.active {
display: flex;
flex-direction: column;
animation: fadeIn 0.3s ease;
}
.painel-header {
background-color: var(--darker);
padding: 16px 24px;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}
.painel-header h2 {
color: var(--light);
font-size: 18px;
font-weight: 600;
display: flex;
align-items: center;
}
.painel-header h2:before {
content: "";
display: inline-block;
width: 12px;
height: 12px;
background-color: var(--primary);
border-radius: 50%;
margin-right: 10px;
box-shadow: 0 0 10px var(--primary);
}
.btn-fechar {
background: none;
border: none;
color: var(--gray);
font-size: 24px;
cursor: pointer;
transition: var(--transition);
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
}
.btn-fechar:hover {
color: var(--light);
background-color: rgba(255, 255, 255, 0.05);
}
.painel-content {
padding: 0;
display: flex;
flex: 1;
overflow: hidden;
}
/* Tabs */
.tabs-container {
display: flex;
flex-direction: column;
width: 220px;
background-color: var(--darker);
border-right: 1px solid rgba(255, 255, 255, 0.05);
}
.tabs {
display: flex;
flex-direction: column;
padding: 25px 0;
}
.tab-btn {
background: none;
border: none;
color: var(--gray);
padding: 15px 24px;
cursor: pointer;
font-weight: 500;
transition: var(--transition);
text-align: left;
display: flex;
align-items: center;
position: relative;
font-size: 15px;
}
.tab-btn:before {
content: "";
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 3px;
background-color: transparent;
transition: var(--transition);
}
.tab-btn:hover {
color: var(--light);
background-color: rgba(255, 255, 255, 0.05);
}
.tab-btn.active {
color: var(--primary);
background-color: rgba(255, 62, 62, 0.1);
}
.tab-btn.active:before {
background-color: var(--primary);
box-shadow: var(--glow);
}
.tab-content {
flex: 1;
padding: 25px;
overflow: hidden;
position: relative; /* Necessário para posicionar o feedback de salvamento */
}
.tab-pane {
display: none;
height: 100%;
overflow-y: auto; /* Adicionado para permitir rolagem em abas com muito conteúdo */
padding-right: 10px; /* Espaçamento para a barra de rolagem */
}
.tab-pane.active {
display: block;
animation: fadeIn 0.3s ease;
}
/* Seções */
.secao {
margin-bottom: 20px;
background-color: var(--secondary);
padding: 20px;
border-radius: var(--border-radius);
box-shadow: var(--shadow-sm);
border: 1px solid rgba(255, 255, 255, 0.05);
}
.secao h3 {
margin-bottom: 15px;
color: var(--primary);
font-size: 16px;
font-weight: 600;
display: flex;
align-items: center;
}
.secao h3:after {
content: "";
flex: 1;
height: 1px;
background: linear-gradient(to right, rgba(255, 62, 62, 0.5), transparent);
margin-left: 10px;
}
.secao h4 {
margin: 10px 0 8px;
color: var(--light);
font-size: 14px;
font-weight: 500;
}
/* Layout de colunas */
.columns {
display: flex;
gap: 20px;
}
.column {
flex: 1;
}
/* Inputs */
.input-group {
margin-bottom: 15px;
}
.input-group label {
display: block;
margin-bottom: 8px;
color: var(--light);
font-weight: 500;
font-size: 14px;
}
.input-group input,
.input-group textarea {
width: 100%;
padding: 10px 12px;
border-radius: var(--border-radius);
border: 1px solid var(--gray-dark);
background-color: rgba(255, 255, 255, 0.05);
color: var(--light);
transition: var(--transition);
font-size: 14px;
}
.input-group textarea {
resize: vertical; /* Permite redimensionar verticalmente */
min-height: 80px; /* Altura mínima */
}
.input-group input:focus,
.input-group textarea:focus {
outline: none;
border-color: var(--primary);
box-shadow: 0 0 0 2px rgba(255, 62, 62, 0.2);
}
.input-group input[type="number"]::-webkit-inner-spin-button,
.input-group input[type="number"]::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
.input-group input[type="number"] {
-moz-appearance: textfield;
}
.input-group small {
display: block;
margin-top: 4px;
color: var(--gray);
font-size: 12px;
}
.input-group.checkbox {
display: flex;
align-items: center;
gap: 10px;
margin-top: 5px;
}
.input-group.checkbox input {
width: auto;
accent-color: var(--primary);
}
.input-with-btn {
display: flex;
gap: 10px;
}
.input-with-btn input {
flex: 1;
}
/* Lista de horários */
.horarios-lista {
margin-top: 15px;
}
#lista-horarios {
list-style: none;
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-top: 10px;
}
#lista-horarios li {
background-color: rgba(255, 255, 255, 0.08);
padding: 8px 16px;
border-radius: 20px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
border: 1px solid rgba(255, 255, 255, 0.05);
transition: var(--transition);
font-size: 14px;
min-width: 100px;
}
#lista-horarios li:hover {
background-color: rgba(255, 255, 255, 0.12);
}
#lista-horarios li span {
font-weight: 500;
flex-grow: 1;
}
#lista-horarios li button {
background: none;
border: none;
color: var(--gray);
cursor: pointer;
font-size: 16px;
width: 20px;
height: 20px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
transition: var(--transition);
flex-shrink: 0;
}
#lista-horarios li button:hover {
color: var(--danger);
background-color: rgba(244, 67, 54, 0.1);
}
/* Botões */
.btn {
padding: 10px 20px;
border-radius: var(--border-radius);
border: none;
font-weight: 500;
cursor: pointer;
transition: var(--transition);
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
font-size: 14px;
}
.btn-primary {
background-color: var(--primary);
color: white;
}
.btn-primary:hover {
background-color: var(--primary-hover);
box-shadow: var(--shadow-sm);
}
.btn-primary:active {
background-color: var(--primary-active);
}
.btn-success {
background-color: var(--success);
color: white;
}
.btn-success:hover {
background-color: var(--success-hover);
box-shadow: var(--shadow-sm);
}
.btn-danger {
background-color: var(--danger);
color: white;
}
.btn-danger:hover {
background-color: var(--danger-hover);
box-shadow: var(--shadow-sm);
}
/* Estilo para botão secundário */
.btn-secondary {
background-color: var(--gray-dark);
color: var(--light);
}
.btn-secondary:hover {
background-color: var(--gray);
}
.acoes {
display: flex;
justify-content: flex-end;
gap: 15px;
margin-top: 20px;
padding-top: 15px;
border-top: 1px solid rgba(255, 255, 255, 0.05);
}
/* Animações */
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes pulse {
0% {
box-shadow: 0 0 0 0 rgba(255, 62, 62, 0.4);
}
70% {
box-shadow: 0 0 0 10px rgba(255, 62, 62, 0);
}
100% {
box-shadow: 0 0 0 0 rgba(255, 62, 62, 0);
}
}
.pulse {
animation: pulse 2s infinite;
}
/* Ícones (SVG data URLs) */
.icon {
width: 18px;
height: 18px;
margin-right: 10px;
background-repeat: no-repeat;
background-position: center;
background-size: contain;
}
.icon-clock {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%238a8a9a' viewBox='0 0 24 24'%3E%3Cpath d='M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm0 18c-4.4 0-8-3.6-8-8s3.6-8 8-8 8 3.6 8 8-3.6 8-8 8zm.5-13H11v6l5.2 3.2.8-1.3-4.5-2.7V7z'/%3E%3C/svg%3E");
}
.icon-message {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%238a8a9a' viewBox='0 0 24 24'%3E%3Cpath d='M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H5.2L4 17.2V4h16v12zM7 9h2v2H7zm4 0h2v2h-2zm4 0h2v2h-2z'/%3E%3C/svg%3E");
}
.icon-command {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%238a8a9a' viewBox='0 0 24 24'%3E%3Cpath d='M17.5 3C15 3 13 5 13 7.5s2 4.5 4.5 4.5c.4 0 .7 0 1-.1V16c0 1.1-.9 2-2 2H7c-1.1 0-2-.9-2-2V7c0-1.1.9-2 2-2h4.6c.1-.3.1-.7.1-1 0-2.5-2-4.5-4.5-4.5S2.7 3.5 2.7 6s2 4.5 4.5 4.5c.4 0 .7 0 1-.1V16c0 2.2 1.8 4 4 4h9.5c2.2 0 4-1.8 4-4v-4.6c-.3.1-.7.1-1 .1-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5c0 .4 0 .7-.1 1h.1V16c0 3.3-2.7 6-6 6H7c-3.3 0-6-2.7-6-6V7c0-3.3 2.7-6 6-6h4.6c-.1.3-.1.7-.1 1 0 .5.1 1 .2 1.4H7c-.6 0-1 .4-1 1v9c0 .6.4 1 1 1h9.5c.6 0 1-.4 1-1v-3.3c-.3.2-.7.3-1 .3-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5c0 .4 0 .7-.1 1h.1V7.5C21 5 19 3 16.5 3h1z'/%3E%3C/svg%3E");
}
.icon-discord {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%238a8a9a' viewBox='0 0 24 24'%3E%3Cpath d='M19.9 5.1c-1.3-.6-2.7-1-4.2-1.3-.2.3-.4.8-.5 1.2-1.6-.2-3.2-.2-4.8 0-.1-.3-.3-.8-.5-1.2-1.4.2-2.8.7-4.2 1.3-2.6 3.9-3.4 7.7-3 11.5 1.8 1.3 3.4 2.1 5.1 2.6.4-.5.8-1.1 1.1-1.7-.6-.2-1.2-.5-1.7-.8.1-.1.3-.2.4-.3 3.2 1.5 6.7 1.5 9.9 0 .1.1.3.2.4.3-.5.3-1.1.6-1.7.8.3.6.7 1.2 1.1 1.7 1.7-.5 3.3-1.3 5.1-2.6.4-4.4-.7-8.2-3-11.5zM8.7 14.8c-1 0-1.8-.9-1.8-2s.8-2 1.8-2c1 0 1.8.9 1.8 2s-.8 2-1.8 2zm6.6 0c-1 0-1.8-.9-1.8-2s.8-2 1.8-2c1 0 1.8.9 1.8 2s-.8 2-1.8 2z'/%3E%3C/svg%3E");
}
.icon-monitor {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%238a8a9a' viewBox='0 0 24 24'%3E%3Crect x='2' y='3' width='20' height='14' rx='2'/>");
}
/* Estilos para o Modal de Confirmação */
.modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.7);
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
opacity: 0;
visibility: hidden;
transition: opacity 0.3s ease, visibility 0.3s ease;
}
.modal-overlay.active {
opacity: 1;
visibility: visible;
}
.modal-content {
background-color: var(--dark);
border-radius: var(--border-radius);
padding: 30px;
box-shadow: var(--shadow);
max-width: 450px;
width: 90%;
text-align: center;
transform: translateY(-20px);
opacity: 0;
transition: transform 0.3s ease, opacity 0.3s ease;
border: 1px solid rgba(255, 255, 255, 0.05);
}
.modal-overlay.active .modal-content {
transform: translateY(0);
opacity: 1;
}
#modal-title {
color: var(--primary);
font-size: 20px;
margin-bottom: 15px;
font-weight: 600;
}
#modal-message {
color: var(--light);
font-size: 15px;
margin-bottom: 25px;
line-height: 1.5;
}
.modal-actions {
display: flex;
justify-content: center;
gap: 15px;
}
/* Estilos para a aba de Status */
.status-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
margin-top: 20px;
}
.status-item {
background-color: var(--darker);
padding: 15px 20px;
border-radius: var(--border-radius);
border: 1px solid rgba(255, 255, 255, 0.08);
box-shadow: var(--shadow-sm);
}
.status-item.full-width {
grid-column: 1 / -1;
}
.status-item h4 {
margin-bottom: 8px;
color: var(--gray);
font-size: 13px;
font-weight: 500;
text-transform: uppercase;
}
.status-value {
font-size: 18px;
font-weight: 600;
color: var(--light);
}
.status-value-large {
font-size: 16px;
font-weight: 500;
color: var(--light);
margin-bottom: 10px;
}
.status-countdown {
font-size: 2.5em;
color: var(--primary);
font-weight: 700;
margin-top: 5px;
}
/* Feedback de salvamento */
.save-feedback {
position: absolute;
bottom: 20px;
right: 20px;
padding: 10px 20px;
border-radius: var(--border-radius);
color: white;
font-weight: 500;
opacity: 0;
transform: translateY(20px);
transition: opacity 0.3s ease, transform 0.3s ease;
z-index: 10;
}
.save-feedback.active {
opacity: 1;
transform: translateY(0);
}
.save-feedback.success {
background-color: var(--success);
}
.save-feedback.error {
background-color: var(--danger);
}
/* Responsividade */
@media (max-width: 768px) {
.painel-content {
flex-direction: column;
}
.tabs-container {
width: 100%;
border-right: none;
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}
.tabs {
flex-direction: row;
padding: 10px;
overflow-x: auto; /* Permite rolagem horizontal das abas em telas pequenas */
-webkit-overflow-scrolling: touch; /* Melhora a rolagem em dispositivos iOS */
}
.tab-btn {
padding: 10px 15px;
white-space: nowrap; /* Impede que o texto da aba quebre */
}
.tab-btn:before {
width: 100%;
height: 3px;
top: auto;
bottom: 0;
}
.icon {
margin-right: 5px;
}
.columns {
flex-direction: column;
gap: 10px;
}
.tab-pane {
padding-right: 0; /* Remove padding extra para rolagem em telas pequenas */
}
.save-feedback {
bottom: 10px;
right: 10px;
left: 10px;
width: auto;
text-align: center;
}
}