/* ================================================================
   Lekto V3 — Execução de Avaliação (uma pergunta por vez).
   ----------------------------------------------------------------
   Overlay full-bleed, sem chrome do app: o respondente vê uma pergunta
   e mais nada. A avaliação INTEIRA — capa, as perguntas e o fim — vive no
   fundo granular (gradiente imersivo + grão em overlay). Antes só a capa e o
   fim eram escuros e as perguntas voltavam ao branco: quem responde
   atravessava três ambientes numa sessão de doze minutos.
   Ver js/form-runner.js.
   ================================================================ */
.fmr {
  position: fixed; inset: 0; z-index: 250;
  display: flex; flex-direction: column;
  background: var(--lkt-gradient-immersive-radial);
  /* Os controles nativos acompanham: sem isto o popup do <select>, o seletor
     de data e as barras de rolagem abrem brancos em cima do palco escuro. */
  color-scheme: dark;

  /* OS TOKENS DE TEMA, REDEFINIDOS NO ESCOPO.
     Custom property resolve por herança do ancestral mais próximo, não por
     especificidade da regra que a consome: dentro do overlay `.fmr` vence o
     `:root` de css/tokens.css sem depender de ordem na folha, e como `.fmr` é
     um ramo folha do <body>, nada disso vaza para o resto do app. É o que
     evita reescrever as sessenta declarações deste arquivo uma a uma. */
  --theme-text-heading: var(--color-essence-ivory);
  --theme-text-muted: color-mix(in srgb, var(--color-essence-ivory) 64%, transparent);
  --theme-border-subtle: color-mix(in srgb, var(--color-essence-ivory) 22%, transparent);
  --theme-panel-border: color-mix(in srgb, var(--color-essence-ivory) 18%, transparent);
  --theme-surface-muted: color-mix(in srgb, var(--color-essence-ivory) 10%, transparent);

  /* O "papel" das fórmulas. Onde o branco entrava LITERAL como base de
     color-mix, entra esta superfície — translúcida de propósito, para o card
     PERTENCER ao degradê em vez de flutuar como um retângulo opaco sobre ele. */
  --fmr-papel: color-mix(in srgb, var(--color-essence-ivory) 7%, transparent);
  --fmr-papel-alto: color-mix(in srgb, var(--color-essence-ivory) 12%, transparent);
  /* A SUPERFÍCIE DE CONTEÚDO É CLARA (21/ago). O palco segue escuro; o card do
     deck e os botões de opção, escala e lista — onde se lê e onde se escolhe —
     passam a ser quase brancos. O cromo (setas, navegação) fica no papel escuro
     de sempre: ele não é conteúdo.

     Opaca, como a versão escura já era: translúcido, o card deixava ver os de
     trás através dos da frente, e o leque fechado — cinco cartas sobrepostas —
     virava um emaranhado de contornos. Card que não oculta o que está atrás não
     é carta, é vidro. */
  --fmr-claro: var(--color-surface-tinted);
  /* O card em foco, um degrau acima: a diferença entre "editável" e "de
     relance" continua sendo também de luz, como era no escuro. */
  --fmr-claro-alto: var(--color-essence-ivory);
  /* A tinta de acento sobre escuro. O --color-accent-pure sobre o roxo do
     degradê dá cerca de 3:1 e reprova para texto; o par claro do MESMO acento
     passa folgado, e já é token. */
  --fmr-tinta: var(--color-accent-light);
  /* Sobre a superfície LEVANTADA (o card, a pastilha da tecla-letra) o fundo já
     é mais claro, e a mesma tinta cai para 3,2-3,7:1 no canto claro do degradê.
     Um degrau acima resolve, e continua sendo o mesmo acento. */
  --fmr-tinta-alto: var(--color-accent-pale);
}
.fmr[hidden] { display: none; }
body.fmr-open { overflow: hidden; }

/* A TINTA ACOMPANHA A SUPERFÍCIE.
   Mesmo mecanismo do bloco `.fmr` acima, um nível abaixo: onde o fundo virou
   quase branco, os tokens de tema voltam ao valor do tema claro, e tudo que
   está DENTRO herda daqui — a pastilha do número, a da tecla-letra, o rótulo
   "Relacionar a", os <select>, o check da opção, o "Salvar e fechar".
   Sem isto seria corrigir uma cor de cada vez, em sessenta declarações, e a
   próxima regra escrita nasceria errada de novo. */
.fmr__regcard,
.fmr__opt,
.fmr__esc,
.fmr__card {
  --theme-text-heading: var(--color-surface-deep);
  --theme-text-muted: var(--color-surface-dark);
  --theme-border-subtle: var(--color-surface-light);
  --theme-panel-border: var(--color-surface-light);
  --theme-surface-muted: var(--color-surface-pale);
  --fmr-papel: var(--color-surface-pale);
  --fmr-papel-alto: var(--color-surface-mist);
  /* O acento claro existia para vencer o roxo do degradê. Sobre branco os dois
     degraus COLAPSAM: o `-alto` no escuro era "superfície levantada, tinta um
     passo mais clara", e aqui as superfícies mal diferem (branco e o surface-mist acima).
     Fica o acento escuro nos dois — o cheio dá 4,5:1 raspando no número da
     escala, e raspar não é passar. */
  --fmr-tinta: var(--color-accent-dark);
  --fmr-tinta-alto: var(--color-accent-dark);
  color: var(--theme-text-heading);
}

/* O grão vive ATRÁS do conteúdo (os irmãos são z-index: 1) e nunca sobre texto
   pequeno. Nas perguntas ele fica a meia força: presente o bastante para a
   superfície ser a mesma da capa, discreto o bastante para não competir com o
   que se lê. Cheio só nos momentos de marca. */
.fmr__grain { position: absolute; inset: 0; opacity: .5; pointer-events: none; background-image: var(--lkt-grain-strong); mix-blend-mode: overlay; transition: opacity var(--motion-dur-slow, .4s) ease; }
.fmr.is-cover .fmr__grain { opacity: 1; }

/* ---- barra de progresso ---- */
/* Uma regra só, agora que capa e perguntas são a mesma superfície. O
   preenchimento é branco, e não o acento: o --color-accent-pure sobre o
   degradê roxo quase não se distingue do trilho. */
.fmr__bar { position: relative; z-index: 1; height: 4px; background: var(--theme-surface-muted); flex-shrink: 0; }
.fmr__barfill { display: block; height: 100%; width: 0; background: var(--color-essence-ivory); border-radius: 0 var(--border-radius-pill) var(--border-radius-pill) 0; transition: width var(--motion-dur-slow, .4s) cubic-bezier(.22, 1, .36, 1); }

