/* Base visual do Quero Quadra. Cores e tipografia do tema ficam em Layout/Tema.cs; aqui só o que o MudBlazor não cobre. */

/* Archivo (SIL Open Font License) servida pelo app: variável em peso (100–900) e largura (62–125%).
   Texto na largura normal; títulos, placar, horários e valores na largura condensada (ver "Papéis tipográficos"). */
@font-face {
    font-family: 'Archivo'; font-style: normal; font-weight: 100 900; font-stretch: 62% 125%; font-display: swap;
    src: url('../fonts/archivo-latin.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: 'Archivo'; font-style: normal; font-weight: 100 900; font-stretch: 62% 125%; font-display: swap;
    src: url('../fonts/archivo-latin-ext.woff2') format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

html, body {
    font-family: 'Archivo', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
    -webkit-tap-highlight-color: transparent;
}

/* Splash enquanto o WebAssembly carrega. */
.qq-splash {
    position: fixed; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px;
    background: linear-gradient(160deg, #0B5F30 0%, #0E7A3D 100%); color: #fff;
}
.qq-splash-nome { font-weight: 800; font-size: 26px; font-stretch: 82%; }
.qq-splash-barra { width: 140px; height: 4px; border-radius: 4px; background: rgba(255,255,255,.3); overflow: hidden; }
.qq-splash-barra span { display: block; height: 100%; width: var(--blazor-load-percentage, 10%); background: #fff; transition: width .2s; }

#blazor-error-ui {
    background: #FFF4E5; color: #7A4100; bottom: 0; box-shadow: 0 -1px 2px rgba(0,0,0,.2); display: none; left: 0;
    padding: .8rem 1.25rem; position: fixed; width: 100%; z-index: 2000; font-family: inherit;
}
#blazor-error-ui .dismiss { cursor: pointer; position: absolute; right: .75rem; top: .6rem; }

/* Conteúdo com espaço para a barra inferior no celular (inclui a área segura do iPhone). */
.qq-conteudo { padding-bottom: calc(88px + env(safe-area-inset-bottom)); }
@media (min-width: 960px) { .qq-conteudo { padding-bottom: 32px; } }

.qq-barra-inferior {
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 1200;
    display: grid; grid-auto-flow: column; grid-auto-columns: 1fr;
    padding: 6px 8px calc(6px + env(safe-area-inset-bottom));
    background: color-mix(in srgb, var(--mud-palette-surface) 92%, transparent);
    backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
    border-top: 1px solid var(--mud-palette-lines-default);
}
.qq-barra-inferior a {
    display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 6px 0; border-radius: 12px;
    color: var(--mud-palette-text-secondary); text-decoration: none; font-size: 12px; font-weight: 600;
}
.qq-barra-inferior a.active { color: var(--mud-palette-primary); background: color-mix(in srgb, var(--mud-palette-primary) 10%, transparent); }
@media (min-width: 960px) { .qq-barra-inferior { display: none; } }

/* Seções da gestão: no celular cada aba ocupa a mesma largura, com o ícone sobre o nome. */
@media (max-width: 599.98px) {
    .qq-secoes-gestao { display: flex; width: 100%; }
    .qq-secoes-gestao .mud-toggle-item { flex: 1 1 0; min-width: 0; padding: 6px 2px; font-size: 11px; line-height: 1.2; white-space: normal; }
    .qq-secoes-gestao .mud-toggle-item > * { flex-direction: column; }
    .qq-secoes-gestao .mud-toggle-item .mud-icon-root { margin: 0 0 2px 0 !important; }
    /* O MudTabs reserva 160px por aba em estilo inline; no celular cada aba fica do tamanho do nome. */
    .mud-tab { min-width: 0 !important; padding-left: 8px; padding-right: 8px; font-size: 13px; }
}

/* Abas com o nome como foi escrito, como no resto do app (o MudBlazor usa caixa alta). */
.mud-tab { text-transform: none; letter-spacing: 0; }

/* Dias para reservar: no celular uma faixa que desliza com o dedo; com mais espaço, as três semanas à vista. */
.qq-dias { display: grid; grid-auto-flow: column; grid-auto-columns: 64px; gap: 8px; padding-bottom: 8px; overflow-x: auto; }
@media (min-width: 600px) {
    .qq-dias { grid-auto-flow: row; grid-template-columns: repeat(7, minmax(0, 1fr)); overflow: visible; }
}

/* Tela do jogo: no computador, presença à esquerda e rateio, organização e mural à direita. */
.qq-partida, .qq-partida-coluna { display: flex; flex-direction: column; gap: 16px; }
@media (min-width: 960px) {
    .qq-partida { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: start; }
}

/* Em tela de toque, todo alvo tem ao menos 44px para o polegar (WCAG 2.5.5). */
@media (pointer: coarse) {
    .mud-button-root:not(.mud-icon-button), .mud-chip, .mud-toggle-item { min-height: 44px; }
    .mud-icon-button { min-width: 44px; min-height: 44px; }
}

/* Foco visível em tudo que se aciona pelo teclado. */
[data-qq-ativavel]:focus-visible { outline: 3px solid var(--mud-palette-primary); outline-offset: 2px; }

/* Dia escolhido: texto em contraste pleno sobre o verde (sem a transparência dos dias comuns). */
.qq-dia[aria-pressed="true"] > div { opacity: 1 !important; }

/* Linha de uma parte do rateio. */
.qq-parte { padding: 6px 16px; }
.qq-parte > div { flex-wrap: wrap; }
.qq-parte small { white-space: nowrap; }

/* Cartões e blocos reutilizados. */
.qq-cartao { border-radius: 16px !important; }
.qq-cartao-clicavel { cursor: pointer; transition: transform .12s ease, box-shadow .12s ease; }
.qq-cartao-clicavel:hover { transform: translateY(-2px); box-shadow: 0 8px 24px rgba(15, 23, 42, .08) !important; }
.qq-cartao-clicavel:active { transform: scale(.99); }

.qq-hero {
    border-radius: 20px; padding: 20px; color: #fff;
    /* Verde escuro fixo nos dois temas: o texto branco por cima precisa de 4,5:1 em todo o degradê. */
    background: radial-gradient(120% 140% at 100% 0%, #0E7A3D 0%, #0B5F30 100%);
}
.qq-hero .mud-typography { color: #fff; }

.qq-titulo-pagina { font-weight: 800 !important; letter-spacing: 0; }
.qq-rotulo { text-transform: uppercase; letter-spacing: .5px; font-size: 12px !important; font-weight: 700 !important; color: var(--mud-palette-text-secondary); }

/* Grade de horários livres. */
.qq-horarios { display: grid; grid-template-columns: repeat(auto-fill, minmax(84px, 1fr)); gap: 8px; }
.qq-horario {
    border: 1.5px solid var(--mud-palette-lines-default); border-radius: 12px; padding: 10px 0; text-align: center;
    font-weight: 700; cursor: pointer; background: var(--mud-palette-surface); transition: all .12s; user-select: none;
}
.qq-horario:hover { border-color: var(--mud-palette-primary); }
.qq-horario.selecionado { background: var(--mud-palette-primary); border-color: var(--mud-palette-primary); color: #fff; }

/* Botões grandes de presença. */
.qq-presenca { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.qq-presenca .mud-button-root { height: 56px; border-radius: 14px; font-size: 16px; font-weight: 700; text-transform: none; transition: transform .12s ease-out, background-color .2s, box-shadow .2s; }
.qq-presenca .mud-button-root:active { transform: scale(.97); }

/* Na lista do jogo, o admin responde por cada pessoa com um clique ao lado do nome. */
.qq-pessoa-linha { display: flex; align-items: center; gap: 10px; padding: 6px 0; border-bottom: 1px solid var(--mud-palette-lines-default); font-weight: 600; }
.qq-pessoa-linha:last-child { border-bottom: 0; }
.qq-pessoa-linha .mud-icon-button { flex: none; }

/* Molas de movimento (curvas amostradas de uma mola; navegadores sem linear() ficam com o cubic-bezier). */
:root {
    --qq-mola-suave: cubic-bezier(.22, 1, .36, 1);
    --qq-mola-viva: cubic-bezier(.34, 1.4, .64, 1);
}
@supports (transition-timing-function: linear(0, 1)) {
    :root {
        --qq-mola-suave: linear(0, .057, .188, .344, .498, .635, .749, .837, .903, .949, .98, .999, 1.009, 1.014, 1.015, 1.014, 1.012, 1.01, 1.008, 1.005, 1.004, 1.002, 1.001, 1);
        --qq-mola-viva: linear(0, .079, .259, .472, .672, .836, .955, 1.031, 1.071, 1.083, 1.079, 1.064, 1.047, 1.03, 1.016, 1.005, .998, .994, .993, .993, .994, .996, .998, 1);
    }
}

/* Placar: cada dígito é uma fita de 0 a 9 que desliza até o número. */
.qq-so-leitor { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.qq-contador { display: inline-block; font-variant-numeric: tabular-nums; }
.qq-contador-digitos { display: inline-flex; vertical-align: bottom; }
.qq-digito { display: inline-block; height: 1lh; overflow: hidden; }
.qq-digito-fita { display: flex; flex-direction: column; transition: transform .7s var(--qq-mola-viva); }
.qq-digito-fita > span { height: 1lh; text-align: center; }

/* Lotação: confirmados até o máximo; a marca é o mínimo para o jogo acontecer. */
.qq-lotacao {
    view-transition-name: qq-lotacao;
    position: relative; height: 10px; margin: 12px 0; border-radius: 999px; overflow: hidden;
    background: color-mix(in srgb, var(--mud-palette-primary) 16%, transparent);
}
.qq-lotacao-cheio {
    position: absolute; inset: 0 auto 0 0; border-radius: inherit; background: var(--mud-palette-primary);
    transition: width .8s var(--qq-mola-viva);
}
.qq-lotacao-minimo {
    position: absolute; top: 2px; bottom: 2px; width: 2px; margin-left: -1px; border-radius: 2px;
    background: var(--mud-palette-text-secondary); transition: background-color .3s;
}
.qq-lotacao.garantido .qq-lotacao-minimo { background: color-mix(in srgb, var(--mud-palette-primary-text) 70%, transparent); }
/* A resposta que completa o mínimo: uma faixa de luz corre pela barra, uma vez. */
.qq-lotacao.comemorar .qq-lotacao-cheio::after {
    content: ""; position: absolute; inset: 0; border-radius: inherit;
    background: linear-gradient(100deg, transparent 0 35%, rgba(255, 255, 255, .75) 50%, transparent 65% 100%) no-repeat;
    background-size: 220% 100%; background-position: 160% 0;
    animation: qq-faixa 1.1s .35s cubic-bezier(.16, 1, .3, 1) both;
}
@keyframes qq-faixa { to { background-position: -60% 0; } }

/* Transições de tela (View Transitions): cartões e pessoas deslizam até o novo lugar; o resto troca rápido. */
::view-transition-group(*) { animation-duration: .5s; animation-timing-function: var(--qq-mola-suave); }
::view-transition-old(root), ::view-transition-new(root) { animation-duration: .16s; }
::view-transition-group(*.qq-bloco) { overflow: clip; border-radius: 16px; }
.qq-bloco { view-transition-class: qq-bloco; }
::view-transition-old(*.qq-bloco), ::view-transition-new(*.qq-bloco) { height: 100%; object-fit: none; object-position: top; }
::view-transition-old(*.qq-bloco) { animation-duration: .2s; }
::view-transition-new(*.qq-bloco) { animation-duration: .3s; }
/* Selos que mudam de largura trocam presos à direita, sem esticar o texto. */
::view-transition-old(qq-minha-resposta), ::view-transition-new(qq-minha-resposta),
::view-transition-old(qq-minimo), ::view-transition-new(qq-minimo) { width: auto; height: 100%; left: auto; right: 0; }
/* Placar e lotação animam ao vivo na tela nova: a foto antiga sai de cena. */
::view-transition-old(qq-confirmados), ::view-transition-old(qq-lotacao) { display: none; }
::view-transition-new(qq-confirmados), ::view-transition-new(qq-lotacao) { animation: none; }

@media (prefers-reduced-motion: reduce) {
    .qq-digito-fita, .qq-lotacao-cheio, .qq-presenca .mud-button-root { transition: none; }
    .qq-lotacao.comemorar .qq-lotacao-cheio::after { animation: none; }
    ::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation: none !important; }
}

/* Agenda de gestão: uma linha do tempo por espaço. */
.qq-agenda { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.qq-agenda-grade { position: relative; min-width: 720px; }
.qq-agenda-linha { display: grid; grid-template-columns: 140px 1fr; align-items: stretch; border-bottom: 1px solid var(--mud-palette-lines-default); min-height: 64px; }
.qq-agenda-espaco { padding: 10px 12px; font-weight: 700; display: flex; flex-direction: column; justify-content: center; position: sticky; left: 0; background: var(--mud-palette-surface); z-index: 2; }
.qq-agenda-trilha { position: relative; }
.qq-agenda-hora { position: absolute; top: 0; bottom: 0; border-left: 1px dashed var(--mud-palette-lines-default); font-size: 11px; color: var(--mud-palette-text-secondary); padding-left: 3px; }
.qq-agenda-bloco {
    position: absolute; top: 8px; bottom: 8px; border-radius: 10px; padding: 4px 8px; overflow: hidden; cursor: pointer;
    font-size: 12px; font-weight: 600; line-height: 1.25; color: #fff; box-shadow: 0 2px 6px rgba(0,0,0,.12);
}
.qq-agenda-bloco.Confirmada, .qq-agenda-bloco.Concluida { background: var(--mud-palette-success); color: var(--mud-palette-success-text); }
.qq-agenda-bloco.Aguardando, .qq-agenda-bloco.AguardandoConfirmacao { background: var(--mud-palette-warning); color: var(--mud-palette-warning-text); }
.qq-agenda-bloco.Bloqueio { background: repeating-linear-gradient(45deg, #64748B, #64748B 8px, #475569 8px, #475569 16px); }
.qq-agenda-bloco.Feriado { background: #6D28D9; }
/* Reserva ainda não paga (inteira): selo "R$" no canto do bloco. */
.qq-agenda-bloco.com-pendencia { padding-right: 30px; }
.qq-agenda-pendente {
    position: absolute; top: 4px; right: 4px; padding: 2px 5px; border-radius: 6px;
    background: #fff; color: #B45309; font-size: 11px; font-weight: 800; line-height: 1.2; box-shadow: 0 1px 2px rgba(0,0,0,.2);
}
.qq-agenda-agora { position: absolute; top: 0; bottom: 0; width: 2px; background: var(--mud-palette-error); z-index: 1; }

.qq-mapa { isolation: isolate; height: 280px; border-radius: 12px; overflow: hidden; border: 1px solid var(--mud-palette-lines-default); margin-bottom: 4px; }

/* Mapa do resultado da busca, embaixo da lista de arenas e com a largura toda. */
.qq-mapa-busca { isolation: isolate; height: 60vh; min-height: 320px; border-radius: 16px; overflow: hidden; border: 1px solid var(--mud-palette-lines-default); }
.qq-marcador-preco { width: 0; height: 0; }
.qq-marcador-preco .qq-preco-no-mapa { position: absolute; transform: translate(-50%, -50%); }
.qq-preco-no-mapa {
    background: var(--mud-palette-primary); color: var(--mud-palette-primary-text); font: 700 12px/1 'Archivo', system-ui, sans-serif; padding: 6px 8px; border-radius: 999px;
    box-shadow: 0 2px 6px rgba(0,0,0,.25); white-space: nowrap; border: 2px solid #fff; cursor: pointer;
}
.qq-janela-arena { font: 13px/1.4 'Archivo', system-ui, sans-serif; color: #0F172A; max-width: 220px; }
.qq-janela-arena strong { display: block; font-size: 14px; margin-bottom: 2px; }
.qq-janela-preco { font-weight: 700; margin-top: 4px; }
.qq-janela-arena button {
    margin-top: 8px; width: 100%; padding: 8px; border: 0; border-radius: 8px; background: var(--mud-palette-primary); color: var(--mud-palette-primary-text); font-weight: 700; cursor: pointer;
}

.qq-pix { font-family: ui-monospace, 'SFMono-Regular', Menlo, monospace; word-break: break-all; }
.qq-icones-esporte { display: flex; flex-wrap: wrap; gap: 6px; }
.qq-mural { max-height: 320px; overflow-y: auto; }
.qq-truncar { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* No celular, avisos aparecem acima da barra inferior em vez de ficarem escondidos atrás dela. */
@media (max-width: 959px) {
    .mud-snackbar-location-bottom-center { bottom: calc(84px + env(safe-area-inset-bottom)) !important; }
}

/* Papéis tipográficos: títulos e números na largura condensada da Archivo, com algarismos de mesma largura
   (placar, horários, dias e valores não "dançam" quando mudam). */
.mud-typography-h4, .mud-typography-h5, .mud-typography-h6, .qq-titulo-pagina { font-stretch: 82%; }
.mud-typography-h4, .mud-typography-h5, .mud-typography-h6, .qq-contador, .qq-horario, .qq-dia, .qq-preco-no-mapa { font-variant-numeric: tabular-nums; }
.qq-contador, .qq-horario, .qq-dia > div:nth-child(2), .qq-preco-no-mapa { font-stretch: 82%; }

/* Texto "secundário" é cinza suave; a cor Secondary do tema (laranja) fica para botões e destaques. */
.mud-typography.mud-secondary-text { color: var(--mud-palette-text-secondary) !important; }
