@import '_content/Blazor.Bootstrap/Blazor.Bootstrap.7t9tbfaemk.bundle.scp.css';

/* /Components/Layout/CookiesBanner.razor.rz.scp.css */
/* Banner de consentimento de cookies (LGPD), leva 60. Mesma caixa visual
   do <InstalarAppBanner /> (roxo escuro, cantos, sombra) — a posição na
   tela (fixed, embaixo) é do wrapper ".banners-flutuantes" em
   MainLayout.razor.css, que empilha este banner com o de instalar app
   quando os dois aparecem juntos. */
.cookies-banner[b-9mn1cpby9o] {
    display: flex;
    align-items: center;
    gap: var(--espaco-3);
    flex-wrap: wrap;

    background-color: var(--ep-roxo-escuro);
    border-radius: var(--canto-card);
    padding: var(--espaco-3);
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);
}

.cookies-texto[b-9mn1cpby9o] {
    flex: 1;
    min-width: 200px;
    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: var(--legenda-2);
    color: var(--ep-branco);
    margin: 0;
}

.cookies-botoes[b-9mn1cpby9o] {
    display: flex;
    gap: var(--espaco-2);
    flex-shrink: 0;
}

.cookies-botao-aceitar[b-9mn1cpby9o] {
    height: 36px;
    padding: 0 var(--espaco-4);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    cursor: pointer;
    white-space: nowrap;
}

.cookies-botao-recusar[b-9mn1cpby9o] {
    height: 36px;
    padding: 0 var(--espaco-4);
    background-color: transparent;
    color: var(--ep-branco);
    border: 1px solid var(--ep-branco);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    cursor: pointer;
    white-space: nowrap;
}
/* /Components/Layout/Header.razor.rz.scp.css */
.page[b-9cydjgcipl] {
    position: relative;
    display: flex;
    flex-direction: column;
}

main[b-9cydjgcipl] {
    flex: 1;
}

.sidebar[b-9cydjgcipl] {
    background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, var(--ep-roxo-quase-preto) 70%);
}

.top-row[b-9cydjgcipl] {
    background-color: #f7f7f7;
    border-bottom: 1px solid #d6d5d5;
    justify-content: flex-end;
    height: 3.8rem;
    display: flex;
    align-items: center;
}

    .top-row[b-9cydjgcipl]  a, .top-row[b-9cydjgcipl]  .btn-link {
        white-space: nowrap;
        margin-left: 1.5rem;
        text-decoration: none;
    }

        .top-row[b-9cydjgcipl]  a:hover, .top-row[b-9cydjgcipl]  .btn-link:hover {
            text-decoration: underline;
        }

        .top-row[b-9cydjgcipl]  a:first-child {
            overflow: hidden;
            text-overflow: ellipsis;
        }

@media (max-width: 640.98px) {
    .top-row[b-9cydjgcipl] {
        justify-content: space-between;
    }

        .top-row[b-9cydjgcipl]  a, .top-row[b-9cydjgcipl]  .btn-link {
            margin-left: 0;
        }
}

@media (min-width: 641px) {
    .page[b-9cydjgcipl] {
        flex-direction: row;
    }

    .sidebar[b-9cydjgcipl] {
        width: 250px;
        height: 100vh;
        position: sticky;
        top: 0;
    }

    .top-row[b-9cydjgcipl] {
        position: sticky;
        top: 0;
        z-index: 1;
    }

        .top-row.auth[b-9cydjgcipl]  a:first-child {
            flex: 1;
            text-align: right;
            width: 0;
        }

    .top-row[b-9cydjgcipl], article[b-9cydjgcipl] {
        padding-left: 2rem !important;
        padding-right: 1.5rem !important;
    }
}

#blazor-error-ui[b-9cydjgcipl] {
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

    #blazor-error-ui .dismiss[b-9cydjgcipl] {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }

/* ============================================================================
   BARRA DE NAVEGAÇÃO — NOVO VISUAL (leva 5, 2026)
   ----------------------------------------------------------------------------
   Todos os números saíram de medição na Home do Figma, comparando o arquivo
   de componentes (1x) com a tela (2x). A altura de 62px bateu igual nos dois,
   o que confirma a escala.

                          Celular (390)    Computador (1440)
   Largura da barra           310                1216
   Margem lateral              40                 110
   Distância do topo           59                  24
   Altura                      62                  62

   O QUE MUDOU EM RELAÇÃO AO ANTIGO: o cabeçalho era uma faixa verde de
   ponta a ponta, com 80px de altura. Agora é uma PÍLULA FLUTUANTE de 62px,
   com margem em volta. Toda tela do site vai ter o topo um pouco diferente —
   é esperado, e é justamente o que esta leva serve para você conferir.
   ========================================================================== */

/*  A área em volta da barra. É ela que segura as margens e a área segura
    do notch; a pílula em si só se preocupa com o próprio conteúdo. */
.ep-navbar-area[b-9cydjgcipl] {

    /*  ====================================================================
        BARRA FIXA — 2ª tentativa, 28/07/2026 (leva 5c-c)

        A PRIMEIRA TENTATIVA USOU "sticky" E NÃO FUNCIONOU. Vale registrar
        por quê, porque a lição serve para o resto do projeto.

        O "sticky" é o modo educado de fixar: a barra continua ocupando
        lugar na página e só "gruda" quando você rola. É mais simples e não
        mexe no layout de ninguém — por isso foi a primeira escolha.

        Só que o "sticky" depende do que está ACIMA dele na árvore da
        página. Se qualquer bloco que contém a barra tiver recorte de
        conteúdo, ela deixa de grudar — sem erro, sem aviso, simplesmente
        rola embora. Li todo o CSS do site atrás desse recorte e não achei;
        mas o navegador mostrou que ele existe em algum lugar que não dá
        para ver por leitura. (Foi o mesmo tipo de impasse da pendência 12
        do briefing.)

        O "fixed" abaixo NÃO tem essa dependência: ele se prende à janela,
        e nada acima dele pode impedir isso.

        O PREÇO DO "fixed": a barra deixa de ocupar lugar na página, e o
        conteúdo das 41 telas subiria uns 100px, ficando escondido atrás
        dela. Por isso existe o ".ep-navbar-espaco" mais abaixo — um bloco
        invisível com a altura exata da barra, que guarda o lugar que ela
        deixou. Resultado final igual ao do "sticky", só que sem depender
        de ninguém.

        POR QUE O DESFOQUE TAMBÉM PARECIA QUEBRADO: era o mesmo problema.
        Com a barra rolando embora, ela saía da tela — e não dá para ver o
        desfoque de uma coisa que não está mais à vista.
        ==================================================================== */
    position: fixed;
    top: 0;
    left: 0;
    right: 0;

    /*  ORDEM DE EMPILHAMENTO — quem fica na frente de quem.

        30 não é um número escolhido no chute. As imagens de produto do
        carrossel da Home estão em 10; se a barra ficasse abaixo disso, os
        produtos passariam POR CIMA da pílula ao rolar. Os menus laterais
        estão em 1000, então continuam cobrindo a barra quando abrem — que
        é o comportamento de hoje.

        (Os dois menus do visitante estavam em 10 e 20, abaixo da barra.
        Subi os dois para 1000 no SidebarAnonymous.razor.css, para ficarem
        iguais aos do cliente logado. Está explicado lá.) */
    z-index: 30;

    /*  O DESFOQUE ATRÁS DA PÍLULA — refeito em 28/07/2026 (primeiro teste).

        POR QUE EXISTE: rolando, o conteúdo da página passa pelas folgas em
        volta da pílula (40px de cada lado, 24px embaixo). Sem tratamento,
        dá para ver produto e texto deslizando ali.

        O QUE ESTAVA ERRADO NA PRIMEIRA TENTATIVA: o desfoque ficava ligado
        SEMPRE, mesmo com a página parada no topo. Aí ele borrava a divisa
        entre o fundo branco da página e o bloco roxo da tela — foi o
        "quadrado" com transição dura que você viu no print. Além disso, o
        desfoque corta rente na borda do elemento, o que deixa uma emenda
        visível.

        DUAS CORREÇÕES:

        1. Parado no topo, o desfoque é ZERO — a tela fica idêntica à leva
           5b. Ele só aparece quando a página sai do topo, e entra e sai
           suavemente (é o transition abaixo). Quem avisa "saiu do topo" é
           o arquivo wwwroot/js/barra.js, que põe a marca "ep-rolando" na
           página. A regra que liga o desfoque está logo depois deste bloco.

        2. A emenda dura sumiu: a máscara abaixo faz o desfoque se dissolver
           nos últimos 24px, que é exatamente a folga entre a pílula e o
           conteúdo. A pílula em si não é tocada — ela termina onde a
           dissolução começa.

        SE AINDA ACHAR FORTE: baixe o 10px da regra .ep-rolando. Se achar
        fraco, suba. */
    -webkit-backdrop-filter: blur(0px);
    backdrop-filter: blur(0px);
    transition: backdrop-filter 0.25s ease, -webkit-backdrop-filter 0.25s ease;

    -webkit-mask-image: linear-gradient(to bottom, #000 calc(100% - 24px), transparent 100%);
    mask-image: linear-gradient(to bottom, #000 calc(100% - 24px), transparent 100%);

    padding-left: var(--margem-lateral);        /* 40px no celular */
    padding-right: var(--margem-lateral);

    /*  DISTÂNCIA DO TOPO NO CELULAR — 59px no desenho.

        Esse 59 não é um número solto: é exatamente a altura da Ilha
        Dinâmica / notch. Você desenhou a barra respeitando a área segura.

        Por isso aqui não uso 59 fixo, e sim o valor que o próprio aparelho
        informa:
          · site instalado como app num iPhone com Ilha Dinâmica -> 59px
          · site instalado num iPhone com notch ................. -> 47px
          · site aberto no navegador normal ..................... -> 0px,
            e aí vale o mínimo de 16px, senão a barra encostaria no topo.

        IMPORTANTE: isso só funciona porque o App.razor ganhou o
        "viewport-fit=cover" nesta mesma leva. Sem ele, o aparelho responde
        zero e a barra sobe para os 16px mesmo instalado. */
    padding-top: max(16px, env(safe-area-inset-top, 0px));
    padding-bottom: var(--espaco-4);            /* 24px até o conteúdo */
}

/*  DESFOQUE LIGADO — só quando a página saiu do topo.

    A marca "ep-rolando" é posta e tirada pelo wwwroot/js/barra.js. Com a
    página parada no topo ela não existe, esta regra não vale, e a barra
    fica sem desfoque nenhum — igualzinha à leva 5b.

    Detalhe do Blazor, para quem for mexer: o CSS deste arquivo só vale
    para o que está escrito no Header.razor. Escrever "body.ep-rolando"
    antes do nome funciona porque o carimbo do Blazor cai no ÚLTIMO
    elemento do endereço, que continua sendo a barra. */
/*  O BLOCO QUE GUARDA O LUGAR DA BARRA.

    Como a barra agora é "fixed", ela não ocupa mais espaço na página. Este
    bloco invisível fica no lugar dela, com a MESMA altura, para que o
    conteúdo de todas as telas continue começando exatamente onde começava.

    A conta é a soma das três partes da barra, na ordem:
        folga do topo (o notch, ou 16px no navegador comum)
      + altura da pílula (62px, medida no Figma)
      + folga até o conteúdo (24px)

    SE O CONTEÚDO ENCOSTAR NA BARRA OU SOBRAR UM VÃO: é este número que
    está fora de sintonia com o padding da .ep-navbar-area, algumas linhas
    acima. Os dois têm que andar juntos. */
.ep-navbar-espaco[b-9cydjgcipl] {
    height: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4));
}

body.ep-rolando .ep-navbar-area[b-9cydjgcipl] {
    -webkit-backdrop-filter: blur(10px);
    backdrop-filter: blur(10px);
}

.ep-navbar[b-9cydjgcipl] {
    position: relative;                 /* âncora para centralizar o logo */
    display: flex;
    align-items: center;

    height: 62px;                       /* medido */
    box-sizing: border-box;
    padding-left: var(--espaco-5);      /* 32px — leva 21: pedido do dono */
    padding-right: var(--espaco-5);     /* 32px — leva 21: era 28px, pedido do dono */

    background-color: var(--ep-verde);
    border-radius: var(--canto-botao);  /* pílula: 999px */
}

/*  Caixa da logo — leva 21 (04/08/2026). No celular ela CORTA a imagem em
    44×44 (mesma área de toque dos outros ícones — ver o media query mais
    abaixo). No computador só existe pra herdar a centralização por
    posição absoluta que a logo já tinha; não corta nada lá. */
.ep-nav-logo-caixa[b-9cydjgcipl] {
    cursor: pointer;
}

/*  Logo. No celular fica à esquerda, no fluxo normal.
    Altura medida: 46px (bateu no celular e no computador) — no celular o
    tamanho de exibição muda pro media query abaixo (57×44, cortado). */
.ep-nav-logo[b-9cydjgcipl] {
    height: 46px;
    width: auto;
    display: block;
}

/*  Os botões da direita NO COMPUTADOR. O "margin-left: auto" é o que
    empurra o grupo para a ponta direita da barra, sobrando o vazio do
    meio. No celular isso é desligado — ver o media query abaixo. */
.ep-nav-acoes[b-9cydjgcipl] {
    margin-left: auto;
    display: flex;
    align-items: center;
    gap: 28px;                          /* medido entre os ícones */
}

.ep-nav-botao[b-9cydjgcipl] {
    /*  Área de toque de 44px, que é o mínimo do guia — mesmo o ícone
        tendo 24px. Abaixo disso o dedo erra. O botão não tem fundo nem
        borda: quem se vê é só o ícone. */
    width: 44px;
    height: 44px;
    display: inline-flex;
    align-items: center;
    justify-content: center;

    padding: 0;
    background: none;
    border: none;
    cursor: pointer;

    color: var(--ep-roxo);              /* roxo da marca sobre o verde */
    font-size: 24px;                    /* mesmo tamanho de ícone de antes */
    line-height: 1;
}

.ep-nav-botao:hover[b-9cydjgcipl] {
    color: var(--ep-roxo-escuro);
}

/*  Bolinha de notificação da sacola — leva 6c (2026). Só o botão do
    carrinho ganha "position: relative": os outros dois (menu e pessoa) não
    precisam de âncora para nada. */
.ep-nav-sacola[b-9cydjgcipl] {
    position: relative;
}

.ep-nav-bolinha[b-9cydjgcipl] {
    position: absolute;
    top: 4px;
    right: 4px;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background-color: var(--ep-erro);       /* mesmo vermelho do "×" de remover do checkout, no Figma */
    border: 1.5px solid var(--ep-verde);    /* separa a bolinha do fundo verde da barra */
}

/*  Os 44px de área de toque são maiores que os 24px do ícone, e isso sobra
    para os lados. Estes ajustes puxam o primeiro e o último botão de volta
    para a margem medida, para o ícone ficar onde está no desenho. */
.ep-nav-acoes .ep-nav-botao:last-child[b-9cydjgcipl] {
    margin-right: -10px;
}

/* ---------- Busca (leva 51, 08/08/2026, 2ª versão) ----------
   Sem desenho no Figma — recurso novo. DUAS peças separadas de propósito
   (achado na 1ª tentativa): o ".ep-navbar-area" tem uma mask-image (ver
   comentário mais acima, "O DESFOQUE ATRÁS DA PÍLULA") que desbota
   qualquer coisa que vaze pra fora da altura da barra — um painel de
   resultado ali dentro simplesmente não aparecia. Por isso:
     1. O CAMPO cresce AQUI DENTRO da pílula (".ep-nav-busca"/".ep-busca-
        campo") — cabe dentro da altura da barra, a máscara não pega.
     2. A LISTA de resultados (".ep-busca-resultados", mais abaixo neste
        arquivo) é renderizada FORA do <header> no .razor, com posição
        própria — não depende de nenhum ancestral, escapa da máscara. */
.ep-nav-busca[b-9cydjgcipl] {
    display: flex;
    align-items: center;
}

.ep-busca-campo[b-9cydjgcipl] {
    /*  Cresce de 0 até a largura cheia quando abre — é o "a barra em si
        crescendo, o input ficando na própria barra" pedido. Fica DENTRO
        da pílula verde, por isso o fundo branco pra destacar. */
    width: 0;
    overflow: hidden;
    border-radius: var(--canto-campo);
    background-color: var(--ep-branco);
    transition: width 0.25s ease;
}

.ep-busca-campo--aberto[b-9cydjgcipl] {
    width: 180px;
    margin-left: var(--espaco-2);
}

    .ep-busca-campo input[b-9cydjgcipl] {
        width: 180px;         /* mesma largura do aberto — não encolhe com o container fechando */
        height: 32px;
        box-sizing: border-box;
        border: none;
        outline: none;
        background: none;
        padding: 0 var(--espaco-3);
        font-family: var(--fonte-corpo);
        font-size: var(--legenda-2);
        color: var(--ep-roxo-escuro);
    }

/*  Busca em tela cheia do celular (leva 51, 6ª rodada) — escondida por
    padrão (computador nunca mostra; celular só mostra quando a busca está
    ativa, ver ".ep-navbar--busca-ativa" na media query de celular mais
    abaixo). Pedido do dono: em vez de espremer um campo entre 4 ícones
    que já eram medida exata do Figma, a busca vira a barra inteira. */
.ep-busca-mobile-completa[b-9cydjgcipl] {
    display: none;
}

.ep-busca-campo-mobile[b-9cydjgcipl] {
    flex: 1;
    display: flex;
    align-items: center;
    gap: var(--espaco-2);
    height: 44px;
    border-radius: var(--canto-campo);
    background-color: var(--ep-branco);
    padding: 0 var(--espaco-3);
    box-sizing: border-box;
}

    .ep-busca-campo-mobile i[b-9cydjgcipl] {
        color: var(--ep-roxo-escuro);
        opacity: 0.6;
        font-size: 18px;
        flex-shrink: 0;
    }

    .ep-busca-campo-mobile input[b-9cydjgcipl] {
        flex: 1;
        min-width: 0;
        border: none;
        outline: none;
        background: none;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda-2);
        color: var(--ep-roxo-escuro);
    }

/*  Lista de resultados — vive FORA do <header>, ver Header.razor.
    "position: fixed" própria (não herda containing block de nada, já que
    não é mais descendente do ".ep-navbar-area"). z-index 40: acima da
    barra (30), abaixo dos menus grandes (1000). */
.ep-busca-resultados[b-9cydjgcipl] {
    position: fixed;
    top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-2));
    right: var(--margem-lateral);
    z-index: 40;

    width: 320px;
    max-width: calc(100vw - 32px);
    background-color: var(--ep-branco);
    border-radius: var(--canto-card);
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);
    padding: var(--espaco-3);
    box-sizing: border-box;
}

.ep-busca-mensagem[b-9cydjgcipl] {
    margin-top: var(--espaco-2);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo-escuro);
    opacity: 0.6;
    text-align: center;
    padding: var(--espaco-2) 0;
}

.ep-busca-lista[b-9cydjgcipl] {
    margin-top: var(--espaco-2);
    max-height: 320px;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.ep-busca-item[b-9cydjgcipl] {
    display: flex;
    align-items: center;
    gap: var(--espaco-2);
    padding: var(--espaco-1);
    border-radius: var(--canto-botao);
    cursor: pointer;
}

    .ep-busca-item:hover[b-9cydjgcipl] {
        background-color: var(--ep-cinza-100);
    }

    .ep-busca-item img[b-9cydjgcipl] {
        width: 36px;
        height: 36px;
        object-fit: contain;
        flex-shrink: 0;
    }

    .ep-busca-item-nome[b-9cydjgcipl] {
        flex: 1;
        min-width: 0;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda-2);
        color: var(--ep-roxo-escuro);
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

    .ep-busca-item-preco[b-9cydjgcipl] {
        flex-shrink: 0;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda-2);
        color: var(--ep-sucesso);
    }

.ep-busca-item--indisponivel[b-9cydjgcipl] {
    cursor: default;
    opacity: 0.5;
}

    .ep-busca-item--indisponivel .ep-busca-item-preco[b-9cydjgcipl] {
        color: var(--ep-roxo-escuro);
    }

.ep-busca-vertodos[b-9cydjgcipl] {
    display: block;
    margin-top: var(--espaco-2);
    text-align: center;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo);
    text-decoration: none;
}

    .ep-busca-vertodos:hover[b-9cydjgcipl] {
        text-decoration: underline;
    }

/* ---------- CELULAR (leva 21, 04/08/2026) ----------
   Novo desenho do Figma: 4 ícones (hambúrguer, logo, sacola, pessoa) com
   ESPAÇAMENTO IGUAL entre eles (space-between), não mais hambúrguer+logo
   colados à esquerda e sacola+pessoa agrupados à direita. Medido no
   componente do Figma: caixa de 44×44 por ícone, `space-between`, padding
   24px dos dois lados (por isso o padding-right da regra base virou 24,
   igual ao esquerdo — antes era 28, medido pro desenho antigo). */
@media (max-width: 999.98px) {
    .ep-navbar[b-9cydjgcipl] {
        justify-content: space-between;
    }

    /*  Caixa que CORTA a logo em 44×44 — mesma área de toque dos outros
        ícones, igual ao frame do componente no Figma (a imagem de dentro,
        57×44, é maior que o frame, que corta as sobras dos dois lados). */
    .ep-nav-logo-caixa[b-9cydjgcipl] {
        width: 44px;
        height: 44px;
        overflow: hidden;
        display: flex;
        align-items: center;
        justify-content: center;
    }

    /*  Tamanho medido no Figma: 57×44 — a regra base (height:46px, width:
        auto) rendeiava ~59×46 (proporção da imagem nativa, 1289×1000),
        maior que o desenho novo pede. "flex-shrink: 0" evita que a caixa
        acima espreme a imagem pra caber — ela deve ficar cortada, não
        encolhida. */
    .ep-nav-logo[b-9cydjgcipl] {
        width: 57px;
        height: 44px;
        flex-shrink: 0;
    }

    /*  "display: contents" faz a caixa do .ep-nav-acoes desaparecer do
        layout — sacola e pessoa passam a ser filhos diretos do .ep-navbar,
        na mesma fileira do hambúrguer e da logo, para o space-between
        acima distribuir os 4 igualmente. Sem isso, sacola+pessoa
        continuariam coladas uma na outra (gap de 28px fixo), formando um
        terceiro "bloco" em vez de dois ícones independentes. Mesma técnica
        já usada no MyOrders.razor (ai/LESSONS.md não documenta esta, mas
        o padrão é o mesmo: o wrapper só existe para o computador). */
    .ep-nav-acoes[b-9cydjgcipl] {
        display: contents;
    }

    /*  Mesmo ajuste do ":last-child" acima, espelhado pro primeiro ícone —
        agora que o hambúrguer é quem encosta na borda esquerda. */
    .ep-nav-menu-cel[b-9cydjgcipl] {
        margin-left: -10px;
    }

    /*  Busca em tela cheia no celular (leva 51, 6ª/7ª rodada) — troca a
        rodada anterior (campo encolhido pra 120px do lado dos outros
        ícones): o dono pediu pra busca virar a barra inteira em vez de
        espremer, COM animação (pedido explícito na 7ª rodada — "display:
        none/flex" não anima, é tudo-ou-nada; por isso aqui é só
        opacity/transform, "display: flex" fica ligado o tempo todo dos
        dois lados). Ícones normais continuam ocupando o lugar deles (não
        dá pulo de layout), só ficam invisíveis e sem clique. */
    .ep-nav-menu-cel[b-9cydjgcipl],
    .ep-nav-logo-caixa[b-9cydjgcipl],
    .ep-nav-acoes > *[b-9cydjgcipl] {
        transition: opacity 0.2s ease;
    }

    .ep-navbar--busca-ativa .ep-nav-menu-cel[b-9cydjgcipl],
    .ep-navbar--busca-ativa .ep-nav-logo-caixa[b-9cydjgcipl],
    .ep-navbar--busca-ativa .ep-nav-acoes > *[b-9cydjgcipl] {
        opacity: 0;
        pointer-events: none;
    }

    /*  Cobre a barra inteira por cima (absolute — ".ep-navbar" já tem
        "position: relative", ver regra base). Some com opacity 0 +
        "pointer-events: none" (não é clicável escondida), nunca com
        "display: none" — é isso que deixa a transição acontecer. */
    .ep-busca-mobile-completa[b-9cydjgcipl] {
        display: flex;
        align-items: center;
        gap: var(--espaco-2);

        position: absolute;
        top: 0;
        bottom: 0;
        /*  --espaco-5 (32px) era o mesmo recuo padrão da pílula — ficava
            uma sobra visível nas pontas, meio "boiando" dentro da barra.
            --espaco-3 (16px) aproxima das bordas, completando a barra de
            verdade, ainda com respiro claro (não é 0, não fica colado). */
        left: var(--espaco-3);
        right: var(--espaco-3);

        opacity: 0;
        transform: scale(0.96);
        pointer-events: none;
        transition: opacity 0.2s ease, transform 0.2s ease;
    }

    .ep-navbar--busca-ativa .ep-busca-mobile-completa[b-9cydjgcipl] {
        opacity: 1;
        transform: scale(1);
        pointer-events: auto;
    }

    /*  Lista de resultados no celular: "right" ancorado na margem (regra
        base, pensada pro computador) pode não bater com onde a lupa cai
        no space-between. Mais simples e sem risco: trava nas duas margens
        da tela, ignorando a posição exata do ícone. */
    .ep-busca-resultados[b-9cydjgcipl] {
        left: 16px;
        right: 16px;
        width: auto;
        max-width: none;
    }
}

/*  No celular o hambúrguer da esquerda não existe. */
.ep-nav-menu-desk[b-9cydjgcipl] {
    display: none;
}

/* ---------- COMPUTADOR ----------
   O corte em 1000px é o mesmo já usado na tela de login, para o site não
   ter dois pontos de virada diferentes. */
@media (min-width: 1000px) {

    .ep-navbar-area[b-9cydjgcipl] {

        /*  MUDOU NA LEVA 5c — e o resultado na tela é EXATAMENTE o mesmo.

            Antes: a área tinha largura máxima de 1440px e ficava centralizada
            (max-width + margin: 0 auto). Isso bastava enquanto a barra não
            era fixa.

            Problema que apareceu com o desfoque: numa tela maior que 1440px,
            a área parava nos 1440 e o conteúdo que rolasse fora dessa faixa
            passava SEM desfoque, pelas beiradas. Ficava um retângulo borrado
            no meio e a página nítida dos lados.

            Agora a área ocupa a tela inteira (é ela que desfoca de ponta a
            ponta) e a margem é que cresce, mantendo a pílula do mesmo
            tamanho de antes. A conta do max() é: "110px de margem, ou o
            tanto que sobrar de cada lado dos 1440 do desenho — o que for
            maior". Em 1440 dá 110px; em 1900 dá 340px e a pílula continua
            com os mesmos 1220px, centralizada. */
        padding-left: max(var(--margem-lateral-desktop),
                          calc((100% - var(--largura-frame-desktop)) / 2
                               + var(--margem-lateral-desktop)));
        padding-right: max(var(--margem-lateral-desktop),
                           calc((100% - var(--largura-frame-desktop)) / 2
                                + var(--margem-lateral-desktop)));
        padding-top: var(--espaco-4);                   /* 24px — medido */
    }

    /*  No computador a folga do topo é 24px em vez do notch, então o bloco
        que guarda o lugar muda junto: 24 + 62 + 24. */
    .ep-navbar-espaco[b-9cydjgcipl] {
        height: calc(var(--espaco-4) + 62px + var(--espaco-4));
    }

    .ep-navbar[b-9cydjgcipl] {
        padding-left: var(--espaco-5);      /* 32px — medido */
        padding-right: var(--espaco-5);
    }

    /*  No computador o logo fica no CENTRO da barra, e não à esquerda.
        Centralizo por posição absoluta em vez de espaçamento porque o lado
        esquerdo (um botão) e o direito (dois botões) têm larguras
        diferentes — dividir o espaço deixaria o logo levemente torto.
        Leva 21: a posição absoluta migrou da img pra caixa que a envolve
        (.ep-nav-logo-caixa) — mesmo efeito, só muda quem é o âncora. */
    .ep-nav-logo-caixa[b-9cydjgcipl] {
        position: absolute;
        left: 50%;
        transform: translateX(-50%);
    }

    /* Troca de lugar: aparece o hambúrguer da esquerda, some o da direita */
    .ep-nav-menu-desk[b-9cydjgcipl] {
        display: inline-flex;
    }

    .ep-nav-menu-cel[b-9cydjgcipl] {
        display: none;
    }

    .ep-nav-acoes[b-9cydjgcipl] {
        gap: var(--espaco-4);               /* 24px — medido no computador */
    }
}

.sidebar-s[b-9cydjgcipl] {
    height: 100%;
    width: 250px;
    position: fixed !important;
    z-index: 1;
    top: 0;
    overflow-x: hidden;
    transition: 0.5s;
    padding-top: 60px;
    border-radius: 0 25px 25px 0;
}

.right-sidebar[b-9cydjgcipl] {
    right: 0;
    background-color: var(--ep-roxo);
    border-radius: 25px 0 0 25px;
    color: var(--ep-verde);
}

.sidebar.right-sidebar a[b-9cydjgcipl] {
    padding: 32px 32px 8px 32px;
    text-decoration: none;
    font-size: 16px;
    color: var(--ep-verde);
    display: block;
    gap: 10px;
    transition: 0.3s;
}

    .sidebar.right-sidebar a:hover[b-9cydjgcipl] {
        color: var(--ep-azul-claro);
    }

/*  As regras .header-logo e .bi-list/.bi-person-fill saíram na leva 5:
    o logo agora é .ep-nav-logo e os ícones viraram Phosphor dentro de
    botões de verdade. Nenhuma outra tela usava essas classes — conferi
    antes de apagar. */


.sidebar-closed[b-9cydjgcipl] {
    width: 0;
}

.sidebar-open[b-9cydjgcipl] {
    width: 250px;
}


@media (max-width: 375px) {
    .top-row[b-9cydjgcipl] {
        width: 90% !important;
    }
}
/* /Components/Layout/HeaderComponent.razor.rz.scp.css */
.page-header[b-hlpuwx2oth] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 10px;
    background-color: var(--ep-branco);
/*    border-bottom: 2px solid var(--ep-roxo);*/
}

.header-right span[b-hlpuwx2oth], .header-left a[b-hlpuwx2oth], .header-right i[b-hlpuwx2oth] {
    color: var(--ep-roxo);
    font-size: 1.5rem;
    text-decoration: none;
}

    .header-left a:hover[b-hlpuwx2oth] {
        text-decoration: underline;
    }

.header-right i[b-hlpuwx2oth] {
    cursor: pointer;
}

@media (max-width: 768px) {
    span.back[b-hlpuwx2oth] {
        display: none !important;
    }
}
/* /Components/Layout/InstalarAppBanner.razor.rz.scp.css */
/* Banner de "instalar como app" (08/08/2026). A posição na tela (fixed,
   embaixo, acima do conteúdo mas abaixo dos painéis de menu) mudou pro
   wrapper ".banners-flutuantes" em MainLayout.razor.css na leva 60 —
   ele empilha este banner com o de cookies em vez de sobrepor, quando os
   dois aparecem juntos. Aqui fica só a aparência. */
.instalar-app-banner[b-96pz6c90x5] {
    display: flex;
    align-items: center;
    gap: var(--espaco-3);

    background-color: var(--ep-roxo-escuro);
    border-radius: var(--canto-card);
    padding: var(--espaco-3);
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);
}

.instalar-app-conteudo[b-96pz6c90x5] {
    flex: 1;
    display: flex;
    align-items: center;
    gap: var(--espaco-3);
    flex-wrap: wrap;
}

.instalar-app-texto[b-96pz6c90x5] {
    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: var(--legenda-2);
    color: var(--ep-branco);
    margin: 0;
}

    .instalar-app-texto i[b-96pz6c90x5] {
        vertical-align: -2px;
    }

.instalar-app-botao[b-96pz6c90x5] {
    height: 36px;
    padding: 0 var(--espaco-4);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    cursor: pointer;
    white-space: nowrap;
}

.instalar-app-fechar[b-96pz6c90x5] {
    background: none;
    border: none;
    color: var(--ep-branco);
    font-size: 20px;
    line-height: 1;
    padding: var(--espaco-1);
    cursor: pointer;
}
/* /Components/Layout/MainLayout.razor.rz.scp.css */
.page[b-y6ro8sj9qs] {
    position: relative;
    display: flex;
    flex-direction: column;
}

main[b-y6ro8sj9qs] {
    flex: 1;
}

.sidebar[b-y6ro8sj9qs] {
    background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, var(--ep-roxo-quase-preto) 70%);
}


.top-row[b-y6ro8sj9qs], article[b-y6ro8sj9qs] {
    padding-left: 0 !important;
    padding-right: 0 !important;
}

@media (min-width: 641px) {
    .top-row[b-y6ro8sj9qs], article[b-y6ro8sj9qs] {
        padding-left: 0 !important;
        padding-right: 0 !important;
    }
}

.top-row[b-y6ro8sj9qs] {
    background-color: #f7f7f7;
    border-bottom: 1px solid #d6d5d5;
    justify-content: flex-end;
    height: 3.5rem;
    display: flex;
    align-items: center;
}

    .top-row[b-y6ro8sj9qs]  a, .top-row[b-y6ro8sj9qs]  .btn-link {
        white-space: nowrap;
        margin-left: 1.5rem;
        text-decoration: none;
    }

    .top-row[b-y6ro8sj9qs]  a:hover, .top-row[b-y6ro8sj9qs]  .btn-link:hover {
        text-decoration: underline;
    }

    .top-row[b-y6ro8sj9qs]  a:first-child {
        overflow: hidden;
        text-overflow: ellipsis;
    }

@media (max-width: 640.98px) {
    .top-row[b-y6ro8sj9qs] {
        justify-content: space-between;
    }

    .top-row[b-y6ro8sj9qs]  a, .top-row[b-y6ro8sj9qs]  .btn-link {
        margin-left: 0;
    }
}

@media (min-width: 641px) {
    .page[b-y6ro8sj9qs] {
        flex-direction: row;
    }

    .sidebar[b-y6ro8sj9qs] {
        width: 250px;
        height: 100vh;
        position: sticky;
        top: 0;
    }

    .top-row[b-y6ro8sj9qs] {
        position: sticky;
        top: 0;
        z-index: 1;
    }

    .top-row.auth[b-y6ro8sj9qs]  a:first-child {
        flex: 1;
        text-align: right;
        width: 0;
    }

    .top-row[b-y6ro8sj9qs], article[b-y6ro8sj9qs] {
        padding-left: 2rem !important;
        padding-right: 1.5rem !important;
    }
}

#blazor-error-ui[b-y6ro8sj9qs] {
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

    #blazor-error-ui .dismiss[b-y6ro8sj9qs] {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }

.green-header[b-y6ro8sj9qs] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 10px;
    background-color: var(--ep-verde);
    position: relative;
    transition: padding 0.5s;
}

.sidebar-s[b-y6ro8sj9qs] {
    height: 100%;
    width: 250px;
    position: fixed !important;
    z-index: 1;
    top: 0;
    overflow-x: hidden;
    transition: 0.5s;
    padding-top: 60px;
    border-radius: 0 25px 25px 0;
}

.right-sidebar[b-y6ro8sj9qs] {
    right: 0;
    background-color: var(--ep-roxo);
    border-radius: 25px 0 0 25px;
    color: var(--ep-azul-medio);
}

.sidebar.right-sidebar a[b-y6ro8sj9qs] {
    padding: 32px 32px 8px 32px;
    text-decoration: none;
    font-size: 16px;
    color: var(--ep-azul-medio);
    display: block;
    gap: 10px;
    transition: 0.3s;
}

    .sidebar.right-sidebar a:hover[b-y6ro8sj9qs] {
        color: var(--ep-azul-claro);
    }

.header-logo[b-y6ro8sj9qs] {
    width: 100px;
    position: absolute;
    top: -0%;
    left: 50%;
    transform: translateX(-40%);
}
.bi-list[b-y6ro8sj9qs], .bi-person-fill[b-y6ro8sj9qs] {
    cursor: pointer;
    z-index: 1;
}


.sidebar-closed[b-y6ro8sj9qs] {
    width: 0;
}

.sidebar-open[b-y6ro8sj9qs] {
    width: 250px;
}

@media (max-width: 768px) {
    .header-logo[b-y6ro8sj9qs] {
        width: 80px;
    }
}

/* Empilha os banners flutuantes (instalar app + cookies) em vez de
   sobrepor — os dois podem aparecer juntos pra um visitante novo que
   ainda não decidiu nenhum dos dois. Cada banner cuida só da própria
   aparência; aqui é só "onde na tela" — leva 60. */
.banners-flutuantes[b-y6ro8sj9qs] {
    position: fixed;
    left: var(--espaco-3);
    right: var(--espaco-3);
    bottom: calc(var(--espaco-3) + env(safe-area-inset-bottom));
    z-index: 900;
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

@media (min-width: 1000px) {
    .banners-flutuantes[b-y6ro8sj9qs] {
        left: auto;
        max-width: 420px;
    }
}

/* /Components/Layout/NotificacaoPushBanner.razor.rz.scp.css */
/* Banner de permissão de Web Push (Sprint 14, item 2). Mesma aparência do
   <InstalarAppBanner /> — CSS duplicado aqui porque o escopo de CSS do
   Blazor não atravessa arquivo (ai/LESSONS.md item 1). Posição na tela
   (fixed, dentro de ".banners-flutuantes") vem do MainLayout.razor.css. */
.notificacao-push-banner[b-1eeev173n3] {
    display: flex;
    align-items: center;
    gap: var(--espaco-3);

    background-color: var(--ep-roxo-escuro);
    border-radius: var(--canto-card);
    padding: var(--espaco-3);
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);
}

.notificacao-push-conteudo[b-1eeev173n3] {
    flex: 1;
    display: flex;
    align-items: center;
    gap: var(--espaco-3);
    flex-wrap: wrap;
}

.notificacao-push-texto[b-1eeev173n3] {
    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: var(--legenda-2);
    color: var(--ep-branco);
    margin: 0;
}

.notificacao-push-botao[b-1eeev173n3] {
    height: 36px;
    padding: 0 var(--espaco-4);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    cursor: pointer;
    white-space: nowrap;
}

.notificacao-push-fechar[b-1eeev173n3] {
    background: none;
    border: none;
    color: var(--ep-branco);
    font-size: 20px;
    line-height: 1;
    padding: var(--espaco-1);
    cursor: pointer;
}
/* /Components/Layout/ResetPassword.razor.rz.scp.css */
/* Visual novo (leva 34) — sem desenho no Figma pra esta modal, mesma
   receita das outras modais de cadastro do admin (Categoria/Marca/Modelo/
   Sabor, leva 31): classes "cadastro-modal-*", campo com a receita oficial
   do site (AddressComponent.razor.css). */

.cadastro-modal[b-054phmwttn] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    padding: var(--espaco-5);
}

.cadastro-modal-cabecalho[b-054phmwttn] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.cadastro-modal-titulo[b-054phmwttn] {
    font-family: var(--fonte-titulo);
    font-size: var(--subtitulo);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

.cadastro-modal-descricao[b-054phmwttn] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-50);
}

.cadastro-modal-campo[b-054phmwttn] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

.cadastro-modal-rotulo[b-054phmwttn] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
}

/* Mesma receita de campo já usada no resto do site (leva 13c,
   AddressComponent.razor.css) — pílula com contorno roxo, sombra interna
   sutil e contorno verde no foco. */
.cadastro-modal-input[b-054phmwttn] {
    height: var(--altura-campo);
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-campo);
    border: 1px solid var(--ep-roxo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    background-color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    appearance: none;
    -webkit-appearance: none;
    box-sizing: border-box;
}

.cadastro-modal-input[b-054phmwttn]::placeholder {
    color: var(--ep-roxo-escuro);
    opacity: 1;
}

.cadastro-modal-input:focus[b-054phmwttn] {
    outline: 2px solid var(--ep-verde);
    outline-offset: 2px;
}

/* Campo de busca + botão redondo lado a lado. */
.cadastro-modal-busca-linha[b-054phmwttn] {
    display: flex;
    align-items: center;
    gap: var(--espaco-2);
}

    .cadastro-modal-busca-linha .cadastro-modal-input[b-054phmwttn] {
        flex: 1;
    }

.cadastro-modal-icone-busca[b-054phmwttn] {
    width: var(--altura-campo);
    height: var(--altura-campo);
    flex-shrink: 0;
    border-radius: var(--canto-redondo);
    border: none;
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    cursor: pointer;
    transition: filter .15s;
}

.cadastro-modal-icone-busca:hover[b-054phmwttn] {
    filter: brightness(0.92);
}

/* Linha fina de separação — mesma receita das outras modais de cadastro. */
.cadastro-modal-divisor[b-054phmwttn] {
    height: 0.5px;
    background-color: rgba(0, 0, 0, 0.25);
}

.cadastro-modal-usuario-info[b-054phmwttn] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

    .cadastro-modal-usuario-info p[b-054phmwttn] {
        margin: 0;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        color: var(--ds-cinza-75);
    }

    .cadastro-modal-usuario-info strong[b-054phmwttn] {
        color: var(--ep-roxo-escuro);
    }

.cadastro-modal-botao-salvar[b-054phmwttn] {
    height: 44px;
    width: 100%;
    border-radius: var(--canto-botao);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
    transition: filter .15s;
}

.cadastro-modal-botao-salvar:hover[b-054phmwttn] {
    filter: brightness(0.92);
}
/* /Components/Layout/SidebarAdmin.razor.rz.scp.css */
/* =============================================================================
   SidebarAdmin.razor.css — ESVAZIADO NA LEVA 6b (2026)
   =============================================================================

   TODO o visual deste painel passou para o "wwwroot/app.css", na seção
   "PAINÉIS DE MENU". Lá as regras são escritas UMA vez e valem para os cinco
   painéis do site; aqui elas eram a quinta cópia da mesma coisa.

   POR QUE ESVAZIAR, E NÃO SÓ DEIXAR PARADO: o CSS de escopo do Blazor tem
   força MAIOR que o global, porque o compilador acrescenta um seletor de
   atributo a cada regra daqui. Se estas linhas ficassem, elas venceriam o
   app.css. E duas delas quebrariam o desenho novo em silêncio:

       .nav-link, #text, a, span, strong { color: var(--ep-verde) !important; }
       strong { font-size: 0.6rem !important; }

   A primeira pintaria de verde TODO link e TODO span do painel — inclusive os
   itens, que no desenho são brancos. A segunda encolheria textos para 0.6rem.

   O que havia aqui além disso era código morto: cabeçalho verde antigo
   (.green-header), logo do cabeçalho antigo (.header-logo), a faixa .top-row
   do modelo original do Blazor e ícones desenhados em SVG dentro do CSS que
   nenhum elemento deste arquivo chamava.

   O arquivo fica no lugar, vazio de regras, para deixar claro que o visual
   mudou de casa — e não que alguém esqueceu de criá-lo.
   ============================================================================= */
/* /Components/Layout/SidebarAnonymous.razor.rz.scp.css */
/* =============================================================================
   SidebarAnonymous.razor.css — ESVAZIADO NA LEVA 6b (2026)
   =============================================================================

   TODO o visual deste painel passou para o "wwwroot/app.css", na seção
   "PAINÉIS DE MENU". Lá as regras são escritas UMA vez e valem para os cinco
   painéis do site; aqui elas eram a quinta cópia da mesma coisa.

   POR QUE ESVAZIAR, E NÃO SÓ DEIXAR PARADO: o CSS de escopo do Blazor tem
   força MAIOR que o global, porque o compilador acrescenta um seletor de
   atributo a cada regra daqui. Se estas linhas ficassem, elas venceriam o
   app.css. E duas delas quebrariam o desenho novo em silêncio:

       .nav-link, #text, a, span, strong { color: var(--ep-verde) !important; }
       strong { font-size: 0.6rem !important; }

   A primeira pintaria de verde TODO link e TODO span do painel — inclusive os
   itens, que no desenho são brancos. A segunda encolheria textos para 0.6rem.

   O que havia aqui além disso era código morto: cabeçalho verde antigo
   (.green-header), logo do cabeçalho antigo (.header-logo), a faixa .top-row
   do modelo original do Blazor e ícones desenhados em SVG dentro do CSS que
   nenhum elemento deste arquivo chamava.

   O arquivo fica no lugar, vazio de regras, para deixar claro que o visual
   mudou de casa — e não que alguém esqueceu de criá-lo.
   ============================================================================= */
/* /Components/Layout/SidebarCategories.razor.rz.scp.css */
/* =============================================================================
   SidebarCategories.razor.css — ESVAZIADO NA LEVA 6b (2026)
   =============================================================================

   TODO o visual deste painel passou para o "wwwroot/app.css", na seção
   "PAINÉIS DE MENU". Lá as regras são escritas UMA vez e valem para os cinco
   painéis do site; aqui elas eram a quinta cópia da mesma coisa.

   POR QUE ESVAZIAR, E NÃO SÓ DEIXAR PARADO: o CSS de escopo do Blazor tem
   força MAIOR que o global, porque o compilador acrescenta um seletor de
   atributo a cada regra daqui. Se estas linhas ficassem, elas venceriam o
   app.css. E duas delas quebrariam o desenho novo em silêncio:

       .nav-link, #text, a, span, strong { color: var(--ep-verde) !important; }
       strong { font-size: 0.6rem !important; }

   A primeira pintaria de verde TODO link e TODO span do painel — inclusive os
   itens, que no desenho são brancos. A segunda encolheria textos para 0.6rem.

   O que havia aqui além disso era código morto: cabeçalho verde antigo
   (.green-header), logo do cabeçalho antigo (.header-logo), a faixa .top-row
   do modelo original do Blazor e ícones desenhados em SVG dentro do CSS que
   nenhum elemento deste arquivo chamava.

   O arquivo fica no lugar, vazio de regras, para deixar claro que o visual
   mudou de casa — e não que alguém esqueceu de criá-lo.
   ============================================================================= */
/* /Components/Layout/SidebarClient.razor.rz.scp.css */
/* =============================================================================
   SidebarClient.razor.css — ESVAZIADO NA LEVA 6b (2026)
   =============================================================================

   TODO o visual deste painel passou para o "wwwroot/app.css", na seção
   "PAINÉIS DE MENU". Lá as regras são escritas UMA vez e valem para os cinco
   painéis do site; aqui elas eram a quinta cópia da mesma coisa.

   POR QUE ESVAZIAR, E NÃO SÓ DEIXAR PARADO: o CSS de escopo do Blazor tem
   força MAIOR que o global, porque o compilador acrescenta um seletor de
   atributo a cada regra daqui. Se estas linhas ficassem, elas venceriam o
   app.css. E duas delas quebrariam o desenho novo em silêncio:

       .nav-link, #text, a, span, strong { color: var(--ep-verde) !important; }
       strong { font-size: 0.6rem !important; }

   A primeira pintaria de verde TODO link e TODO span do painel — inclusive os
   itens, que no desenho são brancos. A segunda encolheria textos para 0.6rem.

   O que havia aqui além disso era código morto: cabeçalho verde antigo
   (.green-header), logo do cabeçalho antigo (.header-logo), a faixa .top-row
   do modelo original do Blazor e ícones desenhados em SVG dentro do CSS que
   nenhum elemento deste arquivo chamava.

   O arquivo fica no lugar, vazio de regras, para deixar claro que o visual
   mudou de casa — e não que alguém esqueceu de criá-lo.
   ============================================================================= */
/* /Components/Layout/SidebarDelivery.razor.rz.scp.css */
/* =============================================================================
   SidebarDelivery.razor.css — ESVAZIADO NA LEVA 6b (2026)
   =============================================================================

   TODO o visual deste painel passou para o "wwwroot/app.css", na seção
   "PAINÉIS DE MENU". Lá as regras são escritas UMA vez e valem para os cinco
   painéis do site; aqui elas eram a quinta cópia da mesma coisa.

   POR QUE ESVAZIAR, E NÃO SÓ DEIXAR PARADO: o CSS de escopo do Blazor tem
   força MAIOR que o global, porque o compilador acrescenta um seletor de
   atributo a cada regra daqui. Se estas linhas ficassem, elas venceriam o
   app.css. E duas delas quebrariam o desenho novo em silêncio:

       .nav-link, #text, a, span, strong { color: var(--ep-verde) !important; }
       strong { font-size: 0.6rem !important; }

   A primeira pintaria de verde TODO link e TODO span do painel — inclusive os
   itens, que no desenho são brancos. A segunda encolheria textos para 0.6rem.

   O que havia aqui além disso era código morto: cabeçalho verde antigo
   (.green-header), logo do cabeçalho antigo (.header-logo), a faixa .top-row
   do modelo original do Blazor e ícones desenhados em SVG dentro do CSS que
   nenhum elemento deste arquivo chamava.

   O arquivo fica no lugar, vazio de regras, para deixar claro que o visual
   mudou de casa — e não que alguém esqueceu de criá-lo.
   ============================================================================= */
/* /Components/Pages/Configuracao/Config.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO — /config (leva 33), a partir do grupo Figma "REDESIGN —
   Configurações (Config + ConfigPainel)" (arquivo EUPHORIA, página
   "02 - Telas"). Mesma casca de /inventory — ver ai/DESIGN_SYSTEM.md,
   "Banner do título". Único breakpoint do site: 1000px.

   Campo de texto usa a receita oficial do site (fundo branco, borda
   roxa, sombra interna, contorno verde no foco — AddressComponent.razor.css)
   em vez da borda cinza que este frame específico do Figma desenha —
   mesma decisão já tomada na leva 31 pra manter o admin consistente.
   ========================================================================== */

.config-pagina[b-hw3c7jupzo] {
    background-color: var(--ep-cinza-100);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.config-hero[b-hw3c7jupzo] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-5);

    display: flex;
    flex-direction: column;
    align-items: center;

    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.config-caminho[b-hw3c7jupzo] {
    display: block;
    align-self: flex-start;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    margin-bottom: var(--espaco-2);
    padding-left: var(--espaco-4);
}

    .config-caminho a[b-hw3c7jupzo] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .config-caminho a:hover[b-hw3c7jupzo] {
            text-decoration: underline;
        }

.config-titulo[b-hw3c7jupzo] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-5);
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0;
}

/* ---------- Card branco de conteúdo ---------- */
.config-card[b-hw3c7jupzo] {
    background-color: var(--ep-branco);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
}

/* ::deep é obrigatório aqui: o <form> de verdade nasce DENTRO do
   componente <EditForm> (Microsoft.AspNetCore.Components.Forms, não
   escrito em Config.razor) — o atributo de escopo do Blazor nunca chega
   nele, então ".config-form" sozinho (sem ::deep) não pega em nada, sem
   erro nenhum. Mesma receita já usada em AddressComponent.razor.css pros
   campos <InputText>/<InputSelect> (ai/LESSONS.md, item 1 e item 19). */
[b-hw3c7jupzo] .config-form {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-5);
}

/* Só agrupa título + conteúdo de cada seção (Contato/Frete/Cupons/
   Horários) — sem caixa visível, o dono pediu pra tirar o contorno que
   "abraçava" cada seção numa rodada anterior. */
.config-secao[b-hw3c7jupzo] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

.config-secao-titulo[b-hw3c7jupzo] {
    font-family: var(--fonte-titulo);
    font-weight: normal;
    font-size: var(--texto-peq);
    color: var(--ep-roxo-escuro);
    margin: 0;
}

/* ---------- Linhas de campo ---------- */
.config-linha[b-hw3c7jupzo] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
}

.config-campo[b-hw3c7jupzo] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
    width: 100%;
}

.config-label[b-hw3c7jupzo] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    color: var(--ds-cinza-75);
}

/* Mesma receita oficial de campo já usada no resto do site (leva 13c,
   AddressComponent.razor.css) — fundo branco, borda roxa, sombra interna,
   contorno verde no foco. */
.config-input[b-hw3c7jupzo] {
    width: 100%;
    box-sizing: border-box;
    height: var(--altura-campo);
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-campo);
    padding: 0 var(--espaco-4);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
}

    .config-input[b-hw3c7jupzo]::placeholder {
        color: var(--ep-roxo-escuro);
        opacity: 1;
    }

    .config-input:focus[b-hw3c7jupzo] {
        outline: 2px solid var(--ep-verde);
        outline-offset: 2px;
    }

/* Campo com prefixo "R$" (Preço por km / Valor mínimo da entrega). */
.config-input-moeda[b-hw3c7jupzo] {
    position: relative;
}

    .config-input-moeda .config-moeda-prefixo[b-hw3c7jupzo] {
        position: absolute;
        left: var(--espaco-4);
        top: 50%;
        transform: translateY(-50%);
        color: var(--ep-roxo-escuro);
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        pointer-events: none;
    }

    .config-input-moeda .config-input[b-hw3c7jupzo] {
        padding-left: calc(var(--espaco-4) + 22px);
    }

/* ---------- Horários de entrega — acordeão próprio ----------
   Não usa o <Accordion>/<AccordionItem> do BlazorBootstrap: o CSS de
   escopo do Blazor não alcança o HTML que ele desenha por dentro (mesmo
   problema já achado com o <Modal> na leva 31). */
.config-horarios[b-hw3c7jupzo] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

.config-horario-item[b-hw3c7jupzo] {
    background-color: var(--ep-branco);
    border: 1px solid rgba(0, 0, 0, 0.25);
    border-radius: var(--canto-m);
    padding: var(--espaco-3);
}

.config-horario-cabecalho[b-hw3c7jupzo] {
    width: 100%;
    display: flex;
    align-items: center;
    gap: var(--espaco-2);
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
    text-align: left;
    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

    .config-horario-cabecalho i[b-hw3c7jupzo] {
        color: var(--ep-roxo-escuro);
    }

.config-horario-resumo[b-hw3c7jupzo] {
    flex: 1;
    font-weight: normal;
    font-size: var(--legenda-2);
    color: var(--ds-cinza-75);
}

.config-horario-corpo[b-hw3c7jupzo] {
    margin-top: var(--espaco-3);
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

.config-horario-controles[b-hw3c7jupzo] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--espaco-2);
    align-items: center;
}

.config-horario-time[b-hw3c7jupzo] {
    width: auto;
    flex: 1 1 140px;
}

/* ---------- Tabela de horários (dentro do dia aberto) — só computador ----------
   Mesmo padrão já usado em /inventory (.inventory-tabela) — cabeçalho
   roxo cheio, texto branco peso normal, pontas em pílula. Uma tabela de
   verdade não cabe na largura do celular sem quebrar — lá vira lista de
   linhas (.config-horarios-lista-mobile, abaixo), mesma solução de
   /manager/category (.category-tabela-wrap / .category-cards-mobile). */
.config-tabela-wrap[b-hw3c7jupzo] {
    display: none;
    overflow-x: auto;
}

.config-tabela-horarios[b-hw3c7jupzo] {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
}

    .config-tabela-horarios thead[b-hw3c7jupzo] {
        background-color: var(--ep-roxo);
    }

    .config-tabela-horarios th[b-hw3c7jupzo] {
        text-align: left;
        font-weight: normal;
        color: var(--ep-branco);
        padding: var(--espaco-2) var(--espaco-3);
    }

        .config-tabela-horarios th:first-child[b-hw3c7jupzo] {
            border-radius: var(--canto-botao) 0 0 var(--canto-botao);
        }

        .config-tabela-horarios th:last-child[b-hw3c7jupzo] {
            border-radius: 0 var(--canto-botao) var(--canto-botao) 0;
            text-align: right;
        }

    .config-tabela-horarios td[b-hw3c7jupzo] {
        padding: var(--espaco-2) var(--espaco-3);
        color: var(--ds-cinza-75);
        border-top: 1px solid var(--ds-cinza-15);
    }

    .config-tabela-horarios tbody tr:first-child td[b-hw3c7jupzo] {
        border-top: none;
    }

/* ---------- Lista de linhas (celular), no lugar da tabela ---------- */
.config-horarios-lista-mobile[b-hw3c7jupzo] {
    display: flex;
    flex-direction: column;
}

.config-horario-linha-mobile[b-hw3c7jupzo] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-2);
    padding: var(--espaco-2) 0;
    border-top: 1px solid var(--ds-cinza-15);
}

    .config-horario-linha-mobile:first-child[b-hw3c7jupzo] {
        border-top: none;
    }

.config-horario-linha-info[b-hw3c7jupzo] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
}

/* Ícones de editar/excluir — mesmo círculo colorido padrão já usado em
   /manager/category, /manager/brend etc. (Category.razor.css,
   .category-icone). Menor no celular, 36px no computador. */
.config-tabela-acoes[b-hw3c7jupzo] {
    display: flex;
    gap: var(--espaco-2);
    justify-content: flex-end;
    flex-shrink: 0;
}

.config-icone[b-hw3c7jupzo] {
    width: 32px;
    height: 32px;
    border: none;
    border-radius: var(--canto-redondo);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--ep-branco);
    cursor: pointer;
    flex-shrink: 0;
}

.config-icone--editar[b-hw3c7jupzo] {
    background-color: var(--ep-aviso);
    color: var(--ep-preto);
}

.config-icone--excluir[b-hw3c7jupzo] {
    background-color: var(--ep-erro-forte);
}

/* ---------- Botões ---------- */
.config-botao[b-hw3c7jupzo] {
    height: 44px;
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    text-align: center;
    cursor: pointer;
    border: none;
    flex-shrink: 0;
    white-space: nowrap;
}

.config-botao--verde[b-hw3c7jupzo] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.config-botao--contorno[b-hw3c7jupzo] {
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px solid var(--ep-roxo);
}

.config-botao--erro-contorno[b-hw3c7jupzo] {
    background-color: var(--ep-branco);
    color: var(--ep-erro);
    border: 1px solid var(--ep-erro);
}

.config-botao--sucesso-contorno[b-hw3c7jupzo] {
    background-color: var(--ep-branco);
    color: var(--ep-sucesso);
    border: 1px solid var(--ep-sucesso);
}

.config-acoes[b-hw3c7jupzo] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

/* ---------- Estado vazio ---------- */
.config-vazio[b-hw3c7jupzo] {
    text-align: center;
    padding: var(--espaco-6) 0;
}

    .config-vazio i[b-hw3c7jupzo] {
        font-size: 48px;
        color: var(--ep-roxo);
    }

    .config-vazio h3[b-hw3c7jupzo] {
        color: var(--ep-verde-escuro);
        margin-top: var(--espaco-3);
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        font-weight: normal;
    }

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .config-pagina[b-hw3c7jupzo] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .config-hero[b-hw3c7jupzo] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: var(--espaco-5);
        margin-bottom: var(--espaco-9);

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .config-titulo[b-hw3c7jupzo] {
        font-size: var(--titulo-3);
    }

    .config-caminho[b-hw3c7jupzo] {
        padding-left: var(--espaco-5);
    }

    .config-card[b-hw3c7jupzo] {
        padding: var(--espaco-5);
    }

    .config-linha[b-hw3c7jupzo] {
        flex-direction: row;
        flex-wrap: wrap;
    }

    /* flex-grow: 0 — sem isso, o último campo de uma linha ímpar (ex.:
       "Valor mínimo da entrega" sozinho na 2ª linha da seção Frete)
       esticava pra ocupar a largura toda, em vez de manter os mesmos
       ~210px dos outros campos da mesma seção. */
    .config-campo[b-hw3c7jupzo] {
        flex: 0 1 210px;
    }

    .config-linha--contato .config-campo[b-hw3c7jupzo] {
        flex: 0 1 280px;
    }

    .config-horario-controles[b-hw3c7jupzo] {
        flex-wrap: nowrap;
    }

    /* Tabela some, lista de linhas vira tabela — troca só no breakpoint,
       mesmo padrão de /manager/category. */
    .config-tabela-wrap[b-hw3c7jupzo] {
        display: block;
    }

    .config-horarios-lista-mobile[b-hw3c7jupzo] {
        display: none;
    }

    .config-icone[b-hw3c7jupzo] {
        width: 36px;
        height: 36px;
    }

    .config-botao[b-hw3c7jupzo] {
        width: auto;
    }

    .config-acoes[b-hw3c7jupzo] {
        flex-direction: row;
    }
}
/* /Components/Pages/Configuracao/ConfigPainel.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO — /configPainel (leva 33), a partir do grupo Figma "REDESIGN —
   Configurações (Config + ConfigPainel)" (arquivo EUPHORIA, página
   "02 - Telas"). Banner/card idênticos a /config (Config.razor.css) — cópia
   própria porque o isolamento do Blazor não deixa reaproveitar o CSS de lá.
   O Figma só desenhou o computador desta tela; o celular reaproveita a
   mesma casca responsiva do resto do admin (grade de cartões que empilha
   sozinha). Único breakpoint do site: 1000px. *@
   ========================================================================== */

.configpainel-pagina[b-pj4uj1smx8] {
    background-color: var(--ep-cinza-100);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.configpainel-hero[b-pj4uj1smx8] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-5);

    display: flex;
    flex-direction: column;
    align-items: center;

    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.configpainel-caminho[b-pj4uj1smx8] {
    display: block;
    align-self: flex-start;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    margin-bottom: var(--espaco-2);
    padding-left: var(--espaco-4);
}

    .configpainel-caminho a[b-pj4uj1smx8] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .configpainel-caminho a:hover[b-pj4uj1smx8] {
            text-decoration: underline;
        }

.configpainel-titulo[b-pj4uj1smx8] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-5);
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0;
}

/* ---------- Card branco de conteúdo ---------- */
.configpainel-card[b-pj4uj1smx8] {
    background-color: var(--ep-branco);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
    display: flex;
    flex-direction: column;
    gap: var(--espaco-5);
}

.configpainel-secao[b-pj4uj1smx8] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

/* Linha fina entre as seções — mesma receita das modais de cadastro do
   admin (leva 31, .cadastro-modal-divisor). */
.configpainel-divisor[b-pj4uj1smx8] {
    height: 0.5px;
    background-color: rgba(0, 0, 0, 0.25);
}

.configpainel-secao-titulo[b-pj4uj1smx8] {
    font-family: var(--fonte-titulo);
    font-weight: normal;
    font-size: var(--texto-peq);
    color: var(--ep-roxo-escuro);
    margin: 0;
}

/* ---------- Ilustrações de login — sem desenho no Figma, só ganhou os
   campos/botões já padronizados no resto do admin (Config.razor.css) ---------- */
.configpainel-ilustracoes[b-pj4uj1smx8] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
}

.configpainel-ilustracao-campo[b-pj4uj1smx8] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
    align-items: flex-start;
}

.configpainel-label[b-pj4uj1smx8] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    color: var(--ds-cinza-75);
}

.configpainel-upload[b-pj4uj1smx8] {
    display: flex;
    align-items: center;
    gap: var(--espaco-3);
    width: 100%;
}

    /* "Escolher"/"Salvar" na mesma linha, dividindo o espaço — sem isso
       herdavam width: 100% do .configpainel-botao base e cada um quebrava
       pra própria linha. */
    .configpainel-upload .configpainel-botao[b-pj4uj1smx8] {
        width: auto;
        flex: 1 1 0;
    }

.configpainel-upload-nome[b-pj4uj1smx8] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-75);
}

/* Caixa que mostra a ilustração salva hoje (ou a prévia da imagem recém
   escolhida) — sempre visível, mesmo sem nenhuma ilustração cadastrada
   ainda, pra deixar claro o que está valendo agora antes de trocar. */
.configpainel-ilustracao-preview-box[b-pj4uj1smx8] {
    width: 100%;
    height: 140px;
    background-color: var(--ep-cinza-100);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
}

    .configpainel-ilustracao-preview-box img[b-pj4uj1smx8] {
        max-width: 100%;
        max-height: 100%;
        object-fit: contain;
    }

/* ---------- Botões (mesma receita de /config, .config-botao) ---------- */
.configpainel-botao[b-pj4uj1smx8] {
    height: var(--altura-campo);
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    text-align: center;
    cursor: pointer;
    border: none;
    flex-shrink: 0;
    white-space: nowrap;
}

.configpainel-botao--verde[b-pj4uj1smx8] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.configpainel-botao--contorno[b-pj4uj1smx8] {
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px solid var(--ep-roxo);
}

/* ---------- Linha "+ Cadastrar" + filtro ---------- */
.configpainel-topo[b-pj4uj1smx8] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--espaco-3);
}

/* Pílula de filtro — mesmo "radiobox" já usado em /myorders (.pedidos-filtro)
   e no filtro "Promo" de /manager/model: pílula roxa + bolinha branca que
   preenche quando marcado, no lugar do checkbox nativo do navegador. */
.configpainel-filtro[b-pj4uj1smx8] {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: var(--espaco-2);
    height: var(--altura-campo);
    padding: 0 var(--espaco-4);
    background-color: var(--ep-roxo);
    border-radius: var(--canto-botao);
    cursor: pointer;
    user-select: none;
}

    .configpainel-filtro input[b-pj4uj1smx8] {
        position: absolute;
        width: 1px;
        height: 1px;
        opacity: 0;
        pointer-events: none;
    }

.configpainel-filtro-bolinha[b-pj4uj1smx8] {
    width: 16px;
    height: 16px;
    border-radius: 50%;
    background-color: transparent;
    border: 2px solid var(--ep-branco);
    flex-shrink: 0;
    transition: background-color .15s ease;
}

.configpainel-filtro input:checked + .configpainel-filtro-bolinha[b-pj4uj1smx8] {
    background-color: var(--ep-branco);
}

.configpainel-filtro-texto[b-pj4uj1smx8] {
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    font-weight: normal;
    line-height: 1;
    white-space: nowrap;
}

/* ---------- Grade de cartões — empilha sozinha no celular (1 coluna),
   várias colunas no computador (ver media query) ---------- */
.configpainel-grade[b-pj4uj1smx8] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--espaco-4);
}

.configpainel-item[b-pj4uj1smx8] {
    flex: 1 1 100%;
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

.configpainel-item-imagem[b-pj4uj1smx8] {
    width: 100%;
    height: 170px;
    border-radius: var(--canto-card);
    background-color: var(--ep-roxo);
    overflow: hidden;
}

    .configpainel-item-imagem img[b-pj4uj1smx8] {
        width: 100%;
        height: 100%;
        object-fit: cover;
    }

.configpainel-item-titulo[b-pj4uj1smx8] {
    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    margin: 0;
}

.configpainel-item-acoes[b-pj4uj1smx8] {
    display: flex;
    gap: var(--espaco-2);
}

.configpainel-pilula[b-pj4uj1smx8] {
    height: 36px;
    padding: 0 var(--espaco-3);
    border-radius: var(--canto-botao);
    border: none;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    font-weight: normal;
    cursor: pointer;
    white-space: nowrap;
}

.configpainel-pilula--verde[b-pj4uj1smx8] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.configpainel-pilula--clara[b-pj4uj1smx8] {
    background-color: var(--ep-lilas-claro);
    color: var(--ep-roxo-escuro);
}

.configpainel-pilula--vermelha[b-pj4uj1smx8] {
    background-color: var(--ep-erro-forte);
    color: var(--ep-branco);
}

/* ---------- Estado vazio (mesma receita de /config, .config-vazio) ---------- */
.configpainel-vazio[b-pj4uj1smx8] {
    text-align: center;
    padding: var(--espaco-6) 0;
}

    .configpainel-vazio i[b-pj4uj1smx8] {
        font-size: 48px;
        color: var(--ep-roxo);
    }

    .configpainel-vazio h3[b-pj4uj1smx8] {
        color: var(--ep-verde-escuro);
        margin-top: var(--espaco-3);
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        font-weight: normal;
    }

/* Aviso de exclusão — mesma casca do modal de excluir produto do carrinho
   (OrderCheckout.razor.css) e das 4 modais de cadastro do admin (leva 31,
   ex.: Category.razor.css); cópia própria porque o isolamento do Blazor
   não deixa reaproveitar o CSS de lá. */
.confirmar-exclusao-fundo[b-pj4uj1smx8] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    padding: var(--espaco-4);
}

.confirmar-exclusao-caixa[b-pj4uj1smx8] {
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-4);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.confirmar-exclusao-icone img[b-pj4uj1smx8] {
    width: 144px;
    height: 144px;
    object-fit: contain;
}

.confirmar-exclusao-pergunta[b-pj4uj1smx8] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-descricao[b-pj4uj1smx8] {
    font-family: var(--fonte-corpo);
    font-weight: 400;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-botoes[b-pj4uj1smx8] {
    display: flex;
    gap: var(--espaco-3);
    width: 100%;
    margin-top: var(--espaco-4);
}

.confirmar-exclusao-nao[b-pj4uj1smx8],
.confirmar-exclusao-sim[b-pj4uj1smx8] {
    flex: 1;
    height: 39px;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    border: none;
    cursor: pointer;
}

.confirmar-exclusao-nao[b-pj4uj1smx8] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.confirmar-exclusao-sim[b-pj4uj1smx8] {
    background-color: var(--ep-erro-forte);
    color: var(--ep-branco);
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .configpainel-pagina[b-pj4uj1smx8] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .configpainel-hero[b-pj4uj1smx8] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: var(--espaco-5);
        margin-bottom: var(--espaco-9);

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .configpainel-titulo[b-pj4uj1smx8] {
        font-size: var(--titulo-3);
    }

    .configpainel-caminho[b-pj4uj1smx8] {
        padding-left: var(--espaco-5);
    }

    .configpainel-card[b-pj4uj1smx8] {
        padding: var(--espaco-5);
    }

    .configpainel-ilustracoes[b-pj4uj1smx8] {
        flex-direction: row;
    }

    .configpainel-ilustracao-campo[b-pj4uj1smx8] {
        flex: 1 1 0;
    }

    .configpainel-botao[b-pj4uj1smx8] {
        width: auto;
    }

    .configpainel-topo[b-pj4uj1smx8] {
        flex-direction: row;
        align-items: center;
    }

    .configpainel-item[b-pj4uj1smx8] {
        flex: 0 1 340px;
    }
}
/* /Components/Pages/Cupons/Components/ConcederCupomComponent.razor.rz.scp.css */
/* Sem desenho no Figma pra esta modal, mesma receita das outras modais de
   cadastro do admin (Categoria/Marca/Modelo/Sabor, leva 31 — Layout/
   ResetPassword.razor é a cópia mais próxima). */

.cadastro-modal[b-8nyme9qr8y] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    padding: var(--espaco-5);
}

.cadastro-modal-cabecalho[b-8nyme9qr8y] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.cadastro-modal-titulo[b-8nyme9qr8y] {
    font-family: var(--fonte-titulo);
    font-size: var(--subtitulo);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

.cadastro-modal-descricao[b-8nyme9qr8y] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-50);
}

.cadastro-modal-campo[b-8nyme9qr8y] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

.cadastro-modal-rotulo[b-8nyme9qr8y] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
}

/* Mesma receita de campo já usada no resto do site (leva 13c,
   AddressComponent.razor.css). */
.cadastro-modal-input[b-8nyme9qr8y] {
    height: var(--altura-campo);
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-campo);
    border: 1px solid var(--ep-roxo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    background-color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    appearance: none;
    -webkit-appearance: none;
    box-sizing: border-box;
}

.cadastro-modal-input[b-8nyme9qr8y]::placeholder {
    color: var(--ep-roxo-escuro);
    opacity: 1;
}

.cadastro-modal-input:focus[b-8nyme9qr8y] {
    outline: 2px solid var(--ep-verde);
    outline-offset: 2px;
}

.cadastro-modal-busca-linha[b-8nyme9qr8y] {
    display: flex;
    align-items: center;
    gap: var(--espaco-2);
}

    .cadastro-modal-busca-linha .cadastro-modal-input[b-8nyme9qr8y] {
        flex: 1;
    }

.cadastro-modal-icone-busca[b-8nyme9qr8y] {
    width: var(--altura-campo);
    height: var(--altura-campo);
    flex-shrink: 0;
    border-radius: var(--canto-redondo);
    border: none;
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    cursor: pointer;
    transition: filter .15s;
}

.cadastro-modal-icone-busca:hover[b-8nyme9qr8y] {
    filter: brightness(0.92);
}

.cadastro-modal-divisor[b-8nyme9qr8y] {
    height: 0.5px;
    background-color: rgba(0, 0, 0, 0.25);
}

/* ---------- Resultados da busca (nome/telefone pode achar mais de 1) ---------- */
.cadastro-modal-resultados[b-8nyme9qr8y] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    max-height: 220px;
    overflow-y: auto;
}

    .cadastro-modal-resultados li[b-8nyme9qr8y] {
        display: flex;
        flex-direction: column;
        padding: var(--espaco-2) 0;
        border-top: 1px solid var(--ds-cinza-15);
        cursor: pointer;
    }

    .cadastro-modal-resultados li:first-child[b-8nyme9qr8y] {
        border-top: none;
    }

    .cadastro-modal-resultados li:hover[b-8nyme9qr8y] {
        opacity: 0.7;
    }

.cadastro-modal-resultados-nome[b-8nyme9qr8y] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

.cadastro-modal-resultados-detalhe[b-8nyme9qr8y] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

.cadastro-modal-usuario-info[b-8nyme9qr8y] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

    .cadastro-modal-usuario-info p[b-8nyme9qr8y] {
        margin: 0;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        color: var(--ds-cinza-75);
    }

    .cadastro-modal-usuario-info strong[b-8nyme9qr8y] {
        color: var(--ep-roxo-escuro);
    }

.cadastro-modal-botao-salvar[b-8nyme9qr8y] {
    height: 44px;
    width: 100%;
    border-radius: var(--canto-botao);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
    transition: filter .15s;
}

.cadastro-modal-botao-salvar:hover[b-8nyme9qr8y] {
    filter: brightness(0.92);
}
/* /Components/Pages/Cupons/Components/DetalheCupomComponent.razor.rz.scp.css */
/* Cabeçalho igual ao das outras modais de cadastro do admin (leva 31) —
   cópia própria porque o isolamento do Blazor não deixa reaproveitar o
   CSS de ConcederCupomComponent.razor. */

.cadastro-modal[b-ii8v4p1ilg] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    padding: var(--espaco-5);
}

.cadastro-modal-cabecalho[b-ii8v4p1ilg] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.cadastro-modal-titulo[b-ii8v4p1ilg] {
    font-family: var(--fonte-titulo);
    font-size: var(--subtitulo);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

.cadastro-modal-descricao[b-ii8v4p1ilg] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-50);
}

/* ---------- Resumo (Disponíveis/Usados, só números) ---------- */
.cupons-detalhe-resumo[b-ii8v4p1ilg] {
    display: flex;
    gap: var(--espaco-4);
}

.cupons-detalhe-resumo-item[b-ii8v4p1ilg] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--espaco-1);
    padding: var(--espaco-2);
    margin: calc(var(--espaco-2) * -1);
    border: 0.25px solid transparent;
    border-radius: 12px;
    background-color: transparent;
    cursor: pointer;
    opacity: 0.5;
    transition: opacity .15s, border-color .15s;
}

.cupons-detalhe-resumo-item:hover[b-ii8v4p1ilg] {
    opacity: 0.8;
}

.cupons-detalhe-resumo-item--ativo[b-ii8v4p1ilg] {
    opacity: 1;
    border-color: var(--ep-roxo);
}

.cupons-detalhe-resumo-numero[b-ii8v4p1ilg] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--subtitulo);
    color: var(--ep-roxo-escuro);
}

.cupons-detalhe-vazio[b-ii8v4p1ilg] {
    margin: 0;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

/* ---------- Extrato cronológico (cupom por cupom) ---------- */
.cupons-extrato-lista[b-ii8v4p1ilg] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    max-height: 320px;
    overflow-y: auto;
}

.cupons-extrato-linha[b-ii8v4p1ilg] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-2);
    padding: var(--espaco-2) 0;
    border-top: 1px solid var(--ds-cinza-15);
}

    .cupons-extrato-linha:first-child[b-ii8v4p1ilg] {
        border-top: none;
    }

.cupons-extrato-info[b-ii8v4p1ilg] {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.cupons-extrato-tipo[b-ii8v4p1ilg] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
}

.cupons-extrato-data[b-ii8v4p1ilg] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

.cupons-extrato-link[b-ii8v4p1ilg] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 24px;
    flex-shrink: 0;
    border: none;
    background-color: transparent;
    padding: 0;
    color: var(--ep-roxo);
    font-size: 16px;
    cursor: pointer;
    transition: filter .15s;
}

.cupons-extrato-link:hover[b-ii8v4p1ilg] {
    filter: brightness(0.8);
}

.cupons-extrato-carregar-mais[b-ii8v4p1ilg] {
    height: 40px;
    width: 100%;
    margin-top: var(--espaco-2);
    border-radius: var(--canto-botao);
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px solid var(--ep-roxo);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    cursor: pointer;
    transition: filter .15s;
}

.cupons-extrato-carregar-mais:hover[b-ii8v4p1ilg] {
    filter: brightness(0.95);
}

/* ---------- Selo de status (mesma receita de .orders-status) ---------- */
.cupons-status[b-ii8v4p1ilg] {
    display: inline-block;
    padding: var(--espaco-1) var(--espaco-2);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: var(--legenda-2);
    white-space: nowrap;
}

.cupons-status--disponivel[b-ii8v4p1ilg] {
    background-color: var(--ep-sucesso-claro);
    color: var(--ep-sucesso);
}

.cupons-status--usado[b-ii8v4p1ilg] {
    background-color: var(--ds-cinza-15);
    color: var(--ds-cinza-75);
}
/* /Components/Pages/Cupons/Components/GerarLinkBoasVindasComponent.razor.rz.scp.css */
/* Mesma receita das outras modais de cadastro do admin (leva 31 —
   Layout/ResetPassword.razor é a cópia mais próxima). */

.cadastro-modal[b-bugu27mdw9] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    padding: var(--espaco-5);
}

.cadastro-modal-cabecalho[b-bugu27mdw9] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.cadastro-modal-titulo[b-bugu27mdw9] {
    font-family: var(--fonte-titulo);
    font-size: var(--subtitulo);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

.cadastro-modal-descricao[b-bugu27mdw9] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-50);
}

.cadastro-modal-campo[b-bugu27mdw9] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

.cadastro-modal-rotulo[b-bugu27mdw9] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
}

/* Mesma receita de campo já usada no resto do site (leva 13c,
   AddressComponent.razor.css). */
.cadastro-modal-input[b-bugu27mdw9] {
    height: var(--altura-campo);
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-campo);
    border: 1px solid var(--ep-roxo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    background-color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    appearance: none;
    -webkit-appearance: none;
    box-sizing: border-box;
}

.cadastro-modal-input:focus[b-bugu27mdw9] {
    outline: 2px solid var(--ep-verde);
    outline-offset: 2px;
}

.cadastro-modal-botao-salvar[b-bugu27mdw9] {
    height: 44px;
    width: 100%;
    border-radius: var(--canto-botao);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
    transition: filter .15s;
}

.cadastro-modal-botao-salvar:hover[b-bugu27mdw9] {
    filter: brightness(0.92);
}

/* Botão nasce "disabled" quando Quantidade < 1 (ver conserto do clipboard
   no Safari, 11/09/2026) — sem isso ficava clicável de mentira, sem
   feedback visual nenhum de que não ia funcionar. Mesma receita de
   CalcularFrete.razor.css (.frete-botao:disabled). */
.cadastro-modal-botao-salvar:disabled[b-bugu27mdw9] {
    opacity: .6;
    cursor: not-allowed;
}

    .cadastro-modal-botao-salvar:disabled:hover[b-bugu27mdw9] {
        filter: none;
    }
/* /Components/Pages/Cupons/Cupons.razor.rz.scp.css */
/* ============================================================================
   /manager/cupons (Sprint 18, 14/08/2026) — sem desenho no Figma, mesma
   casca das outras telas de gerenciamento (Category/Brend/Model.razor):
   banner roxo sangrando + card branco. Único breakpoint do site: 1000px.
   ========================================================================== */

.cupons-pagina[b-qraqpeeph7] {
    background-color: var(--ep-cinza-100);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.cupons-hero[b-qraqpeeph7] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-5);

    display: flex;
    flex-direction: column;
    align-items: center;

    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.cupons-caminho[b-qraqpeeph7] {
    display: block;
    align-self: flex-start;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    margin-bottom: var(--espaco-2);
    padding-left: var(--espaco-4);
}

    .cupons-caminho a[b-qraqpeeph7] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .cupons-caminho a:hover[b-qraqpeeph7] {
            text-decoration: underline;
        }

.cupons-titulo[b-qraqpeeph7] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: 32px;
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0 0 var(--espaco-3);
}

.cupons-contador[b-qraqpeeph7] {
    display: inline-block;
    background-color: var(--ep-roxo-escuro);
    border: 1px solid var(--ep-branco);
    border-radius: var(--canto-botao);
    padding: var(--espaco-1) var(--espaco-4);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    color: var(--ep-branco);
}

/* ---------- Card branco de conteúdo ---------- */
.cupons-card[b-qraqpeeph7] {
    background-color: var(--ep-branco);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
}

/* ---------- Resumo (só números reais, sem estimativa em R$) ---------- */
.cupons-resumo[b-qraqpeeph7] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--espaco-3);
    margin-bottom: var(--espaco-4);
}

.cupons-resumo-item[b-qraqpeeph7] {
    flex: 1 1 160px;
    background-color: var(--ep-cinza-100);
    border-radius: var(--canto-card);
    padding: var(--espaco-3) var(--espaco-4);
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.cupons-resumo-numero[b-qraqpeeph7] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-5);
    color: var(--ep-roxo);
}

.cupons-resumo-legenda[b-qraqpeeph7] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-75);
}

/* ---------- Botões ---------- */
.cupons-botao[b-qraqpeeph7] {
    height: 44px;
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    text-align: center;
    cursor: pointer;
    flex-shrink: 0;
    border: none;
}

.cupons-botao--verde[b-qraqpeeph7] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.cupons-botao--roxo[b-qraqpeeph7] {
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
}

.cupons-botao--contorno[b-qraqpeeph7] {
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px solid var(--ep-roxo);
}

/* ---------- Filtros ---------- */
.cupons-filtros[b-qraqpeeph7] {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--espaco-2);
    margin-bottom: var(--espaco-4);
}

    .cupons-filtros .cupons-botao[b-qraqpeeph7] {
        width: auto;
    }

/* ---------- Busca ---------- */
.cupons-busca-caixa[b-qraqpeeph7] {
    position: relative;
    width: 100%;
    flex: 1 1 160px;
}

    .cupons-busca-caixa input[b-qraqpeeph7] {
        width: 100%;
        box-sizing: border-box;
        background-color: var(--ep-branco);
        border: 1px solid var(--ds-cinza-15);
        border-radius: var(--canto-campo);
        padding: 14px 22px 14px 44px;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        color: var(--ep-roxo-escuro);
    }

        .cupons-busca-caixa input:focus[b-qraqpeeph7] {
            outline: none;
            border-color: var(--ep-roxo);
        }

    .cupons-busca-caixa i[b-qraqpeeph7] {
        position: absolute;
        top: 50%;
        left: 16px;
        transform: translateY(-50%);
        color: var(--ep-roxo-escuro);
        opacity: 0.6;
        pointer-events: none;
    }

/* ---------- Tabela (computador) ---------- */
.cupons-tabela-wrap[b-qraqpeeph7] {
    display: none;
    overflow-x: auto;
}

.cupons-tabela[b-qraqpeeph7] {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
}

    .cupons-tabela thead[b-qraqpeeph7] {
        background-color: var(--ep-roxo);
    }

    .cupons-tabela th[b-qraqpeeph7] {
        text-align: left;
        font-weight: normal;
        color: var(--ep-branco);
        padding: var(--espaco-3);
        white-space: nowrap;
    }

        .cupons-tabela th:first-child[b-qraqpeeph7] {
            border-radius: var(--canto-botao) 0 0 var(--canto-botao);
        }

        .cupons-tabela th:last-child[b-qraqpeeph7] {
            border-radius: 0 var(--canto-botao) var(--canto-botao) 0;
        }

    .cupons-tabela td[b-qraqpeeph7] {
        padding: var(--espaco-2) var(--espaco-3);
        border-top: 1px solid var(--ds-cinza-15);
        color: var(--ds-cinza-75);
        white-space: nowrap;
    }

    .cupons-tabela tbody tr:first-child td[b-qraqpeeph7] {
        border-top: none;
    }

/* Linha inteira clicável (abre o detalhe do cliente), não só o nome. O
   hover vai no <td> (não no <tr>) — mesma técnica do canto arredondado
   já usado no cabeçalho (.cupons-tabela th:first-child/:last-child),
   que só funciona bem em elementos de tabela de verdade. */
.cupons-linha-clicavel[b-qraqpeeph7] {
    cursor: pointer;
}

    .cupons-linha-clicavel td[b-qraqpeeph7] {
        transition: background-color .15s;
    }

    .cupons-linha-clicavel:hover td[b-qraqpeeph7] {
        background-color: var(--ep-cinza-100);
    }

    .cupons-linha-clicavel:hover td:first-child[b-qraqpeeph7] {
        border-radius: var(--canto-botao) 0 0 var(--canto-botao);
    }

    .cupons-linha-clicavel:hover td:last-child[b-qraqpeeph7] {
        border-radius: 0 var(--canto-botao) var(--canto-botao) 0;
    }

/* ---------- Cartões (celular) ---------- */
.cupons-cards-mobile[b-qraqpeeph7] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

/* Cartão inteiro clicável (abre o detalhe do cliente), mesmo padrão da
   linha da tabela no computador. */
.cupons-item-card[b-qraqpeeph7] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
    background-color: var(--ep-branco);
    border: 0.5px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: 0 4px 7.6px rgba(0, 0, 0, 0.15);
    padding: var(--espaco-3);
    cursor: pointer;
    transition: filter .15s;
}

    .cupons-item-card:hover[b-qraqpeeph7] {
        filter: brightness(0.97);
    }

.cupons-item-nome[b-qraqpeeph7] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    color: var(--ep-roxo-escuro);
}

.cupons-item-detalhe[b-qraqpeeph7] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-75);
}

/* ---------- Paginação ---------- */
.cupons-paginacao[b-qraqpeeph7] {
    display: flex;
    gap: var(--espaco-3);
    margin-top: var(--espaco-4);
}

    .cupons-paginacao .cupons-botao[b-qraqpeeph7] {
        width: auto;
        flex: 1;
    }

/* ---------- Estados vazio / carregando ---------- */
.cupons-vazio[b-qraqpeeph7] {
    text-align: center;
    padding: var(--espaco-6) 0;
}

    .cupons-vazio i[b-qraqpeeph7] {
        font-size: 48px;
        color: var(--ep-roxo);
    }

    .cupons-vazio h3[b-qraqpeeph7] {
        color: var(--ep-verde-escuro);
        margin-top: var(--espaco-3);
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        font-weight: normal;
    }

.cupons-carregando[b-qraqpeeph7] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .cupons-pagina[b-qraqpeeph7] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .cupons-hero[b-qraqpeeph7] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: var(--espaco-5);
        margin-bottom: var(--espaco-9);

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .cupons-titulo[b-qraqpeeph7] {
        font-size: var(--titulo-1);
    }

    .cupons-caminho[b-qraqpeeph7] {
        padding-left: var(--espaco-5);
    }

    .cupons-filtros[b-qraqpeeph7] {
        flex-direction: row;
        align-items: center;
    }

    .cupons-busca-caixa[b-qraqpeeph7] {
        flex: 1;
    }

    /* Tabela some, cartões viram tabela — troca só no breakpoint. */
    .cupons-tabela-wrap[b-qraqpeeph7] {
        display: block;
    }

    .cupons-cards-mobile[b-qraqpeeph7] {
        display: none;
    }

    .cupons-paginacao .cupons-botao[b-qraqpeeph7] {
        flex: none;
    }
}
/* /Components/Pages/Error.razor.rz.scp.css */
body[b-nbm2w6u4p3] {
    background-color: #f0f0f5;
    color: var(--ep-cinza-800);
    text-align: center;
}

.container[b-nbm2w6u4p3] {
    background-color: white;
    padding: 40px;
    border-radius: 8px;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}

h1[b-nbm2w6u4p3] {
    color: #E63946;
}

h2[b-nbm2w6u4p3] {
    color: #F4A261;
}

.text-danger[b-nbm2w6u4p3] {
    color: #E63946;
}

.text-warning[b-nbm2w6u4p3] {
    color: #F4A261;
}

code[b-nbm2w6u4p3] {
    background-color: #efefef;
    padding: 2px 4px;
    border-radius: 4px;
}
/* /Components/Pages/Login/Component/ResetPassword.razor.rz.scp.css */
/* ============================================================================
   TELA DE RESET DE SENHA — VISUAL NOVO (Sprint 05 / leva 8, 29/07/2026)
   ----------------------------------------------------------------------------
   Quase todo CÓPIA de SignIn.razor.css: mesmo fundo roxo, mesma coluna fixa
   de 440px no computador, mesmo campo de 314px — esta tela só tem 2 campos
   empilhados, não precisa do grid em pares que a /signup usa. Como cada
   .razor.css só vale dentro do seu próprio componente, repetir os nomes de
   classe aqui não causa conflito com as outras duas telas do fluxo.

   Diferença de conteúdo: aqui os DOIS campos têm olhinho (não só um), e o
   botão é único, sem par — o bloco final deste arquivo trata só disso.
   ========================================================================== */

.tela-login[b-cbstaw205e] {
    background-color: var(--ep-roxo);

    /* 100vh sem desconto: a tela começa em y=0 agora (o fundo sobe atrás
       da Nav_Bar, ver abaixo), não 44px abaixo do topo — ver o comentário
       completo em SignIn.razor.css (fecha o mesmo backlog 5.2). */
    min-height: 100vh;

    /* Sobe por baixo da Nav_Bar fixa (achado na Sprint 06, aplicado aqui
       também) — mesma técnica e mesma conta da /signin. Ver o comentário
       completo em SignIn.razor.css. */
    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4));
}

.login-interno[b-cbstaw205e] {
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

.login-coluna[b-cbstaw205e] {
    padding-top: clamp(48px, 16vh, 160px);
}

/* ---------- Título ---------- */
.login-titulo[b-cbstaw205e] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-5);         /* 28px no celular — igual à /signin */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    margin: 0 0 var(--espaco-5) 0;
}

/* ---------- Campos ---------- */
.campo-grupo[b-cbstaw205e] {
    margin-bottom: var(--espaco-4);     /* 24px entre um campo e o próximo */
}

.campo-rotulo[b-cbstaw205e] {
    display: block;
    font-size: var(--legenda);          /* 14px */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    margin-bottom: var(--espaco-2);     /* 8px */
}

.login-coluna[b-cbstaw205e]  input.campo {
    display: block;
    width: 100%;
    height: var(--altura-campo);        /* 44px */
    box-sizing: border-box;

    background-color: var(--ep-branco);
    border: none;
    border-radius: var(--canto-campo);  /* pílula */

    /* Sem sombra: o Figma marca "effects: shadow", mas /signin e /signup já
       decidiram não usar — mantido igual aqui pela mesma razão. Os dois
       campos têm olhinho, então os dois usam a mesma folga de 56px à
       direita — não precisa de exceção por id, como nas outras telas. */
    padding: 0 56px 0 32px;

    font-family: var(--fonte-corpo);
    font-size: var(--legenda);          /* 14px */
    color: var(--ep-roxo-escuro);
}

.login-coluna[b-cbstaw205e]  input.campo::placeholder {
    color: var(--ep-roxo-escuro);
    opacity: 1;
}

.login-coluna[b-cbstaw205e]  input.campo:focus {
    outline: 2px solid var(--ep-verde);
    outline-offset: 2px;
}

/* ---------- Olhinho da senha (nos dois campos) ---------- */
.campo-com-olho[b-cbstaw205e] {
    position: relative;
}

.botao-olho[b-cbstaw205e] {
    position: absolute;
    top: 0;
    right: 0;
    width: 44px;
    height: var(--altura-campo);

    display: flex;
    align-items: center;
    justify-content: center;

    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
    color: var(--ep-roxo-escuro);
    font-size: 20px;
}

/* ---------- Botão único (sem par) ----------
   Medido no Figma: no celular o botão ocupa a largura toda da coluna
   (310px) — diferente da /signin e da /signup, onde os botões sempre
   hugam o próprio texto porque vêm em dupla. No computador ele volta a ser
   do tamanho do texto, igual aos outros. */
.login-botoes[b-cbstaw205e] {
    display: flex;
    width: 100%;
    margin-top: var(--espaco-4);
}

.login-botoes .btn-euphoria[b-cbstaw205e] {
    flex: 1 1 auto;
    width: 100%;
}

.btn-euphoria[b-cbstaw205e] {
    height: var(--altura-botao);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0 28px;

    border-radius: var(--canto-botao);

    font-family: var(--fonte-corpo);
    font-weight: normal;

    font-size: var(--legenda);
    line-height: 1;
    text-decoration: none;
    white-space: nowrap;
    cursor: pointer;
    transition: filter .15s, background-color .15s, color .15s;
}

.btn-euphoria-cheio[b-cbstaw205e] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
}

.btn-euphoria-cheio:hover[b-cbstaw205e] {
    filter: brightness(0.92);
}

/* ---------- Mensagens de erro ---------- */
.login-coluna[b-cbstaw205e]  .campo-erro,
.login-coluna[b-cbstaw205e]  .validation-message {
    display: flex;
    align-items: center;
    gap: var(--espaco-2);
    margin: var(--espaco-2) 0 0 0;

    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: var(--legenda-2);        /* 12px */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
}

.login-coluna[b-cbstaw205e]  .campo-erro::before,
.login-coluna[b-cbstaw205e]  .validation-message::before {
    content: "";
    flex: 0 0 auto;
    width: 12px;
    height: 12px;
    position: relative;
    top: -1px;

    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23FFBA00' fill-rule='evenodd' d='M12 2 23.5 22H.5Z M11 9h2v6h-2Z M10.8 17.8a1.2 1.2 0 1 0 2.4 0 1.2 1.2 0 1 0-2.4 0Z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
}

/* Aviso geral ("Senhas diferentes!") */
.login-aviso[b-cbstaw205e] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-3);

    margin-top: var(--espaco-4);
    padding: var(--espaco-3);
    border-radius: var(--canto-card);

    background-color: var(--ep-branco);
    color: var(--ep-erro);
    font-size: var(--legenda);
    line-height: var(--entrelinha);
    font-weight: normal;
}

.login-aviso-fechar[b-cbstaw205e] {
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
    color: var(--ep-erro);
    font-size: 18px;
    line-height: 1;
    display: flex;
    align-items: center;
}

/* ---------- Ilustração ---------- */
.login-ilustracao[b-cbstaw205e] {
    display: none;
}

/* ============================================================================
   COMPUTADOR
   ----------------------------------------------------------------------------
   Mesma estrutura de duas colunas da /signin: coluna do formulário fixa em
   440px, campo de 314px, ilustração de 654px à direita — sem o grid em
   pares da /signup, porque aqui só há 2 campos.
   ========================================================================== */
@media (min-width: 1000px) {

    /* No computador a folga do topo da barra é 24px fixos (não o notch). */
    .tela-login[b-cbstaw205e] {
        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4));
    }

    .login-interno[b-cbstaw205e] {
        display: flex;
        align-items: stretch;
        gap: clamp(24px, calc(22.045vw - 196.45px), 121px);

        max-width: var(--largura-frame-desktop);
        margin: 0 auto;
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: var(--espaco-6);
    }

    .login-coluna[b-cbstaw205e] {
        width: 440px;
        flex: 0 0 440px;
        padding-top: 0;

        display: flex;
        flex-direction: column;
        justify-content: center;
    }

    .login-titulo[b-cbstaw205e] {
        font-size: var(--titulo-3);          /* 44px — igual à /signin */
        margin-bottom: var(--espaco-6);
    }

    /* Rótulo sobe para 22px no computador, igual à /signin (o Figma desta
       tela media 20px — tratado como ruído de medição, ver
       ai/DESIGN_SYSTEM.md). */
    .campo-rotulo[b-cbstaw205e] {
        font-size: var(--corpo-2);           /* 22px */
    }

    .login-coluna[b-cbstaw205e]  input.campo {
        width: 314px;
    }

    /* O olhinho fica colado na borda direita do campo (`right: 0`), mas
       essa borda é a da CAIXINHA (.campo-com-olho), não a do input. No
       celular as duas larguras coincidem (100% do bloco); no computador o
       input encolhe para 314px fixos, mas a caixinha continua esticando
       para os 440px da coluna — sem este ajuste o botão sobra fora do
       campo, à direita. Mesma correção que a /signin já usa. */
    .botao-olho[b-cbstaw205e] {
        left: 270px;                         /* 314 − 44 */
        right: auto;
    }

    .login-botoes[b-cbstaw205e] {
        margin-top: var(--espaco-6);
        width: 314px;
    }

    /* Botão único: no computador volta a hugar o texto, igual aos outros
       botões do fluxo — só no celular ele ocupa a largura toda. */
    .login-botoes .btn-euphoria[b-cbstaw205e] {
        flex: 0 0 auto;
        width: auto;
    }

    .login-ilustracao[b-cbstaw205e] {
        display: block;
        flex: 1 1 auto;

        margin-top: 54px;
        border-radius: 56px;             /* igual à /signin e à /signup — não os ~60px do Figma */
        overflow: hidden;

        /* 212px = 110 (padding-top da .tela-login) + 54 (margin-top acima)
           + 48 (padding-bottom da .login-interno) — achado real (05/08/2026),
           ver o comentário completo em SignIn.razor.css. Era 160px, faltavam
           52px na conta: a página sempre sobrava pra rolar no desktop. */
        height: min(844px, calc(100vh - 212px));
    }

    .login-ilustracao img[b-cbstaw205e] {
        width: 100%;
        height: 100%;
        object-fit: cover;
        object-position: center;
        display: block;
    }
}
/* /Components/Pages/Login/ForgotPassword.razor.rz.scp.css */
/* ============================================================================
   TELA "ESQUECI MINHA SENHA" — autoatendimento (06/08/2026)
   ----------------------------------------------------------------------------
   Cópia de Component/ResetPassword.razor.css, que por sua vez é cópia de
   SignIn.razor.css: mesmo fundo roxo, mesma coluna fixa de 440px no
   computador, mesmo campo de 314px. Como cada .razor.css só vale dentro do
   seu próprio componente, repetir os nomes de classe aqui não causa
   conflito com as outras 3 telas do fluxo.

   Diferença de conteúdo: nem Email nem CPF têm ícone (nenhuma das duas é
   senha), então o campo não precisa da folga de 56px que /signin e
   /reset/{id} reservam pro olhinho — aqui é padding simétrico direto.
   ========================================================================== */

.tela-login[b-h832k0xay1] {
    background-color: var(--ep-roxo);
    min-height: 100vh;

    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4));
}

.login-interno[b-h832k0xay1] {
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

.login-coluna[b-h832k0xay1] {
    padding-top: clamp(48px, 16vh, 160px);
}

/* ---------- Título e subtítulo ---------- */
.login-titulo[b-h832k0xay1] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-5);         /* 28px no celular — igual à /signin */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    margin: 0 0 var(--espaco-3) 0;
}

.login-subtitulo[b-h832k0xay1] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    margin: 0 0 var(--espaco-5) 0;
}

/* ---------- Campos ---------- */
.campo-grupo[b-h832k0xay1] {
    margin-bottom: var(--espaco-4);     /* 24px entre um campo e o próximo */
}

.campo-rotulo[b-h832k0xay1] {
    display: block;
    font-size: var(--legenda);          /* 14px */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    margin-bottom: var(--espaco-2);     /* 8px */
}

.login-coluna[b-h832k0xay1]  input.campo {
    display: block;
    width: 100%;
    height: var(--altura-campo);        /* 44px */
    box-sizing: border-box;

    background-color: var(--ep-branco);
    border: none;
    border-radius: var(--canto-campo);  /* pílula */
    padding: 0 32px;

    font-family: var(--fonte-corpo);
    font-size: var(--legenda);          /* 14px */
    color: var(--ep-roxo-escuro);
}

.login-coluna[b-h832k0xay1]  input.campo::placeholder {
    color: var(--ep-roxo-escuro);
    opacity: 1;
}

.login-coluna[b-h832k0xay1]  input.campo:focus {
    outline: 2px solid var(--ep-verde);
    outline-offset: 2px;
}

/* ---------- Botão único (sem par) ----------
   Mesma regra do /reset/{id}: no celular ocupa a largura toda da coluna,
   no computador volta a hugar o texto (ver media query). */
.login-botoes[b-h832k0xay1] {
    display: flex;
    width: 100%;
    margin-top: var(--espaco-4);
}

.login-botoes .btn-euphoria[b-h832k0xay1] {
    flex: 1 1 auto;
    width: 100%;
}

.btn-euphoria[b-h832k0xay1] {
    height: var(--altura-botao);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0 28px;

    border-radius: var(--canto-botao);

    font-family: var(--fonte-corpo);
    font-weight: normal;

    font-size: var(--legenda);
    line-height: 1;
    text-decoration: none;
    white-space: nowrap;
    cursor: pointer;
    transition: filter .15s, background-color .15s, color .15s;
}

.btn-euphoria-cheio[b-h832k0xay1] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
}

.btn-euphoria-cheio:hover[b-h832k0xay1] {
    filter: brightness(0.92);
}

.btn-euphoria:disabled[b-h832k0xay1] {
    cursor: default;
    filter: brightness(0.92);
}

/* Escondido até o form-loading.js mostrar no "submit" — sem isso o
   spinner apareceria parado do lado do texto o tempo todo. */
.btn-spinner[b-h832k0xay1] {
    display: none;
    margin-right: 8px;
}

.btn-euphoria:disabled .btn-spinner[b-h832k0xay1] {
    display: inline-block;
}

/* ---------- Mensagens de erro ---------- */
.login-coluna[b-h832k0xay1]  .campo-erro,
.login-coluna[b-h832k0xay1]  .validation-message {
    display: flex;
    align-items: center;
    gap: var(--espaco-2);
    margin: var(--espaco-2) 0 0 0;

    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: var(--legenda-2);        /* 12px */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
}

.login-coluna[b-h832k0xay1]  .campo-erro::before,
.login-coluna[b-h832k0xay1]  .validation-message::before {
    content: "";
    flex: 0 0 auto;
    width: 12px;
    height: 12px;
    position: relative;
    top: -1px;

    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23FFBA00' fill-rule='evenodd' d='M12 2 23.5 22H.5Z M11 9h2v6h-2Z M10.8 17.8a1.2 1.2 0 1 0 2.4 0 1.2 1.2 0 1 0-2.4 0Z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
}

/* Aviso geral ("Não encontramos uma conta...") */
.login-aviso[b-h832k0xay1] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-3);

    margin-top: var(--espaco-4);
    padding: var(--espaco-3);
    border-radius: var(--canto-card);

    background-color: var(--ep-branco);
    color: var(--ep-erro);
    font-size: var(--legenda);
    line-height: var(--entrelinha);
    font-weight: normal;
}

.login-aviso-fechar[b-h832k0xay1] {
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
    color: var(--ep-erro);
    font-size: 18px;
    line-height: 1;
    display: flex;
    align-items: center;
}

/* Aviso de sucesso ("Enviamos um link pro seu e-mail...") — mesmo cartão,
   só troca a cor de erro por sucesso e tira o negrito. */
.login-aviso-sucesso[b-h832k0xay1] {
    color: var(--ep-sucesso);
    font-weight: normal;
}

.login-aviso-sucesso .login-aviso-fechar[b-h832k0xay1] {
    color: var(--ep-sucesso);
}

/* ---------- Ilustração ---------- */
.login-ilustracao[b-h832k0xay1] {
    display: none;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .tela-login[b-h832k0xay1] {
        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4));
    }

    .login-interno[b-h832k0xay1] {
        display: flex;
        align-items: stretch;
        gap: clamp(24px, calc(22.045vw - 196.45px), 121px);

        max-width: var(--largura-frame-desktop);
        margin: 0 auto;
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: var(--espaco-6);
    }

    .login-coluna[b-h832k0xay1] {
        width: 440px;
        flex: 0 0 440px;
        padding-top: 0;

        display: flex;
        flex-direction: column;
        justify-content: center;
    }

    .login-titulo[b-h832k0xay1] {
        font-size: var(--titulo-3);          /* 44px — igual à /signin */
        margin-bottom: var(--espaco-3);
    }

    .login-subtitulo[b-h832k0xay1] {
        font-size: var(--corpo-2);           /* 22px — igual ao rótulo desktop */
        margin-bottom: var(--espaco-6);
    }

    .campo-rotulo[b-h832k0xay1] {
        font-size: var(--corpo-2);           /* 22px */
    }

    .login-coluna[b-h832k0xay1]  input.campo {
        width: 314px;
    }

    .login-botoes[b-h832k0xay1] {
        margin-top: var(--espaco-6);
        width: 314px;
    }

    .login-botoes .btn-euphoria[b-h832k0xay1] {
        flex: 0 0 auto;
        width: auto;
    }

    .login-ilustracao[b-h832k0xay1] {
        display: block;
        flex: 1 1 auto;

        margin-top: 54px;
        border-radius: 56px;
        overflow: hidden;

        /* Mesma conta da /signin e do /reset/{id} — ver o comentário
           completo em SignIn.razor.css. */
        height: min(844px, calc(100vh - 212px));
    }

    .login-ilustracao img[b-h832k0xay1] {
        width: 100%;
        height: 100%;
        object-fit: cover;
        object-position: center;
        display: block;
    }
}
/* /Components/Pages/Login/SignIn.razor.rz.scp.css */
/* ============================================================================
   TELA DE LOGIN — NOVO VISUAL (tela piloto do redesign, 27/07/2026)
   ----------------------------------------------------------------------------
   Todos os números aqui saíram de medição no desenho do Figma, não de chute.
   Onde eu tive que decidir algo que o desenho não respondia, deixei comentado.

   SOBRE O ::deep — o Blazor "carimba" as regras deste arquivo para valerem só
   nesta tela (é o que impede o CSS de vazar para as outras 40). Só que esse
   carimbo não alcança o que vem de dentro de um componente, como o <InputText>.
   Por isso os campos são escritos como ".login-coluna ::deep input": o ::deep
   diz "vale também para o que está dentro dos componentes filhos".
   ========================================================================== */

.tela-login[b-9vajfxk9je] {
    background-color: var(--ep-roxo);

    /* Sobe por baixo da Nav_Bar fixa (achado na Sprint 06, aplicado aqui
       também): sem isso, sobra uma tira branca entre a barra e o roxo. O
       espaço reservado pra barra fixa (.ep-navbar-espaco, em
       Header.razor.css) não tem cor própria, só reserva altura — ali
       embaixo é o fundo padrão do <body> (branco) que aparece. Aqui o
       fundo sobe por trás dele (margin-top negativo) e o espaço volta em
       padding-top, pro título não subir junto. A conta é a MESMA do
       .ep-navbar-espaco: folga do topo (notch) + 62px da barra + 24px de
       respiro. */
    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4));

    /* Fecha o backlog 5.2 ("/signin sobra ~50px de rolagem"): o -44px
       supunha que a tela começava 44px abaixo do topo (cabeçalho antigo).
       Agora ela começa exatamente em y=0 (o fundo sobe atrás da Nav_Bar,
       ver acima), então o desconto vira sobra em branco embaixo — sem
       desconto nenhum, o fundo cobre a tela inteira certinho. */
    min-height: 100vh;
}

/* O fundo roxo vai de ponta a ponta; o conteúdo é que tem limite de largura */
.login-interno[b-9vajfxk9je] {
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

.login-coluna[b-9vajfxk9je] {
    /* No desenho, o título começa 163px abaixo do cabeçalho. Um valor fixo
       desses aperta demais no iPhone SE, então o espaço encolhe em tela
       baixa e nunca passa dos 160px do desenho. */
    padding-top: clamp(48px, 16vh, 160px);
}

/* ---------- Título ---------- */
.login-titulo[b-9vajfxk9je] {
    font-family: var(--fonte-titulo);
    font-weight: bold;                  /* é o peso que carrega o Obviously Wide */
    font-size: var(--titulo-5);         /* 28px — medido no desenho do celular */
    line-height: var(--entrelinha);     /* 125% */
    color: var(--ep-branco);
    margin: 0 0 var(--espaco-5) 0;      /* 32px até o primeiro rótulo */
}

/* ---------- Campos ---------- */
.campo-grupo[b-9vajfxk9je] {
    margin-bottom: var(--espaco-4);     /* 24px entre um campo e o próximo */
}

/* Link "Esqueci minha senha" — autoatendimento (06/08/2026). Alinhado à
   ESQUERDA, mesma borda do campo de Senha/rótulos — testado ao vivo com
   alinhamento à direita primeiro, mas ficava solto/desconectado do resto
   da tela (que é toda alinhada à esquerda). Ajustado a pedido do dono. */
.login-esqueci-senha[b-9vajfxk9je] {
    display: block;
    width: fit-content;
    margin: var(--espaco-3) 0 0 0;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);        /* 12px */
    color: var(--ep-branco);
    text-decoration: underline;
}

    .login-esqueci-senha:hover[b-9vajfxk9je] {
        color: var(--ep-verde);
    }

.campo-rotulo[b-9vajfxk9je] {
    display: block;
    font-size: var(--legenda);          /* 14px — medido */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    margin-bottom: var(--espaco-2);     /* 8px */
}

.login-coluna[b-9vajfxk9je]  input.campo {
    display: block;
    width: 100%;
    height: var(--altura-campo);        /* 44px — medido */
    box-sizing: border-box;

    background-color: var(--ep-branco);
    border: none;
    border-radius: var(--canto-campo);  /* pílula */

    /* 32px de recuo à esquerda — medido. À direita sobra espaço para o
       olhinho não encostar no texto. */
    padding: 0 56px 0 32px;

    font-family: var(--fonte-corpo);
    font-size: var(--legenda);          /* 14px — medido */
    color: var(--ep-roxo-escuro);       /* #621085 — medido no placeholder */
}

.login-coluna[b-9vajfxk9je]  input.campo::placeholder {
    color: var(--ep-roxo-escuro);
    opacity: 1;                         /* sem isso o Firefox desbota sozinho */
}

.login-coluna[b-9vajfxk9je]  input.campo:focus {
    outline: 2px solid var(--ep-verde);
    outline-offset: 2px;
}

/* O campo de e-mail não tem olhinho, então não precisa da folga à direita */
.login-coluna[b-9vajfxk9je]  #Email.campo {
    padding-right: 32px;
}

/* ---------- Olhinho da senha ---------- */
.campo-com-olho[b-9vajfxk9je] {
    position: relative;
}

.botao-olho[b-9vajfxk9je] {
    position: absolute;
    top: 0;
    right: 0;

    /* O ícone tem 20px, mas a área de toque vai a 44px: abaixo disso o dedo
       erra. É a regra de alvo mínimo do próprio guia. */
    width: 44px;
    height: var(--altura-campo);

    display: flex;
    align-items: center;
    justify-content: center;

    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
    color: var(--ep-roxo-escuro);
    font-size: 20px;                    /* medido: ícone de ~20px */
}

/* ---------- Botões ---------- */

/*  ESPAÇAMENTO ENTRE OS BOTÕES (ajustado na leva 3c)

    A linha dos botões tem EXATAMENTE a mesma largura da caixa de input, e o
    "space-between" joga um botão para cada ponta dessa largura. Ou seja: o
    espaço entre eles é sempre o máximo possível, e as bordas externas se
    alinham com as bordas do campo logo acima.

    Sobre a quebra de linha: na leva 3b eu travei em "nowrap" porque o texto
    em negrito não cabia e o segundo botão caía sozinho. Agora o texto é
    Regular e os dois cabem folgados nos 310px do iPhone comum. Mas em tela
    menor (iPhone SE: 295px úteis) a folga quase acaba, então devolvi a
    quebra como REDE DE SEGURANÇA: se um dia não couber, o "Novo por aqui?"
    desce para a linha de baixo em vez de ser cortado na lateral. */
.login-botoes[b-9vajfxk9je] {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    align-items: center;

    /* Mesma largura do campo de input acima (que no celular é 100%). */
    width: 100%;

    /* Estes gaps são MÍNIMOS, não fixos: o "space-between" empurra os botões
       para as pontas e o espaço real fica bem maior. O column-gap só entra em
       ação se a tela ficar tão estreita que os dois quase se encostem.
       O row-gap é o respiro entre as duas linhas quando houver quebra. */
    column-gap: var(--espaco-3);        /* 16px */
    row-gap: var(--espaco-3);           /* 16px */

    margin-top: var(--espaco-4);        /* 24px depois do último campo */
}

.btn-euphoria[b-9vajfxk9je] {
    height: var(--altura-botao);        /* 40px — medido */
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0 28px;                    /* medido: ~29px de cada lado */

    border-radius: var(--canto-botao);  /* pílula */
    flex: 0 0 auto;                     /* nunca encolhe: o texto sempre cabe */

    /* Texto em Regular (Obviously normal), não em Wide Bold. */
    font-family: var(--fonte-corpo);
    font-weight: normal;

    font-size: var(--legenda);          /* 14px — medido */
    line-height: 1;
    text-decoration: none;
    white-space: nowrap;
    cursor: pointer;
    transition: filter .15s, background-color .15s, color .15s;
}

.btn-euphoria-cheio[b-9vajfxk9je] {
    background-color: var(--ep-verde);  /* #07F29C — medido */
    color: var(--ep-roxo-escuro);       /* #621085 — medido */
    border: none;
}

.btn-euphoria-cheio:hover[b-9vajfxk9je] {
    filter: brightness(0.92);
}

.btn-euphoria-contorno[b-9vajfxk9je] {
    background-color: transparent;
    color: var(--ep-verde);
    border: 1px solid var(--ep-verde);  /* medido: 1px, não 2px */
}

.btn-euphoria-contorno:hover[b-9vajfxk9je] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

/* ---------- Mensagens de erro ----------

   "Email obrigatório", "Senha obrigatória", "Digite um email válido".
   Reescrito na leva 3d: fonte Regular e ícone de aviso AMARELO.

   POR QUE O ÍCONE MUDOU DE TÉCNICA (leva 3c -> 3d)
   Na 3c o ícone era um <i> do Phosphor colocado ao lado do texto, revelado
   por uma regra de CSS. Não apareceu. As duas causas possíveis eram: (a) a
   regra que o revelava não pegou, ou (b) o peso "Fill" do Phosphor não está
   desenhando. Não dava para saber qual sem ver a tela rodando.

   Esta versão não depende de nenhuma das duas: o ícone virou um desenho
   embutido aqui dentro (formato SVG), colado na PRÓPRIA mensagem através do
   ::before. Vantagem: se a mensagem não existe, o ::before também não existe
   — não há como o ícone aparecer sozinho, e não há regra que possa falhar.
   De quebra, não depende do site da internet que hospeda os ícones.

   HONESTIDADE SOBRE O DESENHO: este triângulo foi desenhado por mim seguindo
   a forma do "warning" do Phosphor (triângulo cheio com exclamação vazada),
   mas não é o arquivo oficial da biblioteca. No tamanho em que aparece
   (14px) a diferença não é perceptível. Se um dia quiser o oficial, é só
   exportar o SVG do Figma e trocar o desenho abaixo.

   A COR AMARELA APARECE EM DOIS LUGARES: no "%23FFBA00" lá dentro do desenho
   (é o #FFBA00 escrito do jeito que o CSS exige) e no token --ep-aviso do
   app.css. São o mesmo amarelo do Figma. Se a identidade mudar, os dois
   precisam ser trocados — o desenho embutido não enxerga o token. */

.login-coluna[b-9vajfxk9je]  .campo-erro,
.login-coluna[b-9vajfxk9je]  .validation-message {
    display: flex;
    align-items: center;
    gap: var(--espaco-2);               /* 8px entre o ícone e o texto */
    margin: var(--espaco-2) 0 0 0;      /* 8px abaixo do campo */

    font-family: var(--fonte-corpo);
    font-weight: normal;                /* Regular — era bold */
    font-size: var(--legenda-2);        /* 12px */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
}

/* O ícone de aviso. Se ele sumir de novo, é ESTA regra — e só ela. */
.login-coluna[b-9vajfxk9je]  .campo-erro::before,
.login-coluna[b-9vajfxk9je]  .validation-message::before {
    content: "";
    flex: 0 0 auto;                     /* não encolhe se o texto for longo */

    /*  TAMANHO — ajustado na leva 3e, medindo o print da tela rodando.

        Era 14px. Num texto de 12px, o miolo das letras (do topo do "E" até
        a linha de base) tem 7,5px de altura. Um ícone de 14px passava 2px
        ABAIXO da linha de base e parecia caído, mesmo estando centralizado.
        12px é o mesmo corpo do texto e encaixa na linha. */
    width: 12px;
    height: 12px;

    /*  ACERTO ÓPTICO — 1px para cima.

        Medido no print: o centro do ícone estava 0,5px abaixo do centro do
        miolo das letras. Isso acontece porque o acento do "ó" e a perna do
        "g" esticam a caixa do texto para cima e para baixo, deslocando o
        centro real. Arredondei para 1px, que é o menor ajuste que o
        navegador desenha de forma previsível.

        Se ficar alto demais, troque este -1px por 0. */
    position: relative;
    top: -1px;

    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23FFBA00' fill-rule='evenodd' d='M12 2 23.5 22H.5Z M11 9h2v6h-2Z M10.8 17.8a1.2 1.2 0 1 0 2.4 0 1.2 1.2 0 1 0-2.4 0Z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
}

/* Aviso geral ("Credenciais inválidas!") */
.login-aviso[b-9vajfxk9je] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-3);

    margin-top: var(--espaco-4);
    padding: var(--espaco-3);
    border-radius: var(--canto-card);   /* 16px — é um card */

    background-color: var(--ep-branco);
    color: var(--ep-erro);
    font-size: var(--legenda);
    line-height: var(--entrelinha);
    font-weight: normal;
}

.login-aviso-fechar[b-9vajfxk9je] {
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
    color: var(--ep-erro);
    font-size: 18px;
    line-height: 1;
    display: flex;
    align-items: center;
}

/* ---------- Ilustração ----------
   No celular ela não existe no desenho. O "display: none" também evita que o
   navegador baixe a imagem à toa no 4G do cliente. */
.login-ilustracao[b-9vajfxk9je] {
    display: none;
}

/* ============================================================================
   COMPUTADOR
   ----------------------------------------------------------------------------
   O desenho de 1440px tem duas colunas: formulário à esquerda (440px de
   largura) e ilustração à direita (654px), com 121px de intervalo, tudo
   dentro dos 1216px de largura máxima.

   O corte em 1000px é decisão minha, não do Figma: abaixo disso as duas
   colunas ficariam estreitas demais e a ilustração viraria uma tira.
   ========================================================================== */
@media (min-width: 1000px) {

    /* No computador a folga do topo da barra é 24px fixos (não o notch) —
       mesma conta do .ep-navbar-espaco pro computador: 24 + 62 + 24. */
    .tela-login[b-9vajfxk9je] {
        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4));
    }

    .login-interno[b-9vajfxk9je] {
        display: flex;
        align-items: stretch;

        /*  INTERVALO ENTRE O TEXTO E A FOTO (leva 3c)

            Era fixo em 121px. Agora ele ENCOLHE conforme a janela diminui,
            que é o pedido: a margem lateral não cede, quem cede é este
            espaço do meio.

            A conta faz o intervalo caminhar em linha reta:
                janela de 1440px  ->  121px (o valor do desenho)
                janela de 1000px  ->   24px (o mínimo, onde vira celular)
            O clamp() é o que segura as duas pontas: nunca menos que 24,
            nunca mais que 121, mesmo em monitor gigante.

            Se um dia quiser o intervalo mais apertado, mexa só no primeiro
            número (o 24px) — o resto se ajusta sozinho. */
        gap: clamp(24px, calc(22.045vw - 196.45px), 121px);

        /*  MARGEM LATERAL DE 110px (leva 3c)

            A regra agora é a margem, não a largura do conteúdo. Em 1440px
            sobram 1220px de conteúdo — praticamente o mesmo que havia antes,
            só que expresso do jeito certo.

            O max-width de 1440px é o frame do Figma: em monitor maior o
            bloco inteiro fica centralizado em vez de esticar. Sem ele, num
            monitor de 27" a ilustração viraria um painel enorme. */
        max-width: var(--largura-frame-desktop);     /* 1440px */
        margin: 0 auto;
        padding-left: var(--margem-lateral-desktop); /* 110px */
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: var(--espaco-6);
    }

    /* O bloco do título até os botões fica centralizado na vertical,
       acompanhando a altura da ilustração ao lado. */
    .login-coluna[b-9vajfxk9je] {
        width: 440px;                        /* medido */
        flex: 0 0 440px;
        padding-top: 0;

        display: flex;
        flex-direction: column;
        justify-content: center;
    }

    .login-titulo[b-9vajfxk9je] {
        font-size: var(--titulo-3);          /* 44px — medido no desenho grande */
        margin-bottom: var(--espaco-6);      /* 48px */
    }

    .campo-rotulo[b-9vajfxk9je] {
        font-size: var(--corpo-2);           /* 22px — medido */
    }

    /* Os campos NÃO ocupam a coluna toda: no desenho têm 314px fixos.
       O texto dentro deles continua com 14px, igual ao celular — conferi. */
    .login-coluna[b-9vajfxk9je]  input.campo {
        width: 314px;
    }

    .botao-olho[b-9vajfxk9je] {
        left: 270px;                         /* 314 − 44 */
        right: auto;
    }

    /*  Os botões têm exatamente o mesmo tamanho do celular — medido.
        A largura da LINHA passou a ser a mesma do campo (314px), seguindo a
        regra combinada na leva 3c: "o espaçamento entre os botões é o máximo
        da caixa de input". No desenho eu havia medido 316px — a diferença de
        2px é invisível e agora as bordas batem certinho com o campo. */
    .login-botoes[b-9vajfxk9je] {
        margin-top: var(--espaco-6);
        width: 314px;
    }

    .login-ilustracao[b-9vajfxk9je] {
        display: block;
        flex: 1 1 auto;

        /* Afastamento em relação ao cabeçalho: 54px. Sem isso a ilustração
           encostava no menu verde (e no logo, que desce um pouco). */
        margin-top: 54px;

        /* Medi o canto deste card: ~56px, e não os 16px da página de
           fundamentos. É um caso à parte — ver o briefing. */
        border-radius: 56px;
        overflow: hidden;

        /* Altura do desenho: 844px, encolhendo em telas mais baixas.

           O desconto de 212px é a soma de tudo que cerca a ilustração no
           computador: 110px (padding-top da .tela-login, reserva da
           Nav_Bar) + 54px (o margin-top logo acima) + 48px (padding-bottom
           da .login-interno).

           Achado real (05/08/2026): a conta antiga descontava só 160px,
           52px a menos que o necessário — a ilustração nascia alta demais
           e a página sempre sobrava pra rolar no desktop, mesmo em telas
           de notebook comuns (~50px de rolagem, quase o mesmo tamanho do
           bug antigo do backlog 5.2). Mesma correção em SignUp.razor.css e
           Component/ResetPassword.razor.css — as três telas repetem essa
           fórmula. */
        height: min(844px, calc(100vh - 212px));
    }

    .login-ilustracao img[b-9vajfxk9je] {
        width: 100%;
        height: 100%;
        object-fit: cover;
        object-position: center;
        display: block;
    }
}
/* /Components/Pages/Login/SignUp.razor.rz.scp.css */
/* ============================================================================
   TELA DE CADASTRO — VISUAL NOVO (Sprint 04 / leva 7, 29/07/2026)
   ----------------------------------------------------------------------------
   Este arquivo é quase todo CÓPIA de SignIn.razor.css: as duas telas usam o
   mesmo fundo roxo, os mesmos campos em pílula, os mesmos botões e a mesma
   ilustração — só o conteúdo interno muda. Como cada .razor.css só vale
   dentro do seu próprio componente, repetir os nomes de classe aqui não
   causa conflito nenhum com a /signin.

   O que é DE FATO novo nesta tela (não existe na /signin): os títulos de
   seção ("Dados:" / "Dados de Acesso:") e o grid de campos em pares no
   computador — ambos ficam nos dois últimos blocos deste arquivo.
   ========================================================================== */

.tela-login[b-ehrmrx8uy7] {
    background-color: var(--ep-roxo);

    /* 100vh sem desconto: a tela começa em y=0 agora (o fundo sobe atrás
       da Nav_Bar, ver abaixo), não 44px abaixo do topo — ver o comentário
       completo em SignIn.razor.css (fecha o mesmo backlog 5.2). */
    min-height: 100vh;

    /* Sobe por baixo da Nav_Bar fixa (achado na Sprint 06, aplicado aqui
       também) — mesma técnica e mesma conta da /signin. Ver o comentário
       completo em SignIn.razor.css. */
    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4));
}

.login-interno[b-ehrmrx8uy7] {
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

.login-coluna[b-ehrmrx8uy7] {
    padding-top: 0;
}

/* ---------- Título ---------- */
.login-titulo[b-ehrmrx8uy7] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-5);         /* 28px no celular — igual à /signin */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    margin: 0 0 var(--espaco-5) 0;
}

/* ---------- Títulos de seção ("Dados:" / "Dados de Acesso:") ----------
   NOVO nesta tela: a /signin não tem essa divisão em seções.
   20px medido no Figma — não bate com nenhum token existente (o mais perto
   é --subtitulo, 22px), por isso o valor é escrito direto aqui. */
.cadastro-secao-titulo[b-ehrmrx8uy7] {
    font-family: var(--fonte-titulo);
    font-weight: bold;                  /* Wide Bold, igual ao título principal */
    font-size: 20px;
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    margin: var(--espaco-5) 0 var(--espaco-3) 0; /* 32px acima, 16px abaixo */
}

/* O primeiro título de seção vem logo depois do <h1>, que já empurra
   32px (--espaco-5) de distância sozinho — sem este ajuste, os dois
   espaços somados abririam um vão grande demais antes de "Dados:". */
.cadastro-secao-titulo:first-of-type[b-ehrmrx8uy7] {
    margin-top: 0;
}

/* ---------- Campos ---------- */
.campo-grupo[b-ehrmrx8uy7] {
    margin-bottom: var(--espaco-4);     /* 24px entre um campo e o próximo */
}

.campo-rotulo[b-ehrmrx8uy7] {
    display: block;
    font-size: var(--legenda);          /* 14px — igual à /signin nos dois tamanhos
                                            (pendência 4: aqui NÃO sobe para 22px
                                            no computador, porque são 7 campos
                                            contra 2, e subiria mal visualmente) */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    margin-bottom: var(--espaco-2);     /* 8px */
}

.login-coluna[b-ehrmrx8uy7]  input.campo {
    display: block;
    width: 100%;
    height: var(--altura-campo);        /* 44px */
    box-sizing: border-box;

    background-color: var(--ep-branco);
    border: none;
    border-radius: var(--canto-campo);  /* pílula */

    /* Sem sombra (pendência 1): o Figma marca "effects: shadow" nos campos,
       mas a /signin já decidiu não usar sombra, só background + pílula.
       Mantido igual aqui para as duas telas ficarem consistentes entre si. */
    padding: 0 56px 0 32px;

    font-family: var(--fonte-corpo);
    font-size: var(--legenda);          /* 14px */
    color: var(--ep-roxo-escuro);
}

.login-coluna[b-ehrmrx8uy7]  input.campo::placeholder {
    color: var(--ep-roxo-escuro);
    opacity: 1;
}

.login-coluna[b-ehrmrx8uy7]  input.campo:focus {
    outline: 2px solid var(--ep-verde);
    outline-offset: 2px;
}

/* Os campos sem ícone à direita não precisam da folga de 56px — só Senha
   (olhinho) e Data de Nascimento (calendário) têm botão/ícone ali.
   Listados por id, igual ao #Email da /signin. */
.login-coluna[b-ehrmrx8uy7]  #Nome.campo,
.login-coluna[b-ehrmrx8uy7]  #Sobrenome.campo,
.login-coluna[b-ehrmrx8uy7]  #NumeroContato.campo,
.login-coluna[b-ehrmrx8uy7]  #NumeroDocumento.campo,
.login-coluna[b-ehrmrx8uy7]  #Email.campo {
    padding-right: 32px;
}

/* ---------- Olhinho da senha ---------- */
.campo-com-olho[b-ehrmrx8uy7] {
    position: relative;
}

.botao-olho[b-ehrmrx8uy7] {
    position: absolute;
    top: 0;
    right: 0;
    width: 44px;
    height: var(--altura-campo);

    display: flex;
    align-items: center;
    justify-content: center;

    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
    color: var(--ep-roxo-escuro);
    font-size: 20px;
}

/* ---------- Data de Nascimento (Dia/Mês/Ano) ----------
   Achado 15/08/2026: <input type="date"> nativo estourava a largura da
   tela no Safari, sem solução via CSS depois de várias tentativas (ver
   histórico de commits). Trocado por 3 campos numéricos simples — sem
   ícone nenhum, por isso a folga de 56px do input.campo não faz sentido
   aqui; padding menor e texto centralizado, já que são só 2-4 dígitos.

   No celular os 3 empilham em coluna (cada um 100% da largura, igual aos
   outros campos) — em linha ficavam grandes demais numa tela estreita.
   Só vira linha no desktop (abaixo, dentro do @media que já existe pra
   grade de campos), onde cabe dentro dos mesmos 240px de qualquer outro
   campo — os 3 diminuem pra caber, nunca ultrapassam esse máximo. */
.campo-data-linha[b-ehrmrx8uy7] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

/* Mesmo padding-left (32px) dos outros campos sem ícone (linha ~119
   acima) — no celular a caixa é 100% de largura, igual às outras. */
.login-coluna[b-ehrmrx8uy7]  .campo-data-linha input.campo {
    padding: 0 32px;
}

/* ---------- Botões ---------- */
.login-botoes[b-ehrmrx8uy7] {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    align-items: center;

    width: 100%;
    column-gap: var(--espaco-3);
    row-gap: var(--espaco-3);

    margin-top: var(--espaco-4);
}

.btn-euphoria[b-ehrmrx8uy7] {
    height: var(--altura-botao);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0 28px;

    border-radius: var(--canto-botao);
    flex: 0 0 auto;

    font-family: var(--fonte-corpo);
    font-weight: normal;

    font-size: var(--legenda);
    line-height: 1;
    text-decoration: none;
    white-space: nowrap;
    cursor: pointer;
    transition: filter .15s, background-color .15s, color .15s;
}

.btn-euphoria-cheio[b-ehrmrx8uy7] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
}

.btn-euphoria-cheio:hover[b-ehrmrx8uy7] {
    filter: brightness(0.92);
}

.btn-euphoria-contorno[b-ehrmrx8uy7] {
    background-color: transparent;
    color: var(--ep-verde);
    border: 1px solid var(--ep-verde);
}

.btn-euphoria-contorno:hover[b-ehrmrx8uy7] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

/* ---------- Mensagens de erro ----------
   Ícone de aviso embutido em SVG, igual à /signin — ver o comentário longo
   em SignIn.razor.css se precisar entender o porquê desta técnica. */
.login-coluna[b-ehrmrx8uy7]  .campo-erro,
.login-coluna[b-ehrmrx8uy7]  .validation-message {
    display: flex;
    align-items: center;
    gap: var(--espaco-2);
    margin: var(--espaco-2) 0 0 0;

    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: var(--legenda-2);        /* 12px */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
}

.login-coluna[b-ehrmrx8uy7]  .campo-erro::before,
.login-coluna[b-ehrmrx8uy7]  .validation-message::before {
    content: "";
    flex: 0 0 auto;
    width: 12px;
    height: 12px;
    position: relative;
    top: -1px;

    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23FFBA00' fill-rule='evenodd' d='M12 2 23.5 22H.5Z M11 9h2v6h-2Z M10.8 17.8a1.2 1.2 0 1 0 2.4 0 1.2 1.2 0 1 0-2.4 0Z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
}

/* Aviso geral ("Já existe uma conta com esse e-mail ou CPF.") */
.login-aviso[b-ehrmrx8uy7] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-3);

    margin-top: var(--espaco-4);
    padding: var(--espaco-3);
    border-radius: var(--canto-card);

    background-color: var(--ep-branco);
    color: var(--ep-erro);
    font-size: var(--legenda);
    line-height: var(--entrelinha);
    font-weight: normal;
}

.login-aviso-fechar[b-ehrmrx8uy7] {
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
    color: var(--ep-erro);
    font-size: 18px;
    line-height: 1;
    display: flex;
    align-items: center;
}

/* ---------- Ilustração ---------- */
.login-ilustracao[b-ehrmrx8uy7] {
    display: none;
}

/* ============================================================================
   COMPUTADOR
   ----------------------------------------------------------------------------
   Mesma estrutura de duas colunas da /signin (formulário à esquerda,
   ilustração à direita, dentro dos mesmos 1440px de frame e 110px de margem).
   A diferença fica só na largura da coluna do formulário: aqui ela é mais
   larga (504px = 240 + 24 + 240, os dois campos lado a lado) contra os
   440px fixos da /signin. Por isso a ilustração acaba um pouco mais estreita
   que os 654px do Figma quando a tela é bem larga — é a folga que sobra
   depois da coluna maior; ela encolhe, nunca estoura o layout.
   ========================================================================== */
@media (min-width: 1000px) {

    /* No computador a folga do topo da barra é 24px fixos (não o notch). */
    .tela-login[b-ehrmrx8uy7] {
        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4));
    }

    .login-interno[b-ehrmrx8uy7] {
        display: flex;
        align-items: stretch;

        /* Mesma fórmula de intervalo da /signin (foi decidido reaproveitar,
           não recalcular um novo clamp só para esta tela). */
        gap: clamp(24px, calc(22.045vw - 196.45px), 121px);

        max-width: var(--largura-frame-desktop);
        margin: 0 auto;
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: var(--espaco-6);
    }

    .login-coluna[b-ehrmrx8uy7] {
        width: 504px;                        /* 240 + 24 (gap) + 240 */
        flex: 0 0 504px;
        padding-top: 0;

        display: flex;
        flex-direction: column;
        justify-content: center;
    }

    .login-titulo[b-ehrmrx8uy7] {
        font-size: var(--titulo-3);          /* 44px — igual à /signin */
        margin-bottom: var(--espaco-6);
    }

    .login-botoes[b-ehrmrx8uy7] {
        margin-top: var(--espaco-6);
    }

    .login-ilustracao[b-ehrmrx8uy7] {
        display: block;
        flex: 1 1 auto;

        margin-top: 54px;

        /* Canto do card: o Figma desta tela mede ~60px, mas a /signin (já no
           ar) usa 56px (pendência 2 — decidido manter 56, para não ter dois
           valores diferentes pintando a mesma ideia em telas vizinhas). */
        border-radius: 56px;
        overflow: hidden;

        /* 212px = 110 (padding-top da .tela-login) + 54 (margin-top acima)
           + 48 (padding-bottom da .login-interno) — achado real (05/08/2026),
           ver o comentário completo em SignIn.razor.css. Era 160px, faltavam
           52px na conta: a página sempre sobrava pra rolar no desktop. */
        height: min(844px, calc(100vh - 212px));
    }

    .login-ilustracao img[b-ehrmrx8uy7] {
        width: 100%;
        height: 100%;
        object-fit: cover;
        object-position: center;
        display: block;
    }

    /* ---------- Grid de campos em pares (NOVO — não existe na /signin) ----------
       No celular os campos empilham normalmente (bloco a bloco, 100% da
       coluna). No computador viram um grid de 2 colunas de 240px: Nome+
       Sobrenome, Telefone+CPF, e Data de Nascimento sozinha na sobra (o
       grid deixa a segunda coluna vazia sozinho, sem precisar de regra
       extra). O mesmo grid serve para Email+Senha, no bloco de baixo. */
    .cadastro-grid[b-ehrmrx8uy7] {
        display: grid;
        grid-template-columns: repeat(2, 240px);
        column-gap: var(--espaco-4);   /* 24px — medido no Figma (~22px) */
        row-gap: var(--espaco-4);
        margin-bottom: var(--espaco-4);
    }

    /* Dentro do grid, o espaçamento vertical já é o row-gap acima — sem
       isso, o margin-bottom de cada .campo-grupo somaria com o row-gap e
       abriria um vão dobrado entre as linhas. */
    .cadastro-grid .campo-grupo[b-ehrmrx8uy7] {
        margin-bottom: 0;
    }

    /* Data de Nascimento volta a ser linha no desktop — cabe dentro dos
       mesmos 240px de qualquer outro campo da grade (a coluna ocupada
       por ela), os 3 diminuem pra caber ali dentro, nunca ultrapassam
       esse máximo. min-width:0 no item do grid E nos campos: sem isso,
       o conteúdo (placeholder "AAAA") tenta manter uma largura mínima
       própria e vaza pra fora dos 240px em vez de encolher (mesmo
       problema que o <input type="date"> dava no Safari, agora dentro
       do grid). */
    .cadastro-grid .campo-grupo:has(.campo-data-linha)[b-ehrmrx8uy7] {
        min-width: 0;
    }

    .campo-data-linha[b-ehrmrx8uy7] {
        flex-direction: row;
    }

    .login-coluna[b-ehrmrx8uy7]  .campo-data-linha input.campo {
        width: auto;
        min-width: 0;
        flex: 1;
        padding: 0 var(--espaco-2);   /* caixa estreita — 32px não cabe */
        text-align: center;
    }

    .login-coluna[b-ehrmrx8uy7]  #DataNascimentoAno.campo {
        flex: 1.4;
    }
}
/* /Components/Pages/Pedidos/CalcularFrete.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO — /frete (leva 35, piloto do backlog 4.1 — Entrega), a partir
   do grupo Figma "REDESIGN — Entrega (Orders + OrdersFinish + BuyOutApp +
   Frete)", sub-frame "Calcular Frete". Mesma casca de /config — ver
   ai/DESIGN_SYSTEM.md, "Banner do título". Único breakpoint do site: 1000px.

   Campo de CEP usa a receita oficial do site (fundo branco, borda roxa,
   sombra interna, contorno verde no foco — AddressComponent.razor.css) em
   vez da borda cinza clara que este frame do Figma desenha, e o botão
   "Calcular" é verde (padrão de botão de ação principal do admin) em vez
   do roxo que o Figma desenha aqui — mesma decisão já tomada na leva 31
   pra manter o admin consistente.
   ========================================================================== */

.frete-pagina[b-u1zanfeq49] {
    background-color: var(--ep-cinza-100);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.frete-hero[b-u1zanfeq49] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-5);

    display: flex;
    flex-direction: column;
    align-items: center;

    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.frete-caminho[b-u1zanfeq49] {
    display: block;
    align-self: flex-start;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    margin-bottom: var(--espaco-2);
    padding-left: var(--espaco-4);
}

    .frete-caminho a[b-u1zanfeq49] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .frete-caminho a:hover[b-u1zanfeq49] {
            text-decoration: underline;
        }

.frete-titulo[b-u1zanfeq49] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-5);
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0;
}

/* ---------- Card branco de conteúdo ----------
   Mais estreito que as outras telas do admin (formulário só, não tabela) —
   600px medido no Figma, centralizado no computador. */
.frete-card[b-u1zanfeq49] {
    background-color: var(--ep-branco);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
    max-width: 600px;
    width: 100%;
    box-sizing: border-box;
    margin: 0 auto;
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

/* Recalcular endereços antigos vem logo abaixo da calculadora de CEP —
   sem isso os dois cards ficam colados. Seletor de irmão adjacente pega só
   o segundo card, sem precisar de classe nova nem mexer no primeiro. */
.frete-card + .frete-card[b-u1zanfeq49] {
    margin-top: var(--espaco-4);
}

.frete-subtitulo[b-u1zanfeq49] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--texto-peq);
    color: var(--ep-roxo-escuro);
    margin: 0;
}

.frete-descricao[b-u1zanfeq49] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
    margin: 0;
}

/* ---------- Campo de CEP ---------- */
.frete-campo[b-u1zanfeq49] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.frete-rotulo[b-u1zanfeq49] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    color: var(--ds-cinza-75);
}

/* Mesma receita oficial de campo já usada no resto do site (leva 13c,
   AddressComponent.razor.css). */
.frete-input[b-u1zanfeq49] {
    width: 100%;
    box-sizing: border-box;
    height: var(--altura-campo);
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-campo);
    padding: 0 var(--espaco-4);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    appearance: none;
    -webkit-appearance: none;
}

    .frete-input[b-u1zanfeq49]::placeholder {
        color: var(--ep-roxo-escuro);
        opacity: 1;
    }

    .frete-input:focus[b-u1zanfeq49] {
        outline: 2px solid var(--ep-verde);
        outline-offset: 2px;
    }

/* ---------- Botões ---------- */
.frete-botoes[b-u1zanfeq49] {
    display: flex;
    gap: var(--espaco-2);
}

.frete-botao[b-u1zanfeq49] {
    height: 44px;
    flex: 1 1 0;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    text-align: center;
    cursor: pointer;
    border: none;
    transition: filter .15s;
}

    .frete-botao:disabled[b-u1zanfeq49] {
        opacity: .6;
        cursor: not-allowed;
    }

.frete-botao--verde[b-u1zanfeq49] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

    .frete-botao--verde:hover:not(:disabled)[b-u1zanfeq49] {
        filter: brightness(0.92);
    }

.frete-botao--contorno[b-u1zanfeq49] {
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px solid var(--ep-roxo);
}

/* ---------- Aviso (CEP inválido, fora da área etc.) ---------- */
.frete-aviso[b-u1zanfeq49] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-aviso-escuro);
    margin: 0;
}

/* ---------- Resultado ---------- */
.frete-resultado[b-u1zanfeq49] {
    background-color: var(--ep-lilas-neblina);
    border-radius: var(--canto-m);
    padding: var(--espaco-3);
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.frete-resultado-endereco[b-u1zanfeq49] {
    font-family: var(--fonte-corpo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    margin: 0;
}

.frete-resultado-detalhe[b-u1zanfeq49] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
    margin: 0 0 var(--espaco-2) 0;
}

.frete-resultado-linha[b-u1zanfeq49] {
    display: flex;
    gap: var(--espaco-5);
}

.frete-resultado-item[b-u1zanfeq49] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.frete-resultado-rotulo[b-u1zanfeq49] {
    font-family: var(--fonte-corpo);
    font-size: 11px;
    color: var(--ds-cinza-50);
}

.frete-resultado-valor[b-u1zanfeq49] {
    font-family: var(--fonte-corpo);
    font-weight: bold;
    font-size: var(--texto-peq);
    color: var(--ds-cinza-75);
}

.frete-resultado-valor--sucesso[b-u1zanfeq49] {
    color: var(--ep-sucesso);
}

.frete-resultado-nota[b-u1zanfeq49] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
    margin: var(--espaco-1) 0 0 0;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .frete-pagina[b-u1zanfeq49] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .frete-hero[b-u1zanfeq49] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: var(--espaco-5);
        margin-bottom: var(--espaco-9);

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .frete-titulo[b-u1zanfeq49] {
        font-size: var(--titulo-3);
    }

    .frete-caminho[b-u1zanfeq49] {
        padding-left: var(--espaco-5);
    }

    .frete-card[b-u1zanfeq49] {
        padding: var(--espaco-5);
    }

    .frete-botoes[b-u1zanfeq49] {
        justify-content: flex-start;
    }

    .frete-botao[b-u1zanfeq49] {
        flex: 0 0 auto;
        min-width: 160px;
    }
}

/* ---------- Confirmação antes de recalcular — mesma casca
   "confirmar-exclusao-*" do resto do admin (ver Inventory.razor.css),
   renomeada porque aqui não é exclusão. Cópia própria, isolamento do
   Blazor (ver comentário na marcação). ---------- */
.confirmar-acao-fundo[b-u1zanfeq49] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    padding: var(--espaco-4);
}

.confirmar-acao-caixa[b-u1zanfeq49] {
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-4);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.confirmar-acao-icone img[b-u1zanfeq49] {
    width: 144px;
    height: 144px;
    object-fit: contain;
}

.confirmar-acao-pergunta[b-u1zanfeq49] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-acao-descricao[b-u1zanfeq49] {
    font-family: var(--fonte-corpo);
    font-weight: 400;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-acao-botoes[b-u1zanfeq49] {
    display: flex;
    gap: var(--espaco-3);
    width: 100%;
    margin-top: var(--espaco-4);
}

.confirmar-acao-nao[b-u1zanfeq49],
.confirmar-acao-sim[b-u1zanfeq49] {
    flex: 1;
    height: 39px;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    border: none;
    cursor: pointer;
}

.confirmar-acao-nao[b-u1zanfeq49] {
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px solid var(--ep-roxo);
}

.confirmar-acao-sim[b-u1zanfeq49] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}
/* /Components/Pages/Pedidos/Component/FreteComponent.razor.rz.scp.css */
/* Visual novo — modal "Relatório de frete" (OrdersFinish.razor), leva 38.
   Sem desenho próprio no Figma; segue a mesma linguagem já estabelecida no
   resto do admin (cabeçalho/campo/botão "cadastro-modal-*", ver leva 31).
   Substitui um CSS inteiro que sobrou de um formulário bem maior e antigo —
   nada daquilo batia com a marcação atual (bem menor). */

.frete-relatorio-modal[b-e8opgl160c] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    padding: var(--espaco-5);
}

.cadastro-modal-cabecalho[b-e8opgl160c] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.cadastro-modal-titulo[b-e8opgl160c] {
    font-family: var(--fonte-titulo);
    font-size: var(--subtitulo);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

.cadastro-modal-descricao[b-e8opgl160c] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-50);
}

/* O gap do .frete-relatorio-modal só separa os filhos DIRETOS do cartão —
   o conteúdo do <EditForm> vira um <form>, um nível abaixo, então precisa
   do próprio flex+gap (achado: campo e botão coladados, sem espaço nenhum
   entre eles). */
.cadastro-modal-form-corpo[b-e8opgl160c] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
}

.cadastro-modal-campo[b-e8opgl160c] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

.cadastro-modal-rotulo[b-e8opgl160c] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
}

/* Mesma receita de campo já usada no resto do site (leva 13c,
   AddressComponent.razor.css). */
.cadastro-modal-input[b-e8opgl160c] {
    height: var(--altura-campo);
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-campo);
    border: 1px solid var(--ep-roxo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    background-color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    appearance: none;
    -webkit-appearance: none;
    box-sizing: border-box;
}

    .cadastro-modal-input:focus[b-e8opgl160c] {
        outline: 2px solid var(--ep-verde);
        outline-offset: 2px;
    }

.frete-relatorio-vazio[b-e8opgl160c] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-erro-forte);
    margin: 0;
}

.cadastro-modal-divisor[b-e8opgl160c] {
    height: 0.5px;
    background-color: rgba(0, 0, 0, 0.25);
}

.cadastro-modal-botao-salvar[b-e8opgl160c] {
    height: 44px;
    width: 100%;
    border-radius: var(--canto-botao);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
    transition: filter .15s;
}

    .cadastro-modal-botao-salvar:hover[b-e8opgl160c] {
        filter: brightness(0.92);
    }
/* /Components/Pages/Pedidos/Component/OrderComponent.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO — modal de Checkout ("Ver detalhes"), leva 36
   ----------------------------------------------------------------------------
   Mesma linguagem visual da /order/{id} (checkout de verdade do cliente,
   Sprint 11) — cartão de produto, cartão de endereço, select com seta,
   toggle de troco. Cópia própria porque o isolamento do Blazor não deixa
   reaproveitar OrderCheckout.razor.css. Adaptado pra caber numa modal
   branca (não o fundo roxo sólido da tela cheia — aqui os textos usam a
   paleta escura sobre fundo claro, não branco-sobre-roxo). Coluna única,
   sem breakpoint — a modal já é estreita o bastante em qualquer tamanho.
   ========================================================================== */

.admincheckout-modal[b-ajjbib7o92] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    padding: var(--espaco-4);
}

/* Cabeçalho próprio (nome do cliente + X) — substitui o cabeçalho padrão
   do Bootstrap, escondido via admincheckout-modal-wrapper no app.css. */
.admincheckout-cabecalho[b-ajjbib7o92] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-3);
}

.admincheckout-cabecalho-nome[b-ajjbib7o92] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--texto-peq);
    color: var(--ep-roxo-escuro);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.admincheckout-cabecalho-fechar[b-ajjbib7o92] {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    background-color: var(--ep-lilas-claro);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: 50%;
    font-size: var(--legenda);
    cursor: pointer;
}

.admincheckout-aviso-leitura[b-ajjbib7o92] {
    display: flex;
    align-items: center;
    gap: var(--espaco-2);
    margin: 0;
    padding: var(--espaco-2) var(--espaco-3);
    background-color: var(--ep-lilas-claro);
    color: var(--ep-roxo-escuro);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
}

/* Sinaliza desconto aplicado no pedido (cupom e/ou dinheiro — ver
   DescontoTotalReal/DescontoCupomEstimado/DescontoDinheiroEstimado no
   .razor). */
.admincheckout-cupom-selo[b-ajjbib7o92] {
    display: flex;
    align-items: center;
    gap: var(--espaco-1);
    align-self: flex-start;
    padding: var(--espaco-1) var(--espaco-2);
    margin-bottom: var(--espaco-1);
    background-color: var(--ep-sucesso-claro);
    color: var(--ep-sucesso);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
}

.admincheckout-cupom-selo--dinheiro[b-ajjbib7o92] {
    background-color: var(--ep-aviso-claro);
    color: var(--ep-aviso-escuro);
}

/* ---------- Painel de preço ---------- */
.admincheckout-preco[b-ajjbib7o92] {
    display: flex;
    flex-direction: column;
    gap: 3px;
}

.admincheckout-preco-linha[b-ajjbib7o92] {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    padding: var(--espaco-2) 0;
    border-bottom: 1px solid var(--ds-cinza-15);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
}

.admincheckout-preco-total[b-ajjbib7o92] {
    color: var(--ep-roxo-escuro);
}

    .admincheckout-preco-total span:last-child[b-ajjbib7o92] {
        font-family: var(--fonte-titulo);
        font-weight: bold;
        font-size: var(--texto-peq);
    }

/* ---------- Seções (Produtos/Endereço/Horário/Pagamento) ---------- */
.admincheckout-secao[b-ajjbib7o92] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

.admincheckout-secao-titulo[b-ajjbib7o92] {
    font-family: var(--fonte-corpo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    margin: 0;
    padding-bottom: var(--espaco-2);
    border-bottom: 1px solid var(--ds-cinza-15);
}

.admincheckout-secao-descricao[b-ajjbib7o92] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
    margin: 0;
}

.admincheckout-valor-simples[b-ajjbib7o92] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    margin: 0;
}

/* ---------- Produtos — mesmo desenho do cartão de produto do checkout
   real (foto | info | ação), leva 20a. ---------- */
.admincheckout-produtos[b-ajjbib7o92] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

.admincheckout-produto-card[b-ajjbib7o92] {
    display: flex;
    align-items: center;
    gap: 12px;
    width: 100%;
    box-sizing: border-box;
    padding: 8px 12px 8px 8px;
    border-radius: var(--canto-card);
    border: 0.5px solid var(--ep-roxo);
    background-color: var(--ep-branco);
}

.admincheckout-produto-foto[b-ajjbib7o92] {
    flex-shrink: 0;
    width: 56px;
    height: 62px;
    box-sizing: border-box;
    padding: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 14px;
    background-color: var(--ep-roxo);
}

    .admincheckout-produto-foto img[b-ajjbib7o92] {
        width: 100%;
        height: 100%;
        object-fit: contain;
    }

.admincheckout-produto-info[b-ajjbib7o92] {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.admincheckout-produto-nome[b-ajjbib7o92] {
    display: flex;
    flex-direction: column;
}

.admincheckout-produto-titulo[b-ajjbib7o92] {
    margin: 0;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    font-weight: normal;
    color: var(--ep-roxo-escuro);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.admincheckout-produto-sabor[b-ajjbib7o92] {
    margin: 0;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

.admincheckout-produto-preco[b-ajjbib7o92] {
    margin: 0;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

/* Mesma estrutura do card do carrinho (CartComponent.razor) e do checkout
   de verdade (OrderCheckout.razor) — coluna "ações" empilhada (X em cima,
   stepper embaixo), esticada pela altura do cartão. Resolve o botão de
   remover não caber ao lado do stepper em telas estreitas sem precisar de
   nenhuma quebra de linha manual. */
.admincheckout-produto-acoes[b-ajjbib7o92] {
    flex-shrink: 0;
    align-self: stretch;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    justify-content: space-between;
}

/* No computador, mesma troca de ORDEM (sem duplicar HTML) já usada no
   checkout de verdade: quantidade primeiro, X depois — em linha. */
@media (min-width: 1000px) {
    .admincheckout-produto-acoes[b-ajjbib7o92] {
        flex-direction: row;
        align-items: center;
        gap: var(--espaco-3);
    }

    .admincheckout-produto-stepper[b-ajjbib7o92] {
        order: 1;
    }

    .admincheckout-produto-remover[b-ajjbib7o92] {
        order: 2;
    }
}

/* Modo leitura (pedido finalizado) — só o número, sem o stepper. */
.admincheckout-produto-qtd[b-ajjbib7o92] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
    white-space: nowrap;
}

.admincheckout-produto-stepper[b-ajjbib7o92] {
    display: flex;
    align-items: center;
    gap: 8px;
}

/* "×" pra remover o item — antes era o mesmo botão de diminuir quantidade,
   só que desabilitado (não fazia nada) quando a quantidade chegava a 1. */
.admincheckout-produto-remover[b-ajjbib7o92] {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: none;
    border: 1px solid var(--ep-erro-forte);
    color: var(--ep-erro-forte);
    font-size: 10px;
    padding: 0;
    cursor: pointer;
}

.admincheckout-qtd-botao[b-ajjbib7o92] {
    position: relative;
    flex-shrink: 0;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
}

    .admincheckout-qtd-botao:disabled[b-ajjbib7o92] {
        opacity: 0.4;
        cursor: not-allowed;
    }

.admincheckout-qtd-menos[b-ajjbib7o92] {
    border: 1px solid var(--ep-roxo);
    color: var(--ep-roxo);
}

.admincheckout-qtd-mais[b-ajjbib7o92] {
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
}

.admincheckout-qtd-menos[b-ajjbib7o92]::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 10px;
    height: 1.5px;
    background-color: currentColor;
}

.admincheckout-qtd-mais[b-ajjbib7o92]::before,
.admincheckout-qtd-mais[b-ajjbib7o92]::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    background-color: currentColor;
    transform: translate(-50%, -50%);
}

.admincheckout-qtd-mais[b-ajjbib7o92]::before {
    width: 10px;
    height: 1.5px;
}

.admincheckout-qtd-mais[b-ajjbib7o92]::after {
    width: 1.5px;
    height: 10px;
}

.admincheckout-qtd-valor[b-ajjbib7o92] {
    min-width: 16px;
    text-align: center;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo-escuro);
}

/* ---------- Endereço — rótulo/logradouro/complemento + selo de frete,
   leva 13c em diante. Cópia própria, mesmo motivo de sempre (isolamento do
   Blazor). No celular fica mais estreito que o resto do conteúdo (pedido
   do dono).
   SEM foto (leva 37) — desde que a modal encolheu o card pro celular
   (largura 92%/360px), foto+texto+selo de frete não cabiam juntos numa
   coluna só de ~150px sem espremer o texto a ponto de quebrar em quase uma
   letra por linha (2 tentativas: foto em cima depois foto ao lado, as duas
   quebraram no teste ao vivo). Card simples (flex-coluna) resolve — sobra
   espaço de verdade pro texto e pro selo. */
.admincheckout-endereco-card[b-ajjbib7o92] {
    position: relative;
    width: 92%;
    max-width: 360px;
    box-sizing: border-box;
    margin: 0 auto;
    background-color: var(--ep-branco);
    border: 0.5px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: 0 4px 7.6px rgba(0, 0, 0, 0.25);
    padding: var(--espaco-3);
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

.admincheckout-endereco-info[b-ajjbib7o92] {
    /* Sem isso, item de flex não encolhe abaixo do conteúdo por padrão
       (min-width:auto implícito) — o selo de frete "empurrava" a linha
       inteira mais larga que o espaço disponível, e o card (com o botão
       "Trocar endereço" junto) estourava a tela no celular. */
    min-width: 0;
    display: flex;
    justify-content: space-between;
    align-items: stretch;
    gap: var(--espaco-2);
}

.admincheckout-endereco-texto[b-ajjbib7o92] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
    min-width: 0;
}

.admincheckout-endereco-rotulo[b-ajjbib7o92] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo-escuro);
    opacity: 0.7;
}

.admincheckout-endereco-logradouro[b-ajjbib7o92] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    margin: 0;
}

.admincheckout-endereco-complemento[b-ajjbib7o92] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo-escuro);
    opacity: 0.7;
    margin: 0;
}

/* A caixa estica (align-items:stretch do .admincheckout-endereco-info)
   até a altura do texto ao lado — mesmo pedido do dono já aplicado em
   /address. */
.admincheckout-endereco-frete[b-ajjbib7o92] {
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: flex-start;
    background-color: var(--ep-roxo);
    border-radius: 8px;
    padding: var(--espaco-2) var(--espaco-3);
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda-2);
    line-height: 1.2;
    color: var(--ep-verde);
}

.admincheckout-endereco-trocar[b-ajjbib7o92] {
    width: 100%;
    box-sizing: border-box;
    height: 40px;
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    cursor: pointer;
}

@media (min-width: 1000px) {
    .admincheckout-endereco-card[b-ajjbib7o92] {
        width: 100%;
        max-width: none;
    }
}

/* ---------- Select estilizado (horário) — mesma receita oficial de campo
   do site (AddressComponent.razor.css), não a pílula com sombra externa
   que o checkout de tela cheia usa (lá o fundo é roxo, aqui é branco). ---------- */
.admincheckout-select-caixa[b-ajjbib7o92] {
    position: relative;
}

.admincheckout-select[b-ajjbib7o92] {
    width: 100%;
    box-sizing: border-box;
    appearance: none;
    -webkit-appearance: none;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-campo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    padding: 14px 44px 14px 22px;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    cursor: pointer;
}

    .admincheckout-select:focus[b-ajjbib7o92] {
        outline: 2px solid var(--ep-verde);
        outline-offset: 2px;
    }

.admincheckout-select-caret[b-ajjbib7o92] {
    position: absolute;
    top: 50%;
    right: 22px;
    transform: translateY(-50%);
    color: var(--ep-roxo-escuro);
    pointer-events: none;
}

/* ---------- Toggle de troco ---------- */
.admincheckout-troco-opcao[b-ajjbib7o92] {
    display: flex;
    align-items: center;
    gap: var(--espaco-2);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
    cursor: pointer;
}

.admincheckout-toggle-input[b-ajjbib7o92] {
    position: absolute;
    opacity: 0;
    width: 0;
    height: 0;
}

.admincheckout-toggle-trilho[b-ajjbib7o92] {
    position: relative;
    flex-shrink: 0;
    display: inline-block;
    width: 40px;
    height: 22px;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-botao);
}

.admincheckout-toggle-bolinha[b-ajjbib7o92] {
    position: absolute;
    top: 1px;
    left: 1px;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background-color: rgba(0, 0, 0, 0.15);
    transition: transform 0.15s ease, background-color 0.15s ease;
}

.admincheckout-toggle-input:checked + .admincheckout-toggle-trilho .admincheckout-toggle-bolinha[b-ajjbib7o92] {
    transform: translateX(18px);
    background-color: var(--ep-verde);
}

.admincheckout-troco-input[b-ajjbib7o92] {
    width: 100%;
    box-sizing: border-box;
    margin-top: var(--espaco-2);
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-campo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    padding: 14px 22px;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

    .admincheckout-troco-input:focus[b-ajjbib7o92] {
        outline: 2px solid var(--ep-verde);
        outline-offset: 2px;
    }

.admincheckout-carregando[b-ajjbib7o92] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

/* ---------- Adicionar/trocar produto ---------- */
.admincheckout-produto-adicionar[b-ajjbib7o92] {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--espaco-2);
    width: 100%;
    height: 40px;
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px dashed var(--ep-roxo);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    cursor: pointer;
}

.admincheckout-picker[b-ajjbib7o92] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
    background-color: var(--ep-lilas-neblina);
    border-radius: var(--canto-card);
    padding: var(--espaco-3);
}

.admincheckout-picker-cabecalho[b-ajjbib7o92] {
    display: flex;
    align-items: center;
    justify-content: space-between;
}

    .admincheckout-picker-cabecalho .admincheckout-secao-titulo[b-ajjbib7o92] {
        border-bottom: none;
        padding-bottom: 0;
    }

.admincheckout-picker-fechar[b-ajjbib7o92] {
    background: none;
    border: none;
    color: var(--ep-roxo-escuro);
    cursor: pointer;
    font-size: var(--legenda);
}

.admincheckout-picker-filtros[b-ajjbib7o92] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--espaco-2);
}

.admincheckout-picker-select[b-ajjbib7o92] {
    flex: 1 1 120px;
    height: 40px;
    box-sizing: border-box;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-campo);
    padding: 0 var(--espaco-2);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo-escuro);
}

    .admincheckout-picker-select:disabled[b-ajjbib7o92] {
        opacity: 0.5;
    }

.admincheckout-picker-busca-caixa[b-ajjbib7o92] {
    position: relative;
    flex: 2 1 160px;
}

    .admincheckout-picker-busca-caixa input[b-ajjbib7o92] {
        width: 100%;
        box-sizing: border-box;
        height: 40px;
        background-color: var(--ep-branco);
        border: 1px solid var(--ep-roxo);
        border-radius: var(--canto-campo);
        padding: 0 var(--espaco-3) 0 36px;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda-2);
        color: var(--ep-roxo-escuro);
    }

    .admincheckout-picker-busca-caixa i[b-ajjbib7o92] {
        position: absolute;
        top: 50%;
        left: 12px;
        transform: translateY(-50%);
        color: var(--ep-roxo-escuro);
        opacity: 0.6;
        pointer-events: none;
    }

.admincheckout-picker-botao-filtrar[b-ajjbib7o92] {
    height: 40px;
    padding: 0 var(--espaco-3);
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
    border: none;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    cursor: pointer;
}

.admincheckout-picker-lista[b-ajjbib7o92] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
    max-height: 220px;
    overflow-y: auto;
}

.admincheckout-picker-item[b-ajjbib7o92] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-2);
    background-color: var(--ep-branco);
    border-radius: var(--canto-m);
    padding: var(--espaco-2);
}

.admincheckout-picker-item-info[b-ajjbib7o92] {
    display: flex;
    flex-direction: column;
    min-width: 0;
}

.admincheckout-picker-item-nome[b-ajjbib7o92] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo-escuro);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.admincheckout-picker-item-sabor[b-ajjbib7o92] {
    font-family: var(--fonte-corpo);
    font-size: 11px;
    color: var(--ds-cinza-50);
}

.admincheckout-picker-item-botao[b-ajjbib7o92] {
    flex-shrink: 0;
    height: 32px;
    padding: 0 var(--espaco-3);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    cursor: pointer;
}

    .admincheckout-picker-item-botao:disabled[b-ajjbib7o92] {
        background-color: var(--ds-cinza-15);
        color: var(--ds-cinza-50);
        cursor: not-allowed;
    }

/* ---------- Salvar ---------- */
.admincheckout-botao-salvar[b-ajjbib7o92] {
    height: 44px;
    width: 100%;
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
}

    .admincheckout-botao-salvar:disabled[b-ajjbib7o92] {
        opacity: 0.6;
        cursor: not-allowed;
    }

/* Aviso de confirmação — mesma casca já usada nas 4 modais de cadastro do
   admin (leva 31, ex.: Category.razor.css); cópia própria, isolamento do
   Blazor não deixa reaproveitar o CSS de lá. */
.confirmar-exclusao-fundo[b-ajjbib7o92] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1060;
    padding: var(--espaco-4);
}

.confirmar-exclusao-caixa[b-ajjbib7o92] {
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-4);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.confirmar-exclusao-icone img[b-ajjbib7o92] {
    width: 144px;
    height: 144px;
    object-fit: contain;
}

.confirmar-exclusao-pergunta[b-ajjbib7o92] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-descricao[b-ajjbib7o92] {
    font-family: var(--fonte-corpo);
    font-weight: 400;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-botoes[b-ajjbib7o92] {
    display: flex;
    gap: var(--espaco-3);
    width: 100%;
    margin-top: var(--espaco-4);
}

.confirmar-exclusao-nao[b-ajjbib7o92],
.confirmar-exclusao-sim[b-ajjbib7o92] {
    flex: 1;
    height: 39px;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    border: none;
    cursor: pointer;
}

.confirmar-exclusao-nao[b-ajjbib7o92] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.confirmar-exclusao-sim[b-ajjbib7o92] {
    background-color: var(--ep-erro-forte);
    color: var(--ep-branco);
}
/* /Components/Pages/Pedidos/Component/PlansComponent.razor.rz.scp.css */
/* Visual novo — modal "Selecionar Plan" (Liberar entrega), leva 38.
   Sem desenho próprio no Figma pra essa modal; segue a mesma linguagem já
   estabelecida no resto do admin (cabeçalho "cadastro-modal-*", tabela
   roxo/branco de /inventory e /manager). */

.plans-modal[b-70xgvaydi1] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    padding: var(--espaco-3);
}

/* Pedido do dono: padding original (--espaco-5) só sobra espaço em
   branco no celular; volta no computador, onde a modal tem mais largura
   pra respirar. Mesmo ponto de corte (1000px) do resto do projeto. */
@media (min-width: 1000px) {
    .plans-modal[b-70xgvaydi1] {
        padding: var(--espaco-5);
    }
}

.plans-titulo[b-70xgvaydi1] {
    font-family: var(--fonte-titulo);
    font-size: var(--subtitulo);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

.plans-vazio[b-70xgvaydi1] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-50);
    text-align: center;
    margin: var(--espaco-4) 0;
}

/* Tabela (computador) escondida por padrão — leva 59, achado testando
   em 375px: 3 colunas não cabem em tela estreita. Mesma receita de
   Category/Orders/Inventory: dois blocos de HTML diferentes, um
   escondido por CSS conforme o breakpoint (não é "tabela responsiva"
   com display:block em tr/td). Volta a aparecer no computador, ver
   media query no fim do arquivo. */
.plans-tabela-wrap[b-70xgvaydi1] {
    display: none;
    overflow-x: auto;
}

.plans-tabela[b-70xgvaydi1] {
    width: 100%;
    border-collapse: collapse;
}

.plans-tabela th[b-70xgvaydi1] {
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    text-align: left;
    padding: var(--espaco-2) var(--espaco-3);
    white-space: nowrap;
}

    .plans-tabela th:first-child[b-70xgvaydi1] {
        border-top-left-radius: var(--canto-m);
        border-bottom-left-radius: var(--canto-m);
    }

    .plans-tabela th:last-child[b-70xgvaydi1] {
        border-top-right-radius: var(--canto-m);
        border-bottom-right-radius: var(--canto-m);
        text-align: right;
    }

.plans-tabela td[b-70xgvaydi1] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo-escuro);
    padding: var(--espaco-2) var(--espaco-3);
    border-bottom: 1px solid var(--ds-cinza-15);
    white-space: nowrap;
}

    .plans-tabela td:last-child[b-70xgvaydi1] {
        text-align: right;
    }

    /* Achado 08/08/2026, testando ao vivo: a célula expandida (o detalhe
       da rota) é sempre a ÚNICA <td> da sua linha (colspan="3"), então
       sempre bate na regra "td:last-child" acima e herdava
       "text-align: right" à toa — causa real do texto/select "pulando"
       de posição. Sobrescreve de volta pra esquerda só nela. */
    .plans-tabela td[colspan="3"][b-70xgvaydi1] {
        text-align: left;
    }

.plans-botao-selecionar[b-70xgvaydi1] {
    height: 32px;
    padding: 0 var(--espaco-3);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    cursor: pointer;
    white-space: nowrap;
}

    .plans-botao-selecionar:disabled[b-70xgvaydi1] {
        cursor: default;
        opacity: 0.6;
    }

/* ---------- Status da rota (leva 56) ---------- */
.plans-status--pendente[b-70xgvaydi1] {
    color: var(--ep-aviso-escuro);
}

.plans-status--distribuida[b-70xgvaydi1] {
    color: var(--ep-sucesso);
}

/* ---------- Detalhe expandido: pedidos da rota, prioridade, ordem
   calculada (leva 56, backlog 5.3) ---------- */
.plans-detalhe[b-70xgvaydi1] {
    padding: var(--espaco-3) 0;
    white-space: normal;
}

.plans-paradas-lista[b-70xgvaydi1] {
    list-style: none;
    margin: 0 0 var(--espaco-3);
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

/* Lado a lado de novo (row) — a causa real da "pulada" era a herança de
   text-align: right do td:last-child (corrigido acima), não o layout
   flex em si. */
.plans-parada[b-70xgvaydi1] {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: var(--espaco-2) var(--espaco-3);
    padding: var(--espaco-2) var(--espaco-3);
    background-color: var(--ep-cinza-100);
    border-radius: var(--canto-m);
}

.plans-parada-info[b-70xgvaydi1] {
    align-items: flex-start;
    display: flex;
    flex-direction: column;
}

.plans-parada-cliente[b-70xgvaydi1] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

.plans-parada-endereco[b-70xgvaydi1] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

/* Select com as 3 opções (Primeiro/Sem preferência/Último), leva 59 —
   mesma receita do "mudarrota-select" já usado em Orders.razor.css,
   só compacto (cabe numa linha de lista, não um formulário inteiro). */
.plans-select-prioridade-caixa[b-70xgvaydi1] {
    position: relative;
}

.plans-select-prioridade[b-70xgvaydi1] {
    appearance: none;
    -webkit-appearance: none;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-botao);
    color: var(--ep-roxo);
    padding: 0 32px 0 var(--espaco-3);
    height: 32px;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    cursor: pointer;
}

    .plans-select-prioridade:disabled[b-70xgvaydi1] {
        cursor: default;
        opacity: 0.6;
    }

    .plans-select-prioridade:focus[b-70xgvaydi1] {
        outline: 2px solid var(--ep-verde);
        outline-offset: 2px;
    }

.plans-select-prioridade-caret[b-70xgvaydi1] {
    position: absolute;
    top: 50%;
    right: var(--espaco-2);
    transform: translateY(-50%);
    color: var(--ep-roxo);
    pointer-events: none;
    font-size: 12px;
}

.plans-rotulo[b-70xgvaydi1] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo-escuro);
    margin: 0 0 var(--espaco-2);
}

.plans-ordem-lista[b-70xgvaydi1] {
    margin: 0 0 var(--espaco-3);
    padding-left: var(--espaco-4);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo-escuro);
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.plans-botoes-revisao[b-70xgvaydi1] {
    display: flex;
    gap: var(--espaco-3);
}

.plans-botao-contorno[b-70xgvaydi1] {
    height: 32px;
    padding: 0 var(--espaco-3);
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    cursor: pointer;
}

    .plans-botao-contorno:disabled[b-70xgvaydi1] {
        cursor: default;
        opacity: 0.6;
    }

/* ---------- Cards (celular) — leva 59. Mesmos tokens já usados nos
   cards mobile de Category/Orders/Inventory, pra bater com o resto do
   admin: fundo branco (não --ep-cinza-100, esse é só o sub-item
   ".plans-parada" dentro do detalhe), borda fina roxa, sombra leve.
   Sem rótulo nenhum nos campos (título/status), mesmo padrão dos
   outros cards do projeto — diferencia por hierarquia visual, não por
   texto "Status:". ---------- */
.plans-cards-mobile[b-70xgvaydi1] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

.plans-item-card[b-70xgvaydi1] {
    background-color: var(--ep-branco);
    border: 0.5px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: 0 4px 7.6px rgba(0, 0, 0, 0.15);
    padding: var(--espaco-3);
}

.plans-item-cabecalho[b-70xgvaydi1] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-3);
    margin-bottom: var(--espaco-3);
}

.plans-item-titulo[b-70xgvaydi1] {
    font-family: var(--fonte-corpo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

.plans-item-status[b-70xgvaydi1] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    white-space: nowrap;
}

/* Detalhe expandido dentro do card — mesmo bloco ".plans-detalhe" da
   tabela, só sem estar dentro de <td>, então sem a herança de
   text-align que existia lá (não precisa da regra colspan aqui). */
.plans-item-card .plans-detalhe[b-70xgvaydi1] {
    margin-top: var(--espaco-3);
}

/* ============================================================================
   COMPUTADOR — volta a ser tabela, esconde os cards.
   ========================================================================== */
@media (min-width: 1000px) {
    .plans-tabela-wrap[b-70xgvaydi1] {
        display: block;
    }

    .plans-cards-mobile[b-70xgvaydi1] {
        display: none;
    }
}
/* /Components/Pages/Pedidos/OrderAdress.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO DA /order/adress — Leva 18, 01/08/2026
   ----------------------------------------------------------------------------
   Fundo roxo sólido na página inteira — sem o "banner roxo + fundo verde"
   que as outras telas redesenhadas usam, confirmado com o dono (intencional
   só nas 3 telas do checkout). Card reaproveita muito da receita visual de
   Address.razor.css (mesma cor de borda, mesmo tratamento do frete), com as
   ações (editar/excluir/selecionar) sempre visíveis — em /address elas só
   aparecem no computador, aqui aparecem nos dois tamanhos (pedido do dono).
   Único breakpoint do site: 1000px.
   ========================================================================== */

.orderadress-pagina[b-adsqwfftms] {
    background-color: var(--ep-roxo);
    min-height: 100vh;
    padding: var(--espaco-4) var(--margem-lateral) var(--espaco-6);

    /* Sobe por baixo da Nav_Bar fixa (backlog 5.8) - mesma tecnica das
       outras telas, aplicada direto aqui porque essa tela nao tem um "hero"
       separado (e tudo roxo solido, uma cor so). */
    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.orderadress-caminho[b-adsqwfftms] {
    display: block;
    text-align: left;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
}

    .orderadress-caminho a[b-adsqwfftms] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .orderadress-caminho a:hover[b-adsqwfftms] {
            text-decoration: underline;
        }

.orderadress-titulo[b-adsqwfftms] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: 28px; /* medido na spec (celular) */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    margin: 0;
}

/* Bloco "< Voltar / título / botão" - primeiro item da grade (ver
   .orderadress-grade), não uma coluna fixa separada. */
.orderadress-intro[b-adsqwfftms] {
    display: flex;
    flex-direction: column;
    gap: inherit; /* pedido do dono - o espaço entre "< Voltar"/título/botão
       acompanha o gap da grade (.orderadress-grade), pra manter o mesmo
       ritmo visual em vez de um valor fixo próprio */
}

.orderadress-conteudo[b-adsqwfftms] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    margin-top: var(--espaco-4);
}

.orderadress-botao-adicionar[b-adsqwfftms] {
    align-self: flex-start;
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    height: 39px;
    padding: 0 var(--espaco-5);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
}

    .orderadress-botao-adicionar:hover[b-adsqwfftms] {
        filter: brightness(0.95);
    }

.orderadress-carregando[b-adsqwfftms] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

.orderadress-vazio[b-adsqwfftms] {
    text-align: center;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-branco);
    padding: var(--espaco-6) 0;
}

/* ---------- Grade de cards ---------- */
.orderadress-grade[b-adsqwfftms] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
}

/* ---------- Card ---------- */
.orderadress-card[b-adsqwfftms] {
    background-color: var(--ep-branco);
    border: 0.5px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-3);
    display: flex;
    flex-direction: column;
    gap: 13px; /* medido na spec */

    /* Leva 21: no computador, dois cards lado a lado com endereço de 1
       linha e de 2 linhas ficavam com alturas diferentes — o grid usa
       "align-items: start" (de propósito, ver comentário na .orderadress-
       grade, não é pra esticar o bloco de título). "align-self" aqui
       estica só os CARDS entre si, sem afetar aquele bloco. */
    align-self: stretch;
}

.orderadress-card-foto[b-adsqwfftms] {
    position: relative;
    width: 100%;
    aspect-ratio: 16 / 9;
    border-radius: 14px; /* medido na spec */
    overflow: hidden;
    background-color: var(--ep-roxo);

    /* O aspect-ratio continua valendo como ALTURA MÍNIMA (protege o
       celular, onde os cards não têm irmão pra esticar contra). No
       computador, se o card ficar mais alto por causa do endereço vizinho
       ter 2 linhas, a foto CRESCE além do aspect-ratio pra preencher o
       espaço sobrando — o texto abaixo não muda de tamanho. */
    flex-grow: 1;
}

/* Sombra interna, mesma receita do Address.razor.css (leva 13c) — faltava
   aqui (achado no teste ao vivo da leva 20a). A <img> do mapa é opaca e
   cobre um "box-shadow: inset" comum, então precisa de um ::after por cima
   (nasce depois da <img> na ordem de pintura). */
.orderadress-card-foto[b-adsqwfftms]::after {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: inherit;
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    pointer-events: none;
}

/* Endereço padrão - mesmo selo de Address.razor.css, pra ficar consistente
   com o resto do site (também é o que faz ele aparecer primeiro na lista). */
.orderadress-card-selo[b-adsqwfftms] {
    position: absolute;
    top: var(--espaco-2);
    left: var(--espaco-2);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    font-family: var(--fonte-corpo);
    font-weight: bold;
    font-size: var(--legenda-2);
    padding: var(--espaco-1) var(--espaco-2);
    border-radius: var(--canto-botao);
}

    .orderadress-card-foto img[b-adsqwfftms] {
        width: 100%;
        height: 100%;
        object-fit: cover;
    }

.orderadress-card-foto-placeholder[b-adsqwfftms] {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
}

    .orderadress-card-foto-placeholder i[b-adsqwfftms] {
        font-size: 40px;
        color: var(--ep-branco);
        opacity: 0.7;
    }

.orderadress-card-rua[b-adsqwfftms] {
    display: flex;
    justify-content: space-between;
    align-items: stretch;
    gap: var(--espaco-3);
}

.orderadress-card-info[b-adsqwfftms] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    min-width: 0;
}

.orderadress-card-rotulo[b-adsqwfftms] {
    font-family: var(--fonte-corpo);
    font-size: 12px; /* medido na spec (celular) */
    color: var(--ep-roxo);
}

.orderadress-card-logradouro[b-adsqwfftms] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: 16px; /* medido na spec (celular) */
    line-height: 1.15;
    color: var(--ep-roxo);
    margin: 0;
}

.orderadress-card-complemento[b-adsqwfftms] {
    font-family: var(--fonte-corpo);
    font-size: 12px; /* medido na spec (celular) */
    color: var(--ep-roxo);
    margin: 0;
}

.orderadress-card-frete[b-adsqwfftms] {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    background-color: var(--ep-roxo);
    border-radius: 14px; /* medido na spec */
    padding: var(--espaco-2) var(--espaco-3);
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: 14px; /* medido na spec (celular) */
    color: var(--ep-verde);
    white-space: nowrap;
}

/* ---------- Ações (editar/excluir/selecionar) ---------- */
/* Sempre visíveis nos dois tamanhos — diferente de /address, onde só
   aparecem no computador (aqui não tem o modal de ação do celular). */
.orderadress-card-acoes[b-adsqwfftms] {
    display: flex;
    align-items: center;
    gap: var(--espaco-3);
}

.orderadress-card-botao-icone[b-adsqwfftms] {
    flex-shrink: 0;
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: 1px solid var(--ep-aviso-escuro);
    border-radius: 50%;
    color: var(--ep-aviso-escuro);
    cursor: pointer;
}

    .orderadress-card-botao-icone--excluir[b-adsqwfftms] {
        border-color: var(--ep-erro);
        color: var(--ep-erro);
    }

.orderadress-card-botao-selecionar[b-adsqwfftms] {
    flex: 1;
    height: 44px;
    background-color: var(--ep-verde); /* verde da marca, nao o verde-sucesso -
       pedido do dono */
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
}

    .orderadress-card-botao-selecionar:hover[b-adsqwfftms] {
        filter: brightness(0.95);
    }

.orderadress-alerta[b-adsqwfftms] {
    margin-top: 0;
}

/* ---------- Modais (mesma receita de Address.razor.css) ---------- */
.orderadress-modal-fundo[b-adsqwfftms] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    padding: var(--espaco-4);
}

.orderadress-modal-caixa[b-adsqwfftms] {
    position: relative;
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.orderadress-modal-icone img[b-adsqwfftms] {
    width: 144px;
    height: 144px;
    object-fit: contain;
}

.orderadress-modal-pergunta[b-adsqwfftms] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: 12px 0 0;
}

.orderadress-modal-descricao[b-adsqwfftms] {
    font-family: var(--fonte-corpo);
    font-weight: 400;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.orderadress-modal-botoes[b-adsqwfftms] {
    display: flex;
    gap: var(--espaco-3);
    width: 100%;
    margin-top: 24px;
}

.orderadress-modal-nao-remover[b-adsqwfftms],
.orderadress-modal-remover[b-adsqwfftms] {
    flex: 1;
    height: 39px;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
}

.orderadress-modal-nao-remover[b-adsqwfftms] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
}

.orderadress-modal-remover[b-adsqwfftms] {
    background: none;
    border: 1px solid var(--ep-erro);
    color: var(--ep-erro);
}

/* ---------- Modal do formulário (Adicionar/Editar) ---------- */
.orderadress-form-modal-caixa[b-adsqwfftms] {
    position: relative;
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
    box-shadow: var(--sombra-card);
    text-align: left;
    max-height: 90vh;
    overflow-y: auto;
    overflow-x: hidden;
}

.orderadress-form-modal-cabecalho[b-adsqwfftms] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-3);
}

.orderadress-form-modal-titulo[b-adsqwfftms] {
    font-family: var(--fonte-titulo);
    font-weight: 400;
    font-size: var(--texto-peq);
    color: var(--ep-roxo);
    margin: 0;
}

.orderadress-form-modal-fechar[b-adsqwfftms] {
    flex-shrink: 0;
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
}

    .orderadress-form-modal-fechar i[b-adsqwfftms] {
        font-size: 16px;
        color: var(--ep-roxo);
    }

.orderadress-form-modal-linha[b-adsqwfftms] {
    height: 0.5px;
    background-color: rgba(0, 0, 0, 0.5);
    margin: 0 0 var(--espaco-4);
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .orderadress-pagina[b-adsqwfftms] {
        padding: var(--espaco-5) var(--margem-lateral-desktop) var(--espaco-6);

        /* Mesma correção da Nav_Bar, mas a fórmula do computador troca o
           "max(16px, env(safe-area-inset-top,...))" (acomoda notch de
           iPhone) por "--espaco-4" fixo — mesma diferença que as outras
           telas já tinham entre celular/computador. Faltou isso na base,
           sobrava uma tira branca de uns 8px atrás da barra no computador. */
        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .orderadress-titulo[b-adsqwfftms] {
        font-size: 44px; /* medido na spec (computador) */
        max-width: 478px;
    }

    .orderadress-conteudo[b-adsqwfftms] {
        width: 1216px;
        max-width: 100%;
        margin: var(--espaco-4) auto 0;
    }

    /* Grade de 2 colunas de verdade — o bloco de texto é só o 1º item dela,
       não uma coluna fixa à parte. Por isso só o 1º card fica ao lado do
       texto; do 2º em diante, os cards ocupam as 2 colunas inteiras.
       "align-items: start" evita que o grid estique o bloco de texto pra
       altura do card ao lado (comportamento padrão do grid). */
    .orderadress-grade[b-adsqwfftms] {
        display: grid;
        grid-template-columns: repeat(2, 1fr);
        align-items: start;
        gap: 72px; /* remedido pelo dono direto no Figma */
        width: 1216px;
        max-width: 100%;
        margin: 0 auto;
    }

    .orderadress-card[b-adsqwfftms] {
        padding: var(--espaco-4);
    }

    .orderadress-card-foto[b-adsqwfftms] {
        aspect-ratio: 1 / .3; /* remedido pelo dono direto no Figma - mais
           baixa/larga que a proporção do celular (16/9) */
    }

    .orderadress-card-logradouro[b-adsqwfftms] {
        font-size: 20px; /* medido na spec (computador) */
    }

    .orderadress-card-rotulo[b-adsqwfftms],
    .orderadress-card-complemento[b-adsqwfftms] {
        font-size: 16px; /* medido na spec (computador) */
    }

    .orderadress-card-frete[b-adsqwfftms] {
        font-size: 28px; /* medido na spec (computador) */
    }

    /* Mesmo valor de Address.razor.css - a caixa de 310px é só pros modais
       pequenos de confirmação, o formulário é mais largo. */
    .orderadress-form-modal-caixa[b-adsqwfftms] {
        width: 552px;
    }
}
/* /Components/Pages/Pedidos/OrderCheckout.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO DA /order/{id} — Leva 20a, 02/08/2026
   ----------------------------------------------------------------------------
   Fundo roxo sólido na página inteira — mesma técnica das levas 18/19. Único
   breakpoint do site: 1000px.

   Técnica de reordenação: no celular é UMA coluna só, na ordem de leitura do
   Figma (produtos antes de endereço, preço antes do botão no fim). No
   computador vira 2 colunas com outra ordem (preço logo depois do título,
   antes dos produtos). Em vez de duplicar o HTML, as 2 "colunas" viram
   `display: contents` no celular (os filhos entram direto na grade única,
   cada um com seu `order`) e voltam a ser colunas de verdade no computador
   (mesma técnica de display:contents já usada no MyOrders.razor, só que
   invertida: lá o wrapper "some" no computador, aqui "some" no celular). */

.ordercheckout-pagina[b-qjri4fcoo6] {
    background-color: var(--ep-roxo);
    min-height: 100vh;
    padding: var(--espaco-4) var(--margem-lateral) var(--espaco-6);

    /* Sobe por baixo da Nav_Bar fixa (backlog 5.8) - mesma fórmula das
       levas 18/19. */
    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.ordercheckout-carregando[b-qjri4fcoo6] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

.ordercheckout-grade[b-qjri4fcoo6] {
    display: grid;
    /* minmax(0, 1fr), não só "1fr": sem o "0" explícito, a coluna herda um
       mínimo automático igual ao maior conteúdo "não-encolhível" de dentro
       (ex.: o texto do painel de preço, num flex com justify-content:
       space-between) — isso estourava a grade inteira pra fora da largura
       da página, comendo a margem direita (achado no teste ao vivo: 40px
       de margem à esquerda, só 12px à direita). */
    grid-template-columns: minmax(0, 1fr);
    gap: 22px;
    width: 310px;
    max-width: 100%;
    margin: 0 auto;
}

.ordercheckout-coluna-esquerda[b-qjri4fcoo6],
.ordercheckout-coluna-direita[b-qjri4fcoo6] {
    display: contents;
}

/* ---------- Ordem de leitura no celular ---------- */
.ordercheckout-intro[b-qjri4fcoo6] { order: 10; }
.ordercheckout-produtos[b-qjri4fcoo6] { order: 20; }
.ordercheckout-endereco[b-qjri4fcoo6] { order: 30; }
.ordercheckout-horario[b-qjri4fcoo6] { order: 40; }
.ordercheckout-forma[b-qjri4fcoo6] { order: 50; }
.ordercheckout-cupom[b-qjri4fcoo6] { order: 52; }
.ordercheckout-alerta-horario[b-qjri4fcoo6] { order: 55; }
.ordercheckout-preco[b-qjri4fcoo6] { order: 60; }
.ordercheckout-botao-finalizar[b-qjri4fcoo6] { order: 70; }

.ordercheckout-intro[b-qjri4fcoo6] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

.ordercheckout-caminho[b-qjri4fcoo6] {
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
}

    .ordercheckout-caminho a[b-qjri4fcoo6] {
        color: var(--ep-branco);
        text-decoration: none;
        cursor: pointer;
    }

        .ordercheckout-caminho a:hover[b-qjri4fcoo6] {
            text-decoration: underline;
        }

.ordercheckout-titulo[b-qjri4fcoo6] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-5); /* 28px celular */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    margin: 0;
}

.ordercheckout-secao-titulo[b-qjri4fcoo6] {
    font-family: var(--fonte-corpo);
    font-weight: 400;
    font-size: var(--texto-peq); /* 16px celular */
    color: var(--ep-branco);
    margin: 0 0 var(--espaco-2);
    padding-bottom: var(--espaco-2);
    border-bottom: 1px solid var(--ep-branco);
}

.ordercheckout-secao-descricao[b-qjri4fcoo6] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-branco);
    margin: 0 0 var(--espaco-2);
}

/* ---------- Painel de preço ---------- */
.ordercheckout-preco[b-qjri4fcoo6] {
    display: flex;
    flex-direction: column;
    gap: 3px;
}

.ordercheckout-preco-linha[b-qjri4fcoo6] {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    padding: var(--espaco-2) 0;
    border-bottom: 1px solid var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-branco);
}

.ordercheckout-preco-total span:last-child[b-qjri4fcoo6] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-5);
}

/* ---------- Produtos ---------- */
.ordercheckout-produtos[b-qjri4fcoo6] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

/* Mesmo desenho do card de produto do carrinho lateral (CartComponent.razor)
   — pedido do dono depois do teste ao vivo. CSS duplicado (não dá pra
   reaproveitar o .razor.css de lá, isolamento do Blazor), mas a estrutura é
   idêntica: foto | info (nome+sabor em cima, preço embaixo, "esticado" pela
   altura toda) | ações (X em cima, -/num/+ embaixo, também esticado). No
   computador (ver media query) as mesmas colunas viram linha, com "Preço:"
   separado e o X virando círculo vermelho (Figma DESKTOP). */
.ordercheckout-produto-card[b-qjri4fcoo6] {
    display: flex;
    align-items: center;
    gap: 12px;
    width: 100%;
    box-sizing: border-box;
    padding: 8px 12px 8px 8px;
    border-radius: var(--canto-card);
    border: 0.5px solid var(--ep-roxo);
    box-shadow: var(--sombra-card);
    background-color: var(--ep-branco);
}

.ordercheckout-produto-foto[b-qjri4fcoo6] {
    flex-shrink: 0;
    width: 70px;
    height: 77px;
    box-sizing: border-box;
    padding: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 14px;
    background-color: var(--ep-roxo);
}

.ordercheckout-produto-foto-img[b-qjri4fcoo6] {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.ordercheckout-produto-info[b-qjri4fcoo6] {
    flex: 1;
    min-width: 0;
    align-self: stretch;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.ordercheckout-produto-nome[b-qjri4fcoo6] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.ordercheckout-produto-titulo[b-qjri4fcoo6] {
    margin: 0;
    font-family: var(--fonte-corpo);
    font-size: 14px;
    font-weight: normal;
    line-height: var(--entrelinha);
    color: var(--ep-roxo);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.ordercheckout-produto-sabor[b-qjri4fcoo6] {
    margin: 0;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    line-height: var(--entrelinha);
    color: var(--ep-roxo);
    opacity: 0.55;
}

.ordercheckout-produto-preco[b-qjri4fcoo6] {
    margin: 0;
    font-family: var(--fonte-corpo);
    font-size: 14px;
    font-weight: bold;
    color: var(--ep-roxo);
}

/* Só aparece no computador — no celular o valor já basta (ver media query). */
.ordercheckout-produto-preco-rotulo[b-qjri4fcoo6] {
    display: none;
}

.ordercheckout-produto-acoes[b-qjri4fcoo6] {
    flex-shrink: 0;
    align-self: stretch;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    justify-content: space-between;
}

.ordercheckout-produto-excluir[b-qjri4fcoo6] {
    display: flex;
    align-items: flex-start;
    justify-content: flex-end;
    padding: 2px;
    width: 32px;
    height: 32px;
    background: none;
    border: none;
    color: var(--ep-roxo-escuro);
    font-size: 12px;
    cursor: pointer;
}

.ordercheckout-produto-stepper[b-qjri4fcoo6] {
    display: flex;
    align-items: center;
    gap: 8px;
}

.ordercheckout-qtd-botao[b-qjri4fcoo6] {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 19px;
    height: 19px;
    border-radius: 50%;
    background: none;
    border: none;
    padding: 0;
    font-size: 10px;
    cursor: pointer;
}

    .ordercheckout-qtd-botao:disabled[b-qjri4fcoo6] {
        opacity: 0.4;
        cursor: not-allowed;
    }

.ordercheckout-qtd-menos[b-qjri4fcoo6] {
    border: 1px solid var(--ep-roxo);
    color: var(--ep-roxo);
}

.ordercheckout-qtd-mais[b-qjri4fcoo6] {
    position: relative;
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
}

.ordercheckout-qtd-menos[b-qjri4fcoo6]::before {
    content: "";
    width: 9px;
    height: 1.5px;
    background-color: currentColor;
}

.ordercheckout-qtd-mais[b-qjri4fcoo6]::before,
.ordercheckout-qtd-mais[b-qjri4fcoo6]::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    background-color: currentColor;
    transform: translate(-50%, -50%);
}

.ordercheckout-qtd-mais[b-qjri4fcoo6]::before {
    width: 9px;
    height: 1.5px;
}

.ordercheckout-qtd-mais[b-qjri4fcoo6]::after {
    width: 1.5px;
    height: 9px;
}

.ordercheckout-qtd-valor[b-qjri4fcoo6] {
    display: flex;
    align-items: center;
    justify-content: center;
    min-width: 16px;
    height: 19px;
    font-size: 20px;
    line-height: 1;
    color: var(--ep-roxo);
}

/* ---------- Endereço ---------- */
.ordercheckout-endereco-card[b-qjri4fcoo6] {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-2);
}

.ordercheckout-endereco-foto[b-qjri4fcoo6] {
    position: relative;
    width: 100%;
    aspect-ratio: 310 / 130;
    border-radius: 14px;
    overflow: hidden;
    background-color: var(--ep-cinza-200);
}

/* Sombra interna, mesma receita do Address.razor.css (leva 13c) — a <img>
   do mapa é opaca e cobre um "box-shadow: inset" comum, então precisa de um
   ::after por cima (nasce depois da <img> na ordem de pintura). A
   /order/adress também estava sem essa sombra (achado no teste ao vivo desta
   leva) — corrigida separadamente lá. */
.ordercheckout-endereco-foto[b-qjri4fcoo6]::after {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: inherit;
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    pointer-events: none;
}

    .ordercheckout-endereco-foto img[b-qjri4fcoo6] {
        width: 100%;
        height: 100%;
        object-fit: cover;
    }

.ordercheckout-endereco-foto-placeholder[b-qjri4fcoo6] {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--ep-roxo);
    font-size: 32px;
}

.ordercheckout-endereco-info[b-qjri4fcoo6] {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: var(--espaco-2);
}

.ordercheckout-endereco-texto[b-qjri4fcoo6] {
    display: flex;
    flex-direction: column;
}

.ordercheckout-endereco-titulo[b-qjri4fcoo6] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo);
}

.ordercheckout-endereco-logradouro[b-qjri4fcoo6] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: 0;
}

.ordercheckout-endereco-complemento[b-qjri4fcoo6] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo);
    margin: 0;
}

.ordercheckout-endereco-frete[b-qjri4fcoo6] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    background-color: var(--ep-roxo);
    border-radius: 14px;
    padding: var(--espaco-2);
    color: var(--ep-verde);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    white-space: nowrap;
}

    .ordercheckout-endereco-frete span:last-child[b-qjri4fcoo6] {
        font-family: var(--fonte-titulo);
        font-weight: bold;
        font-size: var(--legenda);
    }

/* Bolinha de editar + "Trocar endereço" — nos dois tamanhos agora (pedido
   do dono: antes só existia no computador). */
.ordercheckout-endereco-acoes[b-qjri4fcoo6] {
    display: flex;
    align-items: center;
    gap: var(--espaco-2);
    width: 100%;
}

/* Mesmo desenho do botão de editar da /address (vazado, contorno amarelo
   escuro) — pedido do dono pra reaproveitar o mesmo padrão visual. */
.ordercheckout-endereco-editar[b-qjri4fcoo6] {
    flex-shrink: 0;
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: 1px solid var(--ep-aviso-escuro);
    border-radius: 50%;
    color: var(--ep-aviso-escuro);
    cursor: pointer;
}

/* "Selecionar" virou "Trocar endereço", cor verde — pedido do dono, mesmo
   padrão do botão "Finalizar pedido" desta tela. Altura fixa em 44px (não
   padding) pra bater com a bolinha de editar ao lado — mesma combinação já
   usada em orderadress-card-botao-selecionar (OrderAdress.razor.css): com
   padding em vez de altura fixa, esse botão renderizava ~34px (8px+8px de
   --espaco-2 + ~17,5px de linha do texto), visivelmente mais baixo que a
   bolinha de 44px ao lado. */
.ordercheckout-endereco-selecionar[b-qjri4fcoo6] {
    flex: 1;
    height: 44px;
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
}

/* ---------- Horário / Forma de pagamento (selects estilizados) ---------- */
.ordercheckout-select-caixa[b-qjri4fcoo6] {
    position: relative;
}

.ordercheckout-select[b-qjri4fcoo6] {
    width: 100%;
    appearance: none;
    background-color: var(--ep-branco);
    border: none;
    border-radius: var(--canto-botao);
    box-shadow: var(--sombra-card);
    padding: 14px 44px 14px 22px;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    cursor: pointer;
}

.ordercheckout-select-caret[b-qjri4fcoo6] {
    position: absolute;
    top: 50%;
    right: 22px;
    transform: translateY(-50%);
    color: var(--ep-roxo-escuro);
    pointer-events: none;
}

.ordercheckout-troco-opcao[b-qjri4fcoo6] {
    display: flex;
    align-items: center;
    gap: var(--espaco-2);
    margin-top: 22px;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-branco);
    cursor: pointer;
}

/* Toggle de "Precisa de troco?" — checkbox nativo escondido, desenho todo em
   CSS: trilho branco (mesmo estado ligado/desligado, só a bolinha muda),
   bolinha cinza 15% preto quando desligado, verde quando ligado. */
.ordercheckout-toggle-input[b-qjri4fcoo6] {
    position: absolute;
    opacity: 0;
    width: 0;
    height: 0;
}

.ordercheckout-toggle-trilho[b-qjri4fcoo6] {
    position: relative;
    flex-shrink: 0;
    display: inline-block;
    width: 40px;
    height: 22px;
    background-color: var(--ep-branco);
    border-radius: var(--canto-botao);
    box-shadow: var(--sombra-card);
}

.ordercheckout-toggle-bolinha[b-qjri4fcoo6] {
    position: absolute;
    top: 2px;
    left: 2px;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background-color: rgba(0, 0, 0, 0.15);
    transition: transform 0.15s ease, background-color 0.15s ease;
}

.ordercheckout-toggle-input:checked + .ordercheckout-toggle-trilho .ordercheckout-toggle-bolinha[b-qjri4fcoo6] {
    transform: translateX(18px);
    background-color: var(--ep-verde);
}

.ordercheckout-troco-input[b-qjri4fcoo6] {
    width: 100%;
    margin-top: var(--espaco-4);
    background-color: var(--ep-branco);
    border: none;
    border-radius: var(--canto-campo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    padding: 14px 22px 14px 22px;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

/* Feedback em tempo real quando o troco digitado é menor que o total (ou não
   é um número válido) — outline em vez de border, pra não empurrar o layout
   (o campo não tem border-box definido). Pedido do dono: descobrir isso só
   depois de clicar Finalizar (e ainda por cima depois do modal de "entrega
   amanhã") gerava fricção à toa. */
.ordercheckout-troco-input--invalido[b-qjri4fcoo6] {
    outline: 1.5px solid var(--ep-erro-forte);
}

/* ---------- Cupom de desconto (leva 20b) ---------- */
/* Mesma pílula/sombra do .ordercheckout-select, com um círculo de rádio à
   direita em vez do caret — só aparece quando elegível (CupomElegivel). */
.ordercheckout-cupom-caixa[b-qjri4fcoo6] {
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-2);
    background-color: var(--ep-branco);
    border: none;
    border-radius: var(--canto-botao);
    box-shadow: var(--sombra-card);
    padding: 14px 22px;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    cursor: pointer;
}

.ordercheckout-cupom-radio[b-qjri4fcoo6] {
    flex-shrink: 0;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    border: 2px solid var(--ep-roxo-escuro);
    box-sizing: border-box;
}

    /* Ativado (isUtilizarCupons true) — círculo preenchido de verde. */
    .ordercheckout-cupom-caixa--ativo .ordercheckout-cupom-radio[b-qjri4fcoo6] {
        border-color: var(--ep-verde);
        background-color: var(--ep-verde);
    }

/* ---------- Botão Finalizar ---------- */
.ordercheckout-botao-finalizar[b-qjri4fcoo6] {
    width: 100%;
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    padding: var(--espaco-2) var(--espaco-4);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
}

    /* Desabilitado enquanto o troco não estiver certo (TrocoBloqueiaFinalizar)
       — opacidade reduzida + cursor de bloqueio, pra ficar claro que o clique
       não vai fazer nada. */
    .ordercheckout-botao-finalizar:disabled[b-qjri4fcoo6] {
        opacity: 0.5;
        cursor: not-allowed;
    }

.ordercheckout-alerta[b-qjri4fcoo6] {
    width: 310px;
    max-width: 100%;
    margin: var(--espaco-3) auto 0;
}

/* ============================================================================
   Modal de aviso ao excluir produto (backlog 3.1)
   ----------------------------------------------------------------------------
   Mesma casca do modal de excluir endereço (Address.razor, CARD_GRANDE) —
   CSS próprio porque o isolamento do Blazor não deixa reaproveitar o
   .razor.css de lá. Botão "Continuar" preenchido em vermelho (diferente do
   outline usado em Address.razor) — cor/rótulo exatos do Figma desta tela.
   ========================================================================== */
.ordercheckout-modal-fundo[b-qjri4fcoo6] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    padding: var(--espaco-4);
}

.ordercheckout-modal-caixa[b-qjri4fcoo6] {
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-4);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.ordercheckout-modal-icone img[b-qjri4fcoo6] {
    width: 144px;
    height: 144px;
    object-fit: contain;
}

/* Ilustração do modal de "entrega amanhã" não é quadrada (144×114 no
   Figma) — diferente do ICON_Warning.png dos outros modais. */
.ordercheckout-modal-icone--entrega img[b-qjri4fcoo6] {
    width: 144px;
    height: 114px;
}

.ordercheckout-modal-pergunta[b-qjri4fcoo6] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.ordercheckout-modal-descricao[b-qjri4fcoo6] {
    font-family: var(--fonte-corpo);
    font-weight: 400;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.ordercheckout-modal-botoes[b-qjri4fcoo6] {
    display: flex;
    gap: var(--espaco-3);
    width: 100%;
    margin-top: var(--espaco-4);
}

.ordercheckout-modal-nao-remover[b-qjri4fcoo6],
.ordercheckout-modal-continuar[b-qjri4fcoo6] {
    flex: 1;
    height: 39px;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    border: none;
    cursor: pointer;
}

.ordercheckout-modal-nao-remover[b-qjri4fcoo6] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.ordercheckout-modal-continuar[b-qjri4fcoo6] {
    background-color: var(--ep-erro-forte);
    color: var(--ep-branco);
}

/* Botões do modal de "entrega amanhã" — cores próprias do Figma desta tela
   (Cancelar contorno vermelho, Confirmar preenchido verde), diferentes do
   modal de excluir produto acima. */
.ordercheckout-modal-cancelar[b-qjri4fcoo6],
.ordercheckout-modal-confirmar[b-qjri4fcoo6] {
    flex: 1;
    height: 39px;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
}

.ordercheckout-modal-cancelar[b-qjri4fcoo6] {
    background: none;
    border: 1px solid var(--ep-erro-forte);
    color: var(--ep-erro-forte);
}

.ordercheckout-modal-confirmar[b-qjri4fcoo6] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
}

/* ============================================================================
   Modais de confirmação pós-pedido (leva 20c, backlog 3.3)
   ----------------------------------------------------------------------------
   Mesma casca dos modais acima (fundo/caixa/ícone/pergunta/descrição), só um
   botão em vez de dois — e o Confirmado ganha uma tabela de resumo do pedido.
   ========================================================================== */
.ordercheckout-modal-botao-unico[b-qjri4fcoo6] {
    width: 100%;
    height: 44px;
    margin-top: var(--espaco-2);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
}

    /* Modal do Pix pendente — "Redirecionando..." não é clicável de
       propósito (o navegador troca de página sozinho, ver FinalizarPedido()). */
    .ordercheckout-modal-botao-unico:disabled[b-qjri4fcoo6] {
        cursor: default;
        opacity: 0.85;
    }

.ordercheckout-modal-tabela[b-qjri4fcoo6] {
    width: 100%;
    display: flex;
    flex-direction: column;
    margin-top: var(--espaco-2);
}

.ordercheckout-modal-tabela-linha[b-qjri4fcoo6] {
    display: flex;
    justify-content: space-between;
    gap: var(--espaco-2);
    padding: var(--espaco-2) 0;
    border-bottom: 1px solid var(--ep-roxo);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo);
}

    .ordercheckout-modal-tabela-linha span:last-child[b-qjri4fcoo6] {
        font-weight: bold;
    }

/* ============================================================================
   Modal de editar endereço (bolinha ao lado de "Trocar endereço")
   ----------------------------------------------------------------------------
   Mesma casca do modal de formulário da /address (Address.razor.css) — CSS
   próprio porque o isolamento do Blazor não deixa reaproveitar o de lá. Só
   existe no computador, junto com a bolinha que o abre.
   ========================================================================== */
.ordercheckout-editar-modal-fundo[b-qjri4fcoo6] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    padding: var(--espaco-4);
}

.ordercheckout-editar-modal-caixa[b-qjri4fcoo6] {
    position: relative;
    width: 552px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-4);
    text-align: left;
    max-height: 90vh;
    overflow-y: auto;
    overflow-x: hidden;
}

.ordercheckout-editar-modal-cabecalho[b-qjri4fcoo6] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-3);
}

.ordercheckout-editar-modal-titulo[b-qjri4fcoo6] {
    font-family: var(--fonte-titulo);
    font-weight: 400;
    font-size: var(--texto-peq);
    color: var(--ep-roxo);
    margin: 0;
}

.ordercheckout-editar-modal-fechar[b-qjri4fcoo6] {
    flex-shrink: 0;
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
}

    .ordercheckout-editar-modal-fechar i[b-qjri4fcoo6] {
        font-size: 16px;
        color: var(--ep-roxo);
    }

.ordercheckout-editar-modal-linha[b-qjri4fcoo6] {
    height: 0.5px;
    background-color: rgba(0, 0, 0, 0.5);
    margin: 0 0 var(--espaco-4);
}

/* ============================================================================
   Modal de trocar endereço (Opção A, pedido do dono) — lista dos endereços
   já cadastrados, sem navegar pra fora do checkout. Mesma casca do modal de
   editar acima, largura própria porque o conteúdo é uma lista, não um
   formulário.
   ========================================================================== */
.ordercheckout-trocar-modal-fundo[b-qjri4fcoo6] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    padding: var(--espaco-4);
}

.ordercheckout-trocar-modal-caixa[b-qjri4fcoo6] {
    position: relative;
    width: 552px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-4);
    text-align: left;
    max-height: 90vh;
    overflow-y: auto;
    overflow-x: hidden;
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

.ordercheckout-trocar-modal-cabecalho[b-qjri4fcoo6] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-3);
}

.ordercheckout-trocar-modal-titulo[b-qjri4fcoo6] {
    font-family: var(--fonte-titulo);
    font-weight: 400;
    font-size: var(--texto-peq);
    color: var(--ep-roxo);
    margin: 0;
}

.ordercheckout-trocar-modal-fechar[b-qjri4fcoo6] {
    flex-shrink: 0;
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
}

    .ordercheckout-trocar-modal-fechar i[b-qjri4fcoo6] {
        font-size: 16px;
        color: var(--ep-roxo);
    }

.ordercheckout-trocar-modal-linha[b-qjri4fcoo6] {
    height: 0.5px;
    background-color: rgba(0, 0, 0, 0.5);
    margin: calc(-1 * var(--espaco-1)) 0 0;
}

.ordercheckout-trocar-modal-adicionar[b-qjri4fcoo6] {
    width: 100%;
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    padding: var(--espaco-2) var(--espaco-4);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
}

/* Só aparece com mais de 5 endereços (ver @if no .razor) — mesma pílula do
   campo de troco desta tela (box-shadow inset), com o ícone de lupa por
   cima, técnica igual ao caret dos selects. */
.ordercheckout-trocar-modal-busca[b-qjri4fcoo6] {
    position: relative;
}

    .ordercheckout-trocar-modal-busca input[b-qjri4fcoo6] {
        width: 100%;
        box-sizing: border-box;
        background-color: var(--ep-branco);
        border: none;
        border-radius: var(--canto-campo);
        box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
        padding: 14px 22px 14px 44px;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        color: var(--ep-roxo-escuro);
    }

    .ordercheckout-trocar-modal-busca i[b-qjri4fcoo6] {
        position: absolute;
        top: 50%;
        left: 16px;
        transform: translateY(-50%);
        color: var(--ep-roxo-escuro);
        opacity: 0.6;
        pointer-events: none;
    }

.ordercheckout-trocar-modal-lista[b-qjri4fcoo6] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

/* Cada endereço é um <button> inteiro clicável, não só um "Selecionar" —
   escolha mais direta numa lista (diferente do card grande do checkout,
   que tem várias ações misturadas). */
.ordercheckout-trocar-modal-card[b-qjri4fcoo6] {
    position: relative;
    display: flex;
    align-items: center;
    gap: var(--espaco-3);
    width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    padding: var(--espaco-2);
    font-family: inherit;
    text-align: left;
    cursor: pointer;
}

    .ordercheckout-trocar-modal-card:hover[b-qjri4fcoo6] {
        filter: brightness(0.97);
    }

    /* Endereço já selecionado no checkout — contorno verde pra diferenciar
       dos demais na lista. */
    .ordercheckout-trocar-modal-card--atual[b-qjri4fcoo6] {
        border-color: var(--ep-verde);
        border-width: 2px;
    }

.ordercheckout-trocar-modal-card-foto[b-qjri4fcoo6] {
    position: relative;
    flex-shrink: 0;
    width: 72px;
    height: 60px;
    border-radius: 10px;
    overflow: hidden;
    background-color: var(--ep-cinza-200);
}

    .ordercheckout-trocar-modal-card-foto img[b-qjri4fcoo6] {
        width: 100%;
        height: 100%;
        object-fit: cover;
    }

.ordercheckout-trocar-modal-card-foto-placeholder[b-qjri4fcoo6] {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--ep-roxo);
    font-size: 20px;
}

.ordercheckout-trocar-modal-selo[b-qjri4fcoo6] {
    position: absolute;
    top: 4px;
    left: 4px;
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    font-family: var(--fonte-corpo);
    font-weight: bold;
    font-size: 10px;
    padding: 2px 6px;
    border-radius: var(--canto-botao);
}

.ordercheckout-trocar-modal-card-info[b-qjri4fcoo6] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}

.ordercheckout-trocar-modal-card-rotulo[b-qjri4fcoo6] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo);
}

.ordercheckout-trocar-modal-card-logradouro[b-qjri4fcoo6] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: 0;
    /* Quebra linha em vez de cortar com "..." — pedido do dono pro celular,
       onde o card é mais estreito e nomes de rua compridos não cabem numa
       linha só. */
    white-space: normal;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .ordercheckout-pagina[b-qjri4fcoo6] {
        padding: var(--espaco-5) var(--margem-lateral-desktop) var(--espaco-6);
        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    /* Volta a ser 2 colunas de verdade (FRAME TOTAL do Figma: ESQUERDA 576px +
       DIREITA 496px, gap 80px) — a ordem dentro de cada uma já é a ordem do
       Figma no computador, por isso o "order" do celular é zerado aqui. */
    .ordercheckout-grade[b-qjri4fcoo6] {
        display: flex;
        align-items: flex-start;
        gap: 80px;
        width: 1216px;
        max-width: 100%;
        margin: 0 auto;
    }

    .ordercheckout-coluna-esquerda[b-qjri4fcoo6],
    .ordercheckout-coluna-direita[b-qjri4fcoo6] {
        display: flex;
        flex-direction: column;
    }

    .ordercheckout-coluna-esquerda[b-qjri4fcoo6] {
        width: 576px;
        gap: var(--espaco-5);
    }

    .ordercheckout-coluna-direita[b-qjri4fcoo6] {
        width: 496px;
        gap: var(--espaco-4);
    }

    .ordercheckout-intro[b-qjri4fcoo6],
    .ordercheckout-produtos[b-qjri4fcoo6],
    .ordercheckout-endereco[b-qjri4fcoo6],
    .ordercheckout-horario[b-qjri4fcoo6],
    .ordercheckout-forma[b-qjri4fcoo6],
    .ordercheckout-cupom[b-qjri4fcoo6],
    .ordercheckout-alerta-horario[b-qjri4fcoo6],
    .ordercheckout-preco[b-qjri4fcoo6],
    .ordercheckout-botao-finalizar[b-qjri4fcoo6] {
        order: unset;
    }

    .ordercheckout-titulo[b-qjri4fcoo6] {
        font-size: var(--titulo-3); /* 44px computador */
    }

    .ordercheckout-secao-titulo[b-qjri4fcoo6] {
        font-size: var(--subtitulo); /* 22px computador */
    }

    .ordercheckout-secao-descricao[b-qjri4fcoo6] {
        font-size: var(--legenda);
    }

    .ordercheckout-preco-linha[b-qjri4fcoo6],
    .ordercheckout-preco-total span:last-child[b-qjri4fcoo6] {
        font-size: var(--legenda);
    }

    .ordercheckout-preco-total span:last-child[b-qjri4fcoo6] {
        font-size: var(--titulo-5);
    }

    /* Card de produto em linha, com "Preço:" separado (ver Figma DESKTOP) e
       o X de excluir como círculo vermelho de verdade, ao lado da
       quantidade (mesma estrutura foto|info|ações do celular, só que as
       colunas internas viram linha em vez de empilhadas). */
    .ordercheckout-produto-card[b-qjri4fcoo6] {
        gap: 16px;
        padding: var(--espaco-1) var(--espaco-4) var(--espaco-1) var(--espaco-1);
    }

    .ordercheckout-produto-info[b-qjri4fcoo6] {
        /* Antes era flex: 1 (herdado do celular) — ocupava todo o espaço
           sobrando e empurrava nome/preço pra longe da foto. Aqui vira
           tamanho natural, pra foto+texto ficarem colados como um bloco só
           (ver "produto-acoes" abaixo, que empurra as ações pro canto
           oposto com margin-left: auto). */
        flex: 0 1 auto;
        flex-direction: row;
        align-items: center;
        gap: var(--espaco-4);
    }

    .ordercheckout-produto-nome[b-qjri4fcoo6] {
        /* Mesmo motivo do "produto-info": tamanho do próprio conteúdo, não
           esticado, pra "Preço:" ficar coladinho no nome/sabor. */
        flex: 0 1 auto;
    }

    .ordercheckout-produto-titulo[b-qjri4fcoo6] {
        font-size: var(--legenda);
    }

    .ordercheckout-produto-preco[b-qjri4fcoo6] {
        display: flex;
        flex-direction: column;
        gap: 4px;
        font-size: var(--legenda);
    }

    .ordercheckout-produto-preco-rotulo[b-qjri4fcoo6] {
        display: block;
        font-family: var(--fonte-corpo);
        font-weight: 400;
        font-size: var(--legenda-2);
        color: var(--ep-roxo);
    }

    .ordercheckout-produto-acoes[b-qjri4fcoo6] {
        /* Empurra o bloco de ações pro canto direito do card, absorvendo
           sozinho o espaço que sobrou de foto+texto não serem mais flex: 1
           — é isso que cria o "space between" combinado (dois grupos, não
           três). */
        margin-left: auto;
        flex-direction: row;
        align-items: center;
        gap: var(--espaco-3);
    }

    /* No celular o X vem primeiro no HTML (fica em cima, ordem natural da
       coluna) — no computador precisa ficar do lado DIREITO do seletor de
       quantidade, então troca só a ordem visual aqui (order), sem duplicar
       o HTML. */
    .ordercheckout-produto-stepper[b-qjri4fcoo6] {
        order: 1;
    }

    .ordercheckout-produto-excluir[b-qjri4fcoo6] {
        order: 2;
        width: 24px;
        height: 24px;
        border-radius: 50%;
        align-items: center;
        justify-content: center;
        background-color: var(--ep-erro-forte);
        color: var(--ep-branco);
        padding: 0;
    }

    /* Endereço: mapa/info lado a lado + botão "Trocar endereço" embaixo,
       ocupando as duas colunas.

       Grid em vez de flex-wrap — já tentamos duas vezes com flex-wrap (foto
       encolhendo até sumir com texto grande, depois foto isolada numa linha
       própria sem nenhuma referência de altura pra "stretchar") e os dois
       bugs vêm da mesma raiz: com flex-wrap, é o NAVEGADOR quem decide,
       sozinho, quando foto e texto quebram linha, dependendo do tamanho do
       conteúdo — e a foto fica sem altura confiável sempre que acaba isolada.
       Grid fixa a estrutura (2 colunas, 2 linhas) sem essa ambiguidade: foto
       e texto NUNCA saem da mesma linha do grid, não importa o tamanho do
       conteúdo — só a altura da linha muda. */
    .ordercheckout-endereco-card[b-qjri4fcoo6] {
        display: grid;
        grid-template-columns: minmax(116px, 1fr) auto;
        align-items: stretch;
    }

    .ordercheckout-endereco-foto[b-qjri4fcoo6] {
        grid-column: 1;
        grid-row: 1;
        aspect-ratio: auto;
    }

        /* A <img> sai do fluxo normal (absolute) — sem isso, o navegador não
           tem altura definida pra resolver o "height: 100%" dela e cai pro
           tamanho NATURAL do arquivo do mapa baixado da Azure Maps (varia de
           endereço pra endereço, achado no print do dono: alguns mapas
           ficavam enormes, "empurrando" o card inteiro). Assim a foto nunca
           dita a altura de nada — só acompanha a altura da linha do grid,
           que quem define é o texto ao lado (.endereco-info). */
        .ordercheckout-endereco-foto img[b-qjri4fcoo6],
        .ordercheckout-endereco-foto-placeholder[b-qjri4fcoo6] {
            position: absolute;
            inset: 0;
        }

    .ordercheckout-endereco-info[b-qjri4fcoo6] {
        grid-column: 2;
        grid-row: 1;
        align-items: center;
    }

    /* Caixa do frete acompanha a altura da linha, texto centralizado
       verticalmente mas continua alinhado à esquerda (align-items:
       flex-start já vem da regra base). Pedido do dono ao ver o card com a
       foto mais estreita. */
    .ordercheckout-endereco-frete[b-qjri4fcoo6] {
        align-self: stretch;
        justify-content: center;
    }

    .ordercheckout-endereco-acoes[b-qjri4fcoo6] {
        grid-column: 1 / -1;
        grid-row: 2;
    }

}
/* /Components/Pages/Pedidos/OrderPayment.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO DA /order/payment — Leva 19, 01/08/2026
   ----------------------------------------------------------------------------
   Fundo roxo sólido na página inteira — mesma técnica da /order/adress (leva
   18), sem o "banner roxo + fundo verde" do resto do site. Único breakpoint
   do site: 1000px.
   ========================================================================== */

.orderpayment-pagina[b-mtejt2bwld] {
    background-color: var(--ep-roxo);
    min-height: 100vh;
    padding: var(--espaco-4) var(--margem-lateral) var(--espaco-6);

    /* Sobe por baixo da Nav_Bar fixa (backlog 5.8) - mesma fórmula da
       /order/adress. */
    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

/* Mobile: uma coluna só, na ordem de leitura do Figma (< Voltar/título,
   cards, preço) — o mesmo gap de 22px que separa título/cards/preço lá
   (Frame 16, itemSpacing 22). No computador vira grade (ver media query). */
.orderpayment-conteudo[b-mtejt2bwld] {
    display: flex;
    flex-direction: column;
    gap: 22px;
    width: 310px;
    max-width: 100%;
    margin: 0 auto;
}

.orderpayment-intro[b-mtejt2bwld] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2); /* medido na spec (desktop, Frame 20) */
}

.orderpayment-caminho[b-mtejt2bwld] {
    display: block;
    text-align: left;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
}

    .orderpayment-caminho a[b-mtejt2bwld] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .orderpayment-caminho a:hover[b-mtejt2bwld] {
            text-decoration: underline;
        }

.orderpayment-titulo[b-mtejt2bwld] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-5); /* 28px celular */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    margin: 0;
}

/* ---------- Grade de cards de pagamento ---------- */
/* 2 colunas no celular (2x2, mesmo gap 22px entre linhas e colunas que o
   Figma usa nas duas BOTOES), 1 linha de 4 no computador (ver media query). */
.orderpayment-cards[b-mtejt2bwld] {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 22px;
}

.orderpayment-card[b-mtejt2bwld] {
    position: relative;
    background-color: var(--ep-branco);
    border: 0.5px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-3);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 13px; /* medido na spec */
    cursor: pointer;
    transition: transform 0.15s ease;
}

    .orderpayment-card:hover[b-mtejt2bwld] {
        filter: brightness(0.98);
        transform: scale(1.05);
        z-index: 1; /* fica por cima dos vizinhos da grade ao crescer */
    }

.orderpayment-card-icone[b-mtejt2bwld] {
    max-width: 80px;
    max-height: 68px;
    width: auto;
    height: auto;
    object-fit: contain;
}

.orderpayment-card-label[b-mtejt2bwld] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda); /* 14px */
    color: var(--ep-roxo);
    text-align: center;
    line-height: var(--entrelinha);
}

/* Celular: só "Crédito"/"Débito" (sem "Cartão de") — pedido do dono.
   Computador: nome completo (ver media query). */
.orderpayment-card-label-desktop[b-mtejt2bwld] {
    display: none;
}

/* Selo de desconto no card Dinheiro (Configuracao.DescontoDinheiro) — círculo
   no celular, pílula "X% OFF" no computador (mesmo padrão responsivo da
   etiqueta de promoção do /product/buy). Verde da marca, não o Verde Sucesso
   que a spec media — pedido do dono no teste ao vivo, pra bater com o resto
   do site. */
.orderpayment-selo[b-mtejt2bwld] {
    position: absolute;
    /* Leva 21: por dentro do card agora, mesmo padrão do .models-desconto
       (/models) — antes ficava com offset negativo, meio pra fora do
       card, igual à etiqueta antiga de /models/sale (leva 21 também
       corrigiu essa). No celular mais perto do canto (--espaco-2); no
       computador --espaco-3, ver media query. */
    top: var(--espaco-2);
    left: var(--espaco-2);
    z-index: 2;
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    font-family: var(--fonte-corpo);
    font-weight: bold;
    font-size: var(--legenda); /* 14px */
}

.orderpayment-selo-mobile[b-mtejt2bwld] {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 11px; /* encolhido pra caber "-N%" dentro do círculo de 40px */
}

.orderpayment-selo-desktop[b-mtejt2bwld] {
    display: none;
}

/* ---------- Painel de preço ---------- */
.orderpayment-preco[b-mtejt2bwld] {
    display: flex;
    flex-direction: column;
    gap: 3px; /* medido na spec */
}

/* As 3 linhas (Valor de produtos/Frete/Total) têm a mesma divisória branca
   embaixo na spec (inclusive a do Total) — mesmo padrão de "lista de
   recibo" usado no resto do checkout. */
.orderpayment-preco-linha[b-mtejt2bwld] {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    padding: var(--espaco-2) 0;
    border-bottom: 1px solid var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-branco);
}

/* Só o VALOR do total ("280,00") muda de fonte/tamanho — o rótulo "Total da
   compra:" continua igual às outras linhas (fonte-corpo, 14px). */
.orderpayment-preco-total span:last-child[b-mtejt2bwld] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-5); /* 28px, igual ao valor "280,00" da spec */
}

.orderpayment-alerta[b-mtejt2bwld] {
    width: 310px;
    max-width: 100%;
    margin: var(--espaco-3) auto 0;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .orderpayment-pagina[b-mtejt2bwld] {
        padding: var(--espaco-5) var(--margem-lateral-desktop) var(--espaco-6);
        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    /* Grade: intro (< Voltar/título) e o painel de preço lado a lado em
       cima, a linha de 4 cards embaixo ocupando a largura toda — mesma
       disposição do Figma (Frame 21 = intro+preço, BOTOES = cards),
       resolvida com grid-template-areas em vez de reordenar o HTML. */
    .orderpayment-conteudo[b-mtejt2bwld] {
        display: grid;
        grid-template-columns: 1fr 1fr;
        grid-template-areas:
            "intro preco"
            "cards cards";
        column-gap: 131px; /* medido na spec (Frame 21) */
        row-gap: 80px; /* medido na spec (Frame 18) */
        width: 1216px;
        max-width: 100%;
        margin: 0 auto;
    }

    .orderpayment-intro[b-mtejt2bwld] {
        grid-area: intro;
    }

    .orderpayment-titulo[b-mtejt2bwld] {
        font-size: var(--titulo-3); /* 44px computador */
    }

    .orderpayment-preco[b-mtejt2bwld] {
        grid-area: preco;
        align-self: end; /* base do painel alinhada com a base do título, como na spec */
    }

    .orderpayment-cards[b-mtejt2bwld] {
        grid-area: cards;
        grid-template-columns: repeat(4, 1fr);
    }

    .orderpayment-card-icone[b-mtejt2bwld] {
        max-width: 160px;
        max-height: 160px;
    }

    .orderpayment-card-label-mobile[b-mtejt2bwld] {
        display: none;
    }

    .orderpayment-card-label-desktop[b-mtejt2bwld] {
        display: inline;
    }

    .orderpayment-selo[b-mtejt2bwld] {
        top: var(--espaco-3);
        left: var(--espaco-3);
    }

    .orderpayment-selo-mobile[b-mtejt2bwld] {
        display: none;
    }

    .orderpayment-selo-desktop[b-mtejt2bwld] {
        display: flex;
        align-items: center;
        justify-content: center;
        border-radius: var(--canto-botao);
        padding: var(--espaco-2) var(--espaco-3);
        white-space: nowrap;
    }

    /* "280,00" continua 28px no computador (medido na spec) — só o título
       da página e o painel de preço mudam de posição, não de tamanho. */
}
/* /Components/Pages/Pedidos/Orders.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO — /orders (leva 36, backlog 4.1 — Entrega), a partir do
   sub-frame "Entregas" do grupo Figma "REDESIGN — Entrega (Orders +
   OrdersFinish + BuyOutApp + Frete)". Mesma casca de /inventory — ver
   ai/DESIGN_SYSTEM.md, "Banner do título". Único breakpoint: 1000px.

   Cabeçalho da tabela roxo cheio + texto branco peso normal — mesmo
   padrão já usado em /inventory e /manager/category (o Figma deste frame
   específico desenhava lilás claro + negrito; ajustado a pedido do dono
   pra seguir o padrão já estabelecido no resto do admin, sem negrito).
   ========================================================================== */

.orders-pagina[b-x1u20cmsf9] {
    background-color: var(--ep-cinza-100);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.orders-hero[b-x1u20cmsf9] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-5);

    display: flex;
    flex-direction: column;
    align-items: center;

    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.orders-caminho[b-x1u20cmsf9] {
    display: block;
    align-self: flex-start;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    margin-bottom: var(--espaco-2);
    padding-left: var(--espaco-4);
}

    .orders-caminho a[b-x1u20cmsf9] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .orders-caminho a:hover[b-x1u20cmsf9] {
            text-decoration: underline;
        }

.orders-titulo[b-x1u20cmsf9] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-5);
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0;
}

/* ---------- Card branco de conteúdo ---------- */
.orders-card[b-x1u20cmsf9] {
    background-color: var(--ep-branco);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
}

/* ---------- Busca (mesmo padrão de /inventory) ---------- */
.orders-filtros[b-x1u20cmsf9] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--espaco-2);
    margin-bottom: var(--espaco-4);
}

.orders-busca-caixa[b-x1u20cmsf9] {
    position: relative;
    width: 100%;
    flex: 1 1 160px;
}

    .orders-busca-caixa input[b-x1u20cmsf9] {
        width: 100%;
        box-sizing: border-box;
        background-color: var(--ep-branco);
        border: 1px solid var(--ds-cinza-15);
        border-radius: var(--canto-campo);
        padding: 14px 22px 14px 44px;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        color: var(--ep-roxo-escuro);
    }

        .orders-busca-caixa input:focus[b-x1u20cmsf9] {
            outline: none;
            border-color: var(--ep-roxo);
        }

    .orders-busca-caixa i[b-x1u20cmsf9] {
        position: absolute;
        top: 50%;
        left: 16px;
        transform: translateY(-50%);
        color: var(--ep-roxo-escuro);
        opacity: 0.6;
        pointer-events: none;
    }

/* ---------- Tabela (computador) ---------- */
.orders-tabela-wrap[b-x1u20cmsf9] {
    display: none;
    overflow-x: auto;
}

.orders-tabela[b-x1u20cmsf9] {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
}

    .orders-tabela thead[b-x1u20cmsf9] {
        background-color: var(--ep-roxo);
    }

    .orders-tabela th[b-x1u20cmsf9] {
        text-align: left;
        font-weight: normal;
        color: var(--ep-branco);
        padding: var(--espaco-2) var(--espaco-3);
        white-space: nowrap;
    }

        .orders-tabela th:first-child[b-x1u20cmsf9] {
            border-radius: var(--canto-botao) 0 0 var(--canto-botao);
        }

        .orders-th-ordenavel[b-x1u20cmsf9] {
            cursor: pointer;
            user-select: none;
        }

            .orders-th-ordenavel i[b-x1u20cmsf9] {
                margin-left: var(--espaco-1);
                font-size: 0.85em;
            }

            .orders-th-ordenavel:hover[b-x1u20cmsf9] {
                color: var(--ep-verde);
            }

        .orders-tabela th:last-child[b-x1u20cmsf9] {
            border-radius: 0 var(--canto-botao) var(--canto-botao) 0;
            text-align: right;
        }

    /* Coluna Itens mais estreita — pedido do dono, pra sobrar espaço pra
       coluna de Ações (até 6 ícones condicionais numa linha só). */
    .orders-th-itens[b-x1u20cmsf9] {
        width: 70px;
    }

    .orders-tabela td[b-x1u20cmsf9] {
        padding: var(--espaco-2) var(--espaco-3);
        border-top: 1px solid var(--ds-cinza-15);
        color: var(--ds-cinza-75);
    }

    .orders-tabela tbody tr:first-child td[b-x1u20cmsf9] {
        border-top: none;
    }

/* Alinhamento da coluna Ações (até 6 ícones condicionais por linha, mesmo
   problema do /manager/model com 5) — mesma receita: uma caixa de largura
   FIXA (6 ícones de 36px + 5 vãos de --espaco-2 = 256px) colada na borda
   direita da célula, igual nos dois lados (cabeçalho e ícones), pra que a
   palavra "Ações" nasça exatamente em cima do primeiro ícone. */
.orders-acoes-titulo[b-x1u20cmsf9] {
    display: inline-block;
    width: 256px;
    text-align: left;
}

.orders-tabela .orders-acoes[b-x1u20cmsf9] {
    width: 256px;
    margin-left: auto;
    justify-content: flex-start;
}

/* ---------- Cartões (celular) — no lugar da tabela ---------- */
.orders-cards-mobile[b-x1u20cmsf9] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

.orders-item-card[b-x1u20cmsf9] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
    background-color: var(--ep-branco);
    border: 0.5px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: 0 4px 7.6px rgba(0, 0, 0, 0.15);
    padding: var(--espaco-3);
}

.orders-item-rota[b-x1u20cmsf9] {
    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

.orders-item-cliente[b-x1u20cmsf9] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
}

.orders-item-itens[b-x1u20cmsf9] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.orders-item-detalhe[b-x1u20cmsf9] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

.orders-item-total[b-x1u20cmsf9] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

/* ---------- Selo de status ---------- */
.orders-status[b-x1u20cmsf9] {
    display: inline-block;
    /* Sem isso, o selo "esticava" e completava a largura toda do cartão
       no celular — filho de um flex-column herda align-items:stretch do
       pai (.orders-item-card) por padrão, mesmo sendo inline-block. */
    align-self: flex-start;
    padding: var(--espaco-1) var(--espaco-2);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: var(--legenda-2);
    white-space: nowrap;
}

.orders-status--aviso[b-x1u20cmsf9] {
    background-color: var(--ep-aviso-claro);
    color: var(--ep-aviso-escuro);
}

.orders-status--sucesso[b-x1u20cmsf9] {
    background-color: var(--ep-sucesso-claro);
    color: var(--ep-sucesso);
}

.orders-status--roxo[b-x1u20cmsf9] {
    background-color: var(--ep-lilas-claro);
    color: var(--ep-roxo-escuro);
}

/* "Liberado para entrega" (leva 39) — primeiro uso de azul como selo de
   status no site, pra não repetir a cor de nenhum dos outros 4. */
.orders-status--azul[b-x1u20cmsf9] {
    background-color: var(--ep-azul-claro);
    color: var(--ep-azul-medio);
}

.orders-status--erro[b-x1u20cmsf9] {
    background-color: var(--ep-erro-claro);
    color: var(--ep-erro-forte);
}

/* ---------- Ícones de ação ----------
   "Ver detalhes" e "Excluir" usam as 2 cores que o Figma desenha; os
   outros (sem desenho aqui) seguem o mesmo padrão de círculo colorido já
   usado no resto do admin. 32px no celular, 36px no computador. */
.orders-acoes[b-x1u20cmsf9] {
    display: flex;
    gap: var(--espaco-2);
    flex-wrap: wrap;
    justify-content: flex-end;
}

.orders-item-card .orders-acoes[b-x1u20cmsf9] {
    justify-content: space-between;
}

.orders-icone[b-x1u20cmsf9] {
    width: 32px;
    height: 32px;
    flex-shrink: 0;
    border: none;
    border-radius: var(--canto-redondo);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--ep-branco);
    cursor: pointer;
    text-decoration: none;
    font-size: 14px;
}

.orders-icone--ver[b-x1u20cmsf9] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.orders-icone--sucesso[b-x1u20cmsf9] {
    background-color: var(--ep-sucesso);
}

.orders-icone--aviso[b-x1u20cmsf9] {
    background-color: var(--ep-aviso);
    color: var(--ep-preto);
}

.orders-icone--whatsapp[b-x1u20cmsf9] {
    background-color: #25d366;
}

.orders-icone--excluir[b-x1u20cmsf9] {
    background-color: var(--ep-erro-forte);
}

.orders-icone--roxo[b-x1u20cmsf9] {
    background-color: var(--ep-roxo);
}

/* Imprimir não funciona bem no celular (pedido do dono) — some só do
   cartão; continua no ícone da tabela do computador. */
.orders-item-card .orders-icone--roxo[b-x1u20cmsf9] {
    display: none;
}

/* ---------- Paginação e ações de rodapé ---------- */
.orders-paginacao[b-x1u20cmsf9] {
    display: flex;
    gap: var(--espaco-3);
    margin-top: var(--espaco-4);
}

/* No celular os botões completam a largura do cartão, empilhados, texto
   centralizado — mesmo padrão já usado em outros botões do site (ex.:
   "Subir"/"Desfazer" em /estoque/massa). No computador voltam a abraçar
   o próprio texto, lado a lado (ver media query no fim do arquivo). */
.orders-rodape-acoes[b-x1u20cmsf9] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
    margin-top: var(--espaco-4);
}

.orders-botao[b-x1u20cmsf9] {
    height: 44px;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    box-sizing: border-box;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--espaco-2);
    text-align: center;
    text-decoration: none;
    cursor: pointer;
    border: none;
    white-space: nowrap;
}

    .orders-botao:disabled[b-x1u20cmsf9] {
        opacity: .6;
        cursor: not-allowed;
    }

/* Só os 3 botões do rodapé (Criar Rotas/Liberar/Imprimir) completam a
   largura no celular — os de paginação (Anterior/Próximo) continuam lado
   a lado, sem isso. */
.orders-rodape-acoes .orders-botao[b-x1u20cmsf9] {
    width: 100%;
}

.orders-botao--verde[b-x1u20cmsf9] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

/* Botão "Filtrar" da busca — mesma receita de /inventory. */
.orders-botao--roxo[b-x1u20cmsf9] {
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
}

/* "Liberar" — pedido do dono: roxo cheio + texto verde, pra diferenciar
   claramente de "Criar Rotas" (verde cheio) quando for clicar depressa —
   3 tratamentos de botão diferentes no rodapé (verde/roxo+verde/contorno). */
.orders-botao--roxo-verde[b-x1u20cmsf9] {
    background-color: var(--ep-roxo);
    color: var(--ep-verde);
}

.orders-botao--contorno[b-x1u20cmsf9] {
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px solid var(--ep-roxo);
}

/* ---------- Estados vazio / carregando ---------- */
.orders-vazio[b-x1u20cmsf9] {
    text-align: center;
    padding: var(--espaco-6) 0;
}

    .orders-vazio i[b-x1u20cmsf9] {
        font-size: 48px;
        color: var(--ep-roxo);
    }

    .orders-vazio h3[b-x1u20cmsf9] {
        color: var(--ep-verde-escuro);
        margin-top: var(--espaco-3);
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        font-weight: normal;
    }

.orders-carregando[b-x1u20cmsf9] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .orders-pagina[b-x1u20cmsf9] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .orders-hero[b-x1u20cmsf9] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: var(--espaco-5);
        margin-bottom: var(--espaco-9);

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .orders-titulo[b-x1u20cmsf9] {
        font-size: var(--titulo-3);
    }

    .orders-caminho[b-x1u20cmsf9] {
        padding-left: var(--espaco-5);
    }

    .orders-card[b-x1u20cmsf9] {
        padding: var(--espaco-5);
    }

    .orders-tabela-wrap[b-x1u20cmsf9] {
        display: block;
    }

    .orders-cards-mobile[b-x1u20cmsf9] {
        display: none;
    }

    .orders-icone[b-x1u20cmsf9] {
        width: 36px;
        height: 36px;
    }

    .orders-rodape-acoes[b-x1u20cmsf9] {
        flex-direction: row;
        flex-wrap: wrap;
    }

    .orders-paginacao .orders-botao[b-x1u20cmsf9],
    .orders-rodape-acoes .orders-botao[b-x1u20cmsf9] {
        width: auto;
    }
}

/* ---------- Confirmação de Excluir/Finalizar (leva 38) — mesma casca
   "confirmar-exclusao-*" já usada nas 4 modais de cadastro do admin (leva
   31, ex.: CategoryComponent.razor.css) e no checkout do admin
   (OrderComponent.razor.css). Cópia própria, isolamento do Blazor não deixa
   reaproveitar CSS entre arquivos. ---------- */
.confirmar-exclusao-fundo[b-x1u20cmsf9] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1060;
    padding: var(--espaco-4);
}

.confirmar-exclusao-caixa[b-x1u20cmsf9] {
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-4);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.confirmar-exclusao-icone img[b-x1u20cmsf9] {
    width: 144px;
    height: 144px;
    object-fit: contain;
}

.confirmar-exclusao-pergunta[b-x1u20cmsf9] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-descricao[b-x1u20cmsf9] {
    font-family: var(--fonte-corpo);
    font-weight: 400;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-botoes[b-x1u20cmsf9] {
    display: flex;
    gap: var(--espaco-3);
    width: 100%;
    margin-top: var(--espaco-4);
}

.confirmar-exclusao-nao[b-x1u20cmsf9],
.confirmar-exclusao-sim[b-x1u20cmsf9] {
    flex: 1;
    height: 39px;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    border: none;
    cursor: pointer;
}

.confirmar-exclusao-nao[b-x1u20cmsf9] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.confirmar-exclusao-sim[b-x1u20cmsf9] {
    background-color: var(--ep-erro-forte);
    color: var(--ep-branco);
}

/* ---------- "Mudar rota do pedido" (leva 38) — cabeçalho e divisor
   reaproveitam as mesmas classes "cadastro-modal-*" das 4 modais de
   cadastro do admin (leva 31, ex.: CategoryComponent.razor.css); cópia
   própria, isolamento do Blazor. Sem "cadastro-modal-input" aqui porque o
   campo é um <select>, não texto — usa a receita "select com seta" já
   estabelecida (ex.: AddressComponent.razor.css/OrderComponent.razor.css). ---------- */
.cadastro-modal[b-x1u20cmsf9] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    padding: var(--espaco-5);
}

.cadastro-modal-cabecalho[b-x1u20cmsf9] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.cadastro-modal-titulo[b-x1u20cmsf9] {
    font-family: var(--fonte-titulo);
    font-size: var(--subtitulo);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

.cadastro-modal-descricao[b-x1u20cmsf9] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-50);
}

.cadastro-modal-divisor[b-x1u20cmsf9] {
    height: 0.5px;
    background-color: rgba(0, 0, 0, 0.25);
}

.mudarrota-select-caixa[b-x1u20cmsf9] {
    position: relative;
}

.mudarrota-select[b-x1u20cmsf9] {
    width: 100%;
    box-sizing: border-box;
    appearance: none;
    -webkit-appearance: none;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-campo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    padding: 14px 44px 14px 22px;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    cursor: pointer;
}

    .mudarrota-select:focus[b-x1u20cmsf9] {
        outline: 2px solid var(--ep-verde);
        outline-offset: 2px;
    }

.mudarrota-select-caret[b-x1u20cmsf9] {
    position: absolute;
    top: 50%;
    right: 22px;
    transform: translateY(-50%);
    color: var(--ep-roxo-escuro);
    pointer-events: none;
}

.mudarrota-botoes[b-x1u20cmsf9] {
    display: flex;
    gap: var(--espaco-3);
}

.mudarrota-cancelar[b-x1u20cmsf9],
.mudarrota-confirmar[b-x1u20cmsf9] {
    flex: 1;
    height: 44px;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
}

.mudarrota-cancelar[b-x1u20cmsf9] {
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo-escuro);
    color: var(--ep-roxo-escuro);
}

.mudarrota-confirmar[b-x1u20cmsf9] {
    background-color: var(--ep-verde);
    border: none;
    color: var(--ep-roxo-escuro);
}

    .mudarrota-confirmar:disabled[b-x1u20cmsf9] {
        opacity: 0.6;
        cursor: not-allowed;
    }
/* /Components/Pages/Pedidos/OrdersFinish.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO — /orders/finish (leva 38, backlog 4.1 — fecha a Entrega),
   mesma casca de Orders.razor (leva 36): banner roxo sangrando + card
   branco + tabela (computador) / cartões (celular). Único breakpoint:
   1000px. Cópia própria das regras (isolamento do Blazor não deixa
   reaproveitar CSS entre arquivos, mesmo com os nomes de classe iguais).
   ========================================================================== */

.ordersfinish-pagina[b-1xjvhf7r5o] {
    background-color: var(--ep-cinza-100);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.ordersfinish-hero[b-1xjvhf7r5o] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-5);

    display: flex;
    flex-direction: column;
    align-items: center;

    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.ordersfinish-caminho[b-1xjvhf7r5o] {
    display: block;
    align-self: flex-start;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    margin-bottom: var(--espaco-2);
    padding-left: var(--espaco-4);
}

    .ordersfinish-caminho a[b-1xjvhf7r5o] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .ordersfinish-caminho a:hover[b-1xjvhf7r5o] {
            text-decoration: underline;
        }

.ordersfinish-titulo[b-1xjvhf7r5o] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-5);
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0;
}

/* ---------- Card branco de conteúdo ---------- */
.ordersfinish-card[b-1xjvhf7r5o] {
    background-color: var(--ep-branco);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
}

/* ---------- Busca + filtro de data (mesmo padrão de Orders.razor) ---------- */
.ordersfinish-filtros[b-1xjvhf7r5o] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--espaco-2);
    margin-bottom: var(--espaco-4);
}

.ordersfinish-busca-caixa[b-1xjvhf7r5o] {
    position: relative;
    width: 100%;
    flex: 1 1 160px;
}

    .ordersfinish-busca-caixa input[b-1xjvhf7r5o] {
        width: 100%;
        box-sizing: border-box;
        background-color: var(--ep-branco);
        border: 1px solid var(--ds-cinza-15);
        border-radius: var(--canto-campo);
        padding: 14px 22px 14px 44px;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        color: var(--ep-roxo-escuro);
    }

        .ordersfinish-busca-caixa input:focus[b-1xjvhf7r5o] {
            outline: none;
            border-color: var(--ep-roxo);
        }

    .ordersfinish-busca-caixa i[b-1xjvhf7r5o] {
        position: absolute;
        top: 50%;
        left: 16px;
        transform: translateY(-50%);
        color: var(--ep-roxo-escuro);
        opacity: 0.6;
        pointer-events: none;
    }

/* Campo de data — sem desenho no Figma pra este filtro (novo, pedido do
   dono); segue a mesma altura/borda do campo de busca ao lado, pra ficar
   no mesmo peso visual dentro da linha de filtros. */
.ordersfinish-data-input[b-1xjvhf7r5o] {
    box-sizing: border-box;
    height: 44px;
    flex: 1 1 160px;
    background-color: var(--ep-branco);
    border: 1px solid var(--ds-cinza-15);
    border-radius: var(--canto-campo);
    padding: 0 var(--espaco-3);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

    .ordersfinish-data-input:focus[b-1xjvhf7r5o] {
        outline: none;
        border-color: var(--ep-roxo);
    }

/* Contagem de pedidos do dia (pedido do dono) — mesmo tamanho de corpo
   (--legenda) do resto da tela; alinhado à esquerda com o texto "Rota de
   Entrega" da tabela (mesmo --espaco-3 de recuo que o "th" usa por
   dentro). */
.ordersfinish-contagem[b-1xjvhf7r5o] {
    display: block;
    padding-left: var(--espaco-3);
    margin-bottom: var(--espaco-4);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: 400;
    color: var(--ep-roxo-escuro);
    opacity: 0.6;
}

/* ---------- Tabela (computador) ---------- */
.ordersfinish-tabela-wrap[b-1xjvhf7r5o] {
    display: none;
    overflow-x: auto;
}

.ordersfinish-tabela[b-1xjvhf7r5o] {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
}

    .ordersfinish-tabela thead[b-1xjvhf7r5o] {
        background-color: var(--ep-roxo);
    }

    .ordersfinish-tabela th[b-1xjvhf7r5o] {
        text-align: left;
        font-weight: normal;
        color: var(--ep-branco);
        padding: var(--espaco-2) var(--espaco-3);
        white-space: nowrap;
    }

        .ordersfinish-tabela th:first-child[b-1xjvhf7r5o] {
            border-radius: var(--canto-botao) 0 0 var(--canto-botao);
        }

        .ordersfinish-tabela th:last-child[b-1xjvhf7r5o] {
            border-radius: 0 var(--canto-botao) var(--canto-botao) 0;
            text-align: right;
        }

    .ordersfinish-th-itens[b-1xjvhf7r5o] {
        width: 70px;
    }

    .ordersfinish-tabela td[b-1xjvhf7r5o] {
        padding: var(--espaco-2) var(--espaco-3);
        border-top: 1px solid var(--ds-cinza-15);
        color: var(--ds-cinza-75);
    }

    .ordersfinish-tabela tbody tr:first-child td[b-1xjvhf7r5o] {
        border-top: none;
    }

/* Alinhamento da coluna Ações (até 3 ícones condicionais por linha) —
   mesma receita de Orders.razor: caixa de largura FIXA (3 ícones de 36px +
   2 vãos de --espaco-2 = 124px) colada na borda direita da célula, igual
   nos dois lados (cabeçalho e ícones). */
.ordersfinish-acoes-titulo[b-1xjvhf7r5o] {
    display: inline-block;
    width: 124px;
    text-align: left;
}

.ordersfinish-tabela .ordersfinish-acoes[b-1xjvhf7r5o] {
    width: 124px;
    margin-left: auto;
    justify-content: flex-start;
}

/* ---------- Cartões (celular) — no lugar da tabela ---------- */
.ordersfinish-cards-mobile[b-1xjvhf7r5o] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

.ordersfinish-item-card[b-1xjvhf7r5o] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
    background-color: var(--ep-branco);
    border: 0.5px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: 0 4px 7.6px rgba(0, 0, 0, 0.15);
    padding: var(--espaco-3);
}

.ordersfinish-item-rota[b-1xjvhf7r5o] {
    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

.ordersfinish-item-cliente[b-1xjvhf7r5o] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
}

.ordersfinish-item-detalhe[b-1xjvhf7r5o] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

.ordersfinish-item-total[b-1xjvhf7r5o] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

/* ---------- Selo de status ---------- */
.ordersfinish-status[b-1xjvhf7r5o] {
    display: inline-block;
    /* Sem isso, o selo "esticava" e completava a largura toda do cartão
       no celular — filho de um flex-column herda align-items:stretch do
       pai por padrão, mesmo sendo inline-block (mesmo achado de
       Orders.razor.css). */
    align-self: flex-start;
    padding: var(--espaco-1) var(--espaco-2);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: var(--legenda-2);
    white-space: nowrap;
}

.ordersfinish-status--aviso[b-1xjvhf7r5o] {
    background-color: var(--ep-aviso-claro);
    color: var(--ep-aviso-escuro);
}

.ordersfinish-status--sucesso[b-1xjvhf7r5o] {
    background-color: var(--ep-sucesso-claro);
    color: var(--ep-sucesso);
}

.ordersfinish-status--roxo[b-1xjvhf7r5o] {
    background-color: var(--ep-lilas-claro);
    color: var(--ep-roxo-escuro);
}

.ordersfinish-status--erro[b-1xjvhf7r5o] {
    background-color: var(--ep-erro-claro);
    color: var(--ep-erro-forte);
}

/* ---------- Ícones de ação ----------
   Mesmas cores de Orders.razor pra cada ação equivalente (Mudar rota /
   Imprimir / abrir o checkout) — 32px no celular, 36px no computador. */
.ordersfinish-acoes[b-1xjvhf7r5o] {
    display: flex;
    gap: var(--espaco-2);
    flex-wrap: wrap;
    justify-content: flex-end;
}

.ordersfinish-item-card .ordersfinish-acoes[b-1xjvhf7r5o] {
    justify-content: space-between;
}

.ordersfinish-icone[b-1xjvhf7r5o] {
    width: 32px;
    height: 32px;
    flex-shrink: 0;
    border: none;
    border-radius: var(--canto-redondo);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--ep-branco);
    cursor: pointer;
    text-decoration: none;
    font-size: 14px;
}

.ordersfinish-icone--ver[b-1xjvhf7r5o] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.ordersfinish-icone--aviso[b-1xjvhf7r5o] {
    background-color: var(--ep-aviso);
    color: var(--ep-preto);
}

.ordersfinish-icone--roxo[b-1xjvhf7r5o] {
    background-color: var(--ep-roxo);
}

/* Imprimir não funciona bem no celular (mesmo achado de Orders.razor) —
   some só do cartão; continua no ícone da tabela do computador. */
.ordersfinish-item-card .ordersfinish-icone--roxo[b-1xjvhf7r5o] {
    display: none;
}

/* ---------- Paginação e ações de rodapé ---------- */
.ordersfinish-paginacao[b-1xjvhf7r5o] {
    display: flex;
    gap: var(--espaco-3);
    margin-top: var(--espaco-4);
}

.ordersfinish-rodape-acoes[b-1xjvhf7r5o] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
    margin-top: var(--espaco-4);
}

.ordersfinish-botao[b-1xjvhf7r5o] {
    height: 44px;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    box-sizing: border-box;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--espaco-2);
    text-align: center;
    text-decoration: none;
    cursor: pointer;
    border: none;
    white-space: nowrap;
}

.ordersfinish-rodape-acoes .ordersfinish-botao[b-1xjvhf7r5o] {
    width: 100%;
}

.ordersfinish-botao--verde[b-1xjvhf7r5o] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.ordersfinish-botao--roxo[b-1xjvhf7r5o] {
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
}

.ordersfinish-botao--contorno[b-1xjvhf7r5o] {
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px solid var(--ep-roxo);
}

/* ---------- Estados vazio / carregando ---------- */
.ordersfinish-vazio[b-1xjvhf7r5o] {
    text-align: center;
    padding: var(--espaco-6) 0;
}

    .ordersfinish-vazio i[b-1xjvhf7r5o] {
        font-size: 48px;
        color: var(--ep-roxo);
    }

    .ordersfinish-vazio h3[b-1xjvhf7r5o] {
        color: var(--ep-verde-escuro);
        margin-top: var(--espaco-3);
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        font-weight: normal;
    }

.ordersfinish-carregando[b-1xjvhf7r5o] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .ordersfinish-pagina[b-1xjvhf7r5o] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .ordersfinish-hero[b-1xjvhf7r5o] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: var(--espaco-5);
        margin-bottom: var(--espaco-9);

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .ordersfinish-titulo[b-1xjvhf7r5o] {
        font-size: var(--titulo-3);
    }

    .ordersfinish-caminho[b-1xjvhf7r5o] {
        padding-left: var(--espaco-5);
    }

    .ordersfinish-card[b-1xjvhf7r5o] {
        padding: var(--espaco-5);
    }

    .ordersfinish-busca-caixa[b-1xjvhf7r5o],
    .ordersfinish-data-input[b-1xjvhf7r5o] {
        flex: 1 1 200px;
    }

    .ordersfinish-tabela-wrap[b-1xjvhf7r5o] {
        display: block;
    }

    .ordersfinish-cards-mobile[b-1xjvhf7r5o] {
        display: none;
    }

    .ordersfinish-icone[b-1xjvhf7r5o] {
        width: 36px;
        height: 36px;
    }

    .ordersfinish-rodape-acoes[b-1xjvhf7r5o] {
        flex-direction: row;
        flex-wrap: wrap;
    }

    .ordersfinish-paginacao .ordersfinish-botao[b-1xjvhf7r5o],
    .ordersfinish-rodape-acoes .ordersfinish-botao[b-1xjvhf7r5o] {
        width: auto;
    }
}

/* ---------- "Mudar rota do pedido" (leva 38) — mesma receita de
   Orders.razor.css (cópia própria, isolamento do Blazor). Cabeçalho/
   divisor reaproveitam as classes "cadastro-modal-*" das 4 modais de
   cadastro do admin (leva 31). ---------- */
.cadastro-modal[b-1xjvhf7r5o] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    padding: var(--espaco-5);
}

.cadastro-modal-cabecalho[b-1xjvhf7r5o] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.cadastro-modal-titulo[b-1xjvhf7r5o] {
    font-family: var(--fonte-titulo);
    font-size: var(--subtitulo);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

.cadastro-modal-descricao[b-1xjvhf7r5o] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-50);
}

.cadastro-modal-divisor[b-1xjvhf7r5o] {
    height: 0.5px;
    background-color: rgba(0, 0, 0, 0.25);
}

/* Aviso do reagendamento (só existe aqui, não em Orders.razor) — mesma
   receita do "admincheckout-aviso-leitura" (OrderComponent.razor.css). */
.mudarrota-aviso[b-1xjvhf7r5o] {
    display: flex;
    align-items: center;
    gap: var(--espaco-2);
    margin: 0;
    padding: var(--espaco-2) var(--espaco-3);
    background-color: var(--ep-lilas-claro);
    color: var(--ep-roxo-escuro);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
}

.mudarrota-select-caixa[b-1xjvhf7r5o] {
    position: relative;
}

.mudarrota-select[b-1xjvhf7r5o] {
    width: 100%;
    box-sizing: border-box;
    appearance: none;
    -webkit-appearance: none;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-campo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    padding: 14px 44px 14px 22px;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    cursor: pointer;
}

    .mudarrota-select:focus[b-1xjvhf7r5o] {
        outline: 2px solid var(--ep-verde);
        outline-offset: 2px;
    }

.mudarrota-select-caret[b-1xjvhf7r5o] {
    position: absolute;
    top: 50%;
    right: 22px;
    transform: translateY(-50%);
    color: var(--ep-roxo-escuro);
    pointer-events: none;
}

.mudarrota-botoes[b-1xjvhf7r5o] {
    display: flex;
    gap: var(--espaco-3);
}

.mudarrota-cancelar[b-1xjvhf7r5o],
.mudarrota-confirmar[b-1xjvhf7r5o] {
    flex: 1;
    height: 44px;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
}

.mudarrota-cancelar[b-1xjvhf7r5o] {
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo-escuro);
    color: var(--ep-roxo-escuro);
}

.mudarrota-confirmar[b-1xjvhf7r5o] {
    background-color: var(--ep-verde);
    border: none;
    color: var(--ep-roxo-escuro);
}

    .mudarrota-confirmar:disabled[b-1xjvhf7r5o] {
        opacity: 0.6;
        cursor: not-allowed;
    }
/* /Components/Pages/Pedidos/PrintOrders.razor.rz.scp.css */
/* Para Impressão */
/*@media print {
    body {
        margin: 0;
        padding: 0;
        background-color: white;
        -webkit-print-color-adjust: exact;
    }

    .print-container {
        box-sizing: border-box;
        width: 80mm;
        min-height: 100mm;
        padding: 10mm;
        page-break-after: always;
        background-color: white;
        color: black;
    }
     Estilos específicos para a impressão 
    .logo {
        width: 30mm;
    }

    .header-info, .order-details, .total, .payment, .address, .footer {
        font-size: 3mm;
    }

    table {
        width: 100%;
        border-collapse: collapse;
    }

    th, td {
        text-align: left;
        border: 1px solid black;
        padding: 1mm;
    }
}*/

/* /Components/Pages/Produtos/EstoqueMassa.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO — /estoque/massa (leva 29), a partir do grupo Figma
   "CONCEITO — Estoque em massa" (arquivo EUPHORIA, página "02 - Telas").
   Mesma casca de banner roxo sangrando já usada em /brend, /models etc.
   (ver ai/DESIGN_SYSTEM.md, "Banner do título"). Único breakpoint do
   site: 1000px.

   Tokens do Figma mapeados para os já existentes no projeto (não criados
   novos): primary #621085 → --ep-roxo-escuro · accent #9f18d9 →
   --ep-roxo · accent-3 #07f29c → --ep-verde · accent-4 #ff0000 →
   --ep-erro-forte · accent-5 #00a41f → --ep-sucesso · on-surface #404040
   → --ds-cinza-75 · spacing sm/md 24/32 → --espaco-4/--espaco-5 ·
   rounded md 16 → --canto-card · rounded full → --canto-botao.
   ========================================================================== */

.estoque-massa-pagina[b-pmes88e784] {
    background-color: var(--ep-cinza-100);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.estoque-massa-hero[b-pmes88e784] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-5);

    /* Sobe por baixo da Nav_Bar fixa (backlog 5.8) — mesma técnica já
       usada em /brend, /models etc. */
    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.estoque-massa-caminho[b-pmes88e784] {
    display: block;
    text-align: left;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    margin-bottom: var(--espaco-2);

    /* Duas camadas de recuo pra alinhar com o conteúdo de dentro da
       Nav_Bar, não só com a borda dela — ver DESIGN_SYSTEM.md. */
    padding-left: var(--espaco-4);
}

    .estoque-massa-caminho a[b-pmes88e784] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .estoque-massa-caminho a:hover[b-pmes88e784] {
            text-decoration: underline;
        }

.estoque-massa-titulo[b-pmes88e784] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-3);
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0;
}

/* ---------- Card branco de conteúdo ---------- */
.estoque-massa-card[b-pmes88e784] {
    background-color: var(--ep-branco);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
}

/* ---------- Abas (pílula) ---------- */
.estoque-massa-abas[b-pmes88e784] {
    display: flex;
    gap: var(--espaco-3);
    margin-bottom: var(--espaco-4);
    flex-wrap: wrap;
}

.estoque-massa-aba[b-pmes88e784] {
    height: 44px;
    padding: 0 var(--espaco-4);
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    color: var(--ep-roxo);
    cursor: pointer;
}

.estoque-massa-aba--ativa[b-pmes88e784] {
    background-color: var(--ep-roxo);
    border-color: var(--ep-roxo);
    color: var(--ep-branco);
}

.estoque-massa-rotulo[b-pmes88e784] {
    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    margin: 0 0 var(--espaco-2);
}

.estoque-massa-textarea[b-pmes88e784] {
    width: 100%;
    min-height: 140px;
    box-sizing: border-box;
    background-color: var(--ep-cinza-100);
    border: 1px solid var(--ds-cinza-15);
    border-radius: var(--canto-card);
    padding: var(--espaco-3);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    resize: vertical;
}

    .estoque-massa-textarea:focus[b-pmes88e784] {
        outline: none;
        border-color: var(--ep-roxo);
    }

/* Celular: ocupa a largura toda do card, texto centralizado — mesmo
   padrão do botão "Resetar" em /reset/{id}. No computador volta a
   abraçar o próprio texto (ver media query abaixo). */
.estoque-massa-botao[b-pmes88e784] {
    height: 44px;
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    text-align: center;
    cursor: pointer;
    margin-top: var(--espaco-3);
}

    .estoque-massa-botao:disabled[b-pmes88e784] {
        cursor: default;
        opacity: 0.6;
    }

.estoque-massa-botao--verde[b-pmes88e784] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
}

.estoque-massa-botao--contorno[b-pmes88e784] {
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px solid var(--ep-roxo);
}

.estoque-massa-botao--vermelho[b-pmes88e784] {
    background-color: var(--ep-erro-forte);
    color: var(--ep-branco);
    border: none;
}

.estoque-massa-botoes[b-pmes88e784] {
    display: flex;
    gap: var(--espaco-3);
}

    /* Par Cancelar/Confirmar: cada um divide a largura igual, em vez de
       cada um tentar ser 100% sozinho — juntos ainda preenchem a
       ponta a ponta do card. */
    .estoque-massa-botoes .estoque-massa-botao[b-pmes88e784] {
        width: auto;
        flex: 1;
    }

/* ---------- Tabela de revisão ---------- */
.estoque-massa-tabela-wrap[b-pmes88e784] {
    overflow-x: auto;
    margin-top: var(--espaco-3);
}

.estoque-massa-tabela[b-pmes88e784] {
    width: 100%;
    border-collapse: collapse;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
}

    .estoque-massa-tabela thead[b-pmes88e784] {
        background-color: var(--ep-cinza-100);
    }

    .estoque-massa-tabela th[b-pmes88e784] {
        text-align: left;
        font-weight: normal;
        color: var(--ep-roxo-escuro);
        padding: var(--espaco-2) var(--espaco-3);
        white-space: nowrap;
    }

    .estoque-massa-tabela td[b-pmes88e784] {
        padding: var(--espaco-2) var(--espaco-3);
        border-top: 1px solid var(--ds-cinza-15);
        color: var(--ds-cinza-75);
    }

.estoque-massa-positivo[b-pmes88e784] {
    color: var(--ep-sucesso);
    font-weight: normal;
}

.estoque-massa-negativo[b-pmes88e784] {
    color: var(--ep-erro-forte);
    font-weight: normal;
}

/* ---------- Avisos ---------- */
.estoque-massa-aviso[b-pmes88e784] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    border-radius: var(--canto-card);
    padding: var(--espaco-2) var(--espaco-3);
    margin: var(--espaco-3) 0 0;
}

.estoque-massa-aviso--ok[b-pmes88e784] {
    background-color: #E2FBEF;
    color: var(--ep-sucesso);
}

.estoque-massa-aviso--atencao[b-pmes88e784] {
    background-color: #FFF6DE;
    color: var(--ep-aviso-escuro);
}

/* Lista de itens com dupla interpretação (14/09/2026) — o aviso vira um
   <div> com <p> + <ul> em vez de um <p> só; reseta a margem padrão do
   navegador nos dois pra não abrir vão extra dentro da caixa. */
.estoque-massa-aviso--atencao p[b-pmes88e784] {
    margin: 0 0 var(--espaco-1);
}

.estoque-massa-lista-ambiguos[b-pmes88e784] {
    margin: 0;
    padding-left: var(--espaco-4);
}

/* ---------- Aviso de favoritos no reabastecimento (08/08/2026) ---------- */
.estoque-massa-favoritos[b-pmes88e784] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
    margin-top: var(--espaco-3);
}

.estoque-massa-favoritos-produto[b-pmes88e784] {
    background-color: var(--ep-cinza-100);
    border-radius: var(--canto-card);
    padding: var(--espaco-3);
}

.estoque-massa-favoritos-titulo[b-pmes88e784] {
    display: flex;
    align-items: center;
    gap: var(--espaco-1);
    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    margin: 0 0 var(--espaco-2);
}

.estoque-massa-favoritos-lista[b-pmes88e784] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--espaco-2);
}

.estoque-massa-favoritos-botao[b-pmes88e784] {
    display: inline-flex;
    align-items: center;
    gap: var(--espaco-1);
    height: 36px;
    padding: 0 var(--espaco-3);
    background-color: var(--ep-sucesso);
    color: var(--ep-branco);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    text-decoration: none;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .estoque-massa-pagina[b-pmes88e784] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .estoque-massa-hero[b-pmes88e784] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: 80px;
        margin-bottom: var(--espaco-9);

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .estoque-massa-titulo[b-pmes88e784] {
        font-size: var(--titulo-1);
    }

    .estoque-massa-caminho[b-pmes88e784] {
        padding-left: var(--espaco-5);
    }

    .estoque-massa-card[b-pmes88e784] {
        padding: var(--espaco-6);
    }

    /* Computador: botão volta a abraçar o próprio texto, não ocupa mais
       a largura toda — mesma regra do botão "Resetar" em /reset/{id}. */
    .estoque-massa-botao[b-pmes88e784] {
        width: auto;
    }
}
/* /Components/Pages/Produtos/Filtros/Brend.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO — /manager/brend (leva 32), a partir do grupo Figma
   "REDESIGN — Marcas" (arquivo EUPHORIA, página "02 - Telas"). Mesma casca
   de /manager/category (leva 32) e /inventory (leva 30) — ver
   ai/DESIGN_SYSTEM.md, "Banner do título". Único breakpoint do site: 1000px.

   Já corrigido de saída (achado testando /manager/category ao vivo):
   título 32px no celular, padding-bottom do banner igual ao celular no
   computador (era 80px, ficava desalinhado), coluna Ações alinhada à
   direita, ícone de ação menor no celular (32px, volta a 36px no
   computador). */

.brend-pagina[b-iiux0srrf6] {
    background-color: var(--ep-cinza-100);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.brend-hero[b-iiux0srrf6] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-5);

    display: flex;
    flex-direction: column;
    align-items: center;

    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.brend-caminho[b-iiux0srrf6] {
    display: block;
    align-self: flex-start;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    margin-bottom: var(--espaco-2);
    padding-left: var(--espaco-4);
}

    .brend-caminho a[b-iiux0srrf6] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .brend-caminho a:hover[b-iiux0srrf6] {
            text-decoration: underline;
        }

.brend-titulo[b-iiux0srrf6] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: 32px;
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0 0 var(--espaco-3);
}

.brend-contador[b-iiux0srrf6] {
    display: inline-block;
    background-color: var(--ep-roxo-escuro);
    border: 1px solid var(--ep-branco);
    border-radius: var(--canto-botao);
    padding: var(--espaco-1) var(--espaco-4);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    color: var(--ep-branco);
}

/* ---------- Card branco de conteúdo ---------- */
.brend-card[b-iiux0srrf6] {
    background-color: var(--ep-branco);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
}

/* ---------- Botões ---------- */
.brend-botao[b-iiux0srrf6] {
    height: 44px;
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    text-align: center;
    cursor: pointer;
    flex-shrink: 0;
}

.brend-botao--verde[b-iiux0srrf6] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
}

.brend-botao--roxo[b-iiux0srrf6] {
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
    border: none;
}

.brend-botao--contorno[b-iiux0srrf6] {
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px solid var(--ep-roxo);
}

/* ---------- Filtros ("Cadastrar" na mesma linha) ---------- */
.brend-filtros[b-iiux0srrf6] {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--espaco-2);
    margin-bottom: var(--espaco-4);
}

    .brend-filtros .brend-botao[b-iiux0srrf6] {
        width: auto;
    }

/* ---------- Select de Categoria (mesmo padrão de .inventory-select-caixa) ---------- */
.brend-select-caixa[b-iiux0srrf6] {
    position: relative;
    width: 100%;
    flex: 1 1 160px;
}

.brend-select[b-iiux0srrf6] {
    width: 100%;
    box-sizing: border-box;
    appearance: none;
    background-color: var(--ep-branco);
    border: 1px solid var(--ds-cinza-15);
    border-radius: var(--canto-botao);
    padding: 14px 44px 14px 22px;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    cursor: pointer;
}

    .brend-select:focus[b-iiux0srrf6] {
        outline: none;
        border-color: var(--ep-roxo);
    }

.brend-select-caret[b-iiux0srrf6] {
    position: absolute;
    top: 50%;
    right: 22px;
    transform: translateY(-50%);
    color: var(--ep-roxo-escuro);
    pointer-events: none;
}

/* ---------- Busca (mesmo padrão de .inventory-busca-caixa) ---------- */
.brend-busca-caixa[b-iiux0srrf6] {
    position: relative;
    width: 100%;
    flex: 1 1 160px;
}

    .brend-busca-caixa input[b-iiux0srrf6] {
        width: 100%;
        box-sizing: border-box;
        background-color: var(--ep-branco);
        border: 1px solid var(--ds-cinza-15);
        border-radius: var(--canto-campo);
        padding: 14px 22px 14px 44px;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        color: var(--ep-roxo-escuro);
    }

        .brend-busca-caixa input:focus[b-iiux0srrf6] {
            outline: none;
            border-color: var(--ep-roxo);
        }

    .brend-busca-caixa i[b-iiux0srrf6] {
        position: absolute;
        top: 50%;
        left: 16px;
        transform: translateY(-50%);
        color: var(--ep-roxo-escuro);
        opacity: 0.6;
        pointer-events: none;
    }

/* ---------- Tabela (computador) — cabeçalho roxo, pílula ---------- */
.brend-tabela-wrap[b-iiux0srrf6] {
    display: none;
    overflow-x: auto;
}

.brend-tabela[b-iiux0srrf6] {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
}

    .brend-tabela thead[b-iiux0srrf6] {
        background-color: var(--ep-roxo);
    }

    .brend-tabela th[b-iiux0srrf6] {
        text-align: left;
        font-weight: normal;
        color: var(--ep-branco);
        padding: var(--espaco-3);
        white-space: nowrap;
    }

        .brend-tabela th:first-child[b-iiux0srrf6] {
            border-radius: var(--canto-botao) 0 0 var(--canto-botao);
        }

        .brend-tabela th:last-child[b-iiux0srrf6] {
            border-radius: 0 var(--canto-botao) var(--canto-botao) 0;
            text-align: right;
        }

    .brend-tabela td[b-iiux0srrf6] {
        padding: var(--espaco-2) var(--espaco-3);
        border-top: 1px solid var(--ds-cinza-15);
        color: var(--ds-cinza-75);
        white-space: nowrap;
    }

    .brend-tabela tbody tr:first-child td[b-iiux0srrf6] {
        border-top: none;
    }

/* ---------- Cartões (celular) — no lugar da tabela ---------- */
.brend-cards-mobile[b-iiux0srrf6] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

.brend-item-card[b-iiux0srrf6] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    background-color: var(--ep-branco);
    border: 0.5px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: 0 4px 7.6px rgba(0, 0, 0, 0.15);
    padding: var(--espaco-3);
}

.brend-item-nome[b-iiux0srrf6] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

/* ---------- Ações (botões circulares) ---------- */
.brend-acoes[b-iiux0srrf6] {
    display: flex;
    gap: var(--espaco-2);
    justify-content: flex-end;
}

.brend-icone[b-iiux0srrf6] {
    width: 32px;
    height: 32px;
    border: none;
    border-radius: var(--canto-redondo);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--ep-branco);
    cursor: pointer;
    flex-shrink: 0;
}

.brend-icone--editar[b-iiux0srrf6] {
    background-color: var(--ep-aviso);
    color: var(--ep-preto);
}

.brend-icone--excluir[b-iiux0srrf6] {
    background-color: var(--ep-erro-forte);
}

/* ---------- Paginação ---------- */
.brend-paginacao[b-iiux0srrf6] {
    display: flex;
    gap: var(--espaco-3);
    margin-top: var(--espaco-4);
}

    .brend-paginacao .brend-botao[b-iiux0srrf6] {
        width: auto;
        flex: 1;
    }

/* ---------- Estados vazio / carregando ---------- */
.brend-vazio[b-iiux0srrf6] {
    text-align: center;
    padding: var(--espaco-6) 0;
}

    .brend-vazio i[b-iiux0srrf6] {
        font-size: 48px;
        color: var(--ep-roxo);
    }

    .brend-vazio h3[b-iiux0srrf6] {
        color: var(--ep-verde-escuro);
        margin-top: var(--espaco-3);
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        font-weight: normal;
    }

.brend-carregando[b-iiux0srrf6] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .brend-pagina[b-iiux0srrf6] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .brend-hero[b-iiux0srrf6] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: var(--espaco-5);
        margin-bottom: var(--espaco-9);

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .brend-titulo[b-iiux0srrf6] {
        font-size: var(--titulo-1);
    }

    .brend-caminho[b-iiux0srrf6] {
        padding-left: var(--espaco-5);
    }

    .brend-filtros[b-iiux0srrf6] {
        flex-direction: row;
        align-items: center;
    }

    .brend-select-caixa[b-iiux0srrf6] {
        flex: 0 0 220px;
    }

    .brend-busca-caixa[b-iiux0srrf6] {
        flex: 1;
    }

    /* Tabela some, cartões viram tabela — troca só no breakpoint. */
    .brend-tabela-wrap[b-iiux0srrf6] {
        display: block;
    }

    .brend-cards-mobile[b-iiux0srrf6] {
        display: none;
    }

    .brend-paginacao .brend-botao[b-iiux0srrf6] {
        flex: none;
    }

    .brend-icone[b-iiux0srrf6] {
        width: 36px;
        height: 36px;
    }
}

/* Aviso de exclusão — mesma casca do modal de excluir produto do carrinho
   (OrderCheckout.razor.css); cópia própria porque o isolamento do Blazor
   não deixa reaproveitar o CSS de lá. */
.confirmar-exclusao-fundo[b-iiux0srrf6] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    padding: var(--espaco-4);
}

.confirmar-exclusao-caixa[b-iiux0srrf6] {
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-4);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.confirmar-exclusao-icone img[b-iiux0srrf6] {
    width: 144px;
    height: 144px;
    object-fit: contain;
}

.confirmar-exclusao-pergunta[b-iiux0srrf6] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-descricao[b-iiux0srrf6] {
    font-family: var(--fonte-corpo);
    font-weight: 400;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-botoes[b-iiux0srrf6] {
    display: flex;
    gap: var(--espaco-3);
    width: 100%;
    margin-top: var(--espaco-4);
}

.confirmar-exclusao-nao[b-iiux0srrf6],
.confirmar-exclusao-sim[b-iiux0srrf6] {
    flex: 1;
    height: 39px;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    border: none;
    cursor: pointer;
}

.confirmar-exclusao-nao[b-iiux0srrf6] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.confirmar-exclusao-sim[b-iiux0srrf6] {
    background-color: var(--ep-erro-forte);
    color: var(--ep-branco);
}
/* /Components/Pages/Produtos/Filtros/Category.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO — /manager/category (leva 32), a partir do grupo Figma
   "REDESIGN — Categorias" (arquivo EUPHORIA, página "02 - Telas"). Mesma
   casca de /inventory (leva 30) — ver ai/DESIGN_SYSTEM.md, "Banner do
   título". Único breakpoint do site: 1000px.
   ========================================================================== */

.category-pagina[b-fc93vemaem] {
    background-color: var(--ep-cinza-100);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.category-hero[b-fc93vemaem] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-5);

    display: flex;
    flex-direction: column;
    align-items: center;

    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.category-caminho[b-fc93vemaem] {
    display: block;
    align-self: flex-start;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    margin-bottom: var(--espaco-2);
    padding-left: var(--espaco-4);
}

    .category-caminho a[b-fc93vemaem] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .category-caminho a:hover[b-fc93vemaem] {
            text-decoration: underline;
        }

.category-titulo[b-fc93vemaem] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: 32px;
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0 0 var(--espaco-3);
}

.category-contador[b-fc93vemaem] {
    display: inline-block;
    background-color: var(--ep-roxo-escuro);
    border: 1px solid var(--ep-branco);
    border-radius: var(--canto-botao);
    padding: var(--espaco-1) var(--espaco-4);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    color: var(--ep-branco);
}

/* ---------- Card branco de conteúdo ---------- */
.category-card[b-fc93vemaem] {
    background-color: var(--ep-branco);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
}

/* ---------- Botões ---------- */
.category-botao[b-fc93vemaem] {
    height: 44px;
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    text-align: center;
    cursor: pointer;
    flex-shrink: 0;
}

.category-botao--verde[b-fc93vemaem] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
}

.category-botao--roxo[b-fc93vemaem] {
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
    border: none;
}

.category-botao--contorno[b-fc93vemaem] {
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px solid var(--ep-roxo);
}

/* ---------- Filtros ("Cadastrar" na mesma linha) ---------- */
.category-filtros[b-fc93vemaem] {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--espaco-2);
    margin-bottom: var(--espaco-4);
}

    .category-filtros .category-botao[b-fc93vemaem] {
        width: auto;
    }

/* ---------- Busca (mesmo padrão de .inventory-busca-caixa) ---------- */
.category-busca-caixa[b-fc93vemaem] {
    position: relative;
    width: 100%;
    flex: 1 1 160px;
}

    .category-busca-caixa input[b-fc93vemaem] {
        width: 100%;
        box-sizing: border-box;
        background-color: var(--ep-branco);
        border: 1px solid var(--ds-cinza-15);
        border-radius: var(--canto-campo);
        padding: 14px 22px 14px 44px;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        color: var(--ep-roxo-escuro);
    }

        .category-busca-caixa input:focus[b-fc93vemaem] {
            outline: none;
            border-color: var(--ep-roxo);
        }

    .category-busca-caixa i[b-fc93vemaem] {
        position: absolute;
        top: 50%;
        left: 16px;
        transform: translateY(-50%);
        color: var(--ep-roxo-escuro);
        opacity: 0.6;
        pointer-events: none;
    }

/* ---------- Tabela (computador) — cabeçalho roxo, pílula ---------- */
.category-tabela-wrap[b-fc93vemaem] {
    display: none;
    overflow-x: auto;
}

.category-tabela[b-fc93vemaem] {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
}

    .category-tabela thead[b-fc93vemaem] {
        background-color: var(--ep-roxo);
    }

    .category-tabela th[b-fc93vemaem] {
        text-align: left;
        font-weight: normal;
        color: var(--ep-branco);
        padding: var(--espaco-3);
        white-space: nowrap;
    }

        .category-tabela th:first-child[b-fc93vemaem] {
            border-radius: var(--canto-botao) 0 0 var(--canto-botao);
        }

        .category-tabela th:last-child[b-fc93vemaem] {
            border-radius: 0 var(--canto-botao) var(--canto-botao) 0;
            text-align: right;
        }

    .category-tabela td[b-fc93vemaem] {
        padding: var(--espaco-2) var(--espaco-3);
        border-top: 1px solid var(--ds-cinza-15);
        color: var(--ds-cinza-75);
        white-space: nowrap;
    }

    .category-tabela tbody tr:first-child td[b-fc93vemaem] {
        border-top: none;
    }

/* ---------- Cartões (celular) — no lugar da tabela ---------- */
.category-cards-mobile[b-fc93vemaem] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

.category-item-card[b-fc93vemaem] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    background-color: var(--ep-branco);
    border: 0.5px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: 0 4px 7.6px rgba(0, 0, 0, 0.15);
    padding: var(--espaco-3);
}

.category-item-nome[b-fc93vemaem] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

/* ---------- Ações (botões circulares) ---------- */
.category-acoes[b-fc93vemaem] {
    display: flex;
    gap: var(--espaco-2);
    justify-content: flex-end;
}

/* Menor no celular (pedido do dono) — volta a 36px no computador, ver
   media query no fim do arquivo. */
.category-icone[b-fc93vemaem] {
    width: 32px;
    height: 32px;
    border: none;
    border-radius: var(--canto-redondo);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--ep-branco);
    cursor: pointer;
    flex-shrink: 0;
}

.category-icone--editar[b-fc93vemaem] {
    background-color: var(--ep-aviso);
    color: var(--ep-preto);
}

.category-icone--excluir[b-fc93vemaem] {
    background-color: var(--ep-erro-forte);
}

/* ---------- Paginação ---------- */
.category-paginacao[b-fc93vemaem] {
    display: flex;
    gap: var(--espaco-3);
    margin-top: var(--espaco-4);
}

    .category-paginacao .category-botao[b-fc93vemaem] {
        width: auto;
        flex: 1;
    }

/* ---------- Estados vazio / carregando ---------- */
.category-vazio[b-fc93vemaem] {
    text-align: center;
    padding: var(--espaco-6) 0;
}

    .category-vazio i[b-fc93vemaem] {
        font-size: 48px;
        color: var(--ep-roxo);
    }

    .category-vazio h3[b-fc93vemaem] {
        color: var(--ep-verde-escuro);
        margin-top: var(--espaco-3);
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        font-weight: normal;
    }

.category-carregando[b-fc93vemaem] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .category-pagina[b-fc93vemaem] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .category-hero[b-fc93vemaem] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        /* Era 80px (copiado do /inventory sem conferir) — o gap de cima
           (abaixo da Nav_Bar até "Voltar") é só --espaco-3 (16px); 80px
           embaixo deixava o selo bem mais perto do topo do banner do que
           do fim. Igualado ao mesmo valor do celular. */
        padding-bottom: var(--espaco-5);
        margin-bottom: var(--espaco-9);

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .category-titulo[b-fc93vemaem] {
        font-size: var(--titulo-1);
    }

    .category-caminho[b-fc93vemaem] {
        padding-left: var(--espaco-5);
    }

    .category-filtros[b-fc93vemaem] {
        flex-direction: row;
        align-items: center;
    }

    .category-busca-caixa[b-fc93vemaem] {
        flex: 1;
    }

    /* Tabela some, cartões viram tabela — troca só no breakpoint. */
    .category-tabela-wrap[b-fc93vemaem] {
        display: block;
    }

    .category-cards-mobile[b-fc93vemaem] {
        display: none;
    }

    .category-paginacao .category-botao[b-fc93vemaem] {
        flex: none;
    }

    .category-icone[b-fc93vemaem] {
        width: 36px;
        height: 36px;
    }
}

/* Aviso de exclusão — mesma casca do modal de excluir produto do carrinho
   (OrderCheckout.razor.css); cópia própria porque o isolamento do Blazor
   não deixa reaproveitar o CSS de lá. */
.confirmar-exclusao-fundo[b-fc93vemaem] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    padding: var(--espaco-4);
}

.confirmar-exclusao-caixa[b-fc93vemaem] {
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-4);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.confirmar-exclusao-icone img[b-fc93vemaem] {
    width: 144px;
    height: 144px;
    object-fit: contain;
}

.confirmar-exclusao-pergunta[b-fc93vemaem] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-descricao[b-fc93vemaem] {
    font-family: var(--fonte-corpo);
    font-weight: 400;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-botoes[b-fc93vemaem] {
    display: flex;
    gap: var(--espaco-3);
    width: 100%;
    margin-top: var(--espaco-4);
}

.confirmar-exclusao-nao[b-fc93vemaem],
.confirmar-exclusao-sim[b-fc93vemaem] {
    flex: 1;
    height: 39px;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    border: none;
    cursor: pointer;
}

.confirmar-exclusao-nao[b-fc93vemaem] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.confirmar-exclusao-sim[b-fc93vemaem] {
    background-color: var(--ep-erro-forte);
    color: var(--ep-branco);
}

/* O visual novo da modal de cadastro (cabeçalho escondido, canto/sombra do
   cartão) está em app.css, preso à classe "cadastro-modal-wrapper" — não dá
   pra fazer aqui com ::deep porque o cabeçalho é desenhado dentro do próprio
   componente <Modal> do BlazorBootstrap, fora do que este arquivo alcança. */
/* /Components/Pages/Produtos/Filtros/Components/BrendComponent.razor.rz.scp.css */
/* Visual novo da modal de Marca — mesma receita da modal de Categoria
   (CategoryComponent.razor.css), leva 31. @code não mudou, só a marcação. */

.cadastro-modal[b-p439qt7492] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    padding: var(--espaco-5);
}

.cadastro-modal-cabecalho[b-p439qt7492] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.cadastro-modal-titulo[b-p439qt7492] {
    font-family: var(--fonte-titulo);
    font-size: var(--subtitulo);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

/* Lembra qual registro está sendo editado — some no cadastro novo. */
.cadastro-modal-descricao[b-p439qt7492] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-50);
}

.cadastro-modal-upload[b-p439qt7492] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--espaco-3);
}

.cadastro-modal-upload-linha[b-p439qt7492] {
    display: flex;
    align-items: center;
    gap: var(--espaco-3);
}

.cadastro-modal-foto-box[b-p439qt7492] {
    width: 56px;
    flex-shrink: 0;
    padding: var(--espaco-3) var(--espaco-2);
    border: 1px solid rgba(0, 0, 0, 0.25);
    border-radius: var(--espaco-2);
    box-sizing: border-box;
    display: flex;
    align-items: center;
    justify-content: center;
}

.cadastro-modal-preview[b-p439qt7492] {
    max-width: 100%;
    max-height: 40px;
    object-fit: contain;
}

.cadastro-modal-botao-upload[b-p439qt7492] {
    height: 46px;
    padding: 0 var(--espaco-4);
    flex-shrink: 0;
    border-radius: var(--canto-botao);
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo-escuro);
    color: var(--ep-roxo-escuro);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
    transition: background-color .15s, color .15s;
}

/* Hover — mesma receita dos botões "contorno" do site (SignUp/SignIn):
   inverte, fundo vira a cor da borda, texto vira branco. */
.cadastro-modal-botao-upload:hover[b-p439qt7492] {
    background-color: var(--ep-roxo-escuro);
    color: var(--ep-branco);
}

.cadastro-modal-nome-arquivo[b-p439qt7492] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

/* O gap do .cadastro-modal só separa os filhos DIRETOS do cartão — o
   conteúdo do <EditForm> vira um <form>, um nível abaixo, então precisa do
   próprio flex+gap pra não ficar tudo colado. */
.cadastro-modal-form-corpo[b-p439qt7492] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
}

.cadastro-modal-campo[b-p439qt7492] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

.cadastro-modal-rotulo[b-p439qt7492] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
}

/* Mesma receita de campo já usada no resto do site (leva 13c,
   AddressComponent.razor.css) — pílula com contorno roxo, sombra interna
   sutil e contorno verde no foco. */
.cadastro-modal-input[b-p439qt7492],
.cadastro-modal-select[b-p439qt7492] {
    height: var(--altura-campo);
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-campo);
    border: 1px solid var(--ep-roxo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    background-color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    box-sizing: border-box;
}

.cadastro-modal-input[b-p439qt7492],
.cadastro-modal-select[b-p439qt7492] {
    /* O navegador (Safari principalmente) desenha esses campos com
       aparência nativa do sistema por cima do fundo/borda customizados, a
       não ser que isso seja desligado explicitamente. No select, a setinha
       nativa some junto — por isso o wrapper .cadastro-modal-campo-select
       desenha uma seta própria (mesma receita de Product.razor.css,
       ".product-sabor-select"). */
    appearance: none;
    -webkit-appearance: none;
}

.cadastro-modal-input[b-p439qt7492]::placeholder {
    color: var(--ep-roxo-escuro);
    opacity: 1; /* sem isso o Firefox desbota sozinho */
}

/* Wrapper só do <select> — a seta é posicionada em relação a ele, não ao
   par rótulo+campo inteiro (.cadastro-modal-campo). */
.cadastro-modal-campo-select[b-p439qt7492] {
    position: relative;
}

    .cadastro-modal-campo-select[b-p439qt7492]::after {
        content: '';
        position: absolute;
        top: 50%;
        right: var(--espaco-4);
        width: 8px;
        height: 8px;
        border-right: 2px solid var(--ep-roxo-escuro);
        border-bottom: 2px solid var(--ep-roxo-escuro);
        transform: translateY(-70%) rotate(45deg);
        pointer-events: none;
    }

.cadastro-modal-input:focus[b-p439qt7492],
.cadastro-modal-select:focus[b-p439qt7492] {
    outline: 2px solid var(--ep-verde);
    outline-offset: 2px;
}

/* Linha fina entre o último campo e o Salvar. */
.cadastro-modal-divisor[b-p439qt7492] {
    height: 0.5px;
    background-color: rgba(0, 0, 0, 0.25);
}

.cadastro-modal-botao-salvar[b-p439qt7492] {
    height: 44px;
    width: 100%;
    border-radius: var(--canto-botao);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
    transition: filter .15s;
}

/* Hover — mesma receita do botão "cheio" do site (SignUp/SignIn). */
.cadastro-modal-botao-salvar:hover[b-p439qt7492] {
    filter: brightness(0.92);
}
/* /Components/Pages/Produtos/Filtros/Components/CategoryComponent.razor.rz.scp.css */
/* Visual novo da modal de Categoria — Figma "REDESIGN — Categorias",
   sub-frame da modal (420x335). @code não mudou, só a marcação. */

.cadastro-modal[b-xq76ejat8t] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    padding: var(--espaco-5);
}

.cadastro-modal-cabecalho[b-xq76ejat8t] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.cadastro-modal-titulo[b-xq76ejat8t] {
    font-family: var(--fonte-titulo);
    font-size: var(--subtitulo);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

/* Lembra qual registro está sendo editado — some no cadastro novo,
   onde ainda não existe nome nenhum pra mostrar. */
.cadastro-modal-descricao[b-xq76ejat8t] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-50);
}

.cadastro-modal-upload[b-xq76ejat8t] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--espaco-3);
}

.cadastro-modal-upload-linha[b-xq76ejat8t] {
    display: flex;
    align-items: center;
    gap: var(--espaco-3);
}

.cadastro-modal-foto-box[b-xq76ejat8t] {
    width: 56px;
    flex-shrink: 0;
    padding: var(--espaco-3) var(--espaco-2);
    border: 1px solid rgba(0, 0, 0, 0.25);
    border-radius: var(--espaco-2);
    box-sizing: border-box;
    display: flex;
    align-items: center;
    justify-content: center;
}

.cadastro-modal-botao-upload[b-xq76ejat8t] {
    height: 46px;
    padding: 0 var(--espaco-4);
    flex-shrink: 0;
    border-radius: var(--canto-botao);
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo-escuro);
    color: var(--ep-roxo-escuro);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
    transition: background-color .15s, color .15s;
}

/* Hover — mesma receita dos botões "contorno" do site (SignUp/SignIn):
   inverte, fundo vira a cor da borda, texto vira branco. */
.cadastro-modal-botao-upload:hover[b-xq76ejat8t] {
    background-color: var(--ep-roxo-escuro);
    color: var(--ep-branco);
}

.cadastro-modal-nome-arquivo[b-xq76ejat8t] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

.cadastro-modal-preview[b-xq76ejat8t] {
    max-width: 100%;
    max-height: 40px;
    object-fit: contain;
}

/* O gap do .cadastro-modal só separa os filhos DIRETOS do cartão — o
   conteúdo do <EditForm> vira um <form>, um nível abaixo, então precisa do
   próprio flex+gap pra não ficar tudo colado. */
.cadastro-modal-form-corpo[b-xq76ejat8t] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
}

.cadastro-modal-campo[b-xq76ejat8t] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

.cadastro-modal-rotulo[b-xq76ejat8t] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
}

/* Mesma receita de campo já usada no resto do site (leva 13c,
   AddressComponent.razor.css) — pílula com contorno roxo, sombra interna
   sutil e contorno verde no foco, em vez de um estilo novo só pra cá. */
.cadastro-modal-input[b-xq76ejat8t] {
    height: var(--altura-campo);
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-campo);
    border: 1px solid var(--ep-roxo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    background-color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    /* O navegador (Safari principalmente) desenha um input de texto com
       aparência nativa do sistema por cima do fundo/borda customizados,
       a não ser que isso seja desligado explicitamente. */
    appearance: none;
    -webkit-appearance: none;
    box-sizing: border-box;
}

.cadastro-modal-input[b-xq76ejat8t]::placeholder {
    color: var(--ep-roxo-escuro);
    opacity: 1; /* sem isso o Firefox desbota sozinho */
}

.cadastro-modal-input:focus[b-xq76ejat8t] {
    outline: 2px solid var(--ep-verde);
    outline-offset: 2px;
}

/* Linha fina entre o último campo e o Salvar — pedido do dono. */
.cadastro-modal-divisor[b-xq76ejat8t] {
    height: 0.5px;
    background-color: rgba(0, 0, 0, 0.25);
}

.cadastro-modal-botao-salvar[b-xq76ejat8t] {
    height: 44px;
    width: 100%;
    border-radius: var(--canto-botao);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
    transition: filter .15s;
}

/* Hover — mesma receita do botão "cheio" do site (SignUp/SignIn). */
.cadastro-modal-botao-salvar:hover[b-xq76ejat8t] {
    filter: brightness(0.92);
}
/* /Components/Pages/Produtos/Filtros/Components/ChangeValueComponent.razor.rz.scp.css */
/* Visual novo da modal de Reajuste de Preço — mesma receita geral da modal
   de Categoria (CategoryComponent.razor.css), leva 31. Sem o círculo de
   ícone (removido a pedido do dono). */

.cadastro-modal[b-34cw0ylki7] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    padding: var(--espaco-5);
}

.cadastro-modal-cabecalho[b-34cw0ylki7] {
    display: flex;
    align-items: center;
    gap: var(--espaco-3);
}

.cadastro-modal-titulo[b-34cw0ylki7] {
    font-family: var(--fonte-titulo);
    font-size: var(--subtitulo);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

.cadastro-modal-subtitulo[b-34cw0ylki7] {
    font-family: var(--fonte-corpo);
    font-weight: 600;
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
    margin: 0;
}

.cadastro-modal-campo[b-34cw0ylki7] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

/* Mesma receita de campo já usada no resto do site (leva 13c,
   AddressComponent.razor.css) — pílula com contorno roxo, sombra interna
   sutil e contorno verde no foco. */
.cadastro-modal-input[b-34cw0ylki7] {
    height: var(--altura-campo);
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-campo);
    border: 1px solid var(--ep-roxo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    background-color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    box-sizing: border-box;
    appearance: none;
    -webkit-appearance: none;
}

.cadastro-modal-input:focus[b-34cw0ylki7] {
    outline: 2px solid var(--ep-verde);
    outline-offset: 2px;
}

/* Tira a setinha de cima/baixo do <input type="number"> — mesmo pedido do
   dono aplicado no campo da modal de Promoção (PromotionComponent.razor.css). */
.cadastro-modal-input[b-34cw0ylki7]::-webkit-inner-spin-button,
.cadastro-modal-input[b-34cw0ylki7]::-webkit-outer-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

.cadastro-modal-input[type="number"][b-34cw0ylki7] {
    -moz-appearance: textfield;
}

.cadastro-modal-botao-salvar[b-34cw0ylki7] {
    height: 44px;
    width: 100%;
    border-radius: var(--canto-botao);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
    transition: filter .15s;
}

.cadastro-modal-botao-salvar:hover[b-34cw0ylki7] {
    filter: brightness(0.92);
}

/* Aviso amarelo — mesmo par de cores do resto do site (--ep-aviso-escuro),
   fundo claro próprio do Figma desta modal. */
.cadastro-modal-aviso[b-34cw0ylki7] {
    padding: var(--espaco-3);
    border-radius: var(--espaco-3);
    background-color: #fff6de;
    color: var(--ep-aviso-escuro);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
}
/* /Components/Pages/Produtos/Filtros/Components/FlavorComponent.razor.rz.scp.css */
/* Visual novo da modal de Sabor — mesma receita da modal de Categoria
   (CategoryComponent.razor.css), leva 31. Sem upload de foto (Sabor não
   tem imagem própria). @code não mudou, só a marcação. */

.cadastro-modal[b-jpk4tpcu5x] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    padding: var(--espaco-5);
}

.cadastro-modal-cabecalho[b-jpk4tpcu5x] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.cadastro-modal-titulo[b-jpk4tpcu5x] {
    font-family: var(--fonte-titulo);
    font-size: var(--subtitulo);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

/* Lembra qual registro está sendo editado — some no cadastro novo. */
.cadastro-modal-descricao[b-jpk4tpcu5x] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-50);
}

/* O gap do .cadastro-modal só separa os filhos DIRETOS do cartão — o
   conteúdo do <EditForm> vira um <form>, um nível abaixo, então precisa do
   próprio flex+gap pra não ficar tudo colado. */
.cadastro-modal-form-corpo[b-jpk4tpcu5x] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
}

.cadastro-modal-campo[b-jpk4tpcu5x] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

.cadastro-modal-rotulo[b-jpk4tpcu5x] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
}

/* Mesma receita de campo já usada no resto do site (leva 13c,
   AddressComponent.razor.css) — pílula com contorno roxo, sombra interna
   sutil e contorno verde no foco. */
.cadastro-modal-input[b-jpk4tpcu5x],
.cadastro-modal-select[b-jpk4tpcu5x] {
    height: var(--altura-campo);
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-campo);
    border: 1px solid var(--ep-roxo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    background-color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    box-sizing: border-box;
}

.cadastro-modal-input[b-jpk4tpcu5x],
.cadastro-modal-select[b-jpk4tpcu5x] {
    /* O navegador (Safari principalmente) desenha esses campos com
       aparência nativa do sistema por cima do fundo/borda customizados, a
       não ser que isso seja desligado explicitamente. No select, a setinha
       nativa some junto — por isso o wrapper .cadastro-modal-campo-select
       desenha uma seta própria (mesma receita de Product.razor.css,
       ".product-sabor-select"). */
    appearance: none;
    -webkit-appearance: none;
}

.cadastro-modal-input[b-jpk4tpcu5x]::placeholder {
    color: var(--ep-roxo-escuro);
    opacity: 1; /* sem isso o Firefox desbota sozinho */
}

/* Wrapper só do <select> — a seta é posicionada em relação a ele, não ao
   par rótulo+campo inteiro (.cadastro-modal-campo). */
.cadastro-modal-campo-select[b-jpk4tpcu5x] {
    position: relative;
}

    .cadastro-modal-campo-select[b-jpk4tpcu5x]::after {
        content: '';
        position: absolute;
        top: 50%;
        right: var(--espaco-4);
        width: 8px;
        height: 8px;
        border-right: 2px solid var(--ep-roxo-escuro);
        border-bottom: 2px solid var(--ep-roxo-escuro);
        transform: translateY(-70%) rotate(45deg);
        pointer-events: none;
    }

.cadastro-modal-input:focus[b-jpk4tpcu5x],
.cadastro-modal-select:focus[b-jpk4tpcu5x] {
    outline: 2px solid var(--ep-verde);
    outline-offset: 2px;
}

/* Linha fina entre o último campo e o Salvar. */
.cadastro-modal-divisor[b-jpk4tpcu5x] {
    height: 0.5px;
    background-color: rgba(0, 0, 0, 0.25);
}

.cadastro-modal-botao-salvar[b-jpk4tpcu5x] {
    height: 44px;
    width: 100%;
    border-radius: var(--canto-botao);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
    transition: filter .15s;
}

/* Hover — mesma receita do botão "cheio" do site (SignUp/SignIn). */
.cadastro-modal-botao-salvar:hover[b-jpk4tpcu5x] {
    filter: brightness(0.92);
}
/* /Components/Pages/Produtos/Filtros/Components/ModeloComponent.razor.rz.scp.css */
/* Visual novo da modal de Modelo — mesma receita da modal de Categoria
   (CategoryComponent.razor.css), leva 31. @code não mudou, só a marcação. */

.cadastro-modal[b-mv3rwsxf39] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    padding: var(--espaco-5);
}

.cadastro-modal-cabecalho[b-mv3rwsxf39] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.cadastro-modal-titulo[b-mv3rwsxf39] {
    font-family: var(--fonte-titulo);
    font-size: var(--subtitulo);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

/* Lembra qual registro está sendo editado — some no cadastro novo. */
.cadastro-modal-descricao[b-mv3rwsxf39] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-50);
}

.cadastro-modal-upload[b-mv3rwsxf39] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--espaco-3);
}

.cadastro-modal-upload-linha[b-mv3rwsxf39] {
    display: flex;
    align-items: center;
    gap: var(--espaco-3);
}

.cadastro-modal-foto-box[b-mv3rwsxf39] {
    width: 56px;
    flex-shrink: 0;
    padding: var(--espaco-3) var(--espaco-2);
    border: 1px solid rgba(0, 0, 0, 0.25);
    border-radius: var(--espaco-2);
    box-sizing: border-box;
    display: flex;
    align-items: center;
    justify-content: center;
}

.cadastro-modal-preview[b-mv3rwsxf39] {
    max-width: 100%;
    max-height: 40px;
    object-fit: contain;
}

.cadastro-modal-botao-upload[b-mv3rwsxf39] {
    height: 46px;
    padding: 0 var(--espaco-4);
    flex-shrink: 0;
    border-radius: var(--canto-botao);
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo-escuro);
    color: var(--ep-roxo-escuro);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
    transition: background-color .15s, color .15s;
}

/* Hover — mesma receita dos botões "contorno" do site (SignUp/SignIn):
   inverte, fundo vira a cor da borda, texto vira branco. */
.cadastro-modal-botao-upload:hover[b-mv3rwsxf39] {
    background-color: var(--ep-roxo-escuro);
    color: var(--ep-branco);
}

.cadastro-modal-nome-arquivo[b-mv3rwsxf39] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

/* O gap do .cadastro-modal só separa os filhos DIRETOS do cartão — o
   conteúdo do <EditForm> vira um <form>, um nível abaixo, então precisa do
   próprio flex+gap pra não ficar tudo colado. */
.cadastro-modal-form-corpo[b-mv3rwsxf39] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
}

.cadastro-modal-campo[b-mv3rwsxf39] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

.cadastro-modal-rotulo[b-mv3rwsxf39] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
}

/* Mesma receita de campo já usada no resto do site (leva 13c,
   AddressComponent.razor.css) — pílula com contorno roxo, sombra interna
   sutil e contorno verde no foco. */
.cadastro-modal-input[b-mv3rwsxf39],
.cadastro-modal-select[b-mv3rwsxf39] {
    height: var(--altura-campo);
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-campo);
    border: 1px solid var(--ep-roxo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    background-color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    box-sizing: border-box;
}

.cadastro-modal-input[b-mv3rwsxf39],
.cadastro-modal-select[b-mv3rwsxf39] {
    /* O navegador (Safari principalmente) desenha esses campos com
       aparência nativa do sistema por cima do fundo/borda customizados, a
       não ser que isso seja desligado explicitamente. No select, a setinha
       nativa some junto — por isso o wrapper .cadastro-modal-campo-select
       desenha uma seta própria (mesma receita de Product.razor.css,
       ".product-sabor-select"). */
    appearance: none;
    -webkit-appearance: none;
}

.cadastro-modal-input[b-mv3rwsxf39]::placeholder {
    color: var(--ep-roxo-escuro);
    opacity: 1; /* sem isso o Firefox desbota sozinho */
}

/* Wrapper só do <select> — a seta é posicionada em relação a ele, não ao
   par rótulo+campo inteiro (.cadastro-modal-campo). */
.cadastro-modal-campo-select[b-mv3rwsxf39] {
    position: relative;
}

    .cadastro-modal-campo-select[b-mv3rwsxf39]::after {
        content: '';
        position: absolute;
        top: 50%;
        right: var(--espaco-4);
        width: 8px;
        height: 8px;
        border-right: 2px solid var(--ep-roxo-escuro);
        border-bottom: 2px solid var(--ep-roxo-escuro);
        transform: translateY(-70%) rotate(45deg);
        pointer-events: none;
    }

.cadastro-modal-input:focus[b-mv3rwsxf39],
.cadastro-modal-select:focus[b-mv3rwsxf39] {
    outline: 2px solid var(--ep-verde);
    outline-offset: 2px;
}

/* Linha fina entre o último campo e o Salvar. */
.cadastro-modal-divisor[b-mv3rwsxf39] {
    height: 0.5px;
    background-color: rgba(0, 0, 0, 0.25);
}

.cadastro-modal-botao-salvar[b-mv3rwsxf39] {
    height: 44px;
    width: 100%;
    border-radius: var(--canto-botao);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
    transition: filter .15s;
}

/* Hover — mesma receita do botão "cheio" do site (SignUp/SignIn). */
.cadastro-modal-botao-salvar:hover[b-mv3rwsxf39] {
    filter: brightness(0.92);
}
/* /Components/Pages/Produtos/Filtros/Components/MoveComponent.razor.rz.scp.css */
/* Visual novo da modal de Adicionar/Retirar Estoque (leva 39) — mesma
   receita das outras modais de cadastro do admin (leva 31). Cópia
   própria do bloco cadastro-modal-* (isolamento do Blazor não deixa
   reaproveitar CSS entre arquivos), sem desenho no Figma pra essa modal
   específica. */

.cadastro-modal[b-ofe11uzzsl] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    padding: var(--espaco-5);
}

.cadastro-modal-cabecalho[b-ofe11uzzsl] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.cadastro-modal-titulo[b-ofe11uzzsl] {
    font-family: var(--fonte-titulo);
    font-size: var(--subtitulo);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

.cadastro-modal-descricao[b-ofe11uzzsl] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-50);
}

.cadastro-modal-form-corpo[b-ofe11uzzsl] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
}

.cadastro-modal-campo[b-ofe11uzzsl] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

.cadastro-modal-rotulo[b-ofe11uzzsl] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
}

.cadastro-modal-input[b-ofe11uzzsl] {
    height: var(--altura-campo);
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-campo);
    border: 1px solid var(--ep-roxo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    background-color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    box-sizing: border-box;
    appearance: none;
    -webkit-appearance: none;
}

.cadastro-modal-input[b-ofe11uzzsl]::placeholder {
    color: var(--ds-cinza-50);
    opacity: 1; /* sem isso o Firefox desbota sozinho */
}

.cadastro-modal-input:focus[b-ofe11uzzsl] {
    outline: 2px solid var(--ep-verde);
    outline-offset: 2px;
}

.cadastro-modal-divisor[b-ofe11uzzsl] {
    height: 0.5px;
    background-color: rgba(0, 0, 0, 0.25);
}

/* ---------- Bloco de informação (Categoria/Marca/Modelo/Estoque atual) —
   só leitura, lembra qual produto está recebendo o movimento. ---------- */
.move-info[b-ofe11uzzsl] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

.move-info-linha[b-ofe11uzzsl] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--espaco-3);
}

.move-info-rotulo[b-ofe11uzzsl] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

.move-info-valor[b-ofe11uzzsl] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    text-align: right;
}

.move-info-valor--destaque[b-ofe11uzzsl] {
    font-weight: bold;
}

/* ---------- Botões Adicionar/Subtrair — cada clique já grava na hora
   (igual antes), lado a lado. ---------- */
.move-botoes[b-ofe11uzzsl] {
    display: flex;
    gap: var(--espaco-3);
}

.move-botao[b-ofe11uzzsl] {
    flex: 1;
    height: 44px;
    border-radius: var(--canto-botao);
    border: none;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    cursor: pointer;
    transition: filter .15s;
}

    .move-botao:hover[b-ofe11uzzsl] {
        filter: brightness(0.92);
    }

.move-botao--adicionar[b-ofe11uzzsl] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.move-botao--subtrair[b-ofe11uzzsl] {
    background-color: var(--ep-erro-forte);
    color: var(--ep-branco);
}
/* /Components/Pages/Produtos/Filtros/Components/ProductComponent.razor.rz.scp.css */
/* Visual novo da modal de Produto (leva 39) — mesma receita das outras 4
   modais de cadastro do admin (Categoria/Marca/Modelo/Sabor, leva 31):
   upload de CategoryComponent.razor.css + cascata com select de
   FlavorComponent.razor.css. Cópia própria (isolamento do Blazor não
   deixa reaproveitar CSS entre arquivos), sem desenho no Figma pra essa
   modal específica. */

.cadastro-modal[b-eut1qlifou] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    padding: var(--espaco-5);
}

.cadastro-modal-cabecalho[b-eut1qlifou] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

.cadastro-modal-titulo[b-eut1qlifou] {
    font-family: var(--fonte-titulo);
    font-size: var(--subtitulo);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

.cadastro-modal-descricao[b-eut1qlifou] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-50);
}

.cadastro-modal-upload[b-eut1qlifou] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--espaco-3);
}

.cadastro-modal-upload-linha[b-eut1qlifou] {
    display: flex;
    align-items: center;
    gap: var(--espaco-3);
}

.cadastro-modal-foto-box[b-eut1qlifou] {
    width: 56px;
    flex-shrink: 0;
    padding: var(--espaco-3) var(--espaco-2);
    border: 1px solid rgba(0, 0, 0, 0.25);
    border-radius: var(--espaco-2);
    box-sizing: border-box;
    display: flex;
    align-items: center;
    justify-content: center;
}

.cadastro-modal-botao-upload[b-eut1qlifou] {
    height: 46px;
    padding: 0 var(--espaco-4);
    flex-shrink: 0;
    border-radius: var(--canto-botao);
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo-escuro);
    color: var(--ep-roxo-escuro);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
    transition: background-color .15s, color .15s;
}

.cadastro-modal-botao-upload:hover[b-eut1qlifou] {
    background-color: var(--ep-roxo-escuro);
    color: var(--ep-branco);
}

.cadastro-modal-nome-arquivo[b-eut1qlifou] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

.cadastro-modal-preview[b-eut1qlifou] {
    max-width: 100%;
    max-height: 40px;
    object-fit: contain;
}

/* O gap do .cadastro-modal só separa os filhos DIRETOS do cartão — o
   conteúdo do <EditForm> vira um <form>, um nível abaixo, então precisa do
   próprio flex+gap pra não ficar tudo colado. */
.cadastro-modal-form-corpo[b-eut1qlifou] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
}

.cadastro-modal-campo[b-eut1qlifou] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

.cadastro-modal-rotulo[b-eut1qlifou] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
}

/* Mesma receita de campo já usada no resto do site (leva 13c,
   AddressComponent.razor.css) — pílula com contorno roxo, sombra interna
   sutil e contorno verde no foco. */
.cadastro-modal-input[b-eut1qlifou],
.cadastro-modal-select[b-eut1qlifou] {
    height: var(--altura-campo);
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-campo);
    border: 1px solid var(--ep-roxo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    background-color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    box-sizing: border-box;
    appearance: none;
    -webkit-appearance: none;
}

.cadastro-modal-input[b-eut1qlifou]::placeholder {
    color: var(--ep-roxo-escuro);
    opacity: 1; /* sem isso o Firefox desbota sozinho */
}

/* Wrapper só do <select> — a seta é posicionada em relação a ele, não ao
   par rótulo+campo inteiro (.cadastro-modal-campo). */
.cadastro-modal-campo-select[b-eut1qlifou] {
    position: relative;
}

    .cadastro-modal-campo-select[b-eut1qlifou]::after {
        content: '';
        position: absolute;
        top: 50%;
        right: var(--espaco-4);
        width: 8px;
        height: 8px;
        border-right: 2px solid var(--ep-roxo-escuro);
        border-bottom: 2px solid var(--ep-roxo-escuro);
        transform: translateY(-70%) rotate(45deg);
        pointer-events: none;
    }

.cadastro-modal-input:focus[b-eut1qlifou],
.cadastro-modal-select:focus[b-eut1qlifou] {
    outline: 2px solid var(--ep-verde);
    outline-offset: 2px;
}

.cadastro-modal-divisor[b-eut1qlifou] {
    height: 0.5px;
    background-color: rgba(0, 0, 0, 0.25);
}

.cadastro-modal-botao-salvar[b-eut1qlifou] {
    height: 44px;
    width: 100%;
    border-radius: var(--canto-botao);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
    transition: filter .15s;
}

.cadastro-modal-botao-salvar:hover[b-eut1qlifou] {
    filter: brightness(0.92);
}

.disable-right-click[b-eut1qlifou] {
    pointer-events: none;
    user-select: none;
}
/* /Components/Pages/Produtos/Filtros/Components/PromotionComponent.razor.rz.scp.css */
/* Visual novo da modal de Promoção — mesma receita geral da modal de
   Categoria (CategoryComponent.razor.css), leva 31. Sem o círculo de ícone
   (removido a pedido do dono). */

.cadastro-modal[b-46v7686y3e] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
    padding: var(--espaco-5);
}

.cadastro-modal-cabecalho[b-46v7686y3e] {
    display: flex;
    align-items: center;
    gap: var(--espaco-3);
}

.cadastro-modal-titulo[b-46v7686y3e] {
    font-family: var(--fonte-titulo);
    font-size: var(--subtitulo);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
}

/* Alterna Ativo/Inativo — trilho igual ao dos campos de texto (fundo
   branco, contorno roxo fino, sombra interna), com uma pílula verde que
   desliza por baixo pra indicar o lado ativo. */
.cadastro-modal-toggle[b-46v7686y3e] {
    position: relative;
    display: flex;
    padding: 4px;
    border-radius: var(--canto-botao);
    background-color: var(--ep-branco);
    border: 0.5px solid var(--ep-roxo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
}

.cadastro-modal-toggle-thumb[b-46v7686y3e] {
    position: absolute;
    top: 4px;
    left: 4px;
    width: calc(50% - 4px);
    height: calc(100% - 8px);
    border-radius: var(--canto-botao);
    background-color: var(--ep-verde);
    transition: transform .2s ease, background-color .2s ease;
}

.cadastro-modal-toggle-thumb--inativo[b-46v7686y3e] {
    transform: translateX(100%);
    background-color: rgba(0, 0, 0, 0.25);
}

.cadastro-modal-toggle-opcao[b-46v7686y3e] {
    position: relative;
    z-index: 1;
    flex: 1;
    height: 28px;
    border: none;
    background-color: transparent;
    color: var(--ds-cinza-50);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    cursor: pointer;
    transition: color .2s ease;
}

.cadastro-modal-toggle-opcao--ativo[b-46v7686y3e] {
    color: var(--ep-roxo-escuro);
}

.cadastro-modal-toggle-opcao--inativo-selecionado[b-46v7686y3e] {
    color: var(--ep-branco);
}

.cadastro-modal-subtitulo[b-46v7686y3e] {
    font-family: var(--fonte-corpo);
    font-weight: 600;
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
    margin: 0;
}

.cadastro-modal-campo[b-46v7686y3e] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
}

.cadastro-modal-rotulo[b-46v7686y3e] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-75);
}

/* Mesma receita de campo já usada no resto do site (leva 13c,
   AddressComponent.razor.css) — pílula com contorno roxo, sombra interna
   sutil e contorno verde no foco. */
.cadastro-modal-input[b-46v7686y3e] {
    height: var(--altura-campo);
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-campo);
    border: 1px solid var(--ep-roxo);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    background-color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    box-sizing: border-box;
    appearance: none;
    -webkit-appearance: none;
}

.cadastro-modal-input:focus[b-46v7686y3e] {
    outline: 2px solid var(--ep-verde);
    outline-offset: 2px;
}

/* Tira a setinha de cima/baixo do <input type="number"> — pedido do dono,
   os dois campos (Desconto/Preço final) já se digitam direto. */
.cadastro-modal-input[b-46v7686y3e]::-webkit-inner-spin-button,
.cadastro-modal-input[b-46v7686y3e]::-webkit-outer-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

.cadastro-modal-input[type="number"][b-46v7686y3e] {
    -moz-appearance: textfield;
}

.cadastro-modal-botao-salvar[b-46v7686y3e] {
    height: 44px;
    width: 100%;
    border-radius: var(--canto-botao);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
    transition: filter .15s;
}

.cadastro-modal-botao-salvar:hover[b-46v7686y3e] {
    filter: brightness(0.92);
}

/* Aviso amarelo — mesmo par de cores do resto do site (--ep-aviso-escuro),
   fundo claro próprio do Figma desta modal. */
.cadastro-modal-aviso[b-46v7686y3e] {
    padding: var(--espaco-3);
    border-radius: var(--espaco-3);
    background-color: #fff6de;
    color: var(--ep-aviso-escuro);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
}
/* /Components/Pages/Produtos/Filtros/Flavor.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO — /manager/flavor (leva 32), a partir do grupo Figma
   "REDESIGN — Sabores" (arquivo EUPHORIA, página "02 - Telas"). Mesma
   casca de /manager/category, /manager/brend e /manager/model (leva 32) —
   ver ai/DESIGN_SYSTEM.md, "Banner do título". Único breakpoint do site:
   1000px.
   ========================================================================== */

.flavor-pagina[b-gy4xejfrsm] {
    background-color: var(--ep-cinza-100);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.flavor-hero[b-gy4xejfrsm] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-5);

    display: flex;
    flex-direction: column;
    align-items: center;

    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.flavor-caminho[b-gy4xejfrsm] {
    display: block;
    align-self: flex-start;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    margin-bottom: var(--espaco-2);
    padding-left: var(--espaco-4);
}

    .flavor-caminho a[b-gy4xejfrsm] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .flavor-caminho a:hover[b-gy4xejfrsm] {
            text-decoration: underline;
        }

.flavor-titulo[b-gy4xejfrsm] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: 32px;
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0 0 var(--espaco-3);
}

.flavor-contador[b-gy4xejfrsm] {
    display: inline-block;
    background-color: var(--ep-roxo-escuro);
    border: 1px solid var(--ep-branco);
    border-radius: var(--canto-botao);
    padding: var(--espaco-1) var(--espaco-4);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    color: var(--ep-branco);
}

/* ---------- Card branco de conteúdo ---------- */
.flavor-card[b-gy4xejfrsm] {
    background-color: var(--ep-branco);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
}

/* ---------- Botões ---------- */
.flavor-botao[b-gy4xejfrsm] {
    height: 44px;
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    text-align: center;
    cursor: pointer;
    flex-shrink: 0;
}

.flavor-botao--verde[b-gy4xejfrsm] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
}

.flavor-botao--roxo[b-gy4xejfrsm] {
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
    border: none;
}

.flavor-botao--contorno[b-gy4xejfrsm] {
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px solid var(--ep-roxo);
}

/* ---------- Filtros ("Cadastrar" na mesma linha) ---------- */
.flavor-filtros[b-gy4xejfrsm] {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--espaco-2);
    margin-bottom: var(--espaco-4);
}

    .flavor-filtros .flavor-botao[b-gy4xejfrsm] {
        width: auto;
    }

/* ---------- Selects (mesmo padrão de .inventory-select-caixa) ---------- */
.flavor-select-caixa[b-gy4xejfrsm] {
    position: relative;
    width: 100%;
    flex: 1 1 130px;
}

.flavor-select[b-gy4xejfrsm] {
    width: 100%;
    box-sizing: border-box;
    appearance: none;
    background-color: var(--ep-branco);
    border: 1px solid var(--ds-cinza-15);
    border-radius: var(--canto-botao);
    padding: 14px 44px 14px 22px;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    cursor: pointer;
}

    .flavor-select:focus[b-gy4xejfrsm] {
        outline: none;
        border-color: var(--ep-roxo);
    }

.flavor-select-caret[b-gy4xejfrsm] {
    position: absolute;
    top: 50%;
    right: 22px;
    transform: translateY(-50%);
    color: var(--ep-roxo-escuro);
    pointer-events: none;
}

/* ---------- Busca (mesmo padrão de .inventory-busca-caixa) ---------- */
.flavor-busca-caixa[b-gy4xejfrsm] {
    position: relative;
    width: 100%;
    flex: 1 1 160px;
}

    .flavor-busca-caixa input[b-gy4xejfrsm] {
        width: 100%;
        box-sizing: border-box;
        background-color: var(--ep-branco);
        border: 1px solid var(--ds-cinza-15);
        border-radius: var(--canto-campo);
        padding: 14px 22px 14px 44px;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        color: var(--ep-roxo-escuro);
    }

        .flavor-busca-caixa input:focus[b-gy4xejfrsm] {
            outline: none;
            border-color: var(--ep-roxo);
        }

    .flavor-busca-caixa i[b-gy4xejfrsm] {
        position: absolute;
        top: 50%;
        left: 16px;
        transform: translateY(-50%);
        color: var(--ep-roxo-escuro);
        opacity: 0.6;
        pointer-events: none;
    }

/* ---------- Tabela (computador) — cabeçalho roxo, pílula ---------- */
.flavor-tabela-wrap[b-gy4xejfrsm] {
    display: none;
    overflow-x: auto;
}

.flavor-tabela[b-gy4xejfrsm] {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
}

    .flavor-tabela thead[b-gy4xejfrsm] {
        background-color: var(--ep-roxo);
    }

    .flavor-tabela th[b-gy4xejfrsm] {
        text-align: left;
        font-weight: normal;
        color: var(--ep-branco);
        padding: var(--espaco-3);
        white-space: nowrap;
    }

        .flavor-tabela th:first-child[b-gy4xejfrsm] {
            border-radius: var(--canto-botao) 0 0 var(--canto-botao);
        }

        .flavor-tabela th:last-child[b-gy4xejfrsm] {
            border-radius: 0 var(--canto-botao) var(--canto-botao) 0;
            text-align: right;
        }

    .flavor-tabela td[b-gy4xejfrsm] {
        padding: var(--espaco-2) var(--espaco-3);
        border-top: 1px solid var(--ds-cinza-15);
        color: var(--ds-cinza-75);
        white-space: nowrap;
    }

    .flavor-tabela tbody tr:first-child td[b-gy4xejfrsm] {
        border-top: none;
    }

/* ---------- Cartões (celular) — no lugar da tabela ---------- */
.flavor-cards-mobile[b-gy4xejfrsm] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

.flavor-item-card[b-gy4xejfrsm] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
    background-color: var(--ep-branco);
    border: 0.5px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: 0 4px 7.6px rgba(0, 0, 0, 0.15);
    padding: var(--espaco-3);
}

.flavor-item-modelo[b-gy4xejfrsm] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

.flavor-item-nome[b-gy4xejfrsm] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

.flavor-item-card .flavor-acoes[b-gy4xejfrsm] {
    margin-top: var(--espaco-2);
}

/* ---------- Ações (botões circulares) ---------- */
.flavor-acoes[b-gy4xejfrsm] {
    display: flex;
    gap: var(--espaco-2);
    justify-content: flex-end;
}

.flavor-icone[b-gy4xejfrsm] {
    width: 32px;
    height: 32px;
    border: none;
    border-radius: var(--canto-redondo);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--ep-branco);
    cursor: pointer;
    flex-shrink: 0;
}

.flavor-icone--editar[b-gy4xejfrsm] {
    background-color: var(--ep-aviso);
    color: var(--ep-preto);
}

.flavor-icone--excluir[b-gy4xejfrsm] {
    background-color: var(--ep-erro-forte);
}

/* ---------- Paginação ---------- */
.flavor-paginacao[b-gy4xejfrsm] {
    display: flex;
    gap: var(--espaco-3);
    margin-top: var(--espaco-4);
}

    .flavor-paginacao .flavor-botao[b-gy4xejfrsm] {
        width: auto;
        flex: 1;
    }

/* ---------- Estados vazio / carregando ---------- */
.flavor-vazio[b-gy4xejfrsm] {
    text-align: center;
    padding: var(--espaco-6) 0;
}

    .flavor-vazio i[b-gy4xejfrsm] {
        font-size: 48px;
        color: var(--ep-roxo);
    }

    .flavor-vazio h3[b-gy4xejfrsm] {
        color: var(--ep-verde-escuro);
        margin-top: var(--espaco-3);
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        font-weight: normal;
    }

.flavor-carregando[b-gy4xejfrsm] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .flavor-pagina[b-gy4xejfrsm] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .flavor-hero[b-gy4xejfrsm] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: var(--espaco-5);
        margin-bottom: var(--espaco-9);

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .flavor-titulo[b-gy4xejfrsm] {
        font-size: var(--titulo-1);
    }

    .flavor-caminho[b-gy4xejfrsm] {
        padding-left: var(--espaco-5);
    }

    .flavor-filtros[b-gy4xejfrsm] {
        flex-direction: row;
        align-items: center;
    }

    .flavor-select-caixa[b-gy4xejfrsm] {
        flex: 0 0 160px;
    }

    .flavor-busca-caixa[b-gy4xejfrsm] {
        flex: 1;
    }

    /* Tabela some, cartões viram tabela — troca só no breakpoint. */
    .flavor-tabela-wrap[b-gy4xejfrsm] {
        display: block;
    }

    .flavor-cards-mobile[b-gy4xejfrsm] {
        display: none;
    }

    .flavor-paginacao .flavor-botao[b-gy4xejfrsm] {
        flex: none;
    }

    .flavor-icone[b-gy4xejfrsm] {
        width: 36px;
        height: 36px;
    }
}

/* Aviso de exclusão — mesma casca do modal de excluir produto do carrinho
   (OrderCheckout.razor.css); cópia própria porque o isolamento do Blazor
   não deixa reaproveitar o CSS de lá. */
.confirmar-exclusao-fundo[b-gy4xejfrsm] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    padding: var(--espaco-4);
}

.confirmar-exclusao-caixa[b-gy4xejfrsm] {
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-4);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.confirmar-exclusao-icone img[b-gy4xejfrsm] {
    width: 144px;
    height: 144px;
    object-fit: contain;
}

.confirmar-exclusao-pergunta[b-gy4xejfrsm] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-descricao[b-gy4xejfrsm] {
    font-family: var(--fonte-corpo);
    font-weight: 400;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-botoes[b-gy4xejfrsm] {
    display: flex;
    gap: var(--espaco-3);
    width: 100%;
    margin-top: var(--espaco-4);
}

.confirmar-exclusao-nao[b-gy4xejfrsm],
.confirmar-exclusao-sim[b-gy4xejfrsm] {
    flex: 1;
    height: 39px;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    border: none;
    cursor: pointer;
}

.confirmar-exclusao-nao[b-gy4xejfrsm] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.confirmar-exclusao-sim[b-gy4xejfrsm] {
    background-color: var(--ep-erro-forte);
    color: var(--ep-branco);
}
/* /Components/Pages/Produtos/Filtros/Model.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO — /manager/model (leva 32), a partir do grupo Figma
   "REDESIGN — Modelos" (arquivo EUPHORIA, página "02 - Telas"). Mesma
   casca de /manager/category e /manager/brend (leva 32) — ver
   ai/DESIGN_SYSTEM.md, "Banner do título". Único breakpoint do site: 1000px.
   ========================================================================== */

.model-pagina[b-i8plfh9elk] {
    background-color: var(--ep-cinza-100);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.model-hero[b-i8plfh9elk] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-5);

    display: flex;
    flex-direction: column;
    align-items: center;

    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.model-caminho[b-i8plfh9elk] {
    display: block;
    align-self: flex-start;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    margin-bottom: var(--espaco-2);
    padding-left: var(--espaco-4);
}

    .model-caminho a[b-i8plfh9elk] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .model-caminho a:hover[b-i8plfh9elk] {
            text-decoration: underline;
        }

.model-titulo[b-i8plfh9elk] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: 32px;
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0 0 var(--espaco-3);
}

.model-contador[b-i8plfh9elk] {
    display: inline-block;
    background-color: var(--ep-roxo-escuro);
    border: 1px solid var(--ep-branco);
    border-radius: var(--canto-botao);
    padding: var(--espaco-1) var(--espaco-4);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    color: var(--ep-branco);
}

/* ---------- Card branco de conteúdo ---------- */
.model-card[b-i8plfh9elk] {
    background-color: var(--ep-branco);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
}

/* ---------- Botões ---------- */
.model-botao[b-i8plfh9elk] {
    height: 44px;
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    text-align: center;
    cursor: pointer;
    flex-shrink: 0;
}

.model-botao--verde[b-i8plfh9elk] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
}

.model-botao--roxo[b-i8plfh9elk] {
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
    border: none;
}

.model-botao--contorno[b-i8plfh9elk] {
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px solid var(--ep-roxo);
}

/* ---------- Filtros ("Cadastrar" na mesma linha) ---------- */
.model-filtros[b-i8plfh9elk] {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--espaco-2);
    margin-bottom: var(--espaco-4);
}

    .model-filtros .model-botao[b-i8plfh9elk] {
        width: auto;
    }

/* ---------- Selects (mesmo padrão de .inventory-select-caixa) ---------- */
.model-select-caixa[b-i8plfh9elk] {
    position: relative;
    width: 100%;
    flex: 1 1 140px;
}

.model-select[b-i8plfh9elk] {
    width: 100%;
    box-sizing: border-box;
    appearance: none;
    background-color: var(--ep-branco);
    border: 1px solid var(--ds-cinza-15);
    border-radius: var(--canto-botao);
    padding: 14px 44px 14px 22px;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    cursor: pointer;
}

    .model-select:focus[b-i8plfh9elk] {
        outline: none;
        border-color: var(--ep-roxo);
    }

.model-select-caret[b-i8plfh9elk] {
    position: absolute;
    top: 50%;
    right: 22px;
    transform: translateY(-50%);
    color: var(--ep-roxo-escuro);
    pointer-events: none;
}

/* ---------- Busca (mesmo padrão de .inventory-busca-caixa) ---------- */
.model-busca-caixa[b-i8plfh9elk] {
    position: relative;
    width: 100%;
    flex: 1 1 160px;
}

    .model-busca-caixa input[b-i8plfh9elk] {
        width: 100%;
        box-sizing: border-box;
        background-color: var(--ep-branco);
        border: 1px solid var(--ds-cinza-15);
        border-radius: var(--canto-campo);
        padding: 14px 22px 14px 44px;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        color: var(--ep-roxo-escuro);
    }

        .model-busca-caixa input:focus[b-i8plfh9elk] {
            outline: none;
            border-color: var(--ep-roxo);
        }

    .model-busca-caixa i[b-i8plfh9elk] {
        position: absolute;
        top: 50%;
        left: 16px;
        transform: translateY(-50%);
        color: var(--ep-roxo-escuro);
        opacity: 0.6;
        pointer-events: none;
    }

/* ---------- Checkbox "Em promoção" — não estava no Figma (achado
   depois, leva 31); mesmo radiobox customizado já usado em
   /myorders (MyOrders.razor.css, ".pedidos-filtro") em vez do checkbox
   nativo do navegador. */
.model-checkbox[b-i8plfh9elk] {
    align-self: center;
    display: inline-flex;
    align-items: center;
    gap: var(--espaco-2);
    background-color: var(--ep-roxo);
    border-radius: var(--canto-botao);
    padding: 14px var(--espaco-4);
    cursor: pointer;
    user-select: none;
    flex-shrink: 0;
}

    .model-checkbox input[b-i8plfh9elk] {
        position: absolute;
        width: 1px;
        height: 1px;
        opacity: 0;
        pointer-events: none;
    }

.model-checkbox-bolinha[b-i8plfh9elk] {
    width: 16px;
    height: 16px;
    border-radius: 50%;
    background-color: transparent;
    border: 2px solid var(--ep-branco);
    flex-shrink: 0;
    transition: background-color .15s ease;
}

.model-checkbox input:checked + .model-checkbox-bolinha[b-i8plfh9elk] {
    background-color: var(--ep-branco);
}

.model-checkbox-texto[b-i8plfh9elk] {
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    line-height: 1;
    white-space: nowrap;
}

/* ---------- Tabela (computador) — cabeçalho roxo, pílula ---------- */
.model-tabela-wrap[b-i8plfh9elk] {
    display: none;
    overflow-x: auto;
}

.model-tabela[b-i8plfh9elk] {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
}

    .model-tabela thead[b-i8plfh9elk] {
        background-color: var(--ep-roxo);
    }

    .model-tabela th[b-i8plfh9elk] {
        text-align: left;
        font-weight: normal;
        color: var(--ep-branco);
        padding: var(--espaco-3);
        white-space: nowrap;
    }

        .model-tabela th:first-child[b-i8plfh9elk] {
            border-radius: var(--canto-botao) 0 0 var(--canto-botao);
        }

        /* Ações aqui tem 5 botões (bem mais largo que Categoria/Marca).
           A palavra "Ações" precisa nascer exatamente onde o primeiro
           ícone começa, com os ícones colados na direita da coluna — os
           dois (span do título, .model-acoes) têm a MESMA largura fixa
           (5 ícones de 36px + 4 vãos de --espaco-2) e ficam colados na
           borda direita da própria coluna/célula; como a caixa é do
           mesmo tamanho nos dois lados, a borda ESQUERDA de uma cai
           exatamente em cima da borda esquerda da outra. */
        .model-tabela th:last-child[b-i8plfh9elk] {
            border-radius: 0 var(--canto-botao) var(--canto-botao) 0;
            width: 45%;
            text-align: right;
        }

    .model-tabela td[b-i8plfh9elk] {
        padding: var(--espaco-2) var(--espaco-3);
        border-top: 1px solid var(--ds-cinza-15);
        color: var(--ds-cinza-75);
        white-space: nowrap;
    }

    .model-tabela tbody tr:first-child td[b-i8plfh9elk] {
        border-top: none;
    }

/* ---------- Cartões (celular) — no lugar da tabela ---------- */
.model-cards-mobile[b-i8plfh9elk] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

.model-item-card[b-i8plfh9elk] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
    background-color: var(--ep-branco);
    border: 0.5px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: 0 4px 7.6px rgba(0, 0, 0, 0.15);
    padding: var(--espaco-3);
}

.model-item-nome[b-i8plfh9elk] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

.model-item-puffs[b-i8plfh9elk] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

.model-item-card .model-acoes[b-i8plfh9elk] {
    margin-top: var(--espaco-2);
}

/* ---------- Ações (botões circulares) — ícones na direita da coluna. ---------- */
.model-acoes[b-i8plfh9elk] {
    display: flex;
    gap: var(--espaco-2);
    justify-content: flex-end;
}

/* Só na tabela do computador: caixa de largura FIXA (5 ícones de 36px +
   4 vãos de --espaco-2 = 212px), colada na borda direita da célula —
   mesma largura do span do cabeçalho (.model-acoes-titulo, ver
   th:last-child acima), pra que a borda esquerda das duas caixas coincida
   exatamente (a palavra "Ações" nasce em cima do primeiro ícone). */
.model-tabela .model-acoes[b-i8plfh9elk] {
    width: 212px;
    margin-left: auto;
    justify-content: flex-start;
}

.model-acoes-titulo[b-i8plfh9elk] {
    display: inline-block;
    width: 212px;
    text-align: left;
}

.model-icone[b-i8plfh9elk] {
    width: 32px;
    height: 32px;
    border: none;
    border-radius: var(--canto-redondo);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--ep-branco);
    cursor: pointer;
    flex-shrink: 0;
}

.model-icone--editar[b-i8plfh9elk] {
    background-color: var(--ep-aviso);
    color: var(--ep-preto);
}

.model-icone--excluir[b-i8plfh9elk],
.model-icone--inativar[b-i8plfh9elk] {
    background-color: var(--ep-erro-forte);
}

.model-icone--ativar[b-i8plfh9elk] {
    background-color: var(--ep-sucesso);
}

.model-icone--promocao[b-i8plfh9elk],
.model-icone--preco[b-i8plfh9elk] {
    background-color: var(--ep-turquesa);
    color: var(--ep-roxo-quase-preto);
}

/* ---------- Paginação ---------- */
.model-paginacao[b-i8plfh9elk] {
    display: flex;
    gap: var(--espaco-3);
    margin-top: var(--espaco-4);
}

    .model-paginacao .model-botao[b-i8plfh9elk] {
        width: auto;
        flex: 1;
    }

/* ---------- Estados vazio / carregando ---------- */
.model-vazio[b-i8plfh9elk] {
    text-align: center;
    padding: var(--espaco-6) 0;
}

    .model-vazio i[b-i8plfh9elk] {
        font-size: 48px;
        color: var(--ep-roxo);
    }

    .model-vazio h3[b-i8plfh9elk] {
        color: var(--ep-verde-escuro);
        margin-top: var(--espaco-3);
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        font-weight: normal;
    }

.model-carregando[b-i8plfh9elk] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .model-pagina[b-i8plfh9elk] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .model-hero[b-i8plfh9elk] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: var(--espaco-5);
        margin-bottom: var(--espaco-9);

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .model-titulo[b-i8plfh9elk] {
        font-size: var(--titulo-1);
    }

    .model-caminho[b-i8plfh9elk] {
        padding-left: var(--espaco-5);
    }

    .model-filtros[b-i8plfh9elk] {
        flex-direction: row;
        align-items: center;
    }

    .model-select-caixa[b-i8plfh9elk] {
        flex: 0 0 180px;
    }

    .model-busca-caixa[b-i8plfh9elk] {
        flex: 1;
    }

    /* Tabela some, cartões viram tabela — troca só no breakpoint. */
    .model-tabela-wrap[b-i8plfh9elk] {
        display: block;
    }

    .model-cards-mobile[b-i8plfh9elk] {
        display: none;
    }

    .model-paginacao .model-botao[b-i8plfh9elk] {
        flex: none;
    }

    .model-icone[b-i8plfh9elk] {
        width: 36px;
        height: 36px;
    }
}

/* Aviso de exclusão / ativar-inativar — mesma casca do modal de excluir
   produto do carrinho (OrderCheckout.razor.css); cópia própria porque o
   isolamento do Blazor não deixa reaproveitar o CSS de lá. */
.confirmar-exclusao-fundo[b-i8plfh9elk] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    padding: var(--espaco-4);
}

.confirmar-exclusao-caixa[b-i8plfh9elk] {
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-4);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.confirmar-exclusao-icone img[b-i8plfh9elk] {
    width: 144px;
    height: 144px;
    object-fit: contain;
}

.confirmar-exclusao-pergunta[b-i8plfh9elk] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-descricao[b-i8plfh9elk] {
    font-family: var(--fonte-corpo);
    font-weight: 400;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-botoes[b-i8plfh9elk] {
    display: flex;
    gap: var(--espaco-3);
    width: 100%;
    margin-top: var(--espaco-4);
}

.confirmar-exclusao-nao[b-i8plfh9elk],
.confirmar-exclusao-sim[b-i8plfh9elk] {
    flex: 1;
    height: 39px;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    border: none;
    cursor: pointer;
}

.confirmar-exclusao-nao[b-i8plfh9elk] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.confirmar-exclusao-sim[b-i8plfh9elk] {
    background-color: var(--ep-erro-forte);
    color: var(--ep-branco);
}
/* /Components/Pages/Produtos/Inventory.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO — /inventory (leva 30), a partir do grupo Figma "REDESIGN —
   Produtos (Inventory)" (arquivo EUPHORIA, página "02 - Telas"). Mesma
   casca de /estoque/massa (leva 29) — ver ai/DESIGN_SYSTEM.md, "Banner do
   título". Único breakpoint do site: 1000px.

   Select e busca reaproveitam padrão já usado em OrderCheckout.razor.css
   (.ordercheckout-select-caixa / .ordercheckout-trocar-modal-busca) —
   pedido do dono no teste ao vivo, em vez de inventar um novo.
   ========================================================================== */

.inventory-pagina[b-re7fpbmy4p] {
    background-color: var(--ep-cinza-100);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.inventory-hero[b-re7fpbmy4p] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-5);

    display: flex;
    flex-direction: column;
    align-items: center;

    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.inventory-caminho[b-re7fpbmy4p] {
    display: block;
    align-self: flex-start;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    margin-bottom: var(--espaco-2);
    padding-left: var(--espaco-4);
}

    .inventory-caminho a[b-re7fpbmy4p] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .inventory-caminho a:hover[b-re7fpbmy4p] {
            text-decoration: underline;
        }

.inventory-titulo[b-re7fpbmy4p] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-3);
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0 0 var(--espaco-3);
}

.inventory-contador[b-re7fpbmy4p] {
    display: inline-block;
    background-color: var(--ep-roxo-escuro);
    border: 1px solid var(--ep-branco);
    border-radius: var(--canto-botao);
    padding: var(--espaco-1) var(--espaco-4);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    color: var(--ep-branco);
}

/* ---------- Card branco de conteúdo ---------- */
.inventory-card[b-re7fpbmy4p] {
    background-color: var(--ep-branco);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
}

/* ---------- Botões ---------- */
.inventory-botao[b-re7fpbmy4p] {
    height: 44px;
    width: 100%;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    text-align: center;
    cursor: pointer;
    flex-shrink: 0;
}

.inventory-botao--verde[b-re7fpbmy4p] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
}

.inventory-botao--roxo[b-re7fpbmy4p] {
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
    border: none;
}

.inventory-botao--contorno[b-re7fpbmy4p] {
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px solid var(--ep-roxo);
}

/* Botão "+" de cadastrar — quadrado e compacto (pedido do dono: "só +",
   pra sobrar espaço pros inputs do filtro na mesma linha). */
.inventory-botao--cadastrar[b-re7fpbmy4p] {
    width: 44px;
    flex: 0 0 44px;
    padding: 0;
    font-size: 22px;
    display: flex;
    align-items: center;
    justify-content: center;
}

/* ---------- Filtros ("Cadastrar" na mesma linha, pedido do dono) ---------- */
.inventory-filtros[b-re7fpbmy4p] {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--espaco-2);
    margin-bottom: var(--espaco-4);
}

/* ---------- Select (mesmo padrão de .ordercheckout-select-caixa) ---------- */
.inventory-select-caixa[b-re7fpbmy4p] {
    position: relative;
    width: 100%;
    flex: 1 1 140px;
}

.inventory-select[b-re7fpbmy4p] {
    width: 100%;
    box-sizing: border-box;
    appearance: none;
    background-color: var(--ep-branco);
    border: 1px solid var(--ds-cinza-15);
    border-radius: var(--canto-botao);
    padding: 14px 44px 14px 22px;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    cursor: pointer;
}

    .inventory-select:focus[b-re7fpbmy4p] {
        outline: none;
        border-color: var(--ep-roxo);
    }

.inventory-select-caret[b-re7fpbmy4p] {
    position: absolute;
    top: 50%;
    right: 22px;
    transform: translateY(-50%);
    color: var(--ep-roxo-escuro);
    pointer-events: none;
}

/* ---------- Busca (mesmo padrão de .ordercheckout-trocar-modal-busca) ---------- */
.inventory-busca-caixa[b-re7fpbmy4p] {
    position: relative;
    width: 100%;
    flex: 1 1 160px;
}

    .inventory-busca-caixa input[b-re7fpbmy4p] {
        width: 100%;
        box-sizing: border-box;
        background-color: var(--ep-branco);
        border: 1px solid var(--ds-cinza-15);
        border-radius: var(--canto-campo);
        padding: 14px 22px 14px 44px;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        color: var(--ep-roxo-escuro);
    }

        .inventory-busca-caixa input:focus[b-re7fpbmy4p] {
            outline: none;
            border-color: var(--ep-roxo);
        }

    .inventory-busca-caixa i[b-re7fpbmy4p] {
        position: absolute;
        top: 50%;
        left: 16px;
        transform: translateY(-50%);
        color: var(--ep-roxo-escuro);
        opacity: 0.6;
        pointer-events: none;
    }

/* ---------- Tabela (computador) — cabeçalho roxo, pílula ---------- */
.inventory-tabela-wrap[b-re7fpbmy4p] {
    display: none;
    overflow-x: auto;
}

.inventory-tabela[b-re7fpbmy4p] {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
}

    .inventory-tabela thead[b-re7fpbmy4p] {
        background-color: var(--ep-roxo);
    }

    .inventory-tabela th[b-re7fpbmy4p] {
        text-align: left;
        font-weight: normal;
        color: var(--ep-branco);
        padding: var(--espaco-3);
        white-space: nowrap;
    }

    /* Cabeçalhos clicáveis pra ordenar (pedido do dono no teste ao vivo) —
       a setinha só aparece na coluna ativa, indicando crescente/decrescente. */
    .inventory-th-ordenavel[b-re7fpbmy4p] {
        cursor: pointer;
        user-select: none;
    }

        .inventory-th-ordenavel i[b-re7fpbmy4p] {
            margin-left: var(--espaco-1);
            font-size: 0.85em;
        }

        .inventory-th-ordenavel:hover[b-re7fpbmy4p] {
            color: var(--ep-verde);
        }

        .inventory-tabela th:first-child[b-re7fpbmy4p] {
            border-radius: var(--canto-botao) 0 0 var(--canto-botao);
        }

        .inventory-tabela th:last-child[b-re7fpbmy4p] {
            border-radius: 0 var(--canto-botao) var(--canto-botao) 0;
        }

    .inventory-tabela td[b-re7fpbmy4p] {
        padding: var(--espaco-2) var(--espaco-3);
        border-top: 1px solid var(--ds-cinza-15);
        color: var(--ds-cinza-75);
        white-space: nowrap;
    }

    /* Sem linha divisória colada embaixo do cabeçalho roxo — pedido do
       dono no teste ao vivo. As linhas entre as outras linhas continuam. */
    .inventory-tabela tbody tr:first-child td[b-re7fpbmy4p] {
        border-top: none;
    }

.inventory-qtd-zero[b-re7fpbmy4p] {
    display: inline-block;
    background-color: #FFE2E2;
    color: var(--ep-erro-forte);
    border-radius: var(--canto-botao);
    padding: 2px var(--espaco-2);
    font-weight: normal;
}

/* Mesmo padrão do badge vermelho de "sem estoque", em verde — mesma
   dupla cor já usada em .estoque-massa-aviso--ok (EstoqueMassa.razor.css). */
.inventory-qtd-positivo[b-re7fpbmy4p] {
    display: inline-block;
    background-color: #E2FBEF;
    color: var(--ep-sucesso);
    border-radius: var(--canto-botao);
    padding: 2px var(--espaco-2);
    font-weight: normal;
}

/* ---------- Cartões (celular) — no lugar da tabela, sem rolar de lado ---------- */
.inventory-cards-mobile[b-re7fpbmy4p] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

/* Mesmo padrão do card de produto do carrinho (CartComponent.razor.css,
   .cart-item) — branco, stroke roxo 0.5, canto 16px. Só a sombra muda:
   .15 de opacidade em vez dos .25 do --sombra-card padrão (pedido do
   dono, calibrado pra esta tela). */
.inventory-produto-card[b-re7fpbmy4p] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
    background-color: var(--ep-branco);
    border: 0.5px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: 0 4px 7.6px rgba(0, 0, 0, 0.15);
    padding: var(--espaco-3);
}

.inventory-produto-topo[b-re7fpbmy4p] {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.inventory-produto-codigo[b-re7fpbmy4p] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

.inventory-produto-nome[b-re7fpbmy4p] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

.inventory-produto-detalhe[b-re7fpbmy4p] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

.inventory-produto-rodape[b-re7fpbmy4p] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-top: var(--espaco-2);
}

.inventory-produto-valor[b-re7fpbmy4p] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

/* Valor + badge de qtd. juntos, um embaixo do outro (pedido do dono:
   descer o badge pra perto do valor, em coluna, e aumentar a fonte). */
.inventory-produto-valor-qtd[b-re7fpbmy4p] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--espaco-1);
}

    .inventory-produto-valor-qtd .inventory-qtd-zero[b-re7fpbmy4p],
    .inventory-produto-valor-qtd .inventory-qtd-positivo[b-re7fpbmy4p] {
        font-size: var(--legenda);
    }

/* ---------- Ações (botões circulares) ---------- */
.inventory-acoes[b-re7fpbmy4p] {
    display: flex;
    gap: var(--espaco-2);
}

.inventory-icone[b-re7fpbmy4p] {
    width: 36px;
    height: 36px;
    border: none;
    border-radius: var(--canto-redondo);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--ep-branco);
    text-decoration: none;
    cursor: pointer;
    flex-shrink: 0;
}

.inventory-icone--editar[b-re7fpbmy4p] {
    background-color: var(--ep-aviso);
    color: var(--ep-preto);
}

.inventory-icone--mover[b-re7fpbmy4p] {
    background-color: var(--ep-sucesso);
}

.inventory-icone--excluir[b-re7fpbmy4p] {
    background-color: var(--ep-erro-forte);
}

/* ---------- Paginação ---------- */
.inventory-paginacao[b-re7fpbmy4p] {
    display: flex;
    gap: var(--espaco-3);
    margin-top: var(--espaco-4);
}

    .inventory-paginacao .inventory-botao[b-re7fpbmy4p] {
        width: auto;
        flex: 1;
    }

/* ---------- Estados vazio / carregando ---------- */
.inventory-vazio[b-re7fpbmy4p] {
    text-align: center;
    padding: var(--espaco-6) 0;
}

    .inventory-vazio i[b-re7fpbmy4p] {
        font-size: 48px;
        color: var(--ep-roxo);
    }

    .inventory-vazio h3[b-re7fpbmy4p] {
        color: var(--ep-verde-escuro);
        margin-top: var(--espaco-3);
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        font-weight: normal;
    }

.inventory-carregando[b-re7fpbmy4p] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .inventory-pagina[b-re7fpbmy4p] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .inventory-hero[b-re7fpbmy4p] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        /* Era 80px — o gap de cima (abaixo da Nav_Bar até "Voltar") é só
           --espaco-3 (16px); 80px embaixo deixava o selo bem mais perto do
           topo do banner do que do fim. Igualado ao mesmo valor do
           celular (achado corrigindo o mesmo problema em Category.razor.css). */
        padding-bottom: var(--espaco-5);
        margin-bottom: var(--espaco-9);

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .inventory-titulo[b-re7fpbmy4p] {
        font-size: var(--titulo-1);
    }

    .inventory-caminho[b-re7fpbmy4p] {
        padding-left: var(--espaco-5);
    }

    .inventory-botao[b-re7fpbmy4p] {
        width: auto;
    }

    /* "+" continua quadrado e compacto no computador também — o texto
       "Cadastrar" saiu em qualquer tamanho de tela (pedido do dono). */
    .inventory-botao--cadastrar[b-re7fpbmy4p] {
        width: 44px;
    }

    /* Cadastrar + os 3 selects + busca + Filtrar, tudo na mesma linha —
       busca cresce pra preencher o espaço que sobra. */
    .inventory-filtros[b-re7fpbmy4p] {
        flex-direction: row;
        align-items: center;
    }

    .inventory-select-caixa[b-re7fpbmy4p] {
        flex: 0 0 180px;
    }

    .inventory-busca-caixa[b-re7fpbmy4p] {
        flex: 1;
    }

    /* Tabela some, cartões viram tabela — troca só no breakpoint. */
    .inventory-tabela-wrap[b-re7fpbmy4p] {
        display: block;
    }

    .inventory-cards-mobile[b-re7fpbmy4p] {
        display: none;
    }

    .inventory-paginacao .inventory-botao[b-re7fpbmy4p] {
        flex: none;
    }
}

/* ---------- Confirmação de exclusão (leva 39) — mesma casca
   "confirmar-exclusao-*" já usada no resto do admin (leva 31, ex.:
   Category.razor.css); cópia própria, isolamento do Blazor. Esta tela
   nunca teve exclusão nenhuma antes (vivia dentro do Product.razor
   antigo). ---------- */
.confirmar-exclusao-fundo[b-re7fpbmy4p] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    padding: var(--espaco-4);
}

.confirmar-exclusao-caixa[b-re7fpbmy4p] {
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-4);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.confirmar-exclusao-icone img[b-re7fpbmy4p] {
    width: 144px;
    height: 144px;
    object-fit: contain;
}

.confirmar-exclusao-pergunta[b-re7fpbmy4p] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-descricao[b-re7fpbmy4p] {
    font-family: var(--fonte-corpo);
    font-weight: 400;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-botoes[b-re7fpbmy4p] {
    display: flex;
    gap: var(--espaco-3);
    width: 100%;
    margin-top: var(--espaco-4);
}

.confirmar-exclusao-nao[b-re7fpbmy4p],
.confirmar-exclusao-sim[b-re7fpbmy4p] {
    flex: 1;
    height: 39px;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    border: none;
    cursor: pointer;
}

.confirmar-exclusao-nao[b-re7fpbmy4p] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.confirmar-exclusao-sim[b-re7fpbmy4p] {
    background-color: var(--ep-erro-forte);
    color: var(--ep-branco);
}
/* /Components/Pages/Produtos/InventoryList.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO — /inventory/list (leva 39, backlog 4.1). Sem desenho
   próprio no Figma pra essa tela; mesma casca do resto do admin: banner
   roxo sangrando + card branco. Único breakpoint: 1000px.
   ========================================================================== */

.inventorylist-pagina[b-lgduiq406t] {
    background-color: var(--ep-cinza-100);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.inventorylist-hero[b-lgduiq406t] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-5);

    display: flex;
    flex-direction: column;
    align-items: center;

    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.inventorylist-caminho[b-lgduiq406t] {
    display: block;
    align-self: flex-start;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    margin-bottom: var(--espaco-2);
    padding-left: var(--espaco-4);
}

    .inventorylist-caminho a[b-lgduiq406t] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .inventorylist-caminho a:hover[b-lgduiq406t] {
            text-decoration: underline;
        }

.inventorylist-titulo[b-lgduiq406t] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-5);
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0;
}

/* ---------- Card branco de conteúdo ----------
   Mais estreito que as telas de tabela do admin (só textarea + botão),
   mesma receita de /frete (CalcularFrete.razor.css) — max-width +
   margin:0 auto centraliza sozinho no computador; no celular a tela já
   é mais estreita que o limite, então enche 100% sem precisar de media
   query própria pra isso. */
.inventorylist-card[b-lgduiq406t] {
    background-color: var(--ep-branco);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
    max-width: 700px;
    width: 100%;
    box-sizing: border-box;
    margin: 0 auto;
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
}

/* Saída somente leitura (pra copiar, não editar) — mesma receita de campo
   já usada no site (leva 13c), com cursor default pra não parecer campo
   digitável. */
.inventorylist-textarea[b-lgduiq406t] {
    width: 100%;
    min-height: 340px;
    box-sizing: border-box;
    resize: vertical;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    /* --canto-campo é pensado pra campo de 1 linha (pílula, 999px) — numa
       caixa alta essa curva fica exagerada. Mesmo raio já usado nas
       textareas do site (--canto-card, ex.: .mensagem-acordeao-textarea
       do BuyOutApp). */
    border-radius: var(--canto-card);
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    padding: var(--espaco-3) var(--espaco-4);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    cursor: default;
}

    .inventorylist-textarea:focus[b-lgduiq406t] {
        outline: 2px solid var(--ep-verde);
        outline-offset: 2px;
    }

/* "Copiar tudo" + filtro "Mostrar quantidade" lado a lado (leva 64);
   empilha sozinho no celular se não couber, mesma receita de quebra
   automática já usada em .inventorylist-grade-like flex containers do
   admin. */
.inventorylist-acoes[b-lgduiq406t] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--espaco-3);
}

.inventorylist-botao[b-lgduiq406t] {
    height: 44px;
    width: 100%;
    padding: 0 var(--espaco-4);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    cursor: pointer;
}

/* ---------- Filtro "Mostrar quantidade" — mesma pílula+bolinha dos
   outros filtros booleanos do admin (receita em ConfigPainel.razor.css,
   ".configpainel-filtro"; ver ai memória "Admin redesign visual"). ---------- */
.inventorylist-filtro[b-lgduiq406t] {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: var(--espaco-2);
    align-self: flex-start;
    height: var(--altura-campo);
    padding: 0 var(--espaco-4);
    background-color: var(--ep-roxo);
    border-radius: var(--canto-botao);
    cursor: pointer;
    user-select: none;
}

    .inventorylist-filtro input[b-lgduiq406t] {
        position: absolute;
        width: 1px;
        height: 1px;
        opacity: 0;
        pointer-events: none;
    }

.inventorylist-filtro-bolinha[b-lgduiq406t] {
    width: 16px;
    height: 16px;
    border-radius: 50%;
    background-color: transparent;
    border: 2px solid var(--ep-branco);
    flex-shrink: 0;
    transition: background-color .15s ease;
}

.inventorylist-filtro input:checked + .inventorylist-filtro-bolinha[b-lgduiq406t] {
    background-color: var(--ep-branco);
}

.inventorylist-filtro-texto[b-lgduiq406t] {
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    font-weight: normal;
    line-height: 1;
    white-space: nowrap;
}

/* ---------- Estado vazio ---------- */
.inventorylist-vazio[b-lgduiq406t] {
    text-align: center;
    padding: var(--espaco-6) 0;
}

    .inventorylist-vazio i[b-lgduiq406t] {
        font-size: 48px;
        color: var(--ep-roxo);
    }

    .inventorylist-vazio h3[b-lgduiq406t] {
        color: var(--ep-verde-escuro);
        margin-top: var(--espaco-3);
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        font-weight: normal;
    }

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .inventorylist-pagina[b-lgduiq406t] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .inventorylist-hero[b-lgduiq406t] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: var(--espaco-5);
        margin-bottom: var(--espaco-5);

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .inventorylist-titulo[b-lgduiq406t] {
        font-size: var(--titulo-3);
    }

    .inventorylist-caminho[b-lgduiq406t] {
        padding-left: var(--espaco-5);
    }

    .inventorylist-card[b-lgduiq406t] {
        padding: var(--espaco-5);
    }

    .inventorylist-botao[b-lgduiq406t] {
        width: auto;
        align-self: flex-start;
    }
}
/* /Components/Pages/Shop/Brend.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO DA /brend/{id} — Sprint 08 / leva 11, 30/07/2026
   ----------------------------------------------------------------------------
   Mesma estrutura da Home/`/category` (Sprint 06). Único breakpoint do
   site: 1000px. Substitui os 8 breakpoints soltos que o arquivo tinha
   antes (375, 400, 414, 430, 767, 768, 991, 992).
   ========================================================================== */

.brend-pagina[b-xigzqoit3b] {
    background-color: var(--ep-verde);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
/* Mesma técnica do CategoriaHero.razor.css: sangra até a borda da JANELA
   (width:100vw + margin-left: calc(50% - 50vw)), não a do pai — funciona
   não importa o padding do elemento que envolve este banner. Canto de
   56px só embaixo, mesmo valor já usado nas ilustrações e nos painéis
   (decisão do dono: o Figma mede ~98px no computador, mas a Home já está
   no ar com 56 — vale a consistência). */
.brend-hero[b-xigzqoit3b] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4); /* 24px até a grade — igual à Home */

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);

    /* Sobe por baixo da Nav_Bar fixa (backlog 5.8) — o espaço que a barra
       reserva para si (.ep-navbar-espaco) não tem cor própria, só reserva
       altura; sem isso sobra uma tira branca entre a barra e o roxo. */
    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.brend-caminho[b-xigzqoit3b] {
    display: block;
    text-align: left; /* alinhado com a Nav_Bar, não centralizado com o título */
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda); /* 14px — não muda no computador */
    margin-bottom: var(--espaco-2);

    /* A Nav_Bar tem duas camadas de recuo: a pílula fica a
       --margem-lateral da borda (já herdado do padding do .brend-hero),
       e o CONTEÚDO de dentro da pílula (logo/hambúrguer) tem mais
       --espaco-4 (24px) de padding próprio da pílula — é essa segunda
       camada que faltava aqui para o "<" alinhar de verdade com o que
       aparece dentro da barra, não só com a borda dela. */
    padding-left: var(--espaco-4);
}

    .brend-caminho a[b-xigzqoit3b] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .brend-caminho a:hover[b-xigzqoit3b] {
            text-decoration: underline;
        }

.brend-titulo[b-xigzqoit3b] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-3);  /* 44px — medido no Figma (celular) */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center; /* centralizado na página, não à esquerda como o caminho */
    margin: 0;
}

/* ---------- Grade de marcas ---------- */
/* Mesmas classes de Category.razor.css — cartão da grade reaproveitado
   sem alteração (só foto + nome, igual à grade de categorias). Cada
   .razor.css só vale dentro do próprio componente (isolamento de CSS do
   Blazor), então repetir os nomes não causa conflito.

   flex, não grid: com "display:grid" e colunas 1fr, uma linha incompleta
   (menos marcas que colunas) preenche da esquerda e sobra vazio à
   direita — colunas 1fr sempre esticam pra ocupar 100%, sem espaço livre
   pro "justify-content" centralizar. Com flex + wrap, o navegador sobra
   o espaço da linha incompleta nas pontas, e "justify-content:center"
   centraliza de verdade — pedido do dono, testando nesta tela primeiro. */
.categoria-grid[b-xigzqoit3b] {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--espaco-6);
}

.categoria-card[b-xigzqoit3b] {
    position: relative;
    background-color: var(--ep-roxo);
    border-radius: 25px;
    height: 304px;
    width: 100%; /* celular: 1 coluna, igual ao "grid-template-columns:1fr" de antes */
    margin-top: 64px;

    display: flex;
    align-items: flex-end;
    justify-content: center;
    padding-bottom: var(--espaco-5);

    cursor: pointer;
    overflow: visible;
    transition: filter .15s, transform .15s ease;
}

    .categoria-card:hover[b-xigzqoit3b] {
        filter: brightness(1.08);
        transform: scale(1.03);
    }

/* Marca sem modelo cadastrado — mantém funcionando, sem desenho no
   Figma: apagada e sem clique, mesmo raciocínio do card antigo
   (.card-inactive). */
.categoria-card-inativo[b-xigzqoit3b] {
    cursor: default;
    filter: grayscale(100%) opacity(0.6);
}

    .categoria-card-inativo:hover[b-xigzqoit3b] {
        filter: grayscale(100%) opacity(0.6);
        transform: none; /* sem clique, sem zoom também */
    }

.categoria-card-imagem[b-xigzqoit3b] {
    position: absolute;
    bottom: 104px;
    left: 50%;
    transform: translateX(-50%);
    height: 250px; /* ajustado no teste ao vivo */
    display: flex;
    align-items: flex-end;
    justify-content: center;
    pointer-events: none;
    transition: transform .15s ease; /* leva 21: acompanha o hover abaixo */
}

/* Leva 21: no hover, a foto sobe um pouco além do zoom do cartão inteiro —
   mesmo efeito levado pra /category e /models. Junta com o
   "translateX(-50%)" de sempre, senão a foto perde a centralização. */
.categoria-card:hover .categoria-card-imagem[b-xigzqoit3b] {
    transform: translate(-50%, -10px);
}

    .categoria-card-imagem img[b-xigzqoit3b] {
        max-height: 100%;
        width: auto;
        object-fit: contain;
    }

.categoria-card-nome[b-xigzqoit3b] {
    position: relative;
    z-index: 1;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: 20px; /* ajustado no teste ao vivo (era --corpo-1, 28px) */
    line-height: var(--entrelinha);
    text-align: center;
}

.categoria-vazio[b-xigzqoit3b] {
    text-align: center;
    padding: var(--espaco-6) 0;
}

    .categoria-vazio h3[b-xigzqoit3b] {
        color: var(--ep-roxo-escuro);
        margin-top: var(--espaco-3);
    }

.categoria-carregando[b-xigzqoit3b] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .brend-pagina[b-xigzqoit3b] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .brend-hero[b-xigzqoit3b] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: 80px;
        margin-bottom: 64px;

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .brend-titulo[b-xigzqoit3b] {
        font-size: var(--titulo-1); /* 60px — medido no Figma (computador) */
    }

    /* No computador o padding interno da pílula da Nav_Bar é --espaco-5
       (32px), não --espaco-4 (24px) — ver Header.razor.css. */
    .brend-caminho[b-xigzqoit3b] {
        padding-left: var(--espaco-5);
    }

    .categoria-grid[b-xigzqoit3b] {
        gap: var(--espaco-5); /* 32px — o Figma mede ~30px, ruído de medição */
    }

    /* 4 colunas, mas calculadas (não grid-template-columns) pra sobrar
       espaço livre numa linha incompleta e o "justify-content:center" da
       .categoria-grid centralizar de verdade. */
    .categoria-card[b-xigzqoit3b] {
        width: calc((100% - 3 * var(--espaco-5)) / 4);
    }
}
/* /Components/Pages/Shop/Buscar.razor.rz.scp.css */
/* =============================================================================
   BUSCA DE PRODUTO — leva 51 (08/08/2026), PRIMEIRA VERSÃO
   =============================================================================

   Só o campo de busca é novo aqui — o resto da tela (banner, grade de
   cartões, vazio) reaproveita as classes globais "models-*" já usadas em
   /models/{id} (ver app.css, seção "GRADE DE MODELOS"). Sem desenho no
   Figma: medidas e cores escolhidas pra combinar com o que já existe
   (--ep-branco sobre o roxo do banner, mesmo --canto-campo dos outros
   campos do site), não uma spec oficial — ajustar à vontade depois de ver
   funcionando.
   ============================================================================= */

.buscar-caixa[b-j6ww2ziea8] {
    display: flex;
    align-items: center;
    gap: var(--espaco-2);
    width: 100%;
    max-width: 480px;
    /*  ".models-hero" não é flex (só o título usa text-align:center, que
        não centraliza uma caixa) — margin com "auto" dos dois lados é
        quem centraliza um bloco de largura limitada como este. */
    margin: var(--espaco-3) auto 0 auto;
    background-color: var(--ep-branco);
    border-radius: var(--canto-campo);
    padding: 0 var(--espaco-3);
}

    .buscar-caixa i[b-j6ww2ziea8] {
        color: var(--ep-roxo-escuro);
        opacity: 0.6;
        font-size: 20px;
        flex-shrink: 0;
    }

    .buscar-caixa input[b-j6ww2ziea8] {
        flex: 1;
        min-width: 0;
        height: 48px;
        border: none;
        outline: none;
        background: none;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        color: var(--ep-roxo-escuro);
    }

.buscar-botao[b-j6ww2ziea8] {
    flex-shrink: 0;
    height: 36px;
    padding: 0 var(--espaco-3);
    border: none;
    border-radius: var(--canto-botao);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    cursor: pointer;
}
/* /Components/Pages/Shop/BuyOutApp.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO — /buy/outapp (leva 38, backlog 4.1 — fecha a Entrega), a
   partir do sub-frame "Criar Entrega" do grupo Figma "REDESIGN — Entrega
   (Orders + OrdersFinish + BuyOutApp + Frete)". Mesma casca de
   Orders.razor: banner roxo sangrando + cards brancos + tabela roxo/branco
   (computador) / cartões (celular). Único breakpoint: 1000px. Cabeçalho da
   tabela roxo cheio + texto branco (mesmo ajuste já decidido pra este
   grupo de Figma na leva 36 — o desenho usa lilás claro).
   ========================================================================== */

.buyoutapp-pagina[b-bjbfmp5pis] {
    background-color: var(--ep-cinza-100);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.buyoutapp-hero[b-bjbfmp5pis] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-5);

    display: flex;
    flex-direction: column;
    align-items: center;

    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.buyoutapp-caminho[b-bjbfmp5pis] {
    display: block;
    align-self: flex-start;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    margin-bottom: var(--espaco-2);
    padding-left: var(--espaco-4);
}

    .buyoutapp-caminho a[b-bjbfmp5pis] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .buyoutapp-caminho a:hover[b-bjbfmp5pis] {
            text-decoration: underline;
        }

.buyoutapp-titulo[b-bjbfmp5pis] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-5);
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0;
}

/* ---------- Cards brancos de conteúdo (produtos + carrinho, 2 cards
   separados — mesmo empilhamento do Figma) ---------- */
.buyoutapp-card[b-bjbfmp5pis] {
    background-color: var(--ep-branco);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
    margin-bottom: var(--espaco-4);
}

.buyoutapp-subtitulo[b-bjbfmp5pis] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--subtitulo);
    color: var(--ep-roxo);
    margin: 0 0 var(--espaco-3);
}

/* Contador "(N itens)" ao lado de "Carrinho" — resposta tátil de quantos
   itens já foram adicionados (pedido do dono). */
.buyoutapp-subtitulo-contador[b-bjbfmp5pis] {
    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: var(--legenda);
    color: var(--ds-cinza-50);
    margin-left: var(--espaco-2);
}

/* ---------- Filtros: cascata Categoria→Marca→Modelo + busca + Filtrar
   (mesmo padrão de Model.razor/inventory) ---------- */
.buyoutapp-filtros[b-bjbfmp5pis] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--espaco-2);
    margin-bottom: var(--espaco-4);
}

.buyoutapp-select-caixa[b-bjbfmp5pis] {
    position: relative;
    width: 100%;
    flex: 1 1 160px;
}

.buyoutapp-select[b-bjbfmp5pis] {
    width: 100%;
    box-sizing: border-box;
    appearance: none;
    -webkit-appearance: none;
    background-color: var(--ep-branco);
    border: 1px solid var(--ds-cinza-15);
    border-radius: var(--canto-botao);
    padding: 14px 44px 14px 22px;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    cursor: pointer;
}

    .buyoutapp-select:focus[b-bjbfmp5pis] {
        outline: none;
        border-color: var(--ep-roxo);
    }

.buyoutapp-select-caret[b-bjbfmp5pis] {
    position: absolute;
    top: 50%;
    right: 22px;
    transform: translateY(-50%);
    color: var(--ep-roxo-escuro);
    pointer-events: none;
}

.buyoutapp-busca-caixa[b-bjbfmp5pis] {
    position: relative;
    width: 100%;
    flex: 1 1 200px;
}

    .buyoutapp-busca-caixa input[b-bjbfmp5pis] {
        width: 100%;
        box-sizing: border-box;
        background-color: var(--ep-branco);
        border: 1px solid var(--ds-cinza-15);
        border-radius: var(--canto-campo);
        padding: 14px 22px 14px 44px;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        color: var(--ep-roxo-escuro);
    }

        .buyoutapp-busca-caixa input:focus[b-bjbfmp5pis] {
            outline: none;
            border-color: var(--ep-roxo);
        }

    .buyoutapp-busca-caixa i[b-bjbfmp5pis] {
        position: absolute;
        top: 50%;
        left: 16px;
        transform: translateY(-50%);
        color: var(--ep-roxo-escuro);
        opacity: 0.6;
        pointer-events: none;
    }

/* ---------- Tabela (computador) ---------- */
.buyoutapp-tabela-wrap[b-bjbfmp5pis] {
    display: none;
    overflow-x: auto;
}

.buyoutapp-tabela[b-bjbfmp5pis] {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
}

    .buyoutapp-tabela thead[b-bjbfmp5pis] {
        background-color: var(--ep-roxo);
    }

    .buyoutapp-tabela th[b-bjbfmp5pis] {
        text-align: left;
        font-weight: normal;
        color: var(--ep-branco);
        padding: var(--espaco-2) var(--espaco-3);
        white-space: nowrap;
    }

        .buyoutapp-tabela th:first-child[b-bjbfmp5pis] {
            border-radius: var(--canto-botao) 0 0 var(--canto-botao);
        }

        .buyoutapp-tabela th:last-child[b-bjbfmp5pis] {
            border-radius: 0 var(--canto-botao) var(--canto-botao) 0;
            text-align: right;
        }

    /* Ordenação por coluna (pedido do dono) — mesmo padrão de
       Orders.razor/Inventory.razor. */
    .buyoutapp-th-ordenavel[b-bjbfmp5pis] {
        cursor: pointer;
        user-select: none;
    }

        .buyoutapp-th-ordenavel i[b-bjbfmp5pis] {
            margin-left: var(--espaco-1);
            font-size: 0.85em;
        }

        .buyoutapp-th-ordenavel:hover[b-bjbfmp5pis] {
            color: var(--ep-verde);
        }

    .buyoutapp-tabela td[b-bjbfmp5pis] {
        padding: var(--espaco-2) var(--espaco-3);
        border-top: 1px solid var(--ds-cinza-15);
        color: var(--ds-cinza-75);
    }

    .buyoutapp-tabela tbody tr:first-child td[b-bjbfmp5pis] {
        border-top: none;
    }

    .buyoutapp-tabela td:last-child[b-bjbfmp5pis] {
        text-align: right;
    }

.buyoutapp-tabela .buyoutapp-acoes[b-bjbfmp5pis] {
    justify-content: flex-end;
}

/* ---------- Cartões (celular) — no lugar da tabela ---------- */
.buyoutapp-cards-mobile[b-bjbfmp5pis] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

.buyoutapp-item-card[b-bjbfmp5pis] {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
    background-color: var(--ep-branco);
    border: 0.5px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: 0 4px 7.6px rgba(0, 0, 0, 0.15);
    padding: var(--espaco-3);
}

/* Pedido do dono: no celular, o selo "Nx no carrinho" desce pro canto
   superior direito do cartão, em vez de ficar empilhado com o resto do
   texto — fica visível de cara, sem disputar espaço com Código/Nome. */
.buyoutapp-carrinho-badge[b-bjbfmp5pis] {
    position: absolute;
    top: var(--espaco-3);
    right: var(--espaco-3);
    display: flex;
    align-items: center;
    gap: var(--espaco-1);
}

    .buyoutapp-item-card .buyoutapp-acoes[b-bjbfmp5pis] {
        margin-top: var(--espaco-2);
    }

.buyoutapp-item-codigo[b-bjbfmp5pis] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

.buyoutapp-item-nome[b-bjbfmp5pis] {
    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

.buyoutapp-item-detalhe[b-bjbfmp5pis] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ds-cinza-50);
}

.buyoutapp-item-valor[b-bjbfmp5pis] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

/* ---------- Cartão do Carrinho (celular) — 2 linhas, pedido do dono:
   foto + info em cima, seletor de quantidade + "Remover" embaixo (só
   existe no celular — no computador continua a tabela). Foto/info seguem
   a mesma receita do cartão de produto do checkout do admin
   (OrderComponent.razor: .admincheckout-produto-*). ---------- */
.buyoutapp-carrinho-card[b-bjbfmp5pis] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
    width: 100%;
    box-sizing: border-box;
    padding: 8px 12px 8px 8px;
    border-radius: var(--canto-card);
    border: 0.5px solid var(--ep-roxo);
    background-color: var(--ep-branco);
}

.buyoutapp-carrinho-topo[b-bjbfmp5pis] {
    display: flex;
    align-items: center;
    gap: 12px;
}

.buyoutapp-carrinho-foto[b-bjbfmp5pis] {
    flex-shrink: 0;
    width: 56px;
    height: 62px;
    box-sizing: border-box;
    padding: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 14px;
    background-color: var(--ep-roxo);
}

    .buyoutapp-carrinho-foto img[b-bjbfmp5pis] {
        width: 100%;
        height: 100%;
        object-fit: contain;
    }

.buyoutapp-carrinho-info[b-bjbfmp5pis] {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.buyoutapp-carrinho-acoes[b-bjbfmp5pis] {
    display: flex;
    align-items: center;
    justify-content: space-between;
}

/* ---------- Ações ---------- */
.buyoutapp-acoes[b-bjbfmp5pis] {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: var(--espaco-2);
}

/* Botão "Adicionar" — pílula verde com texto (não é ícone), igual ao
   desenho do Figma. Peso normal (pedido do dono — nunca negrito nos
   botões do admin, mesmo padrão do resto do redesign). */
.buyoutapp-botao-adicionar[b-bjbfmp5pis] {
    height: 36px;
    padding: 0 var(--espaco-4);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    font-weight: normal;
    cursor: pointer;
}

/* ---------- Resposta tátil (pedido do dono) — o produto já adicionado dá
   um sinal verde bem no lugar onde o clique aconteceu (sem precisar rolar
   até o fim da página pra confirmar, nem no celular nem no computador).
   Substitui o aviso antigo (AppState), que nascia lá embaixo. ---------- */

/* Computador: a linha toda (menos a coluna Ações, que já tem seus
   próprios botões) vira uma pílula — cantos redondos só nas pontas de
   fora, pra ficar uma cápsula só em vez de blocos quadrados colados. */
.buyoutapp-linha-adicionada td:not(:last-child)[b-bjbfmp5pis] {
    background-color: var(--ep-sucesso-claro);
}

    .buyoutapp-linha-adicionada td:first-child[b-bjbfmp5pis] {
        border-radius: var(--canto-botao) 0 0 var(--canto-botao);
    }

    .buyoutapp-linha-adicionada td:nth-last-child(2)[b-bjbfmp5pis] {
        border-radius: 0 var(--canto-botao) var(--canto-botao) 0;
    }

/* Celular: o cartão inteiro ganha o tom verde (cabe bem no espaço). */
.buyoutapp-item-card--adicionado[b-bjbfmp5pis] {
    background-color: var(--ep-sucesso-claro);
    border-color: var(--ep-sucesso);
}

.buyoutapp-pill-carrinho[b-bjbfmp5pis] {
    display: inline-flex;
    align-items: center;
    height: 32px;
    padding: 0 var(--espaco-2);
    border-radius: var(--canto-botao);
    background-color: var(--ep-sucesso);
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    font-weight: normal;
    white-space: nowrap;
}

/* ---------- Stepper de quantidade no carrinho (pedido do dono) — mesma
   receita do stepper do checkout do admin (OrderComponent.razor). ---------- */
.buyoutapp-stepper[b-bjbfmp5pis] {
    display: flex;
    align-items: center;
    gap: 8px;
}

.buyoutapp-qtd-botao[b-bjbfmp5pis] {
    position: relative;
    flex-shrink: 0;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
}

    .buyoutapp-qtd-botao:disabled[b-bjbfmp5pis] {
        opacity: 0.4;
        cursor: not-allowed;
    }

.buyoutapp-qtd-menos[b-bjbfmp5pis] {
    border: 1px solid var(--ep-roxo);
    color: var(--ep-roxo);
}

.buyoutapp-qtd-mais[b-bjbfmp5pis] {
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
}

.buyoutapp-qtd-menos[b-bjbfmp5pis]::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 10px;
    height: 1.5px;
    background-color: currentColor;
}

.buyoutapp-qtd-mais[b-bjbfmp5pis]::before,
.buyoutapp-qtd-mais[b-bjbfmp5pis]::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    background-color: currentColor;
    transform: translate(-50%, -50%);
}

.buyoutapp-qtd-mais[b-bjbfmp5pis]::before {
    width: 10px;
    height: 1.5px;
}

.buyoutapp-qtd-mais[b-bjbfmp5pis]::after {
    width: 1.5px;
    height: 10px;
}

.buyoutapp-qtd-valor[b-bjbfmp5pis] {
    min-width: 16px;
    text-align: center;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo-escuro);
}

/* Botão "Remover" (carrinho) — círculo vermelho, mesmo padrão do resto
   do admin (ex.: .orders-icone--excluir). */
.buyoutapp-icone-remover[b-bjbfmp5pis] {
    width: 32px;
    height: 32px;
    flex-shrink: 0;
    border: none;
    border-radius: var(--canto-redondo);
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: var(--ep-erro-forte);
    color: var(--ep-branco);
    cursor: pointer;
    font-size: 14px;
}

/* Variante pequena — ao lado da pílula "Nx" na lista de produtos, tira só
   1 unidade (não é o mesmo "Remover" do carrinho, que tira a linha
   inteira; ver RemoverUmaUnidade). */
.buyoutapp-icone-remover--pequeno[b-bjbfmp5pis] {
    width: 32px;
    height: 32px;
    font-size: 12px;
}

/* ---------- Paginação ---------- */
.buyoutapp-paginacao[b-bjbfmp5pis] {
    display: flex;
    gap: var(--espaco-3);
    margin-top: var(--espaco-4);
}

/* ---------- Botões genéricos (Filtrar / Anterior / Próximo / Finalizar) ---------- */
.buyoutapp-botao[b-bjbfmp5pis] {
    height: 44px;
    padding: 0 var(--espaco-4);
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    font-weight: normal;
    box-sizing: border-box;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--espaco-2);
    text-align: center;
    text-decoration: none;
    cursor: pointer;
    border: none;
    white-space: nowrap;
    width: 100%;
}

.buyoutapp-botao--roxo[b-bjbfmp5pis] {
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
}

.buyoutapp-botao--contorno[b-bjbfmp5pis] {
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px solid var(--ep-roxo);
}

.buyoutapp-botao-finalizar[b-bjbfmp5pis] {
    width: 100%;
    margin-top: var(--espaco-4);
}

/* ---------- Estados vazio / carregando ---------- */
.buyoutapp-vazio[b-bjbfmp5pis] {
    text-align: center;
    padding: var(--espaco-6) 0;
}

    .buyoutapp-vazio i[b-bjbfmp5pis] {
        font-size: 48px;
        color: var(--ep-roxo);
    }

    .buyoutapp-vazio h3[b-bjbfmp5pis] {
        color: var(--ep-verde-escuro);
        margin-top: var(--espaco-3);
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        font-weight: normal;
    }

.buyoutapp-carregando[b-bjbfmp5pis] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

.buyoutapp-carrinho-vazio[b-bjbfmp5pis] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ds-cinza-50);
    margin: 0;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .buyoutapp-pagina[b-bjbfmp5pis] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .buyoutapp-hero[b-bjbfmp5pis] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: var(--espaco-5);
        margin-bottom: var(--espaco-5);

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .buyoutapp-titulo[b-bjbfmp5pis] {
        font-size: var(--titulo-3);
    }

    .buyoutapp-caminho[b-bjbfmp5pis] {
        padding-left: var(--espaco-5);
    }

    .buyoutapp-card[b-bjbfmp5pis] {
        padding: var(--espaco-5);
    }

    .buyoutapp-select-caixa[b-bjbfmp5pis] {
        flex: 1 1 220px;
    }

    .buyoutapp-tabela-wrap[b-bjbfmp5pis] {
        display: block;
    }

    .buyoutapp-cards-mobile[b-bjbfmp5pis] {
        display: none;
    }

    .buyoutapp-paginacao .buyoutapp-botao[b-bjbfmp5pis],
    .buyoutapp-filtros .buyoutapp-botao[b-bjbfmp5pis],
    .buyoutapp-botao-finalizar[b-bjbfmp5pis] {
        width: auto;
    }
}

/* ---------- Acordeão "colar mensagem" (05/08/2026, leva 25 — já no
   visual novo, intocado) ---------- */
.mensagem-acordeao[b-bjbfmp5pis] {
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    margin-bottom: var(--espaco-4);
    overflow: hidden;
}

.mensagem-acordeao-cabecalho[b-bjbfmp5pis] {
    width: 100%;
    display: flex;
    align-items: center;
    gap: var(--espaco-2);
    background: none;
    border: none;
    padding: var(--espaco-3) var(--espaco-4);
    cursor: pointer;
    text-align: left;
}

.mensagem-acordeao-icone[b-bjbfmp5pis] {
    flex-shrink: 0;
    width: 28px;
    height: 28px;
    border-radius: 999px;
    background-color: #25D366; /* verde oficial do WhatsApp, não é token da marca de propósito */
    color: var(--ep-branco);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
}

.mensagem-acordeao-titulo[b-bjbfmp5pis] {
    flex: 1 1 auto;
    font-family: var(--fonte-titulo);
    font-weight: normal;
    font-size: var(--legenda);
    color: var(--ep-roxo);
}

.mensagem-acordeao-seta[b-bjbfmp5pis] {
    flex-shrink: 0;
    color: var(--ep-roxo);
    font-size: 16px;
}

.mensagem-acordeao-corpo[b-bjbfmp5pis] {
    padding: 0 var(--espaco-4) var(--espaco-4);
}

.mensagem-acordeao-descricao[b-bjbfmp5pis] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-cinza-texto);
    margin: 0 0 var(--espaco-3);
}

.mensagem-acordeao-textarea[b-bjbfmp5pis] {
    width: 100%;
    min-height: 96px;
    box-sizing: border-box;
    background-color: var(--ep-cinza-100);
    border: 1px solid var(--ep-cinza-300);
    border-radius: var(--canto-card);
    padding: var(--espaco-3);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    resize: vertical;
}

.mensagem-acordeao-botao[b-bjbfmp5pis] {
    display: block;
    margin-top: var(--espaco-3);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    padding: var(--espaco-2) var(--espaco-4);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
}

    .mensagem-acordeao-botao:disabled[b-bjbfmp5pis] {
        cursor: default;
        opacity: 0.6;
    }

.mensagem-acordeao-aviso[b-bjbfmp5pis] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    border-radius: var(--canto-card);
    padding: var(--espaco-2) var(--espaco-3);
    margin: var(--espaco-3) 0 0;
}

.mensagem-acordeao-aviso--ok[b-bjbfmp5pis] {
    background-color: #E2FBEF;
    color: var(--ep-sucesso);
}

.mensagem-acordeao-aviso--atencao[b-bjbfmp5pis] {
    background-color: #FFF6DE;
    color: var(--ep-aviso-escuro);
}

.mensagem-acordeao-aviso--erro[b-bjbfmp5pis] {
    background-color: #FFE5E5;
    color: var(--ep-erro);
}

/* ---------- Modal do formulário de endereço (leva 13e) ---------- */
/* Cópia exata das classes de Address.razor.css — cada .razor.css só vale
   dentro do seu próprio componente (isolamento de CSS do Blazor), então
   não dá pra reaproveitar direto; é o mesmo padrão já usado entre
   /brend, /models e /category (duplicar CSS, não extrair componente só
   por semelhança visual). Aqui só existe criação de endereço, nunca
   edição, então o título do cabeçalho é sempre fixo no .razor. */
.address-modal-fundo[b-bjbfmp5pis] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    padding: var(--espaco-4);
}

.address-form-modal-caixa[b-bjbfmp5pis] {
    position: relative;
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
    box-shadow: var(--sombra-card);
    text-align: left;
    max-height: 90vh;
    overflow-y: auto;
    overflow-x: hidden; /* mesmo achado da /address: o .row do Bootstrap
                            por dentro tem margem negativa e vazava
                            rolagem horizontal */
}

.address-form-modal-cabecalho[b-bjbfmp5pis] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-3);
}

.address-form-modal-titulo[b-bjbfmp5pis] {
    font-family: var(--fonte-titulo);
    font-weight: 400; /* Obviously Regular, não Wide Bold */
    font-size: var(--texto-peq);
    color: var(--ep-roxo);
    margin: 0;
}

.address-form-modal-fechar[b-bjbfmp5pis] {
    flex-shrink: 0;
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
}

    .address-form-modal-fechar i[b-bjbfmp5pis] {
        font-size: 16px;
        color: var(--ep-roxo);
    }

.address-form-modal-linha[b-bjbfmp5pis] {
    height: 0.5px;
    background-color: rgba(0, 0, 0, 0.5);
    margin: 0 0 var(--espaco-4);
}

@media (min-width: 1000px) {
    .address-form-modal-caixa[b-bjbfmp5pis] {
        width: 552px;
    }
}

/* ---------- Modal "Escolher endereço" (leva 22, backlog 7.1) ----------
   Cópia do padrão de OrderCheckout.razor.css ("trocar-modal") — mesma
   ressalva de sempre: CSS de escopo do Blazor não atravessa arquivo.
   A caixa em si reaproveita .address-form-modal-caixa/cabecalho/titulo/
   fechar/linha logo acima, que já tem o tamanho certo (310px celular,
   552px computador) e rolagem pra lista comprida. */
.escolher-endereco-adicionar[b-bjbfmp5pis] {
    width: 100%;
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    padding: var(--espaco-2) var(--espaco-4);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
    margin-top: var(--espaco-3);
}

/* Só aparece com mais de 5 endereços — mesma regra do checkout. */
.escolher-endereco-busca[b-bjbfmp5pis] {
    position: relative;
    margin-top: var(--espaco-3);
}

    .escolher-endereco-busca input[b-bjbfmp5pis] {
        width: 100%;
        box-sizing: border-box;
        background-color: var(--ep-branco);
        border: none;
        border-radius: var(--canto-campo);
        box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
        padding: 14px 22px 14px 44px;
        font-family: var(--fonte-corpo);
        font-size: var(--legenda);
        color: var(--ep-roxo-escuro);
    }

    .escolher-endereco-busca i[b-bjbfmp5pis] {
        position: absolute;
        top: 50%;
        left: 16px;
        transform: translateY(-50%);
        color: var(--ep-roxo-escuro);
        opacity: 0.6;
        pointer-events: none;
    }

.escolher-endereco-lista[b-bjbfmp5pis] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-2);
    margin-top: var(--espaco-3);
}

.escolher-endereco-card[b-bjbfmp5pis] {
    position: relative;
    display: flex;
    align-items: center;
    gap: var(--espaco-3);
    width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    padding: var(--espaco-2);
    font-family: inherit;
    text-align: left;
    cursor: pointer;
}

    .escolher-endereco-card:hover[b-bjbfmp5pis] {
        filter: brightness(0.97);
    }

.escolher-endereco-card-foto[b-bjbfmp5pis] {
    flex-shrink: 0;
    width: 72px;
    height: 60px;
    border-radius: 10px;
    overflow: hidden;
    background-color: var(--ep-cinza-200);
}

    .escolher-endereco-card-foto img[b-bjbfmp5pis] {
        width: 100%;
        height: 100%;
        object-fit: cover;
    }

.escolher-endereco-card-foto-placeholder[b-bjbfmp5pis] {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--ep-roxo);
    font-size: 20px;
}

.escolher-endereco-card-info[b-bjbfmp5pis] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}

/* Título = nome do cliente (é o que o admin digita no lugar de "Título"
   quando é ele quem cria o endereço — ver AddressComponent.razor). */
.escolher-endereco-card-rotulo[b-bjbfmp5pis] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: 0;
    white-space: normal;
}

.escolher-endereco-card-logradouro[b-bjbfmp5pis] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo);
    margin: 0;
}

.escolher-endereco-card-telefone[b-bjbfmp5pis] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-cinza-texto);
    margin: 0;
}
/* /Components/Pages/Shop/Category.razor.rz.scp.css */
/* ============================================================================
   GRADE DE CATEGORIAS — VISUAL NOVO (Sprint 06 / leva 9, 29/07/2026)
   ----------------------------------------------------------------------------
   Serve as duas entradas deste componente: embutido na Home e como rota
   própria (/category) — mesmo visual nas duas, de propósito.

   O banner roxo do título mora em CategoriaHero.razor.css (extraído na
   leva 9-c pra poder entrar antes do carrossel promocional na Home — ver
   Home.razor). Este arquivo cuida só da grade de cartões.

   Único breakpoint do site: 1000px (ai/DESIGN_SYSTEM.md). Esta versão
   substitui os ~12 breakpoints soltos que o arquivo tinha antes.
   ========================================================================== */

.categoria-pagina[b-9j2xh9xqtp] {
    /* O verde também mora aqui (repetido do Home.razor.css) porque a
       /category é usada como rota SOZINHA também (sem passar pelo wrapper
       da Home) — sem isso, só a Home ficava verde e a /category sozinha
       ficava branca. Achado no teste ao vivo. */
    background-color: var(--ep-verde);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Grade de categorias ---------- */
/* flex, não grid: com "display:grid" e colunas 1fr, uma linha incompleta
   (menos categorias que colunas) preenche da esquerda e sobra vazio à
   direita — colunas 1fr sempre esticam pra ocupar 100%, sem espaço livre
   pro "justify-content" centralizar. Com flex + wrap, o navegador sobra o
   espaço da linha incompleta nas pontas, e "justify-content:center"
   centraliza de verdade. Testado primeiro em /brend e /models (Sprint 08)
   antes de aplicar aqui. */
.categoria-grid[b-9j2xh9xqtp] {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--espaco-6);                /* folga extra: o cartão "vaza" a
                                             foto por cima, precisa de mais
                                             respiro que os --espaco-5 do
                                             vão horizontal do computador */
}

.categoria-card[b-9j2xh9xqtp] {
    position: relative;
    background-color: var(--ep-roxo);
    border-radius: 25px;                 /* medido no Figma */
    height: 304px;                       /* medido no Figma (celular) */
    width: 100%;                         /* celular: 1 coluna */
    margin-top: 64px;                    /* espaço para a foto vazar por cima
                                             sem encostar no cartão anterior */

    display: flex;
    align-items: flex-end;
    justify-content: center;
    padding-bottom: var(--espaco-4);

    cursor: pointer;
    overflow: visible;
    transition: filter .15s, transform .15s ease;
}

.categoria-card:hover[b-9j2xh9xqtp] {
    filter: brightness(1.08);
    transform: scale(1.03);
}

/* A foto é maior que o cartão de propósito — o Figma desenha ela "vazando"
   por cima da borda de cima, igual ao motivo já usado nas pílulas do
   título. Centralizada, presa pela base (perto do nome). */
.categoria-card-imagem[b-9j2xh9xqtp] {
    position: absolute;
    bottom: 64px;
    left: 50%;
    transform: translateX(-50%);
    height: 306px;                       /* medido no Figma — maior que os
                                             304px do cartão, de propósito */
    display: flex;
    align-items: flex-end;
    justify-content: center;
    pointer-events: none;
    transition: transform .15s ease;     /* leva 21: acompanha o hover abaixo */
}

/* Leva 21: no hover, a foto sobe um pouco além do zoom do cartão inteiro —
   pedido do dono. Junta com o "translateX(-50%)" de sempre, senão a foto
   perde a centralização ao levantar. */
.categoria-card:hover .categoria-card-imagem[b-9j2xh9xqtp] {
    transform: translate(-50%, -10px);
}

.categoria-card-imagem img[b-9j2xh9xqtp] {
    max-height: 100%;
    width: auto;
    object-fit: contain;
}

.categoria-card-nome[b-9j2xh9xqtp] {
    position: relative;
    z-index: 1;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-weight: normal;
    font-size: 20px;                     /* mantido igual ao computador —
                                             pedido do dono no teste (era
                                             --corpo-1, 28px, só no celular) */
    line-height: var(--entrelinha);
    text-align: center;
}

/* ---------- Estados sem desenho no Figma (mantidos funcionais) ---------- */
.categoria-vazio[b-9j2xh9xqtp] {
    grid-column: 1 / -1;
    text-align: center;
    padding: var(--espaco-6) 0;
}

.categoria-vazio h3[b-9j2xh9xqtp] {
    color: var(--ep-roxo-escuro);
    margin-top: var(--espaco-3);
}

.categoria-carregando[b-9j2xh9xqtp] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .categoria-pagina[b-9j2xh9xqtp] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    /* Grade de 4 colunas — não as 2 (col-md-6) que o código antigo usava. */
    .categoria-grid[b-9j2xh9xqtp] {
        gap: var(--espaco-5);            /* 32px — o Figma mede ~30px, tratado
                                             como ruído de medição */
    }

    /* 4 colunas calculadas (não grid-template-columns) pra sobrar espaço
       livre numa linha incompleta e o "justify-content:center" da
       .categoria-grid centralizar de verdade. */
    .categoria-card[b-9j2xh9xqtp] {
        width: calc((100% - 3 * var(--espaco-5)) / 4);
    }

}
/* /Components/Pages/Shop/Components/CarrosselComponent.razor.rz.scp.css */
/* Largura responsiva, batendo com o resto do site: MESMA técnica de
   Category.razor.css (.categoria-pagina) — padding de --margem-lateral
   (40px celular / 110px computador no bloco de 1000px mais abaixo), não
   uma largura fixa em pixels. A versão anterior usava "width:310px" fixo,
   que só batia por coincidência a 390px de tela; num monitor largo a
   caixa ficava com menos margem lateral que a Nav_Bar/grade acima dela
   e parecia "descentralizada" — achado no teste ao vivo. */
.promo[b-g2v5cbes3w] {
    position: relative;
    width: 100%;
    box-sizing: border-box;
    padding: 0 var(--margem-lateral);
    margin: 0;
    overflow: visible;
    display: flex;
    align-items: center;
    justify-content: center;
}

.content-slide[b-g2v5cbes3w] {
    display: flex;
    transition: transform 0.5s ease-in-out;
    width: 100%;
    position: relative;
    transform: translateX(calc(-100% * var(--current-index)));
}

.carousel-item[b-g2v5cbes3w] {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 100%;
    position: relative;
    background-color: var(--ep-roxo);

    /* Casca visual do Figma (Sprint 07): canto 16px (--canto-card — o
       Figma mede 17px, tratado como ruído de medição, mesmo raciocínio já
       usado em outras sprints) e sem borda branca (o Figma encosta a
       caixa roxa direto no fundo verde da Home, sem moldura).

       O padding de 35px É do cartão de painel — ele posiciona a foto dele
       (.image-container-panel) contando com esse respiro (top:-70px,
       calibrado pra esse sistema). Tirei numa rodada anterior achando que
       não afetava o painel e quebrei o posicionamento dele; devolvido
       aqui. O cartão de produto (.cartao-produto) ignora esse padding de
       propósito — ver a regra dele mais abaixo, "position:absolute;
       inset:0", que escapa do padding pra medir a partir da borda real da
       caixa (como o Figma). */
    padding: 35px;
    box-sizing: border-box;
    margin: 0;
    overflow: visible;

    /* Altura única para os três tipos de item (painel, vendido do mês,
       pedir de novo) — pedido do dono: os cartões dinâmicos precisam ter a
       MESMA altura do cartão de painel, que já é a altura aplicada no site
       hoje. 153px celular / 162px computador, medidos no Figma a partir do
       que já está no ar (não é valor novo). */
    height: 153px;
}

    .carousel-item.active[b-g2v5cbes3w] {
        visibility: visible;
    }

    /* Item inativo: a CAIXA inteira fica oculta agora, não só a foto/texto
       de dentro dela. Antes só o conteúdo sumia — a caixa roxa continuava
       visível e "encostava" na caixa ativa ao lado (achado no teste ao
       vivo da Sprint 07). No computador, o próximo item precisa continuar
       aparecendo inteiro (2 banners) — ver a exceção no bloco de 1000px,
       mais abaixo. */
    .carousel-item.inactive[b-g2v5cbes3w] {
        visibility: hidden;
        background-color: var(--ep-roxo);
        padding: 35px;
    }

.item-background-panel[b-g2v5cbes3w] {
    display: grid;
    align-items: center;
    justify-content: center;
    padding: 20px;
    background-color: transparent;
    border-radius: 10px;
    overflow: visible;
    height: 10vh;
    width: 100%;
}

.image-container-panel[b-g2v5cbes3w] {
    grid-column: 1;
    position: relative;
    top: -70px;
    left: 0;
    transform: none;
    z-index: 10;
}

.panel-image[b-g2v5cbes3w] {
    width: auto;
    max-height: 183px;
    position: relative;
    object-fit: contain;
    z-index: 10;
}

/* ============================================================================
   CARTÃO DE PRODUTO (vendido do mês / pedir de novo) — NOVO LAYOUT, medido
   no Figma em 30/07/2026: foto vazando acima/abaixo pela esquerda, bloco de
   texto começando perto do meio da caixa, botão verde cheio (o mesmo padrão
   verde usado no resto do site, não mais o botão branco de antes). Layout
   compartilhado pelos dois tipos de cartão — só o título muda entre eles.
   Foto e nomes do Figma eram só marcação; as medidas de posição/tamanho de
   fonte são as reais. ========================================================================== */
/* position:absolute + inset:0 ignora o padding de 35px do .carousel-item
   (que é do cartão de painel, ver a regra dele acima) — o cartão de
   produto mede tudo a partir da borda REAL da caixa (153/162px inteiros),
   igual ao Figma, que não tem esse respiro embutido. */
.cartao-produto[b-g2v5cbes3w] {
    position: absolute;
    inset: 0;
}

/* Foto: MESMA técnica de .categoria-card-imagem (Category.razor.css) — fora
   do fluxo (position:absolute), presa pela base, mais alta que a caixa de
   propósito pra vazar por cima. Sendo absoluta, ela NUNCA disputa espaço
   com o texto (o texto tem margem fixa reservada, não depende da largura
   real da foto — se uma foto vier mais larga que o normal, o pior caso é
   ela encostar visualmente no texto, não quebrar a página inteira).
   Medidas conferidas de novo no Figma com a foto real do produto (não mais
   o mock): o recuo pela esquerda é bem justo, quase encostado na borda. */
.cartao-produto-foto[b-g2v5cbes3w] {
    position: absolute;
    z-index: 10;
    left: 4px;         /* medido no Figma: ~2px, quase encostado na borda */
    bottom: -17px;      /* vaza 17px abaixo da caixa (153px) */
    height: 186px;      /* medido no Figma — vaza 17px acima também */
    width: auto;
    max-width: 165px;   /* medido no Figma (163px de largura da foto) —
                            teto de segurança, não corta a imagem antes
                            dela alcançar a altura toda */
    object-fit: contain;
}

.cartao-produto-texto[b-g2v5cbes3w] {
    display: flex;
    flex-direction: column;
    height: 100%;
    justify-content: center;
    color: var(--ep-branco);
    text-transform: uppercase;

    /* Medido no Figma: o texto começa a 150px da borda esquerda da caixa
       (celular). Fixo — não depende da largura real da foto. */
    margin-left: 150px;
    overflow-wrap: break-word;
}

.cartao-produto-titulo[b-g2v5cbes3w] {
    font-family: var(--fonte-titulo);
    font-weight: bold; /* Wide Bold — medido: 16px */
    font-size: 16px;
    line-height: 1.25;
}

.cartao-produto-nome[b-g2v5cbes3w], .cartao-produto-sabor[b-g2v5cbes3w] {
    font-family: var(--fonte-corpo);
    font-weight: 400; /* Regular — medido: 12px */
    font-size: 12px;
    line-height: 1.4;
}

.cartao-produto-nome[b-g2v5cbes3w] {
    margin: var(--espaco-2) 0 0 0; /* só em cima — pedido do dono no teste */
}

.cartao-produto-botao[b-g2v5cbes3w] {
    align-self: flex-start;
    margin-top: var(--espaco-2);

    /* Botão verde cheio — padrão do resto do site (--ep-verde/--ep-roxo-escuro/
       --canto-botao), no lugar do botão branco antigo. */
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    padding: var(--espaco-1) var(--espaco-3); /* pedido do dono no teste */
    font-family: var(--fonte-corpo);
    font-weight: 400; /* Regular, não Wide Bold — pedido do dono no teste */
    font-size: 12px;
    text-transform: uppercase;
    cursor: pointer;
    z-index: 10;
}

    .cartao-produto-botao:hover[b-g2v5cbes3w] {
        transition: .2s;
        transform: scale(1.05);
    }

/* "Pedir de novo?": produto esgotado — botão inclicável, mesmo raciocínio
   visual do .models-card-inativo (apagado, sem hover). */
.cartao-produto-botao:disabled[b-g2v5cbes3w] {
    opacity: 0.5;
    cursor: default;
}

    .cartao-produto-botao:disabled:hover[b-g2v5cbes3w] {
        transform: none;
    }

/* Setas — casca visual do Figma (Sprint 07): soltas, sem círculo nem fundo,
   só o ícone na cor roxa. width/height explícitos (não só min-width/
   min-height) — um elemento position:absolute sem tamanho fixo tenta se
   ajustar ao próprio conteúdo, e isso não estava garantindo os 44×44px
   direito; achado no teste ao vivo (a seta simplesmente não aparecia).
   left/right (posição) ficam só no bloco "CAIXA DO CARROSSEL" mais abaixo
   — não duplicar aqui. */
.carousel-control.prev[b-g2v5cbes3w], .carousel-control.next[b-g2v5cbes3w] {
    position: absolute;
    bottom: 40%;
    background: none;
    border: none;
    width: 44px;
    height: 44px;
    padding: 0;
    border-radius: 0;
    box-shadow: none;
    color: var(--ep-roxo);
    z-index: 8;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.5rem;
}

.carousel-control i[b-g2v5cbes3w] {
    font-size: 24px;
}

.carousel-control:disabled[b-g2v5cbes3w] {
    opacity: 0;
    cursor: not-allowed;
}

.name-panel[b-g2v5cbes3w] {
    font-size: 1.7em !important;
    margin-top: -20px;
}

/* Bolinhas de posição — elemento novo (Sprint 07), o Figma desenha e o
   carrossel não tinha antes. 7px de diâmetro, medido no Figma; ativa cheia,
   inativas vazadas (branco a 100%, já que aqui não há fundo roxo por trás
   delas — ficam soltas embaixo da caixa, sobre o verde da Home). */
.carrossel-dots[b-g2v5cbes3w] {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--espaco-2);          /* 8px — não medido no Figma, valor do sistema */
    margin-top: var(--espaco-3);   /* 16px até a caixa do carrossel */
}

.carrossel-dot[b-g2v5cbes3w] {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background-color: var(--ep-branco);
}

.carrossel-dot.ativo[b-g2v5cbes3w] {
    background-color: var(--ep-roxo);
}

/* Adição dos prefixos para compatibilidade com Safari */
@supports (-webkit-appearance:none) {
    .content-slide[b-g2v5cbes3w] {
        -webkit-transform: translateX(calc(-100% * var(--current-index)));
        transform: translateX(calc(-100% * var(--current-index)));
    }

    .carousel-item[b-g2v5cbes3w] {
        -webkit-border-radius: var(--canto-card);
        border-radius: var(--canto-card);
    }
}


/* ============================================================================
   RESPONSIVO — CONTEÚDO DOS SLIDES (não tocado nesta leva)
   ----------------------------------------------------------------------------
   Os breakpoints abaixo continuam os mesmos ~12 valores soltos de antes —
   só ficaram aqui as regras de POSIÇÃO DO CONTEÚDO (foto, texto) de cada
   slide, que o dono pediu para deixar como está (fica para uma leva
   futura). Tudo que dizia respeito à CAIXA (.promo, .carousel-item,
   .content-slide, as setas) saiu daqui — ver "CAIXA DO CARROSSEL" logo
   abaixo, que usa só o breakpoint único do site (1000px).
   ========================================================================== */

@media (max-width: 1400px) {
    .image-container[b-g2v5cbes3w] {
        left: -34% !important;
    }

    .promo-text[b-g2v5cbes3w] {
        text-align: left;
        height: 100px;
    }
}

@media (max-width: 1024px) {
    .product-image[b-g2v5cbes3w] {
        height: 280px;
        bottom: 90px;
    }

    .promo-text[b-g2v5cbes3w] {
        bottom: 70px;
    }

    .product-image img[b-g2v5cbes3w] {
        height: 284px !important;
        position: relative;
        left: 37% !important;
    }

    .image-container[b-g2v5cbes3w] {
        left: 8%;
    }

    .promo-text[b-g2v5cbes3w] {
        text-align: left;
    }
}

@media (max-width: 992px) {
    .product-image[b-g2v5cbes3w] {
        bottom: 90px;
    }

    .promo-text[b-g2v5cbes3w] {
        bottom: 70px;
    }

    .product-image img[b-g2v5cbes3w] {
        position: relative;
        left: 37% !important;
    }

    .image-container[b-g2v5cbes3w] {
        left: 8%;
    }

    .promo-text[b-g2v5cbes3w] {
        text-align: left;
    }

    .product-image[b-g2v5cbes3w] {
        height: 197px;
    }
}

@media (max-width: 768px) {
    .promo-text[b-g2v5cbes3w] {
        bottom: 70px;
    }
}

@media (max-width: 478px) {
    .product-image[b-g2v5cbes3w] {
        width: auto;
        height: 190px;
        bottom: 72px;
        left: 5px;
    }

    .promo-text[b-g2v5cbes3w] {
        font-size: 0.7em;
        width: 130px;
        left: -20px;
    }

    .image-container-panel .panel-image[b-g2v5cbes3w] {
        position: relative;
        top: -0px;
    }

    .name-panel[b-g2v5cbes3w] {
        margin-top: 0px;
    }
}

@media (max-width: 414px) {
    .product-image[b-g2v5cbes3w] {
        height: 199px;
    }
}

@media (max-width: 390px) {
    .panel-image[b-g2v5cbes3w] {
        max-height: 145px;
    }

    .product-image[b-g2v5cbes3w] {
        height: 160px !important;
    }

    .item-background .promo-text[b-g2v5cbes3w] {
        font-size: 0.6em !important;
    }

    .item-background-panel .image-container[b-g2v5cbes3w] {
        top: -50%;
        left: 53%;
    }
}

/* ============================================================================
   CAIXA DO CARROSSEL — VISUAL NOVO (Sprint 07 / leva 10, 30/07/2026)
   ----------------------------------------------------------------------------
   Largura responsiva, batendo com o resto do site (ver .promo, no topo do
   arquivo) — não mais uma largura fixa em pixels.

   Setas: posicionadas com "calc(margem - metade do botão - respiro)",
   direto a partir da borda da .promo (que agora é a borda da TELA, não
   mais a borda do cartão) — assim elas caem sempre dentro da margem
   (--margem-lateral/--margem-lateral-desktop), perto do cartão, sem
   precisar calcular um valor por tamanho de tela. Sem círculo/fundo: uma
   seta roxa por cima do fundo roxo da própria caixa ficava invisível —
   achado no teste ao vivo.
   ========================================================================== */
/* Celular: 1 slide por vez, igual já era. */
.carousel-item[b-g2v5cbes3w] {
    width: 100%;
}

.prev[b-g2v5cbes3w] {
    left: calc(var(--margem-lateral) - 44px - var(--espaco-2));
    right: auto;
}

.next[b-g2v5cbes3w] {
    right: calc(var(--margem-lateral) - 44px - var(--espaco-2));
    left: auto;
}

@media (min-width: 1000px) {

    /* A .promo ficava presa nos 40px do celular aqui — esqueci de trocar
       pra margem do computador nesta rodada anterior, e foi por isso que
       as setas (calculadas com base nos 110px certos) caíram por cima do
       cartão, que na prática ainda começava a 40px. */
    .promo[b-g2v5cbes3w] {
        padding: 0 var(--margem-lateral-desktop);
    }

    /* 2 itens visíveis por vez, 24px de vão entre eles — medido pelo dono
       direto no navegador ("vamos ver como fica esse espaçamento": pode
       precisar de ajuste fino depois de testar ao vivo). Altura 162px —
       medida no Figma a partir do que já está aplicado no site. */
    .carousel-item[b-g2v5cbes3w] {
        width: calc(50% - 12px);
        margin-right: 24px;
        height: 162px;
    }

        .carousel-item:last-child[b-g2v5cbes3w] {
            margin-right: 0;
        }

    /* Foto maior — medido de novo no Figma com a foto real do produto:
       228px de altura (vaza 33px, não 29 como medi antes).

       Posição pela DIREITA, presa no início do texto (50% + respiro), não
       mais um "left" solto: a primeira tentativa (foto e texto cada um na
       sua porcentagem própria da caixa) parecia andar junto, mas os dois
       encolhiam em velocidades diferentes (a foto tem largura própria
       fixa, o texto não) — numa caixa estreita o texto ultrapassava a
       foto e ficava por baixo dela. Amarrando a foto à MESMA referência do
       texto (50% da caixa), os dois sempre andam colados, sem nunca se
       cruzar, e a foto não precisa mudar de tamanho pra isso. */
    .cartao-produto-foto[b-g2v5cbes3w] {
        height: 228px;
        max-width: 200px; /* medido no Figma: 200px de largura da foto */
        /* 22px é o respiro desejado entre o CONTEÚDO visível da foto e o
           texto — não entre a caixa da imagem e o texto. A imagem tem 39px
           de espaço transparente sobrando à direita, dentro do próprio
           arquivo (medido pelo dono), então a caixa precisa ficar 39px
           mais perto do texto do que os 22px puros, pra sobrar só o
           espaço transparente ali e o conteúdo visível ficar exatamente a
           22px: 22 - 39 = -17px. */
        right: calc(50% - 17px);
        left: auto;
        bottom: -33px; /* (228-162)/2 */
    }

    .cartao-produto-texto[b-g2v5cbes3w] {
        margin-left: 50%; /* medido no Figma: exatamente a metade da
                              caixa — não por acaso */
    }

    /* Setas: aqui sobra espaço de verdade (110px+ de margem lateral do
       site) — o mesmo cálculo da regra base já se ajusta sozinho porque
       usa --margem-lateral-desktop em vez de --margem-lateral. */
    .prev[b-g2v5cbes3w] {
        left: calc(var(--margem-lateral-desktop) - 44px - var(--espaco-2));
    }

    .next[b-g2v5cbes3w] {
        right: calc(var(--margem-lateral-desktop) - 44px - var(--espaco-2));
    }

    /* O carrossel só marca UM item como "active" por vez (currentIndex) —
       a CAIXA do irmão seguinte (não só a foto/texto de dentro, ver a
       regra de .carousel-item.inactive mais acima) também aparece, só no
       computador, para os 2 slides visíveis terem conteúdo de verdade e
       caixa própria, não um vazio ao lado do outro. Não mexe na lógica de
       C# (currentIndex continua sendo só um número). */
    .carousel-item.active + .carousel-item.inactive[b-g2v5cbes3w] {
        visibility: visible;
    }

    /* Anda 1 item (+ o vão) por clique, não os 2 de uma vez — mantém a
       janela de 2 visíveis deslizando de um em um, não pulando de 2 em 2. */
    .content-slide[b-g2v5cbes3w] {
        transform: translateX(calc(-1 * (50% + 12px) * var(--current-index)));
    }
}

/* ---------- Confirmação de esvaziar carrinho pro "Pedir de novo?" (leva
   56) — mesma casca "confirmar-exclusao-*" já usada em todo o resto do
   site (leva 31 em diante, ex.: Orders.razor.css). Cópia própria,
   isolamento do Blazor não deixa reaproveitar CSS entre arquivos.
   ---------- */
.confirmar-exclusao-fundo[b-g2v5cbes3w] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1060;
    padding: var(--espaco-4);
}

.confirmar-exclusao-caixa[b-g2v5cbes3w] {
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-4);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.confirmar-exclusao-icone img[b-g2v5cbes3w] {
    width: 144px;
    height: 144px;
    object-fit: contain;
}

.confirmar-exclusao-pergunta[b-g2v5cbes3w] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-descricao[b-g2v5cbes3w] {
    font-family: var(--fonte-corpo);
    font-weight: 400;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-botoes[b-g2v5cbes3w] {
    display: flex;
    gap: var(--espaco-3);
    width: 100%;
    margin-top: var(--espaco-4);
}

.confirmar-exclusao-nao[b-g2v5cbes3w],
.confirmar-exclusao-sim[b-g2v5cbes3w] {
    flex: 1;
    height: 39px;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    border: none;
    cursor: pointer;
}

.confirmar-exclusao-nao[b-g2v5cbes3w] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.confirmar-exclusao-sim[b-g2v5cbes3w] {
    background-color: var(--ep-erro-forte);
    color: var(--ep-branco);
}
/* /Components/Pages/Shop/Components/CartComponent.razor.rz.scp.css */
/* =============================================================================
   CARTÃO DO CARRINHO — visual novo (leva 6c, 2026)
   =============================================================================

   Medidas do "product/buy/{id} - Com Carrinho.png" (2x, já convertidas para
   px reais). O cartão tem 310×88; a foto, a coluna de texto, o preço e o
   controle de quantidade são posicionados pela distância exata à borda do
   cartão que o desenho mostra — por isso as posições abaixo são absolutas,
   não um flex "adivinhado". Ver ai/SPRINT.md para a tabela de medidas.

   A largura do cartão é FLUIDA (100% do espaço que --margem-lateral deixa),
   não fixa em 310px: no iPhone SE (375px) o espaço útil cai para 295px, do
   mesmo jeito que já acontece nos painéis de menu — evita estourar sem
   precisar de uma versão "apertada" separada. */

/*  Vão de cima e de baixo ASSIMÉTRICO (ajuste 29/07/2026, depois do teste):
    o cabeçalho já dá 8px de folga por conta própria (.ep-carrinho-topo, em
    app.css) — somado ao topo daqui, os cards nasciam longe da palavra
    "Carrinho". Embaixo é o oposto: sem folga extra, o card colava direto no
    bloco roxo. */
.cart-items[b-0yhynrxosq] {
    flex: 1;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);               /* padronizado com o /order/checkout (leva 20a), substitui os 20px medidos antes */
    padding: var(--espaco-3) var(--margem-lateral) var(--espaco-6);
}

.cart-alerta[b-0yhynrxosq] {
    margin: 0 var(--margem-lateral) var(--espaco-3);
}

.cart-vazio[b-0yhynrxosq] {
    text-align: center;
    color: var(--ep-cinza-texto);
    margin-top: var(--espaco-6);
    font-size: var(--texto-peq);
}

/*  Card fiel ao componente "CARD_Produto_Mobile" (Figma, página "01 -
    Componentes"), variante Mobile — a única usada dentro do carrinho. A
    variante Desktop existe no Figma para a tela de checkout (/order/{id}),
    fora do escopo desta sprint; o carrinho usa a mesma versão Mobile em
    qualquer tamanho de tela, só o painel ao redor muda.

    É um flex simples de 3 colunas (foto · info · quantidade), do jeito que
    o próprio Figma já monta (auto-layout), em vez de posições absolutas
    adivinhadas — evitou o problema de sobreposição da correção anterior. */
.cart-item[b-0yhynrxosq] {
    display: flex;
    align-items: center;
    gap: 12px;                              /* padronizado com o /order/checkout (leva 20a) */
    width: 100%;
    box-sizing: border-box;
    padding: 8px 12px 8px 8px;              /* padronizado com o /order/checkout (leva 20a) */
    flex-shrink: 0;
    border-radius: var(--canto-card);       /* 16px */
    border: 0.5px solid var(--ep-roxo);     /* padronizado com o /order/checkout (leva 20a) */
    box-shadow: var(--sombra-card);         /* Figma: X=0 Y=4 blur=7.6 preto 25% */
    background-color: var(--ep-branco);
}

.cart-item-foto[b-0yhynrxosq] {
    flex-shrink: 0;
    width: 70px;
    height: 77px;
    box-sizing: border-box;
    padding: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 14px;
    background-color: var(--ep-roxo);
}

.cart-item-foto-img[b-0yhynrxosq] {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

/*  Centralizado (não mais "space-between") — padronizado com o
    /order/checkout (leva 20a), a pedido do dono. Substitui o ajuste de
    29/07/2026 que esticava nome/preço pra base do cartão alinhar com o
    "−/número/+" de .cart-item-quantidade; se a nova aparência desalinhar os
    dois, é o próximo ponto a conferir. */
.cart-item-info[b-0yhynrxosq] {
    flex: 1;
    min-width: 0;
    align-self: stretch;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.cart-item-nome[b-0yhynrxosq] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
}

/*  Regular, não negrito — o Figma mostra o título do card mais leve que o
    resto do site (o "SABOR:" que existia antes também saiu: o desenho não
    tem esse rótulo, só o nome do sabor). */
.cart-item-titulo[b-0yhynrxosq] {
    margin: 0;
    font-size: 14px;
    font-weight: normal;
    line-height: var(--entrelinha);
    color: var(--ep-roxo);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/*  Mesmo roxo do título, só mais claro — é assim que o Figma diferencia o
    sabor sem precisar de uma segunda cor no sistema. */
.cart-item-sabor[b-0yhynrxosq] {
    margin: 0;
    font-size: var(--legenda-2);            /* 12px */
    line-height: var(--entrelinha);
    color: var(--ep-roxo);
    opacity: 0.55;
}

.cart-item-preco[b-0yhynrxosq] {
    margin: 0;
    font-size: 14px;
    font-weight: bold;
    color: var(--ep-roxo);
}

/*  Coluna da direita: o "×" de remover em cima, o "−/número/+" embaixo,
    ambos alinhados à direita — exatamente como o Figma agrupa os dois no
    mesmo bloco "QUANTIDADE" (o "×" só vira um botão separado na variante
    Desktop, que não é usada aqui). "align-self: stretch" faz esta coluna
    ocupar a altura toda do cartão, para o "space-between" empurrar o "×"
    para cima e o contador para baixo sozinho. */
.cart-item-quantidade[b-0yhynrxosq] {
    flex-shrink: 0;
    align-self: stretch;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    justify-content: space-between;
}

/*  O ícone do Figma tem 12px — bem abaixo do mínimo de toque de 44px do
    projeto. A área clicável (32px) é maior que o ícone, mas o ícone fica
    preso no canto superior direito DELA (não centralizado): centralizado,
    ele "flutuava" para dentro do card, longe do canto, com um vazio em
    volta sem função — parecia peça solta (relatado no teste 29/07/2026).
    Preso no canto, a área de toque cresce só para dentro/baixo, sem mover
    o ícone visual do lugar que o Figma pede. */
.cart-item-remover[b-0yhynrxosq] {
    display: flex;
    align-items: flex-start;
    justify-content: flex-end;
    padding: 2px;
    width: 32px;
    height: 32px;
    background: none;
    border: none;
    color: var(--ep-roxo-escuro);
    font-size: 12px;
    cursor: pointer;
}

    /* Pedido do dono: some com a borda azul padrão do Bootstrap ao clicar. */
    .cart-item-remover:focus[b-0yhynrxosq] {
        outline: none;
    }

.cart-item-stepper[b-0yhynrxosq] {
    display: flex;
    align-items: center;
    gap: 8px;
}

.qtd-btn[b-0yhynrxosq] {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 19px;
    height: 19px;
    border-radius: 50%;
    background: none;
    border: none;
    padding: 0;
    font-size: 10px;
    cursor: pointer;
}

/*  "−" vazado (só a borda) e "+" cheio — é a dupla exata do Figma, não uma
    simetria minha; os dois círculos têm papéis visuais diferentes ali. */
.qtd-menos[b-0yhynrxosq] {
    border: 1px solid var(--ep-roxo);
    color: var(--ep-roxo);
}

.qtd-mais[b-0yhynrxosq] {
    position: relative;
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
}

/*  Barra do "−": um retângulo só, centralizado pelo próprio flex do
    .qtd-btn (align-items/justify-content: center) — sem depender de nenhum
    ícone de fonte. */
.qtd-menos[b-0yhynrxosq]::before {
    content: "";
    width: 9px;
    height: 1.5px;
    background-color: currentColor;
}

/*  Cruz do "+": duas barras absolutas centralizadas no meio do botão. Usa
    "position: relative" no .qtd-mais (acima) como referência. */
.qtd-mais[b-0yhynrxosq]::before,
.qtd-mais[b-0yhynrxosq]::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    background-color: currentColor;
    transform: translate(-50%, -50%);
}

.qtd-mais[b-0yhynrxosq]::before {
    width: 9px;
    height: 1.5px;
}

.qtd-mais[b-0yhynrxosq]::after {
    width: 1.5px;
    height: 9px;
}

/*  Flex em vez de line-height para centralizar: a métrica interna da fonte
    Obviously não deixa a altura da linha bater exatamente com os 19px dos
    círculos ao lado, então o número ficava um pouco mais alto ou mais baixo
    que o "−"/"+" dependendo do navegador. Flex centraliza pelo tamanho real
    da caixa, não pela métrica da fonte — mesmo truque usado no ícone do
    hambúrguer (.ep-menu-icone, em app.css). */
.cart-item-qtd-numero[b-0yhynrxosq] {
    display: flex;
    align-items: center;
    justify-content: center;
    min-width: 16px;
    height: 19px;
    font-size: 20px;
    line-height: 1;
    color: var(--ep-roxo);
}

/* ---------- Bloco roxo do rodapé ---------- */
.cart-rodape[b-0yhynrxosq] {
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
    background-color: #9F18D9;
    /*  Mesmo raio do canto do painel (--menu-canto, 56px) — não o --canto-card
        (16px) de cartão comum — para o arredondamento de cima do bloco roxo
        acompanhar o do próprio painel do carrinho. */
    border-radius: var(--menu-canto) var(--menu-canto) 0 0;
    padding: var(--espaco-4) var(--margem-lateral);
    padding-bottom: calc(var(--espaco-4) + env(safe-area-inset-bottom));
    color: var(--ep-branco);
}

.cart-rodape-linha[b-0yhynrxosq] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
}

.cart-rodape-linha span[b-0yhynrxosq] {
    font-size: var(--legenda);              /* 14px regular */
    font-weight: normal;
}

.cart-rodape-linha strong[b-0yhynrxosq] {
    font-size: 22px;                        /* mesmo valor no celular e no computador (29/07/2026) */
    font-weight: bold;
}

.cart-rodape-divisor[b-0yhynrxosq] {
    height: 1px;
    background-color: var(--ep-branco);
    width: 100%;
}

.cart-finalizar[b-0yhynrxosq] {
    width: 100%;
    height: var(--altura-botao);            /* 40px */
    border-radius: var(--canto-botao);      /* pílula */
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    font-size: var(--texto-peq);
    font-weight: bold;
    cursor: pointer;
}

.cart-finalizar:disabled[b-0yhynrxosq] {
    opacity: 0.75;
    cursor: not-allowed;
}
/* /Components/Pages/Shop/Components/CategoriaHero.razor.rz.scp.css */
/* ============================================================================
   BANNER ROXO DO TÍTULO DA HOME — VISUAL NOVO (Sprint 06 / leva 9, 29/07/2026)
   ----------------------------------------------------------------------------
   Extraído de Category.razor.css (leva 9-c) pra poder entrar ANTES do
   carrossel promocional na Home — o Figma manda título → carrossel →
   grade, e as três coisas não cabiam num componente só. Continua sendo
   usado dentro do próprio Category.razor também, pra /category sozinha
   ficar igual.
   ========================================================================== */

/* Sangra até a borda da JANELA (não a do pai) e some com um canto
   arredondado só embaixo — mesma ideia da folha dos painéis de menu,
   aplicada ao fundo da página. O Figma não deu o valor exato do canto
   ("cornerRadius: mixed"); 56px é o mesmo já usado nas ilustrações e nos
   painéis, para não abrir um valor novo sem necessidade.

   POR QUE "width: 100vw" EM VEZ DE MARGEM NEGATIVA IGUAL AO PADDING DO PAI
   (jeito antigo, usado enquanto isto vivia dentro de Category.razor):
   esse truque só funciona se o pai tiver EXATAMENTE o mesmo padding lateral
   para a margem negativa cancelar. Desde que este banner virou componente
   próprio (CategoriaHero, leva 9-c) para poder entrar antes do carrossel
   na Home, ele passou a ter DOIS pais diferentes: `.categoria-pagina`
   (tem o padding certo, na /category sozinha) e `.home-pagina` (não tem
   padding nenhum, na Home). Com a margem negativa, a caixa saía correta
   na /category mas larga demais (e os cantos ficavam fora da tela) na
   Home — achado no teste ao vivo. "100vw" sangra até a borda da janela
   não importa qual seja o pai. */
.categoria-hero[b-011hk62p90] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);

    /* Espaço até o que vem depois (o carrossel, na Home) — medido pelo
       dono direto no navegador: 24px no celular, 64px no computador. */
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);

    /* Sobe por baixo da Nav_Bar fixa — achado ao lado da Sprint 06: sem
       isso, sobra uma tira branca entre a barra e o roxo. O espaço
       reservado pra barra fixa (.ep-navbar-espaco, em Header.razor.css)
       não tem cor própria, só reserva altura — ali embaixo é o fundo
       padrão do <body> (branco) que aparece. Aqui o fundo sobe por trás
       dele (margin-top negativo) e o espaço volta em padding-top, pro
       título não subir junto. Valor calibrado pelo dono direto no
       navegador (depende do notch, por isso o max/env). */
    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 24px + var(--espaco-4) + var(--espaco-6));
}

.categoria-titulo[b-011hk62p90] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--titulo-4);          /* 36px — bate exato com o Figma */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0;
}

.categoria-titulo-linha[b-011hk62p90] {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;               /* alinha a pílula pela linha de base do texto, não pelo meio */
    justify-content: center;
    gap: 0 var(--espaco-3);              /* 16px entre palavra e pílula */
}

/* Pílulas com foto de produto: só existem no computador — o Figma do
   celular é só texto, sem elas. */
.categoria-titulo-pilula[b-011hk62p90] {
    display: none;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .categoria-hero[b-011hk62p90] {
        /* width:100vw + margin-left da regra base já sangra até a janela
           em qualquer tamanho de tela — só o padding (recuo do conteúdo)
           muda aqui para o computador. */
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);

        padding-bottom: 80px;            /* calibrado pelo dono direto no navegador */
        margin-bottom: 64px;             /* medido pelo dono direto no navegador */

        /* Fundo sobe atrás da barra (margin-top, mesma conta do
           .ep-navbar-espaco pro computador: 24 + 62 + 24). O padding-top
           foi recalibrado pelo dono direto no navegador — não é mais a
           mesma conta simétrica, de propósito. */
        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 22px + var(--espaco-4) + 96px);
    }

    .categoria-titulo[b-011hk62p90] {
        font-size: var(--titulo-1);      /* 60px — bate exato com o Figma */

        /* O Figma mede 160% de entrelinha SÓ neste título no computador
           (o padrão do site é 125%, --entrelinha) — é a folga que dá
           espaço para as pílulas vazarem por cima sem encostar na Nav_Bar.
           Achado no teste ao vivo: com 125% não sobrava espaço nenhum. */
        line-height: 1.6;
    }

    /* Pílulas decorativas com foto de produto — mesmo motivo "estoura por
       cima" dos cartões de categoria. Imagem fixa (não vem do banco),
       trocável só editando o arquivo em wwwroot/img — candidata natural ao
       backlog 4.5 (parametrização de imagens pelo admin), não implementado
       agora.

       FORMATO — conferido de novo no Figma (leva 9-b): a pílula é uma
       BARRA LARGA (bem mais larga que a própria foto), não um contorno
       justo ao redor da imagem. As duas larguras vêm medidas do Figma
       (274px e 226px num título de 60px = ~4.5em e ~3.75em) — por isso
       cada uma tem sua própria largura em vez de uma regra genérica. */
    .categoria-titulo-pilula[b-011hk62p90] {
        /* A pílula é item de um flex container (.categoria-titulo-linha,
           que já tem align-items:center e gap simétrico dos dois lados —
           confirmado de novo com o Figma: a palavra seguinte fica INTEIRA
           visível, a pílula não avança por cima dela. Quem centraliza a
           pílula na linha é o align-items:center do pai, não
           vertical-align (que não faz nada em item de flex; por isso não
           está aqui). */
        display: inline-block;
        position: relative;
        overflow: visible;

        height: 0.65em;
        border-radius: var(--canto-botao); /* pílula */
    }

    /* Pílula 1 (depois de "Como"): leva a foto do ELFBAR — medido no
       Figma, cor mais clara/esverdeada (#5fd3bc no desenho; usa o token
       --ep-verde-agua, que é da mesma família, para não abrir cor nova). */
    .categoria-titulo-pilula-1[b-011hk62p90] {
        width: 4.5em;
        background-color: var(--ep-verde-agua);
    }

    /* Pílula 2 (depois de "te ajudar"): leva a foto do Nicsalt — cor bate
       exata com o token --ep-verde (#07f29c, igual ao Figma). */
    .categoria-titulo-pilula-2[b-011hk62p90] {
        width: 3.75em;
        background-color: var(--ep-verde);
    }

    .categoria-titulo-pilula img[b-011hk62p90] {
        position: absolute;
        left: 50%;
        bottom: 0;
        transform: translateX(-50%);
        width: auto;
        object-fit: contain;
    }

    /* Alturas por pílula, não uma regra genérica: as duas fotos exportadas
       do Figma vieram com proporções bem diferentes entre si (a do ELFBAR
       é mais estreita/alta; a do Nicsalt é quase quadrada), depois de
       cortadas para a área visível de verdade (sem a margem transparente
       que a rotação da foto original deixava — era a causa da "moldura"
       estranha que aparecia por trás, achado no teste ao vivo).

       Reduzidas de novo no teste ao vivo (eram 2.3em/2.5em): mesmo com a
       largura calculada ficando bem dentro da pílula no papel, na tela a
       foto avançava sobre a palavra vizinha. Preferi encolher com folga
       a continuar calibrando no olho — cada uma fica em ~35-40% da
       largura da própria pílula agora. */
    .categoria-titulo-pilula-1 img[b-011hk62p90] {
        height: 1.8em;
    }

    .categoria-titulo-pilula-2 img[b-011hk62p90] {
        height: 1.5em;
    }
}
/* /Components/Pages/Shop/Components/ModalAniversarioComponent.razor.rz.scp.css */
/* ============================================================================
   MODAL DE ANIVERSÁRIO — visual novo (05/08/2026)
   ----------------------------------------------------------------------------
   Mesma casca dos modais de aviso do checkout (fundo escuro, caixa branca de
   310px com borda roxa, ícone, título, descrição, botão único verde) — cada
   .razor.css só vale dentro do seu próprio componente, então as regras são
   copiadas, não compartilhadas (isolamento de CSS do Blazor).
   ========================================================================== */

.aniversario-modal-fundo[b-2rf3kuf44d] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    padding: var(--espaco-4);
}

.aniversario-modal-caixa[b-2rf3kuf44d] {
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-4);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.aniversario-modal-icone img[b-2rf3kuf44d] {
    width: 118px;
    height: 112px;
    object-fit: contain;
}

.aniversario-modal-titulo[b-2rf3kuf44d] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.aniversario-modal-descricao[b-2rf3kuf44d] {
    font-family: var(--fonte-corpo);
    font-weight: 400;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.aniversario-modal-botao[b-2rf3kuf44d] {
    width: 100%;
    height: 44px;
    margin-top: var(--espaco-4);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
}
/* /Components/Pages/Shop/Home.razor.rz.scp.css */
/* ============================================================================
   FUNDO VERDE DA HOME — VISUAL NOVO (Sprint 06 / leva 9, 29/07/2026)
   ----------------------------------------------------------------------------
   Só o fundo. O banner roxo do título e a grade de categorias moram em
   Category.razor.css (reaproveitado também pela rota /category sozinha);
   este arquivo cuida só do verde por trás de tudo, inclusive do carrossel
   promocional (ainda no visual antigo).
   ========================================================================== */
.home-pagina[b-9cew9wkt85] {
    background-color: var(--ep-verde);

    /* Sem isso, em telas altas (ou com pouco conteúdo) o verde para onde o
       conteúdo acaba e sobra branco do <body> até o fim da janela —
       achado no teste ao vivo, junto com o ajuste do fundo atrás da
       Nav_Bar. */
    min-height: 100vh;
}

/* Espaço entre o carrossel e a grade de categorias — medido pelo dono
   direto no navegador: 24px no celular, 64px no computador. O "::deep" é
   necessário porque .categoria-pagina pertence a outro componente
   (Category.razor); sem ele, esta regra não alcançaria nada (CSS isolado
   por componente no Blazor). Só vale AQUI, dentro da Home — a /category
   sozinha não passa por este arquivo, então o espaçamento dela continua
   sendo só o margin-bottom do próprio banner do título. */
.home-pagina[b-9cew9wkt85]  .categoria-pagina {
    margin-top: var(--espaco-4);
}

@media (min-width: 1000px) {
    .home-pagina[b-9cew9wkt85]  .categoria-pagina {
        margin-top: 64px;
    }
}
/* /Components/Pages/Shop/Model.razor.rz.scp.css */
/* =============================================================================
   Model.razor.css — ESVAZIADO NA LEVA 21 (2026)
   =============================================================================

   TODO o visual desta tela passou para o "wwwroot/app.css", na seção
   "GRADE DE MODELOS". Aconteceu porque a leva 21 fez a /models/sale
   (PromotionModels.razor) reaproveitar este mesmo visual — e o CSS de
   escopo do Blazor só vale para o arquivo onde o ELEMENTO está escrito.
   Se estas regras ficassem só aqui, a PromotionModels.razor renderizaria
   sem estilo nenhum (mesmo raciocínio da leva 6b, que fez isso com os
   painéis de menu).

   O arquivo fica no lugar, vazio de regras, para deixar claro que o visual
   mudou de casa — e não que alguém esqueceu de criá-lo.
   ============================================================================= */
/* /Components/Pages/Shop/Product.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO DA /product/buy/{id} — Sprint 09 / leva 12, 30/07/2026
   ----------------------------------------------------------------------------
   Duas faixas: roxa em cima (caminho + foto grande), verde embaixo (marca/
   favorito · nome/quantidade · puffs · sabor · preço/botão). Único
   breakpoint do site: 1000px. Substitui as 543 linhas com 6 breakpoints
   que o arquivo tinha antes.
   ========================================================================== */

/* SEM ROLAGEM: o frame do Figma tem exatamente uma tela de altura, sem
   scroll. .product-pagina é uma coluna dividida entre as duas faixas.
   .product-conteudo NUNCA encolhe (flex-shrink:0 — as 5 linhas do
   desenho têm que aparecer inteiras); .product-hero absorve toda a
   folga que sobrar (cresce ou encolhe conforme o tanto de tela
   disponível), e a foto dentro dele encolhe junto (object-fit:contain).

   A altura NÃO é 100dvh puro: o <Header /> (a Nav_Bar fixa + o
   .ep-navbar-espaco que reserva o lugar dela) renderiza ANTES do @Body
   no MainLayout.razor, no fluxo normal da página — então .ep-navbar-espaco
   já ocupa uma fatia da tela antes desta página nem começar. 100dvh aqui
   somado a essa fatia passava de uma tela inteira, e a página rolava
   (achado no teste ao vivo). A conta abaixo é 100dvh MENOS exatamente o
   que o .ep-navbar-espaco reserva (mesma fórmula usada nele, em
   Header.razor.css) — dvh, não vh, porque no celular o vh conta a barra
   de endereço do navegador, que às vezes some. */
.product-pagina[b-mac5u1b2fz] {
    height: calc(100dvh - (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    display: flex;
    flex-direction: column;
    background-color: var(--ep-verde);
}

/* ---------- Faixa roxa ---------- */
/* Sangra até a borda da JANELA (mesma técnica do CategoriaHero/brend-hero/
   models-hero) — width:100vw + margin-left: calc(50% - 50vw). */
.product-hero[b-mac5u1b2fz] {
    position: relative;
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);

    flex: 1 1 auto; /* absorve a folga — cresce ou encolhe conforme a tela */
    min-height: 0;  /* sem isso um flex item não encolhe abaixo do próprio conteúdo */
    display: flex;
    flex-direction: column;

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-4);
    box-sizing: border-box;

    /* Sobe por baixo da Nav_Bar fixa (backlog 5.8 — 7º lugar onde esta
       correção entra). */
    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4));
}

/* Caminho de navegação + etiqueta de promoção na mesma linha, alinhados
   pela linha de base — mais confiável que dar um "top" fixo pra etiqueta
   e torcer pra bater com o texto do caminho. */
.product-topo[b-mac5u1b2fz] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    flex-shrink: 0;

    /* A Nav_Bar tem DUAS camadas de recuo — mesma regra de bolso da
       Sprint 08 (ver .brend-caminho/.models-caminho): a pílula fica a
       --margem-lateral da borda (já herdado do padding do .product-hero),
       e o que aparece DENTRO dela tem mais padding próprio — --espaco-4
       (24px) do lado esquerdo (onde fica o logo/hambúrguer), 28px do
       lado direito (onde ficam sacola/pessoa — valor medido, assimétrico
       de propósito no celular; ver Header.razor.css). O caminho e a
       etiqueta alinham cada um com o lado correspondente. */
    padding-left: var(--espaco-4);
    padding-right: 28px;
}

    .product-topo a[b-mac5u1b2fz] {
        display: inline-flex;
        align-items: center;
        gap: var(--espaco-1);
        color: var(--ep-branco);
        font-family: var(--fonte-corpo);
        font-size: var(--legenda); /* 14px — não muda no computador */
        text-decoration: none;
    }

        .product-topo a:hover[b-mac5u1b2fz] {
            text-decoration: underline;
        }

/* Etiqueta de promoção — estilo inventado (não desenhada no Figma), a
   partir do resto da identidade visual do site. Anotado para ajustar no
   teste ao vivo.

   Texto diferente por tamanho de tela, só nesta página: no celular
   "-20%" (compacto, a faixa é estreita); no computador "20% OFF" (sobra
   espaço). Os dois textos ficam sempre no HTML, e o CSS mostra um por
   vez — mais simples que decidir isso no C#. */
.product-desconto[b-mac5u1b2fz] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    font-family: var(--fonte-corpo);
    font-weight: bold;
    font-size: var(--legenda-2); /* 12px */
    border-radius: var(--canto-botao);
    padding: var(--espaco-1) var(--espaco-2);
}

.product-desconto-desktop[b-mac5u1b2fz] {
    display: none;
}

.product-foto[b-mac5u1b2fz] {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 0; /* deixa a foto encolher dentro do flex, não estourar a faixa */
}

    .product-foto img[b-mac5u1b2fz] {
        max-height: 100%;
        max-width: 100%;
        width: auto;
        object-fit: contain;
        border-radius: 20px;
    }

/* ---------- Faixa verde ---------- */
/* Coluna estreita (310px celular / 762px computador), NÃO os 1220px úteis
   do resto do site — exceção consciente à regra da margem de 110px,
   medida no Figma: o conteúdo é curto e ficaria esparramado na largura
   toda. Confirmar com o dono no teste (ver ai/SPRINT_09.md, pendência 5). */
.product-conteudo[b-mac5u1b2fz] {
    width: 310px;
    flex-shrink: 0; /* as 5 linhas do desenho aparecem inteiras sempre —
                        é a faixa roxa que cede espaço, nunca esta */
    margin: 0 auto;
    padding: var(--espaco-4) 0 var(--espaco-6);
    box-sizing: border-box;
}

/* Duas colunas: à esquerda marca/nome/puffs empilhados (16px entre cada
   um — pedido do dono no teste); à direita coração e pílula de
   quantidade. "align-items: stretch" (padrão do flex) faz a coluna da
   direita esticar pra MESMA altura da esquerda; "justify-content:
   space-between" dentro dela empurra o coração pro topo e a pílula pro
   fundo sozinho — alinha com o topo da marca e a base do puffs sem
   precisar calibrar margem manualmente. Repare esteticamente no teste:
   space-between alinha pela BORDA da caixa esticada, não literalmente
   pela linha de base do texto — deve ficar bem próximo, mas pode sobrar
   1-2px de diferença. */
.product-info-linha[b-mac5u1b2fz] {
    display: flex;
    justify-content: space-between;
    width: 100%;
}

.product-info-esquerda[b-mac5u1b2fz] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4); /* 24px entre marca, nome e puffs — pedido do dono no teste */
}

/* backlog 5.10: sem o puffs, a coluna esquerda (só marca+nome) fica mais
   baixa que o conteúdo natural da coluna direita (coração 24px + pílula
   44px, ~68px) — troca qual lado "manda" na altura de .product-info-linha,
   e sem sobra de altura o "justify-content:space-between" da direita não
   tem o que distribuir: coração e pílula colam um no outro. Vão maior aqui
   garante que a esquerda continue mandando na altura, do mesmo jeito que
   quando o puffs existe. Valor de partida — calibrar no teste ao vivo. */
.product-info-esquerda--sem-puffs[b-mac5u1b2fz] {
    gap: var(--espaco-9); /* 64px — calibrado no teste ao vivo */
}

.product-info-direita[b-mac5u1b2fz] {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    align-items: flex-end;
}

.product-marca[b-mac5u1b2fz] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda); /* 14px */
    line-height: 1; /* mesma ideia do .product-nome — sem isso herdava o
                        padrão do site (1.5) e a folga da fonte somava
                        ao "gap", desigual dos dois lados */
    color: var(--ep-roxo-escuro);
    text-transform: uppercase;
    margin-bottom: -8px; /* ajuste fino do vão marca→nome, calibrado no
                             teste ao vivo */
}

.product-info-direita i[b-mac5u1b2fz] {
    font-size: 24px;
    color: var(--ep-roxo-escuro);
    cursor: pointer;
}

.product-nome[b-mac5u1b2fz] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: 28px; /* medido no Figma — NÃO muda no computador */
    line-height: 1; /* não o --entrelinha (1.25) padrão — a fonte Wide
                        Bold tem métrica interna irregular (mesmo achado
                        do número dentro dos círculos do carrinho) e
                        deixava o vão de cima maior que o de baixo entre
                        marca/nome/puffs, mesmo com o "gap" igual nos
                        dois lados. Apertar o line-height reduz a folga
                        que a fonte reserva por conta própria. */
    color: var(--ep-roxo-escuro);
    text-transform: uppercase;
    margin: 0;
}

/* Nome comprido (mais de 8 caracteres, ex.: "MASKKING NIC") quebra em 2
   linhas na coluna de 310px do celular — pesado nos 28px padrão. Só vale
   no celular: no computador a coluna é bem mais larga (762px) e o nome
   sempre cabe numa linha, então .product-nome mantém 28px lá (sem
   sobrescrever dentro do @media abaixo). Ver NomeGrande em Product.razor. */
.product-nome--compacto[b-mac5u1b2fz] {
    font-size: 20px;
}

/* Pílula de quantidade: o desenho media 32px de altura / 95px de largura
   — abaixo do mínimo de toque de 44px do guia. Botões "−"/"+" com no
   MÁXIMO 20px de desenho visível (pedido do dono no teste — a primeira
   tentativa desenhou o círculo do tamanho da área de toque, 44px, e
   ficou grande demais), mas com 44×44px de área clicável ao redor —
   mesma regra do olhinho da senha e do ícone do calendário: só a área
   invisível cresce. Como o "+" já usa os dois pseudo-elementos
   (::before/::after) disponíveis para desenhar a cruz, a área de toque
   grande é o próprio <button> (width/height:44px, sem estilo visível); o
   círculo pintado é um <span> FILHO, pequeno, centralizado dentro dele. */
.product-quantidade[b-mac5u1b2fz] {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    background-color: var(--ep-branco);
    border-radius: var(--canto-botao);
    padding: 0 var(--espaco-1);
}

.product-quantidade-valor[b-mac5u1b2fz] {
    font-family: var(--fonte-corpo);
    font-weight: bold;
    color: var(--ep-roxo-escuro);
    min-width: 24px;
    text-align: center;
    padding: 0 var(--espaco-1);
}

.product-quantidade-botao[b-mac5u1b2fz] {
    flex-shrink: 0;
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
}

/* O círculo visível — mesmo padrão do cartão de produto do carrinho
   (.qtd-menos/.qtd-mais em CartComponent.razor.css): vazado (só borda)
   pro "−", cheio pro "+", desenhados em CSS puro (barra e cruz), não
   ícone de fonte. Tamanho igual ao do carrinho (20px, o carrinho usa
   19px — arredondado). */
.product-quantidade-circulo[b-mac5u1b2fz] {
    position: relative;
    width: 20px;
    height: 20px;
    border-radius: 50%;
}

.product-quantidade-menos .product-quantidade-circulo[b-mac5u1b2fz] {
    border: 1px solid var(--ep-roxo-escuro);
}

.product-quantidade-mais .product-quantidade-circulo[b-mac5u1b2fz] {
    background-color: var(--ep-roxo-escuro);
}

.product-quantidade-menos .product-quantidade-circulo[b-mac5u1b2fz]::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    width: 9px;
    height: 1.5px;
    background-color: var(--ep-roxo-escuro);
    transform: translate(-50%, -50%);
}

.product-quantidade-mais .product-quantidade-circulo[b-mac5u1b2fz]::before,
.product-quantidade-mais .product-quantidade-circulo[b-mac5u1b2fz]::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    background-color: var(--ep-branco);
    transform: translate(-50%, -50%);
}

.product-quantidade-mais .product-quantidade-circulo[b-mac5u1b2fz]::before {
    width: 9px;
    height: 1.5px;
}

.product-quantidade-mais .product-quantidade-circulo[b-mac5u1b2fz]::after {
    width: 1.5px;
    height: 9px;
}

.product-puffs[b-mac5u1b2fz] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda); /* 14px */
    line-height: 1; /* mesma ideia do .product-nome/.product-marca */
    color: var(--ep-roxo-escuro);
    margin: 0; /* o espaçamento vem do "gap" de .product-info-esquerda */
}

/* Pílula do sabor: <select> nativo estilizado — mesma decisão já tomada
   para o campo de data da /signup (o nativo funciona, é acessível, abre
   o seletor certo em cada aparelho; só a casca muda). Sem rótulo "SABOR:"
   (o Figma não desenha) e com uma seta própria — sem indicador nenhum a
   pílula parece um botão comum, não um seletor (recomendação registrada
   no SPRINT.md). */
.product-sabor[b-mac5u1b2fz] {
    position: relative;
    margin-top: var(--espaco-4);
}

    .product-sabor[b-mac5u1b2fz]::after {
        content: '';
        position: absolute;
        top: 50%;
        right: var(--espaco-4);
        width: 8px;
        height: 8px;
        border-right: 2px solid var(--ep-roxo-escuro);
        border-bottom: 2px solid var(--ep-roxo-escuro);
        transform: translateY(-70%) rotate(45deg);
        pointer-events: none;
    }

.product-sabor-select[b-mac5u1b2fz] {
    width: 100%;
    height: 42px; /* medido no Figma (celular) */
    box-sizing: border-box;
    border: none;
    border-radius: var(--canto-campo);
    background-color: var(--ep-branco);
    color: var(--ep-roxo-escuro);
    padding: 0 var(--espaco-4);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    appearance: none;
    -webkit-appearance: none;
    cursor: pointer;
}

.product-sabor-vazio[b-mac5u1b2fz] {
    display: flex;
    align-items: center;
    color: var(--ep-roxo-escuro);
    opacity: 0.6;
}

.product-linha-preco[b-mac5u1b2fz] {
    display: flex;
    justify-content: space-between;
    align-items: flex-end;
    width: 100%;
    margin-top: var(--espaco-4);
}

.product-preco-bloco[b-mac5u1b2fz] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
}

/* Rótulo e preço riscado na MESMA linha — pedido do dono no teste (antes
   cada um tinha sua própria linha). */
.product-preco-linha-rotulo[b-mac5u1b2fz] {
    display: flex;
    align-items: baseline;
    gap: var(--espaco-2);
}

.product-preco-rotulo[b-mac5u1b2fz] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda); /* 14px */
    color: var(--ep-roxo-escuro);
}

.product-preco-valor[b-mac5u1b2fz] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: 20px; /* pedido do dono no teste (era 36px, proposta do
                         SPRINT.md, tratada como ponto de partida) */
    line-height: 1.1;
    color: var(--ep-roxo-escuro);
}

.product-preco-riscado[b-mac5u1b2fz] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
    opacity: 0.7;
    text-decoration: line-through;
}

/* Botão "Comprar" — variante NOVA: roxo escuro cheio, texto branco. O
   padrão do site até hoje é o contrário (verde cheio, texto roxo escuro)
   — faz sentido aqui porque o fundo desta faixa já é verde. Registrar
   como variante, não como troca do padrão. */
.product-botao-comprar[b-mac5u1b2fz] {
    flex-shrink: 0;
    background-color: var(--ep-roxo-escuro);
    color: var(--ep-branco);
    border: none;
    border-radius: var(--canto-botao);
    height: 40px; /* medido no Figma (celular) */
    padding: 0 var(--espaco-5);
    font-family: var(--fonte-corpo);
    font-weight: 400; /* Regular, não Wide Bold — pedido do dono no teste
                          (mesma decisão já tomada nos botões dos cartões
                          dinâmicos do carrossel, Sprint 07) */
    font-size: var(--legenda);
    line-height: 0;
    cursor: pointer;
}

    .product-botao-comprar:hover[b-mac5u1b2fz] {
        opacity: 0.9;
    }

/* ---------- Estado sem desenho no Figma (mantido funcional) ---------- */
.product-vazio[b-mac5u1b2fz] {
    text-align: center;
    padding: var(--espaco-9) var(--margem-lateral);
}

    .product-vazio i[b-mac5u1b2fz] {
        font-size: 48px;
        color: var(--ep-roxo);
    }

    .product-vazio h3[b-mac5u1b2fz] {
        color: var(--ep-verde);
        margin-top: var(--espaco-3);
    }

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .product-pagina[b-mac5u1b2fz] {
        height: calc(100dvh - (var(--espaco-4) + 62px + var(--espaco-4)));
    }

    .product-desconto-mobile[b-mac5u1b2fz] {
        display: none;
    }

    .product-desconto-desktop[b-mac5u1b2fz] {
        display: inline;
    }

    .product-hero[b-mac5u1b2fz] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4));
    }

    /* No computador o padding interno da pílula da Nav_Bar é simétrico
       (--espaco-5 dos dois lados) — ver Header.razor.css. */
    .product-topo[b-mac5u1b2fz] {
        padding-left: var(--espaco-5);
        padding-right: var(--espaco-5);
    }

    .product-conteudo[b-mac5u1b2fz] {
        width: 762px; /* medido no Figma — exceção consciente à margem padrão */
        padding-top: var(--espaco-6);
    }

    .product-sabor-select[b-mac5u1b2fz] {
        height: 39px; /* medido no Figma */
    }

    .product-preco-valor[b-mac5u1b2fz] {
        font-size: 28px; /* pedido do dono no teste — cresce no computador */
    }

    /* Reduzir o nome pra 20px é regra só do celular (coluna estreita,
       310px) — no computador a coluna tem 762px, o nome cabe numa linha
       tranquilo, então volta pro padrão de 28px mesmo com NomeGrande. */
    .product-nome--compacto[b-mac5u1b2fz] {
        font-size: 28px;
    }

    .product-botao-comprar[b-mac5u1b2fz] {
        height: 39px; /* medido no Figma */
        padding: 0 80px; /* pedido do dono no teste */
    }
}
/* /Components/Pages/Shop/PromotionModels.razor.rz.scp.css */
/* =============================================================================
   PromotionModels.razor.css — ESVAZIADO NA LEVA 21 (2026)
   =============================================================================

   Era o CSS da tela ANTIGA de /models/sale (.card-custom, .page-header,
   .discount-tag, .col-6...), de antes da Sprint 8. A leva 21 reescreveu
   PromotionModels.razor pra reaproveitar o visual novo de /models/{id}
   (classes "models-*", CSS em wwwroot/app.css) — nenhuma classe deste
   arquivo é usada pela tela hoje.

   NÃO BASTAVA DEIXAR PARADO: uma regra genérica daqui,
   "span { font-size: 0.8rem; }", tem mais especificidade que
   ".models-card-nome" do app.css por causa do atributo de escopo que o
   Blazor acrescenta (span[b-xxx] vale mais que uma classe sozinha) — ela
   vencia em silêncio, encolhendo o nome/preço do card pra 12px sem erro
   nenhum. Mesma família de armadilha do item 1 do ai/LESSONS.md: quem
   manda é o arquivo onde o ELEMENTO está escrito.

   O arquivo fica no lugar, vazio de regras, para deixar claro que o visual
   mudou de casa — e não que alguém esqueceu de criá-lo.
   ============================================================================= */
/* /Components/Pages/User/Account.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO DA /account — leva 14
   ----------------------------------------------------------------------------
   Banner roxo sangrando + fundo verde, mesma técnica de Address.razor.css
   (Sprint 10) — cada .razor.css duplica a técnica em vez de compartilhar
   componente, mesmo padrão já usado entre /brend, /models e /address.
   O cartão do formulário aqui é roxo cheio (não branco): mesmo estilo da
   /signin — pílulas brancas com sombra, rótulo branco (está sobre o roxo).
   Único breakpoint do site: 1000px.

   Conferido com screenshot do Figma antes de implementar, não só a árvore
   do spec: a árvore sugeria o botão "Salvar" como irmão FORA do cartão
   roxo; a imagem mostra ele DENTRO, na mesma grade dos campos (última
   linha, ao lado da Data de Nascimento). A imagem manda.
   ========================================================================== */

.conta-pagina[b-iirbczd5l9] {
    background-color: var(--ep-verde);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.conta-hero[b-iirbczd5l9] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);

    /* Sobe por baixo da Nav_Bar fixa (backlog 5.8). */
    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.conta-caminho[b-iirbczd5l9] {
    display: block;
    text-align: left;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    margin-bottom: var(--espaco-2);
    padding-left: var(--espaco-4);
}

    .conta-caminho a[b-iirbczd5l9] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .conta-caminho a:hover[b-iirbczd5l9] {
            text-decoration: underline;
        }

.conta-titulo[b-iirbczd5l9] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    color: var(--ep-branco);
    text-align: center;
    margin: 0;
}

.conta-titulo-mobile[b-iirbczd5l9] {
    font-size: 32px; /* mesmo ajuste já calibrado na /address (Figma media 38px, dono pediu menor no teste) */
}

.conta-titulo-desktop[b-iirbczd5l9] {
    display: none;
}

/* ---------- Cartão do formulário ---------- */
.conta-cartao[b-iirbczd5l9] {
    width: 100%;
    background-color: var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-3);
}

.conta-grade[b-iirbczd5l9] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3); /* Figma mede 18px; 16 (--espaco-3) é o mais perto na escala do site */
}

.conta-rotulo[b-iirbczd5l9] {
    display: block;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-branco);
    margin-bottom: var(--espaco-2);
}

/* Mesma receita da /address (AddressComponent.razor.css), pedido do
   dono: borda roxa + sombra interna nos campos editáveis, em vez do
   estilo sem borda que tinha saído direto do Figma desta tela.

   "::deep" é obrigatório aqui: todos os campos desta tela são
   <InputText>/<InputDate> do Blazor (não <input> puro) — o elemento de
   verdade nasce DENTRO desses componentes, não neste arquivo, então o
   carimbo de escopo do Blazor não alcança sem o "::deep". Sem ele a
   regra existe no CSS mas não bate em nada — foi o que aconteceu aqui
   (achado com o dono testando ao vivo: nenhum estilo do .conta-input
   estava valendo, não só a borda). Mesma armadilha já registrada no
   ai/LESSONS.md, item 1. */
[b-iirbczd5l9] .conta-input {
    display: block;
    width: 100%;
    height: var(--altura-campo);
    box-sizing: border-box;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-campo);
    padding: 0 var(--espaco-4);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo-escuro);
}

    [b-iirbczd5l9] .conta-input::placeholder {
        color: var(--ep-roxo-escuro);
        opacity: 1; /* sem isso o Firefox desbota sozinho */
    }

    [b-iirbczd5l9] .conta-input:not(:disabled) {
        box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    }

    [b-iirbczd5l9] .conta-input:focus {
        outline: 2px solid var(--ep-verde);
        outline-offset: 2px;
    }

    /* CPF (quando já preenchido) e Data de Nascimento — fundo cinza, mesma
       cor de "campo travado" já usada na /address, sem sombra (só os
       editáveis têm). */
    [b-iirbczd5l9] .conta-input:disabled {
        background-color: var(--ds-cinza-15);
        color: var(--ds-cinza-50);
        opacity: 1; /* o Bootstrap escurece por opacidade; a cor já basta */
    }

/* ---------- Aviso (salvou com sucesso / erro ao salvar) ---------- */
/* Pedido do dono: mora dentro da caixa roxa (antes ficava solto embaixo
   dela). Sucesso ganha cor própria — fundo verde (--ep-verde, o verde
   cheio do site) com contorno verde sucesso (--ep-sucesso) — em vez do
   verde clarinho padrão do Bootstrap. O erro não foi pedido pra mudar,
   continua com o vermelho padrão. */
.conta-aviso[b-iirbczd5l9] {
    margin-top: var(--espaco-3);
}

    .conta-aviso.alert-success[b-iirbczd5l9] {
        background-color: var(--ep-verde);
        border: 1px solid var(--ep-sucesso);
        color: var(--ep-roxo-escuro);
    }

    /* O "×" de fechar do Bootstrap já é escuro por padrão — com o texto
       roxo escuro (não mais branco) ele fica visível sozinho, sem
       precisar do filtro que invertia a cor pra branco. */

    /* O anel azul ao clicar é o foco padrão do Bootstrap (.btn-close:focus
       tem um box-shadow embutido) — tirado só aqui, não no site inteiro. */
    .conta-aviso .btn-close:focus[b-iirbczd5l9] {
        box-shadow: none;
        outline: none;
    }

/* ---------- Cadeado + dica (CPF, Data de Nascimento) ---------- */
/* Mesma técnica do olhinho da senha (SignIn.razor.css: .campo-com-olho/
   .botao-olho) — wrapper "position:relative" só no campo, ícone absoluto
   ocupando a altura inteira do campo, centralizado. */
.conta-campo-com-cadeado[b-iirbczd5l9] {
    position: relative;
}

.conta-icone-cadeado[b-iirbczd5l9] {
    position: absolute;
    top: 0;
    right: 0;
    width: 44px;
    height: var(--altura-campo);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
    color: var(--ep-roxo-escuro);
    cursor: pointer;
}

.conta-dica[b-iirbczd5l9] {
    position: absolute;
    right: 0;
    top: calc(var(--altura-campo) + var(--espaco-1));
    width: 220px;
    max-width: 60vw;
    background-color: var(--ep-roxo-escuro);
    color: var(--ep-branco);
    font-size: 12px;
    font-family: var(--fonte-corpo);
    line-height: 1.4;
    padding: var(--espaco-2) var(--espaco-3);
    border-radius: 6px;
    z-index: 10;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity .15s ease;
}

.conta-dica--visivel[b-iirbczd5l9] {
    opacity: 1;
    visibility: visible;
}

/* ---------- Botão Salvar ---------- */
.conta-botao[b-iirbczd5l9] {
    display: block;
    width: 100%;
    height: var(--altura-botao);
    border: none;
    border-radius: var(--canto-botao);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
}

    .conta-botao:hover[b-iirbczd5l9] {
        filter: brightness(0.92);
    }

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .conta-pagina[b-iirbczd5l9] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .conta-hero[b-iirbczd5l9] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: 80px;
        margin-bottom: 64px;

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .conta-caminho[b-iirbczd5l9] {
        padding-left: var(--espaco-5);
    }

    .conta-titulo-mobile[b-iirbczd5l9] {
        display: none;
    }

    .conta-titulo-desktop[b-iirbczd5l9] {
        display: inline;
        font-size: 60px; /* medido no Figma (computador) */
    }

    /* 566px medido no Figma — bem mais estreito que os 1216px do resto do
       site, exceção própria desta tela (mesmo padrão do /product/buy,
       762px, e da /address, 990px: cada tela mede a sua). Centralizado na
       página, não alinhado à margem — diferente da /address. */
    .conta-cartao[b-iirbczd5l9] {
        max-width: 566px;
        margin: 0 auto;
        padding: var(--espaco-5);
    }

    .conta-rotulo[b-iirbczd5l9] {
        font-size: 20px; /* medido no Figma (computador) */
    }

    /* 2 colunas: Nome+Sobrenome / Telefone+CPF / Data de Nascimento+Salvar
       — 6 itens encaixam certinho em 3 linhas (o botão vira o 6º "campo"
       da grade, mesma técnica de .cadastro-grid em SignUp.razor.css). */
    .conta-grade[b-iirbczd5l9] {
        display: grid;
        grid-template-columns: repeat(2, 1fr);
        gap: var(--espaco-4); /* Figma mede 22px; 24 (--espaco-4) é o mais perto na escala do site */
    }

    /* O botão não tem rótulo acima como os outros campos — sem isso ele
       ficaria "flutuando" no topo da célula da grade, mais alto que a
       pílula de Data de Nascimento ao lado. */
    .conta-campo-botao[b-iirbczd5l9] {
        display: flex;
        align-items: flex-end;
    }

    .conta-botao[b-iirbczd5l9] {
        height: var(--altura-campo); /* mesma altura da pílula ao lado */
    }
}
/* /Components/Pages/User/Address.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO DA /address — Sprint 10, 31/07/2026
   ----------------------------------------------------------------------------
   Banner roxo sangrando + fundo verde, mesma técnica de Brend.razor.css /
   Model.razor.css (Sprint 08). Página rola normalmente (ao contrário do
   /product/buy/{id}, que trava numa tela só). Único breakpoint do site:
   1000px. Valores de layout do card medidos no Figma; alguns detalhes finos
   (zoom do mapa, proporção exata da grade com 2 colunas) ficam para
   calibrar no teste ao vivo, como em toda sprint anterior.
   ========================================================================== */

.address-pagina[b-xkowwes5rh] {
    background-color: var(--ep-verde);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.address-hero[b-xkowwes5rh] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);

    /* Sobe por baixo da Nav_Bar fixa (backlog 5.8). */
    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.address-caminho[b-xkowwes5rh] {
    display: block;
    text-align: left;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    margin-bottom: var(--espaco-2);
    padding-left: var(--espaco-4);
}

    .address-caminho a[b-xkowwes5rh] {
        color: var(--ep-branco);
        text-decoration: none;
    }

        .address-caminho a:hover[b-xkowwes5rh] {
            text-decoration: underline;
        }

/* Texto diferente por tamanho de tela (não só o tamanho da fonte) — os
   dois ficam no HTML, o CSS mostra um por vez. Mesma técnica da etiqueta
   de promoção do /product/buy/{id}. */
.address-titulo[b-xkowwes5rh] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    color: var(--ep-branco);
    text-align: center;
    margin: 0;
}

.address-titulo-mobile[b-xkowwes5rh] {
    font-size: 32px; /* pedido do dono no teste (era 38px) */
}

.address-titulo-desktop[b-xkowwes5rh] {
    display: none;
}

/* ---------- Conteúdo (fundo verde) ---------- */
.address-conteudo[b-xkowwes5rh] {
    padding-top: 8px; /* pedido do dono no teste */
}

.address-botao-adicionar[b-xkowwes5rh] {
    display: block;
    width: 100%;
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
    border: none;
    border-radius: var(--canto-botao);
    height: 39px;
    padding: 0 var(--espaco-5);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
    margin-bottom: var(--espaco-5);
}

    .address-botao-adicionar:hover[b-xkowwes5rh] {
        opacity: 0.9;
    }

.address-carregando[b-xkowwes5rh] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

/* Cliente sem nenhum endereço cadastrado. Leva 13b. */
.address-vazio[b-xkowwes5rh] {
    text-align: center;
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    color: var(--ep-roxo);
    padding: var(--espaco-6) 0;
}

/* ---------- Grade de cards ---------- */
/* flex+wrap+center, não grid — mesma correção da Sprint 08 pra número
   ímpar de cards centralizar em vez de encostar à esquerda. */
.address-grade[b-xkowwes5rh] {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--espaco-5);
}

/* ---------- Card ---------- */
/* Ordem no DOM é sempre foto → rua(info+frete) → ações; a ordem VISUAL
   muda por tamanho de tela via "order" (celular: foto em cima; computador:
   info+frete em cima, ações embaixo — ver bloco do computador). */
.address-card[b-xkowwes5rh] {
    position: relative;
    width: 100%;
    background-color: var(--ep-branco);
    border: 0.5px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: 0 4px 7.6px rgba(0, 0, 0, 0.25);
    padding: var(--espaco-3);
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
    cursor: pointer;
}

.address-card-foto[b-xkowwes5rh] {
    position: relative;
    order: 1;
    width: 100%;
    aspect-ratio: 16 / 9;
    border-radius: var(--canto-card);
    overflow: hidden;
    background-color: var(--ep-cinza-100);
}

/* Sombra interna, mesma receita usada nos campos do formulário
   (inset 0 4px 4px 15% preto). Não dá pra pôr direto no box: a foto do
   mapa é uma <img> opaca, e "box-shadow: inset" pinta ATRÁS do conteúdo
   — a imagem cobria a sombra por cima e ela nunca aparecia (só era
   visível no placeholder, sem foto real). Um "::after" por cima resolve,
   porque nasce depois da <img> na ordem de pintura. */
.address-card-foto[b-xkowwes5rh]::after {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: inherit;
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
    pointer-events: none;
}

    .address-card-foto img[b-xkowwes5rh] {
        width: 100%;
        height: 100%;
        object-fit: cover;
    }

.address-card-foto-placeholder[b-xkowwes5rh] {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
}

    .address-card-foto-placeholder i[b-xkowwes5rh] {
        font-size: 40px;
        color: var(--ep-roxo);
        opacity: 0.5;
    }

.address-card-selo[b-xkowwes5rh] {
    position: absolute;
    top: var(--espaco-2);
    left: var(--espaco-2);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    font-family: var(--fonte-corpo);
    font-weight: bold;
    font-size: var(--legenda-2);
    padding: var(--espaco-1) var(--espaco-2);
    border-radius: var(--canto-botao);
}

.address-card-rua[b-xkowwes5rh] {
    order: 2;
    display: flex;
    justify-content: space-between;
    align-items: stretch; /* pedido do dono: o campo roxo estica igual à altura do título até a base do complemento */
    gap: var(--espaco-3);
}

.address-card-info[b-xkowwes5rh] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-1);
    min-width: 0; /* permite o texto quebrar em vez de estourar a linha */
}

.address-card-rotulo[b-xkowwes5rh] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo-escuro);
    opacity: 0.7;
}

.address-card-logradouro[b-xkowwes5rh] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: 16px; /* medido no Figma (celular) */
    line-height: 1.15;
    color: var(--ep-roxo-escuro);
    margin: 0;
}

.address-card-complemento[b-xkowwes5rh] {
    font-family: var(--fonte-corpo);
    font-size: var(--legenda-2);
    color: var(--ep-roxo-escuro);
    opacity: 0.7;
    margin: 0;
}

/* Pedido do dono no teste: o fundo roxo/texto verde é só do preço (não da
   linha toda). A caixa estica ("align-items:stretch" do .address-card-rua)
   pra ficar da altura do título até a base do complemento —
   "justify-content:center" centraliza o "R$"/valor verticalmente dentro
   dela. Texto alinhado à esquerda, não centralizado. */
.address-card-frete[b-xkowwes5rh] {
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: flex-start;
    text-align: left;
    background-color: var(--ep-roxo);
    border-radius: 8px;
    padding: var(--espaco-2) var(--espaco-3);
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    line-height: 1.2;
    color: var(--ep-verde);
}

/* Ações (editar/excluir/deixar padrão): só no computador — no celular o
   card inteiro abre o modal de ação (CARD_Modal_Adress). */
.address-card-acoes[b-xkowwes5rh] {
    display: none;
}

/* Pedido do dono no teste: editar segue a mesma ideia visual do excluir
   (vazado, só contorno) — cor amarelo escuro em vez de vermelho. */
.address-card-botao-icone[b-xkowwes5rh] {
    flex-shrink: 0;
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: 1px solid var(--ep-aviso-escuro);
    border-radius: 50%;
    color: var(--ep-aviso-escuro);
    cursor: pointer;
}

    .address-card-botao-icone--excluir[b-xkowwes5rh] {
        border-color: var(--ep-erro);
        color: var(--ep-erro);
    }

.address-card-botao-padrao[b-xkowwes5rh] {
    flex: 1;
    height: 44px;
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
}

    .address-card-botao-padrao:disabled[b-xkowwes5rh] {
        background-color: var(--ep-cinza-100);
        color: var(--ep-roxo-escuro);
        opacity: 0.7;
        cursor: default;
    }

/* ---------- Modal de ação (celular) — CARD_Modal_Adress ---------- */
.address-modal-fundo[b-xkowwes5rh] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    padding: var(--espaco-4);
}

.address-modal-caixa[b-xkowwes5rh] {
    position: relative;
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

/* Segundo jeito de fechar, além de clicar fora — pedido do dono no teste.
   Mesma regra do olhinho da senha/botões de quantidade: 24px de desenho
   visível, 44px de área de toque. */
.address-modal-fechar[b-xkowwes5rh] {
    position: absolute;
    top: 12px;
    right: 12px;
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
}

    .address-modal-fechar i[b-xkowwes5rh] {
        font-size: 12px;
        color: var(--ds-cinza-50); /* 50% cinza */
    }

.address-modal-icone img[b-xkowwes5rh] {
    width: 144px; /* medido no Figma (CARD_Modal_Adress) */
    height: 144px;
    object-fit: contain;
}

.address-modal-pergunta[b-xkowwes5rh] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: 12px 0 0; /* vão da ilustração até o texto */
}

/* Modal de confirmação de exclusão (CARD_GRANDE) — texto de corpo, abaixo
   da pergunta. */
.address-modal-descricao[b-xkowwes5rh] {
    font-family: var(--fonte-corpo);
    font-weight: 400;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.address-modal-botoes[b-xkowwes5rh] {
    display: flex;
    gap: var(--espaco-3);
    width: 100%;
    margin-top: 24px; /* pedido do dono: vão do texto até os botões */
}

.address-modal-editar[b-xkowwes5rh],
.address-modal-remover[b-xkowwes5rh] {
    flex: 1;
    height: 39px;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
}

.address-modal-nao-remover[b-xkowwes5rh] {
    flex: 1;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    cursor: pointer;
}

.address-modal-editar[b-xkowwes5rh] {
    background-color: var(--ep-aviso);
    color: var(--ep-preto);
    border: none;
}

.address-modal-nao-remover[b-xkowwes5rh] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    border: none;
    padding: 0px 12px; /* pedido do dono */
}

.address-modal-remover[b-xkowwes5rh] {
    background: none;
    border: 1px solid var(--ep-erro);
    color: var(--ep-erro);
}

/* ---------- Modal do formulário (Adicionar/Editar) ---------- */
/* Caixa própria (não a .address-modal-caixa dos outros 2 modais): mesmo
   padrão visual (branca, borda roxa, canto, sombra), mas mais larga e com
   o conteúdo alinhado à esquerda, não centralizado — leva 13c, desenhada
   no Figma em cima dos frames MODAL_Formulario_Endereco. */
.address-form-modal-caixa[b-xkowwes5rh] {
    position: relative;
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    padding: var(--espaco-4);
    box-shadow: var(--sombra-card);
    text-align: left;
    max-height: 90vh;
    overflow-y: auto;
    overflow-x: hidden; /* o .row do Bootstrap por dentro tem margem
                            negativa (gutter) e sem isso vazava rolagem
                            horizontal — achado no teste ao vivo */
}

.address-form-modal-cabecalho[b-xkowwes5rh] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--espaco-3);
}

.address-form-modal-titulo[b-xkowwes5rh] {
    font-family: var(--fonte-titulo);
    font-weight: 400; /* Figma: Obviously Regular, não Wide Bold */
    font-size: var(--texto-peq); /* 16px, medido no Figma */
    color: var(--ep-roxo);
    margin: 0;
}

/* Mesma técnica de área de toque do .address-modal-fechar (44×44 mesmo
   com o ícone desenhado menor) — só muda a cor, que aqui é roxa, não
   cinza, e o ícone vira vetor no Figma em vez de "×" de texto. */
.address-form-modal-fechar[b-xkowwes5rh] {
    flex-shrink: 0;
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
}

    .address-form-modal-fechar i[b-xkowwes5rh] {
        font-size: 16px;
        color: var(--ep-roxo);
    }

/* Medido de novo direto no Figma: preto a 50% de opacidade, 0.5px de
   espessura — não o --ep-cinza-borda que eu tinha calibrado de olho. */
.address-form-modal-linha[b-xkowwes5rh] {
    height: 0.5px;
    background-color: rgba(0, 0, 0, 0.5);
    margin: 0 0 var(--espaco-4);
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .address-pagina[b-xkowwes5rh] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .address-hero[b-xkowwes5rh] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: 80px;
        margin-bottom: 64px;

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .address-caminho[b-xkowwes5rh] {
        padding-left: var(--espaco-5);
    }

    .address-titulo-mobile[b-xkowwes5rh] {
        display: none;
    }

    .address-titulo-desktop[b-xkowwes5rh] {
        display: inline;
        font-size: 60px; /* medido no Figma (computador) */
    }

    /* Coluna mais estreita que os 1216px úteis do resto do site — exceção
       medida no Figma, mesmo padrão do /product/buy/{id} (762px). */
    .address-conteudo[b-xkowwes5rh] {
        width: 990px;
        max-width: 100%;
        margin: 0 auto;
        padding-top: 0; /* pedido do dono no teste */
    }

    .address-botao-adicionar[b-xkowwes5rh] {
        width: auto;
        padding: 0 var(--espaco-6);
        margin-left: auto; /* botão centralizado no computador, pedido do dono na leva 13b */
        margin-right: auto;
    }

    /* 2 colunas — largura calculada (não grid-template-columns) pra sobrar
       espaço numa linha incompleta e o "justify-content:center" centralizar
       de verdade (mesma razão da Sprint 08). */
    .address-card[b-xkowwes5rh] {
        width: calc((100% - var(--espaco-5)) / 2);
        padding: var(--espaco-4);
        gap: var(--espaco-4);
    }

    /* Endereço único: ocupa a largura toda (medido no Figma, "desktop 1
       endereço"), não fica com metade da linha vazia. */
    .address-grade--solo .address-card[b-xkowwes5rh] {
        width: 100%;
    }

    /* "flex-grow:1": quando o card ao lado (mesma linha da grade) tem o
       logradouro em 2 linhas, o "align-items:stretch" padrão do flex
       (.address-grade) estica os dois cards pra mesma altura — sem isso,
       o card com 1 linha só sobrava vazio embaixo, porque o mapa ficava
       preso no aspect-ratio e o resto do conteúdo não tinha pra onde
       crescer. Com espaço sobrando, o mapa cresce além do aspect-ratio
       (a imagem usa "object-fit:cover", então só mostra uma fatia maior
       do mapa, sem esticar/distorcer); sem espaço sobrando (as 2 linhas
       batem certinho), o aspect-ratio continua mandando, igual antes.
       Achado no teste ao vivo. */
    .address-card-foto[b-xkowwes5rh] {
        order: 2;
        aspect-ratio: 958 / 232;
        flex-grow: 1;
    }

    .address-grade:not(.address-grade--solo) .address-card-foto[b-xkowwes5rh] {
        aspect-ratio: 452 / 207;
    }

    .address-card-rua[b-xkowwes5rh] {
        order: 1;
    }

    .address-card-logradouro[b-xkowwes5rh] {
        font-size: 20px; /* medido no Figma (computador, card único) */
    }

    .address-card-frete[b-xkowwes5rh] {
        font-size: 28px; /* medido no Figma (computador, card único) */
    }

    .address-card-acoes[b-xkowwes5rh] {
        order: 3;
        display: flex;
        align-items: center;
        gap: var(--espaco-3);
    }

    /* Pedido do dono no teste: no celular o card inteiro abre o modal de
       ação; no computador só os 3 botões devem ser clicáveis (eles já
       cobrem editar/excluir/deixar padrão), o resto do card (foto, texto)
       fica só informativo. "pointer-events:none" tira o card inteiro da
       jogada, e "auto" nos botões devolve o clique só pra eles — não
       precisa de JS pra detectar tamanho de tela. */
    .address-card[b-xkowwes5rh] {
        cursor: default;
        pointer-events: none;
    }

    .address-card-acoes[b-xkowwes5rh],
    .address-card-acoes *[b-xkowwes5rh] {
        pointer-events: auto;
    }

    /* Modal do formulário: mais largo no computador (552px, medido no
       Figma) — diferente dos outros 2 modais da tela, que ficam nos
       310px fixos porque são caixas pequenas de confirmação. */
    .address-form-modal-caixa[b-xkowwes5rh] {
        width: 552px;
    }
}
/* /Components/Pages/User/Components/AddressComponent.razor.rz.scp.css */
/* Botão "Salvar" — nunca tinha sido tocado antes da leva 13c (a tela não
   tinha desenho próprio), por isso ficava com o visual genérico do
   Bootstrap por baixo das duas cores daqui. Agora bate com o Figma: verde
   cheio, texto roxo escuro — o padrão do resto do site (/signin,
   /signup, os painéis de menu). */
.btn-purple[b-11rg6nrvii] {
    display: block;
    width: 100%; /* preenche a largura toda, celular e computador — pedido do dono */
    height: var(--altura-botao);
    text-align: center;
    border: none;
    border-radius: var(--canto-botao);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
}
.btn-purple:hover[b-11rg6nrvii] {
    filter: brightness(0.92);
}

/* Ícone (i) ao lado do rótulo do campo — mostra a dica só no clique/toque,
   nos dois tamanhos (sem :hover: com o mouse parado em cima, o hover
   mascarava o fechamento em 6s controlado pelo C#, e no celular o hover
   fica "grudado" no elemento tocado até tocar em outro lugar — achado e
   corrigido na leva 13b). Sprint 10: usado no CEP (quando travado por já
   ter pedido) e no telefone de contato. */
.info-icone[b-11rg6nrvii] {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 16px;
    height: 16px;
    margin-left: var(--espaco-1, 4px);
    border-radius: 50%;
    background-color: var(--ep-roxo, #9f18d9);
    color: #fff;
    font-size: 11px;
    font-style: italic;
    font-family: Georgia, 'Times New Roman', serif;
    line-height: 16px;
    text-align: center;
    cursor: pointer;
    vertical-align: middle;
    user-select: none;
}

.info-texto[b-11rg6nrvii] {
    position: absolute;
    left: 0;
    top: 22px;
    width: 220px;
    max-width: 60vw;
    background-color: var(--ep-roxo-escuro, #333);
    color: #fff;
    font-size: 12px;
    font-style: normal;
    font-family: sans-serif;
    line-height: 1.4;
    padding: var(--espaco-2, 8px) var(--espaco-3, 10px);
    border-radius: 6px;
    z-index: 10;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity .15s ease;
}

.info-texto--visivel[b-11rg6nrvii] {
    opacity: 1;
    visibility: visible;
}

/* ---------- Campos: visual novo do formulário (leva 13c, desenhado no
   Figma em cima dos frames MODAL_Formulario_Endereco) ---------- */
/* Pílula com contorno roxo — no lugar do cinza genérico do Bootstrap que
   esta tela usava até aqui (nunca tinha desenho próprio antes). Usa
   ::deep porque metade dos campos são <input>/<select> nativos (a classe
   já nasce aqui) e a outra metade são <InputText>/<InputSelect> do
   Blazor — o elemento de verdade nasce DENTRO desses componentes, não
   neste arquivo. Mesma técnica já usada em SignIn.razor.css. */
[b-11rg6nrvii] .form-control,
[b-11rg6nrvii] .form-select {
    height: var(--altura-campo);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-campo);
    color: var(--ep-roxo-escuro);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
}

    [b-11rg6nrvii] .form-control::placeholder {
        color: var(--ep-roxo-escuro);
        opacity: 1; /* sem isso o Firefox desbota sozinho */
    }

/* Pedido do dono, conferido de novo direto no Figma: inner shadow preto,
   x=0 y=4 blur=4, 15% de opacidade — só nos campos editáveis (os
   travados ficam lisos, ver abaixo). */
[b-11rg6nrvii] .form-control:not(:disabled),
[b-11rg6nrvii] .form-select:not(:disabled) {
    box-shadow: inset 0 4px 4px rgba(0, 0, 0, 0.15);
}

/* Mesmo stroke verde de foco já usado em SignIn.razor.css
   (.login-coluna ::deep input.campo:focus) — pedido do dono, mesma
   técnica: outline, não troca de borda. */
[b-11rg6nrvii] .form-control:focus,
[b-11rg6nrvii] .form-select:focus {
    outline: 2px solid var(--ep-verde);
    outline-offset: 2px;
}

/* Campos travados — Estado, Cidade, Bairro e Logradouro (sempre
   "disabled", preenchidos sozinhos pela busca do CEP) e, de brinde, o
   CEP quando o endereço já tem pedido (ver TemPedido): fundo cinza, sem
   sombra, ícone de cadeado reforçando que não dá pra editar. O estilo
   segue o ":disabled" em vez de uma classe por campo — por isso o CEP
   travado ganha o mesmo tratamento automaticamente, sem código extra. */
[b-11rg6nrvii] .form-control:disabled,
[b-11rg6nrvii] .form-select:disabled {
    background-color: var(--ds-cinza-15);
    color: var(--ds-cinza-50);
    opacity: 1; /* o Bootstrap escurece por opacidade; a cor já basta */
}

/* select nativo (Estado) e InputSelect (Cidade) — tira a setinha padrão
   do navegador: os dois são sempre travados aqui, não faz sentido manter
   o indicador de "clique pra escolher". Pedido do dono na leva 13c. */
[b-11rg6nrvii] .form-select {
    appearance: none;
    -webkit-appearance: none;
    -moz-appearance: none;
    background-image: none;
}

/* Rótulo dos campos — estava herdando o preto padrão do Bootstrap
   (nunca tinha sido estilizado; a tela não tinha desenho próprio antes
   da leva 13c). Pedido do dono: roxo, igual ao resto do formulário. */
.form-label[b-11rg6nrvii] {
    color: var(--ep-roxo);
}

/* Vão entre grupos de campos — 24px (--espaco-4), igual ao resto do site
   (ver .campo-grupo em SignIn.razor.css). O respiro mora em CADA campo
   (".col-md-6"), não na ".row" — assim todo grupo fica com o mesmo vão
   entre si, não importa se está sozinho, pareado lado a lado (computador)
   ou empilhado (celular). Achado no teste ao vivo: antes o vão só estava
   na ".row", então no celular (onde os pares empilham) o respiro DENTRO
   de uma linha pareada (Título+CEP, por exemplo) ficava menor que o vão
   até a próxima linha. Dá pra zerar a ".row" e confiar só na coluna
   porque, quando duas colunas ficam lado a lado, as duas terminam na
   mesma altura — o respiro não dobra. */
.row.mb-3[b-11rg6nrvii] {
    margin-bottom: 0 !important;
}

.col-md-6[b-11rg6nrvii] {
    margin-bottom: var(--espaco-4) !important;
}

/* ---------- Ícone de cadeado nos campos travados ---------- */
/* Mesma técnica do olhinho da senha em SignIn.razor.css
   (.campo-com-olho/.botao-olho): um wrapper "position:relative" em volta
   SÓ do campo (não do rótulo), com o ícone absoluto ocupando os 44px de
   altura do campo inteiro, centralizado — nada de calcular posição a
   olho. */
.campo-com-cadeado[b-11rg6nrvii] {
    position: relative;
}

.icone-cadeado[b-11rg6nrvii] {
    position: absolute;
    top: 0;
    right: 0;
    width: 44px;
    height: var(--altura-campo);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
    color: var(--ep-roxo);
    pointer-events: none;
}
/* /Components/Pages/User/MyCoupons.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO DA /mycoupons — Leva 16, 01/08/2026
   ----------------------------------------------------------------------------
   Banner roxo próprio (mesma técnica de /myfavorites) + fundo verde. Coluna
   de conteúdo com a margem lateral de exceção desta tela (--margem-lateral-
   lista, 24px — já documentada no ai/DESIGN_SYSTEM.md pra /mycoupons e
   /myorders). Único breakpoint do site: 1000px.
   ========================================================================== */

.cupons-pagina[b-al2lxiripj] {
    background-color: var(--ep-verde);
    min-height: 100vh;
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.cupons-hero[b-al2lxiripj] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral-lista);
    padding-right: var(--margem-lateral-lista);
    padding-bottom: var(--espaco-6);

    /* Sobe por baixo da Nav_Bar fixa (backlog 5.8) — mesma técnica já usada
       em CategoriaHero/models-hero/favoritos-hero. */
    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.cupons-caminho[b-al2lxiripj] {
    display: block;
    text-align: left;
    font-size: var(--legenda); /* 14px — não muda no computador */
    padding-left: var(--espaco-4);
}

    .cupons-caminho a[b-al2lxiripj] {
        color: var(--ep-branco);
        text-decoration: none;
        font-family: var(--fonte-corpo);
    }

        .cupons-caminho a:hover[b-al2lxiripj] {
            text-decoration: underline;
        }

.cupons-titulo[b-al2lxiripj] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: 38px; /* medido no Figma (celular) */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0;
}

/* ---------- Coluna de conteúdo ---------- */
.cupons-conteudo[b-al2lxiripj] {
    padding-left: var(--margem-lateral-lista);
    padding-right: var(--margem-lateral-lista);
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
}

/* ---------- Cartão branco (progresso e indicação) ---------- */
.cupons-card[b-al2lxiripj] {
    background-color: var(--ep-branco);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: 12px 22px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

/* ---------- Cartão de progresso ---------- */
.cupons-progresso[b-al2lxiripj] {
    display: flex;
    align-items: center;
    justify-content: center; /* só faz efeito quando a barra (flex:1) some,
       no estado "Parabéns!" — com a barra presente ela consome todo o
       espaço sobrando e justify-content não tem o que redistribuir, então
       não muda nada no layout de hoje. Sem isso, sobrando só o texto, ele
       colava na esquerda e deixava um vão vazio à direita. */
    gap: 22px;
}

.cupons-progresso-texto[b-al2lxiripj] {
    color: var(--ep-roxo-escuro);
    font-family: var(--fonte-corpo);
    font-size: 12px; /* medido no Figma (celular) */
    line-height: 1; /* sem isso, herdava o 1.5 padrão do site — a caixa do
       texto ficava bem mais alta que a barra e empurrava tudo pra baixo,
       não importava o align-items. A fonte Regular (diferente da Wide
       Bold) tem métrica limpa (soma exatamente 1em), "1" cola certo. */
    white-space: nowrap;

    /* Mesmo com a caixa do tamanho certo (line-height: 1), ela não é
       simétrica ao redor do texto: medido no arquivo da fonte (fontTools,
       mesma técnica do recorte do "10%" abaixo), o ascent (774/1000em)
       encosta exatamente nas letras mais altas — zero folga em cima — mas
       o descent reservado (226/1000em) sobra folga embaixo (a letra mais
       baixa, "p" de "apenas", só desce 139/1000em). Sobram 87/1000em só
       embaixo, o que faz o texto parecer colado no topo da própria caixa
       mesmo com align-items: center certo na linha. Aqui o desbalanço é
       pequeno (~4%), um nudge simples resolve — não precisa da caixa de
       recorte (overflow: hidden) que o "10%" precisou. */
    position: relative;
    top: 0.0435em;
}

/* "(i)" de como usar o desconto — só aparece quando o cartão mostra
   "Parabéns!". Mesmo padrão já usado em AddressComponent/Account (clique/
   toque, sem :hover de propósito — leva 13b). CSS duplicado aqui porque o
   escopo do Blazor não atravessa arquivo (LESSONS.md). */
.info-icone[b-al2lxiripj] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 16px;
    height: 16px;
    margin-left: var(--espaco-1);
    border-radius: 50%;
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
    font-size: 11px;
    font-style: italic;
    font-family: Georgia, 'Times New Roman', serif;
    line-height: 16px;
    text-align: center;
    cursor: pointer;
    vertical-align: middle;
    user-select: none;
}

.info-texto[b-al2lxiripj] {
    position: absolute;
    left: 50%;
    transform: translateX(-50%); /* centralizado sob o meio da frase inteira
       — o "container" desse absolute não é mais o ícone (removi o
       position: relative dele), e sim o .cupons-progresso-texto (a frase),
       que já é o ancestral posicionado mais próximo. Com o ícone como
       container, a caixa crescia a partir de um ponto perto da borda
       direita do cartão e estourava a tela. */
    top: 22px;
    width: 220px;
    max-width: 100%; /* 100% da largura da FRASE (não da tela) — a frase já
       cabe certinho dentro do cartão hoje (sem quebrar), então a dica nunca
       fica mais larga do que algo que já sabemos que cabe. Mais confiável
       que calcular em cima de vw, que depende do navegador reconhecer a
       largura real do dispositivo. */
    white-space: normal; /* sem isso, herdava o "nowrap" do
       .cupons-progresso-texto (ancestral) — o texto da dica virava uma
       linha só gigante em vez de quebrar dentro da caixa. */
    background-color: var(--ep-roxo-escuro);
    color: var(--ep-branco);
    font-size: 12px;
    font-style: normal;
    font-family: var(--fonte-corpo);
    line-height: 1.4;
    padding: var(--espaco-2) var(--espaco-3);
    border-radius: 6px;
    z-index: 10;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity .15s ease;
}

.info-texto--visivel[b-al2lxiripj] {
    opacity: 1;
    visibility: visible;
}

.cupons-barra[b-al2lxiripj] {
    position: relative;
    flex: 1;
    height: 15px;
    border-radius: 999px;
    background-color: var(--ep-branco);
    box-shadow: var(--sombra-suave);
    overflow: hidden;
}

.cupons-barra-preenchida[b-al2lxiripj] {
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    background-color: var(--ep-sucesso);

    /* A largura vem do progresso real (cupons disponíveis / meta) — o
       Figma desenhou a barra ~80% cheia só pra ilustrar "faltam 3", não é
       uma proporção fixa. */
}

.cupons-grade[b-al2lxiripj] {
    display: flex;
    flex-wrap: wrap;
    gap: 12px 4px;
}

.cupons-circulo[b-al2lxiripj] {
    /* Largura calculada pra caber exatamente 5 por linha (a "grade fixa de
       10 (2 linhas de 5)" do Figma) não importa a largura da tela — um
       tamanho fixo em px cabia no frame de 390px do Figma, mas não no
       iPhone SE de teste (375px), onde só 4 cabiam. */
    width: calc((100% - 4 * 4px) / 5);
    aspect-ratio: 1;
    box-sizing: border-box;
    border-radius: 50%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo-escuro);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 10px 0;
    flex-shrink: 0;
}

    .cupons-circulo img[b-al2lxiripj] {
        max-width: 100%;
        max-height: 100%;
        object-fit: contain;
    }

.cupons-circulo--conquistado[b-al2lxiripj] {
    background-color: var(--ep-roxo-escuro);
    border: none;
}

.cupons-divisoria[b-al2lxiripj] {
    height: 0;
    border-top: 0.5px solid rgba(0, 0, 0, 0.5); /* Figma mede preto sólido,
       mesmo ruído de medição já calibrado nos outros divisores do site
       (ver leva 13c, cabeçalho do modal de endereço) */
}

.cupons-texto[b-al2lxiripj] {
    color: var(--ep-preto);
    opacity: 0.5;
    font-family: var(--fonte-corpo);
    font-size: 12px; /* medido no Figma (celular) */
    line-height: var(--entrelinha);
    text-align: center;
    margin: 0;
}

/* ---------- Cartão "Indique e Ganhe" ---------- */
.cupons-indica-banner[b-al2lxiripj] {
    background-color: var(--ep-roxo);
    border-radius: var(--canto-card);
    padding: 22px 12px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 12px;
    text-align: center;
}

.cupons-indica-titulo[b-al2lxiripj] {
    display: none; /* só aparece no computador */
}

/* A fonte Wide Bold declara um ascent de 2662/2048 (30% maior que o
   normal) — bem acima da altura visível do glifo. line-height sozinho
   não resolve: encolher a caixa empurra a base do texto pra fora por
   baixo (ele "desce" junto), só troca o vão de lugar. A correção de
   verdade é uma segunda camada: a de fora vira uma janela
   (overflow:hidden) do tamanho do glifo; a de dentro mantém a métrica
   normal da fonte, deslocada pra cima o suficiente pra cortar só o
   vazio, sem cortar o glifo.

   Números medidos direto no arquivo da fonte (fontTools), olhando "1",
   "0" e "%" juntos (não só o "1" — o "0" e o "%" têm curva que passa um
   pouco pra cima/baixo do "1", primeira tentativa cortou rente demais):
   topo mais alto 1571/2048, base mais baixa -35/2048 → janela de
   (1571-(-35))/2048 = 0.79em; deslocamento (2662-1571)/2048 = 0.53em. */
.cupons-indica-percentual-recorte[b-al2lxiripj] {
    display: block;
    font-size: 80px; /* medido no Figma (celular) */
    height: 0.79em;
    overflow: hidden;
}

.cupons-indica-percentual[b-al2lxiripj] {
    display: block;
    color: var(--ep-verde);
    font-family: var(--fonte-titulo);
    font-weight: bold;
    line-height: normal;
    position: relative;
    top: -0.53em;
}

.cupons-indica-legenda[b-al2lxiripj] {
    font-family: var(--fonte-corpo);
    font-size: 16px;
}

.cupons-indica-legenda--mobile[b-al2lxiripj] {
    color: var(--ep-verde);
}

.cupons-indica-legenda--desktop[b-al2lxiripj] {
    display: none; /* só aparece no computador, fora da caixa roxa */
}

.cupons-indica-acao[b-al2lxiripj] {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.cupons-indica-botoes[b-al2lxiripj] {
    display: flex;
    align-items: center;
    gap: 12px;
}

.cupons-botao-copiar[b-al2lxiripj] {
    flex: 1;
    height: 39px;
    border: none;
    border-radius: var(--canto-botao);
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
    font-family: var(--fonte-corpo);
    font-size: 14px;
    cursor: pointer;
}

    .cupons-botao-copiar:hover[b-al2lxiripj] {
        filter: brightness(0.92);
    }

/* Nasce "disabled" no raríssimo caso do link ainda não estar pronto (ver
   conserto do clipboard no Safari, 11/09/2026). Mesma receita de
   CalcularFrete.razor.css (.frete-botao:disabled). */
.cupons-botao-copiar:disabled[b-al2lxiripj] {
    opacity: .6;
    cursor: not-allowed;
}

    .cupons-botao-copiar:disabled:hover[b-al2lxiripj] {
        filter: none;
    }

/* Botão pequeno e redondo do WhatsApp ao lado do "Copiar Link" — mesmo
   padrão já usado em Orders.razor (.orders-icone--whatsapp: círculo verde
   #25d366), duplicado aqui porque o escopo de CSS do Blazor não atravessa
   arquivo (ai/LESSONS.md item 1). */
.cupons-icone-whatsapp[b-al2lxiripj] {
    width: 39px;
    height: 39px;
    flex-shrink: 0;
    border: none;
    border-radius: var(--canto-redondo);
    background-color: #25d366;
    color: var(--ep-branco);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    cursor: pointer;
    text-decoration: none;
}

    .cupons-icone-whatsapp:hover[b-al2lxiripj] {
        filter: brightness(0.92);
    }

.cupons-carregando[b-al2lxiripj] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

.cupons-alerta[b-al2lxiripj] {
    margin-top: var(--espaco-3);
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .cupons-hero[b-al2lxiripj] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: 80px;
        margin-bottom: 64px;

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .cupons-titulo[b-al2lxiripj] {
        font-size: 60px; /* medido no Figma (computador) */
    }

    .cupons-caminho[b-al2lxiripj] {
        padding-left: var(--espaco-5); /* padding interno da pílula da
           Nav_Bar no computador é --espaco-5 (32px), não --espaco-4 */
    }

    .cupons-conteudo[b-al2lxiripj] {
        max-width: 766px; /* exceção própria desta tela, como /myaccount
           (566px) e /address (552px) também têm a sua */
        margin: 0 auto;
        padding-left: 0;
        padding-right: 0;
    }

    .cupons-card[b-al2lxiripj] {
        padding: 22px;
    }

    .cupons-progresso-texto[b-al2lxiripj] {
        font-size: 22px;
    }

    .cupons-barra[b-al2lxiripj] {
        height: 28px;
    }

    .cupons-grade[b-al2lxiripj] {
        gap: 12px;
    }

    .cupons-circulo[b-al2lxiripj] {
        width: calc((100% - 4 * 12px) / 5);
    }

    .cupons-texto[b-al2lxiripj] {
        font-size: 16px;
    }

    .cupons-indica-banner[b-al2lxiripj] {
        flex-direction: row;
        justify-content: center;
        align-items: center;
        gap: 22px;
        padding: 32px;
    }

    .cupons-indica-titulo[b-al2lxiripj] {
        display: block;
        color: var(--ep-verde);
        font-family: var(--fonte-titulo);
        font-weight: bold;
        font-size: 32px;
        line-height: var(--entrelinha);
        text-align: left;
    }

    .cupons-indica-percentual-recorte[b-al2lxiripj] {
        font-size: 88px; /* medido no Figma (computador) */
    }

    .cupons-indica-legenda--mobile[b-al2lxiripj] {
        display: none;
    }

    .cupons-indica-legenda--desktop[b-al2lxiripj] {
        display: block;
        color: var(--ep-roxo);
        width: 140px;
        flex-shrink: 0;
    }

    .cupons-indica-acao[b-al2lxiripj] {
        flex-direction: row;
        align-items: center;
        gap: 12px;
    }

    .cupons-indica-botoes[b-al2lxiripj] {
        flex: 1;
    }
}
/* /Components/Pages/User/MyFavoritesProducts.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO DA /myfavorites — Leva 15, 31/07/2026
   ----------------------------------------------------------------------------
   Mesma estrutura da /models/{id} (Sprint 08): banner roxo próprio + fundo
   verde full-bleed, grade em flex centralizado, cartão com foto vazando.
   Único breakpoint do site: 1000px.
   ========================================================================== */

.favoritos-pagina[b-21i36q4zw1] {
    background-color: var(--ep-verde);
    min-height: 100vh;
    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do título ---------- */
.favoritos-hero[b-21i36q4zw1] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral);
    padding-right: var(--margem-lateral);
    padding-bottom: var(--espaco-6);

    /* Sobe por baixo da Nav_Bar fixa (backlog 5.8) — mesma técnica já usada
       em CategoriaHero/brend-hero/models-hero. */
    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.favoritos-caminho[b-21i36q4zw1] {
    display: block;
    text-align: left;
    font-size: var(--legenda); /* 14px — não muda no computador */

    /* Segunda camada de recuo da Nav_Bar — ver comentário equivalente em
       Model.razor.css/Brend.razor.css: a pílula fica a --margem-lateral da
       borda, e o conteúdo de dentro dela tem mais --espaco-4 de padding
       próprio. */
    padding-left: var(--espaco-4);
}

    .favoritos-caminho a[b-21i36q4zw1] {
        color: var(--ep-branco);
        text-decoration: none;
        font-family: var(--fonte-corpo);
    }

        .favoritos-caminho a:hover[b-21i36q4zw1] {
            text-decoration: underline;
        }

.favoritos-titulo[b-21i36q4zw1] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: 38px; /* medido no Figma (celular) */
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0;
}

/* ---------- Grade de favoritos ---------- */
.favoritos-grid[b-21i36q4zw1] {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--espaco-6);
}

.favoritos-card[b-21i36q4zw1] {
    position: relative;
    background-color: var(--ep-roxo);
    border-radius: 25px; /* medido no Figma */
    height: 304px;
    width: 100%; /* celular: 1 coluna */
    margin-top: 64px;

    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-end;
    padding-bottom: var(--espaco-5);

    cursor: pointer;
    overflow: visible;
    transition: filter .15s;
}

    .favoritos-card:hover[b-21i36q4zw1] {
        filter: brightness(1.08);
    }

.favoritos-coracao[b-21i36q4zw1] {
    position: absolute;
    top: var(--espaco-3);
    right: var(--espaco-3);
    z-index: 2;

    color: var(--ep-branco);
    font-size: 24px;
    cursor: pointer;
}

.favoritos-card-imagem[b-21i36q4zw1] {
    position: absolute;
    bottom: 104px;
    left: 50%;
    transform: translateX(-50%);
    height: 250px;
    display: flex;
    align-items: flex-end;
    justify-content: center;
    pointer-events: none;
}

    .favoritos-card-imagem img[b-21i36q4zw1] {
        max-height: 100%;
        width: auto;
        object-fit: contain;
    }

.favoritos-card-nome[b-21i36q4zw1], .favoritos-card-preco[b-21i36q4zw1] {
    position: relative;
    z-index: 1;
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: 20px; /* medido no Figma */
    line-height: var(--entrelinha);
    text-align: center;
}

.favoritos-card-nome[b-21i36q4zw1] {
    font-weight: normal; /* Regular, medido no Figma */
}

.favoritos-card-preco[b-21i36q4zw1] {
    font-weight: 600; /* Semibold, medido no Figma — sem token correspondente */
}

.favoritos-vazio[b-21i36q4zw1] {
    text-align: center;
    padding: var(--espaco-6) 0;
}

    .favoritos-vazio h3[b-21i36q4zw1] {
        color: var(--ep-roxo-escuro);
        margin-top: var(--espaco-3);
    }

.favoritos-carregando[b-21i36q4zw1] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    .favoritos-pagina[b-21i36q4zw1] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
    }

    .favoritos-hero[b-21i36q4zw1] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: 80px;
        margin-bottom: 64px;

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .favoritos-titulo[b-21i36q4zw1] {
        font-size: 60px; /* medido no Figma (computador) */
    }

    /* No computador o padding interno da pílula da Nav_Bar é --espaco-5
       (32px), não --espaco-4 (24px) — ver Header.razor.css. */
    .favoritos-caminho[b-21i36q4zw1] {
        padding-left: var(--espaco-5);
    }

    .favoritos-grid[b-21i36q4zw1] {
        gap: var(--espaco-5); /* 32px */
    }

    .favoritos-card[b-21i36q4zw1] {
        width: calc((100% - 3 * var(--espaco-5)) / 4); /* 4 cartões por linha */
    }
}
/* /Components/Pages/User/MyOrders.razor.rz.scp.css */
/* ============================================================================
   VISUAL NOVO DA /myorders — Leva 17, 01/08/2026
   ----------------------------------------------------------------------------
   Banner roxo proprio (mesma tecnica de /mycoupons e /myfavorites) + fundo
   verde. get_spec/get_design_md do componente "CARD /MyOrders" deram erro
   na primeira tentativa (variante quebrada no arquivo) - primeira versao foi
   codada por screenshot, sem numero exato. Corrigido numa rodada seguinte:
   a ponte reconectou e a spec do componente "CARD /MyOrders Mobile" (pagina
   "01 - Componentes") puxou certo - cores, radius e as divisorias do celular
   foram recalibrados com os valores exatos. Titulo/banner do topo da pagina
   continuam reaproveitando o padrao das outras telas (esse pedaço nao faz
   parte do componente do Figma). Unico breakpoint do site: 1000px.
   ========================================================================== */

.pedidos-pagina[b-lczsgpbssu] {
    background-color: var(--ep-verde);
    min-height: 100vh;
    padding-bottom: var(--espaco-6);
}

/* ---------- Banner do titulo ---------- */
.pedidos-hero[b-lczsgpbssu] {
    background-color: var(--ep-roxo);
    border-radius: 0 0 56px 56px;

    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-bottom: var(--espaco-4);

    padding-left: var(--margem-lateral-lista);
    padding-right: var(--margem-lateral-lista);
    padding-bottom: var(--espaco-6);

    /* Sobe por baixo da Nav_Bar fixa (backlog 5.8) - mesma tecnica ja usada
       em CategoriaHero/models-hero/favoritos-hero/cupons-hero. */
    margin-top: calc(-1 * (max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4)));
    padding-top: calc(max(16px, env(safe-area-inset-top, 0px)) + 62px + var(--espaco-4) + var(--espaco-3));
}

.pedidos-caminho[b-lczsgpbssu] {
    display: block;
    text-align: left;
    font-size: var(--legenda);
    padding-left: var(--espaco-4);
}

    .pedidos-caminho a[b-lczsgpbssu] {
        color: var(--ep-branco);
        text-decoration: none;
        font-family: var(--fonte-corpo);
    }

        .pedidos-caminho a:hover[b-lczsgpbssu] {
            text-decoration: underline;
        }

.pedidos-titulo[b-lczsgpbssu] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: 38px;
    line-height: var(--entrelinha);
    color: var(--ep-branco);
    text-align: center;
    margin: 0;
}

/* ---------- Coluna de conteudo ---------- */
.pedidos-conteudo[b-lczsgpbssu] {
    padding-left: var(--margem-lateral-lista);
    padding-right: var(--margem-lateral-lista);
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
}

/* ---------- Filtro "Pedidos em aberto" ---------- */
/* Checkbox nativo escondido (acessivel) + pilula roxa custom - substitui o
   Switch do BlazorBootstrap, que nao tem como imitar essa casca (bolinha +
   texto dentro da mesma pilula) so com CSS por cima. */
.pedidos-filtro[b-lczsgpbssu] {
    align-self: center;
    display: inline-flex;
    align-items: center;
    gap: var(--espaco-2);
    background-color: var(--ep-roxo);
    border-radius: var(--canto-botao);
    padding: 10px var(--espaco-4);
    cursor: pointer;
    user-select: none;
}

    .pedidos-filtro input[b-lczsgpbssu] {
        position: absolute;
        width: 1px;
        height: 1px;
        opacity: 0;
        pointer-events: none;
    }

.pedidos-filtro-bolinha[b-lczsgpbssu] {
    width: 16px;
    height: 16px;
    border-radius: 50%;
    background-color: transparent;
    border: 2px solid var(--ep-branco);
    flex-shrink: 0;
    transition: background-color .15s ease;
}

.pedidos-filtro input:checked + .pedidos-filtro-bolinha[b-lczsgpbssu] {
    background-color: var(--ep-branco);
}

.pedidos-filtro-texto[b-lczsgpbssu] {
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: 14px;
    line-height: 1; /* sem isso herdava o line-height padrao do site (1.5),
       a caixa do texto ficava mais alta que a bolinha e "empurrava" a
       pilula toda - mesma armadilha ja vista em /mycoupons. */
    white-space: nowrap; /* com "Somente" o texto ficou mais comprido - sem
       isso quebrava linha dentro da pilula no celular */
}

/* ---------- Cartao de pedido ---------- */
.pedido-card[b-lczsgpbssu] {
    background-color: var(--ep-branco);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    overflow: hidden;
}

.pedido-cabecalho[b-lczsgpbssu] {
    /* Pedido do dono: o caret fica agrupado com "Pedido • código" (linha de
       cima); "Data | Status/Entregue" sempre numa linha propria embaixo -
       igual no celular e no computador, nao muda entre os tamanhos. */
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: var(--espaco-3) 22px;
    cursor: pointer;
}

    .pedido-cabecalho i[b-lczsgpbssu] {
        color: var(--ep-roxo);
        flex-shrink: 0;
    }

.pedido-cabecalho-topo[b-lczsgpbssu] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--espaco-2);
    min-width: 0;
}

.pedido-codigo[b-lczsgpbssu] {
    color: var(--ep-roxo-escuro); /* confirmado na spec do Figma: #621085 -
       mesmo roxo escuro do "Apartamento" abaixo, nao o roxo claro */
    font-family: var(--fonte-corpo);
    font-size: 22px; /* medido na spec - igual nos dois tamanhos de tela */
}

.pedido-meta[b-lczsgpbssu] {
    /* rgba direto (nao "opacity") porque o .pedido-status (verde/amarelo)
       mora dentro desse span - opacity no pai desbotaria a cor junto, ja
       que opacity se acumula pra baixo na arvore, cor sozinha nao. */
    color: rgba(0, 0, 0, 0.5);
    font-family: var(--fonte-corpo);
    font-size: 12px;
}

.pedido-separador[b-lczsgpbssu] {
    margin: 0 4px;
}

/* Verde = pedido em aberto (qualquer status que nao seja "aguardando
   pagamento"); amarelo = aguardando pagamento via pix (.pedido-status--
   pendente, aplicado condicionalmente no .razor). Pedido entregue nao usa
   nenhuma das duas - vira "Entregue: data às hora" em preto 50%, ver
   .pedido-meta acima. */
.pedido-status[b-lczsgpbssu] {
    color: var(--ep-sucesso);
}

.pedido-status--pendente[b-lczsgpbssu] {
    color: var(--ep-aviso);
}

.pedido-status--falha[b-lczsgpbssu] {
    color: var(--ep-erro);
}

/* Previsão de chegada (leva 48) — mesmo verde do .pedido-status, com uma
   bolinha "ao vivo" (cresce/diminui) do lado, pedido do dono. */
.pedido-status--previsto[b-lczsgpbssu] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    color: var(--ep-sucesso);
}

.pedido-previsto-bolinha[b-lczsgpbssu] {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background-color: var(--ep-sucesso);
    animation: previsto-pulsar-b-lczsgpbssu 1.5s ease-in-out infinite;
}

@keyframes previsto-pulsar-b-lczsgpbssu {
    0%, 100% {
        transform: scale(0.7);
        opacity: 0.6;
    }
    50% {
        transform: scale(1.4);
        opacity: 1;
    }
}

/* ---------- Corpo expandido ---------- */
.pedido-corpo[b-lczsgpbssu] {
    padding: 0 22px var(--espaco-3);
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

.pedido-produtos[b-lczsgpbssu] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

/* Componente "CARD_Produto_MyOrders" no Figma - cada produto e um
   cartaozinho proprio dentro do cartao do pedido. A estrutura MUDA entre
   celular e computador (nao e so o mesmo layout encolhendo):
   - Celular: 2 blocos empilhados - imagem+nome em cima, Quantidade|Preço
     numa faixa propria com borda embaixo (Sabor vira legenda sob o nome,
     sem coluna propria).
   - Computador: 1 linha so - imagem+nome | Sabor | Quantidade | Preço,
     com divisorias verticais entre cada um.
   Resolvido com "display: contents" no wrapper da faixa Quantidade/Preço:
   no celular ele e uma caixa com borda; no computador ele "desaparece" e os
   filhos viram parte direta da linha. */
.pedido-produto[b-lczsgpbssu] {
    display: grid;
    grid-template-columns: 56px 1fr;
    gap: var(--espaco-2) var(--espaco-3);
    padding: var(--espaco-2);
    border: 1px solid var(--ep-cinza-borda);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
}

.pedido-produto-imagem[b-lczsgpbssu] {
    grid-column: 1;
    grid-row: 1;
    width: 56px;
    height: auto;
    align-self: stretch; /* caixa roxa preenche de cima a baixo, acompanha a
       altura da linha (que varia com o nome/sabor) em vez de tamanho fixo */
    object-fit: contain;
    background-color: var(--ep-roxo);
    border-radius: 14px; /* medido na spec */
}

.pedido-produto-nome[b-lczsgpbssu] {
    grid-column: 2;
    grid-row: 1;
    color: var(--ep-roxo);
    font-family: var(--fonte-corpo);
    font-size: 22px; /* medido na spec */
    display: flex;
    flex-direction: column;
    gap: 2px;
}

/* Sabor embaixo do nome (so celular) e a coluna "Sabor" (so computador) sao
   o VALOR (ex: "Miami Mint") - confirmado na spec do Figma, preto 50%, nao
   roxo. O rotulo da coluna ("Sabor"/"Quantidade"/"Preço") e que e roxo -
   invertido do que eu tinha antes. */
.pedido-produto-sabor[b-lczsgpbssu] {
    color: rgba(0, 0, 0, 0.5);
    font-size: 12px;
}

.pedido-produto-coluna[b-lczsgpbssu] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    font-size: 12px;
    color: rgba(0, 0, 0, 0.5); /* valor (2 unidades / R$170,00 / Miami Mint) -
       o rotulo (Sabor/Quantidade/Preço) sobrescreve com .pedido-produto-rotulo */
}

/* Precisa vir DEPOIS de ".pedido-produto-coluna" no arquivo: as duas classes
   tem a mesma especificidade (uma classe cada) e o elemento carrega as duas
   juntas - quem for declarado por ultimo no arquivo ganha o empate. Com essa
   regra antes da de cima, o "display: flex" da de cima vencia e a coluna
   "Sabor" aparecia por cima de tudo no celular (bug achado no teste ao vivo). */
.pedido-produto-coluna--sabor[b-lczsgpbssu] {
    display: none; /* no celular o sabor aparece embaixo do nome (ver
       .pedido-produto-sabor--mobile), so no computador vira coluna propria */
}

.pedido-produto-rotulo[b-lczsgpbssu] {
    color: var(--ep-roxo); /* confirmado na spec: o rotulo e roxo, o valor
       (embaixo) e preto 50% - invertido do que eu tinha */
    font-size: 16px; /* medido na spec - igual nos dois tamanhos de tela */
}

/* Divisorias entre nome/Sabor/faixa-Quantidade-Preço - so aparecem no
   computador (ver media query); no celular ficam escondidas porque o Sabor
   vira legenda e a faixa de Quantidade/Preço ja tem borda propria. */
.pedido-produto-divisoria[b-lczsgpbssu] {
    display: none;
}

.pedido-produto-info-linha[b-lczsgpbssu] {
    grid-column: 1 / -1;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--espaco-3);
    border: 1px solid var(--ep-cinza-borda);
    border-radius: var(--espaco-2);
    padding: var(--espaco-2) var(--espaco-3);
}

    .pedido-produto-info-linha .pedido-produto-divisoria[b-lczsgpbssu] {
        display: block; /* a divisoria ENTRE Quantidade e Preço aparece nos
           dois tamanhos - so as outras (nome|Sabor, Sabor|faixa) somem no
           celular */
        width: 0;
        align-self: stretch;
        border-left: 0.5px solid rgba(0, 0, 0, 0.5);
    }

.pedido-divisoria[b-lczsgpbssu] {
    height: 0;
    border-top: 0.5px solid rgba(0, 0, 0, 0.5);
}

.pedido-rodape[b-lczsgpbssu] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

.pedido-totais-divisoria[b-lczsgpbssu] {
    width: 0;
    align-self: stretch;
    border-left: 0.5px solid rgba(0, 0, 0, 0.5);
}

.pedido-endereco[b-lczsgpbssu] {
    position: relative; /* ancoragem do "(i)" do troco - ver .info-texto */
    display: flex;
    flex-direction: column;
    gap: 2px;
    font-family: var(--fonte-corpo);
    font-size: 16px; /* medido na spec (celular) - "Apartamento", Endereço,
       Complemento e Pagamento usam todos o mesmo tamanho */
}

.pedido-endereco-titulo[b-lczsgpbssu] {
    color: var(--ep-roxo-escuro); /* confirmado na spec: mesmo roxo escuro
       do "Pedido • código" */
}

/* Complemento vazio: no celular a linha some (ver .pedido-complemento--
   mobile, so existe no DOM se tiver valor); no computador ela sempre
   aparece, com "Sem complemento" no lugar (ver media query abaixo). */
.pedido-complemento--desktop[b-lczsgpbssu] {
    display: none;
}

/* Rotulo (Endereço:/Complemento:/Frete:/Total:) x valor - mesma dupla de
   cores do produto (.pedido-produto-rotulo/.pedido-produto-coluna) */
.pedido-rotulo[b-lczsgpbssu] {
    color: rgba(0, 0, 0, 0.5);
}

.pedido-valor[b-lczsgpbssu] {
    color: var(--ep-roxo);
}

/* "(i)" do troco em dinheiro - mesmo padrao ja usado em AddressComponent/
   Account/MyCoupons (clique/toque, fecha sozinho em 6s, sem :hover de
   proposito - leva 13b). CSS duplicado aqui porque o escopo do Blazor nao
   atravessa arquivo (LESSONS.md). */
.info-icone[b-lczsgpbssu] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 16px;
    height: 16px;
    margin-left: var(--espaco-1);
    border-radius: 50%;
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
    font-size: 11px;
    font-style: italic;
    font-family: Georgia, 'Times New Roman', serif;
    line-height: 16px;
    text-align: center;
    cursor: pointer;
    vertical-align: middle;
    user-select: none;
}

.info-texto[b-lczsgpbssu] {
    position: absolute;
    left: 50%;
    transform: translateX(-50%); /* centralizado sob o bloco de endereço
       inteiro (.pedido-endereco, o ancestral posicionado mais proximo -
       nao o icone), nao sob o icone - mesma correcao ja aplicada em
       /mycoupons: ancorar no icone deixava a caixa crescer so pra um lado
       e estourar a tela em telas estreitas. */
    top: 22px;
    width: 220px;
    max-width: 100%;
    white-space: normal;
    background-color: var(--ep-roxo-escuro);
    color: var(--ep-branco);
    font-size: 12px;
    font-style: normal;
    font-family: var(--fonte-corpo);
    line-height: 1.4;
    padding: var(--espaco-2) var(--espaco-3);
    border-radius: 6px;
    z-index: 10;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity .15s ease;
}

.info-texto--visivel[b-lczsgpbssu] {
    opacity: 1;
    visibility: visible;
}

.pedido-totais[b-lczsgpbssu] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

.pedido-totais-valores[b-lczsgpbssu] {
    display: flex;
    justify-content: space-between; /* Frete na esquerda, Total na direita,
       a divisoria (ver .pedido-totais-divisoria) fica solta no meio - pedido
       do dono */
    align-items: center;
    font-family: var(--fonte-corpo);
    font-size: 16px; /* medido na spec (celular) */
}

.pedido-botao-suporte[b-lczsgpbssu] {
    display: block;
    width: 100%;
    height: 39px;
    line-height: 39px;
    text-align: center;
    border: none;
    border-radius: var(--canto-botao);
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: 14px;
    text-decoration: none;
    cursor: pointer;
}

    .pedido-botao-suporte:hover[b-lczsgpbssu] {
        filter: brightness(0.92);
        color: var(--ep-branco);
    }

/* Paginação (Sprint 17, item 2) — mesma receita de contorno já usada em
   ".orders-botao--contorno" (Orders.razor, admin), adaptada às cores/
   espaçamentos já usados nesta tela. */
.pedidos-paginacao[b-lczsgpbssu] {
    display: flex;
    gap: var(--espaco-3);
    margin-top: var(--espaco-4);
}

.pedidos-botao-paginacao[b-lczsgpbssu] {
    flex: 1;
    height: 39px;
    border-radius: var(--canto-botao);
    background-color: var(--ep-branco);
    color: var(--ep-roxo);
    border: 1px solid var(--ep-roxo);
    font-family: var(--fonte-corpo);
    font-size: 14px;
    cursor: pointer;
}

    .pedidos-botao-paginacao:hover[b-lczsgpbssu] {
        filter: brightness(0.96);
    }

.pedidos-vazio[b-lczsgpbssu] {
    text-align: center;
    padding: var(--espaco-6) 0;
    color: var(--ep-roxo);
}

    .pedidos-vazio i[b-lczsgpbssu] {
        font-size: 48px;
    }

.pedidos-carregando[b-lczsgpbssu] {
    display: flex;
    justify-content: center;
    padding: var(--espaco-6) 0;
}

.pedidos-alerta[b-lczsgpbssu] {
    margin-top: var(--espaco-3);
}

/* ============================================================================
   COMPUTADOR
   ========================================================================== */
@media (min-width: 1000px) {

    /* No computador a dica do troco abre pro lado direito do icone, nao
       centralizada embaixo do bloco de endereco inteiro (celular) - vira o
       proprio icone a ancora (mais espaco sobrando no computador, sem
       risco de estourar a tela como no celular). */
    .info-icone[b-lczsgpbssu] {
        position: relative;
    }

    .info-texto[b-lczsgpbssu] {
        left: 100%;
        top: 50%;
        transform: translateY(-50%);
        margin-left: var(--espaco-2);
        max-width: 260px;
    }

    .pedidos-hero[b-lczsgpbssu] {
        padding-left: var(--margem-lateral-desktop);
        padding-right: var(--margem-lateral-desktop);
        padding-bottom: 80px;
        margin-bottom: 64px;

        margin-top: calc(-1 * (var(--espaco-4) + 62px + var(--espaco-4)));
        padding-top: calc(var(--espaco-4) + 62px + var(--espaco-4) + var(--espaco-3));
    }

    .pedidos-titulo[b-lczsgpbssu] {
        font-size: 60px;
    }

    .pedidos-caminho[b-lczsgpbssu] {
        padding-left: var(--espaco-5);
    }

    .pedidos-conteudo[b-lczsgpbssu] {
        max-width: 990px; /* medido pelo dono direto no Figma */
        margin: 0 auto;
        padding-left: 0;
        padding-right: 0;
    }

    .pedido-cabecalho[b-lczsgpbssu] {
        padding: var(--espaco-3) 32px;
    }

    .pedido-meta[b-lczsgpbssu] {
        font-size: 14px;
    }

    .pedido-corpo[b-lczsgpbssu] {
        padding: 0 32px var(--espaco-4);
        gap: var(--espaco-4);
    }

    .pedido-produto[b-lczsgpbssu] {
        display: flex;
        align-items: center;
        gap: var(--espaco-4);
        padding: var(--espaco-3) var(--espaco-4);
    }

    .pedido-produto-imagem[b-lczsgpbssu] {
        width: 64px;
    }

    .pedido-produto-nome[b-lczsgpbssu] {
        flex: 1;
    }

    .pedido-produto-sabor--mobile[b-lczsgpbssu] {
        display: none; /* vira coluna propria no computador */
    }

    /* So existem no celular - ver comentario no .razor de onde entram */
    .pedido-divisoria--rodape[b-lczsgpbssu],
    .pedido-divisoria--botao[b-lczsgpbssu],
    .pedido-totais-divisoria[b-lczsgpbssu] {
        display: none;
    }

    .pedido-produto-coluna--sabor[b-lczsgpbssu] {
        display: flex;
    }

    /* No celular essa e uma caixa com borda propria (ver regra base); no
       computador ela "desaparece" e Quantidade/Preço entram na mesma linha
       dos outros campos, lado a lado com Sabor. */
    .pedido-produto-info-linha[b-lczsgpbssu] {
        display: contents;
    }

    /* No computador as 3 divisorias verticais aparecem (nome|Sabor,
       Sabor|Quantidade, Quantidade|Preço) - no celular so a ultima aparece
       (ver ".pedido-produto-info-linha .pedido-produto-divisoria" na base). */
    .pedido-produto-divisoria[b-lczsgpbssu] {
        display: block;
        width: 0;
        align-self: stretch;
        border-left: 0.5px solid rgba(0, 0, 0, 0.5);
    }

    .pedido-produto-coluna[b-lczsgpbssu],
    .pedido-produto-coluna--sabor[b-lczsgpbssu] {
        text-align: left;
        font-size: 16px;
    }

    .pedido-rodape[b-lczsgpbssu] {
        flex-direction: row;
        justify-content: space-between;
        align-items: flex-end;
    }

    .pedido-endereco[b-lczsgpbssu] {
        font-size: 16px;
        flex-grow: 1; /* estica pra empurrar .pedido-totais pro fim da linha -
           junto com o space-between acima do .pedido-rodape */
        /* divisoria vertical separando Apartamento/Endereço/Complemento de
           Frete/Total/Suporte - so no computador, os dois lado a lado */
        padding-right: var(--espaco-4);
        border-right: 0.5px solid rgba(0, 0, 0, 0.5);
    }

    .pedido-complemento--mobile[b-lczsgpbssu] {
        display: none;
    }

    .pedido-complemento--desktop[b-lczsgpbssu] {
        display: block;
    }

    .pedido-totais[b-lczsgpbssu] {
        flex-direction: column;
        align-items: flex-start;
        gap: 12px; /* medido na spec */
        width: auto;
    }

    .pedido-totais-valores[b-lczsgpbssu] {
        flex-direction: column;
        align-items: flex-start;
        justify-content: flex-start;
        gap: 2px;
        font-size: 16px;
        text-align: right;
    }

    .pedido-botao-suporte[b-lczsgpbssu] {
        width: 160px;
    }
}

/* ---------- Modal "Qual problema você está enfrentando?" (leva 43) ---------- */
/* Mesma receita de fundo/caixa já usada em OrderCheckout.razor.css
   (.ordercheckout-modal-fundo/.ordercheckout-modal-caixa) - não existe
   componente de Modal genérico no site, cada tela desenha a própria. */
.pedido-suporte-modal-fundo[b-lczsgpbssu] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    padding: var(--espaco-4);
}

.pedido-suporte-modal[b-lczsgpbssu] {
    width: 360px;
    max-width: 100%;
    box-sizing: border-box;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-4);
    display: flex;
    flex-direction: column;
    gap: var(--espaco-4);
}

.pedido-suporte-modal-cabecalho[b-lczsgpbssu] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--espaco-3);
}

.pedido-suporte-modal-titulo[b-lczsgpbssu] {
    color: var(--ep-roxo-escuro);
    font-family: var(--fonte-corpo);
    font-size: 16px;
    font-weight: bold;
}

.pedido-suporte-modal-fechar[b-lczsgpbssu] {
    background: none;
    border: none;
    color: var(--ep-roxo-escuro);
    font-size: 18px;
    line-height: 1;
    cursor: pointer;
    flex-shrink: 0;
}

.pedido-suporte-modal-opcoes[b-lczsgpbssu] {
    display: flex;
    flex-direction: column;
    gap: var(--espaco-3);
}

/* Mesma técnica de ".pedidos-filtro" (input nativo escondido + bolinha
   própria) - só que aqui é radio, não checkbox, e vive numa caixa branca
   (não numa pílula roxa), então a bolinha inverte: borda roxa, miolo roxo
   quando marcado, em vez de borda/miolo branco. */
.pedido-suporte-opcao[b-lczsgpbssu] {
    display: flex;
    align-items: center;
    gap: var(--espaco-2);
    cursor: pointer;
    user-select: none;
}

    .pedido-suporte-opcao input[b-lczsgpbssu] {
        position: absolute;
        width: 1px;
        height: 1px;
        opacity: 0;
        pointer-events: none;
    }

    .pedido-suporte-opcao span:last-child[b-lczsgpbssu] {
        color: var(--ep-roxo-escuro);
        font-family: var(--fonte-corpo);
        font-size: 14px;
    }

.pedido-suporte-opcao-bolinha[b-lczsgpbssu] {
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background-color: transparent;
    border: 2px solid var(--ep-roxo);
    flex-shrink: 0;
    position: relative;
    transition: background-color .15s ease;
}

.pedido-suporte-opcao input:checked + .pedido-suporte-opcao-bolinha[b-lczsgpbssu] {
    background-color: var(--ep-branco);
}

    .pedido-suporte-opcao input:checked + .pedido-suporte-opcao-bolinha[b-lczsgpbssu]::after {
        content: "";
        position: absolute;
        inset: 3px;
        border-radius: 50%;
        background-color: var(--ep-roxo);
    }

.pedido-suporte-modal-confirmar[b-lczsgpbssu] {
    display: block;
    width: 100%;
    height: 39px;
    line-height: 39px;
    text-align: center;
    border: none;
    border-radius: var(--canto-botao);
    background-color: var(--ep-roxo);
    color: var(--ep-branco);
    font-family: var(--fonte-corpo);
    font-size: 14px;
    text-decoration: none;
    cursor: pointer;
}

    .pedido-suporte-modal-confirmar:hover[b-lczsgpbssu] {
        filter: brightness(0.92);
        color: var(--ep-branco);
    }

/* ---------- Confirmação de cancelar pedido (leva 56) — mesma casca
   "confirmar-exclusao-*" já usada em todo o resto do site (leva 31 em
   diante, ex.: Orders.razor.css). Cópia própria, isolamento do Blazor não
   deixa reaproveitar CSS entre arquivos. ---------- */
.confirmar-exclusao-fundo[b-lczsgpbssu] {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1060;
    padding: var(--espaco-4);
}

.confirmar-exclusao-caixa[b-lczsgpbssu] {
    width: 310px;
    max-width: 100%;
    background-color: var(--ep-branco);
    border: 1px solid var(--ep-roxo);
    border-radius: var(--canto-card);
    box-shadow: var(--sombra-card);
    padding: var(--espaco-4);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.confirmar-exclusao-icone img[b-lczsgpbssu] {
    width: 144px;
    height: 144px;
    object-fit: contain;
}

.confirmar-exclusao-pergunta[b-lczsgpbssu] {
    font-family: var(--fonte-titulo);
    font-weight: bold;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-descricao[b-lczsgpbssu] {
    font-family: var(--fonte-corpo);
    font-weight: 400;
    font-size: var(--legenda);
    color: var(--ep-roxo);
    margin: var(--espaco-2) 0 0;
}

.confirmar-exclusao-botoes[b-lczsgpbssu] {
    display: flex;
    gap: var(--espaco-3);
    width: 100%;
    margin-top: var(--espaco-4);
}

.confirmar-exclusao-nao[b-lczsgpbssu],
.confirmar-exclusao-sim[b-lczsgpbssu] {
    flex: 1;
    height: 39px;
    border-radius: var(--canto-botao);
    font-family: var(--fonte-corpo);
    font-size: var(--legenda);
    border: none;
    cursor: pointer;
}

.confirmar-exclusao-nao[b-lczsgpbssu] {
    background-color: var(--ep-verde);
    color: var(--ep-roxo-escuro);
}

.confirmar-exclusao-sim[b-lczsgpbssu] {
    background-color: var(--ep-erro-forte);
    color: var(--ep-branco);
}
