/* ============================================================
   DESIGN SYSTEM MO — componentes para app de gestão
   FONTE ÚNICA. Documentação: docs/design-system-mo.md
   Depende de: ds/tokens/*.css (importe os tokens antes deste)
   ------------------------------------------------------------
   ORIGEM: Claude Design, projeto "Site da Moderna".
   Este arquivo porta do bundle SÓ o que faz sentido dentro de um
   app de gestão. Cada bloco diz de onde veio.

   O que ficou de fora, de propósito, e por quê:
     · hero, vídeo de fundo, cartões flutuantes de estatística
     · transição de triângulos entre páginas
     · pattern de triângulos em escala de peça (fica em 0.06)
     · banner e popup de eventos, modal do iFood
   São elementos de peça pública: foram desenhados para vender, e
   numa tela de trabalho competem com o dado. O pattern e o tema
   Açaí continuam disponíveis via token, para quando a tela for
   de vitrine.

   Prefixo `mo-` em tudo, para não colidir com classe existente
   de app nenhum.
   ============================================================ */

/* ── POR QUE TUDO ISTO ESTA EM @layer components ──────────────
   Este arquivo entra por <link> DEPOIS do bundle do Tailwind. Sem a
   camada, `.mo-btn-secundario { background: ... }` venceria uma
   utilitaria `bg-primary` posta no elemento — e o componente passaria
   a mandar na cor, que e o contrario do esperado.

   Descoberto no PCP em 02/09/2026: o botao da aba ativa do login, que
   e `.mo-btn-secundario` + `bg-primary`, ficou branco em vez de
   vermelho. Dentro da camada `components` o Tailwind poe as
   utilitarias depois, e elas voltam a vencer.
   ============================================================ */