/* ---- topo ---- */
.fmr__top { position: relative; z-index: 1; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 16px 20px; flex-shrink: 0; }
.fmr__pos { font-size: 13px; font-weight: 700; letter-spacing: .02em; color: var(--theme-text-muted); }
.fmr__close { display: grid; place-items: center; width: 40px; height: 40px; border: 0; border-radius: var(--border-radius-circle, 50%); background: var(--theme-surface-muted); cursor: pointer; }
.fmr__close svg { width: 19px; height: 19px; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; color: var(--theme-text-heading); }

/* ---- palco ---- */
/* `safe center`, e não `center`: com o conteúdo mais alto que o palco, o
   centralizado empurra o topo para fora e a rolagem não alcança o que ficou
   acima — o enunciado sumia na pergunta de registros. `safe` centra enquanto
   cabe e alinha ao topo quando não cabe. */
.fmr__stage { position: relative; z-index: 1; flex: 1; min-height: 0; overflow-y: auto; display: flex; align-items: safe center; justify-content: center; padding: 24px 24px 96px; }
.fmr__q, .fmr__cover, .fmr__end { width: 100%; max-width: 640px; }
/* A pergunta de registros é um espaço de trabalho, não um enunciado: o DECK usa
   o palco inteiro. Mas só ele — o cabeçalho, o escopo, o OK e a dica continuam
   na coluna de 640 centrada, exatamente onde caem nas outras seis perguntas.
   Antes a pergunta inteira abria para 1120px e o cabeçalho ia para a borda
   esquerda enquanto os cards ficavam no meio: o mesmo enunciado lido em dois
   eixos diferentes, que é o que fazia a tela parecer torta.
   O título encolhe por ORÇAMENTO VERTICAL, não por largura — é ele que come a
   altura de que os cards precisam. */
.fmr__q--amplo { max-width: none; }
.fmr__q--amplo > .fmr__qhead,
.fmr__q--amplo > .fmr__ok,
.fmr__q--amplo > .fmr__hint--solo { width: 100%; max-width: 640px; margin-inline: auto; }
/* O OK e a dica ganham de volta o recuo de 29px que o `margin-left` original
   dava e que o `margin-inline: auto` da linha acima precisou apagar para
   centrar a coluna. É o mesmo recuo do corpo das outras perguntas. */
.fmr__q--amplo > .fmr__ok,
.fmr__q--amplo > .fmr__hint--solo { padding-left: 29px; }
.fmr__q--amplo .fmr__qhead { margin-bottom: 16px; }
.fmr__q--amplo .fmr__qtitle { font-size: 22px; }
.fmr__q--amplo .fmr__qsub { margin-top: 5px; font-size: 14px; }
.fmr__q--amplo .fmr__qbody { margin-left: 0; }
.fmr__cover, .fmr__end { text-align: center; display: flex; flex-direction: column; align-items: center; gap: 14px; }

/* fallback de entrada quando o GSAP não carregou */
@keyframes fmr-in { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: none; } }
.fmr__stage > .is-in { animation: fmr-in .3s cubic-bezier(.22, 1, .36, 1); }

/* ---- capa e fim ---- */
.fmr__eyebrow { font-size: 12px; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; color: color-mix(in srgb, var(--color-essence-ivory) 72%, transparent); }
.fmr__covertitle { font-family: var(--font-display, inherit); font-size: 38px; font-weight: 800; line-height: 1.14; color: var(--color-essence-ivory); }
.fmr__coversub { max-width: 46ch; font-size: 16px; line-height: 1.55; color: color-mix(in srgb, var(--color-essence-ivory) 82%, transparent); }
.fmr__start { display: inline-flex; align-items: center; gap: 8px; min-height: 48px; margin-top: 8px; padding: 0 24px; font-size: 15.5px; font-weight: 800; color: var(--color-surface-deepest); border: 0; border-radius: var(--border-radius-pill); background: var(--color-essence-ivory); cursor: pointer; transition: transform var(--motion-dur-fast); }
.fmr__start:hover { transform: translateY(-1px); }
.fmr__start svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.fmr__endic { display: grid; place-items: center; width: 62px; height: 62px; border-radius: var(--border-radius-circle, 50%); background: color-mix(in srgb, var(--color-essence-ivory) 14%, transparent); }
.fmr__endic svg { width: 30px; height: 30px; fill: none; stroke: var(--color-essence-ivory); stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }

/* ---- pergunta ---- */
.fmr__qhead { display: flex; gap: 14px; margin-bottom: 28px; }
.fmr__qn { display: flex; align-items: center; gap: 2px; padding-top: 9px; font-size: 14px; font-weight: 700; color: var(--fmr-tinta); flex-shrink: 0; }
.fmr__qn svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.fmr__qtitle { font-size: 27px; font-weight: 550; line-height: 1.28; color: var(--theme-text-heading); }
.fmr__qtitle b, .fmr__qtitle strong { font-weight: 800; }
/* NBSP no JS prende o asterisco à última palavra: sozinho numa linha ele lia
   como erro de layout. */
.fmr__req { color: var(--color-error-pure); }
.fmr__qsub { margin-top: 8px; font-size: 15px; line-height: 1.5; color: var(--theme-text-muted); }
.fmr__qbody { margin-left: 29px; }
.fmr__q.is-falta .fmr__qbody { animation: fmr-shake .4s; }
@keyframes fmr-shake { 10%, 90% { transform: translateX(-3px); } 30%, 70% { transform: translateX(5px); } 50% { transform: translateX(-5px); } }

/* alternativas — a tecla-letra é o atalho, não decoração */
.fmr__opts { display: flex; flex-direction: column; gap: 10px; }
.fmr__opt { display: flex; align-items: center; gap: 12px; width: 100%; min-height: 54px; padding: 10px 14px; border: 1.5px solid var(--color-accent-pure); border-radius: var(--border-radius-sm); background: var(--fmr-claro); cursor: pointer; text-align: left; transition: background var(--motion-dur-fast), transform var(--motion-dur-fast); }
.fmr__opt:hover { background: color-mix(in srgb, var(--color-accent-pure) 22%, var(--fmr-claro)); transform: translateX(2px); }
.fmr__opt.is-sel { background: color-mix(in srgb, var(--color-accent-pure) 30%, var(--fmr-claro)); }
.fmr__optkey { flex-shrink: 0; display: grid; place-items: center; width: 26px; height: 26px; font-size: 12.5px; font-weight: 800; color: var(--fmr-tinta-alto); border: 1px solid color-mix(in srgb, var(--color-accent-pure) 60%, transparent); border-radius: var(--border-radius-nano); background: var(--fmr-papel-alto); }
.fmr__optthumb { flex-shrink: 0; display: grid; place-items: center; width: 40px; height: 40px; border-radius: var(--border-radius-nano); background: var(--theme-surface-muted); }
.fmr__optthumb svg { width: 19px; height: 19px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; color: var(--theme-text-muted); }
.fmr__opttxt { flex: 1; min-width: 0; font-size: 16px; font-weight: 600; color: var(--theme-text-heading); }
.fmr__optcheck { flex-shrink: 0; opacity: 0; transition: opacity var(--motion-dur-fast); }
.fmr__opt.is-sel .fmr__optcheck { opacity: 1; }
.fmr__optcheck svg { width: 19px; height: 19px; fill: none; stroke: var(--fmr-tinta); stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }

