/*
 * Shell autenticado (Q63/Q65) — sidebar fixa no desktop, bottom tab bar no mobile.
 * Só tokens (tokens.css), denso, claro/escuro automático. Estética Linear:
 * hierarquia por tipografia/peso/espaço, chrome quieto, UM acento.
 */

/* Desktop: grid sidebar + conteúdo. ALTURA FIXA na viewport (100dvh, não min-):
   a página não rola inteira — a sidebar fica fixa e SÓ o conteúdo (.shell-main)
   rola. Sem isso, uma lista longa (tracker) estica o .app inteiro e a sidebar vai
   junto, jogando o rodapé (Preferências/Sair) lá pro fim da página. A row 1fr leva
   toda a altura mesmo com filhos extras do <body> (wrapper do command palette). */
.app {
  display: grid;
  grid-template-columns: 15rem 1fr;
  grid-template-rows: 1fr;
  height: 100dvh;
  overflow: hidden; /* o scroll mora em .shell-main, não no grid */
  /* A ASSINATURA: uma barra de acento ÚNICA no topo do app inteiro — fora da
     sidebar e do tracker, sem emenda entre os dois. */
  border-top: 3px solid var(--color-accent);
}

/* --- Sidebar (desktop) ------------------------------------------------------ */
.shell-sidebar {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  padding: var(--space-4) var(--space-3);
  /* Moldura com vida: no CLARO a sidebar leva uma lavagem do acento (neutro
     tingido pro hue do teal — o cinza puro ficava morto); no ESCURO o Crust já
     dá a profundidade certa. */
  background-color: light-dark(
    color-mix(in srgb, var(--color-accent) 7%, #eff1f5),
    var(--color-surface-deep)
  );
  border-right: 1px solid light-dark(
    color-mix(in srgb, var(--color-accent) 14%, #ccd0da),
    var(--color-border)
  );
}

/* Header mobile (marca acima do timer): invisível no desktop — lá a marca é da sidebar. */
.shell-mobile-header {
  display: none;
}

.shell-sidebar__brand {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-2) var(--space-3);
  font-size: var(--text-lg);
  font-weight: var(--weight-semibold);
  letter-spacing: -0.01em;
}

.shell-nav {
  display: flex;
  flex-direction: column;
  gap: 2px;
  margin-top: var(--space-3);
}

/* Rodapé da sidebar empurrado pro fim (Preferências/Admin/Sair). */
.shell-sidebar__footer {
  display: flex;
  flex-direction: column;
  gap: 2px;
  margin-top: auto;
  padding-top: var(--space-3);
  border-top: 1px solid var(--color-border);
}

.shell-nav__item {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-2) var(--space-3);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-text);
  text-decoration: none;
  border-radius: var(--radius-sm);
}

/* Com ícone + label alinhados à esquerda, o badge "em breve" vai pra direita. */
.shell-nav__item .shell-badge {
  margin-left: auto;
}

a.shell-nav__item:hover {
  color: var(--color-text);
  /* Hover com ACENTO (7%) — "um tom acima" do item atual (12%), nunca cinza. */
  background-color: color-mix(in srgb, var(--color-accent) 7%, transparent);
}

/* Item atual: acento contido (o UM acento). */
.shell-nav__item--current {
  color: var(--color-accent);
  background-color: color-mix(in srgb, var(--color-accent) 12%, transparent);
}

/* Desabilitado "em breve": apagado, sem interação, sem link morto. */
.shell-nav__item--disabled {
  color: var(--color-text-subtle);
  cursor: default;
}

/*
 * Sair é um button_to (form + <button type="submit">), então o seletor base
 * `button[type="submit"]` (0,1,1) o pinta de acento. Escopamos com o pai
 * (.shell-nav .shell-nav__item--button, 0,2,0) pra neutralizar sem !important e
 * fazer o botão parecer um item de nav qualquer.
 */
.shell-nav__item--button,
.shell-sidebar__footer .shell-nav__item--button,
.shell-tabs__more-menu .shell-nav__item--button {
  width: 100%;
  justify-content: flex-start;
  color: var(--color-text);
  background-color: transparent;
  border: none;
  cursor: pointer;
  text-align: left;
  font-family: inherit;
}

.shell-sidebar__footer .shell-nav__item--button:hover,
.shell-tabs__more-menu .shell-nav__item--button:hover {
  color: var(--color-text);
  background-color: color-mix(in srgb, var(--color-accent) 7%, transparent);
}

/* button_to embrulha o botão num <form>; tira a margem pra alinhar como item. */
.shell-sidebar__footer form,
.shell-tabs__more-menu form {
  margin: 0;
}

/* Badge "em breve" — legenda quieta. */
.shell-badge {
  font-size: var(--text-xs);
  font-weight: var(--weight-normal);
  color: var(--color-text-subtle);
  text-transform: lowercase;
}

