/* Sistema Joseilson — Estrutura visual base (sidebar, topbar, área principal) */

/* ===== Loading inicial (splash curto, só CSS, sem JS) =====
   Some sozinho via animation-fill-mode:forwards — não depende de nenhum
   evento de carregamento real, então nunca atrasa o conteúdo por trás. */
.app-loader{
  position:fixed;inset:0;z-index:9999;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);
  background:var(--bg-page);
  pointer-events:none;
  animation:app-loader-out .5s ease-out both;
  animation-delay:.35s;
}
.app-loader__mark{
  width:44px;height:44px;border-radius:var(--radius-lg);
  background:var(--accent-600);color:#fff;
  display:flex;align-items:center;justify-content:center;
  font-weight:700;font-size:var(--text-lg);
  animation:app-loader-pulse .5s ease-in-out 1;
}
.app-loader__name{font-size:var(--text-sm);font-weight:600;color:var(--ink-700);letter-spacing:.02em}
.app-loader__spinner{
  width:20px;height:20px;border-radius:50%;
  border:2.5px solid var(--line-strong);border-top-color:var(--accent-600);
  animation:app-loader-spin .5s linear 2;
}
@keyframes app-loader-out{
  0%,55%{opacity:1;visibility:visible}
  100%{opacity:0;visibility:hidden}
}
@keyframes app-loader-pulse{
  0%,100%{transform:scale(1)}
  50%{transform:scale(1.06)}
}
@keyframes app-loader-spin{to{transform:rotate(360deg)}}

/* Reaproveita o .app-loader como transição de saída do login (clique/Enter em "Entrar") — sem
   vídeo ou asset novo, só a marca SJ que já existe. animation:none cancela o fade automático
   (que já rodou uma vez ao carregar a página) e mantém visível manualmente via classe/JS. */
.app-loader.is-replaying{opacity:1;visibility:visible;animation:none}

.app-shell{
  display:grid;
  grid-template-columns:var(--sidebar-w) 1fr;
  min-height:100vh;
}