/* Régua numa linha só (ver campoHTML em js/form-runner.js): `--fmr-esc-n` traz a
   contagem real, e as casas dividem a largura em vez de quebrar. */
.fmr__escala { display: grid; grid-template-columns: repeat(var(--fmr-esc-n, 11), minmax(0, 1fr)); gap: 8px; }
.fmr__esc { display: grid; place-items: center; min-width: 0; height: 52px; font-size: 16px; font-weight: 700; color: var(--fmr-tinta); border: 1.5px solid var(--color-accent-pure); border-radius: var(--border-radius-sm); background: var(--fmr-claro); cursor: pointer; transition: background var(--motion-dur-fast), transform var(--motion-dur-fast); }
.fmr__esc:hover { transform: translateY(-2px); }
.fmr__esc.is-sel { background: var(--color-accent-pure); color: var(--color-essence-ivory); }

.fmr__estrelas { display: flex; gap: 10px; }
.fmr__estrela { display: grid; place-items: center; width: 52px; height: 52px; border: 0; border-radius: var(--border-radius-sm); background: none; cursor: pointer; transition: transform var(--motion-dur-fast); }
.fmr__estrela:hover { transform: scale(1.12); }
.fmr__estrela svg { width: 38px; height: 38px; fill: none; stroke: var(--color-accent-pure); stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }
.fmr__estrela.is-on svg { fill: var(--color-accent-pure); }

.fmr__campo { width: 100%; max-width: 560px; font: inherit; font-size: 17px; color: var(--theme-text-heading); padding: 12px 2px; border: 0; border-bottom: 2px solid var(--theme-border-subtle); background: transparent; outline: none; resize: vertical; transition: border-color var(--motion-dur-fast); }
.fmr__campo::placeholder { color: var(--theme-text-muted); }
.fmr__campo:focus { border-bottom-color: var(--color-accent-pure); }
.fmr__campo--data { max-width: 240px; }
.fmr__upload { display: inline-flex; align-items: center; gap: 10px; min-height: 52px; padding: 0 20px; font-size: 15.5px; font-weight: 700; color: var(--fmr-tinta); border: 1.5px dashed var(--color-accent-pure); border-radius: var(--border-radius-sm); background: transparent; cursor: pointer; }
.fmr__upload svg { width: 19px; height: 19px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }

/* ---- escolha com imagem: cards ---- */
.fmr__cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(168px, 1fr)); gap: 14px; }
.fmr__card { display: flex; flex-direction: column; padding: 0; overflow: hidden; text-align: left; border: 1.5px solid var(--color-accent-pure); border-radius: var(--border-radius-sm); background: var(--fmr-claro); cursor: pointer; transition: background var(--motion-dur-fast), transform var(--motion-dur-fast); }
.fmr__card:hover { background: color-mix(in srgb, var(--color-accent-pure) 22%, var(--fmr-claro)); transform: translateY(-2px); }
.fmr__card.is-sel { background: color-mix(in srgb, var(--color-accent-pure) 30%, var(--fmr-claro)); }
.fmr__cardpic { display: grid; place-items: center; aspect-ratio: 4 / 3; background: var(--theme-surface-muted); overflow: hidden; }
.fmr__cardpic img { width: 100%; height: 100%; object-fit: cover; }
.fmr__cardpic svg { width: 26px; height: 26px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; color: var(--theme-text-muted); }
.fmr__cardfoot { display: flex; align-items: center; gap: 9px; padding: 10px 11px; }
.fmr__cardtxt { flex: 1; min-width: 0; font-size: 15px; font-weight: 600; color: var(--theme-text-heading); }
.fmr__card.is-sel .fmr__optcheck { opacity: 1; }

/* ---- lista vinda da atribuição ---- */
/* O recorte dito em voz alta antes das opções: sem ele a lista de sete nomes não
   explica por que são só sete, e é aí que se registra no aluno errado. */
.fmr__escopo { display: flex; align-items: center; gap: 8px; margin-bottom: 14px; font-size: 13px; font-weight: 700; color: var(--fmr-tinta); }
.fmr__escopo svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
/* Vinte e oito alunos não cabem numa tela: a lista rola dentro de si, e a
   pergunta acima e o OK abaixo continuam onde estavam. */
.fmr__opts--lista { max-height: min(46vh, 400px); overflow-y: auto; padding-right: 4px; }
.fmr__opts--lista .fmr__opt { min-height: 50px; }
.fmr__optsub { flex-shrink: 0; font-size: 13px; color: var(--theme-text-muted); }
/* Passando de doze não há letra para mostrar; o espaço fica, para os nomes não
   dançarem de um item para o outro. */
.fmr__optkey--vazia { border-color: transparent; background: transparent; }
.fmr__vazio { display: flex; align-items: center; gap: 10px; max-width: 520px; font-size: 15px; color: var(--theme-text-muted); }
.fmr__vazio svg { flex-shrink: 0; width: 19px; height: 19px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }

/* ---- registros múltiplos ---- */
/* ---- registros múltiplos: carrossel coverflow ----
   O registro em foco é formulário; os vizinhos são relance. A geometria vem
   do GSAP (js/form-runner.js, tabela COVER) e não daqui: é uma transformação
   por card, animada, e mantê-la num lugar só evita CSS e JS discordando sobre
   onde o card está. Aqui fica o que é forma, não posição. */
.fmr__carrossel {
  position: relative; width: 100%;
  /* Folga suficiente para o card em foco (≈380px) respirar, sem empurrar o
     enunciado e o botão de somar para fora do palco. */
  min-height: clamp(320px, 46vh, 520px);
  display: flex; align-items: center; justify-content: center;
  perspective: 1400px;
}
.fmr__regcard {
  position: absolute; top: 50%; left: 50%;
  width: min(560px, 46vw, 88vw); margin: 0;
  /* a centralização é do GSAP (xPercent/yPercent em aplicarCoverflow); aqui só
     o fallback para o quadro anterior ao script assumir */
  transform: translate(-50%, -50%);
  padding: 20px 22px; text-align: left;
  border: 1.5px solid var(--theme-border-subtle); border-radius: var(--border-radius-sm-plus);
  /* O fio de luz interno no topo saiu com o card escuro: sobre superfície quase
     branca ele não existe. Quem separa do palco agora é a própria claridade. */
  background: var(--fmr-claro);
}
/* O card em foco é o único plano de trabalho: some com a sombra de camada e
   ganha a borda de destaque, para a diferença entre "editável" e "de relance"
   não depender só do tamanho. */
