/* Atuação do GC - visão geral, ficha e estado no portefólio. */

/* Atuação do gestor: eixo operacional autónomo da criticidade da obra. */
.gcActionOverview {
  margin: 18px 0;
  padding: 18px;
  border: 1px solid var(--line);
  border-radius: 16px;
  background: var(--panel);
}
.gcActionOverview.isEmpty { padding: 15px 18px; }
.gcActionOverview.isEmpty > header { align-items: center; }
.gcActionOverview.isEmpty > header h2 { font-size: var(--txt-lg); }
.gcActionEmpty {
  margin-top: 11px; padding-top: 11px; display: flex; align-items: center;
  gap: 11px; border-top: 1px solid var(--line);
}
.gcActionEmpty > span {
  width: 30px; height: 30px; flex: 0 0 30px; display: grid; place-items: center;
  border-radius: 50%; background: color-mix(in srgb, var(--verde) 12%, var(--panel));
  color: var(--verde); font-weight: 800;
}
.gcActionEmpty > div { display: grid; gap: 1px; }
.gcActionEmpty strong { font-size: var(--txt-sm); }
.gcActionEmpty small { color: var(--muted); font-size: var(--txt-xs); }
.gcActionOverview > header { display:flex; align-items:center; justify-content:space-between; gap:16px; }
.gcActionOverview h2 { margin:2px 0 0; }
.gcActionGrid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:10px; margin-top:14px; }
.gcActionCard {
  display:grid; grid-template-columns:10px auto 1fr; grid-template-rows:auto auto;
  gap:2px 10px; align-items:center; text-align:left; padding:13px;
  border:1px solid var(--line); border-radius:12px; background:var(--panel);
}
.gcActionCard > span { grid-row:1 / 3; width:9px; height:100%; min-height:38px; border-radius:8px; background:#94a3b8; }
.gcActionCard b { font-size:var(--txt-2xl); line-height:1; }
.gcActionCard strong { font-size:var(--txt-sm); }
.gcActionCard small { grid-column:2 / 4; color:var(--muted); }
.gcActionCard.critical > span { background:#dc2626; }
.gcActionCard.amber > span { background:#d97706; }
.gcActionCard.blue > span { background:#2563eb; }
.gcActionCard.green > span { background:#16a34a; }
.gcActionCard:hover,.gcActionCard.on { border-color:var(--accent); box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 15%,transparent); }

.gcActionStatus {
  max-width:100%;
  display:inline-flex;
  align-items:center;
  padding:3px 9px;
  border-radius:var(--r-pill);
  font-size:var(--txt-xs);
  font-weight:720;
  line-height:1.35;
  white-space:nowrap;
}
.gcActionStatus.red { color:var(--vermelho); background:color-mix(in srgb,var(--vermelho) 13%,var(--panel)); }
.gcActionStatus.orange { color:color-mix(in srgb,var(--amarelo) 72%,var(--ink)); background:color-mix(in srgb,var(--amarelo) 15%,var(--panel)); }
.gcActionStatus.blue { color:var(--accent); background:color-mix(in srgb,var(--accent) 13%,var(--panel)); }
.gcActionStatus.green { color:var(--verde); background:color-mix(in srgb,var(--verde) 13%,var(--panel)); }
.gcActionStatus.gray { color:var(--muted); background:var(--subtle); }

.statusPill.gc-sem_pedido,.statusPill.gc-atuacao_parcial { color:var(--vermelho); background:color-mix(in srgb,var(--vermelho) 13%,var(--panel)); }
.statusPill.gc-seguimento_vencido { color:var(--amarelo); background:color-mix(in srgb,var(--amarelo) 14%,var(--panel)); }
.statusPill.gc-aguardar_resposta { color:var(--accent); background:color-mix(in srgb,var(--accent) 13%,var(--panel)); }
.statusPill.gc-em_dia { color:var(--verde); background:color-mix(in srgb,var(--verde) 13%,var(--panel)); }
.statusPill.gc-fora_ambito { color:var(--muted); background:var(--subtle); }
.gcActionWorkspace { display:grid; grid-template-columns:minmax(0,1.7fr) minmax(260px,.8fr); gap:16px; margin-bottom:18px; }
.gcActionHero,.gcNextAction,.gcActionDiary,.gcActionCoverage,.gcDeviationCases,
.gcSupportRequests,.gcNatObligations {
  border:1px solid var(--line); border-radius:14px; background:var(--panel); padding:18px;
}
.gcActionHero { border-left:5px solid #94a3b8; }
.gcActionDetail:has(.gc-sem_pedido) .gcActionHero,
.gcActionDetail:has(.gc-atuacao_parcial) .gcActionHero { border-left-color:#dc2626; }
.gcActionDetail:has(.gc-seguimento_vencido) .gcActionHero { border-left-color:#d97706; }
.gcActionDetail:has(.gc-aguardar_resposta) .gcActionHero { border-left-color:#2563eb; }
.gcActionDetail:has(.gc-em_dia) .gcActionHero { border-left-color:#16a34a; }
.gcActionHero h2,.gcNextAction h2 { margin:12px 0 6px; font-size:var(--txt-xl); }
.gcActionHero p,.gcNextAction p { margin:0; color:var(--muted); }
.gcActionButtons { display:flex; flex-wrap:wrap; gap:8px; margin-top:16px; }
.gcNextAction { background:color-mix(in srgb,var(--accent) 5%,var(--panel)); }
.gcNextAction > strong { display:block; margin:8px 0; color:var(--accent); }
.gcNextAction .textButton { margin-top:14px; }
.gcDeviationCases { margin-bottom:18px; }
/* O sinal de possível desvio: uma sugestão, e não um estado. Fica antes da
   lista de casos, com o tom de aviso do amarelo - não do vermelho, que na
   plataforma significa derrapagem confirmada. */
.gcDeviationSignal {
  display:grid; gap:10px; margin-bottom:14px; padding:13px 15px;
  border:1px solid color-mix(in srgb,var(--amarelo) 42%,var(--line));
  border-left:4px solid var(--amarelo);
  border-radius:10px;
  background:color-mix(in srgb,var(--amarelo) 7%,var(--panel));
}
.gcDeviationSignal strong { display:block; margin-top:3px; }
.gcDeviationSignal p { margin:5px 0 0; }
.gcDeviationSignal small { display:block; margin-top:5px; color:var(--muted); }
.gcDeviationSignalActions { display:flex; flex-wrap:wrap; gap:8px; }

.gcDeviationList { display:grid; gap:12px; }
.gcDeviationCard {
  display:grid; gap:10px; padding:15px; border:1px solid var(--line);
  border-left:4px solid var(--accent); border-radius:12px; background:var(--subtle);
}
.gcDeviationCard.is-overdue,.gcDeviationCard.is-persiste {
  border-left-color:var(--amarelo);
  background:color-mix(in srgb,var(--amarelo) 7%,var(--panel));
}
.gcDeviationCard.is-escalado { border-left-color:var(--vermelho); }
.gcDeviationCard.is-resolvido {
  border-left-color:var(--verde);
  background:color-mix(in srgb,var(--verde) 5%,var(--panel));
}
.gcDeviationHead { display:flex; align-items:flex-start; justify-content:space-between; gap:14px; }
.gcDeviationHead > div { display:grid; gap:5px; }
.gcDeviationHead h4,.gcDeviationCard > p { margin:0; }
.gcDeviationHead small { color:var(--muted); white-space:nowrap; }
.gcDeviationStatus {
  justify-self:start; padding:3px 8px; border-radius:var(--r-pill); color:var(--accent);
  background:color-mix(in srgb,var(--accent) 12%,var(--panel));
  font-size:var(--txt-xs); font-weight:720;
}
.gcDeviationCard.is-overdue .gcDeviationStatus,.gcDeviationCard.is-persiste .gcDeviationStatus {
  color:color-mix(in srgb,var(--amarelo) 72%,var(--ink));
  background:color-mix(in srgb,var(--amarelo) 15%,var(--panel));
}
.gcDeviationCard.is-escalado .gcDeviationStatus {
  color:var(--vermelho); background:color-mix(in srgb,var(--vermelho) 13%,var(--panel));
}
.gcDeviationCard.is-resolvido .gcDeviationStatus {
  color:var(--verde); background:color-mix(in srgb,var(--verde) 13%,var(--panel));
}
.gcDeviationMeta { display:flex; flex-wrap:wrap; gap:5px 15px; color:var(--muted); font-size:var(--txt-sm); }
.gcDeviationNext {
  display:flex; align-items:center; gap:10px; padding:9px 11px; border-radius:9px;
  background:var(--panel); font-size:var(--txt-sm);
}
.gcDeviationNext b { color:var(--accent); white-space:nowrap; }
.gcDeviationHistory { border-top:1px solid var(--line); padding-top:9px; }
.gcDeviationHistory summary { cursor:pointer; color:var(--muted); font-size:var(--txt-sm); font-weight:650; }
.gcDeviationHistory ol { display:grid; gap:8px; margin:10px 0 0; padding-left:22px; }
.gcDeviationHistory li { padding-left:3px; }
.gcDeviationHistory li span,.gcDeviationHistory li small { display:block; margin-top:2px; color:var(--muted); }
.gcDeviationActions { display:flex; flex-wrap:wrap; gap:8px; }
/* RISCOS: a metade prospetiva. O azul do acento, e nunca o amarelo nem o
   vermelho - um risco não é um problema confirmado, é uma coisa que pode vir a
   acontecer, e pintá-lo com as cores da derrapagem era declarar o que a
   plataforma expressamente não declara. */
.gcRiskCases { margin-bottom:18px; }
.gcRiskForecast {
  display:grid; gap:8px; margin-bottom:14px; padding:13px 15px;
  border:1px solid color-mix(in srgb,var(--accent) 32%,var(--line));
  border-left:4px solid var(--accent);
  border-radius:10px;
  background:color-mix(in srgb,var(--accent) 6%,var(--panel));
}
.gcRiskForecast > div { display:flex; flex-wrap:wrap; align-items:baseline; gap:4px 10px; }
.gcRiskForecast b { color:var(--accent); font-size:var(--txt-lg); }
.gcRiskForecast span { color:var(--muted); font-size:var(--txt-sm); }
.gcRiskForecast p { margin:2px 0 0; font-size:var(--txt-sm); }

.gcRiskList { display:grid; gap:12px; }
.gcRiskCard {
  display:grid; gap:10px; padding:15px; border:1px solid var(--line);
  border-left:4px solid var(--accent); border-radius:12px; background:var(--subtle);
}
/* Fechado é histórico: fica visível, mas deixa de disputar a atenção. */
.gcRiskCard.is-concretizado,.gcRiskCard.is-afastado {
  border-left-color:var(--line); background:var(--panel); opacity:.82;
}
.gcRiskHead { display:flex; align-items:flex-start; justify-content:space-between; gap:14px; }
.gcRiskHead > div { display:grid; gap:5px; }
.gcRiskHead h4,.gcRiskCard > p { margin:0; }
.gcRiskStatus {
  justify-self:start; padding:3px 8px; border-radius:var(--r-pill); color:var(--accent);
  background:color-mix(in srgb,var(--accent) 12%,var(--panel));
  font-size:var(--txt-xs); font-weight:720;
}
.gcRiskCard.is-concretizado .gcRiskStatus,.gcRiskCard.is-afastado .gcRiskStatus {
  color:var(--muted); background:color-mix(in srgb,var(--muted) 12%,var(--panel));
}
.gcRiskAmount { color:var(--accent); font-weight:720; white-space:nowrap; }
.gcRiskCard.is-concretizado .gcRiskAmount,.gcRiskCard.is-afastado .gcRiskAmount { color:var(--muted); }
.gcRiskMeta { display:flex; flex-wrap:wrap; gap:5px 15px; color:var(--muted); font-size:var(--txt-sm); }
.gcRiskOutcome { margin:0; font-size:var(--txt-sm); }
.gcRiskMatch {
  margin:0; padding:9px 11px; border-radius:9px; background:var(--panel);
  font-size:var(--txt-sm);
}
.gcRiskMatch b { color:var(--accent); }
.gcRiskActions { display:flex; flex-wrap:wrap; gap:8px; }

/* Encargos: sub-bloco dentro dos riscos. Existe para quando acontecer, e no
   arquivo ainda não aconteceu - por isso é discreto de propósito. */
.gcChargeBlock:not(:empty) { margin-top:16px; padding-top:14px; border-top:1px solid var(--line); }
.gcChargeHead { display:flex; align-items:flex-start; justify-content:space-between; gap:14px; }
/* O bloco é estreito e o rótulo do botão é longo: sem isto saía partido em duas
   linhas ("＋ Registar / encargo"), que num botão pequeno parece um erro. */
.gcChargeHead button { white-space:nowrap; }
.gcChargeHead h4 { margin:0 0 3px; }
.gcChargeHead p { margin:0; font-size:var(--txt-sm); }
.gcChargeList { display:grid; gap:10px; margin:12px 0 0; padding:0; list-style:none; }
.gcChargeList li {
  position:relative; padding:11px 13px; border:1px solid var(--line);
  border-radius:10px; background:var(--subtle);
}
.gcChargeList li > div { display:flex; flex-wrap:wrap; align-items:baseline; gap:4px 10px; }
.gcChargeList li p { margin:4px 0 0; font-size:var(--txt-sm); }
.gcChargeList li small { display:block; margin-top:4px; color:var(--muted); }
.gcChargeAmount { margin-left:auto; color:var(--accent); font-weight:720; }
.gcChargeTotal { margin:10px 0 0; font-size:var(--txt-sm); }

.gcSupportRequests { margin-bottom:18px; }
.gcSupportList { display:grid; gap:12px; }
.gcSupportCard {
  display:grid; gap:10px; padding:15px; border:1px solid var(--line);
  border-left:4px solid var(--accent); border-radius:12px; background:var(--subtle);
}
.gcSupportCard.is-em_analise {
  border-left-color:#7c3aed;
  background:color-mix(in srgb,#7c3aed 5%,var(--panel));
}
.gcSupportCard.is-concluido {
  border-left-color:var(--verde);
  background:color-mix(in srgb,var(--verde) 5%,var(--panel));
}
.gcSupportHead { display:flex; align-items:flex-start; justify-content:space-between; gap:14px; }
.gcSupportHead > div { display:grid; gap:5px; }
.gcSupportHead h4,.gcSupportCard > p { margin:0; }
.gcSupportHead small { color:var(--muted); white-space:nowrap; }
.gcSupportStatus {
  justify-self:start; padding:3px 8px; border-radius:var(--r-pill); color:var(--accent);
  background:color-mix(in srgb,var(--accent) 12%,var(--panel));
  font-size:var(--txt-xs); font-weight:720;
}
.gcSupportCard.is-em_analise .gcSupportStatus {
  color:#6d28d9; background:color-mix(in srgb,#7c3aed 12%,var(--panel));
}
.gcSupportCard.is-concluido .gcSupportStatus {
  color:var(--verde); background:color-mix(in srgb,var(--verde) 13%,var(--panel));
}
.gcSupportMeta { display:flex; flex-wrap:wrap; gap:5px 15px; color:var(--muted); font-size:var(--txt-sm); }
.gcSupportNext {
  display:flex; align-items:center; gap:10px; padding:9px 11px; border-radius:9px;
  background:var(--panel); font-size:var(--txt-sm);
}
.gcSupportNext b { color:var(--accent); white-space:nowrap; }
.gcSupportHistory { border-top:1px solid var(--line); padding-top:9px; }
.gcSupportHistory summary { cursor:pointer; color:var(--muted); font-size:var(--txt-sm); font-weight:650; }
.gcSupportHistory ol { display:grid; gap:8px; margin:10px 0 0; padding-left:22px; }
.gcSupportHistory li { padding-left:3px; }
.gcSupportHistory li span,.gcSupportHistory li small { display:block; margin-top:2px; color:var(--muted); }
.gcSupportHistory li.is-conclusion { color:var(--verde); }
.gcSupportActions { display:flex; flex-wrap:wrap; gap:8px; }
.gcNatObligations { margin-bottom:18px; }
.gcNatList { list-style:none; padding:0; margin:0; display:grid; gap:10px; }
.gcNatItem {
  display:grid; grid-template-columns:minmax(0,1fr) auto; gap:12px; align-items:center;
  padding:14px; border:1px solid var(--line); border-radius:12px; background:var(--subtle);
}
.gcNatItem.is-cumprida { background:color-mix(in srgb,var(--verde) 5%,var(--panel)); }
.gcNatItem.is-a_cumprir { border-color:color-mix(in srgb,var(--amarelo) 42%,var(--line)); }
.gcNatItem.is-agendada { background:color-mix(in srgb,var(--accent) 4%,var(--panel)); }
.gcNatMain { display:grid; gap:5px; min-width:0; }
.gcNatMain > div { display:flex; flex-wrap:wrap; align-items:center; gap:8px; }
.gcNatMain p,.gcNatMain small { margin:0; }
.gcNatMain p,.gcNatMain small { color:var(--muted); }
.gcNatEvidenceList { margin:2px 0 0; padding-left:20px; color:var(--muted); }
.gcNatPending { margin-top:5px; padding:10px 12px; border-radius:9px;
  background:color-mix(in srgb,var(--amarelo) 11%,var(--panel)); }
.gcNatPending ul { margin:5px 0 0; padding-left:19px; }
.gcNatActions { display:flex; flex-wrap:wrap; align-items:center; gap:8px; }
.gcNatActions > button { white-space:nowrap; }
.gcActionDetailGrid { display:grid; grid-template-columns:minmax(0,1.7fr) minmax(260px,.8fr); gap:16px; }
.gcActionSectionHead { display:flex; align-items:flex-start; justify-content:space-between; gap:14px; margin-bottom:14px; }
.gcActionSectionHead h2,.gcActionSectionHead p,.gcActionCoverage h2 { margin:0; }
.gcActionSectionHead p { margin-top:3px; color:var(--muted); }
.gcActionHistory { display:grid; gap:0; margin:18px 0; list-style:none; padding:0; }
.gcActionHistoryItem { display:grid; grid-template-columns:18px 1fr; gap:10px; position:relative; padding:0 0 20px; }
.gcActionHistoryItem:not(:last-child)::before { content:""; position:absolute; left:5px; top:13px; bottom:0; width:2px; background:var(--line); }
.gcActionHistoryDot { width:12px; height:12px; margin-top:4px; border-radius:50%; background:var(--accent); z-index:1; }
/* A receção fecha o ciclo, e distingue-se de relance da série de pedidos que a
   antecede: a mesma linha, outro sinal. */
.gcActionHistoryItem.isReceived > .gcActionHistoryDot { background:var(--verde); }
.gcActionHistoryItem h3,.gcActionHistoryItem p { margin:3px 0; }
.gcActionHistoryItem ul { margin:8px 0 0; padding-left:18px; }
.gcActionHistoryItem em { color:var(--muted); font-size:var(--txt-xs); }
.gcCoverageList { list-style:none; padding:0; margin:14px 0 0; display:grid; gap:0; }
.gcCoverageList li { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:5px 10px; padding:12px 0; border-top:1px solid var(--line); }
.gcCoverageList li:first-child { border-top:0; padding-top:0; }
.gcCoverageList small { grid-column:1 / -1; color:var(--muted); }
.gcCoverageStatus { align-self:start; padding:3px 7px; border-radius:999px; font-size:var(--txt-xs); font-weight:650; white-space:nowrap; }
.gcCoverageStatus.red { color:var(--vermelho); background:color-mix(in srgb,var(--vermelho) 13%,var(--panel)); }
.gcCoverageStatus.amber { color:var(--amarelo); background:color-mix(in srgb,var(--amarelo) 14%,var(--panel)); }
.gcCoverageStatus.blue { color:var(--accent); background:color-mix(in srgb,var(--accent) 13%,var(--panel)); }
.gcCoverageAction { grid-column:1 / -1; justify-self:start; margin-top:4px; }

@media (max-width: 820px) {
  .gcActionGrid { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .gcActionOverview > header { align-items:flex-start; }
  .gcActionWorkspace,.gcActionDetailGrid { grid-template-columns:1fr; }
  .gcDeviationHead { display:grid; }
  .gcRiskHead,.gcChargeHead { display:grid; }
  /* Empilhado, um botão em grelha estica-se de ponta a ponta e fica uma barra
     vazia com três palavras ao meio. */
  .gcChargeHead button { justify-self:start; }
  .gcDeviationHead small { white-space:normal; }
  .gcDeviationNext { align-items:flex-start; flex-direction:column; gap:3px; }
  .gcSupportHead { display:grid; }
  .gcSupportHead small { white-space:normal; }
  .gcSupportNext { align-items:flex-start; flex-direction:column; gap:3px; }
  .gcNatItem { grid-template-columns:1fr; }
  .gcNatActions { justify-self:start; }
  /* O cabeçalho de cada secção é o título ao lado do botão que abre o registo.
     Em flex, o botão é um item que encolhe: aos 390px de um telemóvel,
     "＋ Registar desvio" partia-se em quatro linhas de uma palavra cada. Em
     coluna o botão fica inteiro por baixo do texto, que é onde há largura. */
  .gcActionSectionHead { flex-direction:column; align-items:flex-start; gap:10px; }
  .gcActionSectionHead > button { flex:0 0 auto; white-space:nowrap; }

  /* No telemóvel não há hover: o × de cada entrada do diário ficaria invisível
     para sempre. Fica sempre à vista, com alvo de toque a sério. */
  .gcUndoButton { opacity:1; width:36px; height:36px; }
  .gcUndoGroup { margin-left:0; width:100%; justify-content:flex-start; }
}


/* DESFAZER O QUE FOI REGISTADO.
   Discreto de propósito: eliminar não é um ato do dia a dia, e um botão com o
   mesmo peso do que faz o caso andar para a frente convidava a enganos - que é
   precisamente o que isto existe para corrigir. */

.gcUndoButton {
  flex:none;
  width:26px;
  height:26px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  padding:0;
  border:0;
  border-radius:var(--r-xs);
  background:transparent;
  color:var(--muted);
  font-size:var(--txt-md);
  line-height:1;
  opacity:0;
  transition:opacity .12s, color .12s, background .12s;
}

/* Aparece ao percorrer a linha a que pertence, e ao chegar-lhe por teclado.
   A lição do arquivo documental: um `.lapis` invisível dentro de um invólucro
   deixa de ser revelado pelo seletor global, por isso aqui a regra é própria e
   nomeia os recipientes onde este botão vive. */
.gcActionHistoryItem:hover .gcUndoButton,
.gcActionHistoryItem:focus-within .gcUndoButton,
.gcNatItem:hover .gcUndoButton,
.gcNatItem:focus-within .gcUndoButton,
.gcNextAction:hover .gcUndoButton,
.gcNextAction:focus-within .gcUndoButton,
.gcUndoButton:focus-visible {
  opacity:1;
}

.gcUndoButton:hover {
  color:var(--vermelho);
  background:color-mix(in srgb,var(--vermelho) 10%,transparent);
}

/* O diário é uma grelha de duas colunas (marca temporal e conteúdo); o botão
   entra numa terceira, encostada à direita e alinhada com o título. */
.gcActionHistoryItem { grid-template-columns:18px minmax(0,1fr) auto; }
.gcActionHistoryItem > .gcUndoButton { align-self:start; }

.gcNextAction .gcUndoButton { position:absolute; top:10px; right:10px; }
.gcNextAction { position:relative; }

/* Nos casos, desfazer fica à direita e separado dos atos que fazem o caso
   avançar: são saídas de sentido contrário e não se misturam no mesmo grupo. */
.gcUndoGroup {
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  margin-left:auto;
}

.gcUndoAction {
  border-color:transparent;
  background:transparent;
  color:var(--muted);
}

.gcUndoAction:hover {
  border-color:color-mix(in srgb,var(--vermelho) 35%,transparent);
  color:var(--vermelho);
}