/* --- Área principal --------------------------------------------------------- */
.shell-main {
  display: flex;
  flex-direction: column;
  min-width: 0; /* deixa tabelas largas encolherem em vez de estourar o grid */
  min-height: 0; /* permite que o filho que rola (.shell-content) encolha no grid */
  overflow-y: auto; /* o SCROLL da página mora aqui — a sidebar fica fixa */
}

/* Barra do timer — a assinatura (Q63): fica GRUDADA no topo enquanto o conteúdo
   rola por baixo (agora que o scroll mora em .shell-main), pro Stop estar sempre
   acessível. z-index acima do conteúdo que rola sob ela. */
.shell-timerbar {
  display: flex;
  align-items: center;
  min-height: 2.5rem;
  padding: 0 var(--space-5);
  font-size: var(--text-xs);
  border-bottom: 1px solid var(--color-border);
  background-color: var(--color-surface);
  position: sticky;
  top: 0;
  z-index: 3;
}

.shell-content {
  flex: 1;
  padding: var(--space-6) var(--space-5);
  max-width: 64rem;
  width: 100%;
  /* Centrado na área útil — sem o vazio morto todo à direita em telas largas. */
  margin-inline: auto;
}

/* --- Bottom tab bar (mobile) ------------------------------------------------ */
.shell-tabs {
  display: none;
}

/*
 * Breakpoint: abaixo de 48rem (~768px) a sidebar some e a bottom tab bar aparece.
 */
@media (max-width: 48rem) {
  .app {
    grid-template-columns: 1fr;
  }

  .shell-sidebar {
    display: none;
  }

  /* A marca vem da sidebar (oculta) pro header fino do topo — que herda a
     linha-assinatura de acento. A barra do timer abaixo NÃO repete a linha
     (duas linhas teal em 50px seriam chumbo). */
  .shell-mobile-header {
    display: flex;
    align-items: center;
    gap: var(--space-2);
    padding: var(--space-2) var(--space-3);
    font-size: var(--text-lg);
    font-weight: var(--weight-semibold);
    letter-spacing: -0.01em;
    background-color: var(--color-surface-deep);
    border-bottom: 1px solid var(--color-border);
  }

  /*
   * A barra do timer é a assinatura (Q63) e o Stop não pode sumir quando a lista
   * rola ou o form manual expande. No mobile ela GRUDA no topo da viewport —
   * sempre visível, sem markup novo. z-index abaixo da tab bar (10) e dos
   * popovers ⋮/tags (11 — precisam vencer a tab bar), acima do conteúdo.
   */
  .shell-timerbar {
    position: sticky;
    top: 0;
    z-index: 4;
  }

  .shell-content {
    /* Laterais enxutas no mobile (mais dados por linha — pedido do dono) e
       espaço embaixo pra bottom bar não cobrir o fim do conteúdo. */
    padding: var(--space-4) var(--space-3)
      calc(var(--space-8) + 3rem + env(safe-area-inset-bottom, 0));
  }

  .shell-tabs {
    display: flex;
    position: fixed;
    inset: auto 0 0 0;
    z-index: 10;
    background-color: var(--color-surface);
    border-top: 1px solid var(--color-border);
    /* Home indicator do iPhone não cobre os tabs (exige viewport-fit=cover no meta). */
    padding-bottom: env(safe-area-inset-bottom, 0);
  }

  .shell-tabs__item {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 2px;
    /* Alvo de toque ≥44px (WCAG 2.5.5 / iOS HIG): é a navegação primária no PWA. */
    min-height: 3rem;
    padding: var(--space-2) var(--space-1);
    font-size: var(--text-xs);
    font-weight: var(--weight-medium);
    color: var(--color-text);
    text-decoration: none;
    background: transparent;
    border: none;
    cursor: pointer;
  }

  .shell-tabs__item--current {
    color: var(--color-accent);
  }

  .shell-tabs__item--disabled {
    color: var(--color-text-subtle);
  }

  /* "Mais" = <details>; o menu abre ancorado acima da barra (zero JS). */
  .shell-tabs__more {
    flex: 1;
    position: relative;
  }

  .shell-tabs__more > summary {
    list-style: none;
  }

  .shell-tabs__more > summary::-webkit-details-marker {
    display: none;
  }

  .shell-tabs__more-menu {
    /* Ancorado ao canto direito da VIEWPORT (não do tab estreito) pra não cortar
       os itens; abre acima da barra. */
    position: fixed;
    right: var(--space-2);
    bottom: calc(2.75rem + var(--space-2) + env(safe-area-inset-bottom, 0));
    min-width: 12rem;
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: var(--space-2);
    background-color: var(--color-surface-raised);
    border: 1px solid var(--color-border);
    border-radius: var(--radius);
    box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.12);
  }
}