.fmr__regcard.is-foco {
  border-color: color-mix(in srgb, var(--color-accent-pure) 70%, transparent);
  background: var(--fmr-claro-alto);
  /* A sombra projetada FICA, ao contrário do que valia no escuro: card claro
     sobre palco escuro é justamente onde ela separa. */
  box-shadow: 0 24px 48px -12px var(--color-opacity-superintense);
  max-height: min(72vh, 560px); overflow-y: auto;
}
/* Rodapé do card aberto. A linha de cima separa a ação do conteúdo, e o botão
   é pequeno de propósito: ele fecha o card, não envia a avaliação. */
.fmr__regfoot { display: flex; justify-content: flex-end; margin-top: 18px; padding-top: 12px; border-top: 1px solid var(--theme-border-subtle); }
.fmr__regfechar {
  min-height: 38px; padding: 0 18px; font: inherit; font-size: 14px; font-weight: 800;
  color: var(--fmr-tinta-alto); border: 1.5px solid color-mix(in srgb, var(--color-accent-pure) 55%, transparent);
  border-radius: var(--border-radius-sm); background: transparent; cursor: pointer;
  transition: background var(--motion-dur-fast), border-color var(--motion-dur-fast);
}
.fmr__regfechar:hover { background: color-mix(in srgb, var(--color-accent-pure) 24%, transparent); border-color: var(--color-accent-pure); }
.fmr__regfechar:focus-visible { outline: 2px solid var(--color-accent-pure); outline-offset: 2px; }

/* ALTURA FIXA no deck. Um baralho tem cartas do mesmo tamanho: com a altura
   vindo do conteúdo, um registro de duas linhas ficava mais baixo que os
   vizinhos e deixava aparecer a metade vazia da carta de trás — um retângulo
   sem nada no meio do leque. */
.fmr__regcard--relance { height: 238px; overflow: hidden; cursor: pointer; display: flex; flex-direction: column; gap: 8px; }
.fmr__regcard--relance:hover { border-color: var(--color-accent-soft); }
.fmr__regcard--relance:focus-visible { outline: 2px solid var(--color-accent-pure); outline-offset: 3px; }
/* O conteúdo encosta no lado que fica À VISTA. Sem isso, o card da direita
   mostrava o fim da frase — a faixa visível dele é a borda direita, e o texto
   começava lá atrás, escondido pelo card em foco. */
.fmr__regcard--esq { align-items: flex-start; text-align: left; }
.fmr__regcard--dir { align-items: flex-end; text-align: right; }
.fmr__regcard--dir .fmr__regchips { justify-content: flex-end; }
.fmr__regcard--dir .fmr__regthumbs { justify-content: flex-end; }
/* E o conteúdo se estreita até a faixa que sobra à vista (--relance-w, medida
   em js/form-runner.js). Encostar no lado certo não bastava: as linhas ainda
   tinham a largura do card inteiro e continuavam por baixo do card em foco.
   O piso de 96px é tipográfico — abaixo disso um chip deixa de ser legível, e
   aí é melhor o card sumir (FAIXA_MIN cuida disso) do que virar tarja. */
.fmr__regcard--relance > * { max-width: max(96px, var(--relance-w, 100%)); }

.fmr__regtop { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }
.fmr__regn {
  display: grid; place-items: center; width: 26px; height: 26px; flex-shrink: 0;
  font-size: 12.5px; font-weight: 800; color: var(--fmr-tinta-alto);
  border-radius: var(--border-radius-nano); background: var(--fmr-papel-alto);
  font-variant-numeric: tabular-nums;
}
/* ---- o card em foco: a observação manda ----
   O campo grande não usa o sublinhado de 2px do .fmr__campo: numa caixa de
   várias linhas ele lê como input gigante. Superfície própria e anel de foco
   separam melhor — e é o que faz o campo parecer o lugar de trabalho, e não
   mais um campo entre outros. */
.fmr__campo--obs {
  display: block; width: 100%; max-width: none;
  font-size: 19px; line-height: 1.5; font-weight: 500;
  min-height: 4.6em; max-height: min(38vh, 320px);
  margin: 0; padding: 12px 14px;
  border: 0; border-radius: var(--border-radius-sm);
  background: color-mix(in srgb, var(--color-accent-pure) 6%, transparent);
  /* a alça de arrastar brigaria com a altura automática (autoAltura, em
     js/form-runner.js): a próxima tecla desfaria o que a mão fez */
  resize: none; overflow-y: auto;
}
.fmr__campo--obs:focus { outline: 2px solid var(--color-accent-pure); outline-offset: 1px; border-bottom-color: transparent; }

/* ---- os seletores: secundários, pequenos e DEPOIS ----
   auto-fit resolve de uma a cinco listas sem media query: uma ocupa a linha,
   duas dividem, três a cinco quebram sozinhas. */
.fmr__regrel { margin-top: 16px; }
.fmr__rellbl { display: block; margin-bottom: 6px; font-size: 11.5px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; color: var(--theme-text-muted); }
.fmr__regsels { display: grid; gap: 8px; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
/* `min-width: 0` não é enfeite: <select> em grid tem min-width automático
   derivado da opção mais longa, e um nome como "Ana Carolina de Souza —
   Grupo 1" estouraria a trilha, engordaria o <article> além do teto e
   derivaria a geometria inteira do deck, que se mede da largura real do card
   (aplicarCoverflow, em js/form-runner.js). */
.fmr__regsels .fmr__campo { min-width: 0; width: 100%; max-width: none; font-size: 14px; padding: 7px 2px; }
.fmr__campo--sel { font-weight: 700; cursor: pointer; }
.fmr__regdel { display: grid; place-items: center; width: 30px; height: 30px; border: 0; border-radius: var(--border-radius-nano); background: none; cursor: pointer; }
/* 16px e traço 1.8: a lixeira tem mais desenho que o × que estava aqui, e no
   traço grosso de antes as três linhas do corpo empastavam. */
.fmr__regdel svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; color: var(--theme-text-muted); }
.fmr__regdel:hover svg { color: var(--color-error-pure); }

/* ---- o card de relance ---- */
.fmr__regchips { display: flex; flex-wrap: wrap; gap: 6px; }
/* Uma linha por chip, com reticências. Na faixa estreita do relance um nome
   de ASET quebrava em três linhas e empurrava o card para cima da pergunta —
   e uma pilha de cards de alturas diferentes deixa de parecer um leque. */
