/* Camada interativa compartilhada dos dashboards (protótipo navegável).
   Depende das variáveis de base.css/themes.css. */

/* páginas (telas) do SPA fake */
.page{display:none;animation:fadeIn .28s ease}
.page.active{display:block}
@keyframes fadeIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* link de menu clicável */
.nav a{cursor:pointer;user-select:none}
.nav a .count{margin-left:auto;font-size:11px;background:var(--nav-active);color:var(--txt);border-radius:999px;padding:1px 8px}

/* topbar: relógio "ao vivo" */
.live-dot{width:8px;height:8px;border-radius:50%;background:var(--ok);display:inline-block;margin-right:6px;box-shadow:0 0 0 0 rgba(34,197,94,.5);animation:pulse 2s infinite;vertical-align:middle}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(34,197,94,.45)}70%{box-shadow:0 0 0 9px rgba(34,197,94,0)}100%{box-shadow:0 0 0 0 rgba(34,197,94,0)}}

/* botões utilitários */
.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--txt)}
.btn.ghost:hover{border-color:var(--brand)}
.btn.sm{padding:6px 10px;font-size:12px;border-radius:8px}
.iconbtn{background:transparent;border:1px solid var(--line);color:var(--muted);width:34px;height:34px;border-radius:9px;cursor:pointer;display:grid;place-items:center;font-size:15px}
.iconbtn:hover{color:var(--txt);border-color:var(--brand)}

/* abas */
.tabs{display:flex;gap:6px;border-bottom:1px solid var(--line);margin-bottom:14px;flex-wrap:wrap}
.tabs button{background:none;border:none;color:var(--muted);padding:9px 14px;font-size:13.5px;font-weight:600;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}
.tabs button.active{color:var(--txt);border-bottom-color:var(--brand)}
.tabpane{display:none}
.tabpane.active{display:block}

/* clicável / hover de linha */
tr.clickable{cursor:pointer}
tbody tr.clickable:hover{background:var(--nav-active)}
.rowfade{animation:fadeIn .35s ease}

/* switch */
.switch{position:relative;display:inline-block;width:42px;height:24px;flex:none}
.switch input{opacity:0;width:0;height:0}
.switch .sl{position:absolute;inset:0;background:var(--line);border-radius:999px;transition:.2s;cursor:pointer}
.switch .sl::before{content:"";position:absolute;width:18px;height:18px;left:3px;top:3px;background:#fff;border-radius:50%;transition:.2s}
.switch input:checked + .sl{background:var(--brand)}
.switch input:checked + .sl::before{transform:translateX(18px)}

/* segmented control / seletor de período */
.seg{display:inline-flex;background:var(--panel-2);border:1px solid var(--line);border-radius:10px;padding:3px}
.seg button{background:none;border:none;color:var(--muted);font-size:12.5px;font-weight:600;padding:6px 12px;border-radius:7px;cursor:pointer}
.seg button.active{background:var(--brand-grad);color:#fff}

/* modal / drawer */
.scrim{position:fixed;inset:0;background:rgba(5,8,16,.6);backdrop-filter:blur(3px);display:none;z-index:50;align-items:center;justify-content:center;padding:20px}
.scrim.open{display:flex}
.modal{background:linear-gradient(180deg,var(--panel),var(--panel-2));border:1px solid var(--line);border-radius:16px;max-width:520px;width:100%;padding:22px;animation:pop .2s ease}
.modal.wide{max-width:720px}
@keyframes pop{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}
.modal .mh{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}
.modal .mh h3{margin:0;font-size:17px}
.modal .mh p{margin:4px 0 0;color:var(--muted);font-size:13px}
.modal .mbody{font-size:14px;color:var(--txt)}
.modal .mfoot{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}
.field{margin-bottom:12px}
.field label{display:block;font-size:12px;color:var(--muted);margin-bottom:5px}
.field input,.field select,.field textarea{width:100%;background:var(--panel-2);border:1px solid var(--line);border-radius:9px;padding:9px 11px;color:var(--txt);font-size:13.5px;font-family:inherit}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--brand)}

/* toasts */
.toasts{position:fixed;right:18px;bottom:18px;display:flex;flex-direction:column;gap:10px;z-index:80}
.toast{background:linear-gradient(180deg,var(--panel),var(--panel-2));border:1px solid var(--line);border-left:3px solid var(--brand);border-radius:11px;padding:12px 15px;min-width:260px;max-width:340px;box-shadow:0 16px 40px rgba(0,0,0,.4);animation:slideIn .25s ease}
.toast.ok{border-left-color:var(--ok)} .toast.warn{border-left-color:var(--warn)} .toast.danger{border-left-color:var(--danger)}
.toast .tt{font-size:13.5px;font-weight:700;margin-bottom:2px}
.toast .td{font-size:12.5px;color:var(--muted)}
@keyframes slideIn{from{opacity:0;transform:translateX(30px)}to{opacity:1;transform:none}}
.toast.out{animation:slideOut .25s ease forwards}
@keyframes slideOut{to{opacity:0;transform:translateX(30px)}}

/* skeleton de carregamento */
.skeleton{background:linear-gradient(90deg,var(--panel) 25%,var(--panel-2) 37%,var(--panel) 63%);background-size:400% 100%;animation:sk 1.3s ease infinite;border-radius:8px;color:transparent!important}
@keyframes sk{0%{background-position:100% 50%}100%{background-position:0 50%}}

/* valor que "pisca" ao atualizar */
.flash{animation:flash .7s ease}
@keyframes flash{0%{color:var(--brand)}100%{color:inherit}}

/* notificação no sino */
.bell{position:relative}
.bell .ndot{position:absolute;top:4px;right:4px;width:8px;height:8px;border-radius:50%;background:var(--danger);border:2px solid var(--panel)}

/* mini área de notificações (dropdown) */
.pop{position:absolute;right:0;top:44px;width:300px;background:linear-gradient(180deg,var(--panel),var(--panel-2));border:1px solid var(--line);border-radius:12px;padding:8px;box-shadow:0 18px 44px rgba(0,0,0,.45);display:none;z-index:40}
.pop.open{display:block}
.pop .pi{padding:10px;border-radius:9px;font-size:13px}
.pop .pi:hover{background:var(--nav-active)}
.pop .pi .muted{font-size:11.5px}

.empty{text-align:center;color:var(--muted);padding:26px;font-size:13.5px}