/* Etiqa — a abertura, a etiqueta como componente, o painel do protocolo e o contexto.
 *
 * A etiqueta é o único objeto claro da página. Ela é desenhada em CSS (a caixa) em volta de
 * uma imagem que veio do renderizador do servidor; o "papel" do e-paper entra por
 * mix-blend-mode, então o bitmap continua sendo exatamente o bitmap.
 */

/* ------------------------------------------------------------------ abertura */

.abertura {
  position: relative;
  isolation: isolate;
  overflow: clip;
  padding-block: clamp(3rem, 2rem + 4vw, 6rem) var(--secao);
}

.abertura::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: radial-gradient(circle at 1px 1px, var(--grade-ponto) 1px, transparent 1.6px) 0 0 / 24px 24px;
  -webkit-mask-image: radial-gradient(70% 80% at 72% 40%, #000 25%, transparent 75%);
  mask-image: radial-gradient(70% 80% at 72% 40%, #000 25%, transparent 75%);
  pointer-events: none;
}

/* Uma luz só, atrás da etiqueta: teal com um fio de violeta, estática. */
.abertura::after {
  content: "";
  position: absolute;
  z-index: -1;
  right: -12vw;
  top: -10vw;
  width: 56vw;
  aspect-ratio: 1;
  background: radial-gradient(closest-side, var(--marca-tenue), var(--nuvem-tenue) 55%, transparent 72%);
  filter: blur(30px);
  pointer-events: none;
}

.abertura__grade {
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 6fr);
  gap: clamp(2rem, 1rem + 4vw, 5rem);
  align-items: center;
}

.abertura__titulo {
  font-family: var(--fonte-display);
  font-weight: 700;
  font-size: var(--t-abertura);
  line-height: 0.92;
  letter-spacing: -0.01em;
  color: var(--texto-forte);
  text-wrap: balance;
}

.abertura__eco {
  color: var(--marca);
}

.abertura__lide {
  max-width: 52ch;
  margin-top: var(--e5);
  font-size: var(--t-3);
}

.abertura__acoes {
  display: flex;
  flex-wrap: wrap;
  gap: var(--e3);
  margin-top: var(--e5);
}

.abertura__estado {
  display: flex;
  gap: var(--e3);
  align-items: flex-start;
  max-width: 44ch;
  margin-top: var(--e5);
  font-size: var(--t-1);
  color: var(--texto-fraco);
}

.pulso {
  position: relative;
  flex: none;
  width: 10px;
  height: 10px;
  margin-top: 0.45em;
  border-radius: 50%;
  background: var(--marca);
}

.pulso::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background: var(--marca);
  animation: pulso 2.4s ease-out infinite;
}

@keyframes pulso {
  from {
    transform: scale(1);
    opacity: 0.6;
  }

  to {
    transform: scale(3.4);
    opacity: 0;
  }
}