.fmr__regchip {
  max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  padding: 3px 10px; font-size: 12px; font-weight: 700;
  color: var(--color-accent-light); border-radius: var(--border-radius-pill);
  background: color-mix(in srgb, var(--color-accent-pure) 32%, transparent);
}
/* Quatro linhas e reticências: o card recolhido é um relance, mas um relance
   de duas linhas não dizia o suficiente para decidir se vale reabrir. Texto
   que continuasse rolando ali é que competiria com o formulário ao lado. */
.fmr__regtexto {
  display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden;
  font-size: 14px; line-height: 1.45; color: var(--theme-text-heading);
}
.fmr__regvazio { font-size: 13.5px; font-style: italic; color: var(--theme-text-muted); }
.fmr__regthumbs { display: flex; align-items: center; gap: 6px; }
.fmr__regthumbs img { width: 44px; height: 44px; object-fit: cover; border-radius: var(--border-radius-nano); }
.fmr__regmais { font-size: 12px; font-weight: 800; color: var(--theme-text-muted); font-variant-numeric: tabular-nums; }

/* ---- galeria do card em foco ---- */
/* A galeria é irmã direta do textarea e dos seletores desde que o invólucro
   .fmr__regcampos saiu, então o respiro entre os blocos vem daqui. */
.fmr__galeria { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 16px; }
.fmr__galeria .fmr__anexo { width: 74px; height: 74px; margin: 0; }
.fmr__galeria .fmr__anexoadd { margin: 0; }

/* ---- as setas dos flancos ----
   A navegação é uma seta de cada lado do card aberto, sobre o próprio deck
   (.fmr__carrossel já é position: relative). Acima do z do card em foco, senão
   ele passa por cima delas. */
.fmr__seta {
  position: absolute; top: 50%; z-index: 40;
  display: grid; place-items: center; width: 46px; height: 46px;
  transform: translateY(-50%);
  border: 1px solid var(--theme-panel-border); border-radius: var(--border-radius-circle, 50%);
  background: var(--fmr-papel-alto); cursor: pointer;
  transition: background var(--motion-dur-fast), border-color var(--motion-dur-fast);
}
.fmr__seta:hover { background: var(--color-accent-pure); border-color: var(--color-accent-pure); }
.fmr__seta:focus-visible { outline: 2px solid var(--color-accent-pure); outline-offset: 3px; }
.fmr__seta svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; color: var(--theme-text-heading); }
.fmr__seta--esq { left: 4px; }
.fmr__seta--dir { right: 4px; }

/* No último registro a seta da direita vira o gesto de criar, e ganha o rótulo
   por cima — sem ele, um "+" solto no flanco não diz o que cria. */
/* Ancorado na borda do CARD, e não na da tela: no flanco ele ficava a meio
   monitor de distância do que cria. `--fmr-card-w` é a largura real medida em
   aplicarCoverflow (js/form-runner.js). Os 128px são a largura do RÓTULO (108)
   mais o respiro (20): quem tem de sair de cima do card é o BLOCO inteiro, e
   não só o botão — medir pelo botão deixava o rótulo por dentro.
   Só a da direita se aproxima: a seta de voltar continua no flanco, e a
   assimetria é de propósito — o gesto de criar perto do que cria, o de navegar
   na margem. E não atropela card nenhum, porque este bloco só existe no ÚLTIMO
   registro, que é justamente quando não há card de relance à direita. */
.fmr__somar { position: absolute; top: 50%; right: max(4px, calc(50% - var(--fmr-card-w, 560px) / 2 - 128px)); z-index: 40; display: flex; flex-direction: column; align-items: center; gap: 8px; transform: translateY(-50%); }
.fmr__somar .fmr__seta { position: static; transform: none; background: var(--color-accent-pure); border-color: var(--color-accent-pure); }
.fmr__somar .fmr__seta svg { color: var(--color-essence-ivory); stroke-width: 2.2; }
.fmr__somar .fmr__seta:hover { background: var(--color-accent-dark); border-color: var(--color-accent-dark); }
.fmr__somarlbl { max-width: 108px; font-size: 12px; font-weight: 700; line-height: 1.25; text-align: center; color: var(--theme-text-muted); }

/* Adicionar registro: fica CENTRADO sob o carrossel, alinhado com as setas —
   encostado à esquerda ele lia como legenda solta, longe do que cria. */
.fmr__regadd {
  display: inline-flex; align-items: center; gap: 9px; min-height: 48px;
  margin: 14px auto 0; padding: 0 20px;
  font-size: 15px; font-weight: 700; color: var(--fmr-tinta);
  border: 1.5px dashed var(--color-accent-pure); border-radius: var(--border-radius-sm);
  background: transparent; cursor: pointer; transition: background var(--motion-dur-fast);
}
.fmr__regadd:hover { background: color-mix(in srgb, var(--color-accent-pure) 10%, transparent); }
.fmr__regadd svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; }
/* O corpo da pergunta ampla centra os seus blocos: carrossel, setas e o botão
   de somar dividem o mesmo eixo. */
.fmr__q--amplo .fmr__qbody { display: flex; flex-direction: column; align-items: center; }
/* O escopo é legenda do enunciado, não do deck: volta para a coluna de 640 e
   recua os mesmos 29px que o número da pergunta abre antes do título, para as
   duas linhas começarem no mesmo x. */
.fmr__q--amplo .fmr__escopo { width: 100%; max-width: 640px; align-self: center; padding-left: 29px; }

/* ---- anexos da pergunta de texto ---- */
.fmr__anexos { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 14px; }
.fmr__anexo { position: relative; width: 92px; height: 92px; margin: 0; border-radius: var(--border-radius-sm); overflow: hidden; border: 1px solid var(--theme-border-subtle); }
.fmr__anexo img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* 40px de alvo real: o botão desenhado tem 24px, e a área clicável cresce por
   fora com um pseudo-elemento, sem engordar a marca sobre a miniatura. */