@layer components {


  /* ── BOTÕES ───────────────────────────────────────────────────
     Verbatim de .btn-shop (l.489) e .btn-submit (l.1389): pílula,
     caixa alta, peso 700, tracking .04em, sombra vermelha, e o
     hover que sobe 2px. O secundário e o de perigo são derivados —
     o site não precisava deles. */
  .mo-btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 12px 22px;
    border: none;
    border-radius: var(--radius-pill);
    font-family: inherit;
    font-weight: 700;
    font-size: 14px;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    cursor: pointer;
    min-height: 44px;
    transition: transform var(--mo-dur-rapido), box-shadow var(--mo-dur-rapido),
                background var(--mo-dur-rapido), border-color var(--mo-dur-rapido);
  }
  .mo-btn:hover { transform: translateY(-2px); }
  .mo-btn:focus-visible { outline: 2px solid var(--t-accent); outline-offset: 2px; }
  .mo-btn:disabled { opacity: .45; cursor: not-allowed; transform: none; box-shadow: none; }

  .mo-btn-primario {
    background: var(--t-accent);
    color: #fff;
    box-shadow: var(--shadow-red-sm);
  }
  .mo-btn-primario:hover { box-shadow: var(--shadow-red-md); }

  /* Derivado: o secundário do site era ghost sobre foto e não
     funciona sobre papel. Este é o par sóbrio. */
  .mo-btn-secundario {
    background: var(--t-superficie);
    color: var(--t-fg);
    border: 1.5px solid var(--t-borda);
  }
  .mo-btn-secundario:hover { border-color: var(--t-accent); color: var(--t-accent); }

  /* Derivado: ação destrutiva. Usa o vermelho profundo, não o da
     marca — a marca é conquista, não perda. */
  .mo-btn-perigo { background: var(--mo-red-deep); color: #fff; }

  .mo-btn-bloco { width: 100%; justify-content: center; padding: 16px 28px; }

  /* Chão de fábrica e tablet de loja: alvo de 48px em vez de 44px.
     O token já existia (--alvo-toque-fabrica); faltava o modificador. */
  .mo-btn-grande { min-height: var(--alvo-toque-fabrica); padding: 14px 26px; font-size: 15px; }
  .mo-btn-pequeno { min-height: 36px; padding: 8px 16px; font-size: 12px; }

  /* ── CARTÃO ───────────────────────────────────────────────────
     De .feature-card (l.1081). Container SIMPLES de propósito: fundo,
     borda, raio e a sombra quente, com padding próprio. Nada de
     display:flex aqui — ele é usado em centenas de lugares que põem
     conteúdo direto dentro, e impor um contexto de flex mudaria o
     layout de todos eles. A variante de mídia, que precisa da coluna,
     é .mo-cartao-midia. */
  .mo-cartao {
    background: var(--t-superficie);
    border: 1px solid var(--t-borda);
    border-radius: var(--radius-md);
    padding: 20px;
    box-shadow: var(--shadow-sm);
  }
  .mo-cartao-raso { padding: 14px; }
  .mo-cartao-solto { padding: 28px; }

  /* Variante de mídia: imagem em cima, corpo embaixo. É a do bundle. */
  .mo-cartao-midia {
    background: var(--t-superficie);
    border-radius: var(--radius-lg);
    overflow: hidden;
    box-shadow: var(--shadow-sm);
    display: flex;
    flex-direction: column;
    padding: 0;
  }
  .mo-cartao-midia > .corpo { padding: 24px; flex: 1; display: flex; flex-direction: column; }

  .mo-cartao-clicavel {
    cursor: pointer;
    text-align: left;
    transition: transform var(--mo-dur-base), box-shadow var(--mo-dur-base);
  }
  .mo-cartao-clicavel:hover { transform: translateY(-3px); box-shadow: var(--shadow-md); }
  .mo-cartao-clicavel:focus-visible { outline: 2px solid var(--t-accent); outline-offset: 2px; }
  .mo-cartao h3, .mo-cartao-midia h3 {
    font-family: var(--font-serif);
    font-size: 20px;
    font-weight: 600;
    margin: 0 0 8px;
    color: var(--t-fg);
  }

  /* A seta que anda no hover — assinatura do bundle (l.1136). */
  .mo-seta {
    display: inline-flex; align-items: center; gap: 6px;
    font-size: 13px; font-weight: 700; letter-spacing: .04em;
    text-transform: uppercase; color: var(--t-accent);
  }
  .mo-seta svg { transition: transform var(--mo-dur-rapido); }
  .mo-cartao-clicavel:hover .mo-seta svg { transform: translateX(4px); }

  /* ── FORMULÁRIO ───────────────────────────────────────────────
     Verbatim de .form-card e .form-row (l.1335–1380): rótulo em caixa
     alta 12px com opacidade .75, campo com borda de 1.5px, fundo papel
     que vira branco no foco e a borda assumindo o vermelho da marca.

     Duas formas de usar, porque a suíte tem as duas:
       .mo-input   — direto no <input>/<select>/<textarea>
       .mo-campo   — envelope com rótulo + campo dentro
     As duas produzem o MESMO campo; a segunda só acrescenta o espaço
     e o rótulo. */
  .mo-input,
  .mo-campo input,
  .mo-campo select,
  .mo-campo textarea {
    width: 100%;
    padding: 12px 16px;
    border: 1.5px solid var(--t-borda);
    border-radius: var(--radius-sm);
    font-family: inherit;
    font-size: 15px;
    min-height: 44px;
    background: var(--t-bg);
    color: var(--t-fg);
    transition: border-color var(--mo-dur-rapido), background var(--mo-dur-rapido);
  }
  .mo-input:focus,
  .mo-campo input:focus,
  .mo-campo select:focus,
  .mo-campo textarea:focus {
    outline: none;
    border-color: var(--t-accent);
    background: var(--t-superficie);
  }
  .mo-input-grande { min-height: var(--alvo-toque-fabrica); font-size: 16px; }
  textarea.mo-input, .mo-campo textarea { min-height: 100px; resize: vertical; }

  .mo-form-cartao {
    background: var(--t-superficie);
    border-radius: var(--radius-lg);
    padding: 40px;
    box-shadow: var(--shadow-md);
  }
  .mo-campo { margin-bottom: 18px; }
  .mo-rotulo,
  .mo-campo label {
    display: block;
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    margin-bottom: 6px;
    color: var(--t-fg);
    opacity: 0.75;
  }
  .mo-campo-duplo { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }

  /* Derivado: o bundle não tinha estado de erro em campo. */
  .mo-input.erro,
  .mo-campo.erro input,
  .mo-campo.erro select,
  .mo-campo.erro textarea { border-color: var(--st-erro-texto); background: var(--st-erro-fundo); }
  .mo-erro-msg { display: block; margin-top: 6px; font-size: 13px; color: var(--st-erro-texto); }

  /* ── CHIP / FILTRO ────────────────────────────────────────────
     Verbatim de .chip (l.1377). Serve de filtro e de multi-escolha. */
  .mo-chip {
    padding: 10px 16px;
    border: 1.5px solid var(--t-borda);
    border-radius: var(--radius-pill);
    font-family: inherit;
    font-size: 13px;
    font-weight: 600;
    background: var(--t-superficie);
    color: var(--t-fg);
    cursor: pointer;
    transition: background var(--mo-dur-rapido), color var(--mo-dur-rapido), border-color var(--mo-dur-rapido);
  }
  .mo-chip:hover:not(.ativo) { border-color: var(--t-accent); color: var(--t-accent); }
  .mo-chip.ativo { background: var(--t-accent); color: #fff; border-color: var(--t-accent); }
  .mo-chip-grupo { display: flex; flex-wrap: wrap; gap: 8px; }

  /* ── ABAS ─────────────────────────────────────────────────────
     Verbatim de .subnav-btn (l.1174): opacidade .55 que vai a 1, e
     a barra de 3px no ativo com o canto arredondado só em cima. */
  .mo-abas {
    display: flex;
    gap: 8px;
    overflow-x: auto;
    scrollbar-width: none;
    border-bottom: 1px solid var(--t-borda);
    background: var(--t-superficie);
  }
  .mo-abas::-webkit-scrollbar { display: none; }
  .mo-aba {
    padding: 16px 8px;
    margin: 0 12px;
    border: none;
    background: none;
    font-family: inherit;
    font-weight: 600;
    font-size: 14px;
    white-space: nowrap;
    color: var(--t-fg);
    opacity: 0.55;
    position: relative;
    cursor: pointer;
    transition: opacity var(--mo-dur-rapido), color var(--mo-dur-rapido);
  }
  .mo-aba:hover { opacity: 1; }
  .mo-aba.ativo { opacity: 1; color: var(--t-accent); }
  .mo-aba.ativo::after {
    content: '';
    position: absolute;
    bottom: 0; left: 0; right: 0;
    height: 3px;
    background: var(--t-accent);
    border-radius: 3px 3px 0 0;
  }

  /* ── SELO DE ESTADO ───────────────────────────────────────────
     Derivado por inteiro: o site não tinha estado. Usa o trio
     texto/fundo/borda de cada estado. */
  .mo-selo {
    display: inline-block;
    padding: 4px 13px;
    border-radius: var(--radius-pill);
    border: 1px solid;
    font-size: 13px;
    font-weight: 600;
    white-space: nowrap;
  }
  .mo-selo-ok      { color: var(--st-ok-texto);      background: var(--st-ok-fundo);      border-color: var(--st-ok-borda); }
  .mo-selo-atencao { color: var(--st-atencao-texto); background: var(--st-atencao-fundo); border-color: var(--st-atencao-borda); }
  .mo-selo-erro    { color: var(--st-erro-texto);    background: var(--st-erro-fundo);    border-color: var(--st-erro-borda); }
  .mo-selo-info    { color: var(--st-info-texto);    background: var(--st-info-fundo);    border-color: var(--st-info-borda); }
  .mo-selo-neutro  { color: var(--st-neutro-texto);  background: var(--st-neutro-fundo);  border-color: var(--st-neutro-borda); }

  /* ── LINHA DE LISTA DENSA ─────────────────────────────────────
     Derivado: tabela é o pão do app de gestão e o site não tinha
     nenhuma. Sem cartão, só divisor e hover quente. */
  .mo-tabela { width: 100%; border-collapse: collapse; font-variant-numeric: tabular-nums; }
  .mo-tabela th {
    text-align: left;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--t-apoio);
    padding: 12px 16px;
    border-bottom: 1px solid var(--t-borda);
    white-space: nowrap;
  }
  .mo-tabela td { padding: 12px 16px; border-bottom: 1px solid var(--t-borda); }
  .mo-tabela tbody tr { transition: background var(--mo-dur-rapido); }
  .mo-tabela tbody tr:hover { background: var(--mo-cream); }
  .mo-tabela .num { text-align: right; font-variant-numeric: tabular-nums; }

  /* ── RÓTULO DE SEÇÃO ──────────────────────────────────────────
     O "eyebrow" que o bundle usa antes de todo título de seção. */
  .mo-eyebrow {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--mo-brown);
  }

  /* ── MOVIMENTO REDUZIDO ───────────────────────────────────────*/
  @media (prefers-reduced-motion: reduce) {
    .mo-btn:hover,
    .mo-cartao-clicavel:hover { transform: none; }
    .mo-cartao-clicavel:hover .mo-seta svg { transform: none; }
  }

  /* ── FAIXA DE ACABAMENTO (Pattern G) ─────────────────────────
     Arte: ds/marca/pattern-g.png — 7421x2469, grade de 9x3 celulas,
     CELULA NATIVA DE 823px. Recebida do Ricardo em 02/09/2026 e
     medida: ela LADRILHA NA HORIZONTAL (diferenca de borda 1,5 em
     255 — emenda invisivel). E por isso que ela e a arte da faixa.

     Isso resolveu o teto de resolucao. A arte anterior tinha celula
     de 42px e a faixa grossa precisava de 91px — uma ampliacao de
     2,17x que borrava a diagonal. Agora QUALQUER tamanho ate 823px
     e uma REDUCAO, entao a diagonal fica limpa. Pode crescer a
     vontade; o antigo teto nao existe mais.

     A REGUA CONTINUA SENDO A CELULA DO TRIANGULO.
     Medido na arte: a FILEIRA tem 826px e a arte tem 2469px de
     altura — razao 2,989. Entao, para a fileira sair com C pixels
     na tela, o background-size e `auto (C * 2,989)`:
         C=25 -> 75px    C=50 -> 149px    C=91 -> 272px
     Nao use H/3 (= 823): a conta erra ~0,4% por fileira e a faixa
     dupla acumula o erro visivelmente.

     ⚠️ `background-position: top left` NAO E OPCIONAL. Com `center`
     o recorte cai no meio da fileira, e a faixa dupla sai como
     meia fileira + uma inteira + meia fileira — sem emenda possivel.
     A dupla tem de ser DUAS FILEIRAS INTEIRAS: altura 2*C, arte em
     C*2,989, ancorada no topo.

     ⚠️ A arte NAO ladrilha na vertical (diferenca 72,5). Serve para
     repeat-x, nunca para repeat nos dois eixos — para fundo de tela
     inteira use .mo-fundo, que usa outra arte.

     ⚠️ Quando a faixa ficar logo acima do selo Kovex, passe
     `semLinha` ao <SeloKovex/> — ele tem um borderTop proprio, e os
     dois juntos viram duas linhas. Isso usa a API que o selo ja
     tem; NAO se altera o selo. */
  .mo-faixa {
    width: 100%;
    height: 50px;
    background-image: url('/ds/marca/pattern-g.png');
    background-size: auto 149px;
    background-repeat: repeat-x;
    background-position: top left;
    flex: none;
  }
  .mo-faixa-fina   { height: 25px;  background-size: auto 75px; }
  .mo-faixa-grossa { height: 91px;  background-size: auto 272px; }
  .mo-faixa-dupla  { height: 182px; background-size: auto 272px; }  /* 2 fileiras INTEIRAS */

  /* ── FUNDO DE TELA (Pattern M) ────────────────────────────────
     Arte: ds/marca/pattern-m.png — composicao de 18x6 celulas.
     Ela NAO ladrilha (nem x nem y), entao NAO se repete: entra como
     PAINEL UNICO com `cover`, cobrindo a viewport. Sem repeticao
     nao ha emenda, que era o defeito silencioso do fundo anterior —
     o pattern-fachada tambem nao ladrilhava (81,9 / 65,6) e vinha
     sendo repetido assim mesmo.

     A opacidade sai do token: 0.06 em app de gestao, 0.18 em peca
     publica. Acima de ~0.10 numa tela de trabalho o triangulo
     comeca a brigar com o texto. */
  .mo-fundo {
    position: fixed;
    inset: 0;
    z-index: 0;
    pointer-events: none;
    opacity: var(--pattern-opacity);
    background-image: url('/ds/marca/pattern-m.png');
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    transition: opacity var(--mo-dur-tema) ease;
  }
  .mo-fundo-peca { opacity: var(--pattern-opacity-peca); }
  .mo-fundo ~ * { position: relative; z-index: 1; }

  /* Apelidos herdados desta sessao — remover quando os apps migrarem. */
  .mo-fundo-g { }
  .mo-fundo-g-peca { }

  @media (prefers-reduced-motion: reduce) {
    .mo-fundo { transition: none; }
  }

}