@media (max-width: 62em) {
  .abertura__grade {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* ------------------------------------------------------------------ a etiqueta */

.etiqueta {
  position: relative;
  padding: 5.2% 4.2%;
  border-radius: var(--r-etiqueta);
  background: linear-gradient(175deg, var(--papel-caixa-clara) 0%, var(--papel-caixa) 60%, var(--papel-caixa-escura) 100%);
  box-shadow:
    0 40px 80px -30px var(--sombra-cor),
    0 12px 24px -12px var(--sombra-cor),
    inset 0 1px 0 #fff,
    inset 0 -1px 0 rgb(0 0 0 / 0.12);
}

.etiqueta__painel {
  position: relative;
  aspect-ratio: 296 / 128;
  overflow: hidden;
  border-radius: 5px;
  background: var(--papel);
  box-shadow:
    inset 0 0 0 1px rgb(0 0 0 / 0.16),
    inset 0 2px 8px rgb(0 0 0 / 0.14);
}

.etiqueta__imagem {
  position: absolute;
  inset: 0;
  mix-blend-mode: multiply;
}

.etiqueta__imagem img {
  width: 100%;
  height: 100%;
}

.etiqueta__imagem--nova {
  opacity: 0;
}

.etiqueta--nova .etiqueta__imagem--nova {
  opacity: 1;
}

.etiqueta--nova .etiqueta__imagem:not(.etiqueta__imagem--nova) {
  opacity: 0;
}

/* O refresh completo do e-paper: o painel vira preto e branco algumas vezes, sem fade —
 * o controlador inverte a tela inteira, e é isso que o cliente vê na gôndola. */
.etiqueta__tinta {
  position: absolute;
  inset: 0;
  background: var(--tinta);
  opacity: 0;
  pointer-events: none;
}

.etiqueta--gravando .etiqueta__tinta {
  animation: refresh-epaper 2s steps(1, end) forwards;
}

@keyframes refresh-epaper {
  0% { opacity: 1; }
  14% { opacity: 0; }
  26% { opacity: 1; }
  40% { opacity: 0; }
  52% { opacity: 1; }
  66% { opacity: 0; }
  78% { opacity: 1; }
  88% { opacity: 0; }
  100% { opacity: 0; }
}

.etiqueta__codigo {
  position: absolute;
  right: 5%;
  bottom: 1%;
  font: 700 0.7rem/1.6 var(--fonte-mono);
  letter-spacing: 0.08em;
  color: var(--gravado);
}

.etiqueta--pequena {
  padding: 4% 3.4%;
  border-radius: 10px;
  box-shadow:
    0 16px 32px -18px var(--sombra-cor),
    inset 0 1px 0 #fff;
}

.etiqueta--pequena .etiqueta__painel {
  border-radius: 3px;
}

/* ------------------------------------------------------------------ vitrine e protocolo */

.vitrine {
  position: relative;
  display: grid;
  gap: var(--e4);
}

.vitrine__legenda {
  max-width: 60ch;
  font-size: var(--t-0);
  color: var(--texto-mudo);
}

.protocolo {
  padding: var(--e3) var(--e4);
  border: 1px solid var(--linha);
  border-radius: var(--r-painel);
  background: var(--fundo-baixo);
  box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.04);
  font-family: var(--fonte-mono);
  font-size: 0.8125rem;
  line-height: 1.5;
}

.protocolo__cabecalho {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: var(--e3);
  margin-bottom: var(--e2);
  padding-bottom: var(--e2);
  border-bottom: 1px solid var(--linha-fraca);
  font-size: 0.75rem;
  color: var(--texto-fraco);
}

.protocolo__nota {
  color: var(--texto-mudo);
}

.protocolo__linhas {
  display: grid;
  align-content: end;
  gap: 2px;
  /* Oito linhas fixas: o painel não cresce nem encolhe enquanto a troca acontece. */
  min-height: calc(8 * 1.5em + 7 * 2px);
}

.protocolo__linha {
  display: grid;
  grid-template-columns: 1.2em 7.5em minmax(0, 1fr);
  gap: var(--e2);
  white-space: nowrap;
  overflow: hidden;
}

.protocolo__linha > span {
  overflow: hidden;
  text-overflow: ellipsis;
}

.protocolo__linha--vazia {
  visibility: hidden;
}

.protocolo__dir {
  color: var(--texto-mudo);
}

.protocolo__nome {
  font-weight: 700;
  color: var(--marca-clara);
}

.protocolo__linha--sobe .protocolo__nome {
  color: var(--nuvem-clara);
}

.protocolo__linha--evento {
  grid-template-columns: minmax(0, 1fr);
  color: var(--texto-fraco);
  font-style: italic;
}

.protocolo__linha--ok .protocolo__nome,
.protocolo__linha--ok .protocolo__detalhe {
  color: var(--marca);
}

.protocolo__entrada {
  animation: entrar-linha var(--normal) var(--saida) both;
}

@keyframes entrar-linha {
  from {
    opacity: 0;
    transform: translateY(4px);
  }
}

.protocolo__detalhe {
  display: flex;
  align-items: center;
  gap: var(--e2);
  min-width: 0;
}

/* A barra dos 20 pacotes encolhe antes de estourar a linha. */
.protocolo__pacotes {
  display: grid;
  flex: 1 1 4em;
  grid-template-columns: repeat(20, 1fr);
  gap: 2px;
  min-width: 3em;
  max-width: 9em;
  height: 0.55em;
}

.protocolo__pacotes span {
  border-radius: 1px;
  background: var(--linha);
}

.protocolo__pacotes .chegou {
  background: var(--marca);
}

.protocolo__estado {
  margin-top: var(--e2);
  padding-top: var(--e2);
  border-top: 1px solid var(--linha-fraca);
  font-family: var(--fonte-corpo);
  font-size: var(--t-0);
  color: var(--texto-fraco);
  opacity: 0;
  transition: opacity var(--normal);
}

.protocolo--exibindo .protocolo__estado {
  opacity: 1;
}

.protocolo__estado strong {
  color: var(--marca);
}

/* ------------------------------------------------------------------ contexto */

.contexto {
  padding-block: var(--secao);
  border-top: 1px solid var(--linha-fraca);
  border-bottom: 1px solid var(--linha-fraca);
  background: var(--fundo-baixo);
}

.contexto__grade {
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  gap: clamp(2rem, 1rem + 4vw, 6rem);
  align-items: start;
}

.contexto__titulo {
  position: sticky;
  top: 6rem;
  font-family: var(--fonte-display);
  font-weight: 700;
  font-size: var(--t-6);
  line-height: 0.98;
  color: var(--texto-forte);
  text-wrap: balance;
}

.contexto__fatos {
  display: grid;
  gap: var(--e4);
  max-width: 58ch;
  font-size: var(--t-3);
}

.contexto__fatos p {
  padding-left: var(--e4);
  border-left: 2px solid var(--linha);
}

.contexto__fatos .contexto__posicao {
  border-left-color: var(--marca);
  color: var(--texto-forte);
}

@media (max-width: 62em) {
  .contexto__grade {
    grid-template-columns: minmax(0, 1fr);
  }

  .contexto__titulo {
    position: static;
  }
}