/* ===== Sidebar ===== */
.sidebar{
  background:var(--bg-sidebar);
  color:var(--ink-300);
  display:flex;
  flex-direction:column;
  height:100vh;
  position:sticky;
  top:0;
}
.sidebar__brand{
  display:flex;align-items:center;gap:var(--space-3);
  padding:var(--space-5) var(--space-4);
  border-bottom:1px solid rgba(255,255,255,.08);
}
.sidebar__logo{
  width:34px;height:34px;border-radius:var(--radius-md);
  background:var(--accent-600);color:#fff;
  display:flex;align-items:center;justify-content:center;
  font-weight:700;font-size:var(--text-md);flex-shrink:0;
}
.sidebar__brand-name{font-size:var(--text-md);font-weight:600;color:#fff;line-height:1.2;display:block}
.sidebar__brand-sub{font-size:var(--text-xs);color:var(--ink-500)}

.sidebar__nav{flex:1;overflow-y:auto;padding:var(--space-2) var(--space-3) var(--space-4)}
.sidebar__group-label{
  font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;
  color:rgba(196,185,166,.65);
  padding:var(--space-4) var(--space-2) var(--space-1);
}
.sidebar__group-label:first-child{padding-top:var(--space-2)}

.sidebar__item{
  display:flex;align-items:center;gap:var(--space-3);
  padding:var(--space-2) var(--space-3);
  border-radius:var(--radius-md);
  font-size:var(--text-sm);font-weight:500;
  color:var(--ink-300);
  margin-bottom:2px;
  transition:background var(--ease),color var(--ease);
}
.sidebar__item:hover{background:rgba(255,255,255,.06);color:#fff}
.sidebar__item.is-active{background:var(--bg-sidebar-active);color:#fff;font-weight:600}
.sidebar__item svg{flex-shrink:0;opacity:.9}
.sidebar__item-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.sidebar__chevron-btn{
  background:transparent;border:0;color:inherit;display:flex;padding:2px;
  border-radius:4px;transition:transform var(--ease),background var(--ease);flex-shrink:0;
}
.sidebar__chevron-btn:hover{background:rgba(255,255,255,.12)}
.sidebar__group.is-open .sidebar__chevron-btn{transform:rotate(90deg)}

.sidebar__submenu{
  display:flex;flex-direction:column;gap:1px;
  max-height:0;overflow:hidden;
  padding-left:var(--space-8);
  transition:max-height .2s ease;
}
.sidebar__group.is-open .sidebar__submenu{max-height:220px}
.sidebar__subitem{
  display:block;padding:var(--space-2) var(--space-2);
  font-size:var(--text-sm);color:var(--ink-300);
  border-radius:var(--radius-sm);
  transition:background var(--ease),color var(--ease);
}
.sidebar__subitem:hover{color:#fff;background:rgba(255,255,255,.06)}
.sidebar__subitem.is-active{color:#fff;font-weight:600}

.sidebar__user{
  display:flex;align-items:center;gap:var(--space-3);
  padding:var(--space-3) var(--space-4);
  border-top:1px solid rgba(255,255,255,.08);
  position:relative;
}
.sidebar__user-info{flex:1;min-width:0}
.sidebar__user-name{font-size:var(--text-sm);font-weight:600;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sidebar__user-role{font-size:var(--text-xs);color:var(--ink-500)}
.sidebar__user-menu-btn{background:transparent;border:0;color:var(--ink-500);padding:var(--space-1);display:flex;transition:color var(--ease)}
.sidebar__user-menu-btn:hover{color:#fff}
.sidebar__user-dropdown{
  position:absolute;left:var(--space-4);right:var(--space-4);bottom:calc(100% + 8px);
  background:var(--bg-surface);border:1px solid var(--line-soft);border-radius:var(--radius-md);
  box-shadow:var(--shadow-lg);padding:var(--space-2);
  opacity:0;visibility:hidden;pointer-events:none;transform:translateY(4px);
  transition:opacity var(--ease),transform var(--ease),visibility var(--ease);
}
.sidebar__user-dropdown.is-open{opacity:1;visibility:visible;pointer-events:auto;transform:none}
.sidebar__user-dropdown a,.sidebar__user-dropdown-upload{
  display:flex;align-items:center;gap:var(--space-2);
  padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);
  font-size:var(--text-sm);color:var(--ink-900);
  transition:background var(--ease);cursor:pointer;
}
.sidebar__user-dropdown a:hover,.sidebar__user-dropdown-upload:hover{background:var(--bg-surface-alt)}

/* ===== Topbar ===== */
.topbar{
  height:var(--topbar-h);
  background:var(--bg-surface-alt);
  border-bottom:1px solid var(--line-soft);
  display:flex;align-items:center;justify-content:space-between;
  padding:0 var(--space-6);
  position:sticky;top:0;z-index:30;
  gap:var(--space-4);
}
.topbar__left{display:flex;align-items:center;gap:var(--space-3);min-width:0}
.topbar__menu-btn{display:none;background:transparent;border:0;padding:var(--space-2);color:var(--ink-700);border-radius:var(--radius-md);transition:background var(--ease)}
.topbar__menu-btn:hover{background:var(--bg-surface)}
.breadcrumb{display:flex;align-items:center;gap:var(--space-2);font-size:var(--text-sm);color:var(--ink-500);min-width:0}
.breadcrumb__current{font-weight:600;color:var(--ink-900);font-size:var(--text-md);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.topbar__actions{display:flex;align-items:center;gap:var(--space-3);flex-shrink:0}
.icon-btn{
  position:relative;width:36px;height:36px;border-radius:var(--radius-md);
  background:var(--bg-surface);border:1px solid var(--line-soft);
  display:flex;align-items:center;justify-content:center;color:var(--ink-700);
  transition:border-color var(--ease);
}
.icon-btn:hover{border-color:var(--line-strong)}
.icon-btn__dot{position:absolute;top:-3px;right:-3px;width:9px;height:9px;border-radius:50%;background:var(--danger-fg);border:2px solid var(--bg-surface-alt)}

/* ===== Dropdown de notificações (topbar) — mesmo padrão visual do menu do usuário ===== */
.notif-wrap{position:relative}
.notif-dropdown{
  position:absolute;top:calc(100% + 8px);right:0;width:320px;max-width:calc(100vw - 32px);
  background:var(--bg-surface);border:1px solid var(--line-soft);border-radius:var(--radius-md);
  box-shadow:var(--shadow-lg);
  opacity:0;visibility:hidden;pointer-events:none;transform:translateY(4px);
  transition:opacity var(--ease),transform var(--ease),visibility var(--ease);
  z-index:40;
}
.notif-dropdown.is-open{opacity:1;visibility:visible;pointer-events:auto;transform:none}
.notif-dropdown__header{padding:var(--space-3) var(--space-4);font-size:var(--text-sm);font-weight:600;color:var(--ink-900);border-bottom:1px solid var(--line-soft)}
.notif-dropdown__list{max-height:320px;overflow-y:auto;padding:var(--space-2)}
.notif-item{display:flex;flex-direction:column;gap:2px;padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);transition:background var(--ease)}
.notif-item:hover{background:var(--bg-surface-alt)}
.notif-item__titulo{font-size:var(--text-sm);font-weight:600;color:var(--ink-900)}
.notif-item__data{font-size:var(--text-xs);color:var(--danger-fg)}

/* ===== Main content ===== */
.app-main{display:flex;flex-direction:column;min-width:0}
.app-content{padding:var(--space-6);display:flex;flex-direction:column;gap:var(--space-5);animation:content-fade-in var(--ease) both}
@keyframes content-fade-in{from{opacity:0}to{opacity:1}}

.page-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);flex-wrap:wrap}
.page-header h1{font-size:var(--text-xl);font-weight:600}
.page-header p{font-size:var(--text-sm);color:var(--ink-500);margin-top:2px}

/* ===== Scrim (gaveta mobile) ===== */
.app-scrim{
  position:fixed;inset:0;background:rgba(15,20,20,.45);z-index:55;
  opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--ease),visibility var(--ease);
}
.app-scrim.is-visible{opacity:1;visibility:visible;pointer-events:auto}

/* ===== Auth layout (login) ===== */
.auth-shell{
  min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:var(--bg-page);padding:var(--space-6);
}
.auth-card{
  width:100%;max-width:380px;background:var(--bg-surface);
  border:1px solid var(--line-soft);border-radius:var(--radius-xl);
  box-shadow:var(--shadow-md);padding:var(--space-8);
}
.auth-card.is-leaving{
  opacity:0;transform:translateY(6px) scale(.98);
  transition:opacity .35s ease,transform .35s ease;
}
.auth-card__logo{
  width:44px;height:44px;border-radius:var(--radius-lg);background:var(--accent-600);
  color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;
  margin:0 auto var(--space-4);
}

/* ===== Responsivo ===== */
@media (max-width:1080px){
  .app-shell{display:block}
  .sidebar{
    position:fixed;left:0;top:0;z-index:60;width:var(--sidebar-w);
    transform:translateX(-100%);transition:transform .2s ease;
    box-shadow:var(--shadow-lg);
  }
  .sidebar.is-open{transform:translateX(0)}
  .topbar__menu-btn{display:inline-flex}
}
@media (max-width:640px){
  .app-content{padding:var(--space-4)}
  .topbar{padding:0 var(--space-4)}
  .breadcrumb__current{font-size:var(--text-base)}
  .page-header{align-items:flex-start;flex-direction:column}
}