.fmr__anexodel { position: absolute; top: 4px; right: 4px; display: grid; place-items: center; width: 24px; height: 24px; border: 0; border-radius: var(--border-radius-circle, 50%); background: var(--color-opacity-superintense); cursor: pointer; }
.fmr__anexodel::after { content: ""; position: absolute; inset: -8px; border-radius: var(--border-radius-circle, 50%); }
.fmr__anexodel svg { width: 13px; height: 13px; fill: none; stroke: var(--color-essence-ivory); stroke-width: 2.4; stroke-linecap: round; }
.fmr__anexoadd { position: relative; display: inline-flex; align-items: center; gap: 8px; min-height: 40px; margin-top: 14px; padding: 0 14px; font-size: 13.5px; font-weight: 700; color: var(--fmr-tinta-alto); border: 1.5px dashed var(--color-accent-pure); border-radius: var(--border-radius-sm); cursor: pointer; }
.fmr__anexoadd svg { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.fmr__anexoadd input { position: absolute; inset: 0; opacity: 0; cursor: pointer; }
/* O input é invisível, então o foco de teclado precisa aparecer no rótulo que o
   embrulha — sem isto o campo existe na ordem de tabulação e não se vê onde está. */
.fmr__anexoadd:focus-within { outline: 2px solid var(--color-accent-pure); outline-offset: 2px; }

/* ---- OK e dicas ---- */
.fmr__ok { display: flex; align-items: center; gap: 14px; margin: 28px 0 0 29px; }
.fmr__okbtn { min-width: 68px; min-height: 44px; padding: 0 22px; font-size: 15px; font-weight: 800; color: var(--color-essence-ivory); border: 0; border-radius: var(--border-radius-sm); background: var(--color-accent-pure); cursor: pointer; transition: transform var(--motion-dur-fast); }
.fmr__okbtn:hover { transform: translateY(-1px); }
.fmr__hint { font-size: 12.5px; color: var(--theme-text-muted); }
.fmr__hint b { font-weight: 800; }
.fmr__hint--solo { margin: 22px 0 0 29px; }
.fmr__hint--light { color: color-mix(in srgb, var(--color-essence-ivory) 68%, transparent); }

/* ---- navegação ↑↓ ---- */
.fmr__nav { position: absolute; right: 22px; bottom: 22px; z-index: 2; display: flex; gap: 6px; }
.fmr__nav[hidden] { display: none; }
.fmr__navbtn { display: grid; place-items: center; width: 40px; height: 40px; border: 1px solid var(--theme-border-subtle); border-radius: var(--border-radius-sm); background: var(--fmr-papel-alto); cursor: pointer; }
.fmr__navbtn:disabled { opacity: var(--opacity-intense); cursor: default; }
.fmr__navbtn svg { width: 19px; height: 19px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; color: var(--theme-text-heading); }

@media (max-width: 600px) {
  .fmr__stage { padding: 16px 18px 96px; align-items: flex-start; }
  .fmr__covertitle { font-size: 28px; }
  .fmr__qtitle { font-size: 21px; }
  .fmr__qhead { gap: 10px; margin-bottom: 22px; }
  .fmr__qbody, .fmr__ok, .fmr__hint--solo { margin-left: 0; }
  /* Linha única mantida por rolagem horizontal: dividir 11 casas em 340px
     colocaria cada uma abaixo do alvo mínimo de toque. */
  .fmr__escala { display: flex; overflow-x: auto; padding-bottom: 4px; }
  .fmr__esc { flex: 0 0 44px; height: 44px; }
  .fmr__cards { grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 10px; }
  .fmr__estrela { width: 44px; height: 44px; }
  .fmr__estrela svg { width: 32px; height: 32px; }
  /* Menos altura útil no celular: a lista e os registros ganham mais tela, e o
     resto da pergunta continua acessível pela rolagem da própria lista. */
  .fmr__opts--lista { max-height: 52vh; }
  /* Sem largura para o leque, o coverflow vira sobreposição: os vizinhos ficam
     como lascas nas bordas e o foco toma quase a tela. O deslocamento em si já
     encolhe pelo multiplicador em js/form-runner.js. */
  /* Só o que o card em foco pede, e nada de folga: 52vh sobravam como vão
     vazio em volta dele e empurravam o OK para baixo da dobra num iPhone. */
  .fmr__carrossel { min-height: clamp(280px, 46vh, 420px); }
  /* Deck FECHADO no celular: não há largura para leque — três cards em 390px
     dariam 51px de passo, que é tarja. Vira lista em fluxo; o JS não escreve
     transformação nenhuma aqui (ver aplicarCoverflow). Rolar na vertical é
     gesto esperado; card cortado pela borda da janela lê como defeito. */
  .fmr__carrossel.is-fechado { min-height: 0; height: auto; display: block; perspective: none; }
  .fmr__carrossel.is-fechado .fmr__regcard { position: relative; top: auto; left: auto; transform: none; width: 100%; height: auto; margin: 0 0 10px; }
  .fmr__carrossel.is-fechado .fmr__regcard--relance > * { max-width: none; }
  /* Em lista nenhum card cobre o outro, então o alinhamento à direita — que
     existe para mostrar a borda visível no leque — perde a razão de ser. */
  .fmr__carrossel.is-fechado .fmr__regcard--dir { align-items: flex-start; text-align: left; }
  .fmr__carrossel.is-fechado .fmr__regcard--dir .fmr__regchips,
  .fmr__carrossel.is-fechado .fmr__regcard--dir .fmr__regthumbs { justify-content: flex-start; }
  .fmr__regcard { width: 84vw; padding: 16px; }
  .fmr__regcard.is-foco { max-height: 62vh; }
  .fmr__regthumbs img { width: 38px; height: 38px; }
}

@media (prefers-reduced-motion: reduce) {
  .fmr, .fmr__grain, .fmr__barfill, .fmr__opt, .fmr__esc, .fmr__estrela, .fmr__okbtn, .fmr__start { transition: none; }
  .fmr__stage > .is-in { animation: none; }
  .fmr__q.is-falta .fmr__qbody { animation: none; outline: 2px solid var(--color-error-pure); outline-offset: 6px; }
  .fmr__opt:hover, .fmr__esc:hover, .fmr__estrela:hover, .fmr__start:hover, .fmr__okbtn:hover, .fmr__card:hover { transform: none; }
}

/* ---- a pergunta antes de apagar um registro ----
   Dentro do overlay (o .modal do css/styles.css é z-index 180 e ficaria ATRÁS
   do runner, que é 250), e com o cartão claro, como os cards de conteúdo agora
   são. A gramática é a do .modal__card: cabeçalho, subtítulo e ações. */
.fmr__confirm { position: absolute; inset: 0; z-index: 60; display: grid; place-items: center; padding: 24px; }
.fmr__confirm[hidden] { display: none; }
.fmr__confirmbd { position: absolute; inset: 0; background: var(--color-opacity-superintense); }
.fmr__confirmcard {
  position: relative; z-index: 1; width: min(420px, 100%);
  display: flex; flex-direction: column; gap: 10px;
  padding: 24px 26px 22px;
  border-radius: var(--border-radius-sm-plus);
  background: var(--fmr-claro-alto);
  box-shadow: 0 24px 48px -12px var(--color-opacity-superintense);
  /* Mesma herança de tinta das outras superfícies claras, e pelo mesmo motivo:
     tudo aqui dentro nasce escrito para o escuro. */
  --theme-text-heading: var(--color-surface-deep);
  --theme-text-muted: var(--color-surface-dark);
  --theme-border-subtle: var(--color-surface-light);
  color: var(--theme-text-heading);
}
.fmr__confirmttl { margin: 0; font-size: 19px; font-weight: 800; line-height: 1.25; color: var(--theme-text-heading); }
.fmr__confirmsub { margin: 0; font-size: 14px; line-height: 1.5; color: var(--theme-text-muted); }
.fmr__confirmacts { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 8px; }
.fmr__confirmok {
  min-height: 44px; padding: 0 20px; font: inherit; font-size: 15px; font-weight: 800;
  color: var(--color-essence-ivory); border: 0; border-radius: var(--border-radius-sm);
  background: var(--color-error-pure); cursor: pointer;
}
.fmr__confirmok:hover { background: var(--color-error-dark); }
.fmr__confirmcancel {
  min-height: 44px; padding: 0 20px; font: inherit; font-size: 15px; font-weight: 800;
  color: var(--theme-text-heading); border: 1.5px solid var(--theme-border-subtle);
  border-radius: var(--border-radius-sm); background: transparent; cursor: pointer;
}
.fmr__confirmcancel:hover { background: var(--color-surface-pale); }
.fmr__confirmok:focus-visible,
.fmr__confirmcancel:focus-visible { outline: 2px solid var(--color-accent-pure); outline-offset: 2px; }

/* ---- Catálogo consolidado (Pilar 3): tipos novos ---- */
/* Lista suspensa: um select nativo com a cara dos campos do runner. */
.fmr__campo--select { max-width: 420px; padding: 12px 8px; cursor: pointer; }

/* Grades: linhas avaliadas nas mesmas colunas. */
.fmr__gradewrap { max-width: 640px; overflow-x: auto; }
.fmr__grade { width: 100%; border-collapse: collapse; }
.fmr__grade th, .fmr__grade td { padding: 10px 8px; text-align: center; border-bottom: 1px solid var(--theme-border-subtle); font-size: 14px; color: var(--fmr-tinta); }
.fmr__grade tbody th { text-align: left; font-weight: 600; }
.fmr__gradecel { width: 22px; height: 22px; padding: 0; border: 1.5px solid var(--color-accent-pure); border-radius: 50%; background: var(--fmr-claro); cursor: pointer; transition: background var(--motion-dur-fast); }
/* `quark` pelo mesmo motivo do editor: num alvo de 22px o `nano` arredonda até
   quase o círculo, e quem responde não distinguia a grade de caixas da de
   múltipla escolha. */
.fmr__gradecel--caixa { border-radius: var(--border-radius-quark); }
.fmr__gradecel.is-sel { background: var(--color-accent-pure); }
.fmr__gradecel:focus-visible { outline: 2px solid var(--color-accent-pure); outline-offset: 2px; }

/* Resposta aberta: anexos que não são imagem viram ficha com o nome. */
.fmr__abertaadd { display: flex; flex-wrap: wrap; gap: 10px; }
.fmr__abertaadd .fmr__anexoadd { margin-top: 14px; }
.fmr__anexochip { display: inline-flex; align-items: center; gap: 8px; padding: 8px 12px; font-size: 13.5px; font-weight: 600; color: var(--fmr-tinta); border: 1.5px solid var(--theme-border-subtle); border-radius: var(--border-radius-sm); background: var(--fmr-claro); }
.fmr__anexochip .fmr__anexodel { position: static; }

/* Ranking: linhas ordenáveis com setas — a posição é a resposta. */
.fmr__rank { display: flex; flex-direction: column; gap: 8px; max-width: 560px; }
.fmr__rankrow { display: flex; align-items: center; gap: 12px; padding: 10px 14px; border: 1.5px solid var(--color-accent-pure); border-radius: var(--border-radius-sm); background: var(--fmr-claro); transition: transform var(--motion-dur-fast); }
.fmr__rankrow .fmr__opttxt { flex: 1; }
/* Arrasto: o punho é o alvo (touch-action: none SÓ nele — na linha inteira
   sequestraria o scroll da página em touch). A linha arrastada sai da
   transição e sobe de camada; as vizinhas deslizam abrindo o encaixe. */
.fmr__rankgrip { display: grid; place-items: center; margin: -10px 0 -10px -6px; padding: 10px 4px; color: var(--color-surface-pure); cursor: grab; touch-action: none; }
.fmr__rankgrip svg { width: 16px; height: 16px; fill: currentColor; stroke: none; }
.fmr__rankrow.is-drag { position: relative; z-index: 5; transition: none; cursor: grabbing; box-shadow: var(--shadow-lg); }
.fmr__rankrow.is-drag .fmr__rankgrip { cursor: grabbing; }
.fmr__rankbtns { display: flex; gap: 4px; }
.fmr__rankmove { display: grid; place-items: center; width: 30px; height: 30px; padding: 0; border: 0; border-radius: var(--border-radius-nano); background: transparent; color: var(--fmr-tinta); cursor: pointer; transition: background var(--motion-dur-fast); }
.fmr__rankmove:hover:not(:disabled) { background: var(--color-accent-tinted); }
.fmr__rankmove:disabled { opacity: var(--opacity-intense); cursor: default; }
.fmr__rankmove svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.fmr__rankmove:focus-visible { outline: 2px solid var(--color-accent-pure); outline-offset: 2px; }

/* Mídia de apoio no box do consumo. */
.fmr__midia { margin: 0 0 20px; max-width: 560px; }
.fmr__midia img { display: block; width: 100%; max-height: 280px; object-fit: cover; border-radius: var(--border-radius-sm); }
.fmr__midia--video { display: flex; align-items: center; gap: 10px; padding: 14px 16px; font-size: 14px; font-weight: 600; color: var(--fmr-tinta); border: 1.5px solid var(--theme-border-subtle); border-radius: var(--border-radius-sm); }
.fmr__midia--video svg { flex-shrink: 0; width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }

/* Pilar 4.1 no consumo: rótulos das pontas da escala, aparências novas e
   cards de texto (aparência cards sem imagem por opção). */
.fmr__escpontas { display: flex; justify-content: space-between; max-width: 560px; margin-top: 10px; font-size: 13px; color: var(--theme-text-muted); }
.fmr__estrelas--coracao .fmr__estrela.is-on svg, .fmr__estrelas--positivo .fmr__estrela.is-on svg { fill: currentColor; }
.fmr__cards--texto .fmr__card { min-height: 0; }

/* Marcador da alternativa no consumo: círculo na Múltipla escolha (uma
   resposta), quadrado nas Caixas de seleção (várias). Substitui o check que
   ficava à direita nesses dois tipos — ali ele dizia "marcado", mas não dizia
   QUANTAS marcações o tipo aceita, e as duas ficavam idênticas. */
.fmr__marca { flex-shrink: 0; display: grid; place-items: center; width: 22px; height: 22px; border: 1.8px solid var(--color-accent-pure); border-radius: 50%; background: transparent; transition: background var(--motion-dur-fast); }
.fmr__marca--caixa { border-radius: var(--border-radius-quark); }
.fmr__marca svg { width: 14px; height: 14px; fill: none; stroke: var(--fmr-claro); stroke-width: 3; stroke-linecap: round; stroke-linejoin: round; opacity: 0; transition: opacity var(--motion-dur-fast); }
.fmr__opt.is-sel .fmr__marca { background: var(--color-accent-pure); }
.fmr__opt.is-sel .fmr__marca svg { opacity: 1; }

/* Dica do TIPO acima do botão OK (ex.: "Marque quantas alternativas quiser"). */
.fmr__hint--tipo { margin-top: 18px; text-align: center; }

/* ---- O COMPONENTE DE AVALIAÇÃO NO CORPO DE OUTRO CONTEÚDO ----
   A pergunta respondida ONDE ELA ESTÁ, sem overlay: no meio de uma trilha, de
   uma aula ou de um módulo. Superfície CLARA, porque aqui o palco é a página do
   conteúdo e não o degradê imersivo do runner — os tokens de tema entram no
   escopo, como já fazem no card do deck. */
.fmr-inline {
  --theme-text-heading: var(--color-surface-deep);
  --theme-text-muted: var(--color-surface-dark);
  --theme-border-subtle: var(--color-surface-light);
  --theme-surface-muted: var(--color-surface-pale);
  --fmr-papel: var(--color-surface-pale);
  --fmr-papel-alto: var(--color-surface-mist);
  --fmr-claro: var(--color-surface-tinted);
  --fmr-claro-alto: var(--color-essence-ivory);
  --fmr-tinta: var(--color-accent-dark);
  --fmr-tinta-alto: var(--color-accent-dark);
  position: relative;
  padding: 22px 24px 18px 26px;
  color: var(--theme-text-heading);
}
/* A barra de acento: a mesma marca do box no editor, para o professor
   reconhecer que aquilo é uma pergunta e não mais um trecho do conteúdo. */
.fmr-inline::before {
  content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 5px;
  background: var(--color-accent-pure);
}
/* O padding do cartão vem do próprio box: sem isto o acento flutuaria 22px
   dentro do cartão, em vez de encostar na borda. O recorte fica com o cartão,
   que é quem tem o raio. */
.det-avalcomp { padding: 0; overflow: hidden; }
/* A MEDIDA AQUI É O BOX. No overlay os campos param em 560/640px porque a
   coluna é centrada num palco largo — a medida de leitura tem de ser criada.
   Dentro do conteúdo ela já existe: é a coluna da página, e o box acompanha os
   vizinhos (parágrafos, blocos). Manter o teto deixava vão branco à direita, e
   na escala ainda desalinhava os rótulos das pontas do fim da régua.
   A DATA fica de fora de propósito: campo de data não se estica — a largura
   dele é o tamanho do que se escreve nele. */
.fmr-inline .fmr__campo:not(.fmr__campo--data),
.fmr-inline .fmr__rank,
.fmr-inline .fmr__escpontas,
.fmr-inline .fmr__gradewrap,
.fmr-inline .fmr__midia { max-width: none; }

.fmr-inline__head { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; }
.fmr-inline__selo { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; font-size: 11.5px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; color: var(--color-accent-dark); border-radius: var(--border-radius-pill); background: var(--color-accent-tinted); }
.fmr-inline__selo svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.fmr-inline__obrig { font-size: 12px; color: var(--theme-text-muted); }
.fmr-inline__titulo { font-size: 19px; font-weight: 650; line-height: 1.3; color: var(--theme-text-heading); }
.fmr-inline__sub { margin-top: 4px; font-size: 14px; font-style: italic; color: var(--theme-text-muted); }
.fmr-inline__campo { margin-top: 16px; }
.fmr-inline__pe { display: flex; align-items: center; gap: 14px; margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--theme-border-subtle); }
.fmr-inline__btn { padding: 10px 18px; font: inherit; font-size: 14px; font-weight: 700; color: var(--color-essence-ivory); border: 0; border-radius: var(--border-radius-pill); background: var(--color-accent-pure); cursor: pointer; }
.fmr-inline__btn:disabled { opacity: var(--opacity-intense); cursor: not-allowed; }
.fmr-inline__dica { font-size: 12.5px; color: var(--theme-text-muted); }
.fmr-inline__ok { display: inline-flex; align-items: center; gap: 7px; font-size: 14px; font-weight: 700; color: var(--color-accent-dark); }
.fmr-inline__ok svg { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }

/* ---- Os dois estados da ACEITAÇÃO no box ----
   Única mostra a resposta válida; múltiplas mostra a série. Os dois usam o
   mesmo cartão de papel claro: é registro, não campo — nada ali se clica. */
.fmr-inline__valida { margin-top: 14px; padding: 13px 16px; border: 1px solid var(--theme-border-subtle); border-radius: var(--border-radius-sm); background: var(--color-surface-pale); }
.fmr-inline__resumo { margin-top: 6px; font-size: 16px; font-weight: 600; line-height: 1.4; color: var(--theme-text-heading); }
.fmr-inline__quando { margin-top: 4px; font-size: 12.5px; color: var(--theme-text-muted); }
.fmr-inline__envios { margin-top: 14px; }
.fmr-inline__envioshead { font-size: 11.5px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; color: var(--theme-text-muted); }
.fmr-inline__enviolista { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; padding: 0; list-style: none; }
.fmr-inline__envio { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; padding: 10px 16px; border: 1px solid var(--theme-border-subtle); border-radius: var(--border-radius-sm); background: var(--color-surface-pale); }
.fmr-inline__envio .fmr-inline__resumo { margin: 0; font-size: 15px; font-weight: 500; }
.fmr-inline__envio .fmr-inline__quando { flex-shrink: 0; margin: 0; }
/* "Novo envio" é ação secundária: o primário desta tela é o conteúdo em volta,
   e um botão cheio no meio de uma trilha puxaria a página para si. */
.fmr-inline__btn--ghost { display: inline-flex; align-items: center; gap: 7px; color: var(--color-accent-dark); border: 1.5px solid var(--color-accent-pure); background: transparent; }
.fmr-inline__btn--ghost svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2.4; stroke-linecap: round; }
.fmr-inline__link { padding: 0; font: inherit; font-size: 13px; font-weight: 700; color: var(--color-accent-dark); border: 0; background: none; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.fmr-inline__envios .fmr-inline__link { margin-top: 10px; }
